ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- To be run on Maude 2.5
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- author: Francisco Duran
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- printSyntaxError functionality by Peter Olveczky
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- narrowing search by Santiago Escobar
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederset show loop stats off .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederset show loop timing off .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederset show advisories off .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maederfmod BANNER is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr STRING .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op banner : -> String .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq banner = "Full Maude 2.5b January 14th 2011" .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederendfm
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder***(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder This file is part of the Maude 2 interpreter.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder Copyright 1997-2003 SRI International, Menlo Park, CA 94025, USA.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder This program is free software; you can redistribute it and/or modify
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder it under the terms of the GNU General Public License as published by
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder the Free Software Foundation; either version 2 inclof the License, or
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder (at your option) any later version.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder This program is distributed in the hope that it will be useful,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder but WITHOUT ANY WARRANTY; without even the implied warranty of
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder MERCHANTABILITY or FITNSS FOR A PARTICULAR PURPOSE. See the
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder GNU General Public License for more details.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder You should have received a copy of the GNU General Public Leicense
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder along with this program; if not, write to the Free Software
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- to do:
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- - use of upView to use Core Maude views (empty views and default sort maps)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder---- To use the upView metalevel function I'll have to be able to complete views.
473b81d33893192056dde74b26b2467f983c102cChristian Maeder---- In Full Maude, sort maps need to be completely specified.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- - bug reported by Min Zhang (see People/Zhang/rand.fm)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- - continue .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- - show search path .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- - show path labels <number> .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- - show components .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- Main changes and bugs fixed:
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder----
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- - December 5th, 2009
473b81d33893192056dde74b26b2467f983c102cChristian Maeder---- - New command (remove id attributes [<module-expr.>] .) that shows the
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- module with the id attributes removed using variants.
473b81d33893192056dde74b26b2467f983c102cChristian Maeder---- - New command (remove assoc attributes [<module-expr.>] .) that shows the
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- module with the assoc (if not with comm) attributes removed using variants.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- - November 22nd, 2009
473b81d33893192056dde74b26b2467f983c102cChristian Maeder---- - A new version of the narrowing/unification stuff by S. Escobar fixing a bug in the
473b81d33893192056dde74b26b2467f983c102cChristian Maeder---- getVariants function and incorporating some other changes.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- To integrate it into Full Maude:
473b81d33893192056dde74b26b2467f983c102cChristian Maeder---- - The TERMSET module is moved, so that now Full Maude uses it instead of its
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- definition of term sets. In the original module by Santiago this module imported
473b81d33893192056dde74b26b2467f983c102cChristian Maeder---- the SUBSTITUTION-HANDLING module; this importation is now commented out.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- - October 4th, 2009
473b81d33893192056dde74b26b2467f983c102cChristian Maeder---- - New (acu coherence completion .) / (acu coherence completion <Module> .) command.
473b81d33893192056dde74b26b2467f983c102cChristian Maeder---- It shows result of completing the flatten version of the module for acu coherence.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- - Setember 11th, 2009
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- - sort Set<List<Type>> replaced by the TypeListSet sort from META-MODULE
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- - sort List<Set<Type>> renamed as TypeSetList
473b81d33893192056dde74b26b2467f983c102cChristian Maeder---- - MAYBE removed, DEFAULT-VALUE used instead. MAYBE{TERM} replaced by DEFAULT-VALUE{Term}
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- - July 28th, 2009
473b81d33893192056dde74b26b2467f983c102cChristian Maeder---- - Some cleaning up. Some of the changes may break other applications.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- - April 18th, 2009
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- - The metadata attribute is now available for operation declarations. Reported by A. Riesco.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- - Fixed bug in the handling of ditto. ctor and metadata attributes were copied.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- - March 9th, 2009
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- - Bug in the search command. The number of solutions argument was used as depth bound. Reported by P. Olveczky.
473b81d33893192056dde74b26b2467f983c102cChristian Maeder---- - New (remove id attributes .) / (remove id attributes <Module> .) command
473b81d33893192056dde74b26b2467f983c102cChristian Maeder---- It shows an equivalent version of the flatten module without ids using variants.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- - March 9th, 2009
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- - Bug in the handling of mbs/cmbs. Sorts in bubbles were not handled correctly. Reported by T. Serbanuta.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- - February 12th, 2009
473b81d33893192056dde74b26b2467f983c102cChristian Maeder---- - The summation module expression now generates a module
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- fmod A + B + C is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- inc A .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- inc B .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- inc C .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- endfm
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- for a module expression A + B + C.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- - February 6th, 2009
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- - Fixed a bug in the id-unify command. Fixed by Santiago Escobar
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- - February 3rd, 2009
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- - Missing equation for downAttr, for the case of nonexec
473b81d33893192056dde74b26b2467f983c102cChristian Maeder---- - Missing declaration in the CONFIGURATION+ module to handle class declarations with no attributes
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- - January 29th, 2009
473b81d33893192056dde74b26b2467f983c102cChristian Maeder---- - The downModule operation has been extended to be able to handle oo metamodules.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- Note that omod metamodules are defined in the UNIT Full Maude module. Therefore,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder---- to be able to do things like
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- (load omod ... endm .)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder---- the current module must be the FM UNIT module or one extending it.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- - January 28th, 2009
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- - A bug in downAttr. Found thanks to a problem with metamodule load. Reported by Peter Olveczky.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- - January 8th, 2009
473b81d33893192056dde74b26b2467f983c102cChristian Maeder---- - A bug in the narrowing functionality. It was narrowing on frozen positions.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- (fixed by Santiago Escobar)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- - December 20th, 2008
473b81d33893192056dde74b26b2467f983c102cChristian Maeder---- - Fixed a bug in the handling of the such-that part of search commands.
473b81d33893192056dde74b26b2467f983c102cChristian Maeder---- Reported by Enrique Martin.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- - December 17th, 2008
473b81d33893192056dde74b26b2467f983c102cChristian Maeder---- - A new search_~>_ family of commands (as for search_=>_) is now available.
473b81d33893192056dde74b26b2467f983c102cChristian Maeder---- The commands are implemented by Santiago Escobar.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- - December 8th, 2008
473b81d33893192056dde74b26b2467f983c102cChristian Maeder---- - A new meta-module load command is available.
473b81d33893192056dde74b26b2467f983c102cChristian Maeder---- It enters a metamodule into Full Maude's database of modules.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- Asked by Peter Olveczky and Jose Meseguer.
473b81d33893192056dde74b26b2467f983c102cChristian Maeder---- The syntax for the new command is (load <meta-module> .), where <meta-module is any term of sort
473b81d33893192056dde74b26b2467f983c102cChristian Maeder---- Module, either a term of the form fmod...endfm or any other expression reducing to a module.
473b81d33893192056dde74b26b2467f983c102cChristian Maeder---- Thus, you can write things like
473b81d33893192056dde74b26b2467f983c102cChristian Maeder----
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- (select META-LEVEL .)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder----
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- (load fmod 'FOO is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- including 'BOOL .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- sorts 'Foo .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- none
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- op 'f : nil -> 'Foo [none] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- op 'g : nil -> 'Foo [none] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- none
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- eq 'f.Foo = 'g.Foo [none] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- endfm .)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder----
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- or
473b81d33893192056dde74b26b2467f983c102cChristian Maeder----
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- (load upModule('NAT, true) .)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder----
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- - September 18th, 2008
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- The search command now supports its complete generality (maximum depth couln't be given). Bug reported by Zhang Min.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- The unify command is now supported.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- Bug in the renaming of partial operations fixed. Reported by Edu Rivera.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- - April 2nd, 2008
473b81d33893192056dde74b26b2467f983c102cChristian Maeder---- Bug in the application of views (and renamings) with kinds in the specification
473b81d33893192056dde74b26b2467f983c102cChristian Maeder---- of op renamings. It appears in an example in which the sort was coming from a theory.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- Reported by A. Boronat.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- - March 24th, 2008
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- Bug in the application of renamings to op hooks. Reported by A. Boronat
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- - March 17th, 2008
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- Bug in the instantiation of parameterized sorts in sort memberships.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- Reported by A. Boronat
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- - March 14th, 2008
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- Bug in the handling of parameterized module expressions. When the parameterers
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- are not right, the system hangs. Reported by A. Verdejo.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- - March 9th, 2008
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- Statement attributes of membership axioms were not correctly handled.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- Reported by A. Riesco & A. Verdejo
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- - Feb 18th, 2008
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- Bug in the renaming of operators
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- - Feb 14th, 2008
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- Statement attributes of membership axioms were not correctly handled.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- Reported by A. Riesco & A. Verdejo
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- - Dec 17th, 2007
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- Rule in CONFIGURATION+ was causing non-termination
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- - Dec 13th, 2007
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- Change in the specification of the transform function to allow new types of modules
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- - Nov 23rd, 2007
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- Bug in the evaluation of expressions in commands (red in FOO + BAR : ...)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- - Oct 5th, 2007
473b81d33893192056dde74b26b2467f983c102cChristian Maeder---- Bug in down of modules (reported by Pedro Ojeda)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- - July 31st, 2007
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- bug in the application of maps to terms
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- - July 31st, 2007
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- bug in getThClasses
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- (reported by Marisol)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- - (october 17th, 2006)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- Changes in Alpha88a's prelude are now correctly handled
473b81d33893192056dde74b26b2467f983c102cChristian Maeder---- - (july 22nd, 2006)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- Bug in the meta-pretty-print of types.
473b81d33893192056dde74b26b2467f983c102cChristian Maeder---- - (july 21st, 2006)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder---- Object-oriented messages where not given the attribute msg
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- (from a comment by Peter).
473b81d33893192056dde74b26b2467f983c102cChristian Maeder---- - (reported by Radestock)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder---- getSort was not handling parameterized sorts appropriately.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- - the set protect/extend/include off commands didn't work if the
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- module not importing was not among the imported ones
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder----
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- Last changes:
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder----
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- - May 21st, 2007
473b81d33893192056dde74b26b2467f983c102cChristian Maeder---- GRAMMAR now extends a module BUBBLES with all bubble delcarations.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- This BUBBLES module is also used to define the GRAMMAR-RED, GRAMMAR-REW, ...
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- modules.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder----
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- - May 19th, 2007
473b81d33893192056dde74b26b2467f983c102cChristian Maeder---- procCommand changed. It now returns a Tuple{Database, QidList} instead of
473b81d33893192056dde74b26b2467f983c102cChristian Maeder---- just a QidList. Since some modules may need to be compiled for the
473b81d33893192056dde74b26b2467f983c102cChristian Maeder---- execution of a command, the resulting database is returned and used as
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- new database.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder----
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- - May 19th, 2007
473b81d33893192056dde74b26b2467f983c102cChristian Maeder---- proRew takes now one argument less. The Bound (4th arg.) was unnecessary.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder----
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- - BOOL is included, instead of protected, into any entered module.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder----
473b81d33893192056dde74b26b2467f983c102cChristian Maeder---- - A new module expression POWER[n] is now available. A module expression
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- POWER[n]{Nat} produces a module
473b81d33893192056dde74b26b2467f983c102cChristian Maeder----
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- fmod POWER[n]{X :: TRIV} is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- inc TUPLE[n]{X, X, ..., X} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- endfm
473b81d33893192056dde74b26b2467f983c102cChristian Maeder----
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- which is then instantiated by the Nat view.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder---- - (July 18th, 2006)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- The summation module expression now generates a module
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- that includes (instead of protect) its summands.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder----
473b81d33893192056dde74b26b2467f983c102cChristian Maeder---- - All sorts declared in modules used for parsing have been renamed.
473b81d33893192056dde74b26b2467f983c102cChristian Maeder---- Any sort S in one of these modules is nos called @S@.
473b81d33893192056dde74b26b2467f983c102cChristian Maeder---- Since some of these modules where added to the user defined modules
473b81d33893192056dde74b26b2467f983c102cChristian Maeder---- for dealing with ups, conditions, etc., he was getting error when
473b81d33893192056dde74b26b2467f983c102cChristian Maeder---- using sorts like Token or OpDecl in his specs.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder----
473b81d33893192056dde74b26b2467f983c102cChristian Maeder---- - Syntax for parameterization has been changed (again) !!! :
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- - module definition: FOO{X :: TRIV, Y :: TRIV}
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- - module instantiation: FOO{Bar,Baz}
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- - parameterized sorts: Foo{Bar,Baz}
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder----
473b81d33893192056dde74b26b2467f983c102cChristian Maeder---- - Any module loaded in Core Maude can be used in Full Maude.
473b81d33893192056dde74b26b2467f983c102cChristian Maeder---- This may be particularly useful in the case of using the model checker.
473b81d33893192056dde74b26b2467f983c102cChristian Maeder----
473b81d33893192056dde74b26b2467f983c102cChristian Maeder---- (mod CHECK-RESP is
473b81d33893192056dde74b26b2467f983c102cChristian Maeder---- protecting MODEL-CHECKER .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder---- ...
473b81d33893192056dde74b26b2467f983c102cChristian Maeder---- endm)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder----
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- (red p(0) |= (<> Qstate) .)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder----
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- - Module renaming and summation consistent with Core Maude's. Built-ins
473b81d33893192056dde74b26b2467f983c102cChristian Maeder---- are now handled at the metalevel, instead of leaving the inclusions to
473b81d33893192056dde74b26b2467f983c102cChristian Maeder---- Core Maude. In this way, they can be renamed and redefined, as in
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- Core Maude. This makes Full Maude slower.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder----
473b81d33893192056dde74b26b2467f983c102cChristian Maeder---- - The lazy evaluation of modules is working. When a module is redefined
473b81d33893192056dde74b26b2467f983c102cChristian Maeder---- its dependent modules are removed only if generated internally. Those
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- introduced by the user save their term representation, from which the
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- whole processing can take place. They will be recompiled by need.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder----
473b81d33893192056dde74b26b2467f983c102cChristian Maeder---- - The form of qualifying sorts coming from the parameters in
473b81d33893192056dde74b26b2467f983c102cChristian Maeder---- parameterized modules has changed AGAIN: The sort Elt coming from
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- X :: TRIV is now written as X$Elt (Note that sort names cannot contain
473b81d33893192056dde74b26b2467f983c102cChristian Maeder---- dots anymore).
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder----
473b81d33893192056dde74b26b2467f983c102cChristian Maeder---- - Tuples are built with the syntax
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- TUPLE[size]{comma_separated_list_of_views}
473b81d33893192056dde74b26b2467f983c102cChristian Maeder---- For example, given a view Nat from TRIV to NAT we can define pairs of
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- nats with TUPLE[2]{Nat, Nat}.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder----
473b81d33893192056dde74b26b2467f983c102cChristian Maeder---- - The model-checker is loaded before the full maude modules, so that
473b81d33893192056dde74b26b2467f983c102cChristian Maeder---- it can be used.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder----
473b81d33893192056dde74b26b2467f983c102cChristian Maeder---- - Object-oriented modules include a module CONFIGURATION+, which
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- imports CONFIGURATION, defines a function
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- op class : Object -> Cid .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- returning the actual class of the given object, and add syntax
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- for objects with no attributes <_:_| >. Classes without attributes
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- are defined with syntax class CLASS-NAME .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder----
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- Things to come:
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder----
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- - Commands missing: continue ...
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder----
473b81d33893192056dde74b26b2467f983c102cChristian Maeder---- - On parameterized theories and views: linked parameters, composed and
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- lifted views, and default views.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder----
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- - ops names in op declarations
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder----
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- known bugs:
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder----
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- - error messages could be given in down commands
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder----
473b81d33893192056dde74b26b2467f983c102cChristian Maeder---- - Check: perhaps we need to convert constants back into vbles in
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- procViewAux
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder----
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- - Parameterized sorts don't work in sort constraints (nor by themselves,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- nor in the conditions of axioms. They are accepted in their equivalent
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- single token form but do not get instantiated
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- cmb (A, B) S : PFun(X, Y) if not(A in dom(S)) /\ S : PFun`(X`,Y`) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder----
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederset include BOOL off .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederset include TRUTH-VALUE on .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederset show advisories off .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maedermod CONFIGURATION is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder sorts Attribute AttributeSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder subsort Attribute < AttributeSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op none : -> AttributeSet [ctor] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op _,_ : AttributeSet AttributeSet -> AttributeSet [ctor assoc comm id: none] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder sorts Oid Cid Object Msg Portal Configuration .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder subsort Object Msg Portal < Configuration .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op <_:_|_> : Oid Cid AttributeSet -> Object [ctor object] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op none : -> Configuration [ctor] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op __ : Configuration Configuration -> Configuration [ctor config assoc comm id: none] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op <> : -> Portal [ctor] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederendm
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maedermod CONFIGURATION+ is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder including CONFIGURATION .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op <_:_|`> : Oid Cid -> Object .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op class : Object -> Cid .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ---- eq < O:Oid : C:Cid | > = < O:Oid : C:Cid | none > .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq class(< O:Oid : C:Cid | A:AttributeSet >) = C:Cid .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederendm
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederset include BOOL on .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederset include TRUTH-VALUE off .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*******************************************************************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*******************************************************************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder***
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** Narrowing and Equational Unification
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** by Santiago Escobar
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder***
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederfmod UNIFICATIONTRIPLE is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder protecting META-LEVEL .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder protecting INT .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder --- UnificationPair --------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ---sorts UnificationPair UnificationPair? .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ---op {_,_} : Substitution Nat -> UnificationPair [ctor] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ---subsort UnificationPair < UnificationPair? .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ---op noUnifier : -> UnificationPair? [ctor] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op getSubst : UnificationPair -> Substitution .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getSubst({S1:Substitution, N:Nat}) = S1:Substitution .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op getNextVar : UnificationPair -> Nat .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getNextVar({S1:Substitution, N:Nat}) = N:Nat .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder --- UnificationTriple --------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ---sorts UnificationTriple UnificationTriple? .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ---op {_,_,_} : Substitution Substitution Nat -> UnificationTriple [ctor] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ---subsort UnificationTriple < UnificationTriple? .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ---op noUnifier : -> UnificationTriple? [ctor] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op getLSubst : UnificationTriple -> Substitution .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getLSubst({S1:Substitution, S2:Substitution, N:Nat}) = S1:Substitution .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op getRSubst : UnificationTriple -> Substitution .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getRSubst({S1:Substitution, S2:Substitution, N:Nat}) = S2:Substitution .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op getNextVar : UnificationTriple -> Nat .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getNextVar({S1:Substitution, S2:Substitution, N:Nat}) = N:Nat .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederendfm
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederfmod TERM-HANDLING is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder protecting META-TERM .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder protecting META-LEVEL .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder protecting EXT-BOOL . *** For and-then
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var T T' T'' : Term .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var C C' : Constant .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var QIL : QidList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var N N' : Nat .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var NL NL' : NatList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var Q F F' : Qid .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var AtS : AttrSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var EqS : EquationSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var Eq : Equation .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var Cond : Condition .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var TP : Type .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var TPL TPL' : TypeList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var TL TL' TL'' : TermList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var B : Bool .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var V V' : Variable .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var Ct : Context .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var CtL : NeCTermList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var NeTL : NeTermList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var M : Module .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** root ******************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op root : Term -> Qid .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq root(V) = V .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq root(C) = C .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq root(F[TL]) = F .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** elem_of_ *****************************************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op elem_of_ : Nat TermList ~> Term .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq elem 1 of (T,TL) = T .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq elem s(s(N)) of (T,TL) = elem s(N) of TL .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** subTerm_of_ *****************************************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op subTerm_of_ : NatList Term ~> Term .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq subTerm NL of T = subTerm* NL of T .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op subTerm*_of_ : NatList Term ~> Term .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq subTerm* nil of T = T .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq subTerm* N NL of (F[TL]) = subTerm* NL of (elem N of TL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** ToDo: UPGRADE THIS NOTION TO MODULO AC *********************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** is_subTermOf_ *****************************************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op is_subTermOf_ : Term TermList -> Bool .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq is T subTermOf T = true .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq is T subTermOf (F[TL]) = is T subTermOf TL .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq is T subTermOf (T',NeTL)
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder = is T subTermOf T' or-else is T subTermOf NeTL .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq is T subTermOf T' = false [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** noVarOfSort_In_ *****************************************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op noVarOfSort_In_ : Type TermList -> Bool .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq noVarOfSort T:Type In V = getType(V) =/= T:Type .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq noVarOfSort T:Type In (F[TL]) = noVarOfSort T:Type In TL .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq noVarOfSort T:Type In (T',NeTL)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = noVarOfSort T:Type In T' and noVarOfSort T:Type In NeTL .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq noVarOfSort T:Type In X:TermList = true [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** findSubTermOf_In_ ***********************************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op findSubTermOf_In_ : NeCTermList TermList ~> Term .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq findSubTermOf (TL, [], TL') In (TL, T, TL') = T .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq findSubTermOf (TL, F[CtL], TL'') In (TL, F[TL'], TL'')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = findSubTermOf CtL In TL' .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** replaceElem_of_by_ ****************************************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op replaceElem_of_by_ : Nat TermList Term ~> TermList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq replaceElem 1 of (T,TL) by T' = (T',TL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq replaceElem s(s(N)) of (T,TL) by T' = (T,replaceElem s(N) of TL by T') .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** replaceSubTerm_of_by_ *************************************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op replaceSubTerm_of_by_ : NatList TermList Term ~> TermList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq replaceSubTerm nil of T by T' = T' .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq replaceSubTerm N NL of (F[TL]) by T'
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = F[replaceSubTermL N NL of TL by T'] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op replaceSubTermL_of_by_ : NatList TermList Term ~> TermList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq replaceSubTermL 1 NL of (T,TL) by T'
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (replaceSubTerm NL of T by T', TL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq replaceSubTermL s(s(N)) NL of (T,TL) by T'
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (T,replaceSubTermL s(N) NL of TL by T') .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op replaceTerm_by_in_ : Term Term TermList ~> TermList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq replaceTerm T by T' in T = T' .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq replaceTerm T by T' in (F[TL]) = F[replaceTerm T by T' in TL] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq replaceTerm T by T' in T'' = T'' [owise] .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq replaceTerm T by T' in (T'',NeTL)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (replaceTerm T by T' in T'',replaceTerm T by T' in NeTL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** context replacement **************************************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op _[_] : Context Context -> Context .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op _[_] : NeCTermList Context -> NeCTermList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq [] [ Ct ] = Ct .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq (F[CtL])[ Ct ] = F[ CtL [ Ct ] ] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq (CtL,NeTL) [Ct] = (CtL [Ct] ), NeTL .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq (NeTL,CtL) [Ct] = NeTL, (CtL [Ct] ) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op _[_] : Context Term -> Term .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op _[_] : NeCTermList Term -> TermList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq [] [ T ] = T .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq (F[CtL])[ T ] = F[ CtL [ T ] ] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq (CtL,NeTL) [T] = (CtL [T] ), NeTL .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq (NeTL,CtL) [T] = NeTL, (CtL [T] ) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** is_substring_ *****************************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op is_substring_ : Qid Qid -> Bool [memo] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq is F:Qid substring F':Qid
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = rfind(string(F':Qid), string(F:Qid), length(string(F':Qid))) =/= notFound .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** addprefix_To_ addsufix_To_ *****************************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op addprefix_To_ : Qid Variable -> Variable [memo] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq addprefix Q To V
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = qid(string(Q) + string(getName(V)) + ":" + string(getType(V))) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op addprefix_To_ : Qid Constant -> Constant [ditto] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq addprefix Q To F
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if noUnderBar(F) and getName(F) :: Qid then
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if getType(F) :: Type then
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder qid(string(Q) + string(getName(F)) + "." + string(getType(F)))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder qid(string(Q) + string(getName(F)))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder qid(string(Q) + string(F))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op addsufix_To_ : Qid Variable -> Variable [memo] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq addsufix Q To V
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = qid(string(getName(V)) + string(Q) + ":" + string(getType(V))) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op addsufix_To_ : Qid Constant -> Constant [ditto] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq addsufix Q To F
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if noUnderBar(F) and getName(F) :: Qid then
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if getType(F) :: Type then
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder qid(string(getName(F)) + string(Q) + "." + string(getType(F)))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder qid(string(getName(F)) + string(Q))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder qid(string(F) + string(Q))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op addType_ToVar_ : Type Qid -> Variable [memo] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq addType TP:Qid ToVar V:Qid
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = qid(string(V:Qid) + ":" + string(TP:Qid)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** noUnderBar (auxiliary) ****************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op noUnderBar : Qid -> Bool .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq noUnderBar(F)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = rfind(string(F), "_", length(string(F))) == notFound .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** addType ******************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op addType : Qid Type -> Qid .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq addType(F,TP)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if noUnderBar(F) and getName(F) :: Qid then
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder qid( string(getName(F)) + "." + string(TP) )
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder qid( string(F) + "." + string(TP) )
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** addTypeVar ******************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op addTypeVar : Qid Type -> Qid .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq addTypeVar(F,TP)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = qid( string(F) + ":" + string(TP) ) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** createTerm ******************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op createTerm : Qid TypeList -> Term .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederendfm
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederfmod SUBSTITUTION-HANDLING is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder protecting META-TERM .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder protecting META-LEVEL .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder protecting TERM-HANDLING .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var S S' Subst Subst' : Substitution .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var V V' : Variable .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var C C' : Constant .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var Ct : Context .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var T T' T1 T2 T1' T2' T1'' T2'' : Term .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var F F' : Qid .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var TL TL' TL1 TL2 TL1' TL2' : TermList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var Att : AttrSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var RLS : RuleSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var Rl : Rule .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var TP : Type .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var N : Nat .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var NeTL : NeTermList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var CtL : NeCTermList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder --- Apply Substitution to Term --------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op _<<_ : Term Substitution -> Term .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq TL << none = TL .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq C << Subst = C .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq V << ((V <- T) ; Subst) = T .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq V << Subst = V [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq F[TL] << Subst = F[TL << Subst] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op _<<_ : TermList Substitution -> TermList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq (T, NeTL) << Subst = (T << Subst, NeTL << Subst) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq empty << Subst = empty .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op _<<_ : Context Substitution -> Context .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq Ct << none = Ct .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq [] << Subst = [] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq F[CtL,NeTL] << Subst = F[CtL << Subst,NeTL << Subst] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq F[NeTL,CtL] << Subst = F[NeTL << Subst, CtL << Subst] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq F[Ct] << Subst = F[Ct << Subst] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op _<<_ : Substitution Substitution -> Substitution .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq S << (none).Substitution = S .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq (none).Substitution << S = (none).Substitution .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq ((V' <- T) ; S') << S
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (V' <- (T << S))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ;
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder (S' << S) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder --- Combine Substitutions -------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op _.._ : Substitution Substitution -> Substitution .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq S .. S' = (S << S') ; S' .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder --- Restrict Assignments to Variables in a Term ----------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op _|>_ : Substitution TermList -> Substitution .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq Subst |> TL = Subst |>* Vars(TL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op _|>*_ : Substitution TermList -> Substitution .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder--- eq noMatch |>* TL = noMatch .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq Subst |>* TL = Subst |>** TL [none] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op _|>**_[_] : Substitution TermList
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder Substitution -> Substitution .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq none |>** TL [Subst']
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = Subst' .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq ((V <- V) ; Subst) |>** TL [Subst']
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = Subst |>** TL [Subst'] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq ((V <- T') ; Subst) |>** TL [Subst']
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = Subst |>** TL
473b81d33893192056dde74b26b2467f983c102cChristian Maeder [Subst' ; if any V in TL then (V <- T') else none fi] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder --- Remove Variables from list ----------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op _intersect_ : TermList TermList -> TermList .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq (TL1,T,TL2) intersect (TL1',T,TL2')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (T,((TL1,TL2) intersect (TL1',TL2'))) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq TL intersect TL' = empty [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op _intersectVar_ : TermList TermList -> TermList .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq TL1 intersectVar TL2
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = TL1 intersectVar* Vars(TL2) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op _intersectVar*_ : TermList TermList -> TermList .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq (T,TL1) intersectVar* TL2
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (if any Vars(T) in TL2 then T else empty fi,TL1 intersectVar* TL2) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq empty intersectVar* TL2
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = empty .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder --- Variables ---
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op Vars : GTermList -> TermList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq Vars((T,TL:GTermList)) = VarsTerm(T),Vars(TL:GTermList) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq Vars((Ct,TL:GTermList)) = VarsTerm(Ct),Vars(TL:GTermList) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq Vars(empty) = empty .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op VarsTerm : Term -> TermList . ---warning memo
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq VarsTerm(V) = V .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq VarsTerm(F[TL:TermList]) = Vars(TL:TermList) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq VarsTerm(C) = empty .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op VarsTerm : Context -> TermList . ---warning memo
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq VarsTerm(F[TL:GTermList]) = Vars(TL:GTermList) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder --- membership ---
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op _in_ : Term TermList -> Bool .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq T in (TL,T,TL') = true .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq T in TL = false [owise] .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder --- membership ---
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op any_in_ : TermList TermList -> Bool . --- [memo] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq any empty in TL = false .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq any (TL1,T,TL2) in (TL1',T,TL2') = true .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq any TL in TL' = false [owise] .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder --- membership ---
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op all_in_ : TermList TermList -> Bool . --- [memo] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq all empty in TL = true .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq all (TL1,T,TL2) in (TL1',T,TL2') = all (TL1,TL2) in (TL1',T,TL2') .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq all TL in TL' = false [owise] .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder --- Occur check ---
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op allVars_inVars_ : GTermList GTermList -> Bool .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq allVars TL:GTermList inVars TL':GTermList
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = all Vars(TL:GTermList) in Vars(TL':GTermList) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op anyVars_inVars_ : GTermList GTermList -> Bool .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq anyVars TL:GTermList inVars TL':GTermList
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = any Vars(TL:GTermList) in Vars(TL':GTermList) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder--- op dom : Substitution -> TermList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder--- eq dom(V <- T ; Subst) = (V,dom(Subst)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder--- eq dom(none) = empty .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder--- op range : Substitution -> TermList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder--- eq range(V <- T ; Subst) = (T,range(Subst)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder--- eq range(none) = empty .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op rangeVars : Substitution -> TermList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq rangeVars(V <- T ; Subst) = (Vars(T),rangeVars(Subst)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq rangeVars(none) = empty .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op dom_inVars_ : Substitution TermList -> Bool .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq dom Subst inVars TL = dom Subst in Vars(TL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op dom_in_ : Substitution TermList -> Bool .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq dom (V <- T ; Subst) in (TL1,V,TL2) = true .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq dom Subst in TL = false [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op range_inVars_ : Substitution TermList -> Bool .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq range Subst inVars TL = range Subst in Vars(TL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op range_in_ : Substitution TermList -> Bool .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq range (V <- T ; Subst) in TL
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = any Vars(T) in TL or-else range Subst in TL .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq range none in TL
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = false .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederendfm
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederfmod TERMSET is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder protecting META-LEVEL .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder protecting SUBSTITUTION-HANDLING .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder sort TermSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder subsort Term < TermSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op emptyTermSet : -> TermSet [ctor] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op _|_ : TermSet TermSet -> TermSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [ctor assoc comm id: emptyTermSet format (d n d d)] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq X:Term | X:Term = X:Term .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op _in_ : Term TermSet -> Bool .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq T:Term in (T:Term | TS:TermSet) = true .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq T:Term in TS:TermSet = false [owise] .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op TermSet : TermList -> TermSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq TermSet(empty)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = emptyTermSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq TermSet((T:Term,TL:TermList))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = T:Term | TermSet(TL:TermList) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederendfm
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederfmod RENAMING is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder protecting META-TERM .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder protecting META-LEVEL .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder protecting TERM-HANDLING .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder protecting SUBSTITUTION-HANDLING .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder protecting TERMSET .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder protecting CONVERSION .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder protecting QID .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder protecting INT .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder protecting UNIFICATIONTRIPLE .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var S S' Subst Subst' : Substitution .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var V V' : Variable .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var C C' : Constant .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var CtL : NeCTermList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var Ct : Context .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var T T' T1 T2 T1' T2' T1'' T2'' : Term .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var F F' : Qid .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var TL TL' TL'' TL''' : TermList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var Att : AttrSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var RLS : RuleSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var Rl : Rule .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var TP : Type .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var N N' : Nat .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var NeTL : NeTermList .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var Q Q' : Qid .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var IL : ImportList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var SS : SortSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var SSDS : SubsortDeclSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var OPDS : OpDeclSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var MAS : MembAxSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var EQS : EquationSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var TPL : TypeList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder --- Extra filter for substitutions ------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op _|>_ : Substitution Nat -> Substitution .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq Subst |> N
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = Subst |>* N [none] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op _|>*_[_] : Substitution Nat Substitution -> Substitution .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq none |>* N [Subst']
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = Subst' .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq ((V <- T') ; Subst) |>* N [Subst']
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = Subst |>* N
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [Subst' ; if highestVar(V) < N then (V <- T') else none fi ] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder --- instantiatesAbove -----------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op _instantiatesAbove_ : Substitution Nat -> Bool .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq none instantiatesAbove N = false .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq ((V <- T') ; Subst) instantiatesAbove N
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = highestVar(V) >= N
473b81d33893192056dde74b26b2467f983c102cChristian Maeder or-else
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder Subst instantiatesAbove N .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ----------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder --- New Renaming Utilities -------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op highestVar : GTermList -> Nat .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq highestVar(TL:GTermList)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = highestVar(TL:GTermList,0) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op highestVarTerm : Term -> Nat . ---warning memo
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op highestVarTerm : Context -> Nat . ---warning memo
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq highestVarTerm([]) = 0 .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq highestVarTerm(C) = 0 .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq highestVarTerm(V)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if rfind(string(V), "#", length(string(V))) =/= notFound
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder and
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder rfind(string(V), ":", length(string(V))) =/= notFound
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder and
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder rat(substr(string(V),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder rfind(string(V), "#", length(string(V))) + 1,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder rfind(string(V), ":", length(string(V))) + (- 1))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ,10)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder :: Nat
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then rat(substr(string(V),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder rfind(string(V), "#", length(string(V))) + 1,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder rfind(string(V), ":", length(string(V))) + (- 1))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ,10)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else 0
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq highestVarTerm(F[TL:GTermList])
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = highestVar(TL:GTermList,0) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op highestVar : GTermList Nat -> Nat .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq highestVar(empty,N)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = N .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq highestVar((Ct,TL:GTermList),N)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = highestVar(TL:GTermList,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if highestVarTerm(Ct) > N then highestVarTerm(Ct) else N fi
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq highestVar((T,TL:GTermList),N)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = highestVar(TL:GTermList,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if highestVarTerm(T) > N then highestVarTerm(T) else N fi
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder --- For substitutions
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op highestVar : Substitution -> Nat . --- [memo] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq highestVar(Subst)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = highestVar(Subst,0) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op highestVar : Substitution Nat -> Nat .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq highestVar((none).Substitution,N) = N .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq highestVar(V <- T ; Subst,N)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = highestVar(Subst,highestVar((T,V),N)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder --- Renaming ------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op newVar : Nat TypeList -> TermList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq newVar(N,nil) = empty .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq newVar(N,TP TPL) = (newVar*(N,TP),newVar(s(N),TPL)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op newVar* : Nat Type -> Variable .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq newVar*(N,TP)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = qid("#" + string(N,10) + ":" + string(TP)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op simplifyVars : TermList -> TermList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq simplifyVars(TL) = TL << 0 < .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op _<<`(_`)< : TermList GTermList -> TermList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq X:TermList <<(TL:GTermList)<
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = X:TermList << highestVar(TL:GTermList) + 1 < .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op _<<_ : TermList UnificationPair -> TermList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq TL << {Subst,N} = TL << Subst .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op _<<_ : TermList UnificationTriple -> TermList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq TL << {Subst,Subst',N} = TL << (Subst ; Subst') .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op _<<_ : Substitution UnificationTriple -> Substitution .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq S:Substitution << {Subst,Subst',N} = S:Substitution << (Subst ; Subst') .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op _<<_< : TermList Nat -> TermList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq TL << N < = TL << (TL << { none, N } <) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op _<<_< : TermList UnificationPair -> UnificationPair . ***Huge [memo] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq C << {S,N} < = {S,N} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq F[TL] << {S,N} < = TL << {S,N} < .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq V << {S,N} <
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if not (dom S inVars V)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then {S ; V <- newVar(N,getType(V)), N + 1}
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else {S,N}
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq (T,TL:NeTermList) << {S,N} <
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = TL:NeTermList << (T << {S,N} < ) < .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq empty << {S,N} <
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = {S,N} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederendfm
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederfmod SUBSTITUTIONSET is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder protecting SUBSTITUTION-HANDLING .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder protecting META-LEVEL .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder protecting TERMSET .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder protecting RENAMING .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder sort SubstitutionSet NeSubstitutionSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder subsort Substitution < NeSubstitutionSet < SubstitutionSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op empty : -> SubstitutionSet [ctor] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op _|_ : SubstitutionSet SubstitutionSet -> SubstitutionSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [ctor assoc comm id: empty format (d n d d)] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op _|_ : NeSubstitutionSet SubstitutionSet -> NeSubstitutionSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [ctor ditto] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq X:Substitution | X:Substitution = X:Substitution .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars SS SS' : SubstitutionSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars S S' Subst : Substitution .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars T T' : Term .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars TL TL' : TermList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars N N' : Nat .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var V : Variable .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op _<<_ : Substitution SubstitutionSet -> SubstitutionSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq S << empty = empty .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq S << (S' | SS') = (S << S') | (S << SS') if SS' =/= empty .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op _..._ : SubstitutionSet [SubstitutionSet]
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder -> SubstitutionSet [strat (1) gather (e E)] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq empty ... SS':[SubstitutionSet] = empty .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq (S | SS) ... SS':[SubstitutionSet]
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (S ...' SS':[SubstitutionSet])
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder |
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder (SS ... SS':[SubstitutionSet]) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op _...'_ : Substitution SubstitutionSet -> SubstitutionSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq S ...' empty
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = empty .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq S ...' (S' | SS')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (S .. S')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder |
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder (S ...' SS') .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op _|>_ : SubstitutionSet TermList -> SubstitutionSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq (empty).SubstitutionSet |> TL = empty .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq (S | SS:NeSubstitutionSet) |> TL
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (S |> TL) | (SS:NeSubstitutionSet |> TL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op _|>_ : SubstitutionSet Nat -> SubstitutionSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq SS:NeSubstitutionSet |> N
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = SS:NeSubstitutionSet |> (0,N) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op _|>`(_,_`) : SubstitutionSet Nat Nat -> SubstitutionSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq (empty).SubstitutionSet |> (N,N') = empty .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq (S | SS:NeSubstitutionSet) |> (N,N')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (S |> (N,N')) | (SS:NeSubstitutionSet |> (N,N')) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op _|>`(_,_`) : Substitution Nat Nat -> Substitution .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq none |> (N,N') = none .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq ((V <- T') ; Subst) |> (N,N')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if N <= highestVar(V) and highestVar(V) <= N'
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then (V <- T')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else none
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ; (Subst |> (N,N')) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op filter_by!InVars_ : SubstitutionSet TermList -> SubstitutionSet .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq filter (empty).SubstitutionSet by!InVars TL
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (empty).SubstitutionSet .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq filter (S | SS) by!InVars TL
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if dom S inVars TL
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then empty
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else S
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder | filter SS by!InVars TL .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op _==* none : SubstitutionSet -> Bool .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq (none | SS) ==* none = SS ==* none .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq (empty).SubstitutionSet ==* none = true .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq SS ==* none = false [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op |_| : SubstitutionSet -> Nat .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq | (empty).SubstitutionSet | = 0 .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq | (S | SS) | = s(| SS |) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederendfm
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederfmod UNIFICATIONPAIRSET is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder protecting SUBSTITUTIONSET .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder protecting RENAMING .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder protecting UNIFICATIONTRIPLE .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars V V' : Variable .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars U U' : UnificationPair .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars US US' : UnificationPairSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars S S' S1 S1' S2 S2' : Substitution .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var SS : SubstitutionSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars N N' N1 N2 : Nat .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars T T' : Term .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var TL : TermList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var M : Module .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder --- Combine UnificationPair ---------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op _.._ : UnificationPair UnificationPair -> UnificationPair .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq {S,N} .. {S',N'} = {S .. S',max(N,N')} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder --- Detect used variables ----------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op dom_inVars_ : UnificationPair TermList -> Bool . --- [memo] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq dom {S,N} inVars TL = dom S inVars TL .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder --- UnificationPairSet --------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder sort UnificationPairSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder subsort UnificationPair < UnificationPairSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op empty : -> UnificationPairSet [ctor] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op _|_ : UnificationPairSet UnificationPairSet -> UnificationPairSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [ctor assoc comm id: empty format (d n d d)] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq X:UnificationPair | X:UnificationPair = X:UnificationPair .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op _..._ : UnificationPairSet [UnificationPairSet]
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder -> UnificationPairSet [strat (1) gather (e E)] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq (empty).UnificationPairSet ... US':[UnificationPairSet]
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (empty).UnificationPairSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq (U | US) ... US':[UnificationPairSet]
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (U ...' US':[UnificationPairSet])
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder |
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder (US ... US':[UnificationPairSet]) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op _...'_ : UnificationPair UnificationPairSet -> UnificationPairSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq U ...' (empty).UnificationPairSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (empty).UnificationPairSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq U ...' (U' | US')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (U .. U')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder |
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder (U ...' US') .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder --- Restriction -----------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op _|>_ : UnificationPairSet TermList -> UnificationPairSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq (empty).UnificationPairSet |> TL = empty .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq ({S,N} | US) |> TL = {(S |> TL),N} | (US |> TL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op filter_by!InVars_ : UnificationPairSet TermList
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder -> UnificationPairSet .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq filter (empty).UnificationPairSet by!InVars TL
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (empty).UnificationPairSet .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq filter (U | US) by!InVars TL
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if dom U inVars TL
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then empty
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else U
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder | filter US by!InVars TL .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op toUnificationPair[_]`(_`) : Nat SubstitutionSet -> UnificationPairSet .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq toUnificationPair[N](empty)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = empty .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq toUnificationPair[N](S | SS)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = {S,highestVar(S,N)}
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder | toUnificationPair[N](SS) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op toSubstitution : UnificationPairSet -> SubstitutionSet .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq toSubstitution((empty).UnificationPairSet)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = empty .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq toSubstitution({S,N} | US)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = S | toSubstitution(US) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op _in_ : UnificationPair UnificationPairSet -> Bool .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq X:UnificationPair in (X:UnificationPair | XS:UnificationPairSet) = true .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq X:UnificationPair in XS:UnificationPairSet = false [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederendfm
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederfmod UNIFICATIONTRIPLESET is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder protecting SUBSTITUTIONSET .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder protecting RENAMING .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder protecting UNIFICATIONPAIRSET .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars V V' : Variable .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var C : Constant .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var F : Qid .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars U U' : UnificationTriple .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars US US' : UnificationTripleSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars S S' S1 S1' S2 S2' : Substitution .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var SS : SubstitutionSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var SSe : NeSubstitutionSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars N N' N1 N2 NextVar : Nat .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars T T' : Term .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var TL : TermList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var NeTL : NeTermList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var M : Module .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder --- Combine UnificationPair ---------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op _.._ : UnificationTriple UnificationTriple -> UnificationTriple .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq {S1,S1',N1} .. {S2,S2',N2} = {S1 .. S2,S1' .. S2',max(N1,N2)} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder --- UnificationPairSet --------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder sort UnificationTripleSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder subsort UnificationTriple < UnificationTripleSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op empty : -> UnificationTripleSet [ctor] .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op _|_ : UnificationTripleSet UnificationTripleSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder -> UnificationTripleSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [ctor assoc comm id: empty format (d n d d)] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq X:UnificationTriple | X:UnificationTriple = X:UnificationTriple .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op _..._ : UnificationTripleSet [UnificationTripleSet]
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder -> UnificationTripleSet [strat (1) gather (e E)] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq (empty).UnificationTripleSet ... US':[UnificationTripleSet]
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (empty).UnificationTripleSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq (U | US) ... US':[UnificationTripleSet]
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (U ...' US':[UnificationTripleSet])
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder |
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder (US ... US':[UnificationTripleSet]) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op _...'_ : UnificationTriple UnificationTripleSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder -> UnificationTripleSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq U ...' (empty).UnificationTripleSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (empty).UnificationTripleSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq U ...' (U' | US')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (U .. U')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder |
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder (U ...' US') .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder --- convert -----------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op split : UnificationPair Nat -> UnificationTriple .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq split({none,N},N') = {none,none,N} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq split({(V <- T') ; S,N},N')
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = if highestVar(V) < N'
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then {(V <- T'),none,N}
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else {none,(V <- T'),N}
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder .. split({S,N},N') .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op toUnificationTriple[_]`(_`) :
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder Nat SubstitutionSet -> UnificationTripleSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq toUnificationTriple[N](SS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = toUnificationTriple*[N](SS,empty) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op toUnificationTriple*[_]`(_,_`) :
473b81d33893192056dde74b26b2467f983c102cChristian Maeder Nat SubstitutionSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder UnificationTripleSet -> UnificationTripleSet .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq toUnificationTriple*[N](empty,US)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = US .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq toUnificationTriple*[N](S | SS,US)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = toUnificationTriple*[N](SS, US | {none,S,highestVar(S,N)}) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op toUnificationTriple[_,_]`(_`) :
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder Nat Nat SubstitutionSet -> UnificationTripleSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq toUnificationTriple[NextVar,N](SS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = toUnificationTriple*[NextVar,N](SS,empty) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op toUnificationTriple*[_,_]`(_,_`) :
473b81d33893192056dde74b26b2467f983c102cChristian Maeder Nat Nat SubstitutionSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder UnificationTripleSet -> UnificationTripleSet .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq toUnificationTriple*[NextVar,N](empty,US)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = US .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq toUnificationTriple*[NextVar,N](S | SS,US)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = toUnificationTriple*[NextVar,N](SS,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder US | split({S,highestVar(S,N)},NextVar)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op toUnificationTriple[_,_,_]`(_`) :
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder Term Term Nat SubstitutionSet -> UnificationTripleSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq toUnificationTriple[T,T',N](SS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = toUnificationTriple*[T,T',N](SS,empty) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op toUnificationTriple*[_,_,_]`(_,_`) :
473b81d33893192056dde74b26b2467f983c102cChristian Maeder Term Term Nat SubstitutionSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder UnificationTripleSet -> UnificationTripleSet .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq toUnificationTriple*[T,T',N](empty,US)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = US .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq toUnificationTriple*[T,T',N](S | SS,US)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = toUnificationTriple*[T,T',N](SS, US | {S |> T,S |> T',highestVar(S,N)}) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op toSubstitution : UnificationTripleSet -> SubstitutionSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq toSubstitution(US)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = toSubstitution*(US,empty) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op toSubstitution* : UnificationTripleSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder SubstitutionSet -> SubstitutionSet .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq toSubstitution*((empty).UnificationTripleSet,SS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = SS .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq toSubstitution*({S,S',N} | US,SS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = toSubstitution*(US,SS | (S ; S')) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op _in_ : UnificationTriple UnificationTripleSet -> Bool .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq X:UnificationTriple
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder in (X:UnificationTriple | XS:UnificationTripleSet) = true .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq X:UnificationTriple in XS:UnificationTripleSet = false [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder --- restriction ---------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op _|>_ : UnificationTripleSet TermList -> UnificationTripleSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq US |> TL
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = US *|> TL [empty] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op _*|>_[_] : UnificationTripleSet TermList
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder UnificationTripleSet -> UnificationTripleSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq (empty).UnificationTripleSet *|> TL [US']
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = US' .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq ({S,S',N} | US) *|> TL [US']
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = US *|> TL [US' | {(S |> TL),(S' |> TL),N} ] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op _filterBy_ : UnificationTripleSet Nat -> UnificationTripleSet .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq US filterBy NextVar
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = US filterBy* NextVar [empty] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op _filterBy*_[_] : UnificationTripleSet Nat
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder UnificationTripleSet -> UnificationTripleSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq empty filterBy* NextVar [US']
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = US' .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq ({S,S',N} | US) filterBy* NextVar [US']
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = US filterBy* NextVar
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [US' | if S instantiatesAbove NextVar then empty else {S,S',N} fi ] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederendfm
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederfmod MODULE-HANDLING is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder protecting INT .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder protecting META-LEVEL .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder protecting EXT-BOOL . *** From Full Maude
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder protecting SUBSTITUTION-HANDLING .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder protecting UNIFICATIONTRIPLESET .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var T T' T'' T1 T2 Lhs Rhs : Term .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var C C' : Constant .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var QIL : QidList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var N N' : Nat .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var NL NL' : NatList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var Q F F' : Qid .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars AtS AtS' : AttrSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var EqS : EquationSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var Eq : Equation .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var RlS : RuleSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var Rl : Rule .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var Cond : Condition .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var TP TP' : Type .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var TPL TPL' : TypeList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ---var TPL TPL' : ETypeList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ---var ET ET' : EType .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var VDS OPDS : OpDeclSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var OPD : OpDecl .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var M : Module .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var TL TL' TL'' : TermList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var B : Bool .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var V V' : Variable .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var I : Int .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** canonice ******************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op canonice : Module Term -> Term .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder ----eq canonice(M, T) = getTerm(metaReduce(eraseRls(eraseEqs(M)), T)) .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq canonice(M, T) = getTerm(metaNormalize(M, T)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** typeLeq **************************************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op typeLeq : Module TypeList TypeList ~> Bool [memo] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq typeLeq(M,TP:Sort TPL,TP':Sort TPL')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = sortLeq(M,TP:Sort,TP':Sort) and typeLeq(M,TPL,TPL') .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq typeLeq(M,TP:Sort TPL,TP':Kind TPL')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = getKind(M,TP:Sort) == TP':Kind
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder and typeLeq(M,TPL,TPL') .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq typeLeq(M,TP:Kind TPL,TP':Sort TPL')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = false .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq typeLeq(M,TP:Kind TPL,TP':Kind TPL')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = TP:Kind == TP':Kind and typeLeq(M,TPL,TPL') .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq typeLeq(M,nil,nil)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = true .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** getTypes **************************************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op getTypes : Module TermList -> TypeList . ---Memo is huge
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getTypes(M, (T, TL)) = leastSort(M, T) getTypes(M, TL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getTypes(M, empty) = nil .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** getFrozen ************************************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op getFrozen : Module Qid TypeList -> NatList [memo] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getFrozen(M,F,TPL) = getFrozen(getOpsOfQid(M,F,TPL)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op getFrozen : OpDeclSet -> NatList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getFrozen((op F : TPL -> TP [frozen(NL) AtS] .) OPDS) = NL .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getFrozen(OPDS) = 0 [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** inNatList ************************************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op _inNatList_ : Nat NatList -> Bool .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq N inNatList (NL N NL') = true .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq N inNatList NL = false [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** membership ************************************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op _in_ : Type TypeList ~> Bool .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq TP in (TPL TP TPL') = true .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq TP in TPL = false [owise] .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** isConstructor ******************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op isConstructor : Module Term -> Bool .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op isConstructor : Module Qid TypeList -> Bool [memo] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op isConstructor : OpDeclSet -> Bool .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq isConstructor(M,V) = false .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq isConstructor(M,C) = isConstructor(M,C,nil) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq isConstructor(M,F[TL]) = isConstructor(M,F,getTypes(M,TL)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq isConstructor(M,F,TPL)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = getEqsOfQid(M,F,TPL) == none or-else isConstructor(getOpsOfQid(M,F,TPL)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq isConstructor((op F : TPL -> TP [ctor AtS] .) OPDS) = true .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq isConstructor(OPDS) = false [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** getOpsOfType ***********************************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op getOpsOfType : Module Type -> OpDeclSet [memo] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op getOpsOfType : Module OpDeclSet Type -> OpDeclSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getOpsOfType(M,TP) = getOpsOfType(M,getOps(M),TP) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getOpsOfType(M,((op F : TPL -> TP [AtS] .) OPDS),TP')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if TP == TP'
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then (op F : TPL -> TP [AtS] .)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder getOpsOfType(M,OPDS,TP')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else getOpsOfType(M,OPDS,TP')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getOpsOfType(M,OPDS,TP)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = none
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [owise] .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** getOpsOfQid ***********************************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op getOpsOfQid : Module Qid TypeList -> OpDeclSet [memo] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op getOpsOfQid : Module OpDeclSet Qid TypeList -> OpDeclSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq getOpsOfQid(M,F,TPL)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if getOpsOfQid(M,getOps(M),F,TPL) =/= none
473b81d33893192056dde74b26b2467f983c102cChristian Maeder then getOpsOfQid(M,getOps(M),F,TPL)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder else getOpsOfQid(M,getOps(M),F,restrict TPL To 2)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getOpsOfQid(M,((op F : TPL -> TP [AtS] .) OPDS),F,TPL')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if eSameKind(M,TPL,TPL')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then (op F : TPL -> TP [AtS] .)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder getOpsOfQid(M,OPDS,F,TPL')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else getOpsOfQid(M,OPDS,F,TPL')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getOpsOfQid(M,OPDS,F',TPL')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = none
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op restrict_To_ : TypeList Nat -> TypeList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq restrict nil To NL = nil .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq restrict TPL To 0 = nil .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq restrict (TP,TPL) To s(N) = (TP, restrict TPL To N) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** getEqsOfQid ******************************************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op getEqsOfQid : Module Qid TypeList -> EquationSet [memo] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op getEqsOfQid : Module Qid TypeList EquationSet -> EquationSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getEqsOfQid(M, F,TPL) = getEqsOfQid(M, F, TPL, getEqs(M)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq getEqsOfQid(M, F, TPL, (eq C = T' [AtS] .) EqS )
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (eq C = T' [AtS] .) getEqsOfQid(M, F, TPL, EqS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if F == C .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq getEqsOfQid(M, F, TPL, (eq F[TL] = T' [AtS] .) EqS )
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (eq F[TL] = T' [AtS] .) getEqsOfQid(M, F, TPL, EqS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if eSameKind(M,getTypes(M,TL),TPL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq getEqsOfQid(M, F, TPL, (ceq C = T' if Cond [AtS] .) EqS )
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (ceq C = T' if Cond [AtS] .) getEqsOfQid(M, F, TPL, EqS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if F == C .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq getEqsOfQid(M, F, TPL, (ceq F[TL] = T' if Cond [AtS] .) EqS )
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (ceq F[TL] = T' if Cond [AtS] .) getEqsOfQid(M, F, TPL, EqS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if eSameKind(M,getTypes(M,TL),TPL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getEqsOfQid(M, F, TPL, Eq EqS )
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = getEqsOfQid(M, F, TPL, EqS) [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getEqsOfQid(M, F, TPL, (none).EquationSet )
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (none).EquationSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** getTypesOfQid ****************************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op getTypesOfQid : Module Qid TypeList -> TypeSet [memo] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op getTypesOfQid : OpDeclSet -> TypeSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getTypesOfQid(M,F,TPL) = getTypesOfQid(getOpsOfQid(M,F,TPL)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getTypesOfQid((op F : TPL -> TP [AtS] .) OPDS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = TP ; getTypesOfQid(OPDS) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getTypesOfQid((none).OpDeclSet) = (none).TypeSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** filterConstructorSymbols ************************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op filterConstructorSymbols : OpDeclSet -> OpDeclSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq filterConstructorSymbols(((op F : TPL -> TP [AtS] .) OPDS))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if isConstructor((op F : TPL -> TP [AtS] .) none)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then (op F : TPL -> TP [AtS] .)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder filterConstructorSymbols(OPDS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else filterConstructorSymbols(OPDS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq filterConstructorSymbols(none)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = none .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** filterDefinedSymbols *****************************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op filterDefinedSymbols : OpDeclSet -> OpDeclSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq filterDefinedSymbols(((op F : TPL -> TP [ctor AtS] .) OPDS))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = filterDefinedSymbols(OPDS) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq filterDefinedSymbols(((op F : TPL -> TP [AtS] .) OPDS))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (op F : TPL -> TP [AtS] .) filterDefinedSymbols(OPDS) [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq filterDefinedSymbols(none)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = none .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** isCommutative ******************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op isCommutative : Module Term -> Bool .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op isCommutative : Module Qid TypeList -> Bool [memo] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op isCommutative : OpDeclSet -> Bool .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq isCommutative(M,V) = false .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq isCommutative(M,C) = false .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq isCommutative(M,F[TL]) = isCommutative(M,F,getTypes(M,TL)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq isCommutative(M,F,TPL) = isCommutative(getOpsOfQid(M,F,TPL)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq isCommutative((op F : TPL -> TP [comm AtS] .) OPDS) = true .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq isCommutative(OPDS) = false [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** isAssociative ******************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op isAssociative : Module Term -> Bool .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op isAssociative : Module Qid TypeList -> Bool [memo] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op isAssociative : OpDeclSet -> Bool .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq isAssociative(M,V) = false .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq isAssociative(M,C) = false .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq isAssociative(M,F[TL]) = isAssociative(M,F,getTypes(M,TL)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq isAssociative(M,F,TPL) = isAssociative(getOpsOfQid(M,F,TPL)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq isAssociative((op F : TPL -> TP [assoc AtS] .) OPDS) = true .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq isAssociative(OPDS) = false [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** getIdSymbol ******************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op getIdSymbol : Module Term ~> Term .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getIdSymbol(M,F[TL]) = getIdSymbol(M,F,getTypes(M,TL)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op getIdSymbol : Module Qid TypeList ~> Term [memo] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getIdSymbol(M,F,TPL) = getIdSymbol(getOpsOfQid(M,F,TPL)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op getIdSymbol : OpDeclSet ~> Term .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getIdSymbol((op F : TPL -> TP [id(T) AtS] .) OPDS) = T .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op getLeftIdSymbol : Module Term ~> Term .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getLeftIdSymbol(M,F[TL]) = getLeftIdSymbol(M,F,getTypes(M,TL)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op getLeftIdSymbol : Module Qid TypeList ~> Term .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getLeftIdSymbol(M,F,TPL) = getLeftIdSymbol(getOpsOfQid(M,F,TPL)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op getLeftIdSymbol : OpDeclSet ~> Term .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getLeftIdSymbol((op F : TPL -> TP [left-id(T) AtS] .) OPDS) = T .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op getRightIdSymbol : Module Term ~> Term .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getRightIdSymbol(M,F[TL]) = getRightIdSymbol(M,F,getTypes(M,TL)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op getRightIdSymbol : Module Qid TypeList ~> Term .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getRightIdSymbol(M,F,TPL) = getRightIdSymbol(getOpsOfQid(M,F,TPL)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op getRightIdSymbol : OpDeclSet ~> Term .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getRightIdSymbol((op F : TPL -> TP [right-id(T) AtS] .) OPDS) = T .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** eSameKind ******************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op eSameKind : Module TypeList TypeList -> Bool [memo] .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq eSameKind(M,TP TPL, TP' TPL')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = sameKind(M,TP,TP') and eSameKind(M,TPL,TPL') .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq eSameKind(M,nil,nil) = true .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq eSameKind(M,TPL,nil) = true .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq eSameKind(M,nil,TPL') = true .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ---eq eSameKind(M,TPL,TPL') = false [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** eqs2rls *******************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder sort EqSet&RlsSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op {_,_} : EquationSet RuleSet -> EqSet&RlsSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op getEqs : EqSet&RlsSet -> EquationSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getEqs({EqS,RlS}) = EqS .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op getRls : EqSet&RlsSet -> RuleSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getRls({EqS,RlS}) = RlS .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op eqs2rls# : EquationSet -> EqSet&RlsSet [memo] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq eqs2rls#(none) = {none,none} .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq eqs2rls#((eq Lhs = Rhs [AtS label('homomorphism)] .) EqS)
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder = {(eq Lhs = Rhs [AtS label('homomorphism)] .) getEqs(eqs2rls#(EqS)),
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder getRls(eqs2rls#(EqS))
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder } .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq eqs2rls#((eq Lhs = Rhs [AtS] .) EqS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = {getEqs(eqs2rls#(EqS)),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder (rl Lhs => Rhs [AtS] .) getRls(eqs2rls#(EqS))
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder } [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq eqs2rls#((ceq Lhs = Rhs if Cond [AtS] .) EqS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = {getEqs(eqs2rls#(EqS)),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder (crl Lhs => Rhs if Cond [AtS] .) getRls(eqs2rls#(EqS))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder } .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op eqs2rls : SModule -> SModule .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq eqs2rls(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder mod Q:Qid is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder IL:ImportList
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder sorts S:SortSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder S:SubsortDeclSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder O:OpDeclSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder M:MembAxSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder E:EquationSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder R:RuleSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder endm)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = mod (addsufix '-EQS2RLS To Q:Qid) is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder IL:ImportList
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder sorts S:SortSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder S:SubsortDeclSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder O:OpDeclSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder M:MembAxSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder getEqs(eqs2rls#(E:EquationSet))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder getRls(eqs2rls#(E:EquationSet))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder endm .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op eqs2rls : FModule -> FModule .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq eqs2rls(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fmod Q:Qid is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder IL:ImportList
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder sorts S:SortSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder S:SubsortDeclSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder O:OpDeclSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder M:MembAxSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder E:EquationSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder endfm)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = mod (addsufix '-EQS2RLS To Q:Qid) is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder IL:ImportList
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder sorts S:SortSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder S:SubsortDeclSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder O:OpDeclSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder M:MembAxSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder getEqs(eqs2rls#(E:EquationSet))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder getRls(eqs2rls#(E:EquationSet))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder endm .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder *** getEqsNoLabel *******************************
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder op getEqsNoLabel : Module -> EquationSet .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq getEqsNoLabel(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fmod Q:Qid is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder IL:ImportList
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder sorts S:SortSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder S:SubsortDeclSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder O:OpDeclSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder M:MembAxSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder E:EquationSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder endfm)
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder = getEqsNoLabel(E:EquationSet) .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq getEqsNoLabel(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder mod Q:Qid is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder IL:ImportList
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder sorts S:SortSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder S:SubsortDeclSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder O:OpDeclSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder M:MembAxSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder E:EquationSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder R:RuleSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder endm)
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder = getEqsNoLabel(E:EquationSet) .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder op getEqsNoLabel : EquationSet -> EquationSet [memo] .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq getEqsNoLabel(none) = none .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq getEqsNoLabel((eq Lhs = Rhs [AtS label('homomorphism)] .) EqS)
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder = getEqsNoLabel(EqS) .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq getEqsNoLabel((eq Lhs = Rhs [AtS] .) EqS)
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder = (eq Lhs = Rhs [AtS] .) getEqsNoLabel(EqS) [owise] .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq getEqsNoLabel((ceq Lhs = Rhs if Cond [AtS] .) EqS)
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder = (ceq Lhs = Rhs if Cond [AtS] .) getEqsNoLabel(EqS) .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder *** getEqsNoLabel *******************************
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder op onlyEqsNoLabel : Module -> Module .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq onlyEqsNoLabel(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fmod Q:Qid is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder IL:ImportList
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder sorts S:SortSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder S:SubsortDeclSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder O:OpDeclSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder M:MembAxSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder E:EquationSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder endfm)
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder = fmod Q:Qid is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder IL:ImportList
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder sorts S:SortSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder S:SubsortDeclSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder O:OpDeclSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder M:MembAxSet
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder getEqsNoLabel(E:EquationSet)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder endfm .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq onlyEqsNoLabel(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder mod Q:Qid is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder IL:ImportList
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder sorts S:SortSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder S:SubsortDeclSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder O:OpDeclSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder M:MembAxSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder E:EquationSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder R:RuleSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder endm)
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder = mod Q:Qid is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder IL:ImportList
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder sorts S:SortSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder S:SubsortDeclSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder O:OpDeclSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder M:MembAxSet
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder getEqsNoLabel(E:EquationSet)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder R:RuleSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder endm .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder *** getEqsNoLabel *******************************
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder op getEqsLabel : Module -> EquationSet .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq getEqsLabel(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fmod Q:Qid is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder IL:ImportList
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder sorts S:SortSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder S:SubsortDeclSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder O:OpDeclSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder M:MembAxSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder E:EquationSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder endfm)
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder = getEqsLabel(E:EquationSet) .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq getEqsLabel(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder mod Q:Qid is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder IL:ImportList
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder sorts S:SortSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder S:SubsortDeclSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder O:OpDeclSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder M:MembAxSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder E:EquationSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder R:RuleSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder endm)
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder = getEqsLabel(E:EquationSet) .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder op getEqsLabel : EquationSet -> EquationSet [memo] .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq getEqsLabel(none) = none .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq getEqsLabel((eq Lhs = Rhs [AtS label('homomorphism)] .) EqS)
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder = (eq Lhs = Rhs [AtS] .) getEqsLabel(EqS) .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq getEqsLabel((eq Lhs = Rhs [AtS] .) EqS)
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder = getEqsLabel(EqS) [owise] .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq getEqsLabel((ceq Lhs = Rhs if Cond [AtS] .) EqS)
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder = getEqsLabel(EqS) .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder *** getEqsNoLabel *******************************
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder op onlyEqsLabel : Module -> Module .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq onlyEqsLabel(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fmod Q:Qid is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder IL:ImportList
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder sorts S:SortSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder S:SubsortDeclSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder O:OpDeclSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder M:MembAxSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder E:EquationSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder endfm)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = fmod Q:Qid is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder IL:ImportList
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder sorts S:SortSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder S:SubsortDeclSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder O:OpDeclSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder M:MembAxSet
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder getEqsLabel(E:EquationSet)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder endfm .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq onlyEqsLabel(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder mod Q:Qid is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder IL:ImportList
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder sorts S:SortSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder S:SubsortDeclSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder O:OpDeclSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder M:MembAxSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder E:EquationSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder R:RuleSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder endm)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = mod Q:Qid is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder IL:ImportList
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder sorts S:SortSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder S:SubsortDeclSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder O:OpDeclSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder M:MembAxSet
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder getEqsLabel(E:EquationSet)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder R:RuleSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder endm .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** rls2eqs *******************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op rls2eqs# : RuleSet -> EquationSet [memo] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq rls2eqs#(none) = none .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq rls2eqs#((rl Lhs => Rhs [AtS] .) RlS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (eq Lhs = Rhs [AtS] .) rls2eqs#(RlS) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq rls2eqs#((crl Lhs => Rhs if Cond [AtS] .) RlS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (ceq Lhs = Rhs if Cond [AtS] .) rls2eqs#(RlS) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op rls2eqs : SModule -> SModule .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq rls2eqs(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder mod Q:Qid is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder IL:ImportList
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder sorts S:SortSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder S:SubsortDeclSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder O:OpDeclSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder M:MembAxSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder E:EquationSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder R:RuleSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder endm)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = mod (addsufix '-RLS2EQS To Q:Qid) is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder IL:ImportList
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder sorts S:SortSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder S:SubsortDeclSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder O:OpDeclSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder M:MembAxSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder E:EquationSet rls2eqs#(R:RuleSet)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder none
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder endm .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** flipRls *******************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op flipRls : RuleSet -> RuleSet [memo] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq flipRls(none) = none .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq flipRls((rl Lhs => Rhs [AtS] .) RlS:RuleSet)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if all Vars(Lhs) in Vars(Rhs)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder then (rl Rhs => Lhs [removeNonExec(AtS)] .)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else (rl Rhs => Lhs [nonexec removeNonExec(AtS)] .)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder fi
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder flipRls(RlS:RuleSet) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq flipRls((crl Lhs => Rhs if Cond [AtS] .) RlS:RuleSet)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if all Vars(Lhs) in Vars(Rhs)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then (crl Rhs => Lhs if Cond [removeNonExec(AtS)] .)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else (crl Rhs => Lhs if Cond [nonexec removeNonExec(AtS)] .)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder fi
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder flipRls(RlS:RuleSet) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op removeNonExec : AttrSet -> AttrSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq removeNonExec(nonexec AtS) = AtS .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq removeNonExec(AtS) = AtS [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op flipRls : SModule -> SModule .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq flipRls(mod Q:Qid is IL:ImportList sorts S:SortSet . S:SubsortDeclSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder O:OpDeclSet M:MembAxSet E:EquationSet R:RuleSet endm)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = mod (addsufix '-FLIPPEDRLS To Q:Qid)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder is IL:ImportList sorts S:SortSet . S:SubsortDeclSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder O:OpDeclSet M:MembAxSet E:EquationSet flipRls(R:RuleSet) endm .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** addOp *******************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op addOps : OpDeclSet SModule -> SModule [memo] .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq addOps(OO:OpDeclSet,mod Q:Qid is IL:ImportList sorts S:SortSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder S:SubsortDeclSet O:OpDeclSet M:MembAxSet E:EquationSet R:RuleSet endm)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = mod (addsufix '-ADDEDOPS To Q:Qid)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder is IL:ImportList sorts S:SortSet . S:SubsortDeclSet
473b81d33893192056dde74b26b2467f983c102cChristian Maeder override(O:OpDeclSet,OO:OpDeclSet)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder M:MembAxSet E:EquationSet R:RuleSet endm .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op override : OpDeclSet OpDeclSet -> OpDeclSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq override(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder (op F : TPL -> TP [AtS] .) O:OpDeclSet,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder (op F : TPL -> TP [AtS'] .) O':OpDeclSet)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = override(O:OpDeclSet,(op F : TPL -> TP [AtS'] .) O':OpDeclSet) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq override(O:OpDeclSet,O':OpDeclSet)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = O:OpDeclSet O':OpDeclSet [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** addRules *******************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op addRules : RuleSet SModule -> SModule [memo] .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq addRules(RR:RuleSet,mod Q:Qid is IL:ImportList sorts S:SortSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder S:SubsortDeclSet O:OpDeclSet M:MembAxSet E:EquationSet R:RuleSet endm)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = mod (addsufix '-ADDEDRLS To Q:Qid)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder is IL:ImportList sorts S:SortSet . S:SubsortDeclSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder O:OpDeclSet M:MembAxSet E:EquationSet (R:RuleSet RR:RuleSet) endm .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** addEqs *******************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op addEqs : EquationSet SModule -> SModule [memo] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op addEqs : EquationSet FModule -> FModule [memo] .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq addEqs(ES:EquationSet,mod Q:Qid is IL:ImportList sorts S:SortSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder S:SubsortDeclSet O:OpDeclSet M:MembAxSet E:EquationSet R:RuleSet endm)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = mod (addsufix '-ADDEDEQS To Q:Qid)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder is IL:ImportList sorts S:SortSet . S:SubsortDeclSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder O:OpDeclSet M:MembAxSet (E:EquationSet ES:EquationSet) R:RuleSet endm .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq addEqs(ES:EquationSet,fmod Q:Qid is IL:ImportList sorts S:SortSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder S:SubsortDeclSet O:OpDeclSet M:MembAxSet E:EquationSet endfm)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = fmod (addsufix '-ADDEDEQS To Q:Qid)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder is IL:ImportList sorts S:SortSet . S:SubsortDeclSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder O:OpDeclSet M:MembAxSet (E:EquationSet ES:EquationSet) endfm .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** addSorts *******************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op addSorts : SortSet SModule -> SModule [memo] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op addSorts : SortSet FModule -> FModule [memo] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq addSorts(X:SortSet,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder mod Q:Qid is IL:ImportList sorts S:SortSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder S:SubsortDeclSet O:OpDeclSet M:MembAxSet E:EquationSet R:RuleSet endm)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = mod Q:Qid is IL:ImportList sorts (X:SortSet ; S:SortSet) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder S:SubsortDeclSet O:OpDeclSet M:MembAxSet E:EquationSet R:RuleSet endm .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq addSorts(X:SortSet,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder fmod Q:Qid is IL:ImportList sorts S:SortSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder S:SubsortDeclSet O:OpDeclSet M:MembAxSet E:EquationSet endfm)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = fmod Q:Qid is IL:ImportList sorts (X:SortSet ; S:SortSet) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder S:SubsortDeclSet O:OpDeclSet M:MembAxSet E:EquationSet endfm .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** putFrozen *******************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op putFrozen : NatList Qid TypeList SModule -> SModule [memo] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq putFrozen(NL,F,TPL,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder (mod Q:Qid is IL:ImportList sorts S:SortSet . S:SubsortDeclSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ((op F : TPL -> TP [frozen(NL') AtS] .) O:OpDeclSet)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder M:MembAxSet E:EquationSet R:RuleSet endm))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = (mod (addsufix F To (addsufix '-FROZEN# To Q:Qid))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder is IL:ImportList sorts S:SortSet . S:SubsortDeclSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ((op F : TPL -> TP [frozen(NL) AtS] .) O:OpDeclSet)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder M:MembAxSet E:EquationSet R:RuleSet endm) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq putFrozen(NL,F,TPL,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder (mod Q:Qid is IL:ImportList sorts S:SortSet . S:SubsortDeclSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ((op F : TPL -> TP [AtS] .) O:OpDeclSet)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder M:MembAxSet E:EquationSet R:RuleSet endm))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = (mod (addsufix F To (addsufix '-FROZEN# To Q:Qid))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder is IL:ImportList sorts S:SortSet . S:SubsortDeclSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ((op F : TPL -> TP [frozen(NL) AtS] .) O:OpDeclSet)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder M:MembAxSet E:EquationSet R:RuleSet endm) [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** putStrat *******************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op putStrat : NatList Qid TypeList SModule -> SModule [memo] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq putStrat(NL,F,TPL,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder (mod Q:Qid is IL:ImportList sorts S:SortSet . S:SubsortDeclSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ((op F : TPL -> TP [strat(NL') AtS] .) O:OpDeclSet)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder M:MembAxSet E:EquationSet R:RuleSet endm))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = (mod (addsufix F To (addsufix '-STRAT#EQ# To Q:Qid))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder is IL:ImportList sorts S:SortSet . S:SubsortDeclSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ((op F : TPL -> TP [strat(NL) AtS] .) O:OpDeclSet)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder M:MembAxSet E:EquationSet R:RuleSet endm) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq putStrat(NL,F,TPL,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder (mod Q:Qid is IL:ImportList sorts S:SortSet . S:SubsortDeclSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ((op F : TPL -> TP [AtS] .) O:OpDeclSet)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder M:MembAxSet E:EquationSet R:RuleSet endm))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = (mod (addsufix F To (addsufix '-STRAT#EQ# To Q:Qid))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder is IL:ImportList sorts S:SortSet . S:SubsortDeclSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ((op F : TPL -> TP [strat(NL) AtS] .) O:OpDeclSet)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder M:MembAxSet E:EquationSet R:RuleSet endm) [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op putStrat : NatList Qid TypeList FModule -> FModule [memo] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq putStrat(NL,F,TPL,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder (fmod Q:Qid is IL:ImportList sorts S:SortSet . S:SubsortDeclSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ((op F : TPL -> TP [strat(NL') AtS] .) O:OpDeclSet)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder M:MembAxSet E:EquationSet endfm))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = (fmod (addsufix F To (addsufix '-STRAT#EQ# To Q:Qid))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder is IL:ImportList sorts S:SortSet . S:SubsortDeclSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ((op F : TPL -> TP [strat(NL) AtS] .) O:OpDeclSet)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder M:MembAxSet E:EquationSet endfm) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq putStrat(NL,F,TPL,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder (fmod Q:Qid is IL:ImportList sorts S:SortSet . S:SubsortDeclSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ((op F : TPL -> TP [AtS] .) O:OpDeclSet)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder M:MembAxSet E:EquationSet endfm))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = (fmod (addsufix F To (addsufix '-STRAT#EQ# To Q:Qid))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder is IL:ImportList sorts S:SortSet . S:SubsortDeclSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ((op F : TPL -> TP [strat(NL) AtS] .) O:OpDeclSet)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder M:MembAxSet E:EquationSet endfm) [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** clearFrozen *******************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op clearFrozen : NatList Qid TypeList SModule -> SModule [memo] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq clearFrozen(NL,F,TPL,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder (mod Q:Qid is IL:ImportList sorts S:SortSet . S:SubsortDeclSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ((op F : TPL -> TP [frozen(NL') AtS] .) O:OpDeclSet)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder M:MembAxSet E:EquationSet R:RuleSet endm))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (mod Q:Qid is IL:ImportList sorts S:SortSet . S:SubsortDeclSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ((op F : TPL -> TP [AtS] .) O:OpDeclSet)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder M:MembAxSet E:EquationSet R:RuleSet endm) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq clearFrozen(NL,F,TPL,M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = M [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** clearEqsFrozen *******************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op clearEqsFrozen : SModule -> SModule [memo] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq clearEqsFrozen(M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = clearEqsFrozen*(M) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op clearEqsFrozen* : SModule -> SModule .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq clearEqsFrozen*(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder (mod Q:Qid is IL:ImportList sorts S:SortSet . S:SubsortDeclSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ((op F : TPL -> TP [frozen(NL') AtS] .) O:OpDeclSet)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder M:MembAxSet
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ((eq F[TL] = Rhs [AtS'] .) E:EquationSet)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder R:RuleSet endm))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = clearEqsFrozen*(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder (mod Q:Qid is IL:ImportList sorts S:SortSet . S:SubsortDeclSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ((op F : TPL -> TP [AtS] .) O:OpDeclSet)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder M:MembAxSet
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ((eq F[TL] = Rhs [AtS'] .) E:EquationSet)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder R:RuleSet endm)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq clearEqsFrozen*(M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = M [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** clearAllFrozen *******************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op clearAllFrozen : SModule -> SModule [memo] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq clearAllFrozen(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder (mod Q:Qid is IL:ImportList sorts S:SortSet . S:SubsortDeclSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder O:OpDeclSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder M:MembAxSet E:EquationSet R:RuleSet endm))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = (mod (addsufix '-CLEARFROZEN To Q:Qid)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder is IL:ImportList sorts S:SortSet . S:SubsortDeclSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder clearAllFrozen(O:OpDeclSet)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder M:MembAxSet E:EquationSet R:RuleSet endm) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op clearAllFrozen : FModule -> FModule [memo] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq clearAllFrozen(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder (fmod Q:Qid is IL:ImportList sorts S:SortSet . S:SubsortDeclSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder O:OpDeclSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder M:MembAxSet E:EquationSet endfm))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = (fmod (addsufix '-CLEARFROZEN To Q:Qid)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder is IL:ImportList sorts S:SortSet . S:SubsortDeclSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder clearAllFrozen(O:OpDeclSet)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder M:MembAxSet E:EquationSet endfm) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op clearAllFrozen : OpDeclSet -> OpDeclSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq clearAllFrozen(none)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = none .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq clearAllFrozen(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder (op F : TPL -> TP [frozen(NL) AtS] .) O:OpDeclSet)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (op F : TPL -> TP [AtS] .)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder clearAllFrozen(O:OpDeclSet) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq clearAllFrozen(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder (op F : TPL -> TP [AtS] .) O:OpDeclSet)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (op F : TPL -> TP [AtS] .)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder clearAllFrozen(O:OpDeclSet) [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** anyNonExec *******************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op anyNonExec : SModule -> Bool [memo] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq anyNonExec(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder (mod Q:Qid is IL:ImportList sorts S:SortSet . S:SubsortDeclSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder O:OpDeclSet M:MembAxSet E:EquationSet R:RuleSet endm))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = anyNonExec(E:EquationSet) or-else anyNonExec(R:RuleSet) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op anyNonExec : RuleSet -> Bool .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq anyNonExec(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder (rl Lhs => Rhs [nonexec AtS] .) R:RuleSet)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = true .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq anyNonExec(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder (crl Lhs => Rhs if Cond [nonexec AtS] .) R:RuleSet)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = true .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq anyNonExec(R:RuleSet)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = false [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op anyNonExec : EquationSet -> Bool .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq anyNonExec(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder (eq Lhs = Rhs [nonexec AtS] .) R:EquationSet)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = true .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq anyNonExec(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder (ceq Lhs = Rhs if Cond [nonexec AtS] .) R:EquationSet)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = true .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq anyNonExec(R:EquationSet)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = false [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** clearNonExec *******************************
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder op clearNonExec : SModule -> SModule [memo] .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq clearNonExec(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder (mod Q:Qid is IL:ImportList sorts S:SortSet . S:SubsortDeclSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder O:OpDeclSet M:MembAxSet E:EquationSet R:RuleSet endm))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = (mod (addsufix '-CLEARNONEXEC To Q:Qid)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder is IL:ImportList sorts S:SortSet . S:SubsortDeclSet
473b81d33893192056dde74b26b2467f983c102cChristian Maeder O:OpDeclSet M:MembAxSet
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder clearNonExec(E:EquationSet) clearNonExec(R:RuleSet) endm) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder op clearNonExec : FModule -> FModule [memo] .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq clearNonExec(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder (fmod Q:Qid is IL:ImportList sorts S:SortSet . S:SubsortDeclSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder O:OpDeclSet M:MembAxSet E:EquationSet endfm))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = (fmod (addsufix '-CLEARNONEXEC To Q:Qid)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder is IL:ImportList sorts S:SortSet . S:SubsortDeclSet
473b81d33893192056dde74b26b2467f983c102cChristian Maeder O:OpDeclSet M:MembAxSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder clearNonExec(E:EquationSet) endfm) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op clearNonExec : RuleSet -> RuleSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq clearNonExec((none).RuleSet)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (none).RuleSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq clearNonExec(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder (rl Lhs => Rhs [nonexec AtS] .) R:RuleSet)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (rl Lhs => Rhs [AtS] .)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder clearNonExec(R:RuleSet) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq clearNonExec(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder (rl Lhs => Rhs [AtS] .) R:RuleSet)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (rl Lhs => Rhs [AtS] .)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder clearNonExec(R:RuleSet) [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op clearNonExec : EquationSet -> EquationSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq clearNonExec((none).EquationSet)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (none).EquationSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq clearNonExec(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder (eq Lhs = Rhs [nonexec AtS] .) R:EquationSet)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (eq Lhs = Rhs [AtS] .)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder clearNonExec(R:EquationSet) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq clearNonExec(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder (eq Lhs = Rhs [AtS] .) R:EquationSet)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (eq Lhs = Rhs [AtS] .)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder clearNonExec(R:EquationSet) [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** eraseRls *******************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op eraseRls : Module -> Module [memo] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq eraseRls(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder (mod Q:Qid is IL:ImportList sorts S:SortSet . S:SubsortDeclSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder O:OpDeclSet M:MembAxSet E:EquationSet R:RuleSet endm))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (mod Q:Qid is IL:ImportList sorts S:SortSet . S:SubsortDeclSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder O:OpDeclSet M:MembAxSet E:EquationSet none endm) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq eraseRls(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder (fmod Q:Qid is IL:ImportList sorts S:SortSet . S:SubsortDeclSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder O:OpDeclSet M:MembAxSet E:EquationSet endfm))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (fmod Q:Qid is IL:ImportList sorts S:SortSet . S:SubsortDeclSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder O:OpDeclSet M:MembAxSet E:EquationSet endfm) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** eraseEqs *******************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op eraseEqs : Module -> Module [memo] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq eraseEqs(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder (mod Q:Qid is IL:ImportList sorts S:SortSet . S:SubsortDeclSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder O:OpDeclSet M:MembAxSet E:EquationSet R:RuleSet endm))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (mod Q:Qid is IL:ImportList sorts S:SortSet . S:SubsortDeclSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder O:OpDeclSet M:MembAxSet none R:RuleSet endm) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq eraseEqs(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder (fmod Q:Qid is IL:ImportList sorts S:SortSet . S:SubsortDeclSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder O:OpDeclSet M:MembAxSet E:EquationSet endfm))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (fmod Q:Qid is IL:ImportList sorts S:SortSet . S:SubsortDeclSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder O:OpDeclSet M:MembAxSet none endfm) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** flatten ******************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op flatten : Module TermList -> TermList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq flatten(M,V) = V .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq flatten(M,C) = C .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq flatten(M,F[TL:NeTermList])
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if isAssociative(M,F,getTypes(M,TL:NeTermList))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then F[aliens(TL:NeTermList,F)]
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else F[flatten(M,TL:NeTermList)]
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq flatten(M,(T:Term,TL:NeTermList))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (flatten(M,T:Term),flatten(M,TL:NeTermList)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op aliens : TermList Qid -> TermList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq aliens(empty,F) = empty .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq aliens((F[TL':NeTermList],TL:TermList),F)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = aliens((TL':NeTermList,TL:TermList),F) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq aliens((T:Term,TL:TermList),F)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (T:Term,aliens(TL:TermList,F)) [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** unflatten ******************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op unflatten : Module TermList -> TermList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq unflatten(M,T) = unflatten*(M,T) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op unflatten* : Module TermList -> TermList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq unflatten*(M,V) = V .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq unflatten*(M,C) = C .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq unflatten*(M,F[TL:NeTermList])
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if isAssociative(M,F,getTypes(M,TL:NeTermList))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then unflatten**(M,F,TL:NeTermList)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else F[unflatten*(M,TL:NeTermList)]
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq unflatten*(M,(T:Term,TL:NeTermList))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (unflatten*(M,T:Term),unflatten*(M,TL:NeTermList)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op unflatten** : Module Qid TermList -> TermList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq unflatten**(M,F,(T1:Term,TL:NeTermList))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = F[unflatten*(M,T1:Term),unflatten**(M,F,TL:NeTermList)] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq unflatten**(M,F,T:Term)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = unflatten*(M,T:Term) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** wrapRules_bySymbol_ *******************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op wrapRules_bySymbol_ : SModule Qid -> SModule [memo] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq wrapRules
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder (mod Q:Qid is IL:ImportList sorts S:SortSet . S:SubsortDeclSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder O:OpDeclSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder M:MembAxSet E:EquationSet R:RuleSet endm)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder bySymbol F:Qid
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (mod (addsufix F:Qid To (addsufix '-WRAPPED# To Q:Qid))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder is IL:ImportList sorts S:SortSet . S:SubsortDeclSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder O:OpDeclSet
473b81d33893192056dde74b26b2467f983c102cChristian Maeder M:MembAxSet E:EquationSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder wrapRules R:RuleSet bySymbol F:Qid endm) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op wrapRules_bySymbol_ : RuleSet Qid -> RuleSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq wrapRules none bySymbol F:Qid = none .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq wrapRules ((rl Lhs => Rhs [AtS] .) RlS:RuleSet) bySymbol F:Qid
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = (rl F:Qid[Lhs] => F:Qid[Rhs] [AtS] .)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder wrapRules RlS:RuleSet bySymbol F:Qid .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq wrapRules ((crl Lhs => Rhs if Cond [AtS] .) RlS:RuleSet) bySymbol F:Qid
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = (crl F:Qid[Lhs] => F:Qid[Rhs] if Cond [AtS] .)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder wrapRules RlS:RuleSet bySymbol F:Qid .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op toSModule : FModule -> SModule .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq toSModule(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fmod Q:Qid is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder IL:ImportList
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder sorts S:SortSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder S:SubsortDeclSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder O:OpDeclSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder M:MembAxSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder E:EquationSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder endfm)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = mod (addsufix '-CONVERTED#SMODULE To Q:Qid) is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder IL:ImportList
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder sorts S:SortSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder S:SubsortDeclSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder O:OpDeclSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder M:MembAxSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder E:EquationSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder none
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder endm .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op newName : Qid SModule -> SModule .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op newName : Qid FModule -> FModule .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq newName(F:Qid,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fmod Q:Qid is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder IL:ImportList
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder sorts S:SortSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder S:SubsortDeclSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder O:OpDeclSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder M:MembAxSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder E:EquationSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder endfm)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = fmod F:Qid is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder IL:ImportList
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder sorts S:SortSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder S:SubsortDeclSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder O:OpDeclSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder M:MembAxSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder E:EquationSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder endfm .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq newName(F:Qid,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder mod Q:Qid is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder IL:ImportList
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder sorts S:SortSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder S:SubsortDeclSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder O:OpDeclSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder M:MembAxSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder E:EquationSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder R:RuleSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder endm)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = mod F:Qid is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder IL:ImportList
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder sorts S:SortSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder S:SubsortDeclSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder O:OpDeclSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder M:MembAxSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder E:EquationSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder R:RuleSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder endm .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ***
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op removeBoolEqs : Module -> Module [memo] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq removeBoolEqs(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder (mod Q:Qid is IL:ImportList sorts S:SortSet . S:SubsortDeclSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder O:OpDeclSet M:MembAxSet E:EquationSet R:RuleSet endm))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (mod Q:Qid is IL:ImportList sorts S:SortSet . S:SubsortDeclSet
473b81d33893192056dde74b26b2467f983c102cChristian Maeder O:OpDeclSet M:MembAxSet
473b81d33893192056dde74b26b2467f983c102cChristian Maeder removeBoolEqs(E:EquationSet)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder R:RuleSet endm) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq removeBoolEqs(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder (fmod Q:Qid is IL:ImportList sorts S:SortSet . S:SubsortDeclSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder O:OpDeclSet M:MembAxSet E:EquationSet endfm))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (fmod Q:Qid is IL:ImportList sorts S:SortSet . S:SubsortDeclSet
473b81d33893192056dde74b26b2467f983c102cChristian Maeder O:OpDeclSet M:MembAxSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder removeBoolEqs(E:EquationSet) endfm) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op removeBoolEqs : EquationSet -> EquationSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq removeBoolEqs((eq '_and_[TL] = Rhs [AtS] .) EqS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = removeBoolEqs(EqS) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq removeBoolEqs((eq 'not_[TL] = Rhs [AtS] .) EqS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = removeBoolEqs(EqS) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq removeBoolEqs((eq '_or_[TL] = Rhs [AtS] .) EqS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = removeBoolEqs(EqS) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq removeBoolEqs((eq '_xor_[TL] = Rhs [AtS] .) EqS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = removeBoolEqs(EqS) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq removeBoolEqs((eq '_implies_[TL] = Rhs [AtS] .) EqS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = removeBoolEqs(EqS) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq removeBoolEqs(EqS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = EqS [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder ***
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op keepOnlyACAttr : Module -> Module [memo] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq keepOnlyACAttr(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder (mod Q:Qid is IL:ImportList sorts S:SortSet . S:SubsortDeclSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder O:OpDeclSet M:MembAxSet E:EquationSet R:RuleSet endm))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (mod (addsufix '-REMOVED-ID-SYMBOLS To Q:Qid)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder is IL:ImportList sorts S:SortSet . S:SubsortDeclSet
473b81d33893192056dde74b26b2467f983c102cChristian Maeder keepOnlyACAttr*(O:OpDeclSet)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder M:MembAxSet E:EquationSet R:RuleSet endm) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq keepOnlyACAttr(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder (fmod Q:Qid is IL:ImportList sorts S:SortSet . S:SubsortDeclSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder O:OpDeclSet M:MembAxSet E:EquationSet endfm))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (fmod (addsufix '-REMOVED-ID-SYMBOLS To Q:Qid)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder is IL:ImportList sorts S:SortSet . S:SubsortDeclSet
473b81d33893192056dde74b26b2467f983c102cChristian Maeder keepOnlyACAttr*(O:OpDeclSet)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder M:MembAxSet E:EquationSet endfm) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op keepOnlyACAttr* : OpDeclSet -> OpDeclSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq keepOnlyACAttr*((op F : TPL -> TP [id(T) AtS] .) OPDS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = keepOnlyACAttr*((op F : TPL -> TP [AtS] .) OPDS) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq keepOnlyACAttr*((op F : TPL -> TP [left-id(T) AtS] .) OPDS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = keepOnlyACAttr*((op F : TPL -> TP [AtS] .) OPDS) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq keepOnlyACAttr*((op F : TPL -> TP [right-id(T) AtS] .) OPDS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = keepOnlyACAttr*((op F : TPL -> TP [AtS] .) OPDS) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq keepOnlyACAttr*(OPDS)
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder = keepOnlyACAttr**(OPDS) [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op _in#_ : Attr AttrSet -> Bool .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq X:Attr in# X:Attr X:AttrSet = true .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq X:Attr in# X:AttrSet = false [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder op keepOnlyACAttr** : OpDeclSet -> OpDeclSet .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq keepOnlyACAttr**((op F : TPL -> TP [assoc AtS] .) OPDS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if comm in# AtS
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder then (op F : TPL -> TP [assoc AtS] .) keepOnlyACAttr**(OPDS)
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder else keepOnlyACAttr**((op F : TPL -> TP [AtS] .) OPDS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq keepOnlyACAttr**(OPDS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = OPDS [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederendfm
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederfmod META-MINIMIZE-BINDINGS is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr SUBSTITUTION-HANDLING .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr MODULE-HANDLING .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr SUBSTITUTIONSET .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr UNIFICATIONTRIPLESET .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr CONVERSION .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr META-LEVEL .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder var M : Module .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder var T T' : Term .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder var TL : TermList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars S S' S* S'* : Substitution .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder vars V V' : Variable .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars N N' NOld : Nat .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var US? : [UnificationTripleSet] .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder var US US' : UnificationTripleSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder --- minimizeBindings ---
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op minimizeBindingsTerm : Module TermList UnificationTripleSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder -> UnificationTripleSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq minimizeBindingsTerm(M,TL,US)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = minimizeBindingsTerm(M,TL,highestVar(TL),US) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op minimizeBindingsTerm : Module TermList Nat UnificationTripleSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder -> UnificationTripleSet .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq minimizeBindingsTerm(M,TL,NOld,US)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = minimizeBindingsTerm*(M,TL,NOld,US,empty) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op minimizeBindingsTerm* : Module TermList Nat UnificationTripleSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder UnificationTripleSet -> UnificationTripleSet .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq minimizeBindingsTerm*(M,TL,NOld,empty,US')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = US' .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq minimizeBindingsTerm*(M,TL,NOld,{S,S',N} | US,US')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = minimizeBindingsTerm*(M,TL,NOld,US,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder US' | minimizeBindingsTerm**(M,TL,NOld,{S,S',N},S,S')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op minimizeBindingsTerm** : Module TermList ---variables to minimize bindings
473b81d33893192056dde74b26b2467f983c102cChristian Maeder Nat --- or maximum index of variables
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder UnificationTriple Substitution Substitution
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder -> UnificationTriple .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq minimizeBindingsTerm**(M,TL,NOld,{S*,S'*,N},none,none)
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder = {S*,S'*,N} .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq minimizeBindingsTerm**(M,TL,NOld,{S*,V <- V ; S'*,N},none,V <- V ; S')
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder = minimizeBindingsTerm**(M,TL,NOld,{S*,S'*,N},none,S') .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq minimizeBindingsTerm**(M,TL,NOld,{S*,V <- T' ; S'*,N},none,V <- T' ; S')
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = if T' :: Variable
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder and-then not (V in TL) and-then not (T' in TL)
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder and-then highestVar(V) < NOld
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder and-then highestVar(T') >= NOld
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder and-then typeLeq(M,getTypes(M,V),getTypes(M,T'))
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder then minimizeBindingsTerm**(M,TL,NOld,
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder {S* << (T' <- V),S'* .. (T' <- V),N},
473b81d33893192056dde74b26b2467f983c102cChristian Maeder none,S' .. (T' <- V))
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder else minimizeBindingsTerm**(M,TL,NOld,{S*,V <- T' ; S'*,N},none,S')
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder fi .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq minimizeBindingsTerm**(M,TL,NOld,{V <- V ; S*,S'*,N},V <- V ; S,S')
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder = minimizeBindingsTerm**(M,TL,NOld,{S*,S'*,N},S,S') .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq minimizeBindingsTerm**(M,TL,NOld,{V <- T' ; S*,S'*,N},V <- T' ; S,S')
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = if T' :: Variable
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder and-then V in TL and-then not (T' in TL)
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder and-then typeLeq(M,getTypes(M,V),getTypes(M,T'))
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder then minimizeBindingsTerm**(M,TL,NOld,
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder {S* << (T' <- V),S'* .. (T' <- V),N},
473b81d33893192056dde74b26b2467f983c102cChristian Maeder S << (T' <- V),S' .. (T' <- V))
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder else minimizeBindingsTerm**(M,TL,NOld,{V <- T' ; S*,S'*,N},S,S')
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederendfm
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederfmod TYPEOFNARROWING is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr QID .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder --- TypeOfNarrowing ----------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder sorts TypeOfNarrowingElem TypeOfNarrowing .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder subsort TypeOfNarrowingElem < TypeOfNarrowing .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op none : -> TypeOfNarrowing [ctor] .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op __ : TypeOfNarrowing TypeOfNarrowing -> TypeOfNarrowing
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [ctor assoc comm id: none] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ---eq X:TypeOfNarrowingElem X:TypeOfNarrowingElem = X:TypeOfNarrowingElem .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** select one and only one of the following
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op full : -> TypeOfNarrowingElem [ctor] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op basic : -> TypeOfNarrowingElem [ctor] .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op variant : -> TypeOfNarrowingElem [ctor] .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op variant : Nat -> TypeOfNarrowingElem [ctor] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op E-rewriting : -> TypeOfNarrowingElem [ctor] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** select one and only one of the following
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op E-ACU-unify : -> TypeOfNarrowingElem [ctor] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op E-ACU-unify-Irr : -> TypeOfNarrowingElem [ctor] .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder op E-AC-unify : -> TypeOfNarrowingElem [ctor] .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder op E-AC-unify-Irr : -> TypeOfNarrowingElem [ctor] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op ACU-unify : -> TypeOfNarrowingElem [ctor] .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder op AC-unify : -> TypeOfNarrowingElem [ctor] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op BuiltIn-unify : -> TypeOfNarrowingElem [ctor] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op E-BuiltIn-unify : -> TypeOfNarrowingElem [ctor] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op E-BuiltIn-unify-Irr : -> TypeOfNarrowingElem [ctor] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** select one and only one of the following
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op noStrategy : -> TypeOfNarrowingElem [ctor] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op topmost : -> TypeOfNarrowingElem [ctor] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op innermost : -> TypeOfNarrowingElem [ctor] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op outermost : -> TypeOfNarrowingElem [ctor] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** select any combination of the following
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op E-normalize-terms : -> TypeOfNarrowingElem [ctor] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op normalize-terms : -> TypeOfNarrowingElem [ctor] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op computed-normalized-subs : -> TypeOfNarrowingElem [ctor] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op applied-normalized-subs : -> TypeOfNarrowingElem [ctor] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op minimal-unifiers : -> TypeOfNarrowingElem [ctor] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op testUnifier : -> TypeOfNarrowingElem [ctor] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op _in_ : TypeOfNarrowingElem TypeOfNarrowing -> Bool .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq X:TypeOfNarrowingElem in X:TypeOfNarrowingElem XS:TypeOfNarrowing
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = true .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq variant in variant(N:Nat) XS:TypeOfNarrowing
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = true .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq X:TypeOfNarrowingElem in XS:TypeOfNarrowing
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = false [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op _!in_ : TypeOfNarrowingElem TypeOfNarrowing -> Bool .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq X:TypeOfNarrowingElem !in XS:TypeOfNarrowing
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = not (X:TypeOfNarrowingElem in XS:TypeOfNarrowing) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder -------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder sort TypeOfRelation .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ops '* '! '+ : -> TypeOfRelation .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op [_] : TypeOfRelation -> Qid .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq [ '+ ] = qid("+") .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq [ '* ] = qid("*") .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq [ '! ] = qid("!") .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op typeOfRelation : Qid ~> TypeOfRelation .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq typeOfRelation( '+ ) = '+ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq typeOfRelation( '* ) = '* .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq typeOfRelation( '! ) = '! .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederendfm
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederfmod RESULT-CONTEXT-SET is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder protecting META-TERM .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder protecting META-LEVEL .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder protecting TERM-HANDLING .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder protecting SUBSTITUTION-HANDLING .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder protecting RENAMING .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder protecting SUBSTITUTIONSET .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder protecting UNIFICATIONTRIPLESET .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars T T' TS CtTS : Term .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var TP : Type .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars S S' Subst Subst' : Substitution .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var NL : NatList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var M : Module .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars Ct CtS : Context .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars RTS RTS' : ResultContextSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars NextVar N : Nat .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var TL : TermList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op subTerm_of_ : NatList ResultTriple ~> ResultTriple .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq subTerm NL of {T,TP,S} = {subTerm NL of T,TP,S} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op replaceSubTerm_of_by_ : NatList ResultTriple Term ~> ResultTriple .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq replaceSubTerm NL of {T,TP,S} by T' = {replaceSubTerm NL of T by T',TP,S} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder --- ResultTriple ---------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder --- op {_,_,_} : Term Type Substitution -> ResultTriple [ctor] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder sort ResultTripleSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder subsort ResultTriple < ResultTripleSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op empty : -> ResultTripleSet [ctor] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op _|_ : ResultTripleSet ResultTripleSet -> ResultTripleSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [ctor assoc comm id: empty prec 65 format (d d n d)] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq X:ResultTriple | X:ResultTriple = X:ResultTriple .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var RT : ResultTripleSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op _|>_ : ResultTripleSet TermList -> ResultTripleSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq (empty).ResultTripleSet |> TL = (empty).ResultTripleSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq ({T,TP,S} | RT) |> TL = {T,TP,S |> TL} | (RT |> TL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq (failure | RT ) |> TL = failure | (RT |> TL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op getTerms : ResultTripleSet -> TermSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getTerms({T:Term,TP:Type,S:Substitution} | R:ResultTripleSet)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = T:Term | getTerms(R:ResultTripleSet) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getTerms((empty).ResultTripleSet)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = emptyTermSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op getSubstitutions : ResultTripleSet -> SubstitutionSet .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq getSubstitutions({T,TP,S} | R:ResultTripleSet)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = S | getSubstitutions(R:ResultTripleSet) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getSubstitutions((empty).ResultTripleSet)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (empty).SubstitutionSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder --- ResultContextSet ---------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder --- Flags
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder sort Flags Flag .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder subsort Flag < Flags .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op empty : -> Flags [ctor] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op __ : Flags Flags -> Flags [ctor assoc comm id: empty] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq X:Flag X:Flag = X:Flag .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder --- Flag to know whether term is a end point or not
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op end : Bool -> Flag [ctor frozen] .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op end : Bool Flags -> Flags .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq end(B:Bool, end(B':Bool) B:Flags) = end(B:Bool) B:Flags .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq end(B:Bool, B:Flags) = end(B:Bool) B:Flags [owise] .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op end : Flags -> Bool .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq end(end(B:Bool) B:Flags) = B:Bool .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq end(B:Flags) = false [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ---
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder sorts ResultContext ResultContextSet ResultContextNeSet .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op {_,_,_,_,_,_,_,_,_,_} :
473b81d33893192056dde74b26b2467f983c102cChristian Maeder Term Type
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder Substitution Substitution --- computed subs and applied subst
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder Context Context --- Original and WithSubst
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder Term Term --- TermWithSubst and ContextWithTermAndSubt
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder Nat --- highest index of variable
473b81d33893192056dde74b26b2467f983c102cChristian Maeder Flags
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder -> ResultContext [ctor] .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder subsort ResultContext < ResultContextNeSet < ResultContextSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op empty : -> ResultContextSet [ctor] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op _|_ : ResultContextSet ResultContextSet -> ResultContextSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [ctor assoc comm id: empty prec 65 format (d n d d)] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op _|_ : ResultContextNeSet ResultContextSet -> ResultContextNeSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [ctor ditto] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq X:ResultContext | X:ResultContext = X:ResultContext .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op getCTTerm : ResultContext -> Term .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getCTTerm(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder {T,TP,S,S',Ct:Context,CtS:Context,TS:Term,CtTS:Term,NextVar,B:Flags})
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = CtTS:Term .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op getNextVar : ResultContext -> Nat .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getNextVar(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder {T,TP,S,S',Ct:Context,CtS:Context,TS:Term,CtTS:Term,NextVar,B:Flags})
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = NextVar .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op getLSubst : ResultContext -> Substitution .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getLSubst(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder {T,TP,S,S',Ct:Context,CtS:Context,TS:Term,CtTS:Term,NextVar,B:Flags})
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = S .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op getRSubst : ResultContext -> Substitution .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getRSubst(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder {T,TP,S,S',Ct:Context,CtS:Context,TS:Term,CtTS:Term,NextVar,B:Flags})
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = S' .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op _<<_ : ResultContext UnificationTripleSet -> ResultContextSet .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq {T,TP,S,S',Ct:Context,CtS:Context,TS:Term,CtTS:Term,NextVar,B:Flags}
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder << (empty).UnificationTripleSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (empty).ResultContextSet .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq {T,TP,S,S',Ct:Context,CtS:Context,TS:Term,CtTS:Term,NextVar,B:Flags}
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder << ({Subst,Subst',N} | SS:UnificationTripleSet)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = {T,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder TP,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder (S .. Subst) << Subst', (S' .. Subst') << Subst,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder Ct:Context,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder CtS:Context << (Subst ; Subst'),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder TS:Term << (Subst ; Subst'),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder CtTS:Term << (Subst ; Subst'),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder max(NextVar,N + 1),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder B:Flags}
473b81d33893192056dde74b26b2467f983c102cChristian Maeder | {T,TP,S,S',Ct:Context,CtS:Context,TS:Term,CtTS:Term,NextVar,B:Flags}
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder << SS:UnificationTripleSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op toTriple : Module ResultContextSet -> ResultTripleSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq toTriple(M, empty ) = empty .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq toTriple(M, {T,TP,S,S',Ct,CtS,TS:Term,CtTS:Term,NextVar,B:Flags} | RTS )
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = {CtTS:Term, leastSort(M,CtTS:Term), S .. S'}
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder | toTriple(M,RTS) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op _|>_ : ResultContextSet TermList -> ResultContextSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq (empty).ResultContextSet |> TL = (empty).ResultContextSet .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq ({T,TP,S,S',Ct,CtS,TS:Term,CtTS:Term,NextVar,B:Flags}
473b81d33893192056dde74b26b2467f983c102cChristian Maeder | RTS:ResultContextSet) |> TL
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = {T,TP,S |> TL,S' |> TL,Ct,CtS,TS:Term,CtTS:Term,NextVar,B:Flags}
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder | (RTS:ResultContextSet |> TL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op getTerms : ResultContextSet -> TermSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getTerms({T,TP,S,S',Ct,CtS,TS:Term,CtTS:Term,NextVar,B:Flags} | RTS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = CtTS:Term | getTerms(RTS) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getTerms((empty).ResultContextSet)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = emptyTermSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op toUnificationTriples : ResultContextSet -> UnificationTripleSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq toUnificationTriples(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder {T,TP,S,S',Ct,CtS,TS,CtTS,NextVar,B:Flags} | R:ResultContextSet)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = {S,S',NextVar}
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder | toUnificationTriples(R:ResultContextSet) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq toUnificationTriples((empty).ResultContextSet)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (empty).UnificationTripleSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** auxiliary Sort SubstitutionCond for metaNarrowSearch *****
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder sort SubstitutionCond .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder subsort Substitution < SubstitutionCond .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op |_| : ResultTripleSet -> Nat .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq | (empty).ResultTripleSet | = 0 .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq | (RT:ResultTriple | RTS:ResultTripleSet) |
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = | RTS:ResultTripleSet | + 1 .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op |_| : ResultContextSet -> Nat .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq | (empty).ResultContextSet | = 0 .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq | (RT:ResultContext | RTS:ResultContextSet) |
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = | RTS:ResultContextSet | + 1 .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederendfm
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maederfmod IRR-FLAGS is
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder sort IrrFlags .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder op __ : IrrFlags IrrFlags -> IrrFlags [assoc comm id: none] .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder op none : -> IrrFlags [ctor] .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder op irreducible : -> IrrFlags [ctor] .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder op reducible : -> IrrFlags [ctor] .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder op minimal-unifiers : -> IrrFlags [ctor] .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maederendfm
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maederfmod EFLAGS is
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder pr TYPEOFNARROWING .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder pr IRR-FLAGS .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder sort EFlags .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder subsort IrrFlags < EFlags .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder op __ : EFlags EFlags -> EFlags [assoc comm id: none] .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder op none : -> EFlags [ctor] .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder op ACUUnify : -> EFlags [ctor] .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder op ACUnify : -> EFlags [ctor] .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder op BuiltInUnify : -> EFlags [ctor] .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder op testUnifier : -> EFlags [ctor] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder op _in_ : EFlags EFlags -> Bool .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq X:EFlags in X:EFlags Y:EFlags = true .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq X:EFlags in Y:EFlags = false [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder op _!in_ : EFlags EFlags -> Bool .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq X:EFlags !in Y:EFlags = not (X:EFlags in Y:EFlags) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder op [_] : EFlags -> TypeOfNarrowing .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq [ ACUUnify X:EFlags ] = ACU-unify [ X:EFlags ] .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq [ ACUnify X:EFlags ] = AC-unify [ X:EFlags ] .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq [ BuiltInUnify X:EFlags ] = BuiltIn-unify [ X:EFlags ] .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq [ minimal-unifiers X:EFlags ] = minimal-unifiers [ X:EFlags ] .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq [ testUnifier X:EFlags ] = testUnifier [ X:EFlags ] .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq [ X:EFlags ] = none [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederendfm
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederfmod VARIANT is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr SUBSTITUTION-HANDLING .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr META-MINIMIZE-BINDINGS .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr RESULT-CONTEXT-SET .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr MODULE-HANDLING .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr META-LEVEL .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var M : Module .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars T T' TS TS' CtTS CtTS' Lhs Rhs : Term .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars N N' NextVar NextVar' NextVar'' : Nat .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var B : Bound .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var TL TL' : TermList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var NeTL : NeTermList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var EqS : EquationSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var AtS : AttrSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var Q : Qid .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars S S' : Substitution .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var V : Variable .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var R RT : ResultContext .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars RTS RTS' : ResultContextSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars TP TP' : Type .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars Ct Ct' CtS CtS' : Context .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var C : Constant .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars F F' : Qid .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder --- Variants ----------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder sort VariantTriple .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op {_,_,_} : Term Substitution Nat -> VariantTriple [ctor] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder sort VariantTripleSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder subsort VariantTriple < VariantTripleSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op empty : -> VariantTripleSet [ctor] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op _|_ : VariantTripleSet VariantTripleSet -> VariantTripleSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [ctor assoc comm id: empty prec 65 format (d d n d)] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq X:VariantTriple | X:VariantTriple = X:VariantTriple .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op getTerms : VariantTripleSet -> TermSet .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq getTerms({T:Term,S:Substitution,NextVar:Nat}
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder | R:VariantTripleSet)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = T:Term | getTerms(R:VariantTripleSet) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getTerms((empty).VariantTripleSet)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = emptyTermSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder --- Variants ----------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder sort VariantFour .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op {_,_,_,_} : Term Substitution Substitution Nat -> VariantFour [ctor] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder sort VariantFourSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder subsort VariantFour < VariantFourSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op empty : -> VariantFourSet [ctor] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op _|_ : VariantFourSet VariantFourSet -> VariantFourSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [ctor assoc comm id: empty prec 65 format (d d n d)] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq X:VariantFour | X:VariantFour = X:VariantFour .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var VT : VariantFour .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars VTS VTS' : VariantFourSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op toVariants : Nat ResultContextSet -> VariantFourSet .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq toVariants(OldNextVar:Nat,empty)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = empty .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq toVariants(OldNextVar:Nat,{T,TP,S,S',Ct,CtS,TS,CtTS,NextVar,B:Flags} | RTS)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = {CtTS,S |> OldNextVar:Nat,S' |> OldNextVar:Nat,NextVar}
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder | toVariants(OldNextVar:Nat,RTS) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op _|>_ : VariantFourSet TermList -> VariantFourSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq (empty).VariantFourSet |> TL = empty .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq ({T,S,S',N} | VTS) |> TL = {T,(S |> TL),(S' |> TL),N} | (VTS |> TL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op getTerms : VariantFourSet -> TermSet .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq getTerms({T:Term,S:Substitution,S':Substitution,NextVar:Nat}
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder | R:VariantFourSet)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = T:Term | getTerms(R:VariantFourSet) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getTerms((empty).VariantFourSet)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = emptyTermSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op toVariantTripleSet : VariantFourSet -> VariantTripleSet .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq toVariantTripleSet(empty)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = empty .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq toVariantTripleSet({T,S,S',NextVar} | VTS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder--- = {T,S ; S',NextVar} | toVariantTripleSet(VTS) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = {T,S,NextVar} | toVariantTripleSet(VTS) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederendfm
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederfmod RIGIDIFE is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder protecting UNIFICATIONTRIPLESET .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder protecting MODULE-HANDLING .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder protecting RESULT-CONTEXT-SET .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder protecting VARIANT .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars V V' : Variable .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var C : Constant .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars F Q : Qid .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars U U' : UnificationTriple .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars US US' : UnificationTripleSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars S S' S1 S1' S2 S2' : Substitution .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var SS : SubstitutionSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var SSe : NeSubstitutionSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars N N' N1 N2 NextVar : Nat .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars T T' : Term .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars TL TL' : TermList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var NeTL : NeTermList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var M : Module .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var RTS : ResultTripleSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var TP : Type .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder sort PairRigidife .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op {_,_} : Module TermList -> PairRigidife .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op getM : PairRigidife -> Module .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getM({M,TL}) = M .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op getTL : PairRigidife -> TermList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getTL({M,TL}) = TL .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** Transform variables in TermList into constants
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op rigidifeList : Module Qid TermList TermList -> PairRigidife .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq rigidifeList(M,Q,TL,empty)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = {M,TL} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq rigidifeList(M,Q,(T,NeTL),TL)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = { getM(rigidifeList(getM(rigidifeList(M,Q,T,TL)),Q,NeTL,TL)),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder (getTL(rigidifeList(M,Q,T,TL)),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder getTL(rigidifeList(getM(rigidifeList(M,Q,T,TL)),Q,NeTL,TL))) } .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq rigidifeList(M,Q,C,TL)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = {M,C} .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq rigidifeList(M,Q,F[NeTL],TL)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = {getM(rigidifeList(M,Q,NeTL,TL)),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder F[getTL(rigidifeList(M,Q,NeTL,TL))]} .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq rigidifeList(M,Q,V,TL)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if V in TL then rigidifeVar***(M,Q,V) else {M,V} fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** Transform variables above Nat into constants
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op rigidifeNat : Module Qid TermList Nat -> PairRigidife .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq rigidifeNat(M,Q,(T,NeTL),N)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = { getM(rigidifeNat(getM(rigidifeNat(M,Q,T,N)),Q,NeTL,N)),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder (getTL(rigidifeNat(M,Q,T,N)),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder getTL(rigidifeNat(getM(rigidifeNat(M,Q,T,N)),Q,NeTL,N))) } .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq rigidifeNat(M,Q,C,N)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = {M,C} .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq rigidifeNat(M,Q,F[NeTL],N)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = {getM(rigidifeNat(M,Q,NeTL,N)),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder F[getTL(rigidifeNat(M,Q,NeTL,N))]} .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq rigidifeNat(M,Q,V,N)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if highestVar(V) >= N then rigidifeVar***(M,Q,V) else {M,V} fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder *** Transform variables with rigig# into constants
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder op rigidife : Module Qid TermList -> PairRigidife .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq rigidife(M,Q,(T,NeTL))
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder = { getM(rigidife(getM(rigidife(M,Q,T)),Q,NeTL)),
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder (getTL(rigidife(M,Q,T)),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder getTL(rigidife(getM(rigidife(M,Q,T)),Q,NeTL))) } .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq rigidife(M,Q,C)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = {M,C} .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq rigidife(M,Q,F[NeTL])
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder = {getM(rigidife(M,Q,NeTL)),
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder F[getTL(rigidife(M,Q,NeTL))]} .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq rigidife(M,Q,V)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if rfind(string(V), "rigid#", length(string(V))) =/= notFound
473b81d33893192056dde74b26b2467f983c102cChristian Maeder then rigidifeVar***(M,Q,V)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder else {M,V}
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** Basic case for transforming variables into constants
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op rigidifeVar*** : Module Qid Variable -> PairRigidife .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq rigidifeVar***(M,Q,V)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = {addOps((op qid("rigid@" + string(Q) + "@" + string(getName(V)))
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder : nil -> getType(V) [none].)
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder ,M),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder qid("rigid@" + string(Q) + "@" + string(getName(V))
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder + "." + string(getType(V)))} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** Undo the transformation of variables into constants
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op unrigidife : Qid TermList -> TermList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq unrigidife(Q,(T,NeTL))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (unrigidife(Q,T),unrigidife(Q,NeTL)) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq unrigidife(Q,V) = V .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq unrigidife(Q,F[TL]) = F[unrigidife(Q,TL)] .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq unrigidife(Q,C)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = if rfind(string(C), "rigid@" + string(Q) + "@", length(string(C)))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder =/= notFound
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then qid(
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder string(getName(qid(
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder substr(string(C),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder rfind(string(C), "rigid@" + string(Q) + "@",
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder length(string(C))) + 7 + length(string(Q)),
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder length(string(C)))
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder )))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder + ":" +
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder string(getType(qid(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder substr(string(C),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder rfind(string(C), "rigid@" + string(Q) + "@",
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder length(string(C))) + 7 + length(string(Q)),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder length(string(C)))
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder )))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder )
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else C
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op unrigidife : Qid Substitution -> Substitution .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq unrigidife(Q,(none).Substitution) = none .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq unrigidife(Q,V <- T ; S)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = unrigidife(Q,V) <- unrigidife(Q,T) ; unrigidife(Q,S) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op unrigidife : Qid SubstitutionSet -> SubstitutionSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq unrigidife(Q,(empty).SubstitutionSet) = empty .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq unrigidife(Q,S | SSe)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = unrigidife(Q,S) | unrigidife(Q,SSe) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op unrigidife : Qid UnificationTripleSet -> UnificationTripleSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq unrigidife(Q,(empty).UnificationTripleSet) = empty .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq unrigidife(Q,{S1,S2,N'} | US)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = {unrigidife(Q,S1),unrigidife(Q,S2),N'}
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder | unrigidife(Q,US) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op unrigidife : Qid ResultTripleSet -> ResultTripleSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq unrigidife(Q,(empty).ResultTripleSet) = empty .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq unrigidife(Q,{T,TP,S} | RTS)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = {unrigidife(Q,T),TP,unrigidife(Q,S)}
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder | unrigidife(Q,RTS) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op unrigidife : Qid VariantFourSet -> VariantFourSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq unrigidife(Q,(empty).VariantFourSet) = empty .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq unrigidife(Q,{T,S,S',N} | R:VariantFourSet)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = {unrigidife(Q,T),unrigidife(Q,S),unrigidife(Q,S'),N}
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder | unrigidife(Q,R:VariantFourSet) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** Label variables with rigid
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op rigidLabel : Module TermList TermList -> TermList .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq rigidLabel(M,TL,empty)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = TL .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq rigidLabel(M,(T,NeTL),TL)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = rigidLabel(M,T,TL), rigidLabel(M,NeTL,TL) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq rigidLabel(M,C,TL)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = C .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq rigidLabel(M,F[NeTL],TL)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = F[rigidLabel(M,NeTL,TL)] .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq rigidLabel(M,V,TL)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if V in TL then rigidLabel***(M,V) else V fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op rigidLabel*** : Module Variable -> Variable .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq rigidLabel***(M,V)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = qid("rigid#" + string(getName(V)) + ":" + string(getType(V))) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** Undo the transformation of variables into constants
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op unrigidLabel : TermList -> TermList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq unrigidLabel((T,NeTL))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (unrigidLabel(T),unrigidLabel(NeTL)) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq unrigidLabel(C) = C .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq unrigidLabel(F[TL]) = F[unrigidLabel(TL)] .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq unrigidLabel(V)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = if rfind(string(V), "rigid#", length(string(V)))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder =/= notFound
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then qid(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder string(getName(qid(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder substr(string(V),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder rfind(string(V), "rigid#",
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder length(string(V))) + 6,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder length(string(V)))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder )))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder + ":" +
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder string(getType(qid(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder substr(string(V),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder rfind(string(V), "rigid#",
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder length(string(V))) + 6,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder length(string(V)))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder )))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder )
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else V
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op unrigidLabel : Substitution -> Substitution .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq unrigidLabel((none).Substitution) = none .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq unrigidLabel(V <- T ; S)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = unrigidLabel(V) <- unrigidLabel(T) ; unrigidLabel(S) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op unrigidLabel : SubstitutionSet -> SubstitutionSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq unrigidLabel((empty).SubstitutionSet) = empty .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq unrigidLabel(S | SSe)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = unrigidLabel(S) | unrigidLabel(SSe) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op unrigidLabel : UnificationTripleSet -> UnificationTripleSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq unrigidLabel((empty).UnificationTripleSet) = empty .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq unrigidLabel({S1,S2,N'} | US)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = {unrigidLabel(S1),unrigidLabel(S2),N'}
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder | unrigidLabel(US) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op unrigidLabel : ResultTripleSet -> ResultTripleSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq unrigidLabel((empty).ResultTripleSet) = empty .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq unrigidLabel({T,TP,S} | RTS)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = {unrigidLabel(T),TP,unrigidLabel(S)}
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder | unrigidLabel(RTS) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op unrigidLabel : VariantFourSet -> VariantFourSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq unrigidLabel((empty).VariantFourSet) = empty .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq unrigidLabel({T,S,S',N} | R:VariantFourSet)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = {unrigidLabel(T),unrigidLabel(S),unrigidLabel(S'),N}
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder | unrigidLabel(R:VariantFourSet) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op qid : Nat -> Qid .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq qid(N:Nat) = qid(string(N:Nat,10)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederendfm
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederfmod META-E-BASIC-UNIFICATION is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr TYPEOFNARROWING .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr EFLAGS .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr RESULT-CONTEXT-SET .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr SUBSTITUTION-HANDLING .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr META-MINIMIZE-BINDINGS .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr RESULT-CONTEXT-SET .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr MODULE-HANDLING .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr META-LEVEL .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr RIGIDIFE .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** Repeated definitions to avoid cross calls between modules ************
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op metaNarrowSearchGenAll : Module Term Term SubstitutionCond
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder TypeOfRelation Bound Bound TypeOfNarrowing Nat
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder -> ResultContextSet .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder op metaACUnify : Module Term Term Nat -> UnificationTripleSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** Repeated definitions to avoid cross calls between modules ************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var M : Module .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var M' : [Module] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars T T' : Term .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars NextVar N : Nat .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var EF : EFlags .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var F : Qid .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder --- metaEUnify-Basic --------------------------------------------------
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op metaEUnify-Basic : Module Term Term Nat EFlags
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder --- Term Lhs
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder -> UnificationTripleSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq metaEUnify-Basic(M,T,T',NextVar,EF)
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder = if getEqsNoLabel(M) == none
473b81d33893192056dde74b26b2467f983c102cChristian Maeder then metaACUnify(M,T,T',NextVar)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else metaEUnify-Basic*(M,T,T',NextVar,EF)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op metaEUnify-Basic* : Module Term Term Nat EFlags
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder --- Term Lhs
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder -> UnificationTripleSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq metaEUnify-Basic*(M,T,T',NextVar,EF)
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder = if glbSorts(M,leastSort(M,T),leastSort(M,T')) =/= none
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then minimizeBindingsTerm(M,Vars(T),NextVar + 1,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder toUnificationTriples(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder metaNarrowSearchGenAll(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder add=E=(new=E=(NextVar),
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eqs2rls(clearAllFrozen(M)),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder maximalSorts(M,getKind(M,leastSort(M,T)))),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder new=E=(NextVar)[T',T],
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder 'true.Bool,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder none,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder '!,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder unbounded,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder unbounded,
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder basic noStrategy [EF],
473b81d33893192056dde74b26b2467f983c102cChristian Maeder NextVar + 1
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ) |> (T,T')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder )
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder )
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else (empty).UnificationTripleSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op new=E= : Nat -> Qid .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq new=E=(N)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = qid("_=E" + string(N,10) + "=_") .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op add=E= : Qid Module SortSet -> Module .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq add=E=(F,M,none)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = M .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq add=E=(F,M,S:Sort ; SS:SortSet)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = add=E=(F,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder addRules(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder (rl F[(addType S:Sort ToVar 'X),(addType S:Sort ToVar 'X)]
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder => 'true.Bool [none] .),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder addOps(op F : S:Sort S:Sort -> 'Bool [frozen(2)] .,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder M)),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder SS:SortSet) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederendfm
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederfmod META-E-UNIFICATION is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr TYPEOFNARROWING .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr EFLAGS .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr RESULT-CONTEXT-SET .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr SUBSTITUTION-HANDLING .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr META-MINIMIZE-BINDINGS .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr RESULT-CONTEXT-SET .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr MODULE-HANDLING .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr META-LEVEL .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr META-E-BASIC-UNIFICATION .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr VARIANT .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** Repeated definitions to avoid cross calls between modules ************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op normalizedSubstitution? : Module SubstitutionSet -> Bool .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op metaACUUnify : Module Term Term Nat -> UnificationTripleSet .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder op metaACUnify : Module Term Term Nat -> UnificationTripleSet .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder op metaACUnify? : Module Term Term Nat -> Bool .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder op metaACUnify* : Module UnificandPair Nat Nat ~> UnificationTriple? .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op metaCoreUnify : Module Term Term Nat -> UnificationTripleSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op metaCoreUnify? : Module Term Term Nat -> Bool .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op metaBuiltInUnify : Module Term Term Nat -> UnificationTripleSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op metaBuiltInUnify? : Module Term Term Nat -> Bool .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op _<=[_]_ : SubstitutionSet Module SubstitutionSet -> Bool .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op _<=[_]_ : Term Module Term -> Bool .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** Repeated definitions to avoid cross calls between modules ************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var M : Module .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars T T' TS TS' CtTS CtTS' Lhs Rhs : Term .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder vars N N' NextVar NextVar' NextVar'' : Nat .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var B : Bound .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var TL TL' : TermList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var NeTL : NeTermList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var EqS : EquationSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var AtS : AttrSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var ON : TypeOfNarrowing .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var Q : Qid .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars US US' US$ : UnificationTripleSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars U U' : UnificationTriple .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder vars S S' S* S'* : Substitution .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var V : Variable .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var R RT : ResultContext .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars RTS RTS' : ResultContextSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars TP TP' : Type .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars Ct Ct' CtS CtS' : Context .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var C : Constant .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars F F' : Qid .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var EF : EFlags .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars VT VT' : VariantFour .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars VTS VTS' VTS$ : VariantFourSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var IRR : IrrFlags .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder --- metaECoreUnify --------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op metaECoreUnify : Module Term Term -> SubstitutionSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder --- Term Lhs
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq metaECoreUnify(M, T, T')
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder = metaEACUnify(M, T, T') .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op metaECoreUnify? : Module Term Term -> Bool .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq metaECoreUnify?(M, T, T')
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder = metaEACUnify?(M, T, T') .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder --- metaEACUUnify --------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op metaEACUUnify : Module Term Term -> SubstitutionSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq metaEACUUnify(M, T, T')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = toSubstitution(metaEACUUnify(M,T,T',highestVar((T,T')) + 1,reducible)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op metaEACUUnify? : Module Term Term -> Bool .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq metaEACUUnify?(M, T, T')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = metaEACUUnify?(M,T,T',highestVar((T,T')) + 1,reducible) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op metaEACUUnifyIrr : Module Term Term -> SubstitutionSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder --- T irreducible T' reducible
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq metaEACUUnifyIrr(M, T, T')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = toSubstitution(metaEACUUnify(M,T,T',highestVar((T,T')) + 1,irreducible)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op metaEACUUnifyIrr? : Module Term Term -> Bool .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq metaEACUUnifyIrr?(M, T, T')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = metaEACUUnify?(M,T,T',highestVar((T,T')) + 1,irreducible) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op metaEACUUnify : Module Term Term Nat IrrFlags -> UnificationTripleSet .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq metaEACUUnify(M, T, T',NextVar,IRR)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = minimizeBindingsTerm(M,Vars(T),NextVar,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder metaEUnify&(M, T, T',NextVar,ACUUnify IRR)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ) |> (T,T') .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op metaEACUUnify? : Module Term Term Nat IrrFlags -> Bool .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq metaEACUUnify?(M, T, T',NextVar,IRR)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = metaEUnify&?(M, T, T',NextVar,ACUUnify IRR) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder --- metaEACUnify --------------------------------------------------
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder op metaEACUnify : Module Term Term -> SubstitutionSet .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq metaEACUnify(M, T, T')
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder = toSubstitution(metaEACUnify(M,T,T',highestVar((T,T')) + 1,reducible)) .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder op metaEACUnify? : Module Term Term -> Bool .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq metaEACUnify?(M, T, T')
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder = metaEACUnify?(M,T,T',highestVar((T,T')) + 1,reducible) .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder op metaEACUnifyIrr : Module Term Term -> SubstitutionSet .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder --- T irreducible T' reducible
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq metaEACUnifyIrr(M, T, T')
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder = toSubstitution(metaEACUnify(M,T,T',highestVar((T,T')) + 1,irreducible)) .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder op metaEACUnifyIrr? : Module Term Term -> Bool .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder --- T irreducible T' reducible
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq metaEACUnifyIrr?(M, T, T')
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder = metaEACUnify?(M,T,T',highestVar((T,T')) + 1,irreducible) .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op metaEACUnify : Module Term Term Nat IrrFlags
473b81d33893192056dde74b26b2467f983c102cChristian Maeder -> UnificationTripleSet .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq metaEACUnify(M, T, T',NextVar,IRR)
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder = minimizeBindingsTerm(M,Vars(T),NextVar,
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder metaEUnify&(M, T, T',NextVar,ACUnify IRR)
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder ) |> (T,T') .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder op metaEACUnify? : Module Term Term Nat IrrFlags -> Bool .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq metaEACUnify?(M, T, T',NextVar,IRR)
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder = metaEUnify&?(M, T, T',NextVar,ACUnify IRR) .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder --- metaEBuiltInUnify --------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op metaEBuiltInUnify : Module Term Term -> SubstitutionSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq metaEBuiltInUnify(M, T, T')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = toSubstitution(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder metaEBuiltInUnify(M,T,T',highestVar((T,T')) + 1,reducible)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op metaEBuiltInUnify? : Module Term Term -> Bool .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq metaEBuiltInUnify?(M, T, T')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = metaEBuiltInUnify?(M,T,T',highestVar((T,T')) + 1,reducible) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op metaEBuiltInUnifyIrr : Module Term Term -> SubstitutionSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder --- T irreducible T' reducible
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq metaEBuiltInUnifyIrr(M, T, T')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = toSubstitution(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder metaEBuiltInUnify(M,T,T',highestVar((T,T')) + 1,irreducible)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op metaEBuiltInUnifyIrr? : Module Term Term -> Bool .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder --- T irreducible T' reducible
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq metaEBuiltInUnifyIrr?(M, T, T')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = metaEBuiltInUnify?(M,T,T',highestVar((T,T')) + 1,irreducible) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op metaEBuiltInUnify : Module Term Term Nat IrrFlags
473b81d33893192056dde74b26b2467f983c102cChristian Maeder -> UnificationTripleSet .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq metaEBuiltInUnify(M, T, T',NextVar,IRR)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = minimizeBindingsTerm(M,Vars(T),NextVar,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder metaEUnify&(M, T, T',NextVar,BuiltInUnify IRR)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ) |> (T,T') .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op metaEBuiltInUnify? : Module Term Term Nat IrrFlags -> Bool .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq metaEBuiltInUnify?(M, T, T',NextVar,IRR)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = metaEUnify&?(M, T, T',NextVar,BuiltInUnify IRR) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder --- metaEUnify --------------------------------------------------
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op metaEUnify& : Module Term Term Nat EFlags -> UnificationTripleSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder --- Term Lhs
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq metaEUnify&(M,T,T',NextVar,EF)
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder = if glbSorts(M,leastSort(M,T),leastSort(M,T')) =/= none
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then metaEUnify&*(removeBoolEqs(M),T,T',NextVar,EF)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else empty
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op metaEUnify&? : Module Term Term Nat EFlags -> Bool .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder --- Term Lhs
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq metaEUnify&?(M,T,T',NextVar,EF)
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder = glbSorts(M,leastSort(M,T),leastSort(M,T')) =/= none
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder and-then
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder metaEUnify&*?(removeBoolEqs(M),T,T',NextVar,EF) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op metaEUnify&* : Module Term Term Nat EFlags -> UnificationTripleSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder --- Term Lhs
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq metaEUnify&*(M,T,T',NextVar,EF)
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder = if metaBuiltInUnify(M,
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder fst(generalize(onlyEqsNoLabel(M),NextVar,T)),
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder fst(generalize(onlyEqsNoLabel(M),
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder snd(generalize(onlyEqsNoLabel(M),NextVar,T)),T')),
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder snd(generalize(onlyEqsNoLabel(M),
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder snd(generalize(onlyEqsNoLabel(M),NextVar,T)),T'))
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder ) =/= empty
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder then if T' == fst(
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder generalize(onlyEqsNoLabel(M),
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder snd(generalize(onlyEqsNoLabel(M),NextVar,T)),T'))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then --- no narrowing is necessary to unify
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder metaBuiltInUnify(M,T,T',NextVar)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else metaEUnify$(M,T,T',NextVar,EF)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else empty
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op metaEUnify&*? : Module Term Term Nat EFlags -> Bool .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder --- Term Lhs
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq metaEUnify&*?(M,T,T',NextVar,EF)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if metaBuiltInUnify?(M,
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder fst(generalize(onlyEqsNoLabel(M),NextVar,T)),
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder fst(generalize(onlyEqsNoLabel(M),
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder snd(generalize(onlyEqsNoLabel(M),NextVar,T)),T')),
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder snd(generalize(onlyEqsNoLabel(M),
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder snd(generalize(onlyEqsNoLabel(M),NextVar,T)),T'))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder )
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder then if T' == fst(
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder generalize(onlyEqsNoLabel(M),
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder snd(generalize(onlyEqsNoLabel(M),NextVar,T)),T'))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then --- no narrowing is necessary to unify
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder metaBuiltInUnify?(M,T,T',NextVar)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else metaEUnify$?(M,T,T',NextVar,EF)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else false
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op metaEUnify$ : Module Term Term Nat EFlags -> UnificationTripleSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder --- Term Lhs
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq metaEUnify$(M,T,T',NextVar,EF)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if howManyBuiltIn(M,(T,T')) > 0
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then metaEUnify-Variant(M,EF,NextVar,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder getVariantsTerm(M,T,NextVar,EF),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder getVariants(M,T',maxNextVar(getVariantsTerm(M,T,NextVar,EF)),EF)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder )
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else metaEUnify-Basic(M,T,T',NextVar,EF)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op metaEUnify$? : Module Term Term Nat EFlags -> Bool .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq metaEUnify$?(M,T,T',NextVar,EF)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if howManyBuiltIn(M,(T,T')) > 0
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then metaEUnify-Variant(M,testUnifier EF,NextVar,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder getVariantsTerm(M,T,NextVar,testUnifier EF),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder getVariants(M,T',
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder maxNextVar(getVariantsTerm(M,T,NextVar,testUnifier EF)),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder testUnifier EF
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder )
473b81d33893192056dde74b26b2467f983c102cChristian Maeder )
473b81d33893192056dde74b26b2467f983c102cChristian Maeder else metaEUnify-Basic(M,T,T',NextVar,EF)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi =/= empty .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op metaEUnify-Variant : Module Term Term Nat EFlags
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder --- Term Lhs
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder -> UnificationTripleSet .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq metaEUnify-Variant(M,T,T',NextVar,EF)
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder = if glbSorts(M,leastSort(M,T),leastSort(M,T')) =/= none
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder then minimizeBindingsTerm(M,Vars(T),NextVar + 1,
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder toUnificationTriples(
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder metaNarrowSearchGenAll(
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder add=E=(new=E=(NextVar),
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eqs2rls(clearAllFrozen(M)),
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder maximalSorts(M,getKind(M,leastSort(M,T)))),
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder new=E=(NextVar)[T',T],
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder 'true.Bool,
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder none,
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder '!,
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder unbounded,
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder unbounded,
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder variant(NextVar + 1) noStrategy [EF],
473b81d33893192056dde74b26b2467f983c102cChristian Maeder NextVar + 1
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder ) |> (T,T')
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder )
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder )
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder else (empty).UnificationTripleSet
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder fi .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op getVariantsTerm : Module Term Nat EFlags -> VariantFourSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getVariantsTerm(M,T,NextVar,EF)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if irreducible in EF
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then {T,none,none,NextVar}
473b81d33893192056dde74b26b2467f983c102cChristian Maeder else getVariants(M,T,NextVar,EF)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op metaEUnify-Variant : Module EFlags Nat VariantFourSet VariantFourSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder -> UnificationTripleSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq metaEUnify-Variant(M,EF,N,VTS,VTS')
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder = filter-variant-UP(EF,eqs2rls(clearAllFrozen(M)),N,
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder filter-NF(eqs2rls(clearAllFrozen(M)),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder metaEUnify-Variant*(M,EF,N,VTS,VTS')
473b81d33893192056dde74b26b2467f983c102cChristian Maeder )
473b81d33893192056dde74b26b2467f983c102cChristian Maeder )
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder op metaEUnify-Variant* : Module EFlags Nat VariantFourSet VariantFourSet
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder -> UnificationTripleSet .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq metaEUnify-Variant*(M,EF,N, empty, VTS')
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder = empty .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq metaEUnify-Variant*(M,EF,N, VT | VTS, VTS')
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = metaEUnify-Variant**(M,EF,N, VT, VTS')
473b81d33893192056dde74b26b2467f983c102cChristian Maeder |
473b81d33893192056dde74b26b2467f983c102cChristian Maeder if testUnifier in EF
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder and
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder metaEUnify-Variant**(M,EF,N, VT, VTS') =/= empty
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder then empty
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder else metaEUnify-Variant*(M,EF,N, VTS, VTS')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder op metaEUnify-Variant** : Module EFlags Nat VariantFour VariantFourSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder -> UnificationTripleSet .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq metaEUnify-Variant**(M,EF,N,VT,empty)
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder = empty .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq metaEUnify-Variant**(M,EF,N,{T,S,S*,NextVar},{T',S',S'*,NextVar'} | VTS')
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = metaEUnify-Variant***(M,EF,N,{T,S,S*,NextVar},{T',S',S'*,NextVar'})
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder | metaEUnify-Variant**(M,EF,N,{T,S,S*,NextVar}, VTS') .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op metaEUnify-Variant*** : Module EFlags Nat VariantFour VariantFour
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder -> UnificationTripleSet .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq metaEUnify-Variant***(M,EF,N,{T,S,S*,NextVar},{T',S',S'*,NextVar'})
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = if metaEUV***(EF,N,M,T,T',max(NextVar,NextVar')) :: UnificationTripleSet
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder and
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder metaEUV***(EF,N,M,T,T',max(NextVar,NextVar')) =/= empty
473b81d33893192056dde74b26b2467f983c102cChristian Maeder then {S,S',max(NextVar,NextVar')}
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder ... metaEUV***(EF,N,M,T,T',max(NextVar,NextVar'))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else empty
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder op metaEUV*** : EFlags Nat Module Term Term Nat -> UnificationTripleSet .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder--- eq metaEUV***(EF,N,M,T,T',NextVar)
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder--- = filter-variant-UP(minimal-unifiers EF,eqs2rls(clearAllFrozen(M)),N,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder--- metaEUV****(EF,M,T,T',NextVar)
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder--- ) .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq metaEUV***(EF,N,M,T,T',NextVar)
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder = metaEUV****(EF,M,T,T',NextVar) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder op metaEUV**** : EFlags Module Term Term Nat -> UnificationTripleSet .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq metaEUV****(EF,M,T,T',NextVar)
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder = if ACUUnify in EF
473b81d33893192056dde74b26b2467f983c102cChristian Maeder then metaACUUnify(M,T,T',NextVar)
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder else if ACUnify in EF
473b81d33893192056dde74b26b2467f983c102cChristian Maeder then metaACUnify(M,T,T',NextVar)
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder else metaBuiltInUnify(M,T,T',NextVar)
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder fi
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op getVariants : Module Term Nat EFlags -> VariantFourSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getVariants(M,T,NextVar,EF)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = unrigidife(qid(NextVar),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder getVariants*(
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder getM(rigidife(M,qid(NextVar),T)),
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder getTL(rigidife(M,qid(NextVar),T)),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder NextVar + 1,EF
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder )
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op getVariants* : Module Term Nat EFlags -> VariantFourSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getVariants*(M,T,NextVar,EF)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = if howMany(onlyEqsNoLabel(M),T) == 0
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then {T,none,none,NextVar}
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else if getVariants**(M,T,NextVar,EF) :: VariantFourSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder and
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder getVariants**(M,T,NextVar,EF) =/= empty
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then getVariants**(M,T,NextVar,EF)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else {T,none,none,NextVar}
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op getVariants** : Module Term Nat EFlags -> VariantFourSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getVariants**(M,T,NextVar,EF)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = filter-variant-VT(EF, ---minimal-unifiers EF,
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eqs2rls(clearAllFrozen(M)),NextVar,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder toVariants(NextVar,
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder metaNarrowSearchGenAll(eqs2rls(clearAllFrozen(M)),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder T,newVar(NextVar,leastSort(M,T)),
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder none,'*,unbounded,unbounded,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder variant(NextVar + 1) noStrategy [EF], ---do not use innermost!!!
473b81d33893192056dde74b26b2467f983c102cChristian Maeder NextVar + 1)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder )
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** Identify bound for terms
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder sort PairGeneralize .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op {_,_} : TermList Nat -> PairGeneralize .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op fst : PairGeneralize -> TermList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq fst({X:TermList,Y:Nat}) = X:TermList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op snd : PairGeneralize -> Nat .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq snd({X:TermList,Y:Nat}) = Y:Nat .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op generalize : Module Nat NeTermList -> PairGeneralize .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq generalize(M,NextVar,NeTL)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = generalize*(M,NextVar,getEqs(M),NeTL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op generalize* : Module Nat EquationSet TermList -> PairGeneralize .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq generalize*(M,NextVar,EqS,empty)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = {empty,NextVar} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq generalize*(M,NextVar,EqS,(T,TL))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = {(fst(generalize**(M,NextVar,EqS,T)),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fst(generalize*(M,snd(generalize**(M,NextVar,EqS,T)),EqS,TL))),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder snd(generalize*(M,snd(generalize**(M,NextVar,EqS,T)),EqS,TL))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder } .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op generalize** : Module Nat EquationSet Term -> PairGeneralize .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq generalize**(M,NextVar,EqS,C)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = {C,NextVar} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq generalize**(M,NextVar,EqS,V)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = {V,NextVar} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq generalize**(M,NextVar,(eq F'[TL'] = Rhs [AtS] .) EqS,F[TL])
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = {newVar(NextVar,getKind(M,leastSort(M,F[TL]))),NextVar + 1}
473b81d33893192056dde74b26b2467f983c102cChristian Maeder if F == F'
473b81d33893192056dde74b26b2467f983c102cChristian Maeder and-then
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder glbSorts(M,leastSort(M,TL),leastSort(M,TL')) =/= none .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq generalize**(M,NextVar,EqS,F[TL])
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = {F[fst(generalize*(M,NextVar,EqS,TL))],
473b81d33893192056dde74b26b2467f983c102cChristian Maeder snd(generalize*(M,NextVar,EqS,TL))}
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** Identify bound for terms
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op howMany : Module NeTermList -> Nat .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq howMany(M,NeTL)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = howMany*(M,getEqs(M),NeTL << 0 < ) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op howMany* : Module EquationSet TermList -> Nat .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq howMany*(M,EqS,empty)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = 0 .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq howMany*(M,EqS,(T,TL))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = howMany**(M,EqS,T) + howMany*(M,EqS,TL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op howMany** : Module EquationSet Term -> Nat .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq howMany**(M,EqS,C)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = 0 .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq howMany**(M,EqS,V)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = 0 .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq howMany**(M,(eq F'[TL'] = Rhs [AtS] .) EqS,F[TL])
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = 1 + howMany*(M,(eq F'[TL'] = Rhs [AtS] .) EqS,TL)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder if F == F'
473b81d33893192056dde74b26b2467f983c102cChristian Maeder and-then
473b81d33893192056dde74b26b2467f983c102cChristian Maeder glbSorts(M,leastSort(M,TL),leastSort(M,TL')) =/= none
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder and-then not isAssociative(M,F,getTypes(M,TL)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq howMany**(M,(eq F'[TL'] = Rhs [AtS] .) EqS,F[TL])
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = sd(length(TL),1) + howMany*(M,(eq F'[TL'] = Rhs [AtS] .) EqS,TL)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder if F == F'
473b81d33893192056dde74b26b2467f983c102cChristian Maeder and-then
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder glbSorts(M,leastSort(M,TL),leastSort(M,TL')) =/= none
473b81d33893192056dde74b26b2467f983c102cChristian Maeder and-then isCommutative(M,F,getTypes(M,TL))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder and-then isAssociative(M,F,getTypes(M,TL)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq howMany**(M,EqS,F[TL])
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = howMany*(M,EqS,TL) [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** Identify whether basic or variant narrowing should be used
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op howManyAC : Module NeTermList -> Nat .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq howManyAC(M,NeTL)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = if howManyAC$(M,getEqs(M)) == 0
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then 0
473b81d33893192056dde74b26b2467f983c102cChristian Maeder else howManyAC*(M,getEqs(M),NeTL << 0 < )
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op howManyAC* : Module EquationSet TermList -> Nat .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq howManyAC*(M,EqS,empty)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = 0 .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq howManyAC*(M,EqS,(T,TL))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = howManyAC**(M,EqS,T) + howManyAC*(M,EqS,TL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op howManyAC** : Module EquationSet Term -> Nat .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq howManyAC**(M,EqS,C)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = 0 .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq howManyAC**(M,EqS,V)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = 0 .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq howManyAC**(M,(eq F'[TL'] = Rhs [AtS] .) EqS,F[TL])
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = sd(length(TL),1) + howManyAC*(M,(eq F'[TL'] = Rhs [AtS] .) EqS,TL)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder if F == F'
473b81d33893192056dde74b26b2467f983c102cChristian Maeder and-then
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder glbSorts(M,leastSort(M,TL),leastSort(M,TL')) =/= none
473b81d33893192056dde74b26b2467f983c102cChristian Maeder and-then isCommutative(M,F,getTypes(M,TL))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder and-then isAssociative(M,F,getTypes(M,TL)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq howManyAC**(M,EqS,F[TL])
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = howManyAC*(M,EqS,TL) [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op length : TermList -> Nat .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq length((empty).TermList) = 0 .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq length((T:Term,TL:TermList)) = 1 + length(TL:TermList) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op howManyAC$ : Module EquationSet -> Nat [memo] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq howManyAC$(M,EqS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = howManyAC$$(M,EqS) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op howManyAC$$ : Module EquationSet -> Nat .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq howManyAC$$(M,none)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = 0 .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq howManyAC$$(M,(eq F[TL] = Rhs [AtS] .) EqS)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = if isCommutative(M,F,getTypes(M,TL))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder and isAssociative(M,F,getTypes(M,TL))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder then 1 else 0 fi
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder + howManyAC$$(M,EqS) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ***
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op howManyBuiltIn : Module NeTermList -> Nat .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq howManyBuiltIn(M,NeTL)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if howManyAC(M,NeTL) > 0
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then howManyAC(M,NeTL)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder else howMany(onlyEqsLabel(M),NeTL)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** Filter UnificationPairSet according to Variant narrowing strategy
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op filter-variant-UP : EFlags Module Nat UnificationTripleSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder -> UnificationTripleSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq filter-variant-UP(EF,M,N,US)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if minimal-unifiers in EF and testUnifier !in EF
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then filter-variant-UP*(M,N,empty,US)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else US
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op filter-variant-UP* :
473b81d33893192056dde74b26b2467f983c102cChristian Maeder Module Nat UnificationTripleSet UnificationTripleSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder -> UnificationTripleSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq filter-variant-UP*(M,N,US$,empty)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = US$ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq filter-variant-UP*(M,N,US$,{S,S*,NextVar} | US)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = filter-variant-UP**(M,N,US$,US,{S,S*,NextVar},US) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op filter-variant-UP** :
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder Module Nat UnificationTripleSet UnificationTripleSet
473b81d33893192056dde74b26b2467f983c102cChristian Maeder UnificationTriple UnificationTripleSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder -> UnificationTripleSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq filter-variant-UP**(M,N,US$,US',{S,S*,NextVar},empty)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = --- RT is not implied by any in RTS'
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder filter-variant-UP*(M,N,US$ | {S,S*,NextVar},US') .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq filter-variant-UP**(M,N,US$,U | US',U',U | US)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if test-variant-UP(M,N,U,U') --- keep U & remove U'
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then --- RT is implied by one in RTS'
473b81d33893192056dde74b26b2467f983c102cChristian Maeder filter-variant-UP*(M,N,US$,U | US')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else if test-variant-UP(M,N,U',U) --- keep U' & remove U
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then --- remove T from the set US'
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder filter-variant-UP**(M,N,US$,US',U',US)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else --- continue searching in US
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder filter-variant-UP**(M,N,US$,U | US',U',US)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op test-variant-UP :
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder Module Nat UnificationTriple UnificationTriple -> Bool .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq test-variant-UP(M,N,{S,S*,NextVar},{S',S'*,NextVar'})
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = (S ; S*) |> N <=[M] (S' ; S'*) |> N . --- keep T & remove T'
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** Filter VariantFourSet according to Variant narrowing strategy
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op filter-variant-VT : EFlags Module Nat VariantFourSet -> VariantFourSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq filter-variant-VT(EF,M,N,VTS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if minimal-unifiers in EF and testUnifier !in EF
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then filter-variant-VT*(M,N,empty,VTS)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder else VTS
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op filter-variant-VT* :
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder Module Nat VariantFourSet VariantFourSet -> VariantFourSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq filter-variant-VT*(M,N,VTS$,empty)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = VTS$ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq filter-variant-VT*(M,N,VTS$,VT | VTS)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = filter-variant-VT**(M,N,VTS$,VTS,VT,VTS) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op filter-variant-VT** :
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder Module Nat VariantFourSet VariantFourSet
473b81d33893192056dde74b26b2467f983c102cChristian Maeder VariantFour VariantFourSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder -> VariantFourSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq filter-variant-VT**(M,N,VTS$,VTS',VT,empty)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = --- RT is not implied by any in VTSS'
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder filter-variant-VT*(M,N,VTS$ | VT,VTS') .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq filter-variant-VT**(M,N,VTS$,VT | VTS',VT',VT | VTS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if test-variant-VT(M,N,VT,VT')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then --- RT is implied by one in RTS'
473b81d33893192056dde74b26b2467f983c102cChristian Maeder filter-variant-VT*(M,N,VTS$,VT | VTS')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else if test-variant-VT(M,N,VT',VT)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then --- remove T from the set VTS'
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder filter-variant-VT**(M,N,VTS$,VTS',VT',VTS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else --- continue searching in VTS
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder filter-variant-VT**(M,N,VTS$,VT | VTS',VT',VTS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op test-variant-VT : Module Nat VariantFour VariantFour -> Bool .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq test-variant-VT(M,N,{T,S,S*,NextVar},{T',S',S'*,NextVar'})
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = --- keep T & remove T'
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ((S ; S*) |> N ; (newVar(N + 1,leastSort(M,T)) <- T))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder <=[M]
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ((S' ; S'*) |> N ; (newVar(N + 1,leastSort(M,T')) <- T')) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** Take only normal forms
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op filter-NF : Module UnificationTripleSet -> UnificationTripleSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq filter-NF(M,empty)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = empty .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq filter-NF(M,{S,S*,NextVar} | US)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if normalizedSubstitution?(M,S ; S*)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder then {S,S*,NextVar}
473b81d33893192056dde74b26b2467f983c102cChristian Maeder else empty
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder | filter-NF(M,US) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op maxNextVar : VariantFourSet -> Nat .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq maxNextVar(empty) = 0 .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq maxNextVar({T,S,S*,NextVar} | VTS) = max(NextVar,maxNextVar(VTS)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederendfm
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maederfmod META-AC-UNIFICATION is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr TERM-HANDLING .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr SUBSTITUTION-HANDLING .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr MODULE-HANDLING .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr SUBSTITUTIONSET .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr UNIFICATIONPAIRSET .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr CONVERSION .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr META-LEVEL .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr META-MINIMIZE-BINDINGS .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr META-E-UNIFICATION .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var M : Module .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars T T' : Term .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars N N' : Nat .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars US : UnificationTripleSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder --- metaACUnify --------------------------------------------------
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder op metaACUnify : Module Term Term -> SubstitutionSet .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq metaACUnify(M, T, T')
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder = toSubstitution(metaACUnify(M, T, T', highestVar((T,T')) + 1)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder op metaACUnify? : Module Term Term -> Bool .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq metaACUnify?(M, T, T')
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder = metaACUnify?(M, T, T', highestVar((T,T')) + 1) .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder--- eq metaACUnify?(M, T, T')
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder--- = metaACUnify(M, T, T') =/= empty .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** General Call for UnificationPairSet
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder op metaACUnify : Module Term Term Nat -> UnificationTripleSet .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq metaACUnify(M, T, T', N)
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder = metaACUnify$(M, canonice(M,T), canonice(M,T'), N) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder op metaACUnify$ : Module Term Term Nat -> UnificationTripleSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder --- Term Lhs
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq metaACUnify$(M, T, T', N)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = if (root(T) =/= root(T')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder and not (root(T) :: Variable) and not (root(T') :: Variable))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder or-else
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder glbSorts(M,leastSort(M,T),leastSort(M,T')) == none
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then empty
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else minimizeBindingsTerm(M,Vars(T),N,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder metaACUnifyCollect(M, T, T',N,0,empty))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder op metaACUnify? : Module Term Term Nat -> Bool .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq metaACUnify?(M, T, T', N)
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder = metaACUnify?$(M, canonice(M,T), canonice(M,T'), N) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder op metaACUnify?$ : Module Term Term Nat -> Bool .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq metaACUnify?$(M, T, T', N)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = glbSorts(M,leastSort(M,T),leastSort(M,T')) =/= none
473b81d33893192056dde74b26b2467f983c102cChristian Maeder and-then
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder (metaACUnify*(M,T =? T',N,0) :: UnificationTriple?
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder and
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder metaACUnify*(M,T =? T',N,0) =/= noUnifier) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op metaACUnifyCollect : Module Term Term Nat Nat
473b81d33893192056dde74b26b2467f983c102cChristian Maeder UnificationTripleSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder -> UnificationTripleSet .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq metaACUnifyCollect(M,T,T',N,N',US)
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder = if metaACUnify*(M,T =? T',N,N') :: UnificationTriple?
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder and
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder metaACUnify*(M,T =? T',N,N') =/= noUnifier
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder then metaACUnifyCollect(M,T,T',N,s(N'),
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder US | metaACUnify*(M,T =? T',N,N') )
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else US
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** Code for collection all unifiers
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder op metaACUnify* : Module UnificandPair Nat Nat ~> UnificationTriple? .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq metaACUnify*(M, T =? T',N,N')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = metaUnifyTriple(
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder keepOnlyACAttr(eraseEqs(eraseRls(M))),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder unflatten(M,T) =? unflatten(M,T'),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder N,N') .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder op metaUnifyTriple : Module UnificationProblem Nat Nat ~> UnificationTriple? .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq metaUnifyTriple(M,T =? T',N,N')
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder = if metaUnify(M,T =? T',N,N') == noUnifier
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder then noUnifier
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder else {getSubst(metaUnify(M,T =? T',N,N')) |> T,
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder getSubst(metaUnify(M,T =? T',N,N')) |> T',
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder getNextVar(metaUnify(M,T =? T',N,N'))}
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder fi .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maederendfm
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maederfmod META-ACU-UNIFICATION is
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder pr META-AC-UNIFICATION .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder pr IRR-FLAGS .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder var M : Module .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder vars T T' Lhs Rhs : Term .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder var S : Substitution .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder var V : Variable .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder var C : Constant .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder vars N N' : Nat .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder var US : [UnificationPairSet] .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder vars F F' : Qid .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder var AtS : AttrSet .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder var At : Attr .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder var TP TP' : Type .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder var TPL TPL' : TypeList .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder var OPDS : OpDeclSet .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder var TL : NeTermList .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder var EqS : EquationSet .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder var IRR : IrrFlags .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder --- metaACUUnify --------------------------------------------------
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder op metaACUUnify : Module Term Term -> SubstitutionSet .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq metaACUUnify(M, T, T')
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder = toSubstitution(metaACUUnify(M,T,T',highestVar((T,T')) + 1)) .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder op metaACUUnify : Module Term Term Nat -> UnificationTripleSet .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq metaACUUnify(M, T, T',N)
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder = metaACUUnify*(M,T,T',N,reducible) .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder op metaACUUnifyIrr : Module Term Term -> SubstitutionSet .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq metaACUUnifyIrr(M, T, T')
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder = toSubstitution(metaACUUnifyIrr(M,T,T',highestVar((T,T')) + 1)) .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder op metaACUUnifyIrr : Module Term Term Nat -> UnificationTripleSet .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq metaACUUnifyIrr(M, T, T',N)
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder = metaACUUnify*(M,T,T',N,irreducible) .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder op metaACUUnify-minimal : Module Term Term -> SubstitutionSet .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq metaACUUnify-minimal(M, T, T')
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder = toSubstitution(metaACUUnify-minimal(M,T,T',highestVar((T,T')) + 1)) .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder op metaACUUnify-minimal : Module Term Term Nat -> UnificationTripleSet .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq metaACUUnify-minimal(M, T, T',N)
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder = metaACUUnify*(M,T,T',N,reducible minimal-unifiers) .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder op metaACUUnifyIrr-minimal : Module Term Term -> SubstitutionSet .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq metaACUUnifyIrr-minimal(M, T, T')
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder = toSubstitution(metaACUUnifyIrr-minimal(M,T,T',highestVar((T,T')) + 1)) .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder op metaACUUnifyIrr-minimal : Module Term Term Nat -> UnificationTripleSet .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq metaACUUnifyIrr-minimal(M, T, T',N)
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder = metaACUUnify*(M,T,T',N,irreducible minimal-unifiers) .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder *** General Call for UnificationPairSet
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder op metaACUUnify* : Module Term Term Nat IrrFlags -> UnificationTripleSet .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder --- Term Lhs
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq metaACUUnify*(M, T, T', N,IRR)
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder = if glbSorts(M,leastSort(M,T),leastSort(M,T')) == none
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder then empty
473b81d33893192056dde74b26b2467f983c102cChristian Maeder else minimizeBindingsTerm(M,Vars(T),metaACUUnifyAux(M,T,T',N,IRR))
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder fi .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder op metaACUUnifyAux : Module Term Term Nat IrrFlags -> UnificationTripleSet .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq metaACUUnifyAux(M,T,T',N,IRR)
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder = if getBound(eqsforIdSymbols(M,(T,T'))) > 0
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder then filter-variant-UP(IRR,eqs2rls(clearAllFrozen(M)),N,
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder metaEACUnify(
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder keepOnlyACAttr(
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder addEqs(getEqs(eqsforIdSymbols(M,(T,T'))),eraseEqs(eraseRls(M)))
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder ),
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder unflatten(M,T), unflatten(M,T'), N,
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder IRR
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder )
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder )
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder else metaACUnifyCollect(M, T, T',N,0,empty)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder *** Extra handy sort
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder sort Eqs&Bound .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder op {_,_} : EquationSet Nat -> Eqs&Bound .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder op getEqs : Eqs&Bound -> EquationSet .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq getEqs({X:EquationSet,X:Nat}) = X:EquationSet .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder op getBound : Eqs&Bound -> Nat .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq getBound({X:EquationSet,X:Nat}) = X:Nat .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder op _+_ : Eqs&Bound Eqs&Bound -> Eqs&Bound .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq {X1:EquationSet,X1:Nat} + {X2:EquationSet,X2:Nat}
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder = {X1:EquationSet X2:EquationSet, X1:Nat + X2:Nat} .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder *** Extra code for ACU Unification
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder op eqsforIdSymbols : Module NeTermList -> Eqs&Bound . ---[memo] .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq eqsforIdSymbols(M,TL) = eqsforIdSymbols*(M,getOps(M),TL) .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder op eqsforIdSymbols* : Module OpDeclSet NeTermList -> Eqs&Bound .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq eqsforIdSymbols*(M,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder (op F : TPL -> TP [special(X:NeHookList) AtS] .) OPDS,TL)
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder = eqsforIdSymbols*(M,OPDS,TL) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq eqsforIdSymbols*(M,(op F : TPL -> TP [id(T) AtS] .) OPDS,TL)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = eqsforIdSymbols**(M,F,getKind(M,TP),id(T),TL)
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder + eqsforIdSymbols*(M,OPDS,TL) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq eqsforIdSymbols*(M,(op F : TPL -> TP [left-id(T) AtS] .) OPDS,TL)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = eqsforIdSymbols**(M,F,getKind(M,TP),left-id(T),TL)
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder + eqsforIdSymbols*(M,OPDS,TL) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq eqsforIdSymbols*(M,(op F : TPL -> TP [right-id(T) AtS] .) OPDS,TL)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = eqsforIdSymbols**(M,F,getKind(M,TP),right-id(T),TL)
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder + eqsforIdSymbols*(M,OPDS,TL) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq eqsforIdSymbols*(M,OPDS,TL)
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder = {none,0} [owise] .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder op eqsforIdSymbols** : Module Qid Type Attr NeTermList -> Eqs&Bound .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq eqsforIdSymbols**(M,F,TP,At,C)
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder = {none,0} .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq eqsforIdSymbols**(M,F,TP,At,V)
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder = {none,0} .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq eqsforIdSymbols**(M,F',TP,id(T),F[TL])
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = if F == F'
473b81d33893192056dde74b26b2467f983c102cChristian Maeder and-then
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder getKind(M,leastSort(M,F[TL])) == TP
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder then if isCommutative(M,F,getTypes(M,TL))
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder then {(eq F[T,addType TP ToVar 'X] = addType TP ToVar 'X [none] .),1}
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder else {(eq F[T,addType TP ToVar 'X] = addType TP ToVar 'X [none] .)
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder (eq F[addType TP ToVar 'X,T] = addType TP ToVar 'X [none] .),1}
473b81d33893192056dde74b26b2467f983c102cChristian Maeder fi
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder else {none,0}
473b81d33893192056dde74b26b2467f983c102cChristian Maeder fi
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder + eqsforIdSymbols**(M,F',TP,id(T),TL) .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq eqsforIdSymbols**(M,F',TP,left-id(T),F[TL])
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = if F == F'
473b81d33893192056dde74b26b2467f983c102cChristian Maeder and-then
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder getKind(M,leastSort(M,F[TL])) == TP
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder and-then
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder not isCommutative(M,F,getTypes(M,TL))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder then {(eq F[T,addType TP ToVar 'X] = addType TP ToVar 'X [none] .),1}
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder else {none,0}
473b81d33893192056dde74b26b2467f983c102cChristian Maeder fi
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder + eqsforIdSymbols**(M,F',TP,left-id(T),TL) .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq eqsforIdSymbols**(M,F',TP,right-id(T),F[TL])
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = if F == F'
473b81d33893192056dde74b26b2467f983c102cChristian Maeder and-then
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder getKind(M,leastSort(M,F[TL])) == TP
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder and-then
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder not isCommutative(M,F,getTypes(M,TL))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder then {(eq F[addType TP ToVar 'X,T] = addType TP ToVar 'X [none] .),1}
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder else {none,0}
473b81d33893192056dde74b26b2467f983c102cChristian Maeder fi
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder + eqsforIdSymbols**(M,F',TP,right-id(T),TL) .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq eqsforIdSymbols**(M,F,TP,At,(T,TL))
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder = eqsforIdSymbols**(M,F,TP,At,T) + eqsforIdSymbols**(M,F,TP,At,TL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederendfm
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederfmod META-UNIFICATION is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr META-ACU-UNIFICATION .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var M : Module .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var T T' : Term .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var N : Nat .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder --- metaUnify --------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op metaCoreUnify : Module Term Term -> SubstitutionSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq metaCoreUnify(M, T, T')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = toSubstitution(metaCoreUnify(M, T, T', highestVar((T,T')) + 1)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op metaCoreUnify : Module Term Term Nat -> UnificationTripleSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder --- Term Lhs
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq metaCoreUnify(M, T, T', N)
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder = metaACUnify(M, T, T', N) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op metaCoreUnify? : Module Term Term Nat -> Bool .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder --- Term Lhs
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq metaCoreUnify?(M, T, T', N)
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder = metaACUnify?(M, T, T', N) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederendfm
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederfmod META-MSG-UNIFICATION is
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder pr META-AC-UNIFICATION .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder--- pr unification * (op Solve(_,_,_) to metaHEUnify,
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder--- op HasHomomorphism to IsMetaHEUnify) .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder *** Add this and modify metaMsgUnify*Msg in replacement
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder op IsMetaHEUnify : Module -> Bool .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq IsMetaHEUnify(M) = false .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var M : Module .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder vars T T' T1# T2# T1 T2 : Term .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder vars N N' N1# N2# : Nat .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars S S' S1# S2# LSubst RSubst : Substitution .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var UP : UnificationProblem .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder var UTS : UnificationTripleSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var C : Constant .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder vars V V1 V2 : Variable .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder var F : Qid .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder var TL : TermList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var NeTL : NeTermList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ******* metaBuiltInMatch ***********************************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op metaBuiltInMatch : Module Term Term -> SubstitutionSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** T1 instance of T2
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq metaBuiltInMatch(M, T, T')
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder = toSubstitution(metaBuiltInMatch(M, T, T', highestVar((T,T')) + 1)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op metaBuiltInMatch? : Module Term Term -> Bool .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** T1 instance of T2
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq metaBuiltInMatch?(M, T, T')
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder = metaBuiltInMatch?(M, T, T', highestVar((T,T')) + 1) .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder op metaBuiltInMatch : Module Term Term Nat -> UnificationTripleSet .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder --- Term Lhs
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq metaBuiltInMatch(M, T1, T2, N)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = unrigidife(qid(N),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder metaBuiltInUnify(getM(rigidifeNat(M,qid(N),T1,N)),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder getTL(rigidifeNat(M,qid(N),T1,N)),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder T2,
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder N + 1)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ) .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder op metaBuiltInMatch? : Module Term Term Nat -> Bool .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder --- Term Lhs
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq metaBuiltInMatch?(M, T1, T2, N)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = metaBuiltInUnify?(getM(rigidifeNat(M,qid(N),T1,N)),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder getTL(rigidifeNat(M,qid(N),T1,N)),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder T2,
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder N + 1) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ******* metaBuiltInUnify ***********************************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op metaBuiltInUnify : Module Term Term -> SubstitutionSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq metaBuiltInUnify(M, T, T')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = toSubstitution(metaBuiltInUnify(M, T, T', highestVar((T,T')) + 1)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** General Call for UnificationPairSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op metaBuiltInUnify : Module Term Term Nat -> UnificationTripleSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder --- Term Lhs
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq metaBuiltInUnify(M, T1, T2, N)
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder = if IsMetaHEUnify(M)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder then
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder minimizeBindingsTerm(M,Vars(T1),N,metaMsgUnify*(M, T1, T2,N))
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder else
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder metaCoreUnify(M, T1, T2, N)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op metaBuiltInUnify? : Module Term Term Nat -> Bool .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq metaBuiltInUnify?(M, T1, T2, N)
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder = if IsMetaHEUnify(M)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder then
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder metaMsgUnify*?(M, T1, T2,N)
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder else
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder metaCoreUnify?(M, T1, T2, N)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder fi .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder op metaMsgUnify* : Module Term Term Nat ~> UnificationTripleSet .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder ceq metaMsgUnify*(M, T1, T2, N)
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder = if not (metaCoreUnify(M,T1#,T2#,N2#) :: UnificationTripleSet)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder or
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder metaCoreUnify(M,T1#,T2#,N2#) == empty
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder then empty
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder else metaMsgUnify**(M,S1#,S2#,metaCoreUnify(M,T1#,T2#,N2#))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder fi
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder if (T1#,S1#,N1#) := generalize(M,T1,N)
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder /\ (T2#,S2#,N2#) := generalize(M,T2,N1#) .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder op metaMsgUnify*? : Module Term Term Nat ~> Bool .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder ceq metaMsgUnify*?(M, T1, T2, N)
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder = metaCoreUnify?(M,T1#,T2#,N2#)
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder and-then
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder metaMsgUnify**?(M,S1#,S2#,metaCoreUnify(M,T1#,T2#,N2#))
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder if (T1#,S1#,N1#) := generalize(M,T1,N)
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder /\ (T2#,S2#,N2#) := generalize(M,T2,N1#) .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder sort TripleGenVar .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder op `(_`,_`,_`) : TermList Substitution Nat -> TripleGenVar .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder op getTL : TripleGenVar -> Term .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq getTL((TL,S,N)) = TL .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder op getS : TripleGenVar -> Substitution .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq getS((TL,S,N)) = S .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder op getN : TripleGenVar -> Nat .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq getN((TL,S,N)) = N .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder op generalize : Module Term Nat -> TripleGenVar .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq generalize(M,T,N)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = if typeLeq(M,leastSort(M,T),'Msg)
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder then (newVar(N,'Msg),newVar(N,'Msg) <- T,N + 1)
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder else generalize*(M,T,N)
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder op generalize* : Module Term Nat -> TripleGenVar .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq generalize*(M,C,N) = (C,none,N) .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq generalize*(M,V,N) = (V,none,N) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq generalize*(M,F[NeTL],N)
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder = (F[getTL(generalize*TL(M,NeTL,N))],
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder getS(generalize*TL(M,NeTL,N)),
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder getN(generalize*TL(M,NeTL,N))) .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder op generalize*TL : Module TermList Nat -> TripleGenVar .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq generalize*TL(M,empty,N)
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder = (empty,none,N) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq generalize*TL(M,(T,TL),N)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = ((getTL(generalize(M,T,N)),
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder getTL(generalize*TL(M,TL,getN(generalize(M,T,N))))),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder (getS(generalize(M,T,N))
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder ; getS(generalize*TL(M,TL,getN(generalize(M,T,N))))),
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder getN(generalize*TL(M,TL,getN(generalize(M,T,N))))) .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op metaMsgUnify** : Module Substitution Substitution
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder UnificationTripleSet -> UnificationTripleSet .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq metaMsgUnify**(M, S1#, S2#, empty)
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder = empty .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq metaMsgUnify**(M, S1#, S2#, {S,S',N} | UTS)
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder = metaMsgUnify***(M, S1#, S2#, {S,S',N})
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder | metaMsgUnify**(M, S1#, S2#, UTS) .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op metaMsgUnify**? : Module Substitution Substitution
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder UnificationTripleSet -> Bool .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq metaMsgUnify**?(M, S1#, S2#, empty)
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder = false .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq metaMsgUnify**?(M, S1#, S2#, {S,S',N} | UTS)
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder = metaMsgUnify***(M, S1#, S2#, {S,S',N}) =/= empty
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder or-else
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder metaMsgUnify**?(M, S1#, S2#, UTS) .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op metaMsgUnify*** : Module Substitution Substitution
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder UnificationTriple -> UnificationTripleSet .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq metaMsgUnify***(M,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder V1 <- T1 ; S1#,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder V2 <- T2 ; S2#,
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder {V1 <- V2 ; S,S',N})
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = metaMsgUnify****L(M,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder V1 <- T1 ; S1#,
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder V2 <- T2 ; S2#,
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder V1,V2,
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder {V1 <- V2 ; S,S',N},
473b81d33893192056dde74b26b2467f983c102cChristian Maeder metaMsgUnify*Msg(M, T1, T2, N)
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder ) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq metaMsgUnify***(M,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder V1 <- T1 ; S1#,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder V2 <- T2 ; S2#,
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder {S,V2 <- V1 ; S',N})
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = metaMsgUnify****R(M,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder V1 <- T1 ; S1#,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder V2 <- T2 ; S2#,
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder V1,V2,
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder {S,V2 <- V1 ; S',N},
473b81d33893192056dde74b26b2467f983c102cChristian Maeder metaMsgUnify*Msg(M, T1, T2, N)
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder ) .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq metaMsgUnify***(M, S1#, S2#, {S,S',N})
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder = {S << S2#,S' << S1#,N} [owise] .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op metaMsgUnify****L : Module Substitution Substitution
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder Variable Variable UnificationTriple
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder UnificationTripleSet -> UnificationTripleSet .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq metaMsgUnify****L(M,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder V1 <- T1 ; S1#,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder V2 <- T2 ; S2#,
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder V1,V2,
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder {V1 <- V2 ; S,S',N},
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder empty)
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder = empty . *** Error, no total unification is possible!!!
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq metaMsgUnify****L(M,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder V1 <- T1 ; S1#,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder V2 <- T2 ; S2#,
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder V1,V2,
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder {V1 <- V2 ; S,S',N},
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder {LSubst,RSubst,N'})
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = metaMsgUnify***(M,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder (V1 <- T1 ; S1#) << LSubst,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder (V2 <- T2 ; S2#) << RSubst,
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder {S .. LSubst,S' .. RSubst,N'}) .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op metaMsgUnify****R : Module Substitution Substitution
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder Variable Variable UnificationTriple
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder UnificationTripleSet -> UnificationTripleSet .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq metaMsgUnify****R(M,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder V1 <- T1 ; S1#,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder V2 <- T2 ; S2#,
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder V1,V2,
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder {S,V2 <- V1 ; S',N},
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder empty)
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder = empty . *** Error, no total unification is possible!!!
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq metaMsgUnify****R(M,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder V1 <- T1 ; S1#,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder V2 <- T2 ; S2#,
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder V1,V2,
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder {S,V2 <- V1 ; S',N},
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder {LSubst,RSubst,N'})
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = metaMsgUnify***(M,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder (V1 <- T1 ; S1#) << LSubst,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder (V2 <- T2 ; S2#) << RSubst,
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder {S .. LSubst,S' .. RSubst,N'}) .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder --- We assume it is unitary unification!!!!!
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder op metaMsgUnify*Msg : Module Term Term Nat -> UnificationTripleSet .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder--- ceq metaMsgUnify*Msg(M, T, T', N)
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder--- = { S |> T, S |> T', N' }
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder--- if unifiable ; S ; N' := metaHEUnify(M, T ~ T', N) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq metaMsgUnify*Msg(M, T, T', N)
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder = empty [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederendfm
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederfmod ORDERS-TERM-SUBSTITUTION is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder protecting TERM-HANDLING .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder protecting SUBSTITUTION-HANDLING .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder protecting META-LEVEL .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder protecting META-UNIFICATION .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder protecting META-E-UNIFICATION .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder protecting RENAMING .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder protecting SUBSTITUTIONSET .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars T T' : Term .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder vars TL TL' : TermList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var M : Module .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars S S' : Substitution .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars SS SS' : SubstitutionSet .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder vars V V' : Variable .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars TPL TPL' : TypeList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars N N' : Nat .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder --- Not defined in this module ----------------------------------------
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder op isNF$ : Module Term ~> Bool .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder --- Not defined in this module ----------------------------------------
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder --- metaCoreMatch(M,T,T') implies that T is an instance of T'
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder op metaCoreMatch : Module Term Term -> SubstitutionSet .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq metaCoreMatch(M,T,T')
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder = metaCoreMatch$(M,canonice(M,T),canonice(M,T')) .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder op metaCoreMatch$ : Module Term Term -> SubstitutionSet .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq metaCoreMatch$(M,T,T')
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder = if glbSorts(M,leastSort(M,T),leastSort(M,T')) == none
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder then empty
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder else metaCoreMatchCollect(eraseEqs(eraseRls(M)),T,T')
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder fi .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder op metaCoreMatch? : Module Term Term -> Bool .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq metaCoreMatch?(M,T,T')
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder = metaCoreMatch?$(M,canonice(M,T),canonice(M,T')) .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder op metaCoreMatch?$ : Module Term Term -> Bool .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq metaCoreMatch?$(M,T,T')
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder = glbSorts(M,leastSort(M,T),leastSort(M,T')) =/= none
473b81d33893192056dde74b26b2467f983c102cChristian Maeder and-then
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder metaMatch(eraseEqs(eraseRls(M)),T',T,nil,0) =/= noMatch .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder op metaCoreMatchSearchNone : Module TermList Term Term -> Bool .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder--- eq metaCoreMatchSearchNone(M,TL,T,T')
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder--- = metaCoreMatchSearchNone$(M,TL,canonice(M,T),canonice(M,T')) .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq metaCoreMatchSearchNone(M,TL,T,T')
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder = canonice(M,T) == canonice(M,T') .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder op metaCoreMatchSearchNone$ : Module TermList Term Term -> Bool .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq metaCoreMatchSearchNone$(M,TL,T,T')
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder = glbSorts(M,leastSort(M,T),leastSort(M,T')) =/= none
473b81d33893192056dde74b26b2467f983c102cChristian Maeder and-then
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder metaCoreMatchCollectSearchNone(eraseEqs(eraseRls(M)),TL,T,T') .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder --- metaCoreMatchCollect(M,T,T') calls Maude metaMatch
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder op metaCoreMatchCollect : Module Term Term -> SubstitutionSet . ---[memo] .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq metaCoreMatchCollect(M,T,T')
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder = metaCoreMatchCollect*(M,T,T',empty,0) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op metaCoreMatchCollect* : Module Term Term SubstitutionSet Nat
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder -> SubstitutionSet .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq metaCoreMatchCollect*(M,T,T',SS,N:Nat)
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder = if metaMatch(M,T',T,nil,N:Nat) =/= noMatch
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder then metaCoreMatchCollect*(M,T,T',
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder SS | metaMatch(M,T',T,nil,N:Nat),
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder s(N:Nat))
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder else SS
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder fi .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder --- metaCoreMatchCollectSearchNone(M,T,T') calls Maude metaMatch
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder op metaCoreMatchCollectSearchNone : Module TermList Term Term -> Bool .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq metaCoreMatchCollectSearchNone(M,TL,T,T')
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder = metaCoreMatchCollectSearchNone*(M,TL,T,T',0) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder op metaCoreMatchCollectSearchNone* : Module TermList Term Term Nat -> Bool .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq metaCoreMatchCollectSearchNone*(M,TL,T,T',N:Nat)
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder = metaMatch(M,T',T,nil,N:Nat) =/= noMatch
473b81d33893192056dde74b26b2467f983c102cChristian Maeder and-then
473b81d33893192056dde74b26b2467f983c102cChristian Maeder (metaMatch(M,T',T,nil,N:Nat) |> TL == none
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder or-else
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder metaCoreMatchCollectSearchNone*(M,TL,T,T',s(N:Nat))) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder --- metaEMatch(M,T,T') implies that T is an instance of T' modulo E + axioms
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op metaEMatch : Module Term Term -> SubstitutionSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq metaEMatch(M,T,T')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if metaCoreMatch(M,T,T') =/= empty
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then metaCoreMatch(M,T,T')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else if metaEBuiltInUnifyIrr?(M,T,T')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then metaShared-filter(M,T,T',metaEBuiltInUnifyIrr(M,T,T'))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else empty
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op metaEMatch? : Module Term Term -> Bool .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq metaEMatch?(M,T,T')
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = metaCoreMatch?(M,T,T')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder or-else
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder metaEBuiltInUnifyIrr?(M,T,T') .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder --- Standard metaMatch does not deal with shared variables between T and T'
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder --- metaCoreMatch(M,T,T') implies that T is an instance of T'
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder op metaCoreMatchShared : Module Term Term -> SubstitutionSet .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq metaCoreMatchShared(M,T,T')
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder = metaShared-filter(M,T,T',metaCoreMatch(M,T,T')) .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder op metaShared-filter : Module Term Term SubstitutionSet
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder -> SubstitutionSet .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq metaShared-filter(M,T,T',SS)
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder = metaShared-filter*(M,T,T',empty,SS) .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op metaShared-filter* : Module Term Term SubstitutionSet SubstitutionSet
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder -> SubstitutionSet .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq metaShared-filter*(M,T,T',SS',empty)
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder = SS' .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq metaShared-filter*(M,T,T',SS',S | SS)
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder = metaShared-filter*(M,T,T',
473b81d33893192056dde74b26b2467f983c102cChristian Maeder if S |> T == none
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder then SS' | S
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder else SS'
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder fi,
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder SS ) .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder --- order between terms ---------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder --- T <=[M] T' implies that T' is an instance of T
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op _<=[_]_ : Term Module Term -> Bool .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq T <=[M] T' = (metaCoreMatch(M,T',T) |> T) =/= empty .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder --- order between substitutions ---------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder --- Subst <=[M] Subst' implies that Subst' is an instance of Subst
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op _<=[_]_ : SubstitutionSet Module SubstitutionSet -> Bool [ditto] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq SS <=[M] SS'
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = SS <=[empty,M] SS' .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op _<=[_`,_]_ : SubstitutionSet TermList Module SubstitutionSet -> Bool .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq empty <=[TL,M] SS'
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = false .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq SS <=[TL,M] SS'
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = SS <=[TL,M]$ SS' [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op _<=[_`,_]$_ : SubstitutionSet TermList Module SubstitutionSet -> Bool .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq SS <=[TL,M]$ empty
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = true .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq SS <=[TL,M]$ (S' | SS')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (SS <=[TL,M]* S') and-then SS <=[TL,M]$ SS' .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op _<=[_`,_]*_ : SubstitutionSet TermList Module Substitution -> Bool .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq empty <=[TL,M]* S'
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = false .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq (S | SS) <=[TL,M]* S'
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = S <=[TL,M]** S' or-else SS <=[TL,M]* S' .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op _<=[_`,_]**_ : Substitution TermList Module Substitution -> Bool .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq none <=[TL,M]** S'
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = true .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq S <=[TL,M]** S'
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = 'Q[1st(gen(TL,S,S'))]
473b81d33893192056dde74b26b2467f983c102cChristian Maeder *<=[
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder addSorts('XXX,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder addOps((op 'Q : 3rd(gen(TL,S,S')) -> 'XXX [none] .),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder M))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ]*
473b81d33893192056dde74b26b2467f983c102cChristian Maeder 'Q[2nd(gen(TL,S,S'))]
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder --- T <=[M] T' implies that T' is an instance of T
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder --- T and T' can have shared variables
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op _*<=[_]*_ : Term Module Term -> Bool .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq T *<=[M]* T'
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (if anyVars T inVars T'
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then metaCoreMatchShared(M,T',T)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else metaCoreMatch(M,T',T)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder fi |> T)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder =/= empty .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder sort Triple .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op {{_`,_`,_}} : TermList TermList TypeList -> Triple .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op 1st : Triple -> TermList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq 1st({{TL,TL',TPL}}) = TL .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op 2nd : Triple -> TermList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq 2nd({{TL,TL',TPL}}) = TL' .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op 3rd : Triple -> TypeList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq 3rd({{TL,TL',TPL}}) = TPL .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ops gen : TermList Substitution Substitution -> Triple . ---[memo] .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq gen(empty,none,none)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = {{empty,empty,nil}} .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq gen((V,TL),none,none)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = {{(V,1st(gen(TL,none,none))),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder (V,2nd(gen(TL,none,none))),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder (getType(V) 3rd(gen(TL,none,none)))}} .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq gen(TL,none,V <- T ; S')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = {{(V,1st(gen(TL \\ V,none,S'))),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder (T,2nd(gen(TL \\ V,none,S'))),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder (getType(V) 3rd(gen(TL \\ V,none,S')))}} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq gen(TL,V <- T ; S,V <- T' ; S')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = {{(T,1st(gen(TL \\ V,S,S'))),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder (T',2nd(gen(TL \\ V,S,S'))),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder (getType(V) 3rd(gen(TL \\ V,S,S')))}} .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq gen(TL,V <- T ; S,S')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = {{(T,1st(gen(TL \\ V,S,S'))),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder (V,2nd(gen(TL \\ V,S,S'))),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder (getType(V) 3rd(gen(TL \\ V,S,S')))}}
473b81d33893192056dde74b26b2467f983c102cChristian Maeder [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op _\\_ : TermList Variable -> TermList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq (TL,V,TL') \\ V = (TL,TL') .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq TL \\ V = TL [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder --- renaming -----------------------------------------------
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder op metaCoreRenaming : Module Term Term -> Bool .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq metaCoreRenaming(M,T,T')
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder = T =[M]= T' .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder op _=[_]=_ : TermSet Module TermSet -> Bool .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq emptyTermSet =[M:Module]= emptyTermSet
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = true .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ceq T:Term | T:TermSet =[M:Module]= T':Term | T':TermSet
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = T:TermSet =[M:Module]= T':TermSet
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder if T:Term =[M:Module]$= T':Term .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq T:TermSet =[M:Module]= T':TermSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = false [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder op _=[_]$=_ : Term Module Term -> Bool .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq T =[M]$= T'
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder = canonice(M,T) =[M]$$= canonice(M,T') .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder op _=[_]$$=_ : Term Module Term -> Bool .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq T =[M]$$= T'
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = T == T'
473b81d33893192056dde74b26b2467f983c102cChristian Maeder or-else
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder onlyRenaming(metaCoreMatchShared(M,T',T) |> T) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder op onlyRenaming : SubstitutionSet -> Bool .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq onlyRenaming(empty)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = false .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq onlyRenaming(S | SS)
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder = onlyRenaming*(S) or-else onlyRenaming(SS) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder op onlyRenaming* : Substitution -> Bool .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq onlyRenaming*((V <- T) ; (V' <- T) ; S)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = false .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq onlyRenaming*(S) = onlyRenaming**(S) [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder op onlyRenaming** : Substitution -> Bool .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq onlyRenaming**(none)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = true .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq onlyRenaming**((V <- T) ; S)
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder = T :: Variable and onlyRenaming**(S) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** Normalize Substitutions
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op normalizedSubstitution? : Module SubstitutionSet -> Bool .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq normalizedSubstitution?(M, empty)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = true .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq normalizedSubstitution?(M, S | SS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = normalizedSubstitution?*(M, S) and-then normalizedSubstitution?(M, SS) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op normalizedSubstitution?* : Module Substitution -> Bool . ---[memo] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq normalizedSubstitution?*(M, none)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = true .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq normalizedSubstitution?*(M, V <- T ; S:Substitution)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = isNF$(clearAllFrozen(M),T)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder and-then
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder normalizedSubstitution?*(M, S:Substitution) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** Normalize Substitutions
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op |_|`(_`) : SubstitutionSet Module -> SubstitutionSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq | S:SubstitutionSet |(M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = eqNormalizeSubstitution(M,S:SubstitutionSet) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op eqNormalizeSubstitution : Module SubstitutionSet -> SubstitutionSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq eqNormalizeSubstitution(M, empty)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = empty .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq eqNormalizeSubstitution(M, S | SS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = eqNormalizeSubstitution*(M, S) | eqNormalizeSubstitution(M, SS) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op eqNormalizeSubstitution* : Module Substitution -> Substitution .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq eqNormalizeSubstitution*(M, none)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = none .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq eqNormalizeSubstitution*(M, V <- T ; S:Substitution)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = V <- getTerm(metaReduce(eraseRls(M),T))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ; eqNormalizeSubstitution*(M, S:Substitution) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederendfm
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederfmod META-NORMALIZE is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder protecting META-TERM .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder protecting META-LEVEL .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder protecting META-UNIFICATION .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder protecting RESULT-CONTEXT-SET .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder protecting ORDERS-TERM-SUBSTITUTION .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder protecting TYPEOFNARROWING .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars T T' TOrig Lhs Rhs TS TS' CtTS CtTS' : Term .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var V : Variable .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var C : Constant .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var F : Qid .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars TL TL' : TermList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var M : Module .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars RTS RTS' RTS$ RTS$' : ResultContextSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars RT RT' : ResultContext .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars TP TP' : Type .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars S S' S* S'* Subst : Substitution .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var RLS : RuleSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var Att : AttrSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars B BN : Bound .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars N NextVar NextVar' : Nat .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var NL : NatList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars Ct CtS Ct' CtS' : Context .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var ON : TypeOfNarrowing .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var QQ : TypeOfRelation .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** Shortcut to Normalization by rewriting Search
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op metaNormalizeCollect$ : Module Term ~> ResultTripleSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq metaNormalizeCollect$(M,T)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = metaNormalizeCollect$(M,{T,leastSort(M,T),none}) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op metaNormalizeCollect$ : Module Term Type ~> ResultTripleSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq metaNormalizeCollect$(M,T,TP)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = metaNormalizeCollect$(M,{T,TP,none}) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op metaNormalizeCollect$ : Module ResultTriple ~> ResultTripleSet . ---[memo] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq metaNormalizeCollect$(M,{T,TP,S})
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = metaSearchCollect(M,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder T, (addType TP ToVar 'XXXXXXX),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder '!,unbounded) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** Shortcut to One rewriting step
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op metaOneRewriting$ : Module Term ~> ResultTripleSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq metaOneRewriting$(M,T)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = metaOneRewriting$(M,{T,leastSort(M,T),none}) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op metaOneRewriting$ : Module Term Type -> ResultTripleSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq metaOneRewriting$(M,T,TP)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = metaOneRewriting$(M,{T,TP,none}) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op metaOneRewriting$ : Module ResultTriple -> ResultTripleSet . ---[memo] .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq metaOneRewriting$(M,{T,TP,S})
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = metaSearchCollect(M,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder T, (addType TP ToVar 'XXXXXXX),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder '+,1) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder *** Use Standard Maude metaSearch
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op metaSearchCollect : Module Term Term TypeOfRelation Bound
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ~> ResultTripleSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq metaSearchCollect(M,T,T',QQ,B)
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder = metaSearchCollect(clearNonExec(M),T,T',QQ,B,0) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op metaSearchCollect : Module Term Term TypeOfRelation Bound Nat
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ~> ResultTripleSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq metaSearchCollect(M,T,T',QQ,B,N:Nat)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if metaSearch(M,T,T',nil,[QQ],B,N:Nat) :: ResultTripleSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder and
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder metaSearch(M,T,T',nil,[QQ],B,N:Nat) =/= failure
473b81d33893192056dde74b26b2467f983c102cChristian Maeder then metaSearch(M,T,T',nil,[QQ],B,N:Nat)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder |
473b81d33893192056dde74b26b2467f983c102cChristian Maeder metaSearchCollect(M,T,T',QQ,B,s(N:Nat))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else empty
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** Shortcut to normal form detection
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op isNF$ : Module Term ~> Bool .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq isNF$(M,T) = isNF$$(M,T,leastSort(M,T)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op isNF$$ : Module Term Type ~> Bool .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq isNF$$(M,T,TP)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = metaSearch(M,T,(addType TP ToVar 'XXXXXXX),nil,'+,1,0) == failure .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ***********************************************************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder --- Not defined in this module-------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op metaNarrowSearchAll : Module Term Term SubstitutionCond TypeOfRelation
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder Bound Bound --- number steps / number solutions
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder TypeOfNarrowing
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ResultContextSet
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder -> ResultContextSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op oneMoreStep : Module SubstitutionCond TypeOfNarrowing
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder ResultContextSet -> ResultContextSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder --- Not defined in this module-------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op metaNormalizeCollect : Module Term ~> ResultTripleSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq metaNormalizeCollect(M,T)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if anyNonExec(M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then metaNormalizeCollect#(M,T)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else metaNormalizeCollect$(M,T)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op metaNormalizeCollect : Module Term Type -> ResultTripleSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq metaNormalizeCollect(M,T,TP)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if anyNonExec(M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then metaNormalizeCollect#(M,T,TP)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else metaNormalizeCollect$(M,T,TP)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op metaNormalizeCollect : Module ResultTriple -> ResultTripleSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq metaNormalizeCollect(M,{T,TP,S})
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if anyNonExec(M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then metaNormalizeCollect#(M,{T,TP,S})
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else metaNormalizeCollect$(M,{T,TP,S})
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op metaOneRewriting : Module Term ~> ResultTripleSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq metaOneRewriting(M,T)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if anyNonExec(M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then metaOneRewriting#(M,T)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else metaOneRewriting$(M,T)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op metaOneRewriting : Module Term Type -> ResultTripleSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq metaOneRewriting(M,T,TP)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if anyNonExec(M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then metaOneRewriting#(M,T,TP)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else metaOneRewriting$(M,T,TP)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op metaOneRewriting : Module ResultTriple -> ResultTripleSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq metaOneRewriting(M,{T,TP,S})
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if anyNonExec(M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then metaOneRewriting#(M,{T,TP,S})
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else metaOneRewriting$(M,{T,TP,S})
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder --- Based on narrowing -----------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op metaNormalizeCollect# : Module Term ~> ResultTripleSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq metaNormalizeCollect#(M,T)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = metaNormalizeCollect#(M,{T,leastSort(M,T),none}) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op metaNormalizeCollect# : Module Term Type -> ResultTripleSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq metaNormalizeCollect#(M,T,TP)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = metaNormalizeCollect#(M,{T,TP,none}) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ---metaSearch of Maude doesn't work for rules with extra vars
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op metaNormalizeCollect# : Module ResultTriple -> ResultTripleSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq metaNormalizeCollect#(M,{T,TP,S})
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = toTriple(M,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder metaNarrowSearchAll(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder M,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder T, (addType TP ToVar 'XXXXXXX),
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder none,'!,unbounded,unbounded,E-rewriting noStrategy,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder {T,TP,S,none,[],[],T << S,T << S,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder max(highestVar(S),highestVar((T,T << S))) + 1,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder empty}
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder )) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op metaOneRewriting# : Module Term ~> ResultTripleSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq metaOneRewriting#(M,T)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = metaOneRewriting#(M,{T,leastSort(M,T),none}) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op metaOneRewriting# : Module Term Type -> ResultTripleSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq metaOneRewriting#(M,T,TP)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = metaOneRewriting#(M,{T,TP,none}) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op metaOneRewriting# : Module ResultTriple -> ResultTripleSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq metaOneRewriting#(M,{T,TP,S})
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = toTriple(M,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder metaNarrowSearchAll(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder M,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder T, (addType TP ToVar 'XXXXXXX),
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder none,'+,1,unbounded,E-rewriting noStrategy,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder {T,TP,S,none,[],[],T << S,T << S,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder max(highestVar(S),highestVar((T,T << S))) + 1,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder empty}
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder )) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** Remove itself
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op noSelf : ResultContextSet ResultContextSet -> ResultContextSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq noSelf(empty,RTS')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = RTS' .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq noSelf({T,TP,S,S*,Ct,CtS,TS,CtTS,NextVar,B:Flags} | RTS,RTS')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = noSelf(RTS,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if TS == T and-then CtTS == T and-then Ct == [] and-then CtS == []
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then noSelf*({T,TP,S,S*,Ct,CtS,TS,CtTS,NextVar,B:Flags}, RTS')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else RTS'
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op noSelf* : ResultContext ResultContextSet -> ResultContextSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq noSelf*(RT,empty)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = empty .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq noSelf*({T,TP,S,S*,[],[],T,T,NextVar,B:Flags},
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder {T',TP',S',S'*,Ct',CtS',TS',CtTS',NextVar',B':Flags} | RTS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if TS' == T' and-then CtTS' == T' and-then Ct' == [] and-then CtS' == []
473b81d33893192056dde74b26b2467f983c102cChristian Maeder and-then
473b81d33893192056dde74b26b2467f983c102cChristian Maeder T == T' and-then TP == TP'
473b81d33893192056dde74b26b2467f983c102cChristian Maeder and-then
473b81d33893192056dde74b26b2467f983c102cChristian Maeder (S |> T) == (S' |> T)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then ---remove
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder empty
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else ---keep
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder {T',TP',S',S'*,Ct',CtS',TS',CtTS',NextVar',B':Flags}
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder | noSelf*({T,TP,S,S*,[],[],T,T,NextVar,B:Flags},RTS) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederendfm
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederfmod META-E-NARROWING is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder protecting META-TERM .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder protecting META-LEVEL .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder protecting META-UNIFICATION .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder protecting META-MSG-UNIFICATION .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder protecting META-E-UNIFICATION .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder protecting RESULT-CONTEXT-SET .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder protecting ORDERS-TERM-SUBSTITUTION .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder protecting TYPEOFNARROWING .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder protecting META-NORMALIZE .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder protecting UNIFICATIONTRIPLESET .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder protecting RIGIDIFE .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var T T' T'' TOrig Lhs Lhs' Rhs Rhs' : Term .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var CT' TS TS' TS'' CtTS CtTS' CtTS'' : Term .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var V : Variable .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var C : Constant .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var F : Qid .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var M : Module .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var RTS RTS' RTS$ RTS-Rls RTS-Sub RTSSol : ResultContextSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var RTNeS : ResultContextNeSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var RT RT' : ResultContext .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars S S' S'' Subst Subst' S* S'* : Substitution .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var SS : SubstitutionSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var RLS : RuleSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var RL : Rule .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars Att Att' : AttrSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var B BN : Bound .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars N N' N1 N2 : Nat .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var NL : NatList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars Ct CtS Ct' CtS' Ct'' CtS'' : Context .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var NeTL NeTL' : NeTermList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars TL TL' TL'' TL''' : TermList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars TP TP' TP'' : Type .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var ON : TypeOfNarrowing .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars NextVar NextVar' NextVar'' NVarPrev : Nat .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var U : UnificationTriple .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars US US' : UnificationTripleSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var IRR : IrrFlags .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder --- metaNarrow ---------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ---( We implement:
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder * basic narrowing, where terms introduced
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder by unifiers (substitutions) are never
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder selected for narrowing, and
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder * standard narrowing, where this
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder restriction does not apply )
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** Shortcuts to Narrowing
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op metaNarrow : Module Term -> ResultTripleSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq metaNarrow(M,T) = metaNarrow(M,T,1) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op metaNarrow : Module Term Bound -> ResultTripleSet .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq metaNarrow(M,T,B)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = toTriple(M,metaENarrowShowAll(M,T,B,full noStrategy BuiltIn-unify)) |> T .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** Shortcuts to Basic Narrowing
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op metaBasicNarrow : Module Term -> ResultTripleSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq metaBasicNarrow(M,T) = metaBasicNarrow(M,T,1) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op metaBasicNarrow : Module Term Bound -> ResultTripleSet .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq metaBasicNarrow(M,T,B)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = toTriple(M,metaENarrowShowAll(M,T,B,basic noStrategy BuiltIn-unify)) |> T .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** Shortcuts to Narrowing
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op metaENarrow : Module Term -> ResultTripleSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq metaENarrow(M,T) = metaENarrow(M,T,1) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op metaENarrow : Module Term Bound -> ResultTripleSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq metaENarrow(M,T,B)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = toTriple(M,metaENarrowShowAll(M,T,B,full noStrategy E-BuiltIn-unify))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder |> T .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** Shortcuts to Narrowing
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder op metaEBuiltInTopMostNarrow : Module Term -> ResultTripleSet .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq metaEBuiltInTopMostNarrow(M,T)
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder = metaETopMostNarrow(M,T,1,reducible, E-BuiltIn-unify) .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder op metaEBuiltInTopMostNarrowIrr : Module Term -> ResultTripleSet .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq metaEBuiltInTopMostNarrowIrr(M,T)
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder = metaETopMostNarrow(M,T,1,irreducible, E-BuiltIn-unify) .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder op metaEACTopMostNarrow : Module Term -> ResultTripleSet .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq metaEACTopMostNarrow(M,T)
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder = metaETopMostNarrow(M,T,1,reducible, E-AC-unify) .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder op metaEACTopMostNarrowIrr : Module Term -> ResultTripleSet .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq metaEACTopMostNarrowIrr(M,T)
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder = metaETopMostNarrow(M,T,1,irreducible, E-AC-unify) .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder op metaEACUTopMostNarrow : Module Term -> ResultTripleSet .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq metaEACUTopMostNarrow(M,T)
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder = metaETopMostNarrow(M,T,1,reducible, E-ACU-unify) .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder op metaEACUTopMostNarrowIrr : Module Term -> ResultTripleSet .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq metaEACUTopMostNarrowIrr(M,T)
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder = metaETopMostNarrow(M,T,1,reducible, E-ACU-unify) .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op metaETopMostNarrow : Module Term Bound IrrFlags TypeOfNarrowing
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder -> ResultTripleSet .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq metaETopMostNarrow(M,T,B,IRR,ON)
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder = toTriple(M,metaENarrowShowAll(M,T,B,full topmost ON [IRR])) |> T .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder --- Auxiliary
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op [_,_] : TypeOfNarrowing IrrFlags ~> TypeOfNarrowing .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq [ E-ACU-unify, reducible ] = E-ACU-unify .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq [ E-ACU-unify, irreducible ] = E-ACU-unify-Irr .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq [ E-AC-unify, reducible ] = E-AC-unify .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq [ E-AC-unify, irreducible ] = E-AC-unify-Irr .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq [ E-BuiltIn-unify, reducible ] = E-BuiltIn-unify .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq [ E-BuiltIn-unify, irreducible ] = E-BuiltIn-unify-Irr .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** Shortcuts to Basic Narrowing
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op metaEBasicNarrow : Module Term -> ResultTripleSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq metaEBasicNarrow(M,T)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = metaEBasicNarrow(M,T,1) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** Shortcuts for normalization
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op metaEBasicNarrow : Module Term Bound -> ResultTripleSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq metaEBasicNarrow(M,T,B)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = toTriple(M,metaENarrowShowAll(M,T,B,E-BuiltIn-unify noStrategy basic)) |> T .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op metaBasicNarrowNormalize : Module Term -> ResultTripleSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq metaBasicNarrowNormalize(M,T)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = toTriple(M,metaBasicNarrowNormalizeAll(M,T,highestVar(T) + 1)) |> T .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op metaBasicNarrowNormalizeAll : Module Term Nat -> ResultContextSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq metaBasicNarrowNormalizeAll(M,T,NextVar)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = metaENarrowShowAll(M,T,unbounded,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder basic BuiltIn-unify
473b81d33893192056dde74b26b2467f983c102cChristian Maeder computed-normalized-subs applied-normalized-subs
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder normalize-terms noStrategy,NextVar) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op metaNarrowNormalize : Module Term -> ResultTripleSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq metaNarrowNormalize(M,T)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = toTriple(M,metaNarrowNormalizeAll(M,T,highestVar(T) + 1)) |> T .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op metaNarrowNormalizeAll : Module Term Nat -> ResultContextSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq metaNarrowNormalizeAll(M,T,NextVar)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = metaENarrowShowAll(M,T,unbounded,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder full BuiltIn-unify
473b81d33893192056dde74b26b2467f983c102cChristian Maeder computed-normalized-subs applied-normalized-subs
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder normalize-terms noStrategy,NextVar) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** General Call
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op metaENarrowShowAll : Module Term Bound TypeOfNarrowing
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder -> ResultContextSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq metaENarrowShowAll(M,T,B,ON)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = metaENarrowShowAll(M,T,B,ON,highestVar(T) + 1) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder op metaENarrowShowAll : Module Term Bound TypeOfNarrowing Bound
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder -> ResultContextSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq metaENarrowShowAll(M,T,B,ON,N)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = metaENarrowGen(removeBoolEqs(M),B,ON,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder {T,leastSort(M,T),none,none,[],[],T,T,N,empty}) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** Call for ResultContextSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op metaENarrowGen : Module Bound TypeOfNarrowing
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ResultContextSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder -> ResultContextSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq metaENarrowGen(M,B,ON,RTS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if B == 0
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then RTS
473b81d33893192056dde74b26b2467f983c102cChristian Maeder else metaENarrowGen*(M,B,ON,empty,empty,RTS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op metaENarrowGen* : Module
473b81d33893192056dde74b26b2467f983c102cChristian Maeder Bound TypeOfNarrowing
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ResultContextSet ResultContextSet ResultContextSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder -> ResultContextSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq metaENarrowGen*(M,B,ON,RTSSol,RTS',empty)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if RTS' == empty
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder or-else
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder (B =/= unbounded and-then B <= 1)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then RTSSol | RTS' --- Stop
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else metaENarrowGen*(M,dec(B),ON,RTSSol,empty,RTS')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq metaENarrowGen*(M,B,ON,RTSSol,RTS',RT | RTS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if isEND(normalize-terms?(M,ON,RT))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then metaENarrowGen*(M,B,ON,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder RTSSol | normalize-terms?(M,ON,RT),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder RTS',RTS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else metaENarrowGen*(M,B,ON,RTSSol,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder RTS' |
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder filter-variant-RT(M,ON,normalize-terms?(M,ON,RT),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder metaENarrowGen**(M,B,ON,normalize-terms?(M,ON,RT))),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder RTS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op testNonVarRedex : TypeOfNarrowing Term Term -> Bool .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq testNonVarRedex(basic ON,T,TS) = not(T :: Variable) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq testNonVarRedex(ON,T,TS) = not(TS :: Variable) [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op metaENarrowGen** : Module
473b81d33893192056dde74b26b2467f983c102cChristian Maeder Bound TypeOfNarrowing
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ResultContext
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder -> ResultContextSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq metaENarrowGen**(M,B,ON,{T,TP,S,S',Ct,CtS,TS,CtTS,NextVar,B:Flags})
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if not testNonVarRedex(ON,T,TS) --- T is a variable
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then if CtS == []
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then *** Term CtTS is a normal form so we return it
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder {T,TP,S,S',Ct,CtS,TS,CtTS,NextVar,B:Flags}
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder else *** Term T is a rigid normal form inside a context Ct
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder *** but since no rewrite has been done and
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** this can be part of a previous metaNarrowSub call,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** this path is discarded
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder empty
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else if metaENarrowStra(M,B,ON,{T,TP,S,S',Ct,CtS,TS,CtTS,NextVar,B:Flags})
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder =/= empty
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then metaENarrowStra(M,B,ON,{T,TP,S,S',Ct,CtS,TS,CtTS,NextVar,B:Flags})
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else if CtS == []
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then *** Term CtTS is a normal form so we return it
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder {T,TP,S,S',Ct,CtS,TS,CtTS,NextVar,end(true,B:Flags)}
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder else *** Term T is a rigid normal form inside a context Ct
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder *** but since no rewrite has been done and
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** this can be part of a previous metaNarrowSub call,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** this path is discarded
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder empty
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** Try all rules at top level of term T in context Ct with metaENarrowRls
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** Try also inner subterms of T with metaENarrowSub
473b81d33893192056dde74b26b2467f983c102cChristian Maeder *** Note that metaENarrowRls and metaENarrowSub
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** call to metaNarrow recursively
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op metaENarrowStra : Module Bound TypeOfNarrowing ResultContext
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder -> ResultContextSet . ---[memo] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ---innermost
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq metaENarrowStra(M,B,innermost ON,RT)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if metaENarrowSub(M,B,innermost ON,RT) =/= empty
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then metaENarrowSub(M,B,innermost ON,RT)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else metaENarrowRls(M,B,innermost ON,getRls(M),RT)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ---outermost
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq metaENarrowStra(M,B,outermost ON,RT)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if metaENarrowRls(M,B,outermost ON,getRls(M),RT) =/= empty
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then metaENarrowRls(M,B,outermost ON,getRls(M),RT)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else metaENarrowSub(M,B,outermost ON,RT)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ---topmost
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq metaENarrowStra(M,B,topmost ON,RT)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = metaENarrowRls(M,B,topmost ON,getRls(M),RT) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ---noStrategy
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq metaENarrowStra(M,B,noStrategy ON,RT)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = metaENarrowRls(M,B,noStrategy ON,getRls(M),RT)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder |
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder metaENarrowSub(M,B,noStrategy ON,RT) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op dec : Bound -> Bound .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq dec(unbounded) = unbounded .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq dec(s(N)) = N .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** Generic call to metaUnification with different parameters
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op auxMetaUnify : Module TypeOfNarrowing
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder Term Term Nat ~> UnificationTripleSet .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder --- Term Lhs
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq auxMetaUnify(M,variant(N') ON,T,T',N)
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder--- = auxMetaUnify*(M,variant(N') ON,T,T',N) filterBy N' .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = unrigidife(qid(N'),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder auxMetaUnify*(getM(rigidifeNat(M,qid(N'),T,N')),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder variant(N') ON,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder getTL(rigidifeNat(M,qid(N'),T,N')),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder T',
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder N)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq auxMetaUnify(M,ON,T,T',N)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = auxMetaUnify*(M,ON,T,T',N) [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op auxMetaUnify* : Module TypeOfNarrowing
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder Term Term Nat ~> UnificationTripleSet .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder --- Term Lhs
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq auxMetaUnify*(M,E-rewriting ON,T,T',N)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = toUnificationTriple[N](metaCoreMatch(removeBoolEqs(M),T,T')) .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq auxMetaUnify*(M,E-ACU-unify ON,T,T',N)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = metaEACUUnify(removeBoolEqs(M),T,T',N,reducible) .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq auxMetaUnify*(M,E-ACU-unify-Irr ON,T,T',N)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = metaEACUUnify(removeBoolEqs(M),T,T',N,irreducible) .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq auxMetaUnify*(M,E-AC-unify ON,T,T',N)
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder = metaEACUnify(removeBoolEqs(M),T,T',N,reducible) .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq auxMetaUnify*(M,E-AC-unify-Irr ON,T,T',N)
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder = metaEACUnify(removeBoolEqs(M),T,T',N,irreducible) .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq auxMetaUnify*(M,E-BuiltIn-unify ON,T,T',N)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = metaEBuiltInUnify(removeBoolEqs(M),T,T',N,reducible) .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq auxMetaUnify*(M,E-BuiltIn-unify-Irr ON,T,T',N)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = metaEBuiltInUnify(removeBoolEqs(M),T,T',N,irreducible) .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq auxMetaUnify*(M,ACU-unify ON,T,T',N)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = metaACUUnify(removeBoolEqs(M),T,T',N) .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq auxMetaUnify*(M,AC-unify ON,T,T',N)
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder = metaACUnify(removeBoolEqs(M),T,T',N) .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq auxMetaUnify*(M,BuiltIn-unify ON,T,T',N)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = metaBuiltInUnify(removeBoolEqs(M),T,T',N) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** Remove rigid normal forms
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op removeEND : ResultContextSet -> ResultContextSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq removeEND(RTS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = removeEND*(RTS,empty) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op removeEND* : ResultContextSet ResultContextSet -> ResultContextSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq removeEND*(empty,RTS')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = RTS' .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq removeEND*(RT | RTS,RTS')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = removeEND*(RTS,if isEND(RT) then RTS' else RTS' | RT fi) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op remove_From_ : ResultContextSet ResultContextSet -> ResultContextSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq remove(RT | RTS) From (RT | RTS')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = remove(RTS) From (RT | RTS') .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq remove(RTS) From (RTS')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = RTS [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op isEND : ResultContext -> Bool .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq isEND({T,TP,S,S',Ct,CtS,TS,CtTS,NextVar,B:Flags})
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = end(B:Flags) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** Call for Rules ---> Returns empty if no rule is applied
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op metaENarrowRls : Module Bound TypeOfNarrowing
473b81d33893192056dde74b26b2467f983c102cChristian Maeder RuleSet ResultContext
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder -> ResultContextSet .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq metaENarrowRls(M,B,ON,RL RLS,RT)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = metaENarrowRls#(M,B,ON,RL RLS,RT,empty) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq metaENarrowRls(M,B,ON,none,RT)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = empty .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op metaENarrowRls# : Module Bound TypeOfNarrowing
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder RuleSet ResultContext ResultContextSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder -> ResultContextSet .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq metaENarrowRls#(M,B,ON,none,RT,RTS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = RTS .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq metaENarrowRls#(M,B,ON,RL RLS,RT,RTS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = metaENarrowRls#(M,B,ON,RLS,RT,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder RTS |
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder filter-variant-RT(M,ON,RT,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder metaENarrowRls*(M,B,ON,RL,RT)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder )
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder --- General case
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op metaENarrowRls* : Module Bound TypeOfNarrowing
473b81d33893192056dde74b26b2467f983c102cChristian Maeder Rule ResultContext
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder -> ResultContextSet .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq metaENarrowRls*(M,B,ON,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder (rl Lhs => Rhs [Att].),
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder {T,TP,S,S',Ct,CtS,TS,CtTS,NextVar,B:Flags})
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = metaENarrowRls**$(M,B,ON,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder (rl Lhs => Rhs [Att].),
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder {T,TP,S,S',Ct,CtS,TS,CtTS,NextVar,B:Flags},
473b81d33893192056dde74b26b2467f983c102cChristian Maeder 'rl_=>_`[_`].[Lhs,Rhs,'none.AttrSet] <<{none,NextVar}<) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq metaENarrowRls*(M,B,ON, X:Rule, X:ResultContext)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = empty [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op metaENarrowRls**$ : Module Bound TypeOfNarrowing
473b81d33893192056dde74b26b2467f983c102cChristian Maeder Rule ResultContext
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder UnificationPair
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder -> ResultContextSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq metaENarrowRls**$(M,B,ON,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder (rl Lhs => Rhs [Att].),
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder {T,TP,S,S',Ct,CtS,TS,CtTS,NextVar,B:Flags},
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder {Subst,NextVar'})
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = metaENarrowRls**$$(M,B,ON,
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder {T,TP,S,S',Ct,CtS,TS,CtTS,NextVar,B:Flags},
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder {Subst,NextVar'},
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder 'rl_=>_`[_`].[Lhs,Rhs,'none.AttrSet] << Subst) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op metaENarrowRls**$$ : Module Bound TypeOfNarrowing
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ResultContext
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder UnificationPair Term
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder -> ResultContextSet .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq metaENarrowRls**$$(M,B,ON,
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder {T,TP,S,S',Ct,CtS,TS,CtTS,NextVar,B:Flags},
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder {Subst,NextVar'},
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder 'rl_=>_`[_`].[Lhs',Rhs','none.AttrSet])
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = metaENarrowRls**$$$(M,B,ON,
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder {T,TP,S,S',Ct,CtS,TS,CtTS,NextVar,B:Flags},
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder {Subst,NextVar'},
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder 'rl_=>_`[_`].[Lhs',Rhs','none.AttrSet],
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder auxMetaUnify(M,ON,TS,Lhs',NextVar')) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op metaENarrowRls**$$$ : Module Bound TypeOfNarrowing
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ResultContext
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder UnificationPair Term UnificationTripleSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder -> ResultContextSet .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq metaENarrowRls**$$$(M,B,ON,
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder {T,TP,S,S',Ct,CtS,TS,CtTS,NextVar,B:Flags},
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder {Subst,NextVar'},
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder 'rl_=>_`[_`].[Lhs',Rhs','none.AttrSet],US)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if US =/= empty
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then rebuildTypeAndDiscardErroneous(M,ON,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder {Ct[Rhs'],
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder TP,
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder S,S',
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder [],
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder [],
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder CtS[Rhs'],
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder CtS[Rhs'],
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder NextVar',
473b81d33893192056dde74b26b2467f983c102cChristian Maeder B:Flags}
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder <<(M,ON) US
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder )
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else empty
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** rebuild the context of the applied rule **********************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op rebuildTypeAndDiscardErroneous : Module TypeOfNarrowing
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ResultContextSet -> ResultContextSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq rebuildTypeAndDiscardErroneous(M,ON,empty)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = empty .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq rebuildTypeAndDiscardErroneous(M,ON,RT | RTS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = rebuildTypeAndDiscardErroneous*(M,ON,RT)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder | rebuildTypeAndDiscardErroneous(M,ON,RTS) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op rebuildTypeAndDiscardErroneous* : Module TypeOfNarrowing
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ResultContext -> ResultContextSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq rebuildTypeAndDiscardErroneous*(M,ON,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder {T,TP,S,S',[],[],TS,TS,NextVar,B:Flags})
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder = if leastSort(M,TS) :: Type
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then normalize-terms?(M,ON,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder {canonice(M,T),leastSort(M,TS),S,S',
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [],[],canonice(M,TS),canonice(M,TS),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder NextVar,B:Flags})
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else empty
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** auxiliary for variant narrowing **********************
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op _<<`(_`,_`)_ : ResultContext
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder Module TypeOfNarrowing
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder UnificationTripleSet -> ResultContextSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq RT <<(M,ON) (empty).UnificationTripleSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (empty).ResultContextSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq {T,TP,S,S',Ct:Context,CtS:Context,TS:Term,CtTS:Term,NextVar,B:Flags}
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder <<(M,ON) ({Subst,Subst',N} | SS:UnificationTripleSet)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = {T,TP,S,S',Ct:Context,CtS:Context,TS:Term,CtTS:Term,NextVar,B:Flags}
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder <<((M,ON)) {Subst,Subst',N}
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder |
473b81d33893192056dde74b26b2467f983c102cChristian Maeder {T,TP,S,S',Ct:Context,CtS:Context,TS:Term,CtTS:Term,NextVar,B:Flags}
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder <<(M,ON) SS:UnificationTripleSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op _<<`(`(_`,_`)`)_ : ResultContext
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder Module TypeOfNarrowing
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder UnificationTriple -> ResultContextSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq {T,TP,S,S',Ct:Context,CtS:Context,TS:Term,CtTS:Term,NextVar,B:Flags}
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder <<((M,ON)) {Subst,Subst',N}
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = if (variant in ON
473b81d33893192056dde74b26b2467f983c102cChristian Maeder and-then
473b81d33893192056dde74b26b2467f983c102cChristian Maeder (Subst == none
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder or-else normalizedSubstitution?(M,Subst ; Subst')))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder or-else
473b81d33893192056dde74b26b2467f983c102cChristian Maeder (computed-normalized-subs in ON
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder and-then normalizedSubstitution?(M,Subst))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder or-else
473b81d33893192056dde74b26b2467f983c102cChristian Maeder (applied-normalized-subs in ON
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder and-then normalizedSubstitution?(M,Subst'))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder or-else
473b81d33893192056dde74b26b2467f983c102cChristian Maeder (not variant in ON
473b81d33893192056dde74b26b2467f983c102cChristian Maeder and-then
473b81d33893192056dde74b26b2467f983c102cChristian Maeder not applied-normalized-subs in ON
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder and-then
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder not computed-normalized-subs in ON)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder then {T,TP,S,S',Ct:Context,CtS:Context,TS:Term,CtTS:Term,NextVar,B:Flags}
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder << {Subst,Subst',N}
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else (empty).ResultContextSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** test flag normalize-terms and normalize **********************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** !!!! This mustn't be combined with basic -> strange behavior
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op normalize-terms? : Module TypeOfNarrowing ResultContext
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder -> ResultContext .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq normalize-terms?(M,E-normalize-terms ON,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder {T,TP,S,S',[],[],TS,TS,NextVar,B:Flags})
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = {getTerm(metaReduce(M,T)),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder getType(metaReduce(M,T)),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder S,S',[],[],
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder getTerm(metaReduce(M,TS)),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder getTerm(metaReduce(M,TS)),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder NextVar,B:Flags} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq normalize-terms?(M,normalize-terms ON,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder {T,TP,S,S',[],[],TS,TS,NextVar,B:Flags})
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = {getTerm(metaNormalizeCollect(M,T)),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder getType(metaNormalizeCollect(M,T)),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder S,S',[],[],
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder getTerm(metaNormalizeCollect(M,TS)),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder getTerm(metaNormalizeCollect(M,TS)),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder NextVar,B:Flags} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq normalize-terms?(M,ON,RT)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = RT [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** Call at inner subterms
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op metaENarrowSub : Module Bound TypeOfNarrowing ResultContext
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder -> ResultContextSet . ---[memo] .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq metaENarrowSub(M,B,ON,{T,TP,S,S',Ct,CtS,TS,CtTS,NextVar,B:Flags})
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = metaENarrowSub#(M,B,ON,flatten(M,auxSplitTerm(ON,T,TS)),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder {T,TP,S,S',Ct,CtS,TS,CtTS,NextVar,B:Flags}) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op auxSplitTerm : TypeOfNarrowing Term Term -> Term .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq auxSplitTerm(basic ON,T,TS) = T .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq auxSplitTerm(ON,T,TS) = TS [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op metaENarrowSub# : Module Bound TypeOfNarrowing Term ResultContext
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder -> ResultContextSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq metaENarrowSub#(M,B,ON,C,RT) = empty .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq metaENarrowSub#(M,B,ON,V,RT) = empty .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq metaENarrowSub#(M,B,ON,F[NeTL],RT)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = metaENarrowSub#Gen(M,B,ON,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder splitTerm(M,F,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder 1,getFrozen(M,F,getTypes(M,NeTL)),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder isAssociative(M,F,getTypes(M,NeTL))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder or isCommutative(M,F,getTypes(M,NeTL)),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder empty,NeTL,RT)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op splitTerm : Module Qid
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder Nat NeNatList Bool
473b81d33893192056dde74b26b2467f983c102cChristian Maeder TermList TermList
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ResultContext -> ResultContextSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq splitTerm(M,F,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder N,NL,AC?:Bool,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder TL',empty,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder RT)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = empty .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq splitTerm(M,F,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder N,NL,AC?:Bool,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder TL',(T,TL),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder {T'',TP,S,S',Ct,CtS,TS,CtTS,NextVar,B:Flags})
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if ((not AC?:Bool) and-then N inNatList NL)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder or-else
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder (AC?:Bool and-then NL =/= 0)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then empty
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else {T,leastSort(M,T),S,S',
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder Ct[F[TL',[],TL]],
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder CtS[F[TL' << (S ; S'),[],TL << (S ; S')]],T << (S ; S'),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder CtTS,NextVar,B:Flags}
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder | splitTerm(M,F,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder s(N),NL,AC?:Bool,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder (TL',T),TL,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder {T'',TP,S,S',Ct,CtS,TS,CtTS,NextVar,B:Flags}) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op metaENarrowSub#Gen : Module Bound TypeOfNarrowing ResultContextSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder -> ResultContextSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq metaENarrowSub#Gen(M,B,ON,empty)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = empty .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq metaENarrowSub#Gen(M,B,ON,RT | RTS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = metaENarrowGen**(M,B,ON,RT) | metaENarrowSub#Gen(M,B,ON,RTS) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op filter-variant-RT : Module TypeOfNarrowing ResultContext
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ResultContextSet -> ResultContextSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq filter-variant-RT(M,ON,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder {T,TP,S,S',Ct,CtS,TS,CtTS,NextVar,B:Flags},RTS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if variant in ON and testUnifier !in ON
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then filter-variant-RT*(M,Vars(TS),empty,RTS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else RTS
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op filter-variant-RT* :
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder Module TermList ResultContextSet ResultContextSet -> ResultContextSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq filter-variant-RT*(M,TL,RTS$,empty)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = RTS$ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq filter-variant-RT*(M,TL,RTS$,RT | RTS)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = filter-variant-RT**(M,TL,RTS$,RTS,RT,RTS) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op filter-variant-RT** :
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder Module TermList ResultContextSet ResultContextSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ResultContext ResultContextSet -> ResultContextSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq filter-variant-RT**(M,TL,RTS$,RTS',RT,empty)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = --- RT is not implied by any in RTS'
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder filter-variant-RT*(M,TL,RTS$ | RT,RTS') .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq filter-variant-RT**(M,TL,RTS$,RT | RTS',RT',RT | RTS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if test-variant-RT(M,TL,RT,RT')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then --- RT' is implied by RT in RTS'
473b81d33893192056dde74b26b2467f983c102cChristian Maeder filter-variant-RT*(M,TL,RTS$,RT | RTS')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else if test-variant-RT(M,TL,RT',RT)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then --- remove RT from the set RTS'
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder filter-variant-RT**(M,TL,RTS$,RTS',RT',RTS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else --- continue searching in RTS
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder filter-variant-RT**(M,TL,RTS$,RT | RTS',RT',RTS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op test-variant-RT : Module TermList ResultContext ResultContext
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder -> Bool . ---[memo] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq test-variant-RT(M,TL,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder {T,TP,S,S*,Ct,CtS,TS,CtTS,NextVar,B:Flags},
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder {T',TP',S',S'*,Ct',CtS',TS',CtTS',NextVar',B':Flags})
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = test-variant-RT*(M,TL,S |> TL,S' |> TL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op test-variant-RT* : Module TermList Substitution Substitution -> Bool .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq test-variant-RT*(M,TL,S,S')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = | S | <= | S' |
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder and-then
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder S <=[TL,M] S' . --- keep T & remove T'
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op |_| : Substitution -> Nat .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq | (none).Substitution | = 0 .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq | V <- T ; S | = s(| S |) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederendfm
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederfmod META-NARROWING-SEARCH is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder protecting META-E-NARROWING .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder protecting META-TERM .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder protecting META-LEVEL .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder protecting META-UNIFICATION .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder protecting RESULT-CONTEXT-SET .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder protecting ORDERS-TERM-SUBSTITUTION .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var T T' TOrig Lhs Rhs TS TS' CtTS CtTS' : Term .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var V : Variable .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var C : Constant .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var F : Qid .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars TL TL' : TermList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var M : Module .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var RTS RTS' RTSSol : ResultContextSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var RT RT' : ResultContext .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars TP TP' : Type .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars S S' Subst S* S'* : Substitution .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var RLS : RuleSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var Att : AttrSet .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder var B BN : Bound .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var N : Nat .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var NL : NatList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars Ct Ct' CtS CtS' : Context .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var ON : TypeOfNarrowing .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars QQ QQ' : TypeOfRelation .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars NextVar NextVar' : Nat .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var SCond : SubstitutionCond .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder --- metaNarrowSearch --------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** Shortcuts to Narrowing Search
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op metaNarrowSearch : Module Term Term -> ResultTripleSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq metaNarrowSearch(M,T,T') = metaNarrowSearch(M,T,T',unbounded) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op metaNarrowSearch : Module Term Term Bound -> ResultTripleSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq metaNarrowSearch(M,T,T',B) = metaNarrowSearch(M,T,T',B,1) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op metaNarrowSearch : Module Term Term Bound Bound -> ResultTripleSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq metaNarrowSearch(M,T,T',B,BN) = metaNarrowSearch(M,T,T','!,B,BN) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op metaNarrowSearch : Module Term Term TypeOfRelation Bound Bound
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder -> ResultTripleSet .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq metaNarrowSearch(M,T,T',QQ,B,BN)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = metaNarrowSearch(M,T,T',none,QQ,B,BN) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op metaNarrowSearch : Module Term Term SubstitutionCond
473b81d33893192056dde74b26b2467f983c102cChristian Maeder TypeOfRelation Bound Bound
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder -> ResultTripleSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq metaNarrowSearch(M,T,T',SCond,QQ,B,BN)
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder = metaNarrowSearchGen(M,T,T',SCond,QQ,B,BN,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder full BuiltIn-unify noStrategy E-normalize-terms) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** General Call
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op metaNarrowSearchGen : Module Term Term SubstitutionCond
473b81d33893192056dde74b26b2467f983c102cChristian Maeder TypeOfRelation
473b81d33893192056dde74b26b2467f983c102cChristian Maeder Bound Bound
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder --- steps sols
473b81d33893192056dde74b26b2467f983c102cChristian Maeder TypeOfNarrowing
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder -> ResultTripleSet .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq metaNarrowSearchGen(M,T,T',SCond,QQ,B,BN,ON)
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder = toTriple(M,metaNarrowSearchGenAll(M,T,T',SCond,QQ,B,BN,ON)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op metaNarrowSearchGenAll : Module Term Term SubstitutionCond
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder TypeOfRelation Bound Bound TypeOfNarrowing
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder -> ResultContextSet .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq metaNarrowSearchGenAll(M,T,T',SCond,QQ,B,BN,ON)
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder = metaNarrowSearchGenAll(M,T,T',SCond,QQ,B,BN,ON,highestVar((T,T')) + 1) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op metaNarrowSearchGenAll : Module Term Term SubstitutionCond
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder TypeOfRelation Bound Bound TypeOfNarrowing Nat
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder -> ResultContextSet .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq metaNarrowSearchGenAll(M,T,T',SCond,QQ,B,BN,ON,N)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = metaNarrowSearchAll(addSorts('Universal,M),
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder T,T',SCond,QQ,B,BN,ON,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder {T,leastSort(M,T),none,none,[],[],T,T,N,empty}) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** One Narrowing step in the search process (including possible filters)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op metaNarrowStep : Module SubstitutionCond
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ResultContextSet TypeOfNarrowing
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder -> ResultContextSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq metaNarrowStep(M,SCond,RTS,ON)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = filterSCond(M,SCond,metaENarrowGen(M,1,ON,RTS)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** Filter and normal forms
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op filterSCond : Module SubstitutionCond ResultContextSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder -> ResultContextSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq filterSCond(M,none,RTS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = RTS .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq filterSCond(M,SCond,RTS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = filterSCond*(M,SCond,RTS) [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op filterSCond* : Module SubstitutionCond ResultContextSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder -> ResultContextSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq filterSCond*(M,SCond,empty)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = empty .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq filterSCond*(M,SCond,RT | RTS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = filterSCond**(M,SCond,RT) | filterSCond*(M,SCond,RTS) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op filterSCond** : Module SubstitutionCond ResultContext
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder -> ResultContextSet . ---[memo] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq filterSCond**(M,SCond,{T,TP,S,S',Ct,CtS,TS,CtTS,NextVar,B:Flags})
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if SCond <=[M] S
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then {T,TP,S,S',Ct,CtS,TS,CtTS,NextVar,B:Flags}
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else empty
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** Generate next successors in a breadth way
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder --- We reuse the metaNarrowSearchAll function
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op metaNarrowSearchAll : Module Term Term SubstitutionCond TypeOfRelation
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder Bound Bound --- number steps / number solutions
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder TypeOfNarrowing
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ResultContextSet
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder -> ResultContextSet .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq metaNarrowSearchAll(M,TOrig,T',SCond,QQ,B,BN,ON,RTS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if QQ == '+
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then noSelf(RTS,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder metaNarrowSearchCheck(M,TOrig,T',SCond,'*,B,BN,ON,empty,RTS,empty)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder )
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder else metaNarrowSearchCheck(M,TOrig,T',SCond,QQ,B,BN,ON,empty,RTS,RTS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** Take only normal forms
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op isNF : Module ResultContext -> Bool .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq isNF(M,{T,TP,S,S',Ct,CtS,TS,CtTS,NextVar,B:Flags})
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = end(B:Flags) or-else metaOneRewriting(M,CtTS) == empty .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** Take only normal forms
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op isVariant : Module Nat ResultContextSet ResultContext -> Bool .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq isVariant(M,N,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder {T',TP',S',S'*,Ct',CtS',TS',CtTS',NextVar',B':Flags} | RTS,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder {T,TP,S,S*,Ct,CtS,TS,CtTS,NextVar,B:Flags})
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = not (
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder (S' |> N ; (newVar(N + 1,TP') <- CtTS'))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder <=[M]
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder (S |> N ; (newVar(N + 1,TP) <- CtTS))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder )
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder and-then
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder isVariant(M,N,RTS,{T,TP,S,S*,Ct,CtS,TS,CtTS,NextVar,B:Flags}) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq isVariant(M,N,RTS,RT)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = true [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder *** Generate successors
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op oneMoreStep : Module SubstitutionCond TypeOfNarrowing
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder ResultContextSet -> ResultContextSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq oneMoreStep(M,SCond,ON,RTS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = remove metaNarrowStep(M,SCond,removeEND(RTS),ON) From RTS .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** Check each next successor for conditions
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op metaNarrowSearchCheck : Module Term Term SubstitutionCond
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder TypeOfRelation Bound Bound TypeOfNarrowing
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ResultContextSet ResultContextSet ResultContextSet
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder -> ResultContextSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq metaNarrowSearchCheck(M,TOrig,T',SCond,QQ,B,BN,ON,RTSSol,RTS',empty)
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder = if B == 0 or-else BN == 0 or-else RTS' == empty
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then *** Stop the search
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder RTSSol
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else *** Compute Next successors of RTS' with oneMoreStep
473b81d33893192056dde74b26b2467f983c102cChristian Maeder metaNarrowSearchCheck(M,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder TOrig,T',SCond,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder QQ,
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder dec(B),BN,ON,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder RTSSol,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder oneMoreStep(M,SCond,ON,RTS'),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder oneMoreStep(M,SCond,ON,RTS')
473b81d33893192056dde74b26b2467f983c102cChristian Maeder )
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq metaNarrowSearchCheck(M,TOrig,T',SCond,QQ,B,BN,ON,RTSSol,RTS',
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder RT | RTS)
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder = if isSolution?(M,TOrig,T',QQ,BN,ON,RTSSol,RT)
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder then if *** Is actual term an instance of T'?
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder auxMetaUnify(M,ON,getCTTerm(RT),T',getNextVar(RT)) =/= empty
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder then *** This is a solution
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder metaNarrowSearchCheck(M,TOrig,T',SCond,QQ,
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder B,dec(BN),ON,
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder RT << auxMetaUnify(M,ON,getCTTerm(RT),T',getNextVar(RT))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder | RTSSol,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder RTS',RTS)
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder else *** Continue with the rest
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder metaNarrowSearchCheck(M,TOrig,T',SCond,QQ,
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder B,BN,ON,RTSSol,RTS',RTS)
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder fi
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder else *** Continue with the rest
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder metaNarrowSearchCheck(M,TOrig,T',SCond,QQ,
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder B,BN,ON,RTSSol,RTS',RTS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op isSolution? : Module Term Term
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder TypeOfRelation Bound TypeOfNarrowing
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ResultContextSet ResultContext
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder -> Bool .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq isSolution?(M,TOrig,T',QQ,BN,ON,RTSSol,RT)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = *** Is this the chosen solution?
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder (BN == unbounded or-else BN > 0)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder and-then
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** Is this step correct wrt relations <'!,'*,'+> ?
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ( QQ == '* or-else (QQ == '! and-then isEND(RT)) )
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder and-then
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** Is this a valid variant solution?
473b81d33893192056dde74b26b2467f983c102cChristian Maeder (not (variant in ON) or-else
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder (isNF(M,RT) and-then isVariant(M,highestVar(TOrig) + 1,RTSSol,RT))) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op upDown : Module ResultTripleSet -> ResultTripleSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq upDown(M,RTS:ResultTripleSet)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = upDown#(M,empty,RTS:ResultTripleSet) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op upDown# : Module ResultTripleSet ResultTripleSet -> ResultTripleSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq upDown#(M,RTS':ResultTripleSet, empty)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = RTS':ResultTripleSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq upDown#(M,RTS':ResultTripleSet, {T,TP,S} | RTS:ResultTripleSet)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = upDown#(M,{getTerm(metaReduce(M,T)),TP,upDown(M,S)}
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder | RTS':ResultTripleSet,RTS:ResultTripleSet) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op upDown : Module Substitution -> Substitution .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq upDown(M,S:Substitution)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = upDown#(M,none,S:Substitution) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op upDown# : Module Substitution Substitution -> Substitution .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq upDown#(M,S':Substitution,none)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = S':Substitution .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq upDown#(M,S':Substitution,V <- T ; S:Substitution)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = upDown#(M,S':Substitution ; V <- getTerm(metaReduce(M,T)),S:Substitution) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederendfm
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*************************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder****** End of Santiago Escobar's code
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*******************************************************************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*******************************************************************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederfmod 2TUPLE{X :: TRIV, Y :: TRIV} is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder sorts Tuple{X, Y} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op ((_,_)) : X$Elt Y$Elt -> Tuple{X, Y} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op p1_ : Tuple{X, Y} -> X$Elt .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op p2_ : Tuple{X, Y} -> Y$Elt .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq p1(V1:[X$Elt],V2:[Y$Elt]) = V1:[X$Elt] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq p2(V1:[X$Elt],V2:[Y$Elt]) = V2:[Y$Elt] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederendfm
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederfmod 3TUPLE{X :: TRIV, Y :: TRIV, Z :: TRIV} is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder sort Tuple{X, Y, Z} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op ((_,_,_)) : X$Elt Y$Elt Z$Elt -> Tuple{X, Y, Z} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op p1_ : Tuple{X, Y, Z} -> X$Elt .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op p2_ : Tuple{X, Y, Z} -> Y$Elt .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op p3_ : Tuple{X, Y, Z} -> Z$Elt .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq p1((A:[X$Elt], B:[Y$Elt], C:[Z$Elt])) = A:[X$Elt] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq p2((A:[X$Elt], B:[Y$Elt], C:[Z$Elt])) = B:[Y$Elt] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq p3((A:[X$Elt], B:[Y$Elt], C:[Z$Elt])) = C:[Z$Elt] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederendfm
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederfmod 4TUPLE{W :: TRIV, X :: TRIV, Y :: TRIV, Z :: TRIV} is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder sort Tuple{W, X, Y, Z} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op ((_,_,_,_)) : W$Elt X$Elt Y$Elt Z$Elt -> Tuple{W, X, Y, Z} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op p1_ : Tuple{W, X, Y, Z} -> W$Elt .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op p2_ : Tuple{W, X, Y, Z} -> X$Elt .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op p3_ : Tuple{W, X, Y, Z} -> Y$Elt .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op p4_ : Tuple{W, X, Y, Z} -> Z$Elt .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq p1((A:[W$Elt], B:[X$Elt], C:[Y$Elt], D:[Z$Elt])) = A:[W$Elt] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq p2((A:[W$Elt], B:[X$Elt], C:[Y$Elt], D:[Z$Elt])) = B:[X$Elt] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq p3((A:[W$Elt], B:[X$Elt], C:[Y$Elt], D:[Z$Elt])) = C:[Y$Elt] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq p4((A:[W$Elt], B:[X$Elt], C:[Y$Elt], D:[Z$Elt])) = D:[Z$Elt] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederendfm
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederfmod 5TUPLE{V :: TRIV, W :: TRIV, X :: TRIV, Y :: TRIV, Z :: TRIV} is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder sort Tuple{V, W, X, Y, Z} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op ((_,_,_,_,_)) : V$Elt W$Elt X$Elt Y$Elt Z$Elt -> Tuple{V, W, X, Y, Z} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op p1_ : Tuple{V, W, X, Y, Z} -> V$Elt .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op p2_ : Tuple{V, W, X, Y, Z} -> W$Elt .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op p3_ : Tuple{V, W, X, Y, Z} -> X$Elt .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op p4_ : Tuple{V, W, X, Y, Z} -> Y$Elt .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op p5_ : Tuple{V, W, X, Y, Z} -> Z$Elt .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq p1((A:[V$Elt], B:[W$Elt], C:[X$Elt], D:[Y$Elt], E:[Z$Elt])) = A:[V$Elt] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq p2((A:[V$Elt], B:[W$Elt], C:[X$Elt], D:[Y$Elt], E:[Z$Elt])) = B:[W$Elt] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq p3((A:[V$Elt], B:[W$Elt], C:[X$Elt], D:[Y$Elt], E:[Z$Elt])) = C:[X$Elt] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq p4((A:[V$Elt], B:[W$Elt], C:[X$Elt], D:[Y$Elt], E:[Z$Elt])) = D:[Y$Elt] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq p5((A:[V$Elt], B:[W$Elt], C:[X$Elt], D:[Y$Elt], E:[Z$Elt])) = E:[Z$Elt] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederendfm
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederfmod 6TUPLE{U :: TRIV, V :: TRIV, W :: TRIV, X :: TRIV, Y :: TRIV, Z :: TRIV} is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder sort Tuple{U, V, W, X, Y, Z} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op ((_,_,_,_,_,_)) : U$Elt V$Elt W$Elt X$Elt Y$Elt Z$Elt -> Tuple{U, V, W, X, Y, Z} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op p1_ : Tuple{U, V, W, X, Y, Z} -> U$Elt .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op p2_ : Tuple{U, V, W, X, Y, Z} -> V$Elt .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op p3_ : Tuple{U, V, W, X, Y, Z} -> W$Elt .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op p4_ : Tuple{U, V, W, X, Y, Z} -> X$Elt .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op p5_ : Tuple{U, V, W, X, Y, Z} -> Y$Elt .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op p6_ : Tuple{U, V, W, X, Y, Z} -> Z$Elt .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq p1((A:[U$Elt], B:[V$Elt], C:[W$Elt], D:[X$Elt], E:[Y$Elt], F:[Z$Elt])) = A:[U$Elt] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq p2((A:[U$Elt], B:[V$Elt], C:[W$Elt], D:[X$Elt], E:[Y$Elt], F:[Z$Elt])) = B:[V$Elt] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq p3((A:[U$Elt], B:[V$Elt], C:[W$Elt], D:[X$Elt], E:[Y$Elt], F:[Z$Elt])) = C:[W$Elt] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq p4((A:[U$Elt], B:[V$Elt], C:[W$Elt], D:[X$Elt], E:[Y$Elt], F:[Z$Elt])) = D:[X$Elt] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq p5((A:[U$Elt], B:[V$Elt], C:[W$Elt], D:[X$Elt], E:[Y$Elt], F:[Z$Elt])) = E:[Y$Elt] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq p6((A:[U$Elt], B:[V$Elt], C:[W$Elt], D:[X$Elt], E:[Y$Elt], F:[Z$Elt])) = F:[Z$Elt] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederendfm
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederview QidList from TRIV to QID-LIST is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder sort Elt to QidList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederendv
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maederview TermList from TRIV to META-MODULE is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder sort Elt to TermList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederendv
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maederview RuleSet from TRIV to META-MODULE is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder sort Elt to RuleSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederendv
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maederview EquationSet from TRIV to META-MODULE is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder sort Elt to EquationSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederendv
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maederview OpDeclSet from TRIV to META-MODULE is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder sort Elt to OpDeclSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederendv
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maederview ImportList from TRIV to META-MODULE is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder sort Elt to ImportList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederendv
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maederview Condition from TRIV to META-MODULE is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder sort Elt to Condition .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederendv
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maederview QidSet from TRIV to META-MODULE is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder sort Elt to QidSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederendv
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederview Module from TRIV to META-MODULE is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder sort Elt to Module .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederendv
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederview ParameterDeclList from TRIV to META-MODULE is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder sort Elt to ParameterDeclList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederendv
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederview Bound from TRIV to META-LEVEL is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder sort Elt to Bound .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederendv
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maederview Oid from TRIV to CONFIGURATION is
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder sort Elt to Oid .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maederendv
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*******************************************************************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder***
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** 2 The Signature of Full Maude
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder***
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*******************************************************************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederfmod EXTENDED-SORTS is
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ---- Any modification in this module must be reflected in the metamodule
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ---- used in eq addInfoConds in module UNIT-BUBBLE-PARSING
473b81d33893192056dde74b26b2467f983c102cChristian Maeder sorts @SortToken@ @ViewToken@ @Sort@ @Kind@ @Type@ @SortList@
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder @TypeList@ @ViewExp@ @ModExp@ .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder subsorts @SortToken@ < @Sort@ < @SortList@ < @TypeList@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder subsorts @Sort@ @Kind@ < @Type@ < @TypeList@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder subsort @ViewToken@ < @ViewExp@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op _`{_`} : @Sort@ @ViewExp@ -> @Sort@ [prec 40] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op __ : @SortList@ @SortList@ -> @SortList@ [assoc] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op __ : @TypeList@ @TypeList@ -> @TypeList@ [assoc] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op `[_`] : @Sort@ -> @Kind@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op _`,_ : @ViewExp@ @ViewExp@ -> @ViewExp@ [assoc] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op _`{_`} : @ViewExp@ @ViewExp@ -> @ViewExp@ [prec 40] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederendfm
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder******************************************************************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederfmod OPERATOR-ATTRIBUTES is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder sorts @Attr@ @AttrList@ @Hook@ @HookList@ @Bubble@ @Token@ @NeTokenList@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder subsort @Attr@ < @AttrList@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder subsort @Hook@ < @HookList@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op __ : @AttrList@ @AttrList@ -> @AttrList@ [assoc] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ops assoc associative : -> @Attr@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ops comm commutative : -> @Attr@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ops idem idempotent : -> @Attr@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ops id:_ identity:_ : @Bubble@ -> @Attr@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ops left`id:_ left`identity:_ : @Bubble@ -> @Attr@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ops right`id:_ right`identity:_ : @Bubble@ -> @Attr@ .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ops frozen`(_`) poly`(_`) strat`(_`) strategy`(_`) :
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder @NeTokenList@ -> @AttrList@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ops memo memoization : -> @Attr@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ops prec_ precedence_ : @Token@ -> @Attr@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ops gather`(_`) gathering`(_`) : @NeTokenList@ -> @Attr@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ops format`(_`) : @NeTokenList@ -> @Attr@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ops ctor constructor : -> @Attr@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ops frozen ditto iter : -> @Attr@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ops object msg message config : -> @Attr@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op metadata_ : @Token@ -> @Attr@ .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op special`(_`) : @HookList@ -> @Attr@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op __ : @HookList@ @HookList@ -> @HookList@ [assoc] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op id-hook_ : @Token@ -> @Hook@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op id-hook_`(_`) : @Token@ @NeTokenList@ -> @Hook@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op op-hook_`(_:_->_`) : @Token@ @Token@ @NeTokenList@ @Token@ -> @Hook@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op op-hook_`(_:`->_`) : @Token@ @Token@ @Token@ -> @Hook@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op op-hook_`(_:_~>_`) : @Token@ @Token@ @NeTokenList@ @Token@ -> @Hook@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op op-hook_`(_:`~>_`) : @Token@ @Token@ @Token@ -> @Hook@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op term-hook_`(_`) : @Token@ @Bubble@ -> @Hook@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederendfm
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*******************************************************************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederfmod MOD-EXPRS is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder including OPERATOR-ATTRIBUTES .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder including EXTENDED-SORTS .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder sorts @Map@ @MapList@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder subsort @Map@ < @MapList@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder subsorts @Token@ < @ModExp@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** module expression
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op _*`(_`) : @ModExp@ @MapList@ -> @ModExp@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op _`{_`} : @ModExp@ @ViewExp@ -> @ModExp@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op TUPLE`[_`] : @Token@ -> @ModExp@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op POWER`[_`] : @Token@ -> @ModExp@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op _+_ : @ModExp@ @ModExp@ -> @ModExp@ [assoc prec 42] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** renaming maps
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op op_to_ : @Token@ @Token@ -> @Map@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op op_:_->_to_ : @Token@ @TypeList@ @Type@ @Token@ -> @Map@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op op_: ->_to_ : @Token@ @Type@ @Token@ -> @Map@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op op_:_~>_to_ : @Token@ @TypeList@ @Type@ @Token@ -> @Map@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op op_: ~>_to_ : @Token@ @Type@ @Token@ -> @Map@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op op_to_`[_`] : @Token@ @Token@ @AttrList@ -> @Map@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op op_:_->_to_`[_`] : @Token@ @TypeList@ @Type@ @Token@ @AttrList@ -> @Map@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op op_:`->_to_`[_`] : @Token@ @Type@ @Token@ @AttrList@ -> @Map@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op op_:_~>_to_`[_`] : @Token@ @TypeList@ @Type@ @Token@ @AttrList@ -> @Map@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op op_:`~>_to_`[_`] : @Token@ @Type@ @Token@ @AttrList@ -> @Map@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op sort_to_ : @Sort@ @Sort@ -> @Map@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op label_to_ : @Token@ @Token@ -> @Map@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op class_to_ : @Sort@ @Sort@ -> @Map@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op attr_._to_ : @Sort@ @Token@ @Token@ -> @Map@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op msg_to_ : @Token@ @Token@ -> @Map@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op msg_:_->_to_ : @Token@ @TypeList@ @Type@ @Token@ -> @Map@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op msg_:`->_to_ : @Token@ @Type@ @Token@ -> @Map@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op _`,_ : @MapList@ @MapList@ -> @MapList@ [assoc prec 42] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederendfm
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*******************************************************************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederfmod SIGNATURES is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder inc MOD-EXPRS .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder sorts @SortDecl@ @SubsortRel@ @SubsortDecl@ @OpDecl@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op `(_`) : @Token@ -> @Token@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** sort declaration
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op sorts_. : @SortList@ -> @SortDecl@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op sort_. : @SortList@ -> @SortDecl@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** subsort declaration
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op subsort_. : @SubsortRel@ -> @SubsortDecl@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op subsorts_. : @SubsortRel@ -> @SubsortDecl@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op _<_ : @SortList@ @SortList@ -> @SubsortRel@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op _<_ : @SortList@ @SubsortRel@ -> @SubsortRel@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** operator declaration
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op op_:`->_. : @Token@ @Type@ -> @OpDecl@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op op_:`->_`[_`]. : @Token@ @Type@ @AttrList@ -> @OpDecl@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op op_:_->_. : @Token@ @TypeList@ @Type@ -> @OpDecl@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op op_:_->_`[_`]. : @Token@ @TypeList@ @Type@ @AttrList@ -> @OpDecl@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op ops_:`->_. : @NeTokenList@ @Type@ -> @OpDecl@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op ops_:`->_`[_`]. : @NeTokenList@ @Type@ @AttrList@ -> @OpDecl@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op ops_:_->_. : @NeTokenList@ @TypeList@ @Type@ -> @OpDecl@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op ops_:_->_`[_`]. : @NeTokenList@ @TypeList@ @Type@ @AttrList@ -> @OpDecl@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op op_:`~>_. : @Token@ @Sort@ -> @OpDecl@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op op_:`~>_`[_`]. : @Token@ @Sort@ @AttrList@ -> @OpDecl@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op op_:_~>_. : @Token@ @TypeList@ @Sort@ -> @OpDecl@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op op_:_~>_`[_`]. : @Token@ @TypeList@ @Sort@ @AttrList@ -> @OpDecl@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op ops_:`~>_. : @NeTokenList@ @Sort@ -> @OpDecl@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op ops_:`~>_`[_`]. : @NeTokenList@ @Sort@ @AttrList@ -> @OpDecl@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op ops_:_~>_. : @NeTokenList@ @TypeList@ @Sort@ -> @OpDecl@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op ops_:_~>_`[_`]. : @NeTokenList@ @TypeList@ @Sort@ @AttrList@ -> @OpDecl@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederendfm
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*******************************************************************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederfmod F&S-MODS&THS is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder including SIGNATURES .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder including QID-LIST .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder sorts @FDeclList@ @SDeclList@ @Module@ @ImportDecl@ @Parameter@
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder @List<Parameter>@ @EqDecl@ @RlDecl@ @MbDecl@ @VarDecl@ @VarDeclList@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder subsort @VarDecl@ < @VarDeclList@ .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder subsorts @VarDecl@ @ImportDecl@ @SortDecl@ @SubsortDecl@ @OpDecl@ @MbDecl@
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder @EqDecl@ @VarDeclList@ < @FDeclList@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder subsorts @RlDecl@ @FDeclList@ < @SDeclList@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** variable declaration
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op vars_:_. : @NeTokenList@ @Type@ -> @VarDecl@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op var_:_. : @NeTokenList@ @Type@ -> @VarDecl@ .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** membership axiom declaration
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op mb_:_. : @Bubble@ @Bubble@ -> @MbDecl@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ----op mb[_]:_:_. : @Token@ @Bubble@ @Bubble@ -> @MbDecl@ .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op cmb_:_if_. : @Bubble@ @Sort@ @Bubble@ -> @MbDecl@ .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op cmb[_]:_:_if_. : @Token@ @Bubble@ @Sort@ @Bubble@ -> @MbDecl@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** equation declaration
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op eq_=_. : @Bubble@ @Bubble@ -> @EqDecl@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op ceq_=_if_. : @Bubble@ @Bubble@ @Bubble@ -> @EqDecl@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op cq_=_if_. : @Bubble@ @Bubble@ @Bubble@ -> @EqDecl@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** rule declaration
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** op rl`[_`]:_=>_. : @Token@ @Bubble@ @Bubble@ -> @RlDecl@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op rl_=>_. : @Bubble@ @Bubble@ -> @RlDecl@ .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder *** op crl`[_`]:_=>_if_. : @Token@ @Bubble@ @Bubble@ @Bubble@ -> @RlDecl@ .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op crl_=>_if_. : @Bubble@ @Bubble@ @Bubble@ -> @RlDecl@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** importation declaration
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ops including_. inc_. : @ModExp@ -> @ImportDecl@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ops extending_. ex_. : @ModExp@ -> @ImportDecl@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ops protecting_. pr_. : @ModExp@ -> @ImportDecl@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder sorts @Interface@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder subsort @Parameter@ < @List<Parameter>@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder subsorts @Token@ < @Interface@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** parameterized module interface
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op _::_ : @Token@ @ModExp@ -> @Parameter@ [prec 40 gather (e &)] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op _::_ : @Token@ @Interface@ -> @Parameter@ [prec 40 gather (e &)] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op _`,_ : @List<Parameter>@ @List<Parameter>@ -> @List<Parameter>@ [assoc] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op _`{_`} : @ModExp@ @List<Parameter>@ -> @Interface@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** declaration list
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op __ : @VarDeclList@ @VarDeclList@ -> @VarDeclList@ [assoc] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op __ : @SDeclList@ @SDeclList@ -> @SDeclList@ [assoc] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op __ : @FDeclList@ @FDeclList@ -> @FDeclList@ [assoc] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** functional and system module and theory
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op fmod_is_endfm : @Interface@ @FDeclList@ -> @Module@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op obj_is_jbo : @Interface@ @FDeclList@ -> @Module@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op obj_is_endo : @Interface@ @FDeclList@ -> @Module@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op mod_is_endm : @Interface@ @SDeclList@ -> @Module@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op fth_is_endfth : @Interface@ @FDeclList@ -> @Module@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op th_is_endth : @Interface@ @SDeclList@ -> @Module@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederendfm
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*******************************************************************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederfmod O-MODS&THS is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder including F&S-MODS&THS .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder sorts @ClassDecl@ @AttrDecl@ @AttrDeclList@ @SubclassDecl@ @MsgDecl@
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder @ODeclList@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder subsorts @SDeclList@ @MsgDecl@ @SubclassDecl@ @ClassDecl@ < @ODeclList@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder subsort @AttrDecl@ < @AttrDeclList@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op __ : @ODeclList@ @ODeclList@ -> @ODeclList@ [assoc] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** object-oriented module and theory
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op omod_is_endom : @Interface@ @ODeclList@ -> @Module@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op oth_is_endoth : @Interface@ @ODeclList@ -> @Module@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** class declaration
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op class_|_. : @Sort@ @AttrDeclList@ -> @ClassDecl@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op class_. : @Sort@ -> @ClassDecl@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op _`,_ : @AttrDeclList@ @AttrDeclList@ -> @AttrDeclList@ [assoc] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op _:_ : @Token@ @Sort@ -> @AttrDecl@ [prec 40] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** subclass declaration
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op subclass_. : @SubsortRel@ -> @SubclassDecl@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op subclasses_. : @SubsortRel@ -> @SubclassDecl@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** message declaration
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op msg_:_->_. : @Token@ @SortList@ @Sort@ -> @MsgDecl@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op msgs_:_->_. : @NeTokenList@ @SortList@ @Sort@ -> @MsgDecl@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op msg_:`->_. : @Token@ @Sort@ -> @MsgDecl@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op msgs_:`->_. : @NeTokenList@ @Sort@ -> @MsgDecl@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederendfm
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*******************************************************************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederfmod VIEWS is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder including O-MODS&THS .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder sorts @ViewDecl@ @ViewDeclList@ @View@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder subsorts @VarDecl@ < @ViewDecl@ < @ViewDeclList@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder subsort @VarDeclList@ < @ViewDeclList@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** view maps
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op op_to`term_. : @Bubble@ @Bubble@ -> @ViewDecl@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op op_to_. : @Token@ @Token@ -> @ViewDecl@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op op_:_->_to_. : @Token@ @TypeList@ @Type@ @Token@ -> @ViewDecl@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op op_:`->_to_. : @Token@ @Type@ @Token@ -> @ViewDecl@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op op_:_~>_to_. : @Token@ @TypeList@ @Type@ @Token@ -> @ViewDecl@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op op_:`~>_to_. : @Token@ @Type@ @Token@ -> @ViewDecl@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op sort_to_. : @Sort@ @Sort@ -> @ViewDecl@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op class_to_. : @Sort@ @Sort@ -> @ViewDecl@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op attr_._to_. : @Sort@ @Token@ @Token@ -> @ViewDecl@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op msg_to_. : @Token@ @Token@ -> @ViewDecl@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op msg_:_->_to_. : @Token@ @TypeList@ @Type@ @Token@ -> @ViewDecl@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op msg_:`->_to_. : @Token@ @Type@ @Token@ -> @ViewDecl@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** view
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op view_from_to_is_endv : @Interface@ @ModExp@ @ModExp@ @ViewDeclList@ -> @View@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op view_from_to_is endv : @Interface@ @ModExp@ @ModExp@ -> @View@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op __ : @ViewDeclList@ @ViewDeclList@ -> @ViewDeclList@ [assoc] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederendfm
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*******************************************************************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederfmod COMMANDS is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder including MOD-EXPRS .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder sorts @Command@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** down function
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op down_:_ : @ModExp@ @Command@ -> @Command@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** parse commands
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op parse_. : @Bubble@ -> @Command@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** reduce commands
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op red_. : @Bubble@ -> @Command@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op reduce_. : @Bubble@ -> @Command@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** rewrite commands
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op rew_. : @Bubble@ -> @Command@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op rewrite_. : @Bubble@ -> @Command@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** frewrite commands
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op frew_. : @Bubble@ -> @Command@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op frewrite_. : @Bubble@ -> @Command@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** search commands
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op search_=>1_. : @Bubble@ @Bubble@ -> @Command@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op search_=>*_. : @Bubble@ @Bubble@ -> @Command@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op search_=>+_. : @Bubble@ @Bubble@ -> @Command@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op search_=>!_. : @Bubble@ @Bubble@ -> @Command@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** search commands
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op search_~>1_. : @Bubble@ @Bubble@ -> @Command@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op search_~>*_. : @Bubble@ @Bubble@ -> @Command@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op search_~>+_. : @Bubble@ @Bubble@ -> @Command@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op search_~>!_. : @Bubble@ @Bubble@ -> @Command@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** matching commands
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op match_<=?_. : @Bubble@ @Bubble@ -> @Command@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op xmatch_<=?_. : @Bubble@ @Bubble@ -> @Command@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** unifying command
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op unify_. : @Bubble@ -> @Command@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** unifying command
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op id-unify_. : @Bubble@ -> @Command@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** select command
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op select_. : @ModExp@ -> @Command@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** show commands
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op show`module`. : -> @Command@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op show`module_. : @ModExp@ -> @Command@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op show`all`. : -> @Command@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op show`all_. : @ModExp@ -> @Command@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op show`vars`. : -> @Command@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op show`vars_. : @ModExp@ -> @Command@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op show`sorts`. : -> @Command@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op show`sorts_. : @ModExp@ -> @Command@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op show`ops`. : -> @Command@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op show`ops_. : @ModExp@ -> @Command@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op show`mbs`. : -> @Command@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op show`mbs_. : @ModExp@ -> @Command@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op show`eqs`. : -> @Command@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op show`eqs_. : @ModExp@ -> @Command@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op show`rls`. : -> @Command@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op show`rls_. : @ModExp@ -> @Command@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op show`view_. : @ViewExp@ -> @Command@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op show`modules`. : -> @Command@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op show`views`. : -> @Command@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** set commands
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op set`protect_on`. : @ModExp@ -> @Command@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op set`protect_off`. : @ModExp@ -> @Command@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op set`include_on`. : @ModExp@ -> @Command@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op set`include_off`. : @ModExp@ -> @Command@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op set`extend_on`. : @ModExp@ -> @Command@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op set`extend_off`. : @ModExp@ -> @Command@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** miscellaneous
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op load_. : @Bubble@ -> @Command@ .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder ops remove`identity`attributes`. rm`ids`. : -> @Command@ .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder ops remove`identity`attributes_. rm`ids_. : @ModExp@ -> @Command@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op remove`assoc`attributes`. : -> @Command@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op remove`assoc`attributes_. : @ModExp@ -> @Command@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op acu`coherence`completion`. : -> @Command@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op acu`coherence`completion_. : @ModExp@ -> @Command@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op help`. : -> @Command@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederendfm
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*******************************************************************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederfmod FULL-MAUDE-SIGN is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder including VIEWS .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder including COMMANDS .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder sort @Input@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder subsorts @Command@ @Module@ @View@ < @Input@ .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederendfm
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*******************************************************************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*******
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder******* ERROR HANDLING, by Peter Olveczky
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*******
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** The following module defines a function which prints up to n characters
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** of a bubble, followed by the usual arrow <---*HERE* which points to the
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** erroneous token:
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*******************************************************************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederfmod PRINT-SYNTAX-ERROR is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder protecting META-LEVEL .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder protecting INT .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var QIL : QidList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var Q : Qid .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var N : Nat .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars RP RP' : ResultPair .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var RP? : [ResultPair?] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op printN : Nat QidList -> QidList . *** first N qid's in a qidList
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq printN(N, nil) = nil .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq printN(0, QIL) = nil .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq printN(s N, Q QIL) = Q printN(N, QIL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op removeFront : Nat QidList -> QidList . *** removes first N qid's
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq removeFront(N, nil) = nil .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq removeFront(0, QIL) = QIL .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq removeFront(s N, Q QIL) = removeFront(N, QIL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op printSyntaxError : [ResultPair?] QidList -> QidList .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq printSyntaxError(noParse(N), QIL)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = '\r 'Parse 'error 'in '\o '\s printN(N + 1, QIL) '\r '<---*HERE* '\o .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq printSyntaxError(ambiguity(RP, RP'), QIL)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = '\r 'Ambiguous 'parsing 'for '\o '\s QIL '\o .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq printSyntaxError(RP?, QIL) = QIL [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederendfm
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*******************************************************************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
473b81d33893192056dde74b26b2467f983c102cChristian Maeder***
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** The Abstract Data Type \texttt{Module}
473b81d33893192056dde74b26b2467f983c102cChristian Maeder***
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*******************************************************************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** In this section we present the abstract data type \texttt{Module}, which
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** can be seen as an extension of the predefined sort \texttt{Module} in
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** several ways. There are constructors for functional, system, and object-
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** oriented modules and theories, which can be parameterized and can import
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** module expressions. There can also be parameterized sorts in Full Maude
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** modules, and therefore, the constructors for the different declarations
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** that can appear in a module have to be appropriately extended.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** The section is structured as follows. After introducing some modules
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** defining some functions on the predefined sorts \texttt{Bool} and
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \texttt{QidList} in Section~\ref{BOOL-QID-LIST}, we present in
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** Sections~\ref{EXT-SORT} and~\ref{EXT-DECL} the data types for extended
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** sorts and extended declarations. In Section~\ref{mod-exp-mod-id} we
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** introduce module expressions and module names, and in
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** Section~\ref{unitADT} the abstract data type \texttt{Module} itself.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder***
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** Extension \texttt{QID-LIST}
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder***
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** The conversion of lists of quoted identifiers into single quoted
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** identifiers by concatenating them is heavily used in the coming modules.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** This is the task of the \texttt{} function, which is
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** introduced in the following module \texttt{EXT-QID-LIST} extending the
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** predefined module \texttt{QID-LIST}.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*******************************************************************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederfmod EXT-QID-LIST is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr QID-LIST .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op qidList2Qid : QidList -> Qid .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var QI : Qid .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var QIL : QidList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars St St' : String .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var N : Nat .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var F : FindResult .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq qidList2Qid(('\s QIL)) = qid(" " + string(qidList2Qid(QIL))) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq qidList2Qid((QI QIL))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = qid(string(QI) + " " + string(qidList2Qid(QIL)))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq qidList2Qid(nil) = qid("") .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op trimQidList : QidList -> QidList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq trimQidList(' QIL) = trimQidList(QIL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq trimQidList(QI QIL) = QI trimQidList(QIL) [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq trimQidList(nil) = nil .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder op qidList2string : QidList -> String .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq qidList2string(QI QIL) = string(QI) + " " + qidList2string(QIL) .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq qidList2string(nil) = "" .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op string2qidList : String -> QidList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op string2qidListAux : String -> QidList .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq string2qidList(St) = trimQidList(string2qidListAux(St)) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq string2qidListAux("") = nil .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq string2qidListAux(St)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if F == notFound
473b81d33893192056dde74b26b2467f983c102cChristian Maeder then qid(substr(St, findNonSpace(St), length(St)))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder else qid(substr(St, findNonSpace(St), F))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if substr(St, findNonSpace(St) + F, 1) =/= " "
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then qid(substr(St, findNonSpace(St) + F, 1))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else nil
473b81d33893192056dde74b26b2467f983c102cChristian Maeder fi
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder string2qidListAux(substr(St, findNonSpace(St) + F + 1, length(St)))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if F := myfind(substr(St, findNonSpace(St), length(St)), " (){}[],", 0)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [owise] .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op findNonSpace : String -> Nat .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op findNonSpace : String Nat -> Nat .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ---- returns the length of the string if not found
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq findNonSpace(St) = findNonSpace(St, 0) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq findNonSpace(St, N)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if N < length(St)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder then if substr(St, N, 1) == " "
473b81d33893192056dde74b26b2467f983c102cChristian Maeder then findNonSpace(St, N + 1)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else N
473b81d33893192056dde74b26b2467f983c102cChristian Maeder fi
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else length(St)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op myfind : String String Nat -> FindResult .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq myfind(St, St', N)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = if N < length(St)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then if find(St', substr(St, N, 1), 0) =/= notFound
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then N
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else myfind(St, St', N + 1)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi
473b81d33893192056dde74b26b2467f983c102cChristian Maeder else notFound
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederendfm
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederfmod HELP is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr EXT-QID-LIST .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op fm-help : -> QidList .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq fm-help
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = string2qidList("Additional commands available:") '\n
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder '\t string2qidList("(load <meta-module> .)") '\n
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder '\t '\t string2qidList("Takes as argument a term of sort Module,") '\s string2qidList("i.e.,") '\s string2qidList("a metaterm.") '\n
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder '\t '`( 'remove 'id 'attributes '\s '`[ '<module-expr.> '`] '\s '. '`) '\s '| '\s '`( 'remove 'ids '\s '`[ '<module-expr.> '`] '\s '. '`) '\n
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder '\t '\t string2qidList("Shows the module with the id attributes removed using variants.") '\n
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder '\t string2qidList("(remove assoc attributes") '\s string2qidList("[<module-expr.>]") '\s string2qidList(".)") '\n
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder '\t '\t string2qidList("Shows the module with the assoc (if not with comm) attributes removed using variants.") '\n
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder '\t string2qidList("(acu coherence completion") '\s string2qidList("[<module-expr.>]") '\s string2qidList(".)") '\n
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder '\t '\t string2qidList("Shows the module resulting from completing for ACU coherence.") '\n .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederendfm
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*******************************************************************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** 3.2 View Expressions and Extended Sorts
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** To allow the use of parameterized sorts, or sorts qualified by the view
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** expression with which the parameterized module in which the given sorts
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** appear is instantiated, we add the sort Sort of ``extended sorts'' as a
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** supersort of the predefined sort Sort. View expressions and extended
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** sorts are introduced in the following modules.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** 3.2.1 View Expressions
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** A view expression is given by a single quoted identifier, by a sequence of
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** view expressions (at the user level, separated by commas), or by the
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** composition of view expressions. In the current version, the composition
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** of view expressions is only used internally; we plan to make it available
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** to the user with syntax \verb~_;_~ in the future. View expressions are
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** used in the instantiation of parameterized modules and in parameterized
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** sorts. We plan to support parameterized views in the future as well. We
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** use operators \verb~_|_~ and \verb~_;;_~ to represent, respectively,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** sequences and composition of view expressions.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*******************************************************************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederfmod VIEW-EXPR is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr META-MODULE .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder sort ViewExp .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder subsorts Sort < ViewExp < ModuleExpression NeParameterList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op mtViewExp : -> ViewExp .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op _{_} : Sort ParameterList -> ViewExp [ctor prec 37].
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op _;;_ : ViewExp ViewExp -> ViewExp
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [assoc id: mtViewExp] . *** view composition _;_
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederendfm
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*******************************************************************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** Since the Core Maude engine does not know about view expressions, or, as
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** we shall see, about extended sorts, extended module expressions, extended
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** modules, and other declarations that we introduce, to be able to use them
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** with built-in functions such as \texttt{sameComponent},
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \texttt{leastSort}, \texttt{metaReduce}, etc., we shall have to convert
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** them into terms which only use the built-in constructors. Thus, for
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** example, view expressions in sort \texttt{ViewExp} will be converted
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** into quoted identifiers of sort \texttt{Qid} by means of function
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \texttt{parameter2Qid}, or, similarly, elements of sorts \texttt{Sort},
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \texttt{SortList}, and \texttt{SortSet} are transformed into elements
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** of sorts \texttt{Qid}, \texttt{QidList}, and \texttt{QidSet},
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** respectively, with functions \texttt{eSortToQid} defined on the
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** appropriate sorts.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*******************************************************************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederfmod VIEW-EXPR-TO-QID is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr VIEW-EXPR .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr EXT-QID-LIST .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op viewExp2Qid : ViewExp -> Qid .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op parameterList2Qid : ParameterList -> Qid .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op viewExp2QidList : ViewExp -> QidList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op parameterList2QidList : ParameterList -> QidList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op eMetaPrettyPrint : ViewExp -> QidList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq eMetaPrettyPrint(VE) = viewExp2QidList(VE) if not VE :: TypeList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var V : Sort .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var QI : Qid .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var QIL : QidList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var P : ViewExp .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var PL : NeParameterList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars VE VE' : ViewExp .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parameterList2QidList(P) = viewExp2QidList(P) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq parameterList2QidList((P, PL))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = (if QI == '`) then QIL QI '\s else QIL QI fi)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder '`, parameterList2QidList(PL)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if QIL QI := viewExp2QidList(P).
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq viewExp2QidList(V{PL})
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (viewExp2QidList(V) '`{ parameterList2QidList(PL) '`}) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq viewExp2QidList(VE ;; VE')
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = (viewExp2QidList(VE) '; viewExp2QidList(VE'))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if VE =/= mtViewExp /\ VE' =/= mtViewExp .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq viewExp2QidList(V) = V .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parameterList2Qid(P) = viewExp2Qid(P) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parameterList2Qid((P, PL))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = qid(string(viewExp2Qid(P)) + ", " + string(parameterList2Qid(PL))) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq viewExp2Qid(VE) = qidList2Qid(viewExp2QidList(VE)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederendfm
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*******************************************************************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder***
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** Parameterized Sorts
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder***
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** In addition to the \texttt{Sort} sort, in the following module
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** \texttt{EXT-SORT} we also define sorts \texttt{SortList} and
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \texttt{SortSet}.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** The operator \texttt{eSort} is declared to be a constructor for extended
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** sorts.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** As for lists and sTS of quoted identifiers, we declare \verb~__~ and
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** \verb~_;_~ as constructors for sorts \texttt{SortList} and
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \texttt{SortList}, and \texttt{SortSet}, respectively.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*******************************************************************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederfmod EXT-SORT is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr META-LEVEL .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr EXT-BOOL .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr VIEW-EXPR-TO-QID .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr EXT-QID-LIST .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr TERMSET .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** We define operations extending the built-in functions \texttt{sameKind}
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** and \texttt{leastSort}, respectively, to lists of sorts and
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** to lists of extended terms. The function \texttt{sameKind} takes
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** a module and two lists of extended sorts as arguments, and returns
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \texttt{true} if the $i$-th elements of both lists are in the same
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** connected component of sorts. This function will be used, for example, to
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** check whether two operators are in the same family of subsort overloaded
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** operators. \texttt{leastSort} returns a list of sorts where the $i$-th
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** element of the list is the least sort, computed by the homonymous built-in
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** function, of the $i$-th term in the list of terms given as argument.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** Moreover, we define a function \verb~_in_~ to check whether an
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** extended sort is in a given set of extended sorts. Note that before
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** calling the built-in function \texttt{sameComponent}, extended sorts of
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** sort \texttt{Sort} have to be `desugared' into sorts of sort
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \texttt{Sort} as defined in the predefined \texttt{META-LEVEL} module.
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** This conversion is done by the \texttt{eTypeToType} function. Basically,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** user-defined sorts are converted into quoted identifiers by concatenating
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** the list of identifiers composing the name of the sort. For example, sorts
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** \texttt{'Nat} and \texttt{'List['Nat]} are converted, respectively, into
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** \texttt{'Nat} and \texttt{'List`[Nat`]}. Error
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** sorts~\cite{ClavelDuranEkerLincolnMarti-OlietMeseguerQuesada99} are left
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** as such.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars Tp Tp' Tp'' Tp''' : Type .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars TpL TpL' : TypeList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op sameKind : Module TypeList TypeList -> Bool [ditto] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq sameKind(M:Module, (Tp Tp' TpL), (Tp'' Tp''' TpL'))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = sameKind(M:Module, Tp, Tp'')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder and-then sameKind(M:Module, Tp' TpL, Tp''' TpL') .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq sameKind(M:Module, nil, nil) = true .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq sameKind(M:Module, TpL, TpL) = false [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq sameKind(M:Module, cc(S:Sort ; SS:SortSet), Tp)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = sameKind(M:Module, S:Sort, Tp) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq sameKind(M:Module, Tp, cc(S:Sort ; SS:SortSet))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = sameKind(M:Module, Tp, S:Sort) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq sameKind(M:Module, cc(S:Sort ; SS:SortSet), cc(S':Sort ; SS':SortSet))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = sameKind(M:Module, S:Sort, S':Sort) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op eLeastSort : Module TermList ~> TypeList .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq eLeastSort(M:Module, (T:Term, TL:TermList))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (leastSort(M:Module, T:Term) eLeastSort(M:Module, TL:TermList)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq eLeastSort(M:Module, empty) = nil .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq eLeastSort(M:Module, qidError(QIL)) = qidError(QIL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op eLeastSort : Module TermSet ~> TypeSet .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq eLeastSort(M:Module, (T:Term | TS:TermSet))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (leastSort(M:Module, T:Term) ; eLeastSort(M:Module, TS:TermSet)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq eLeastSort(M:Module, emptyTermSet) = none .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq eLeastSort(M:Module, qidError(QIL)) = qidError(QIL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op qidError : QidList -> [Sort] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op stringError : QidList -> [String] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq string(qidError(QIL)) = stringError(QIL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq qid(stringError(QIL)) = qidError(QIL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq stringError(QIL) + St:String = stringError(QIL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op getMsg : [Sort] -> QidList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getMsg(qidError(QIL:QidList)) = QIL:QidList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op kind : TypeList -> Type .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq kind(S:Sort TL:TypeList)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = qid("[" + string(S:Sort) + "]") kind(TL:TypeList) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq kind(K:Kind TL:TypeList) = K:Kind kind(TL:TypeList) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq kind(nil) = nil .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op kind : SortSet -> Type .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq kind(S:Sort ; SS:SortSet) = qid("[" + string(S:Sort) + "]") .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op cc : SortSet -> Type .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op getSort : Kind -> Sort .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq getSort(K:Kind)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if findOut(string(K:Kind), "`,", "{", "}", 0) == notFound
473b81d33893192056dde74b26b2467f983c102cChristian Maeder then qid(substr(string(K:Kind),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder 2,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder sd(length(string(K:Kind)), 4)))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder else qid(substr(string(K:Kind),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder 2,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder sd(findOut(string(K:Kind), "`,", "{", "}", 0), 2)))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op getSorts : Kind -> SortSet .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq getSorts(K:Kind)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if findOut(string(K:Kind), "`,", "{", "}", 0) == notFound
473b81d33893192056dde74b26b2467f983c102cChristian Maeder then qid(substr(string(K:Kind),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder 2,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder sd(length(string(K:Kind)), 4)))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder else qid(substr(string(K:Kind),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder 2,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder sd(findOut(string(K:Kind), "`,", "{", "}", 0), 2)))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ;
473b81d33893192056dde74b26b2467f983c102cChristian Maeder getSorts(qid("[" + substr(string(K:Kind),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder sd(findOut(string(K:Kind), "`,", "{", "}", 0), 1),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder length(string(K:Kind)))))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- op qid2Sort : Sort -> Sort .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- eq qid2Sort(S:Sort) = getName{S:Sort} { getPars(S:Sort) } .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ---- name of a sort (the name of S{P1, ..., Pn} is S)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op getName : Sort -> Qid .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq getName(S:Sort)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if findOpening(string(S:Sort), "{", "}", sd(length(string(S:Sort)), 2))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder == notFound
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then S:Sort
473b81d33893192056dde74b26b2467f983c102cChristian Maeder else qid(substr(string(S:Sort),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder 0,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder findOpening(string(S:Sort),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder "{", "}",
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder sd(length(string(S:Sort)), 2))))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ---- parameters of a sort (the parameters of S{P1, ..., Pn} are P1 ... Pn)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op getPars : Sort -> ParameterList [memo] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op getParsAux : String Nat Nat -> ParameterList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq getPars(S:Sort)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if findOpening(string(S:Sort), "{", "}", sd(length(string(S:Sort)), 2))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder == notFound
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then empty
473b81d33893192056dde74b26b2467f983c102cChristian Maeder else getParsAux(string(S:Sort),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder findOpening(string(S:Sort),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder "{", "}", sd(length(string(S:Sort)), 2)) + 1,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder length(string(S:Sort)))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var St Pattern OpenPar ClosingPar : String .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars L R N OpenPars ClosingPars : Nat .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getParsAux(St, L, R)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if findOut(St, ",", "{", "}", L) == notFound
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then qid(substr(St, L, sd(findClosing(St, "{", "}", L), L)))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else (qid(substr(St, L, sd(findOut(St, ",", "{", "}", L), L))),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder getParsAux(St, findOut(St, ",", "{", "}", L) + 1, R))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ---- finds a pattern out of balanced parentheses
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ---- findOut("S{P1, P2{P21, P22}, P3}", ",", "{", "}", 6) returns 18, not 12
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op findOut : String String String String Nat -> FindResult .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op findOut : String String String String Nat Nat -> FindResult .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq findOut(St, Pattern, OpenPar, ClosingPar, N)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = findOut(St, Pattern, OpenPar, ClosingPar, 0, N) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq findOut(St, Pattern, OpenPar, ClosingPar, OpenPars, N)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if N >= length(St)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then notFound
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else if OpenPars == 0 and-then substr(St, N, length(Pattern)) == Pattern
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then N
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else if substr(St, N, length(OpenPar)) == OpenPar
473b81d33893192056dde74b26b2467f983c102cChristian Maeder then findOut(St, Pattern, OpenPar, ClosingPar,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder OpenPars + 1, N + 1)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else if substr(St, N, length(ClosingPar)) == ClosingPar
473b81d33893192056dde74b26b2467f983c102cChristian Maeder then findOut(St, Pattern, OpenPar, ClosingPar,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder sd(OpenPars, 1), N + 1)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder else findOut(St, Pattern, OpenPar, ClosingPar,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder OpenPars, N + 1)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ---- finds the first closing unbalanced parenthesis
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ---- findOut("P1, P2{P21, P22}, P3}", "{", "}", 6) returns 21, not 16
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op findClosing : String String String Nat -> FindResult .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op findClosing : String String String Nat Nat -> FindResult .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq findClosing(St, OpenPar, ClosingPar, N)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = findClosing(St, OpenPar, ClosingPar, 0, N) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq findClosing(St, OpenPar, ClosingPar, OpenPars, N)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if N >= length(St)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then notFound
473b81d33893192056dde74b26b2467f983c102cChristian Maeder else if OpenPars == 0
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder and-then substr(St, N, length(ClosingPar)) == ClosingPar
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then N
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else if substr(St, N, length(OpenPar)) == OpenPar
473b81d33893192056dde74b26b2467f983c102cChristian Maeder then findClosing(St, OpenPar, ClosingPar,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder OpenPars + 1, N + 1)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else if substr(St, N, length(ClosingPar)) == ClosingPar
473b81d33893192056dde74b26b2467f983c102cChristian Maeder then findClosing(St, OpenPar, ClosingPar,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder sd(OpenPars, 1), N + 1)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder else findClosing(St, OpenPar, ClosingPar,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder OpenPars, N + 1)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ---- finds the last opening unbalanced parenthesis
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ---- findOpening("S{P1, P2{P21, P22}, P3}", "{", "}", 21) returns 1, not 8
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op findOpening : String String String Nat -> FindResult .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op findOpening : String String String Nat Nat -> FindResult .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq findOpening(St, OpenPar, ClosingPar, N)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = findOpening(St, OpenPar, ClosingPar, 0, N) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq findOpening(St, OpenPar, ClosingPar, ClosingPars, N)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if N == 0
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then notFound
473b81d33893192056dde74b26b2467f983c102cChristian Maeder else if ClosingPars == 0
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder and-then substr(St, N, length(ClosingPar)) == OpenPar
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then N
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else if substr(St, N, length(OpenPar)) == ClosingPar
473b81d33893192056dde74b26b2467f983c102cChristian Maeder then findOpening(St, OpenPar, ClosingPar,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ClosingPars + 1, sd(N, 1))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else if substr(St, N, length(ClosingPar)) == OpenPar
473b81d33893192056dde74b26b2467f983c102cChristian Maeder then findOpening(St, OpenPar, ClosingPar,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder sd(ClosingPars, 1), sd(N, 1))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder else findOpening(St, OpenPar, ClosingPar,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ClosingPars, sd(N, 1))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op makeSort : Sort ParameterList -> Sort .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op makeSort : Sort ParameterList ParameterList ParameterList -> Sort .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op makeSort2 : Sort ParameterList -> Sort .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op makePars : ParameterList -> String .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars S P : Sort .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars PL PL' PL'' PL3 : ParameterList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var VE : ViewExp .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var QIL : QidList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var K : Kind .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq makeSort(S, PL)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = if PL == empty
473b81d33893192056dde74b26b2467f983c102cChristian Maeder then S
473b81d33893192056dde74b26b2467f983c102cChristian Maeder else makeSort(S, PL, empty, empty)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ----eq makeSort(S, P, PL, PL') = makeSort(S, empty, (PL, P), PL') .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq makeSort(S, (P, PL), PL', PL'') = makeSort(S, PL, (PL', P), PL'') .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq makeSort(S, (P{PL}, PL'), PL'', PL3)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = makeSort(S, PL', (PL'', makeSort(P, PL)), PL3) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ----eq makeSort(S, (P ;; VE), PL, PL')
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ---- = makeSort(S, empty, (PL, P), (PL', VE))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ---- [owise] .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq makeSort(S, ((P ;; VE), PL), PL', PL'')
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = makeSort(S, PL, (PL', P), (PL'', VE))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [owise] .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq makeSort(S, empty, PL, PL')
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = if PL' == empty
473b81d33893192056dde74b26b2467f983c102cChristian Maeder then makeSort2(S, PL)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder else makeSort(makeSort2(S, PL), PL')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq makeSort2(S, empty) = S:Sort .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq makeSort2(S, P) = qid(string(S) + "{" + string(P) + "}") .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq makeSort2(S, (P, PL))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = qid(string(S) + "{" + string(P) + makePars(PL))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq makePars((P, PL)) = "," + string(P) + makePars(PL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq makePars(P) = "," + string(P) + "}" .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq makePars(empty) = "}" .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op list2set : TypeList -> TypeSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq list2set(Tp TpL) = Tp ; list2set(TpL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq list2set(nil) = none .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op type2qid : Type -> Qid .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq type2qid(S)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if getPars(S) == empty
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then S
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else qid(string(getName(S)) + "{" + string(parameterList2QidList(getPars(S))) + "}")
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq type2qid(K) = qid("[" + string(type2qid(getSort(K))) + "]") .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op size : TypeList -> Nat .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq size(Tp TpL) = 1 + size(TpL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq size((nil).TypeList) = 0 .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederendfm
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*******************************************************************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederfmod DEFAULT-VALUE{X :: TRIV} is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder sort Default{X} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder subsort X$Elt < Default{X} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op null : -> Default{X} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederendfm
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederview Term from TRIV to META-TERM is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder sort Elt to Term .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederendv
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*******************************************************************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder***
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** Extended Declarations
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder***
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** In this section we discuss modules \texttt{EXT-DECL} and \texttt{O-O-DECL}
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** which introduce, respectively, the declarations extending the sorts and
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** constructors for declarations of the predefined data type \texttt{Module}
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** in the \texttt{META-LEVEL} module to allow the use of extended sorts in
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** them, and the declarations appearing in object-oriented units, namely
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** class declarations, subclass relation declarations, and message
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** declarations.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder***
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** Declarations of Functional and System Modules
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder***
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** In the following module \texttt{EXT-DECL}, we introduce the declarations
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** extending those in \texttt{META-LEVEL} to allow the use of extended sorts
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** in declarations of sorts, subsort relations, operators, variables, and
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** membership axioms.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \begin{comment}
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \footnote{In the future, the declarations for operators,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** membership axioms, equations, and rules will be extended to allow
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** the use of extended sorts in sort tests, that is, terms of the
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** form \mbox{\verb~T : S~} and \mbox{\verb~T :: S~}.}
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \end{comment}
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** The extension is accomplished by adding new supersorts for each of the
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** sorts in \texttt{META-LEVEL} involved, and by adding new constructors for
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** these new sorts.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** We start introducing the declarations for the supersorts and their
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** corresponding constructors. The \texttt{EXT-DECL} module also contains the
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** declarations for sTS of such declarations.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*******************************************************************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maederfmod INT-LIST is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr META-MODULE .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr INT .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder sort IntList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder subsort Int NatList < IntList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op __ : IntList IntList -> IntList [ctor ditto] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op numberError : QidList -> [Nat] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars N M : Nat .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op from_to_list : Nat Nat ~> NatList .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ceq from N to M list
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = if N == M
473b81d33893192056dde74b26b2467f983c102cChristian Maeder then N
473b81d33893192056dde74b26b2467f983c102cChristian Maeder else N from N + 1 to M list
473b81d33893192056dde74b26b2467f983c102cChristian Maeder fi
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if N <= M .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederendfm
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*******************************************************************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederfmod EXT-DECL is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr EXT-SORT .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr INT-LIST .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var QI : Qid .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars QIL QIL' : QidList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var At : Attr .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var AtS : AttrSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var OPD OPD' : OpDecl .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var OPDS : OpDeclSet .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder vars LHS RHS T T' : Term .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var S : Sort .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var Cond : Condition .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var EqS : EquationSet .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder var RlS : RuleSet .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder var MbS : MembAxSet .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder var M : Module .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder op variant : -> Attr [ctor] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** subsort declarations error
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op subsortDeclError : QidList -> [SubsortDeclSet] [ctor format (r o)] .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq subsortDeclError(QIL) subsortDeclError(QIL')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = subsortDeclError(QIL QIL') .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** extended attribute declarations
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op strat : IntList -> Attr [ditto] . *** to handle on-demand strategies
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op ditto : -> Attr [ctor] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op _in_ : Attr AttrSet -> Bool .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq At in At AtS = true .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq At in AtS = false [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** extended operation declarations
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op opDeclError : QidList -> [OpDeclSet] [ctor format (r o)] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq opDeclError(QIL) opDeclError(QIL') = opDeclError(QIL QIL') .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** extended membership axioms
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op membAxError : QidList -> [MembAxSet] [ctor format (r o)] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq membAxError(QIL) membAxError(QIL') = membAxError(QIL QIL') .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** extended equations
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op equationError : QidList -> [EquationSet] [ctor format (r o)] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq equationError(QIL) equationError(QIL') = equationError(QIL QIL') .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** extended rules
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op ruleError : QidList -> [RuleSet] [ctor format (r o)] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq ruleError(QIL) ruleError(QIL') = ruleError(QIL QIL') .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** The function \verb~_in_~ checks whether a given operator
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** declaration is in a set of operator declarations.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op _in_ : OpDecl OpDeclSet -> Bool .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq OPD in (OPD OPDS) = true .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq OPD in OPDS = false [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ops lhs rhs : Rule -> Term .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op cond : Rule -> Condition .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op atts : Rule -> AttrSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op label : Rule -> [Qid] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq lhs(rl LHS => RHS [AtS] .) = LHS .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq lhs(crl LHS => RHS if Cond [AtS] .) = LHS .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq rhs(rl LHS => RHS [AtS] .) = RHS .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq rhs(crl LHS => RHS if Cond [AtS] .) = RHS .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq cond(rl LHS => RHS [AtS] .) = nil .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq cond(crl LHS => RHS if Cond [AtS] .) = Cond .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq atts(rl LHS => RHS [AtS] .) = AtS .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq atts(crl LHS => RHS if Cond [AtS] .) = AtS .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq label(rl LHS => RHS [label(QI) AtS] .) = QI .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq label(crl LHS => RHS if Cond [label(QI) AtS] .) = QI .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ops lhs rhs : Equation -> Term .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op cond : Equation -> Condition .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op atts : Equation -> AttrSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op label : Equation -> [Qid] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq lhs(eq LHS = RHS [AtS] .) = LHS .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq lhs(ceq LHS = RHS if Cond [AtS] .) = LHS .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq rhs(eq LHS = RHS [AtS] .) = RHS .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq rhs(ceq LHS = RHS if Cond [AtS] .) = RHS .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq cond(eq LHS = RHS [AtS] .) = nil .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq cond(ceq LHS = RHS if Cond [AtS] .) = Cond .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq atts(eq LHS = RHS [AtS] .) = AtS .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq atts(ceq LHS = RHS if Cond [AtS] .) = AtS .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq label(eq LHS = RHS [label(QI) AtS] .) = QI .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq label(ceq LHS = RHS if Cond [label(QI) AtS] .) = QI .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op cond : MembAx -> Condition .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op atts : MembAx -> AttrSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq cond(mb T : S [AtS] .) = nil .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq cond(cmb T : S if Cond [AtS] .) = Cond .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq atts(mb T : S [AtS] .) = AtS .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq atts(cmb T : S if Cond [AtS] .) = AtS .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op rulify : EquationSet -> RuleSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ---- takes a set of equations and turn them into rules
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq rulify(eq LHS = RHS [AtS] . EqS) = (rl LHS => RHS [AtS] .) rulify(EqS) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq rulify(ceq LHS = RHS if Cond [AtS] . EqS) = (crl LHS => RHS if Cond [AtS] .) rulify(EqS) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq rulify((none).EquationSet) = none .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederendfm
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder**** The module EXT-TERM extends META-LEVEL with definitions of several
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder**** operations that manipulate terms: definitions for positions and operations
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder**** to get the subterm of a given term at a given position, to replace the
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder**** subterm of a term at a given position by another term, to get all the
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder**** nonvariable positions in a term, to apply a substitution to a term, and to
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder**** get a copy of a term in which all the variables in it have been renamed.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederfmod EXT-TERM is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr META-LEVEL .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr EXT-BOOL .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr EXT-DECL .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars T T' : Term .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars F X : Qid .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var TL : TermList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var N : Nat .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars NL NL' : NatList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars V V' W : Variable .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var Subst : Substitution .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars C Ct : Constant .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var NTL : NeTermList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var M : Module .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var Tp : Type .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars TpL TpL' : TypeList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars AtS AtS' : AttrSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var ODS : OpDeclSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var Cd : Condition .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var S : Sort .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder **** vars returns the set of variables in a term
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op vars : Term -> QidSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op vars : TermList -> QidSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq vars(V) = V .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq vars(C) = none .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq vars(F[TL]) = vars(TL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq vars(empty) = none .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq vars((T, TL)) = vars(T) ; vars(TL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder **** varlist returns the list of variables in a term
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op varlist : Term -> QidList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op varlist : TermList -> QidList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq varlist(V) = V .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq varlist(C) = nil .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq varlist(F[TL]) = varlist(TL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq varlist(empty) = nil .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq varlist((T, TL)) = varlist(T) varlist(TL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder **** occurs? checks whether a variable name occurs in a term or not.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op occurs? : Variable Term -> Bool .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op occurs? : Variable TermList -> Bool .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq occurs?(V, V') = V == V' .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq occurs?(V, C) = false .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq occurs?(V, F[TL]) = occurs?(V, TL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq occurs?(V, (T, TL)) = occurs?(V, T) or-else occurs?(V, TL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder **** occurrences checks whether a variable name occurs in a term or not.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op occurrences : Variable Term -> Nat .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op occurrences : Variable TermList -> Nat .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq occurrences(V, V') = if V == V' then 1 else 0 fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq occurrences(V, C) = 0 .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq occurrences(V, F[TL]) = occurrences(V, TL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq occurrences(V, (T, TL)) = occurrences(V, T) + occurrences(V, TL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op frozen : Module Term Nat -> Bool .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op frozen : Module OpDeclSet Qid TypeList Nat -> Bool .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq frozen(M, F[TL], N)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = frozen(M, getOps(M), F, eLeastSort(M, TL), N) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq frozen(M, op F : TpL -> Tp [AtS] . ODS, F, TpL', N)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = true
473b81d33893192056dde74b26b2467f983c102cChristian Maeder if sameKind(M, TpL, TpL')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder /\ not ctor(M, op F : TpL -> Tp [AtS] . ODS, F, TpL') .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq frozen(M, op F : TpL -> Tp [AtS] . ODS, F, TpL', N)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = true
473b81d33893192056dde74b26b2467f983c102cChristian Maeder if sameKind(M, TpL, TpL')
473b81d33893192056dde74b26b2467f983c102cChristian Maeder /\ ctor(M, op F : TpL -> Tp [AtS] . ODS, F, TpL')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder /\ frozen(NL N NL') AtS' := AtS .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq frozen(M, ODS, F, TpL, N) = false [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ---- ctor check whether the operator at the top is a constructor
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ---- in any of its overloadings
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op ctor : Module OpDeclSet Term -> Bool .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op ctor : Module OpDeclSet Qid TypeList -> Bool .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq ctor(M, ODS, Ct) = ctor(M, ODS, Ct, nil) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq ctor(M, ODS, F[TL]) = ctor(M, ODS, F, eLeastSort(M, TL)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq ctor(M, ODS, T) = false [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq ctor(M, op F : TpL -> Tp [AtS] . ODS, F, TpL')
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = ctor in AtS or-else ctor(M, ODS, F, TpL')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if sameKind(M, TpL, TpL') .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq ctor(M, ODS, F, TpL) = false [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder**** The function \texttt{substitute} takes a term $t$ and a substitution
473b81d33893192056dde74b26b2467f983c102cChristian Maeder**** $\sigma$ and returns the term $t\sigma$.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op substitute : Module Term Substitution -> Term .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op substitute : Module TermList Substitution -> TermList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq substitute(M, T, none) = T .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq substitute(M, V, ((W <- T) ; Subst))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = if getName(V) == getName(W) and-then sameKind(M, getType(V), getType(W))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder then T
473b81d33893192056dde74b26b2467f983c102cChristian Maeder else substitute(M, V, Subst)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq substitute(M, C, ((W <- T); Subst)) = C .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq substitute(M, F[TL], Subst) = F[substitute(M, TL, Subst)] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq substitute(M, (T, TL), Subst)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (substitute(M, T, Subst), substitute(M, TL, Subst)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op substitute : Module EqCondition Substitution -> EqCondition .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq substitute(M, T = T' /\ Cd, Subst)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = substitute(M, T, Subst) = substitute(M, T', Subst) /\ substitute(M, Cd, Subst) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq substitute(M, T := T' /\ Cd, Subst)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = substitute(M, T, Subst) := substitute(M, T', Subst) /\ substitute(M, Cd, Subst) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq substitute(M, T : S /\ Cd, Subst)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = substitute(M, T, Subst) : S /\ substitute(M, Cd, Subst) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq substitute(M, (nil).EqCondition, Subst) = nil .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederendfm
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder***(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederred substitute('f['X:Foo, 'g['Y:Foo, 'Z:Foo]], ('Y:Foo <- 'h['W:Foo])) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederred rename('f['X:Foo, 'g['Y:Foo, 'Z:Foo]]) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederred allNonVarPos(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder substitute('f['X:Foo, 'g['Y:Foo, 'Z:Foo]], ('Y:Foo <- 'h['W:Foo]))) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*******************************************************************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder***
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** Declarations for Object-Oriented Modules
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder***
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** In the \texttt{O-O-DECL} module we introduce the sorts and constructors
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** for declarations of classes, subclass relations, and messages in
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** object-oriented units.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** Note that we follow the same naming conventions for classes as for
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** extended sorts (see Section~\ref{parameterized-modules}), and therefore
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** we use the sort \texttt{Sort} for class identifiers, and
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \texttt{TypeList} and \texttt{SortSet} for lists and sTS of class
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** identifiers, respectively. We use the operator \verb~attr_:_~ as a
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** constructor for declarations of attributes. Since the operator name
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \texttt{\_\,:\_\,} is used for sort tests in the \texttt{META-LEVEL}
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** module, we use \texttt{attr\_\,:\_\,} as constructor for declarations of
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** attributes to satisfy the preregularity condition.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*******************************************************************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederfmod O-O-DECL is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr EXT-SORT .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars QIL QIL' : QidList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder sorts AttrDecl AttrDeclSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder subsort AttrDecl < AttrDeclSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op attr_:_ : Qid Sort -> AttrDecl .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op none : -> AttrDeclSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op _`,_ : AttrDeclSet AttrDeclSet -> AttrDeclSet [assoc comm id: none] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq AD:AttrDecl, AD:AttrDecl = AD:AttrDecl .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder sorts ClassDecl ClassDeclSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder subsort ClassDecl < ClassDeclSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op class_|_. : Sort AttrDeclSet -> ClassDecl .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op none : -> ClassDeclSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op __ : ClassDeclSet ClassDeclSet -> ClassDeclSet [assoc comm id: none] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op classDeclError : QidList -> [ClassDeclSet] [ctor format (r o)] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq classDeclError(QIL) classDeclError(QIL') = classDeclError(QIL QIL') .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq CD:ClassDecl CD:ClassDecl = CD:ClassDecl .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder sorts SubclassDecl SubclassDeclSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder subsort SubclassDecl < SubclassDeclSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op subclass_<_. : Sort Sort -> SubclassDecl .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op none : -> SubclassDeclSet .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op __ : SubclassDeclSet SubclassDeclSet -> SubclassDeclSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [assoc comm id: none] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq SCD:SubclassDecl SCD:SubclassDecl = SCD:SubclassDecl .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op subclassDeclError : QidList -> [SubclassDeclSet] [ctor format (r o)] .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq subclassDeclError(QIL) subclassDeclError(QIL')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = subclassDeclError(QIL QIL') .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder sorts MsgDecl MsgDeclSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder subsort MsgDecl < MsgDeclSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op msg_:_->_. : Qid TypeList Sort -> MsgDecl .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op none : -> MsgDeclSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op __ : MsgDeclSet MsgDeclSet -> MsgDeclSet [assoc comm id: none] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq MD:MsgDecl MD:MsgDecl = MD:MsgDecl .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op msgDeclError : QidList -> [MsgDeclSet] [ctor format (r o)] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq msgDeclError(QIL) msgDeclError(QIL') = msgDeclError(QIL QIL') .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** The function \texttt{classSet} returns the set of class identifiers in
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** the set of class declarations given as argument.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op classSet : ClassDeclSet -> SortSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq classSet((class S:Sort | ADS:AttrDeclSet .) CDS:ClassDeclSet)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (S:Sort ; classSet(CDS:ClassDeclSet)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq classSet(none) = none .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederendfm
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*******************************************************************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder***
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** Renaming Maps
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder***
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** We introduce the different types of renaming maps in the module
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \texttt{FMAP} below. A sort is introduced for each of these types of maps,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** with the appropriate constructors for each sort (see
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** Section~\ref{module-expressions}). All these sorts are declared to be
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** subsorts of the sort \texttt{Map}. A sort for sTS of
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** maps (\texttt{RenamingSet}) is then declared as supersort of \texttt{Map}
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** with constructors \texttt{none} and \verb~_,_~.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*******************************************************************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederfmod FMAP is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder inc META-MODULE .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr EXT-SORT .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** renamings
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op class_to_ : Sort Sort -> Renaming .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op attr_._to_ : Qid Sort Qid -> Renaming .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op msg_to_ : Qid Qid -> Renaming .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op msg_:_->_to_ : Qid TypeList Sort Qid -> Renaming .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op none : -> RenamingSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq (MAP, MAP) = MAP .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq (MAPS, none) = MAPS .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- eq attr A . qidError(QIL) to A' = none .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** Given a set of maps, the function \texttt{sortMaps} returns the
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** subset of sort maps in it.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var MAP : Renaming .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var MAPS : RenamingSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars S S' A A' : Sort .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var QIL : QidList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op sortMaps : RenamingSet -> RenamingSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq sortMaps(sort S to S') = sort S to S' .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq sortMaps(((sort S to S'), MAPS))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = ((sort S to S'), sortMaps(MAPS)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq sortMaps(MAP) = none [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq sortMaps((MAP, MAPS)) = sortMaps(MAPS) [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq sortMaps(none) = none .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederendfm
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*******************************************************************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder***
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** Module Expressions and Module Names
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder***
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** The abstract syntax for writing specifications in Maude can be seen as
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** given by module expressions, where the notion of module expression is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** understood as an expression that defines a new module out of previously
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** defined modules by combining and/or modifying them according to a specific
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** set of operations. All module expressions will be evaluated generating
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** modules with such module expressions as names. In the case of parameterized
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** modules, each of the parameters in an interface will be used as the name
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** of a new module created as a renamed copy of the parameter theory.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder***
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** Module Expressions
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder***
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** The \texttt{TUPLE} and \texttt{POWER} are declared to be new types of
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** \texttt{ModuleExpression}s.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*******************************************************************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederfmod MOD-EXPR is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder inc META-MODULE .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr FMAP .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op TUPLE`[_`] : NzNat -> ModuleExpression .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op POWER`[_`] : NzNat -> ModuleExpression .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq ME:ModuleExpression * ( none ) = ME:ModuleExpression .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederendfm
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*******************************************************************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder***
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** Module Names
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder***
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** As we shall see in the coming sections, the evaluation of module
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** expressions may produce the creation of new modules, whose \emph{names}
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** are given by the module expressions themselves. If there is already a
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** module in the database with the module expression being evaluated as name,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** the evaluation of such module expression does not produce any change in
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** the database. However, the evaluation of a module expression may involve
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** the evaluation of some other module expressions contained in the modules
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** involved, which in turn may generate new modules.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** Given a parameterized module $\texttt{N\{L}_1\texttt{\ ::\ T}_1
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \texttt{\ ,\ }\ldots\texttt{\ ,\ L}_n\texttt{\ ::\ T}_n\texttt{\}}$, with
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** $\texttt{L}_1\ldots\texttt{L}_n$ labels and
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** $\texttt{T}_1\ldots\texttt{T}_n$ theory identifiers, we say that
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \texttt{N} is the name of the module and that
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** $\texttt{\{L}_1\texttt{\ ::\ T}_1\texttt{\ ,\ }
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** \ldots\texttt{\ ,\ L}_n\texttt{\ ::\ T}_n\texttt{\}}$
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** is its \emph{interface}.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** As we shall see in Sections~\ref{instantiation} and~\ref{unit-processing},
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** for each parameter $\texttt{L}_i\texttt{\ ::\ T}_i$ in the interface of a
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** module, a new module is generated with such a parameter expression as its
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** name, and a declaration importing it in the parameterized module is added.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** We regard the relationship between the body of a parameterized module and
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** the parameters in its interface, not as an inclusion, but as mediated by
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** a module constructor that generates renamed copies of the parameters,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** which are then included. Therefore, the sort \texttt{ViewExp} is
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** declared as a subsort of \texttt{Header}, that is, terms of sort
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** \texttt{ViewExp} are considered to be module names. The constructor
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** operator for the sort \texttt{ViewExp} is \verb~par_::_~.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*******************************************************************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederfmod MOD-NAME is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder inc MOD-EXPR .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr EXT-BOOL .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op parameterError : QidList -> [ParameterDecl] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder sort ModuleName .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder subsorts ModuleExpression < ModuleName < Header .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op _{_} : ModuleExpression ParameterDeclList -> Header .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op pd : ParameterDecl -> ModuleName .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op nullHeader : -> Header .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op getName : Header -> ModuleExpression .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op getParDecls : Header -> ParameterDeclList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars QI QI' : Qid .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var ME : ModuleExpression .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars PDL PDL' : ParameterDeclList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var PL : NeParameterList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var MN : ModuleName .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getName(ME{PDL}) = ME .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getName(MN) = MN .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getParDecls(ME{PDL}) = PDL .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getParDecls(MN) = nil .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op including_. : ModuleName -> Import [ctor] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op extending_. : ModuleName -> Import [ctor] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op protecting_. : ModuleName -> Import [ctor] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op fth_is_sorts_.____endfth : Header ImportList SortSet SubsortDeclSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder OpDeclSet MembAxSet EquationSet -> FTheory [ctor gather (& & & & & & &)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder format (d d d n++i ni d d ni ni ni ni n--i d)] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op th_is_sorts_._____endth : Header ImportList SortSet SubsortDeclSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder OpDeclSet MembAxSet EquationSet RuleSet -> STheory
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [ctor gather (& & & & & & & &)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder format (d d d n++i ni d d ni ni ni ni ni n--i d)] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** The function \texttt{labelInParameterDeclList} checks whether the quoted
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** identifier given as first argument is used as a label in the list of
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** parameters given as second argument.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op labelInParameterDeclList : Sort ParameterDeclList -> Bool .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq labelInParameterDeclList(QI, (PDL, (QI :: ME), PDL')) = true .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq labelInParameterDeclList(QI, PDL) = false [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederendfm
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*******************************************************************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** Since the Core Maude engine assumes that module names are identifiers and
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** does not know about term-structured module names (such as parameterized
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** module interfaces or module expressions), for evaluation purposes we need
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** to transform them into quoted identifiers. The functions
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \texttt{header2Qid} and \texttt{header2QidList} in the module
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \texttt{MOD-NAME-TO-QID} below accomplish this transformation. In any
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** language extensions, new equations for the function
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \texttt{header2QidList} should be added for each new module expression
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** constructor introduced. In Sections~\ref{renaming} and~\ref{instantiation}
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** we shall see how the corresponding equalities are added for renaming and
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** instantiation expressions, and in Section~\ref{extension} for other new
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** module expressions in extensions of Full Maude.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*******************************************************************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederfmod MOD-NAME-TO-QID is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr MOD-NAME .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr EXT-QID-LIST .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op header2Qid : -> Qid .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op header2QidList : Header -> QidList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op parameterDecl2Qid : ParameterDecl -> Qid .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op parameterDecl2QidList : ParameterDecl -> QidList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op parameterDeclList2Qid : ParameterDeclList -> Qid .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op parameterDeclList2QidList : ParameterDeclList -> QidList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars QI X : Qid .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var QIL : QidList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars ME ME' : ModuleExpression .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var PDL : ParameterDeclList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var PD : ParameterDecl .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq header2Qid(QI) = QI .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq header2Qid(nullHeader) = ' .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq header2Qid(pd(X :: ME)) = qidList2Qid(header2QidList(pd(X :: ME))) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq header2QidList(pd(X :: ME)) = X ':: header2QidList(ME) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq header2QidList(QI) = QI .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq header2QidList(nullHeader) = ' .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq header2Qid((ME { PDL })) = qidList2Qid(header2QidList((ME { PDL }))) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ceq header2QidList((ME { PDL }))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = (if QI == '\s then QIL else QIL QI fi
473b81d33893192056dde74b26b2467f983c102cChristian Maeder '`{ parameterDecl2QidList(PDL) '`} '\s)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if QIL QI := header2QidList(ME) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parameterDecl2Qid(X :: ME) = qidList2Qid(X ':: header2Qid(ME)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parameterDeclList2Qid(PDL)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = qidList2Qid(parameterDeclList2QidList(PDL)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parameterDeclList2QidList(X :: ME) = X ':: header2QidList(ME) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parameterDeclList2QidList((X :: ME, PDL))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = parameterDeclList2QidList(X :: ME) '`, parameterDeclList2QidList(PDL)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederendfm
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*******************************************************************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder***
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** Modules
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder***
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** We handle six different types of units: functional, system, and
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** object-oriented modules, and functional, system, and object-oriented
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** theories. Modules and theories of any kind are considered to be elements
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** in specific subsorts of the sort \texttt{Module}. A constructor
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \texttt{error} is also included to represent incorrect units.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \texttt{error} has a list of quoted identifiers as argument, which is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** used to report the error. Besides considering functional and system
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** theories and object-oriented theories and modules, the declarations
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** presented in the following module extend the declarations for sort
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \texttt{Module} in the \texttt{META-LEVEL} module in three different ways:
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \begin{itemize}
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \item the name of a module can be any term of sort \texttt{Header},
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \item parameterized modules are handled, for which a list of
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** parameters is added to the constructors of modules,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \item the importation declaration is extended to module names, and
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** \item parameterized sorts are supported.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \end{itemize}
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*******************************************************************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederfmod UNIT is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr EXT-DECL .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr O-O-DECL .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr MOD-NAME-TO-QID .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder inc META-LEVEL .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op moduleName : Import -> ModuleName .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq moduleName(protecting MN .) = MN .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq moduleName(protecting ME{PL} .) = ME .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq moduleName(extending MN .) = MN .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq moduleName(extending ME{PL} .) = ME .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq moduleName(including MN .) = MN .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq moduleName(including ME{PL} .) = ME .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op importError : QidList -> [ImportList] [ctor format (r o)] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq importError(QIL) importError(QIL') = importError(QIL QIL') .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder sorts OModule OTheory .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder subsorts SModule < OModule < Module .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder subsorts STheory < OTheory < Module .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op noModule : -> Module . *** Module
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op unitError : QidList -> [Module] [ctor format (r o)] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op getMsg : [Module] -> QidList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getMsg(unitError(QIL)) = QIL .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op omod_is_sorts_.________endom : Header ImportList
473b81d33893192056dde74b26b2467f983c102cChristian Maeder SortSet SubsortDeclSet ClassDeclSet SubclassDeclSet OpDeclSet
473b81d33893192056dde74b26b2467f983c102cChristian Maeder MsgDeclSet MembAxSet EquationSet RuleSet -> OModule
473b81d33893192056dde74b26b2467f983c102cChristian Maeder [ctor
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder gather (& & & & & & & & & & &)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder format (r! o r! n++io ni d d ni ni ni ni ni ni ni ni n--ir! o)] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op oth_is_sorts_.________endoth : Header ImportList
473b81d33893192056dde74b26b2467f983c102cChristian Maeder SortSet SubsortDeclSet ClassDeclSet SubclassDeclSet OpDeclSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder MsgDeclSet MembAxSet EquationSet RuleSet -> OTheory
473b81d33893192056dde74b26b2467f983c102cChristian Maeder [ctor
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder gather (& & & & & & & & & & &)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder format (r! o r! n++io ni d d ni ni ni ni ni ni ni ni n--ir! o)] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** In addition to the constructor operators, the following functions are
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** introduced in the \texttt{UNIT} module:
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \begin{itemize}
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \item A function \verb~_in_~ to check whether a given importation
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** declaration is in a set of importation declarations or not.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op _in_ : Import ImportList -> Bool .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \item Selector functions for the different components of a Module.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op getName : Module -> Header .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op getPars : Module -> ParameterDeclList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op getClasses : Module -> ClassDeclSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op getSubclasses : Module -> SubclassDeclSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op getMsgs : Module -> MsgDeclSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \item Functions to change the value of each of the components of a Module.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op setName : Module ModuleExpression -> Module .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op setName : Module ParameterDecl -> Module .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op setPars : Module ParameterDeclList -> Module .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op setImports : Module ImportList -> Module .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op setSorts : Module SortSet -> Module .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op setSubsorts : Module SubsortDeclSet -> Module .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op setOps : Module OpDeclSet -> Module .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op setMbs : Module MembAxSet -> Module .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op setEqs : Module EquationSet -> Module .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op setRls : Module RuleSet ~> Module .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op setClasses : Module ClassDeclSet -> Module .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op setSubclasses : Module SubclassDeclSet -> Module .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op setMsgs : Module MsgDeclSet -> Module .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** \item Functions to add new declarations to the set of declarations
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** already in a unit.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op addImports : ImportList Module -> Module .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op addSorts : SortSet Module -> Module .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op addSubsorts : [SubsortDeclSet] Module -> Module .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op addOps : [OpDeclSet] Module -> Module .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op addMbs : MembAxSet Module -> Module .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op addEqs : EquationSet Module -> Module .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op addRls : RuleSet Module -> Module .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op addClasses : ClassDeclSet Module -> Module .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op addSubclasses : SubclassDeclSet Module -> Module .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op addMsgs : MsgDeclSet Module -> Module .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \item There are functions and constants to create empty modules of the
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** different types. For example, the function \texttt{emptyFTheory}
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** returns an empty functional theory. There is also a
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** function \texttt{empty} which takes a module as argument and returns
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** an empty module of the same type.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op emptyFModule : Header -> FModule .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op emptyFModule : -> FModule .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op emptySModule : -> SModule .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op emptyOModule : -> OModule .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op emptyFTheory : -> FModule .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op emptySTheory : -> SModule .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op emptyOTheory : -> OModule .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op empty : Module -> Module .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \item A function \texttt{addDecls} which returns the module resulting from
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** adding all the declarations in the module passed as second argument
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** to the module passed as first argument.
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op addDecls : Module Module -> Module .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \end{itemize}
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** Note that some of the `set' and `add' functions are partial functions.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars M M' M'' : Module .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars QI V : Qid .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var S : Sort .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars SSDS SSDS' SSDS'' : SubsortDeclSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars OPD OPD' : OpDecl .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars OPDS OPDS' : OpDeclSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var OPDS? : [OpDeclSet] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var At : Attr .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var AtS : AttrSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars MAS MAS' MbS : MembAxSet .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder vars Eq Eq' : Equation .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars EqS EqS' : EquationSet .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder vars Rl Rl' : Rule .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars RlS RlS' : RuleSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars SS SS' : SortSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars IL IL' : ImportList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars QIL QIL' : QidList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars PL PL' : ParameterList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars CDS CDS' : ClassDeclSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars SCD SCD' : SubclassDecl .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars SCDS SCDS' : SubclassDeclSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars U U' : Module .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars MDS MDS' : MsgDeclSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars I I' : Import .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder vars T T' T1 T1' T2 T2' : Term .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars ME ME' : ModuleExpression .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars PD PD' : ParameterDecl .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars PDL PDL' : ParameterDeclList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var H : Header .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars MN MN' : ModuleName .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder var Cd Cond Cond1 Cond2 : Condition .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq I in (IL I IL') = true .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq I in IL = false [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op theory : Module -> Bool .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq theory(unitError(QIL)) = false .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq theory(mod H is IL sorts SS . SSDS OPDS MAS EqS RlS endm) = false .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq theory(th MN is IL sorts SS . SSDS OPDS MAS EqS RlS endth) = true .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq theory(fmod H is IL sorts SS . SSDS OPDS MAS EqS endfm) = false .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq theory(fth MN is IL sorts SS . SSDS OPDS MAS EqS endfth) = true .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq theory(omod H is IL sorts SS . SSDS CDS SCDS OPDS MDS MAS EqS RlS endom)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = false .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq theory(oth MN is IL sorts SS . SSDS CDS SCDS OPDS MDS MAS EqS RlS endoth)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = true .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** Selection functions for units
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getName(unitError(QIL)) = ' .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getName(noModule) = ' .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getName(mod ME is IL sorts SS . SSDS OPDS MAS EqS RlS endm) = ME .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getName(mod ME{PDL} is IL sorts SS . SSDS OPDS MAS EqS RlS endm) = ME .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getName(th MN is IL sorts SS . SSDS OPDS MAS EqS RlS endth) = MN .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ----eq getName(th PD is IL sorts SS . SSDS OPDS MAS EqS RlS endth) = PD .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getName(fmod ME is IL sorts SS . SSDS OPDS MAS EqS endfm) = ME .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getName(fmod ME{PDL} is IL sorts SS . SSDS OPDS MAS EqS endfm) = ME .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getName(fth MN is IL sorts SS . SSDS OPDS MAS EqS endfth) = MN .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getName(
473b81d33893192056dde74b26b2467f983c102cChristian Maeder omod ME is IL sorts SS . SSDS CDS SCDS OPDS MDS MAS EqS RlS endom)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = ME .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getName(
473b81d33893192056dde74b26b2467f983c102cChristian Maeder omod ME{PDL} is IL sorts SS . SSDS CDS SCDS OPDS MDS MAS EqS RlS endom)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = ME .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getName(
473b81d33893192056dde74b26b2467f983c102cChristian Maeder oth MN is IL sorts SS . SSDS CDS SCDS OPDS MDS MAS EqS RlS endoth)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = MN .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getImports(unitError(QIL)) = nil .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getImports(noModule) = nil .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getImports(mod H is IL sorts SS . SSDS OPDS MAS EqS RlS endm) = IL .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getImports(th H is IL sorts SS . SSDS OPDS MAS EqS RlS endth) = IL .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getImports(fmod H is IL sorts SS . SSDS OPDS MAS EqS endfm) = IL .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getImports(fth H is IL sorts SS . SSDS OPDS MAS EqS endfth) = IL .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getImports(
473b81d33893192056dde74b26b2467f983c102cChristian Maeder omod H is IL sorts SS . SSDS CDS SCDS OPDS MDS MAS EqS RlS endom)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = IL .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getImports(
473b81d33893192056dde74b26b2467f983c102cChristian Maeder oth H is IL sorts SS . SSDS CDS SCDS OPDS MDS MAS EqS RlS endoth)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = IL .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getPars(unitError(QIL)) = nil .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getPars(noModule) = nil .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getPars(mod ME is IL sorts SS . SSDS OPDS MAS EqS RlS endm) = nil .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getPars(mod ME{PDL} is IL sorts SS . SSDS OPDS MAS EqS RlS endm) = PDL .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq getPars(mod nullHeader is IL sorts SS . SSDS OPDS MAS EqS RlS endm)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = nil .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getPars(th MN is IL sorts SS . SSDS OPDS MAS EqS RlS endth) = nil .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getPars(th MN is IL sorts SS . SSDS OPDS MAS EqS RlS endth) = nil .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getPars(fmod ME is IL sorts SS . SSDS OPDS MAS EqS endfm) = nil .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getPars(fmod ME{PDL} is IL sorts SS . SSDS OPDS MAS EqS endfm) = PDL .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getPars(fmod nullHeader is IL sorts SS . SSDS OPDS MAS EqS endfm) = nil .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getPars(fth MN is IL sorts SS . SSDS OPDS MAS EqS endfth) = nil .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getPars(
473b81d33893192056dde74b26b2467f983c102cChristian Maeder omod ME is IL sorts SS . SSDS CDS SCDS OPDS MDS MAS EqS RlS endom)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = nil .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getPars(
473b81d33893192056dde74b26b2467f983c102cChristian Maeder omod ME{PDL} is IL sorts SS . SSDS CDS SCDS OPDS MDS MAS EqS RlS
473b81d33893192056dde74b26b2467f983c102cChristian Maeder endom)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = PDL .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getPars(
473b81d33893192056dde74b26b2467f983c102cChristian Maeder omod nullHeader is IL sorts SS . SSDS CDS SCDS OPDS MDS MAS EqS RlS
473b81d33893192056dde74b26b2467f983c102cChristian Maeder endom)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = nil .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getPars(
473b81d33893192056dde74b26b2467f983c102cChristian Maeder oth MN is IL sorts SS . SSDS CDS SCDS OPDS MDS MAS EqS RlS endoth)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = nil .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getSorts(unitError(QIL)) = none .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getSorts(mod H is IL sorts SS . SSDS OPDS MAS EqS RlS endm) = SS .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getSorts(th H is IL sorts SS . SSDS OPDS MAS EqS RlS endth) = SS .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getSorts(fmod H is IL sorts SS . SSDS OPDS MAS EqS endfm) = SS .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getSorts(fth H is IL sorts SS . SSDS OPDS MAS EqS endfth) = SS .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getSorts(
473b81d33893192056dde74b26b2467f983c102cChristian Maeder omod H is IL sorts SS . SSDS CDS SCDS OPDS MDS MAS EqS RlS endom)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = SS .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getSorts(
473b81d33893192056dde74b26b2467f983c102cChristian Maeder oth H is IL sorts SS . SSDS CDS SCDS OPDS MDS MAS EqS RlS endoth)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = SS .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op getAllSorts : Module -> SortSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getAllSorts(M) = getSorts(M) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getSubsorts(unitError(QIL)) = none .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getSubsorts(mod H is IL sorts SS . SSDS OPDS MAS EqS RlS endm) = SSDS .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getSubsorts(th H is IL sorts SS . SSDS OPDS MAS EqS RlS endth) = SSDS .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getSubsorts(fmod H is IL sorts SS . SSDS OPDS MAS EqS endfm) = SSDS .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getSubsorts(fth H is IL sorts SS . SSDS OPDS MAS EqS endfth) = SSDS .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getSubsorts(
473b81d33893192056dde74b26b2467f983c102cChristian Maeder omod H is IL sorts SS . SSDS CDS SCDS OPDS MDS MAS EqS RlS endom)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = SSDS .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getSubsorts(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder oth H is IL sorts SS . SSDS CDS SCDS OPDS MDS MAS EqS RlS endoth)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = SSDS .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getOps(unitError(QIL)) = none .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getOps(noModule) = none .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getOps(mod H is IL sorts SS . SSDS OPDS MAS EqS RlS endm) = OPDS .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getOps(th H is IL sorts SS . SSDS OPDS MAS EqS RlS endth) = OPDS .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getOps(fmod H is IL sorts SS . SSDS OPDS MAS EqS endfm) = OPDS .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getOps(fth H is IL sorts SS . SSDS OPDS MAS EqS endfth) = OPDS .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq getOps(omod H is IL sorts SS . SSDS CDS SCDS OPDS MDS MAS EqS RlS endom)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = OPDS .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq getOps(oth H is IL sorts SS . SSDS CDS SCDS OPDS MDS MAS EqS RlS endoth)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = OPDS .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getMbs(unitError(QIL)) = none .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getMbs(mod H is IL sorts SS . SSDS OPDS MAS EqS RlS endm) = MAS .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getMbs(th H is IL sorts SS . SSDS OPDS MAS EqS RlS endth) = MAS .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getMbs(fmod H is IL sorts SS . SSDS OPDS MAS EqS endfm) = MAS .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getMbs(fth H is IL sorts SS . SSDS OPDS MAS EqS endfth) = MAS .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq getMbs(omod H is IL sorts SS . SSDS CDS SCDS OPDS MDS MAS EqS RlS endom)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = MAS .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq getMbs(oth H is IL sorts SS . SSDS CDS SCDS OPDS MDS MAS EqS RlS endoth)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = MAS .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getEqs(unitError(QIL)) = none .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getEqs(mod H is IL sorts SS . SSDS OPDS MAS EqS RlS endm) = EqS .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getEqs(th H is IL sorts SS . SSDS OPDS MAS EqS RlS endth) = EqS .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getEqs(fmod H is IL sorts SS . SSDS OPDS MAS EqS endfm) = EqS .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getEqs(fth H is IL sorts SS . SSDS OPDS MAS EqS endfth) = EqS .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq getEqs(omod H is IL sorts SS . SSDS CDS SCDS OPDS MDS MAS EqS RlS endom)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = EqS .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq getEqs(oth H is IL sorts SS . SSDS CDS SCDS OPDS MDS MAS EqS RlS endoth)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = EqS .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getRls(unitError(QIL)) = none .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getRls(mod H is IL sorts SS . SSDS OPDS MAS EqS RlS endm) = RlS .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getRls(th H is IL sorts SS . SSDS OPDS MAS EqS RlS endth) = RlS .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getRls(fmod H is IL sorts SS . SSDS OPDS MAS EqS endfm) = none .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getRls(fth H is IL sorts SS . SSDS OPDS MAS EqS endfth) = none .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq getRls(omod H is IL sorts SS . SSDS CDS SCDS OPDS MDS MAS EqS RlS endom)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = RlS .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq getRls(oth H is IL sorts SS . SSDS CDS SCDS OPDS MDS MAS EqS RlS endoth)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = RlS .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getClasses(unitError(QIL)) = none .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getClasses(mod H is IL sorts SS . SSDS OPDS MAS EqS RlS endm) = none .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getClasses(th H is IL sorts SS . SSDS OPDS MAS EqS RlS endth) = none .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getClasses(fmod H is IL sorts SS . SSDS OPDS MAS EqS endfm) = none .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getClasses(fth H is IL sorts SS . SSDS OPDS MAS EqS endfth) = none .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getClasses(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder omod H is IL sorts SS . SSDS CDS SCDS OPDS MDS MAS EqS RlS endom)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = CDS .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getClasses(
473b81d33893192056dde74b26b2467f983c102cChristian Maeder oth H is IL sorts SS . SSDS CDS SCDS OPDS MDS MAS EqS RlS endoth)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = CDS .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getSubclasses(unitError(QIL)) = none .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getSubclasses(mod H is IL sorts SS . SSDS OPDS MAS EqS RlS endm) = none .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getSubclasses(th H is IL sorts SS . SSDS OPDS MAS EqS RlS endth) = none .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getSubclasses(fmod H is IL sorts SS . SSDS OPDS MAS EqS endfm) = none .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getSubclasses(fth H is IL sorts SS . SSDS OPDS MAS EqS endfth) = none .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getSubclasses(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder omod H is IL sorts SS . SSDS CDS SCDS OPDS MDS MAS EqS RlS endom)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = SCDS .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getSubclasses(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder oth H is IL sorts SS . SSDS CDS SCDS OPDS MDS MAS EqS RlS endoth)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = SCDS .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getMsgs(unitError(QIL)) = none .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getMsgs(mod H is IL sorts SS . SSDS OPDS MAS EqS RlS endm) = none .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getMsgs(th H is IL sorts SS . SSDS OPDS MAS EqS RlS endth) = none .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getMsgs(fmod H is IL sorts SS . SSDS OPDS MAS EqS endfm) = none .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getMsgs(fth H is IL sorts SS . SSDS OPDS MAS EqS endfth) = none .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq getMsgs(omod H is IL sorts SS . SSDS CDS SCDS OPDS MDS MAS EqS RlS endom)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = MDS .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq getMsgs(oth H is IL sorts SS . SSDS CDS SCDS OPDS MDS MAS EqS RlS endoth)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = MDS .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** Set functions
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq setImports(unitError(QIL), IL) = unitError(QIL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq setImports(noModule, IL) = noModule .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq setImports(mod H is IL sorts SS . SSDS OPDS MAS EqS RlS endm, IL')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = mod H is IL' sorts SS . SSDS OPDS MAS EqS RlS endm .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq setImports(th H is IL sorts SS . SSDS OPDS MAS EqS RlS endth, IL')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = th H is IL' sorts SS . SSDS OPDS MAS EqS RlS endth .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq setImports(fmod H is IL sorts SS . SSDS OPDS MAS EqS endfm, IL')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = fmod H is IL' sorts SS . SSDS OPDS MAS EqS endfm .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq setImports(fth H is IL sorts SS . SSDS OPDS MAS EqS endfth, IL')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = fth H is IL' sorts SS . SSDS OPDS MAS EqS endfth .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq setImports(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder omod H is IL sorts SS . SSDS CDS SCDS OPDS MDS MAS EqS RlS endom, IL')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = omod H is IL' sorts SS . SSDS CDS SCDS OPDS MDS MAS EqS RlS endom .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq setImports(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder oth H is IL sorts SS . SSDS CDS SCDS OPDS MDS MAS EqS RlS endoth, IL')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = oth H is IL' sorts SS . SSDS CDS SCDS OPDS MDS MAS EqS RlS endoth .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq setOps(unitError(QIL), OPDS) = unitError(QIL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq setOps(noModule, OPDS) = noModule .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq setOps(U, opDeclError(QIL) OPDS) = unitError(QIL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq setOps(unitError(QIL), opDeclError(QIL') OPDS) = unitError(QIL QIL') .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq setOps(mod H is IL sorts SS . SSDS OPDS MAS EqS RlS endm, OPDS')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = mod H is IL sorts SS . SSDS OPDS' MAS EqS RlS endm .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq setOps(th MN is IL sorts SS . SSDS OPDS MAS EqS RlS endth, OPDS')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = th MN is IL sorts SS . SSDS OPDS' MAS EqS RlS endth .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq setOps(fmod H is IL sorts SS . SSDS OPDS MAS EqS endfm, OPDS')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = fmod H is IL sorts SS . SSDS OPDS' MAS EqS endfm .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq setOps(fth MN is IL sorts SS . SSDS OPDS MAS EqS endfth, OPDS')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = fth MN is IL sorts SS . SSDS OPDS' MAS EqS endfth .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq setOps(omod H is IL sorts SS . SSDS CDS SCDS OPDS MDS MAS EqS RlS endom,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder OPDS')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = omod H is IL sorts SS . SSDS CDS SCDS OPDS' MDS MAS EqS RlS endom .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq setOps(oth MN is IL sorts SS . SSDS CDS SCDS OPDS MDS MAS EqS RlS endoth,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder OPDS')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = oth MN is IL sorts SS . SSDS CDS SCDS OPDS' MDS MAS EqS RlS endoth .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq setSubsorts(unitError(QIL), SSDS) = unitError(QIL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq setSubsorts(mod H is IL sorts SS . SSDS OPDS MAS EqS RlS endm, SSDS')
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = mod H is IL sorts SS . SSDS' OPDS MAS EqS RlS endm .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq setSubsorts(th MN is IL sorts SS . SSDS OPDS MAS EqS RlS endth, SSDS')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = th MN is IL sorts SS . SSDS' OPDS MAS EqS RlS endth .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq setSubsorts(fmod H is IL sorts SS . SSDS OPDS MAS EqS endfm, SSDS')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = fmod H is IL sorts SS . SSDS' OPDS MAS EqS endfm .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq setSubsorts(fth MN is IL sorts SS . SSDS OPDS MAS EqS endfth, SSDS')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = fth MN is IL sorts SS . SSDS' OPDS MAS EqS endfth .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq setSubsorts(
473b81d33893192056dde74b26b2467f983c102cChristian Maeder omod H is IL sorts SS . SSDS CDS SCDS OPDS MDS MAS EqS RlS endom,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder SSDS')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = omod H is IL sorts SS . SSDS' CDS SCDS OPDS MDS MAS EqS RlS endom .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq setSubsorts(
473b81d33893192056dde74b26b2467f983c102cChristian Maeder oth MN is IL sorts SS . SSDS CDS SCDS OPDS MDS MAS EqS RlS endoth,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder SSDS')
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = oth MN is IL sorts SS . SSDS' CDS SCDS OPDS MDS MAS EqS RlS endoth .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq setMbs(unitError(QIL), membAxError(QIL') MAS) = unitError(QIL QIL') .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq setMbs(unitError(QIL), MAS) = unitError(QIL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq setMbs(U, membAxError(QIL) MAS) = unitError(QIL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq setMbs(mod H is IL sorts SS . SSDS OPDS MAS EqS RlS endm, MAS')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = mod H is IL sorts SS . SSDS OPDS MAS' EqS RlS endm .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq setMbs(th MN is IL sorts SS . SSDS OPDS MAS EqS RlS endth, MAS')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = th MN is IL sorts SS . SSDS OPDS MAS' EqS RlS endth .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq setMbs(fmod H is IL sorts SS . SSDS OPDS MAS EqS endfm, MAS')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = fmod H is IL sorts SS . SSDS OPDS MAS' EqS endfm .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq setMbs(fth MN is IL sorts SS . SSDS OPDS MAS EqS endfth, MAS')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = fth MN is IL sorts SS . SSDS OPDS MAS' EqS endfth .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq setMbs(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder omod H is IL sorts SS . SSDS CDS SCDS OPDS MDS MAS EqS RlS endom, MAS')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = omod H is IL sorts SS . SSDS CDS SCDS OPDS MDS MAS' EqS RlS endom .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq setMbs(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder oth MN is IL sorts SS . SSDS CDS SCDS OPDS MDS MAS EqS RlS endoth, MAS')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = oth MN is IL sorts SS . SSDS CDS SCDS OPDS MDS MAS' EqS RlS endoth .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq setEqs(unitError(QIL), EqS) = unitError(QIL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq setEqs(U, equationError(QIL) EqS?:[EquationSet]) = unitError(QIL) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq setEqs(unitError(QIL), equationError(QIL') EqS?:[EquationSet])
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = unitError(QIL QIL') .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq setEqs(mod H is IL sorts SS . SSDS OPDS MAS EqS RlS endm, EqS')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = mod H is IL sorts SS . SSDS OPDS MAS EqS' RlS endm .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq setEqs(th MN is IL sorts SS . SSDS OPDS MAS EqS RlS endth, EqS')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = th MN is IL sorts SS . SSDS OPDS MAS EqS' RlS endth .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq setEqs(fmod H is IL sorts SS . SSDS OPDS MAS EqS endfm, EqS')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = fmod H is IL sorts SS . SSDS OPDS MAS EqS' endfm .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq setEqs(fth MN is IL sorts SS . SSDS OPDS MAS EqS endfth, EqS')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = fth MN is IL sorts SS . SSDS OPDS MAS EqS' endfth .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq setEqs(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder omod H is IL sorts SS . SSDS CDS SCDS OPDS MDS MAS EqS RlS endom, EqS')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = omod H is IL sorts SS . SSDS CDS SCDS OPDS MDS MAS EqS' RlS endom .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq setEqs(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder oth MN is IL sorts SS . SSDS CDS SCDS OPDS MDS MAS EqS RlS endoth, EqS')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = oth MN is IL sorts SS . SSDS CDS SCDS OPDS MDS MAS EqS' RlS endoth .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var U? : [Module] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var RlS? : [RuleSet] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq setRls(unitError(QIL), RlS?) = unitError(QIL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq setRls(U?, ruleError(QIL) RlS?) = unitError(QIL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq setRls(mod H is IL sorts SS . SSDS OPDS MAS EqS RlS endm, RlS')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = mod H is IL sorts SS . SSDS OPDS MAS EqS RlS' endm .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq setRls(th MN is IL sorts SS . SSDS OPDS MAS EqS RlS endth, RlS')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = th MN is IL sorts SS . SSDS OPDS MAS EqS RlS' endth .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq setRls(fmod H is IL sorts SS . SSDS OPDS MAS EqS endfm, RlS)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = if RlS == none
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then fmod H is IL sorts SS . SSDS OPDS MAS EqS endfm
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else mod H is IL sorts SS . SSDS OPDS MAS EqS RlS endm
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq setRls(fth MN is IL sorts SS . SSDS OPDS MAS EqS endfth, RlS)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = if RlS == none
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then fth MN is IL sorts SS . SSDS OPDS MAS EqS endfth
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else th MN is IL sorts SS . SSDS OPDS MAS EqS RlS endth
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq setRls(omod H is IL sorts SS . SSDS CDS SCDS OPDS MDS MAS EqS RlS endom,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder RlS')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = omod H is IL sorts SS . SSDS CDS SCDS OPDS MDS MAS EqS RlS' endom .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq setRls(oth MN is IL sorts SS . SSDS CDS SCDS OPDS MDS MAS EqS RlS endoth,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder RlS')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = oth MN is IL sorts SS . SSDS CDS SCDS OPDS MDS MAS EqS RlS' endoth .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq setSorts(unitError(QIL), SS) = unitError(QIL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq setSorts(mod H is IL sorts SS . SSDS OPDS MAS EqS RlS endm, SS')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = mod H is IL sorts SS' . SSDS OPDS MAS EqS RlS endm .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq setSorts(th MN is IL sorts SS . SSDS OPDS MAS EqS RlS endth, SS')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = th MN is IL sorts SS' . SSDS OPDS MAS EqS RlS endth .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq setSorts(fmod H is IL sorts SS . SSDS OPDS MAS EqS endfm, SS')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = fmod H is IL sorts SS' . SSDS OPDS MAS EqS endfm .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq setSorts(fth MN is IL sorts SS . SSDS OPDS MAS EqS endfth, SS')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = fth MN is IL sorts SS' . SSDS OPDS MAS EqS endfth .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq setSorts(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder omod H is IL sorts SS . SSDS CDS SCDS OPDS MDS MAS EqS RlS endom, SS')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = omod H is IL sorts SS' . SSDS CDS SCDS OPDS MDS MAS EqS RlS endom .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq setSorts(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder oth MN is IL sorts SS . SSDS CDS SCDS OPDS MDS MAS EqS RlS endoth, SS')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = oth MN is IL sorts SS' . SSDS CDS SCDS OPDS MDS MAS EqS RlS endoth .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq setPars(mod ME is IL sorts SS . SSDS OPDS MAS EqS RlS endm, PDL)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if PDL == nil
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then mod ME is IL sorts SS . SSDS OPDS MAS EqS RlS endm
473b81d33893192056dde74b26b2467f983c102cChristian Maeder else mod ME{PDL} is IL sorts SS . SSDS OPDS MAS EqS RlS endm
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq setPars(mod ME{PDL} is IL sorts SS . SSDS OPDS MAS EqS RlS endm, PDL')
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = if PDL' == nil
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then mod ME is IL sorts SS . SSDS OPDS MAS EqS RlS endm
473b81d33893192056dde74b26b2467f983c102cChristian Maeder else mod ME{PDL'} is IL sorts SS . SSDS OPDS MAS EqS RlS endm
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq setPars(th MN is IL sorts SS . SSDS OPDS MAS EqS RlS endth, PDL)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = th MN is IL sorts SS . SSDS OPDS MAS EqS RlS endth .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq setPars(fmod ME is IL sorts SS . SSDS OPDS MAS EqS endfm, PDL)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = if PDL == nil
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then fmod ME is IL sorts SS . SSDS OPDS MAS EqS endfm
473b81d33893192056dde74b26b2467f983c102cChristian Maeder else fmod ME{PDL} is IL sorts SS . SSDS OPDS MAS EqS endfm
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq setPars(fmod ME{PDL} is IL sorts SS . SSDS OPDS MAS EqS endfm, PDL')
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = if PDL' == nil
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then fmod ME is IL sorts SS . SSDS OPDS MAS EqS endfm
473b81d33893192056dde74b26b2467f983c102cChristian Maeder else fmod ME{PDL'} is IL sorts SS . SSDS OPDS MAS EqS endfm
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq setPars(fth MN is IL sorts SS . SSDS OPDS MAS EqS endfth, PDL)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = fth MN is IL sorts SS . SSDS OPDS MAS EqS endfth .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq setPars(
473b81d33893192056dde74b26b2467f983c102cChristian Maeder omod ME is IL sorts SS . SSDS CDS SCDS OPDS MDS MAS EqS RlS endom,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder PDL)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if PDL == nil
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then omod ME is IL sorts SS . SSDS CDS SCDS OPDS MDS MAS EqS RlS endom
473b81d33893192056dde74b26b2467f983c102cChristian Maeder else omod ME{PDL} is
473b81d33893192056dde74b26b2467f983c102cChristian Maeder IL sorts SS . SSDS CDS SCDS OPDS MDS MAS EqS RlS
473b81d33893192056dde74b26b2467f983c102cChristian Maeder endom
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq setPars(
473b81d33893192056dde74b26b2467f983c102cChristian Maeder omod ME{PDL} is IL sorts SS . SSDS CDS SCDS OPDS MDS MAS EqS RlS endom,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder PDL')
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = if PDL' == nil
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then omod ME is IL sorts SS . SSDS CDS SCDS OPDS MDS MAS EqS RlS endom
473b81d33893192056dde74b26b2467f983c102cChristian Maeder else omod ME{PDL'} is
473b81d33893192056dde74b26b2467f983c102cChristian Maeder IL sorts SS . SSDS CDS SCDS OPDS MDS MAS EqS RlS
473b81d33893192056dde74b26b2467f983c102cChristian Maeder endom
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq setPars(
473b81d33893192056dde74b26b2467f983c102cChristian Maeder oth MN is IL sorts SS . SSDS CDS SCDS OPDS MDS MAS EqS RlS endoth,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder PDL)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = oth MN is IL sorts SS . SSDS CDS SCDS OPDS MDS MAS EqS RlS endoth .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq setClasses(fmod H is IL sorts SS . SSDS OPDS MAS EqS endfm, CDS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if CDS == none
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then fmod H is IL sorts SS . SSDS OPDS MAS EqS endfm
473b81d33893192056dde74b26b2467f983c102cChristian Maeder else omod H is IL sorts SS . SSDS CDS none OPDS none MAS EqS none endom
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq setClasses(fth H is IL sorts SS . SSDS OPDS MAS EqS endfth, CDS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if CDS == none
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then fth H is IL sorts SS . SSDS OPDS MAS EqS endfth
473b81d33893192056dde74b26b2467f983c102cChristian Maeder else oth H is IL sorts SS . SSDS CDS none OPDS none MAS EqS none endoth
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq setClasses(mod H is IL sorts SS . SSDS OPDS MAS EqS RlS endm, CDS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if CDS == none
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then mod H is IL sorts SS . SSDS OPDS MAS EqS RlS endm
473b81d33893192056dde74b26b2467f983c102cChristian Maeder else omod H is IL sorts SS . SSDS CDS none OPDS none MAS EqS RlS endom
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq setClasses(th H is IL sorts SS . SSDS OPDS MAS EqS RlS endth, CDS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if CDS == none
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then th H is IL sorts SS . SSDS OPDS MAS EqS RlS endth
473b81d33893192056dde74b26b2467f983c102cChristian Maeder else oth H is IL sorts SS . SSDS CDS none OPDS none MAS EqS RlS endoth
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq setClasses(
473b81d33893192056dde74b26b2467f983c102cChristian Maeder omod H is IL sorts SS . SSDS CDS SCDS OPDS MDS MAS EqS RlS endom,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder CDS')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = omod H is IL sorts SS . SSDS CDS' SCDS OPDS MDS MAS EqS RlS endom .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq setClasses(
473b81d33893192056dde74b26b2467f983c102cChristian Maeder oth H is IL sorts SS . SSDS CDS SCDS OPDS MDS MAS EqS RlS endoth,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder CDS')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = oth H is IL sorts SS . SSDS CDS' SCDS OPDS MDS MAS EqS RlS endoth .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq setClasses(M, CDS)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = unitError(header2QidList(getName(M)) 'not 'an 'object-oriented 'module)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq setSubclasses(fmod H is IL sorts SS . SSDS OPDS MAS EqS endfm, SCDS)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = if SCDS == none
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then fmod H is IL sorts SS . SSDS OPDS MAS EqS endfm
473b81d33893192056dde74b26b2467f983c102cChristian Maeder else omod H is IL sorts SS . SSDS none SCDS OPDS none MAS EqS none endom
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq setSubclasses(fth H is IL sorts SS . SSDS OPDS MAS EqS endfth, SCDS)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = if SCDS == none
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then fth H is IL sorts SS . SSDS OPDS MAS EqS endfth
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else oth H is IL sorts SS . SSDS none SCDS OPDS none MAS EqS none endoth
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq setSubclasses(mod H is IL sorts SS . SSDS OPDS MAS EqS RlS endm, SCDS)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = if SCDS == none
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then mod H is IL sorts SS . SSDS OPDS MAS EqS RlS endm
473b81d33893192056dde74b26b2467f983c102cChristian Maeder else omod H is IL sorts SS . SSDS none SCDS OPDS none MAS EqS RlS endom
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq setSubclasses(th H is IL sorts SS . SSDS OPDS MAS EqS RlS endth, SCDS)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = if SCDS == none
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then th H is IL sorts SS . SSDS OPDS MAS EqS RlS endth
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else oth H is IL sorts SS . SSDS none SCDS OPDS none MAS EqS RlS endoth
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq setSubclasses(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder omod H is IL sorts SS . SSDS CDS SCDS OPDS MDS MAS EqS RlS endom, SCDS')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = omod H is IL sorts SS . SSDS CDS SCDS' OPDS MDS MAS EqS RlS endom .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq setSubclasses(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder oth H is IL sorts SS . SSDS CDS SCDS OPDS MDS MAS EqS RlS endoth,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder SCDS')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = oth H is IL sorts SS . SSDS CDS SCDS' OPDS MDS MAS EqS RlS endoth .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq setSubclasses(M, SCDS)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = unitError(header2QidList(getName(M)) 'not 'an 'object-oriented 'module)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq setMsgs(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fmod H is IL sorts SS . SSDS OPDS MAS EqS endfm, MDS)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = if MDS == none
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then fmod H is IL sorts SS . SSDS OPDS MAS EqS endfm
473b81d33893192056dde74b26b2467f983c102cChristian Maeder else omod H is IL sorts SS . SSDS none none OPDS MDS MAS EqS none endom
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq setMsgs(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fth H is IL sorts SS . SSDS OPDS MAS EqS endfth, MDS)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = if MDS == none
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then fth H is IL sorts SS . SSDS OPDS MAS EqS endfth
473b81d33893192056dde74b26b2467f983c102cChristian Maeder else oth H is IL sorts SS . SSDS none none OPDS MDS MAS EqS none endoth
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq setMsgs(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder mod H is IL sorts SS . SSDS OPDS MAS EqS RlS endm, MDS)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = if MDS == none
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then mod H is IL sorts SS . SSDS OPDS MAS EqS RlS endm
473b81d33893192056dde74b26b2467f983c102cChristian Maeder else omod H is IL sorts SS . SSDS none none OPDS MDS MAS EqS RlS endom
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq setMsgs(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder th H is IL sorts SS . SSDS OPDS MAS EqS RlS endth, MDS)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = if MDS == none
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then th H is IL sorts SS . SSDS OPDS MAS EqS RlS endth
473b81d33893192056dde74b26b2467f983c102cChristian Maeder else oth H is IL sorts SS . SSDS none none OPDS MDS MAS EqS RlS endoth
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq setMsgs(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder omod H is IL sorts SS . SSDS CDS SCDS OPDS MDS MAS EqS RlS endom, MDS')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = omod H is IL sorts SS . SSDS CDS SCDS OPDS MDS' MAS EqS RlS endom .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq setMsgs(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder oth H is IL sorts SS . SSDS CDS SCDS OPDS MDS MAS EqS RlS endoth, MDS')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = oth H is IL sorts SS . SSDS CDS SCDS OPDS MDS' MAS EqS RlS endoth .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq setMsgs(M, MDS)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = unitError(header2QidList(getName(M)) 'not 'an 'object-oriented 'module)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq setName(mod ME is IL sorts SS . SSDS OPDS MAS EqS RlS endm, ME')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = mod ME' is IL sorts SS . SSDS OPDS MAS EqS RlS endm .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq setName(mod ME{PDL} is IL sorts SS . SSDS OPDS MAS EqS RlS endm, ME')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = mod ME'{PDL} is IL sorts SS . SSDS OPDS MAS EqS RlS endm .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq setName(fmod ME is IL sorts SS . SSDS OPDS MAS EqS endfm, ME')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = fmod ME' is IL sorts SS . SSDS OPDS MAS EqS endfm .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq setName(fmod ME{PDL} is IL sorts SS . SSDS OPDS MAS EqS endfm, ME')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = fmod ME'{PDL} is IL sorts SS . SSDS OPDS MAS EqS endfm .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq setName(fth MN is IL sorts SS . SSDS OPDS MAS EqS endfth, MN')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = fth MN' is IL sorts SS . SSDS OPDS MAS EqS endfth .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq setName(th MN is IL sorts SS . SSDS OPDS MAS EqS RlS endth, MN')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = th MN' is IL sorts SS . SSDS OPDS MAS EqS RlS endth .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq setName(
473b81d33893192056dde74b26b2467f983c102cChristian Maeder omod ME is IL sorts SS . SSDS CDS SCDS OPDS MDS MAS EqS RlS endom,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ME')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = omod ME' is IL sorts SS . SSDS CDS SCDS OPDS MDS MAS EqS RlS endom .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq setName(
473b81d33893192056dde74b26b2467f983c102cChristian Maeder omod ME{PDL} is IL sorts SS . SSDS CDS SCDS OPDS MDS MAS EqS RlS endom,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ME')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = omod ME'{PDL} is IL sorts SS . SSDS CDS SCDS OPDS MDS MAS EqS RlS endom .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq setName(
473b81d33893192056dde74b26b2467f983c102cChristian Maeder oth MN is IL sorts SS . SSDS CDS SCDS OPDS MDS MAS EqS RlS endoth,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder MN')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = oth MN' is IL sorts SS . SSDS CDS SCDS OPDS MDS MAS EqS RlS endoth .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq setName(noModule, ME) = noModule .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq setName(unitError(QIL), ME) = unitError(QIL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq setName(mod nullHeader is IL sorts SS . SSDS OPDS MAS EqS RlS endm, ME')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = mod ME' is IL sorts SS . SSDS OPDS MAS EqS RlS endm .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq setName(fmod nullHeader is IL sorts SS . SSDS OPDS MAS EqS endfm, ME')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = fmod ME' is IL sorts SS . SSDS OPDS MAS EqS endfm .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq setName(fth nullHeader is IL sorts SS . SSDS OPDS MAS EqS endfth, MN)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = fth MN is IL sorts SS . SSDS OPDS MAS EqS endfth .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq setName(th nullHeader is IL sorts SS . SSDS OPDS MAS EqS RlS endth, MN)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = th MN is IL sorts SS . SSDS OPDS MAS EqS RlS endth .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq setName(
473b81d33893192056dde74b26b2467f983c102cChristian Maeder omod nullHeader is
473b81d33893192056dde74b26b2467f983c102cChristian Maeder IL sorts SS . SSDS CDS SCDS OPDS MDS MAS EqS RlS
473b81d33893192056dde74b26b2467f983c102cChristian Maeder endom,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ME')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = omod ME' is IL sorts SS . SSDS CDS SCDS OPDS MDS MAS EqS RlS endom .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq setName(
473b81d33893192056dde74b26b2467f983c102cChristian Maeder oth nullHeader is
473b81d33893192056dde74b26b2467f983c102cChristian Maeder IL sorts SS . SSDS CDS SCDS OPDS MDS MAS EqS RlS endoth,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder MN)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = oth MN is IL sorts SS . SSDS CDS SCDS OPDS MDS MAS EqS RlS endoth .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq setName(noModule, ME) = noModule .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq setName(unitError(QIL), ME) = unitError(QIL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** Add functions
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq addSorts(SS, U) = setSorts(U, (SS ; getSorts(U))) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq addSorts(SS, unitError(QIL)) = unitError(QIL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq addSubsorts(SSDS, U) = setSubsorts(U, (SSDS getSubsorts(U))) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq addSubsorts(subsortDeclError(QIL), U) = unitError(QIL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq addSubsorts(SSDS, unitError(QIL)) = unitError(QIL) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq addOps(OPDS, U) = setOps(U, (OPDS getOps(U))) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq addOps(OPDS?, unitError(QIL)) = unitError(QIL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq addOps(OPDS?, U) = U [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq addMbs(MAS, U) = setMbs(U, (MAS getMbs(U))) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq addMbs(MAS, unitError(QIL)) = unitError(QIL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq addEqs(EqS, U) = setEqs(U, (EqS getEqs(U))) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq addEqs(EqS, unitError(QIL)) = unitError(QIL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq addRls(RlS, U) = setRls(U, (RlS getRls(U))) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq addRls(RlS, unitError(QIL)) = unitError(QIL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq addRls(ruleError(QIL), U) = unitError(QIL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq addImports(IL, U) = setImports(U, (getImports(U) IL)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq addImports(IL, unitError(QIL)) = unitError(QIL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq addClasses(CDS, U) = setClasses(U, (getClasses(U) CDS)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq addClasses(CDS, unitError(QIL)) = unitError(QIL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq addSubclasses(SCDS, U) = setSubclasses(U, (getSubclasses(U) SCDS)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq addSubclasses(SCDS, unitError(QIL)) = unitError(QIL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq addMsgs(MDS, U) = setMsgs(U, (getMsgs(U) MDS)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq addMsgs(MDS, unitError(QIL)) = unitError(QIL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** Creation of empty units
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq emptyFModule(ME)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = fmod header2Qid(ME) is nil sorts none . none none none none endfm .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq emptyFModule
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = fmod nullHeader is nil sorts none . none none none none endfm .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq emptySModule
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = mod nullHeader is nil sorts none . none none none none none endm .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq emptyOModule
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = omod nullHeader is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder nil sorts none . none none none none none none none none
473b81d33893192056dde74b26b2467f983c102cChristian Maeder endom .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq emptyFTheory
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = fth nullHeader is nil sorts none . none none none none endfth .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq emptySTheory
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = th nullHeader is nil sorts none . none none none none none endth .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq emptyOTheory
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = oth nullHeader is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder nil sorts none . none none none none none none none none
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder endoth .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** \texttt{empty} returns an empty unit of the same type of the one given as
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** argument.
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq empty(mod H is IL sorts SS . SSDS OPDS MAS EqS RlS endm)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (mod H is nil sorts none . none none none none none endm) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq empty(th MN is IL sorts SS . SSDS OPDS MAS EqS RlS endth)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (th MN is nil sorts none . none none none none none endth) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq empty(fmod H is IL sorts SS . SSDS OPDS MAS EqS endfm)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (fmod H is nil sorts none . none none none none endfm) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq empty(fth MN is IL sorts SS . SSDS OPDS MAS EqS endfth)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (fth MN is nil sorts none . none none none none endfth) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq empty(omod H is IL sorts SS . SSDS CDS SCDS OPDS MDS MAS EqS RlS endom)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = (omod H is
473b81d33893192056dde74b26b2467f983c102cChristian Maeder nil sorts none . none none none none none none none none
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder endom) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq empty(oth MN is IL sorts SS . SSDS CDS SCDS OPDS MDS MAS EqS RlS endoth)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = (oth MN is
473b81d33893192056dde74b26b2467f983c102cChristian Maeder nil sorts none . none none none none none none none none
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder endoth) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** In the following \texttt{addDecls} function, the declarations of the unit
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** given as second argument are added to the unit given as first argument.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq addDecls(noModule, U) = U .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq addDecls(U, noModule) = U .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq addDecls(unitError(QIL), U) = unitError(QIL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq addDecls(U, unitError(QIL)) = unitError(QIL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq addDecls(U, U')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = addImports(getImports(U'),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder addSorts(getSorts(U'),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder addSubsorts(getSubsorts(U'),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder addOps(getOps(U'),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder addMbs(getMbs(U'),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder addEqs(getEqs(U'),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if U' :: FModule or U' :: FTheory
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then U
473b81d33893192056dde74b26b2467f983c102cChristian Maeder else addRls(getRls(U'),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if U' :: SModule or U' :: STheory
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then U
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else addClasses(getClasses(U'),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder addSubclasses(getSubclasses(U'),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder addMsgs(getMsgs(U'), U)))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi))))))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op removeNonExecs : Module -> Module .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op removeNonExecs : MembAxSet -> MembAxSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op removeNonExecs : EquationSet -> EquationSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op removeNonExecs : RuleSet -> RuleSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq removeNonExecs(M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = setRls(M'', removeNonExecs(getRls(M)))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if M' := setMbs(M, removeNonExecs(getMbs(M)))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder /\ M'' := setEqs(M', removeNonExecs(getEqs(M))) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq removeNonExecs(unitError(QIL)) = unitError(QIL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq removeNonExecs(mb T : S [nonexec AtS] . MbS) = removeNonExecs(MbS) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq removeNonExecs(cmb T : S if Cd [nonexec AtS] . MbS) = removeNonExecs(MbS) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq removeNonExecs(MbS) = MbS [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq removeNonExecs(eq T = T' [nonexec AtS] . EqS) = removeNonExecs(EqS) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq removeNonExecs(ceq T = T' if Cd [nonexec AtS] . EqS) = removeNonExecs(EqS) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq removeNonExecs(EqS) = EqS [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq removeNonExecs(rl T => T' [nonexec AtS] . RlS) = removeNonExecs(RlS) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq removeNonExecs(crl T => T' if Cd [nonexec AtS] . RlS) = removeNonExecs(RlS) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq removeNonExecs(RlS) = RlS [owise] .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder *** moreGeneralEqs ******************************
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder op moreGeneralEqs : Module -> Module .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder op moreGeneralRls : Module -> Module .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder op $moreGeneralEqs : Module EquationSet EquationSet -> Module .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder op $moreGeneralRls : Module RuleSet RuleSet -> Module .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder op $moreGeneral : Module Equation Equation -> Bool .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder op $moreGeneral : Module Rule Rule -> Bool .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder op $moreGeneral : Module Condition Condition -> Bool .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq moreGeneralEqs(M) = $moreGeneralEqs(M, getEqs(M), getEqs(M)) .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq moreGeneralRls(M) = $moreGeneralRls(M, getRls(M), getRls(M)) .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ceq $moreGeneralEqs(M, Eq EqS, Eq Eq' EqS')
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder = $moreGeneralEqs(M, EqS, Eq' EqS')
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder if $moreGeneral(M, Eq', Eq) .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq $moreGeneralEqs(M, EqS, EqS') = setEqs(M, EqS') [owise] .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ceq $moreGeneralRls(M, Rl RlS, Rl Rl' RlS')
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder = $moreGeneralRls(M, RlS, Rl' RlS')
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder if $moreGeneral(M, Rl', Rl) .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq $moreGeneralRls(M, RlS, RlS') = setRls(M, RlS') [owise] .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq $moreGeneral(M, Eq, Eq')
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder = metaMatch(M, lhs(Eq), lhs(Eq'), nil, 0) =/= noMatch
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder and-then
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder metaMatch(M, rhs(Eq), rhs(Eq'), nil, 0) =/= noMatch
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder and-then
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder $moreGeneral(M, cond(Eq), cond(Eq')) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq $moreGeneral(M, Rl, Rl')
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder = metaMatch(M, lhs(Rl), lhs(Rl'), nil, 0) =/= noMatch
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder and-then
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder metaMatch(M, rhs(Rl), rhs(Rl'), nil, 0) =/= noMatch
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder and-then
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder $moreGeneral(M, cond(Rl), cond(Rl')) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq $moreGeneral(M, T1 = T1' /\ Cond1, T2 = T2' /\ Cond2)
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder = metaMatch(M, T1, T2, nil, 0) =/= noMatch
473b81d33893192056dde74b26b2467f983c102cChristian Maeder and-then
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder metaMatch(M, T1', T2', nil, 0) =/= noMatch
473b81d33893192056dde74b26b2467f983c102cChristian Maeder and-then
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder $moreGeneral(M, Cond1, Cond2) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq $moreGeneral(M, T1 := T1' /\ Cond1, T2 := T2' /\ Cond2)
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder = metaMatch(M, T1, T2, nil, 0) =/= noMatch
473b81d33893192056dde74b26b2467f983c102cChristian Maeder and-then
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder metaMatch(M, T1', T2', nil, 0) =/= noMatch
473b81d33893192056dde74b26b2467f983c102cChristian Maeder and-then
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder $moreGeneral(M, Cond1, Cond2) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq $moreGeneral(M, T1 => T1' /\ Cond1, T2 => T2' /\ Cond2)
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder = metaMatch(M, T1, T2, nil, 0) =/= noMatch
473b81d33893192056dde74b26b2467f983c102cChristian Maeder and-then
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder metaMatch(M, T1', T2', nil, 0) =/= noMatch
473b81d33893192056dde74b26b2467f983c102cChristian Maeder and-then
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder $moreGeneral(M, Cond1, Cond2) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq $moreGeneral(M, T1 : S /\ Cond1, T2 : S /\ Cond2)
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder = metaMatch(M, T1, T2, nil, 0) =/= noMatch
473b81d33893192056dde74b26b2467f983c102cChristian Maeder and-then
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder $moreGeneral(M, Cond1, Cond2) .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq $moreGeneral(M, nil, nil) = true .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq $moreGeneral(M, Cond1, Cond2) = false [owise] .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder op rmVariantAttrs : Module -> Module .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder op $rmVariants : EquationSet -> EquationSet .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder op $rmVariants : RuleSet -> RuleSet .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder op $rmVariants : MembAxSet -> MembAxSet .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq rmVariantAttrs(M) = setRls(setEqs(setMbs(M, $rmVariants(getMbs(M))), $rmVariants(getEqs(M))), $rmVariants(getRls(M))) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq $rmVariants(eq T = T' [variant AtS] . EqS) = (eq T = T' [metadata("variant") AtS] .) $rmVariants(EqS) .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq $rmVariants(ceq T = T' if Cond [variant AtS] . EqS) = (ceq T = T' if Cond [metadata("variant") AtS] .) $rmVariants(EqS) .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq $rmVariants(EqS) = EqS [owise] .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq $rmVariants(rl T => T' [variant AtS] . RlS) = (rl T => T' [metadata("variant") AtS] .) $rmVariants(RlS) .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq $rmVariants(crl T => T' if Cond [variant AtS] . RlS) = (crl T => T' if Cond [metadata("variant") AtS] .) $rmVariants(RlS) .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq $rmVariants(RlS) = RlS [owise] .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq $rmVariants(mb T : S [variant AtS] . MbS) = (mb T : S [metadata("variant") AtS] .) $rmVariants(MbS) .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq $rmVariants(cmb T : S if Cond [variant AtS] . MbS) = (cmb T : S if Cond [metadata("variant") AtS] .) $rmVariants(MbS) .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq $rmVariants(MbS) = MbS [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederendfm
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** To parse some input using the built-in function \texttt{metaParse}, we
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** need to give the metarepresentation of the signature in which the input is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** going to be parsed.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** But we do not need to give the complete metarepresentation of such a
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** module. In modules including \texttt{META-LEVEL} it is possible to define
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** terms of sort \texttt{Module} that import built-in modules or any module
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** introduced at the ``object level'' of Core Maude. In this way, it is
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** possible to get the equivalent effect of having the explicit
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** metarepresentation of a module by declaring a constant and adding an
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** equation identifying such a constant with the metarepresentation of an
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** extended module that imports the original module at the object level.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** The declaration of constructors for bubble sorts at the object level is
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** not supported in the current version of Core Maude. The \texttt{special}
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** attributes linking the constructors for the bubble sorts to the built-in
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** ones are only supported at the metalevel, that is, the declarations of the
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** constructor operators for bubble sorts have to be given in the
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** metarepresentation of a module.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** To allow the greatest generality and flexibility in future extensions of
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** Full Maude, we have declared its signature as a module
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** \texttt{FULL-MAUDE-SIGN}. Then, in the following module
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** \texttt{META-FULL-MAUDE-SIGN} we declare a constant \texttt{GRAMMAR} of
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** sort \texttt{FModule}, and we give an equation identifying such constant
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** with the metarepresentation of a module \texttt{GRAMMAR} in which there is
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** a declaration importing \texttt{FULL-MAUDE-SIGN}. Declarations for the
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** constructors of the bubble sorts are also included in this module. Note
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** that the bubble sorts \texttt{@Token@}, \texttt{@Bubble@},
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** \texttt{@SortToken@}, and \texttt{@NeTokenList@} are declared in the
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** module \texttt{SIGN\&VIEW-EXPR}, which is imported by
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** \texttt{FULL-MAUDE-SIGN}. These sorts are used in the declarations
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** describing the syntax of the system.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*******************************************************************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederfmod META-FULL-MAUDE-SIGN is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder including META-LEVEL .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder including UNIT .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op BUBBLES : -> FModule .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op GRAMMAR : -> FModule [memo] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq BUBBLES
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (fmod 'GRAMMAR is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder including 'QID-LIST .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder sorts none .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder none
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op 'token : 'Qid -> '@Token@
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [special(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder (id-hook('Bubble, '1 '1)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op-hook('qidSymbol, '<Qids>, nil, 'Qid)))] .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op 'viewToken : 'Qid -> '@ViewToken@
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [special(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder (id-hook('Bubble, '1 '1)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op-hook('qidSymbol, '<Qids>, nil, 'Qid)))] .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op 'sortToken : 'Qid -> '@SortToken@
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [special(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder (id-hook('Bubble, '1 '1)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op-hook('qidSymbol, '<Qids>, nil, 'Qid)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder id-hook('Exclude, '`[ '`] '< 'to '`, '. '`( '`) '`{ '`} ':
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder 'ditto 'precedence 'prec 'gather
473b81d33893192056dde74b26b2467f983c102cChristian Maeder 'assoc 'associative 'comm 'commutative
473b81d33893192056dde74b26b2467f983c102cChristian Maeder 'ctor 'constructor 'id: 'strat 'strategy
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder 'poly 'memo 'memoization 'iter 'frozen
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder 'config 'object 'msg 'metadata 'nonexec 'variant)))] .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op 'neTokenList : 'QidList -> '@NeTokenList@
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [special(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder (id-hook('Bubble, '1 '-1 '`( '`))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op-hook('qidListSymbol, '__, 'QidList 'QidList, 'QidList)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op-hook('qidSymbol, '<Qids>, nil, 'Qid)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder id-hook('Exclude, '.)))] .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op 'bubble : 'QidList -> '@Bubble@
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [special(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder (id-hook('Bubble, '1 '-1 '`( '`))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op-hook('qidListSymbol, '__, 'QidList 'QidList, 'QidList)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op-hook('qidSymbol, '<Qids>, nil, 'Qid)))] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder none
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder none
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder endfm) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq GRAMMAR = addImports((including 'FULL-MAUDE-SIGN .), BUBBLES) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederendfm
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*******************************************************************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** The \texttt{GRAMMAR} module will be used in calls to the \texttt{metaParse}
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** function in order to get the input parsed in this signature. Note that
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** this module is not the data type in which we shall represent the inputs.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** From the call to \texttt{metaParse} we shall get a term representing the
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** parse tree of the input. This term will then be transformed into terms of
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** other appropriate data types if necessary.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** Future extensions to Full Maude will require extending the signature as
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** well. The addition of new commands, new module expressions, or additions
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** of any other kind will require adding new declarations to the present Full
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** Maude signature and defining the corresponding extensions to the data
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** types and functions to deal with the new cases introduced by the
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** extensions.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*******************************************************************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder***
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** The Abstract Data Type \texttt{View}
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder***
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** In this section we present the data type \texttt{View} for views.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** Basically, the data elements of sort \texttt{View} are composed by the
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** name of the view, the names of the source and target units, and a set of
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** maps representing the maps asserting how the given target unit is claimed
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** to satisfy the source theory (see Section~\ref{Views}).
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** Internally, renaming maps are considered to be a particular case of view
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** maps. The sort \texttt{ViewMap} is declared as a supersort of
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \texttt{Map}. The only kind of maps in sort \texttt{ViewMap} not in sort
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \texttt{Map} are maps of operators going to derived operators. We start
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** introducing the declarations for renaming maps and sTS of renaming maps
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** in Section~\ref{renaming-maps}, we then introduce view maps and sTS of
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** view maps in Section~\ref{view-maps}, and finally we introduce the sort
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** \texttt{View}, its constructor, and some operations on it in
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** Section~\ref{viewADT}.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder***
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** View Maps
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder***
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** In addition to the maps of sort \texttt{Renaming},
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** in views there can also be maps from operators to derived
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** operators, that is, terms with variables (see Section~\ref{Views}). Maps
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** of this kind are given with the constructor \texttt{termMap}, which, in
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** addition to the source and target terms, takes the set of variable
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** declarations for the variables used in the map. The source term must be of
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** the form $\texttt{F(X}_1\texttt{,}\ldots,\texttt{X}_n\texttt{)}$, where
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \texttt{F} is an operator name declared with $n$ arguments of sorts in the
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** connected components of the variables $\texttt{X}_1\ldots\texttt{X}_n$,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** respectively. We will see in Section~\ref{view-processing} how in the
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** initial processing of a view the variables declared in it are associated
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** to each of the maps in which they are used.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*******************************************************************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederfmod VIEW-MAP is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr FMAP .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr EXT-DECL .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op termMap : Term Term -> ViewMap .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder sorts ViewMap Set{ViewMap} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder subsorts Renaming < ViewMap .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder subsorts ViewMap RenamingSet < Set{ViewMap} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op _`,_ : Set{ViewMap} Set{ViewMap} -> Set{ViewMap} [ditto] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq (VMAP, none) = VMAP .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq (VMAP, VMAP) = VMAP .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var MAP : Renaming .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var VMAP : ViewMap .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var VMAPS : Set{ViewMap} .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder vars T T' : Term .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars S S' : Sort .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** As for sTS of maps, \texttt{SortRenamingSet} returns the subset of sort
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** maps in a set of view maps.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op sortMaps : Set{ViewMap} -> RenamingSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq sortMaps((sort S to S')) = (sort S to S') .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq sortMaps(((sort S to S'), VMAPS)) = ((sort S to S'), sortMaps(VMAPS)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq sortMaps(VMAP) = none [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq sortMaps((VMAP, VMAPS)) = none [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq sortMaps(none) = none .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederendfm
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*******************************************************************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder***
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** Views
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder***
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** The \texttt{View} sort is introduced in the following module
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \texttt{VIEW}. In addition to the constructor for views (\texttt{view}),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** selector functions are added for each of the components of a
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** view (\texttt{name}, \texttt{source}, \texttt{target}, and
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** \texttt{mapSet}), and a constant \texttt{emptyView}, which is identified
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** in an equation with the empty view, is defined.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** Although the declaration of the constructor for views includes an argument
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** for the list of parameters, parameterized views are not handled yet, so at
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** present this argument must be set to the \texttt{nil}.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*******************************************************************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederfmod VIEW is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr META-MODULE .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr VIEW-EXPR .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr VIEW-MAP .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder sorts ViewHeader . ---- View .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder subsort ViewExp Header < ViewHeader .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op view_from_to_is_endv :
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ViewHeader ModuleExpression ModuleExpression Set{ViewMap} -> View
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [ctor format (nir! o r! o r! o r! o r! o)] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op null : -> View [ctor] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op viewError : QidList -> [View] [ctor format (r o)] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq VE{(nil).ParameterDeclList} = VE .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var QI : Qid .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars VE VE' : ViewExp .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars PDL PDL' : ParameterDeclList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars ME ME' ME'' : ModuleExpression .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars VMAPS VMAPS' : Set{ViewMap} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var QIL : QidList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var VH : ViewHeader .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op name : View -> ViewExp .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op getPars : [View] -> ParameterDeclList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op source : View -> ModuleExpression .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op target : View -> ModuleExpression .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op mapSet : View -> RenamingSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq name(view VE from ME to ME' is VMAPS endv) = VE .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq name(view VE{PDL} from ME to ME' is VMAPS endv) = VE .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getPars(view VE from ME to ME' is VMAPS endv) = nil .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getPars(view VE{PDL} from ME to ME' is VMAPS endv) = PDL .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getPars(viewError(QIL)) = nil .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq source(view VH from ME to ME' is VMAPS endv) = ME .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq target(view VH from ME to ME' is VMAPS endv) = ME' .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq mapSet(view VH from ME to ME' is VMAPS endv) = VMAPS .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op setName : View ViewExp ~> View .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op setPars : View ParameterDeclList ~> View .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op setTarget : View ModuleExpression ~> View .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op sTSource : View ModuleExpression ~> View .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op setMaps : View RenamingSet ~> View .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq setName(view VE from ME to ME' is VMAPS endv, VE')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = view VE' from ME to ME' is VMAPS endv .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq setName(view VE{PDL} from ME to ME' is VMAPS endv, VE')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = view VE'{PDL} from ME to ME' is VMAPS endv .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq setName(viewError(QIL), VE) = viewError(QIL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq setPars(view VE from ME to ME' is VMAPS endv, PDL)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = view VE{PDL} from ME to ME' is VMAPS endv .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq setPars(view VE{PDL} from ME to ME' is VMAPS endv, PDL')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = view VE{PDL'} from ME to ME' is VMAPS endv .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq setPars(viewError(QIL), PDL) = viewError(QIL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq sTSource(view VH from ME to ME' is VMAPS endv, ME'')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = view VH from ME'' to ME' is VMAPS endv .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq sTSource(viewError(QIL), ME) = viewError(QIL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq setTarget(view VH from ME to ME' is VMAPS endv, ME'')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = view VH from ME to ME'' is VMAPS endv .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq setTarget(viewError(QIL), ME) = viewError(QIL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq setMaps(view VH from ME to ME' is VMAPS endv, VMAPS')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = view VH from ME to ME' is VMAPS' endv .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq setMaps(viewError(QIL), VMAPS) = viewError(QIL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op emptyView : Qid ModuleExpression ModuleExpression -> View .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq emptyView(QI, ME, ME') = view QI from ME to ME' is none endv .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederendfm
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*******************************************************************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder***
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** The Abstract Data Type \texttt{Database}
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder***
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** In this section we present the data type \texttt{Database}, which will be
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** used to store information about the units and views in the system. Before
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** discussing this data type in Section~\ref{databaseADT}, we present the
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** predefined units added in Full Maude to those already available in Core
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** Maude.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder***
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** Non-Built-In Predefined Modules
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder***
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** As we shall see in the following section, except for the
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \texttt{LOOP-MODE} module, all the predefined modules that are available
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** in Core Maude are also available in Full Maude. In addition to these Core
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** Maude predefined modules, in Full Maude there are some additional
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** predefined units. In the present system, the only units with which the
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** database is initialized are the functional theory \texttt{TRIV}, the
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** module \texttt{CONFIGURATION}, and the module \texttt{UP}, which will be
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** used to evaluate the \texttt{up} functions. We shall see in
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** Section~\ref{main-module} how new predefined modules can be added to the
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** initial database.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*******************************************************************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederfmod PREDEF-UNITS is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr UNIT .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** The following module \texttt{UP} contains the necessary declarations to
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** be able to parse the \texttt{up} functions presented in
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** Section~\ref{structured-specifications}. We shall see in
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** Section~\ref{evaluation} how a declaration importing the following module
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \texttt{UP} is added to all the modules importing the predefined module
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \texttt{META-LEVEL}. With this declaration, it is possible to parse the
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** \texttt{up} commands in the bubbles of such modules or in commands being
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** evaluated in such modules. We shall see in Section~\ref{bubble-parsing}
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** how these commands are then evaluated.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op #UP# : -> FModule [memo] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq #UP#
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (fmod '#UP# is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder including 'QID-LIST .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder including 'MOD-EXPRS .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder sorts none .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder none
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op 'upTerm : '@ModExp@ '@Bubble@ -> 'Term [none] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op 'upModule : '@ModExp@ -> 'Module [none] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op '`[_`] : '@Token@ -> 'Module [none] .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op 'token : 'Qid -> '@Token@
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [special(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder (id-hook('Bubble, '1 '1)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op-hook('qidSymbol, '<Qids>, nil, 'Qid)))] .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op 'viewToken : 'Qid -> '@ViewToken@
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [special(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder (id-hook('Bubble, '1 '1)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op-hook('qidSymbol, '<Qids>, nil, 'Qid)))] .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op 'sortToken : 'Qid -> '@SortToken@
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [special(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder (id-hook('Bubble, '1 '1)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op-hook('qidSymbol, '<Qids>, nil, 'Qid)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder id-hook('Exclude, '`[ '`] '< 'to '`, '. '`( '`) '`{ '`} ':
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder 'ditto 'precedence 'prec 'gather
473b81d33893192056dde74b26b2467f983c102cChristian Maeder 'assoc 'associative 'comm 'commutative
473b81d33893192056dde74b26b2467f983c102cChristian Maeder 'ctor 'constructor 'id: 'strat 'strategy
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder 'poly 'memo 'memoization 'iter 'frozen
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder 'config 'object 'msg 'metadata 'nonexec 'variant)))] .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op 'neTokenList : 'QidList -> '@NeTokenList@
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [special(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder (id-hook('Bubble, '1 '-1 '`( '`))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op-hook('qidListSymbol, '__, 'QidList 'QidList, 'QidList)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op-hook('qidSymbol, '<Qids>, nil, 'Qid)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder id-hook('Exclude, '.)))] .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op 'bubble : 'QidList -> '@Bubble@
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [special(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder (id-hook('Bubble, '1 '-1 '`( '`))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op-hook('qidListSymbol, '__, 'QidList 'QidList, 'QidList)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op-hook('qidSymbol, '<Qids>, nil, 'Qid)))] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder none
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder none
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder endfm) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederendfm
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*******************************************************************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder***
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** 7 The Evaluation of Views
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder***
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** Before being entered into the database, besides containing bubbles, views
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** have a somewhat different structure from that of the views given in
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** Section~\ref{viewADT}. We introduce in the following module a sort
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \texttt{PreView} with constructor \texttt{view}, which is declared as the
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** constructor for views of sort \texttt{View}, but with an additional
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** argument, namely, a set of variable declarations to hold the declarations
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** of variables in the view. During the processing of views (see
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** Section~\ref{view-processing}), which takes place once the parsing process
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** has concluded, these variables are associated with the corresponding maps
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** where they are used, generating a term of sort \texttt{View}.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** We start by introducing in the following module \texttt{PRE-VIEW-MAP} the
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** sorts \texttt{TermPreMap}, \texttt{PreViewMap}, and
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \texttt{Set{PreViewMap}}. A preview map is a view map with bubbles. Note
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** that the bubbles can only appear in term maps. Elements of sort
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \texttt{TermPreMap} are built with the constructor \texttt{preTermMap},
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** which takes two terms of sort \texttt{Term}, that is, two bubbles. In the
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** processing of views (see Section~\ref{view-processing}), elements of sort
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** \texttt{PreTermMap} will be converted into elements of sort
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** \texttt{TermMap} by parsing the bubbles in them, and by associating to
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** them the variables in them defined in the view in which the maps appear.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*******************************************************************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederfmod PRE-VIEW-MAP is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr VIEW-MAP .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder sort PreViewMap .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder subsorts Renaming < PreViewMap .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op preTermMap : Term Term -> PreViewMap .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder sort Set{PreViewMap} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder subsorts PreViewMap RenamingSet < Set{PreViewMap} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op _`,_ : Set{PreViewMap} Set{PreViewMap} -> Set{PreViewMap} [ditto] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq (PVMAPS, none) = PVMAPS .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var PVMAP : PreViewMap .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var PVMAPS : Set{PreViewMap} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars S S' : Sort .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** Given a set of maps, the function \texttt{sortMaps} returns the subset
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** of sort maps in it.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op sortMaps : Set{PreViewMap} -> RenamingSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq sortMaps(((sort S to S'), PVMAPS)) = ((sort S to S'), sortMaps(PVMAPS)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq sortMaps((PVMAP, PVMAPS)) = none [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq sortMaps(none) = none .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederendfm
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*******************************************************************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederfmod PRE-VIEW is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr VIEW .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr PRE-VIEW-MAP .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder sort PreView .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op preview_from_to_is__endpv : ViewHeader ModuleExpression
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ModuleExpression OpDeclSet Set{PreViewMap} -> PreView
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [ctor format (nir! o r! o r! o r! o o r! o)] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op null : -> PreView .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op name : PreView -> ViewExp .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op getPars : PreView -> ParameterDeclList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op source : PreView -> ModuleExpression .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op target : PreView -> ModuleExpression .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op vars : PreView -> OpDeclSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op mapSet : PreView -> Set{PreViewMap} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var QI : Qid .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars ME ME' : ModuleExpression .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var VE : ViewExp .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var VH : ViewHeader .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars PDL PDL' : ParameterDeclList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars VDS VDS' : OpDeclSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars PVMAPS PVMAPS' : Set{PreViewMap} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq name(preview VE from ME to ME' is VDS PVMAPS endpv) = VE .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq name(preview VE{PDL} from ME to ME' is VDS PVMAPS endpv) = VE .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getPars(preview VE from ME to ME' is VDS PVMAPS endpv) = nil .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getPars(preview VE{PDL} from ME to ME' is VDS PVMAPS endpv) = PDL .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq source(preview VH from ME to ME' is VDS PVMAPS endpv) = ME .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq target(preview VH from ME to ME' is VDS PVMAPS endpv) = ME' .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq vars(preview VH from ME to ME' is VDS PVMAPS endpv) = VDS .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq mapSet(preview VH from ME to ME' is VDS PVMAPS endpv) = PVMAPS .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** The following functions can be used to add new declarations to the set of
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** declarations already in a preview.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op addMaps : Set{PreViewMap} PreView -> PreView .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op addVars : OpDeclSet PreView -> PreView .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq addMaps(PVMAPS, preview VH from ME to ME' is VDS PVMAPS' endpv)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = preview VH from ME to ME' is VDS (PVMAPS, PVMAPS') endpv .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq addVars(VDS, preview VH from ME to ME' is VDS' PVMAPS' endpv)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = preview VH from ME to ME' is (VDS VDS') PVMAPS' endpv .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op setPars : PreView ParameterDeclList -> PreView .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq setPars(preview VE from ME to ME' is VDS PVMAPS endpv, PDL)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = preview VE{PDL} from ME to ME' is VDS PVMAPS endpv .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq setPars(preview VE{PDL} from ME to ME' is VDS PVMAPS endpv, PDL')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = preview VE{PDL'} from ME to ME' is VDS PVMAPS endpv .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op emptyPreView : Qid ModuleExpression ModuleExpression -> PreView .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq emptyPreView(QI, ME, ME')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = preview QI from ME to ME' is none none endpv .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederendfm
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*******************************************************************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder***
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** The Database
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder***
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** In order to be able to refer to modules by name, which is extremely useful
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** for module definition purposes at the user level, the evaluation of module
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** expressions takes place in the context of a database, in which we keep
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** information about the modules already introduced in the system, and also
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** about those modules generated internally. This information is stored as
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** a set of elements of sort \texttt{ModuleInfo} and \texttt{ViewInfo}, in
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** which we hold, respectively, the information concerning units and views.
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** For each unit we save:
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** \begin{itemize}
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** \item Its original form, as introduced by the user, or, in case of an
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** internally generated unit, as generated from the original form of
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** some other unit.
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** \item Its internal representation, in which variables have been renamed
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** to avoid collisions with the names of variables in other units in
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** the same hierarchy. In the case of object-oriented units, we store
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** its equivalent system module, that is, the result of transforming
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** it into a system module.
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** \item Its signature, which is given as a functional module of sort
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** \texttt{FModule} with no axioms, ready to be used in calls to
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** \texttt{metaParse}. There can only be importation declarations
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** including built-in modules in this module. These are the only
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** inclusions handled by the Core Maude engine.
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** \item Its flattened version, for which, as for signatures, only the
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** importation of built-in modules is left unevaluated.
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** \end{itemize}
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** For each view we keep its name and the view itself.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** As a simple mechanism to keep the database consistent, for each unit we
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** maintain the list of names of all the units and views ``depending'' on it.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** Similarly, for each view we maintain the list of names of all the units
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** ``depending'' on it. The idea is that if a unit or view is redefined or
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** removed, all those units and/or views depending on it will also be
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** removed. This dependency does not only mean direct importation. For
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** example, the module resulting from the renaming of some module also
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** depends on the module being renamed; the instantiation of a parameterized
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** module also depends on the parameterized module and on all the views used
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** in its instantiation; a view depends on its source and target units, etc.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** This dependency is transitive: if a module, theory, or view has to be
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** removed, all the units and/or views depending on them will be removed as
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** well. The dependencies derived from the module expressions themselves are
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** established by the function \texttt{setUpModExpDeps}. The function
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** \texttt{setUpModuleDeps} calls \texttt{setUpModExpDeps},
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** and then \texttt{setUpImportSetDeps} to add the \emph{back
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** references} in the modules being imported. The function
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** \texttt{setUpViewDeps} sTS up the back references for the views
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** being introduced.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** In addition to this set of information cells for units and views, we also
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** keep lists with the names of all the units and views in the database, and
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** a list of quoted identifiers in which we store the messages generated
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** during the process of treatment of the inputs in order to simplify the
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** communication with the read-eval-print loop process.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*******************************************************************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederview ModuleName from TRIV to MOD-NAME is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder sort Elt to ModuleName .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederendv
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederview ViewExp from TRIV to VIEW-EXPR is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder sort Elt to ViewExp .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederendv
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederview ParameterDecl from TRIV to META-MODULE is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder sort Elt to ParameterDecl .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederendv
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederfmod INFO is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr VIEW .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr DEFAULT-VALUE{Term} .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder pr (SET * (op _`,_ to _._,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op empty to emptyModuleNameSet,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op insert to insertModuleNameSet,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op delete to deleteModuleNameSet,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op _in_ to _inModuleNameSet_,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op |_| to |_|ModuleNameSet,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op $card to $cardModuleNameSet,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op union to unionModuleNameSet,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op intersection to intersectionModuleNameSet,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op $intersect to $intersectModuleNameSet,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op _\_ to _\ModuleNameSet_,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op $diff to $diffModuleNameSet,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op _subset_ to _subsetModuleNameSet_,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op _psubset_ to _psubsetModuleNameSet_)){ModuleName} .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder pr (SET * (op _`,_ to _#_,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op empty to emptyViewExpSet,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op insert to insertViewExpSet,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op delete to deleteViewExpSet,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op _in_ to _inViewExpSet_,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op |_| to |_|ViewExprSet,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op $card to $cardViewExprSet,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op union to unionViewExprSet,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op intersection to intersectionViewExprSet,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op $intersect to $intersectViewExprSet,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op _\_ to _\ViewExprSet_,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op $diff to $diffViewExprSet,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op _subset_ to _subsetViewExprSet_,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op _psubset_ to _psubsetViewExprSet_)){ViewExp} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr (SET * (op _`,_ to _._)){ParameterDecl} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var MN : ModuleName .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var MNS : Set{ModuleName} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op remove : Set{ModuleName} ModuleName -> Set{ModuleName} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq remove(MN . MNS, MN) = remove(MNS, MN) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq remove(MNS, MN) = MNS [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder sort ModuleInfo .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op <_;_;_;_;_;_;_;_> : ModuleName Default{Term} Module Module Module
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder OpDeclSet Set{ModuleName} Set{ViewExp} -> ModuleInfo
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [ctor
473b81d33893192056dde74b26b2467f983c102cChristian Maeder format
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder (nig o g n+++io g nio g nio g nio g nio g nio g nio n---ig o)] .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op <_;_;_;_;_;_;_;_> : ModuleName Module Module Module Module
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder OpDeclSet Set{ModuleName} Set{ViewExp} -> ModuleInfo
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [ctor
473b81d33893192056dde74b26b2467f983c102cChristian Maeder format
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder (nig ur! g n+++io g nio g nio g nio g nio g nio g nio n---ig o)] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** - Modules can be introduced by the user or can be generated internally.
473b81d33893192056dde74b26b2467f983c102cChristian Maeder *** When introduced by the user the 2nd arg. keeps the term representation
473b81d33893192056dde74b26b2467f983c102cChristian Maeder *** of the module as given, so that it can be recompiled later. If the
473b81d33893192056dde74b26b2467f983c102cChristian Maeder *** module is generated internally as the result of the evaluation of a
473b81d33893192056dde74b26b2467f983c102cChristian Maeder *** module expression, then this second arg. will be null, the default
473b81d33893192056dde74b26b2467f983c102cChristian Maeder *** term value. The user can also enter modules with the procModule
473b81d33893192056dde74b26b2467f983c102cChristian Maeder *** function, providing then the metarepresentation of a module, which
473b81d33893192056dde74b26b2467f983c102cChristian Maeder *** is directly stored in the database as the 2nd arg. of one of these
473b81d33893192056dde74b26b2467f983c102cChristian Maeder *** ModuleInfo units of the second kind. This is useful for the ITP for
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** example, where the interaction with the database takes place at the
473b81d33893192056dde74b26b2467f983c102cChristian Maeder *** metalevel and the modules given by the "user" are already at the
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** metalevel but still wants the same treatment.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** - The sixth arg. stores the variables (corresponding ops.) in the top
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** module.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder sort ViewInfo .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op <_;_;_;_;_> : ViewExp Default{Term} View Set{ModuleName}
473b81d33893192056dde74b26b2467f983c102cChristian Maeder Set{ViewExp} -> ViewInfo
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [ctor format (nig o g n+++io g nio g nio g nio n---ig o)] .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op <_;_;_;_;_> :
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ViewExp View View Set{ModuleName} Set{ViewExp} -> ViewInfo
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [ctor format (nig o g n+++io g nio g nio g nio n---ig o)] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederendfm
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederview ModuleInfo from TRIV to INFO is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder sort Elt to ModuleInfo .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederendv
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederview ViewInfo from TRIV to INFO is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder sort Elt to ViewInfo .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederendv
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederfmod DATABASE-DECLS is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr (SET * (op _`,_ to __, op empty to emptyInfoSet)){ModuleInfo} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr (SET * (op _`,_ to __, op empty to emptyInfoSet)){ViewInfo} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder sort Database .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op db :
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder Set{ModuleInfo} *** module info tuples
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder Set{ModuleName} *** names of the modules in the database
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder Set{ViewInfo} *** view info tuples
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder Set{ViewExp} *** names of the views in the db
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder Set{ModuleName} *** modules with set protect on (by default empty)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder Set{ModuleName} *** modules with set extend on (by default empty)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder Set{ModuleName} *** modules with set include on (by default empty)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder QidList
473b81d33893192056dde74b26b2467f983c102cChristian Maeder -> Database
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [ctor
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder format (nib i++o)] .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ops getDefPrs getDefExs getDefIncs : Database -> Set{ModuleName} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getDefPrs(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder db(MIS:Set{ModuleInfo}, MNS:Set{ModuleName}, VIS:Set{ViewInfo},
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder VES:Set{ViewExp}, MNS':Set{ModuleName}, MNS'':Set{ModuleName},
473b81d33893192056dde74b26b2467f983c102cChristian Maeder MNS3:Set{ModuleName}, QIL:QidList))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = MNS':Set{ModuleName} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getDefExs(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder db(MIS:Set{ModuleInfo}, MNS:Set{ModuleName}, VIS:Set{ViewInfo},
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder VES:Set{ViewExp}, MNS':Set{ModuleName}, MNS'':Set{ModuleName},
473b81d33893192056dde74b26b2467f983c102cChristian Maeder MNS3:Set{ModuleName}, QIL:QidList))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = MNS'':Set{ModuleName} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getDefIncs(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder db(MIS:Set{ModuleInfo}, MNS:Set{ModuleName}, VIS:Set{ViewInfo},
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder VES:Set{ViewExp}, MNS':Set{ModuleName}, MNS'':Set{ModuleName},
473b81d33893192056dde74b26b2467f983c102cChristian Maeder MNS3:Set{ModuleName}, QIL:QidList))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = MNS3:Set{ModuleName} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederendfm
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederview Database from TRIV to DATABASE-DECLS is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder sort Elt to Database .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederendv
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederview ModuleExpression from TRIV to META-MODULE is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder sort Elt to ModuleExpression .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederendv
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederfmod DATABASE is
473b81d33893192056dde74b26b2467f983c102cChristian Maeder pr (2TUPLE * (op `(_`,_`) to <_;_>,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op p1_ to database,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op p2_ to modExp)) {Database, ModuleExpression} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr PRE-VIEW .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr UNIT .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr VIEW-EXPR-TO-QID .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op evalModule : Module OpDeclSet Database -> Database .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** its definition is in the module EVALUATION
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op procModule : Qid Database -> Database .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op procView : Qid Database -> Database .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** their definitions are in the modules UNIT-PROCESSING and VIEW-PROCESSING
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op evalModExp : ModuleExpression Database -> Tuple{Database, ModuleExpression} .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder *** its definition is in the module MOD-EXPR-EVAL
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars QI X Y F : Qid .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars QIL QIL' : QidList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars NQIL NQIL' : NeQidList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars VE VE' VE'' : ViewExp .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars VES VES' VES'' VES3 : Set{ViewExp} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars MIS MIS' : Set{ModuleInfo} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var VIS : Set{ViewInfo} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars MNS MNS' MNS'' MNS3 MNS4 MNS5 MNS6 : Set{ModuleName} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars PL PL' : ParameterList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars PDS PDS' PDS'' : Set{ParameterDecl} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var PDL : ParameterDeclList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var PD : ParameterDecl .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars ME ME' : ModuleExpression .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars VI VI' : View .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var VMAPS : Set{ViewMap} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var PVMAPS : Set{PreViewMap} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars PU PU' U U' U'' U3 U4 : Module .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var M : Module .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var DB : Database .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars IL IL' : ImportList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var VIf : ViewInfo .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder var UIf : ModuleInfo .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars OPDS VDS VDS' : OpDeclSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var PV : PreView .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars T T' : Term .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var DT : Default{Term} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var NL : IntList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var TyL : TypeList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var Ty : Type .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var AtS : AttrSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var B : Bool .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var I : Import .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var MN MN' : ModuleName .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ops dincluded : ModuleExpression ImportList -> Bool .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq dincluded(ME, IL (protecting ME .) IL') = true .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq dincluded(ME, IL (extending ME .) IL') = true .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq dincluded(ME, IL (including ME .) IL') = true .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq dincluded(ME, IL) = false [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ops included includedAux : ModuleExpression ImportList Database -> Bool .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq included(ME, IL (protecting ME .) IL', DB) = true .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq included(ME, IL (extending ME .) IL', DB) = true .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq included(ME, IL (including ME .) IL', DB) = true .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq included(ME, nil, DB) = false .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq included(ME, IL, DB) = includedAux(ME, IL, DB) [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq includedAux(ME, I IL, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = included(ME, getImports(getTopModule(moduleName(I), DB)), DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder or-else includedAux(ME, IL, DB) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq includedAux(ME, nil, DB) = false .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op defImports : Module Database -> ImportList .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op defImports : ImportList ImportList Set{ModuleName} Set{ModuleName}
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder Set{ModuleName} -> ImportList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq defImports(M, DB)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = if theory(M)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder then nil
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else defImports(getImports(M), nil,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder getDefPrs(DB), getDefExs(DB), getDefIncs(DB))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq defImports(IL, IL', MN . MNS, MNS', MNS'')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if dincluded(MN, IL IL')
473b81d33893192056dde74b26b2467f983c102cChristian Maeder then defImports(IL, IL', MNS, MNS', MNS'')
473b81d33893192056dde74b26b2467f983c102cChristian Maeder else defImports(IL, IL' (protecting MN .), MNS, MNS', MNS'')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq defImports(IL, IL', MNS, MN . MNS', MNS'')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if dincluded(MN, IL IL')
473b81d33893192056dde74b26b2467f983c102cChristian Maeder then defImports(IL, IL', MNS, MNS', MNS'')
473b81d33893192056dde74b26b2467f983c102cChristian Maeder else defImports(IL, IL' (extending MN .), MNS, MNS', MNS'')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq defImports(IL, IL', MNS, MNS', MN . MNS'')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if dincluded(MN, IL IL')
473b81d33893192056dde74b26b2467f983c102cChristian Maeder then defImports(IL, IL', MNS, MNS', MNS'')
473b81d33893192056dde74b26b2467f983c102cChristian Maeder else defImports(IL, IL' (including MN .), MNS, MNS', MNS'')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq defImports(IL, IL',
473b81d33893192056dde74b26b2467f983c102cChristian Maeder emptyModuleNameSet, emptyModuleNameSet, emptyModuleNameSet)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = IL' .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** The constant \texttt{emptyDatabase} denotes the empty database, and there
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** are predicates \texttt{viewInDatabase} and \texttt{unitInDb} to check,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** respectively, whether a view and a unit are in a database or not.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op emptyDatabase : -> Database .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq emptyDatabase
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = db(emptyInfoSet, emptyModuleNameSet, emptyInfoSet, emptyViewExpSet,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder emptyModuleNameSet, emptyModuleNameSet, 'BOOL, nil) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op unitInDb : ModuleName Database -> Bool .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq unitInDb(MN, db(MIS, MNS, VIS, VES, MNS', MNS'', MNS3, QIL))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = MN inModuleNameSet MNS .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op viewInDb : ViewExp Database -> Bool .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq viewInDb(VE, db(MIS, MNS, VIS, VES, MNS', MNS'', MNS3, QIL))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = VE inViewExpSet VES .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op includeBOOL : Database -> Bool .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq includeBOOL(db(MIS, MNS, VIS, VES, MNS', MNS'', MNS3, QIL))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = 'BOOL inModuleNameSet MNS' .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** If a module, theory, or view is being redefined, that is, if there was
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** already in the database a module, theory, or view with the same name,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** then all the units and/or views depending on it are removed using the
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** functions \texttt{delModules} and \texttt{delViews}. Removing a view
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** or a unit from the database means removing its info cell from the set of
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** cells in the database. Those entered by the user are not completely
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** removed, their term form is saved so that it can be recompiled later.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op delModules : Set{ModuleName} Database -> Database .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op delViews : Set{ViewExp} Database -> Database .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq delModules((MN . MNS),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder db(< MN ; T ; U ; U' ; U'' ; VDS ; MNS' ; VES > MIS,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder MN . MNS'', VIS, VES', MNS3, MNS4, MNS5, QIL))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = delModules((MNS . MNS'),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder delViews(VES,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder db(< MN ; T ; noModule ; noModule ; noModule ; VDS ;
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder emptyModuleNameSet ; emptyViewExpSet > MIS,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder MN . MNS'', VIS, VES', MNS3, MNS4, MNS5, QIL))) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq delModules((MN . MNS),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder db(< MN ; U ; U' ; U'' ; U3 ; VDS ; MNS' ; VES > MIS,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder MN . MNS'', VIS, VES', MNS3, MNS4, MNS5, QIL))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = delModules((MNS . MNS'),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder delViews(VES,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder db(< MN ; U ; noModule ; noModule ; noModule ; VDS ;
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder emptyModuleNameSet ; emptyViewExpSet > MIS,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder MN . MNS'', VIS, VES', MNS3, MNS4, MNS5, QIL))) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq delModules((MN . MNS),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder db(< MN ; null ; U ; U' ; U'' ; VDS ; MNS' ; VES > MIS,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder MN . MNS'', VIS, VES', MNS3, MNS4, MNS5, QIL))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = delModules((MNS . MNS'),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder delViews(VES,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder db(MIS, MNS'', VIS, VES', MNS3, MNS4, MNS5, QIL))) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq delModules(emptyModuleNameSet, DB) = DB .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq delModules((MN . MNS), DB) = delModules(MNS, DB) [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq delViews(VE # VES,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder db(MIS, MNS, < VE ; T ; VI ; MNS' ; VES' > VIS, VE # VES'',
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder MNS'', MNS3, MNS4, QIL))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = delViews(VES # VES',
473b81d33893192056dde74b26b2467f983c102cChristian Maeder delModules(MNS',
473b81d33893192056dde74b26b2467f983c102cChristian Maeder db(MIS, MNS,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder < VE ; T ; null ; emptyModuleNameSet ; emptyViewExpSet > VIS,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder VE # VES'', MNS'', MNS3, MNS4, QIL))) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq delViews(VE # VES,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder db(MIS, MNS,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder < VE ; (null).Default{Term} ; VI ; MNS' ; VES' > VIS, VE # VES'',
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder MNS'', MNS3, MNS4, QIL))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = delViews(VES # VES',
473b81d33893192056dde74b26b2467f983c102cChristian Maeder delModules(MNS',
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder db(MIS, MNS, VIS, VES'', MNS'', MNS3, MNS4, QIL))) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq delViews(VE # VES,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder db(MIS, MNS, < VE ; VI ; VI' ; MNS' ; VES' > VIS, VE # VES'',
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder MNS'', MNS3, MNS4, QIL))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = delViews(VES # VES',
473b81d33893192056dde74b26b2467f983c102cChristian Maeder delModules(MNS',
473b81d33893192056dde74b26b2467f983c102cChristian Maeder db(MIS, MNS,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder < VE ; VI ; null ; emptyModuleNameSet ; emptyViewExpSet > VIS,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder VE # VES'', MNS'', MNS3, MNS4, QIL))) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq delViews(emptyViewExpSet, DB) = DB .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq delViews(VE # VES, DB) = delViews(VES, DB) [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** The \texttt{warning} function allows us to place messages (warning, error,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** or any other kind of messages) in the last argument of the database
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** constructor. These messages are given in the form of quoted identifier
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** lists, and will be passed to the third argument of the read-eval-print
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** loop, to be printed in the terminal.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op warning : Database QidList -> Database .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq warning(db(MIS, MNS, VIS, VES, MNS', MNS'', MNS3, nil), QIL)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = db(MIS, MNS, VIS, VES, MNS', MNS'', MNS3, QIL) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq warning(db(MIS, MNS, VIS, VES, MNS', MNS'', MNS3, NQIL), QIL)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = db(MIS, MNS, VIS, VES, MNS', MNS'', MNS3, NQIL QIL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op getMsg : Database -> QidList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getMsg(db(MIS, MNS, VIS, VES, MNS', MNS'', MNS3, QIL)) = QIL .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** Core Maude built-in modules are handled in a special way in the current
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** version of the system. They are not explicitly defined in the Full Maude
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** database; their importation is directly handled by Core Maude. This has
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** some drawbacks: Core Maude built-in modules cannot be renamed; they cannot
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** be directly used with built-in functions, such as \texttt{metaReduce} or
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \texttt{sameComponent}, although they can be imported in modules being
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** used in the calls to these functions; and, in general, any function taking
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** as argument or returning as result the metarepresentation of a module
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** cannot take one of these built-in modules as argument. This is the case,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** for example, for the \texttt{up} function presented in
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** Section~\ref{changing-levels}, or for functions or commands in which the
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** name of a module has to be specified, as the \texttt{select} or
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \texttt{down} commands, or the \texttt{up} function presented in
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** Section~\ref{structured-specifications}. Nevertheless, there are also
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** some advantages: The flattening of the built-in part of the structure is
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** accomplished more efficiently, and, since these modules do not have to be
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** stored in the database of Full Maude, the size of the database is reduced.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** Our plan is to have in the future a hybrid solution. Once we have some way
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** of storing the modules entered to Full Maude in Core Maude's database, it
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** will be enough to keep in the Full Maude database just the original form
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** of the top of all the modules, including built-ins, leaving all the
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** importation declarations to be resolved by the engine. The structures will
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** be normalized as they are now, so that the engine will have to deal just
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** with inclusions, but it will be possible to use the predefined modules as
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** any other module. Moreover, the Full Maude database will be relatively
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** smaller and the flattening will be computed more efficiently.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** When a new module or theory is entered, the names of all the modules,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** theories, and views depending on it are included in its lists of
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** dependencies with functions \texttt{setUpModuleDeps} and
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \texttt{setUpViewDeps}. Notice that if new module expressions are
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** defined, the function \texttt{setUpModExpDeps} will have to be
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** extended accordingly.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op setUpModuleDeps : Module Database -> Database .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op setUpModExpDeps : ModuleName Database -> Database .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op setUpModExpDeps : ModuleName Header Database -> Database .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op setUpModExpDeps : ModuleName ViewExp Database -> Database .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op setUpImportDeps : ModuleName ImportList Database -> Database .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq setUpModuleDeps(U, DB)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = setUpImportDeps(getName(U), getImports(U),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder setUpModExpDeps(getName(U), DB)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq setUpModExpDeps(QI, DB) = DB .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq setUpModExpDeps(pd(X :: ME),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder db(< ME ; DT ; U ; U' ; U'' ; VDS ; MNS ; VES > MIS,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder MNS', VIS, VES', MNS'', MNS3, MNS4, QIL))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = db(< ME ; DT ; U ; U' ; U'' ; VDS ; (MNS . pd(X :: ME)) ; VES > MIS,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder MNS', VIS, VES', MNS'', MNS3, MNS4, QIL) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq setUpModExpDeps(pd(X :: ME),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder db(< ME ; U ; U' ; U'' ; U3 ; VDS ; MNS ; VES > MIS,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder MNS', VIS, VES', MNS'', MNS3, MNS4, QIL))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = db(< ME ; U ; U' ; U'' ; U3 ; VDS ; (MNS . pd(X :: ME)) ; VES > MIS,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder MNS', VIS, VES', MNS'', MNS3, MNS4, QIL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq setUpModExpDeps(pd(X :: ME), DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = warning(DB, ('\r 'Error: '\o 'Module header2QidList(ME) 'not 'in 'database. '\n))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- This could be a bug in Core Maude.
473b81d33893192056dde74b26b2467f983c102cChristian Maeder---- It should work if the next 6 equations are replaced by this single equation.
473b81d33893192056dde74b26b2467f983c102cChristian Maeder---- ceq setUpImportDeps(MN, (I IL),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder---- db((< MN' ; U ; U' ; U'' ; U3 ; VDS ; MNS ; VES > MIS),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- MNS', VIS, VES', MNS'', MNS3, MNS4, QIL))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder---- = setUpImportDeps(MN, IL,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder---- db((< MN' ; U ; U' ; U'' ; U3 ; VDS ; MN . MNS ; VES > MIS),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder---- MNS', VIS, VES', MNS'', MNS3, MNS4, QIL))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- if MN' := moduleName(I) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq setUpImportDeps(MN, ((including MN' .) IL),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder db((< MN' ; DT ; U ; U' ; U'' ; VDS ; MNS ; VES > MIS), MNS', VIS, VES', MNS'', MNS3, MNS4, QIL))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = setUpImportDeps(MN, IL,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder db((< MN' ; DT ; U ; U' ; U'' ; VDS ; MN . MNS ; VES > MIS), MNS', VIS, VES', MNS'', MNS3, MNS4, QIL)) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq setUpImportDeps(MN, ((including MN' .) IL),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder db((< MN' ; U ; U' ; U'' ; U3 ; VDS ; MNS ; VES > MIS), MNS', VIS, VES', MNS'', MNS3, MNS4, QIL))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = setUpImportDeps(MN, IL,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder db((< MN' ; U ; U' ; U'' ; U3 ; VDS ; MN . MNS ; VES > MIS), MNS', VIS, VES', MNS'', MNS3, MNS4, QIL)) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq setUpImportDeps(MN, ((extending MN' .) IL),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder db((< MN' ; DT ; U ; U' ; U'' ; VDS ; MNS ; VES > MIS), MNS', VIS, VES', MNS'', MNS3, MNS4, QIL))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = setUpImportDeps(MN, IL,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder db((< MN' ; DT ; U ; U' ; U'' ; VDS ; MN . MNS ; VES > MIS), MNS', VIS, VES', MNS'', MNS3, MNS4, QIL)) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq setUpImportDeps(MN, ((extending MN' .) IL),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder db((< MN' ; U ; U' ; U'' ; U3 ; VDS ; MNS ; VES > MIS), MNS', VIS, VES', MNS'', MNS3, MNS4, QIL))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = setUpImportDeps(MN, IL,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder db((< MN' ; U ; U' ; U'' ; U3 ; VDS ; MN . MNS ; VES > MIS), MNS', VIS, VES', MNS'', MNS3, MNS4, QIL)) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq setUpImportDeps(MN, ((protecting MN' .) IL),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder db((< MN' ; DT ; U ; U' ; U'' ; VDS ; MNS ; VES > MIS), MNS', VIS, VES', MNS'', MNS3, MNS4, QIL))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = setUpImportDeps(MN, IL,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder db((< MN' ; DT ; U ; U' ; U'' ; VDS ; MN . MNS ; VES > MIS), MNS', VIS, VES', MNS'', MNS3, MNS4, QIL)) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq setUpImportDeps(MN, ((protecting MN' .) IL),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder db((< MN' ; U ; U' ; U'' ; U3 ; VDS ; MNS ; VES > MIS), MNS', VIS, VES', MNS'', MNS3, MNS4, QIL))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = setUpImportDeps(MN, IL,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder db((< MN' ; U ; U' ; U'' ; U3 ; VDS ; MN . MNS ; VES > MIS), MNS', VIS, VES', MNS'', MNS3, MNS4, QIL)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq setUpImportDeps(MN, I IL, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = warning(DB, '\r 'Error: '\o 'Module header2QidList(moduleName(I)) 'not 'in 'database. '\n)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq setUpImportDeps(MN, nil, DB) = DB .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op setUpViewDeps : ModuleExpression ViewExp Database -> Database .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op setUpViewExpDeps : ViewExp Database -> Database .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op setUpViewExpDeps : ViewExp ParameterList Database -> Database .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq setUpViewDeps(ME, VE,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder db((< ME ; DT ; U ; U' ; U'' ; VDS ; MNS ; VES > MIS), MNS', VIS, VES', MNS'', MNS3, MNS4, QIL))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = db((< ME ; DT ; U ; U' ; U'' ; VDS ; MNS ; VE # VES > MIS), MNS', VIS, VES', MNS'', MNS3, MNS4, QIL) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq setUpViewDeps(ME, VE,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder db((< ME ; U ; U' ; U'' ; U3 ; VDS ; MNS ; VES > MIS), MNS', VIS, VES', MNS'', MNS3, MNS4, QIL))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = db((< ME ; U ; U' ; U'' ; U3 ; VDS ; MNS ; VE # VES > MIS), MNS', VIS, VES', MNS'', MNS3, MNS4, QIL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq setUpViewDeps(ME, VE, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = warning(DB, '\r 'Error: '\o 'Module header2QidList(ME) 'not 'in 'database. '\n)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq setUpViewExpDeps(QI, DB) = DB .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq setUpViewExpDeps(QI{PL}, DB) = setUpViewExpDeps(QI{PL}, PL, DB) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq setUpViewExpDeps(VE, (QI, PL),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder db(MIS, MNS, < QI ; DT ; VI ; MNS' ; VES > VIS, VES', MNS'', MNS3, MNS4, QIL))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = setUpViewExpDeps(VE, PL,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder db(MIS, MNS, < QI ; DT ; VI ; MNS' ; VE # VES > VIS, VES', MNS'', MNS3, MNS4, QIL)) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq setUpViewExpDeps(VE, (QI, PL),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder db(MIS, MNS, < QI ; VI ; VI' ; MNS' ; VES > VIS, VES', MNS'', MNS3, MNS4, QIL))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = setUpViewExpDeps(VE, PL,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder db(MIS, MNS, < QI ; VI ; VI' ; MNS' ; VE # VES > VIS, VES', MNS'', MNS3, MNS4, QIL)) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq setUpViewExpDeps(QI{PL}, PL',
473b81d33893192056dde74b26b2467f983c102cChristian Maeder db(MIS, MNS, < QI ; DT ; VI ; MNS' ; VES > VIS, VES', MNS'', MNS3, MNS4, QIL))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = db(MIS, MNS, < QI ; DT ; VI ; MNS' ; QI{PL} # VES > VIS, VES', MNS'', MNS3, MNS4, QIL)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [owise] .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq setUpViewExpDeps(QI{PL}, PL',
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder db(MIS, MNS, < QI ; VI ; VI' ; MNS' ; VES > VIS, VES', MNS'', MNS3, MNS4, QIL))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = db(MIS, MNS, < QI ; VI ; VI' ; MNS' ; QI{PL} # VES > VIS, VES', MNS'', MNS3, MNS4, QIL)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq setUpViewExpDeps(VE, (QI{PL}, PL'),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder db(MIS, MNS, < QI{PL} ; DT ; VI ; MNS' ; VES > VIS, VES', MNS'', MNS3, MNS4, QIL))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = setUpViewExpDeps(VE, PL',
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder db(MIS, MNS, < QI{PL} ; DT ; VI ; MNS' ; VE # VES > VIS, VES', MNS'', MNS3, MNS4, QIL)) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq setUpViewExpDeps(VE, (QI{PL}, PL'),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder db(MIS, MNS, < QI{PL} ; VI ; VI' ; MNS' ; VES > VIS, VES', MNS'', MNS3, MNS4, QIL))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = setUpViewExpDeps(VE, PL',
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder db(MIS, MNS, < QI{PL} ; VI ; VI' ; MNS' ; VE # VES > VIS, VES', MNS'', MNS3, MNS4, QIL)) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq setUpViewExpDeps(VE, (QI{PL}, PL'), DB)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = setUpViewExpDeps(VE, PL', DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq setUpViewExpDeps(VE, empty, DB) = DB .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op compiledModule : ModuleExpression Database -> Bool .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op compiledModule : ParameterDecl Database -> Bool .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op compiledView : ViewExp Database -> Bool .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq compiledView(VE,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder db(MIS, MNS, < VE ; DT ; VI ; MNS' ; VES > VIS, VES', MNS'', MNS3, MNS4, QIL))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = VI =/= null .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq compiledView(ME, DB) = false [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq compiledModule(MN,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder db(< MN ; DT ; U ; U' ; U'' ; VDS ; MNS ; VES > MIS, MNS',
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder VIS, VES', MNS'', MNS3, MNS4, QIL))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = U'' =/= noModule .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq compiledModule(MN,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder db(< MN ; U ; U' ; U'' ; U3 ; VDS ; MNS ; VES > MIS, MNS',
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder VIS, VES', MNS'', MNS3, MNS4, QIL))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = U3 =/= noModule .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq compiledModule(MN, DB) = false [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op insertTermView : ViewExp Term Database -> Database .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op insertView : View Database -> Database .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op getTermView : ViewExp Database -> Default{Term} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op getView : ViewExp Database -> [View] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq insertTermView(VE, T,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder db(MIS, MNS, < VE ; DT ; VI ; MNS' ; VES > VIS, VES',
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder MNS'', MNS3, MNS4, QIL))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = delViews(VES,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder delModules(MNS',
473b81d33893192056dde74b26b2467f983c102cChristian Maeder db(MIS, MNS,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder < VE ; T ; null ; emptyModuleNameSet ; emptyViewExpSet > VIS, VES',
473b81d33893192056dde74b26b2467f983c102cChristian Maeder MNS'', MNS3, MNS4,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder QIL
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder '\g 'Advisory: '\o 'View viewExp2QidList(VE) 'redefined. '\n))) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq insertTermView(VE, T,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder db(MIS, MNS, VIS, VES, MNS', MNS'', MNS3, QIL))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = db(MIS, MNS,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder < VE ; T ; null ; emptyModuleNameSet ; emptyViewExpSet > VIS,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder (VE # VES), MNS', MNS'', MNS3, QIL)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq insertView(view VE from ME to ME' is VMAPS endv,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder db(MIS, MNS, < VE ; DT ; VI ; MNS' ; VES > VIS, VES', MNS'', MNS3, MNS4, QIL))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = setUpViewExpDeps(VE,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder setUpViewDeps(ME, VE,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder setUpViewDeps(ME', VE,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder db(MIS, MNS,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder < VE ; DT ;
473b81d33893192056dde74b26b2467f983c102cChristian Maeder view VE from ME to ME' is VMAPS endv ;
473b81d33893192056dde74b26b2467f983c102cChristian Maeder MNS' ; VES > VIS,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder VES', MNS'', MNS3, MNS4, QIL)))) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq insertView(view VE{PDL} from ME to ME' is VMAPS endv,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder db(MIS, MNS, < VE ; DT ; VI ; MNS' ; VES > VIS, VES', MNS'', MNS3, MNS4, QIL))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = setUpViewExpDeps(VE,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder setUpViewDeps(ME, VE,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder setUpViewDeps(ME', VE,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder db(MIS, MNS,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder < VE ; DT ;
473b81d33893192056dde74b26b2467f983c102cChristian Maeder view VE{PDL} from ME to ME' is VMAPS endv ;
473b81d33893192056dde74b26b2467f983c102cChristian Maeder MNS' ; VES > VIS,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder VES', MNS'', MNS3, MNS4, QIL)))) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq insertView(view VE from ME to ME' is VMAPS endv,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder db(MIS, MNS, VIS, VES', MNS'', MNS3, MNS4, QIL))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = setUpViewExpDeps(VE,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder setUpViewDeps(ME, VE,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder setUpViewDeps(ME', VE,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder db(MIS, MNS,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder < VE ; (null).Default{Term} ;
473b81d33893192056dde74b26b2467f983c102cChristian Maeder view VE from ME to ME' is VMAPS endv ;
473b81d33893192056dde74b26b2467f983c102cChristian Maeder emptyModuleNameSet ; emptyViewExpSet > VIS,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder VE # VES', MNS'', MNS3, MNS4, QIL))))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [owise] .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq insertView(view VE{PDL} from ME to ME' is VMAPS endv,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder db(MIS, MNS, VIS, VES', MNS'', MNS3, MNS4, QIL))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = setUpViewExpDeps(VE,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder setUpViewDeps(ME, VE,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder setUpViewDeps(ME', VE,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder db(MIS, MNS,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder < VE ; (null).Default{Term} ;
473b81d33893192056dde74b26b2467f983c102cChristian Maeder view VE{PDL} from ME to ME' is VMAPS endv ;
473b81d33893192056dde74b26b2467f983c102cChristian Maeder emptyModuleNameSet ; emptyViewExpSet > VIS,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder VE # VES', MNS'', MNS3, MNS4, QIL))))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq insertView(viewError(QIL), DB) = warning(DB, QIL) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ceq insertView(view VE:[ViewExp] from ME:[ModuleExpression] to ME':[ModuleExpression] is VMAPS:[RenamingSet] endv, DB)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = warning(DB, 'The 'view QIL QI if QI == '`) then '\s else nil fi 'contains 'errors.)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder if not view VE:[ViewExp] from ME:[ModuleExpression] to ME':[ModuleExpression] is VMAPS:[RenamingSet] endv :: View
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder /\ QIL QI := eMetaPrettyPrint(VE:[ViewExp])
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [owise] .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ceq insertView(view VE:[ViewExp]{PDL:[ParameterDeclList]} from ME:[ModuleExpression] to ME':[ModuleExpression] is VMAPS:[RenamingSet] endv, DB)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = warning(DB, 'The 'view QIL QI if QI == '`) then '\s else nil fi 'contains 'errors.)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder if not view VE:[ViewExp]{PDL:[ParameterDeclList]} from ME:[ModuleExpression] to ME':[ModuleExpression] is VMAPS:[RenamingSet] endv :: View
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder /\ QIL QI := eMetaPrettyPrint(VE:[ViewExp])
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq getTermView(VE,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder db(MIS, MNS, (< VE ; DT ; VI ; MNS' ; VES > VIS), VES', MNS'', MNS3, MNS4, QIL))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = DT .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getTermView(VE, db(MIS, MNS, VIS, VES, MNS', MNS'', MNS3, QIL))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = qidError('\r 'Error: '\o 'View viewExp2QidList(VE) 'not 'in 'database. '\n)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq getView(VE,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder db(MIS, MNS, < VE ; DT ; VI ; MNS' ; VES > VIS, VES', MNS'', MNS3, MNS4, QIL))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = VI .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq getView(VE,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder db(MIS, MNS, < VE ; VI ; VI' ; MNS' ; VES > VIS, VES', MNS'', MNS3, MNS4, QIL))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = VI' .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq getView(VE, db(MIS, MNS, VIS, VES, MNS', MNS'', MNS3, QIL))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = viewError('\r 'Error: '\o 'View viewExp2QidList(VE) 'not 'in 'database. '\n)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** There are functions to insert the different versions of a unit, and to
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** extract them. We only give here the equations for the insertion of top
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** units to illustrate the way in which the consistency of the database is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** maintained. We assume that when the internal version, the signature, or
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** the flat version of a module is entered in the database, its corresponding
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** top module is already present in it.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr 3TUPLE{Term,OpDeclSet,Module}
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder * (op ((_,_,_)) to <_;_;_>) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- sort Tuple{Term,OpDeclSet,Module} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- op <_;_;_> : Default{Term} OpDeclSet Module -> Tuple{Term,OpDeclSet,Module} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op error : QidList -> [Tuple{Term,OpDeclSet,Module}] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op insTermModule : ModuleName Module Database -> Database .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op insTermModule : ModuleName Term Database -> Database .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op insertTopModule : ModuleExpression [Module] Database -> Database .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op insertInternalModule : ModuleExpression [Module] Database -> Database .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op insertFlatModule : ModuleExpression [Module] Database -> Database .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op insertVars : ModuleExpression [OpDeclSet] Database -> Database .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op getTermModule : ModuleExpression Database -> [Tuple{Term,OpDeclSet,Module}] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op getTopModule : ModuleExpression Database -> [Module] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op getInternalModule : ModuleExpression Database -> [Module] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op getFlatModule : ModuleExpression Database -> [Module] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op getFlatModuleNeg : ModuleExpression Database -> [Module] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op getVars : ModuleExpression Database -> [OpDeclSet] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op insertTopModule : ParameterDecl [Module] Database -> Database .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op insertInternalModule : ParameterDecl [Module] Database -> Database .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op insertFlatModule : ParameterDecl [Module] Database -> Database .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op insertVars : ParameterDecl [OpDeclSet] Database -> Database .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op getTermModule : ParameterDecl Database -> [Tuple{Term,OpDeclSet,Module}] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op getTopModule : ParameterDecl Database -> [Module] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op getInternalModule : ParameterDecl Database -> [Module] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op getFlatModule : ParameterDecl Database -> [Module] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op getFlatModuleNeg : ParameterDecl Database -> [Module] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op getVars : ParameterDecl Database -> [OpDeclSet] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq insTermModule(MN, T,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder db(< MN ; DT ; U ; U' ; U'' ; VDS ; MNS ; VES > MIS, MNS',
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder VIS, VES', MNS'', MNS3, MNS4, QIL))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = delModules(MNS,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder delViews(VES,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder db(< MN ; T ; noModule ; noModule ; noModule ; none ;
473b81d33893192056dde74b26b2467f983c102cChristian Maeder emptyModuleNameSet ; emptyViewExpSet > MIS,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder MNS', VIS, VES', MNS'', MNS3, MNS4,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder QIL
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder '\g 'Advisory: '\o 'Module header2QidList(MN) 'redefined. '\n))).
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq insTermModule(MN, T,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder db(< MN ; U ; U' ; U'' ; U3 ; VDS ; MNS ; VES > MIS, MNS',
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder VIS, VES', MNS'', MNS3, MNS4, QIL))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = delModules(MNS,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder delViews(VES,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder db(< MN ; T ; noModule ; noModule ; noModule ; none ;
473b81d33893192056dde74b26b2467f983c102cChristian Maeder emptyModuleNameSet ; emptyViewExpSet > MIS,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder MNS', VIS, VES', MNS'', MNS3, MNS4,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder QIL
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder '\g 'Advisory: '\o 'Module header2QidList(MN) 'redefined. '\n))).
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq insTermModule(MN, T,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder db(MIS, MNS, VIS, VES, MNS', MNS'', MNS3, QIL))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = db(< MN ; T ; noModule ; noModule ; noModule ; none ;
473b81d33893192056dde74b26b2467f983c102cChristian Maeder emptyModuleNameSet ; emptyViewExpSet > MIS,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder MN . MNS, VIS, VES, MNS', MNS'', MNS3, QIL)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq insTermModule(MN, qidError(QIL), DB) = warning(DB, QIL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq insTermModule(MN, unitError(QIL), DB) = warning(DB, QIL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq insTermModule(MN, U,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder db(< MN ; DT ; U' ; U'' ; U3 ; VDS ; MNS ; VES > MIS, MNS',
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder VIS, VES', MNS'', MNS3, MNS4, QIL))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = delModules(MNS,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder delViews(VES,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder db(< MN ; U ; noModule ; noModule ; noModule ; none ;
473b81d33893192056dde74b26b2467f983c102cChristian Maeder emptyModuleNameSet ; emptyViewExpSet > MIS,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder MNS', VIS, VES', MNS'', MNS3, MNS4,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder QIL
473b81d33893192056dde74b26b2467f983c102cChristian Maeder '\g 'Advisory:
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder '\o 'Module header2QidList(MN) 'redefined. '\n))).
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq insTermModule(MN, U,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder db(< MN ; U' ; U'' ; U3 ; U4 ; VDS ; MNS ; VES > MIS, MNS',
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder VIS, VES', MNS'', MNS3, MNS4, QIL))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = delModules(MNS,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder delViews(VES,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder db(< MN ; U ; noModule ; noModule ; noModule ; none ;
473b81d33893192056dde74b26b2467f983c102cChristian Maeder emptyModuleNameSet ; emptyViewExpSet > MIS,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder MNS', VIS, VES', MNS'', MNS3, MNS4,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder QIL
473b81d33893192056dde74b26b2467f983c102cChristian Maeder '\g 'Advisory:
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder '\o 'Module header2QidList(MN) 'redefined. '\n))).
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq insTermModule(MN, U,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder db(MIS, MNS, VIS, VES, MNS', MNS'', MNS3, QIL))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = db(< MN ; U ; noModule ; noModule ; noModule ; none ;
473b81d33893192056dde74b26b2467f983c102cChristian Maeder emptyModuleNameSet ; emptyViewExpSet > MIS,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder MN . MNS, VIS, VES, MNS', MNS'', MNS3, QIL)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq insTermModule(MN, qidError(QIL), DB) = warning(DB, QIL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq insTermModule(MN, unitError(QIL), DB) = warning(DB, QIL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq insertTopModule(MN, U,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder db(< MN ; null ; U' ; U'' ; U3 ; VDS ; MNS ; VES > MIS,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder MNS', VIS, VES', MNS'', MNS3, MNS4, QIL))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = db(< MN ; null ; U ; noModule ; noModule ; VDS ; MNS ; VES > MIS,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder MNS', VIS, VES', MNS'', MNS3, MNS4,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder QIL
473b81d33893192056dde74b26b2467f983c102cChristian Maeder '\r 'ERROR: '\o
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder 'Internally 'generated 'module header2QidList(MN) 'redefined. '\n) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq insertTopModule(MN, U,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder db(< MN ; T ; U' ; U'' ; U3 ; VDS ; MNS ; VES > MIS,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder MNS', VIS, VES', MNS'', MNS3, MNS4, QIL))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = setUpModuleDeps(U,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder db(< MN ; T ; U ; noModule ; noModule ; VDS ; MNS ; VES > MIS,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder MNS', VIS, VES', MNS'', MNS3, MNS4, QIL)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq insertTopModule(MN, U,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder db(< MN ; U' ; U'' ; U3 ; U4 ; VDS ; MNS ; VES > MIS,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder MNS', VIS, VES', MNS'', MNS3, MNS4, QIL))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = setUpModuleDeps(U,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder db(< MN ; U' ; U ; noModule ; noModule ; VDS ; MNS ; VES > MIS,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder MNS', VIS, VES', MNS'', MNS3, MNS4, QIL)) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq insertTopModule(MN, U,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder db(MIS, MNS, VIS, VES, MNS', MNS'', MNS3, QIL))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = setUpModuleDeps(U,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder db(< MN ; null ; U ; noModule ; noModule ;
473b81d33893192056dde74b26b2467f983c102cChristian Maeder none ; emptyModuleNameSet ; emptyViewExpSet > MIS,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder MN . MNS, VIS, VES, MNS', MNS'', MNS3, QIL))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq insertTopModule(MN, unitError(QIL), DB) = warning(DB, QIL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq insertInternalModule(MN, U,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder db(< MN ; DT ; U' ; U'' ; U3 ; VDS ; MNS ; VES > MIS,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder MNS', VIS, VES', MNS'', MNS3, MNS4, QIL))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = db(< MN ; DT ; U' ; U ; U3 ; VDS ; MNS ; VES > MIS,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder MNS', VIS, VES', MNS'', MNS3, MNS4, QIL) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq insertInternalModule(MN, U,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder db(< MN ; U' ; U'' ; U3 ; U4 ; VDS ; MNS ; VES > MIS,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder MNS', VIS, VES', MNS'', MNS3, MNS4, QIL))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = db(< MN ; U' ; U'' ; U ; U4 ; VDS ; MNS ; VES > MIS,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder MNS', VIS, VES', MNS'', MNS3, MNS4, QIL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq insertInternalModule(MN, unitError(QIL), DB) = warning(DB, QIL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq insertFlatModule(MN, U,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder db(< MN ; DT ; U' ; U'' ; U3 ; VDS ; MNS ; VES > MIS,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder MNS', VIS, VES', MNS'', MNS3, MNS4, QIL))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = db(< MN ; DT ; U' ; U'' ; U ; VDS ; MNS ; VES > MIS,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder MNS', VIS, VES', MNS'', MNS3, MNS4, QIL) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq insertFlatModule(MN, U,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder db(< MN ; U' ; U'' ; U3 ; U4 ; VDS ; MNS ; VES > MIS,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder MNS', VIS, VES', MNS'', MNS3, MNS4, QIL))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = db(< MN ; U' ; U'' ; U3 ; U ; VDS ; MNS ; VES > MIS,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder MNS', VIS, VES', MNS'', MNS3, MNS4, QIL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq insertFlatModule(MN, unitError(QIL), DB) = warning(DB, QIL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq insertVars(MN, VDS,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder db(< MN ; DT ; U' ; U'' ; U3 ; VDS' ; MNS ; VES > MIS,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder MNS', VIS, VES', MNS'', MNS3, MNS4, QIL))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = db(< MN ; DT ; U' ; U'' ; U3 ; VDS ; MNS ; VES > MIS,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder MNS', VIS, VES', MNS'', MNS3, MNS4, QIL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq insertVars(MN, VDS,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder db(< MN ; U' ; U'' ; U3 ; U4 ; VDS' ; MNS ; VES > MIS,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder MNS', VIS, VES', MNS'', MNS3, MNS4, QIL))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = db(< MN ; U' ; U'' ; U3 ; U4 ; VDS ; MNS ; VES > MIS,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder MNS', VIS, VES', MNS'', MNS3, MNS4, QIL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq insertVars(MN, opDeclError(QIL), DB) = warning(DB, QIL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq getTermModule(MN,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder db(< MN ; null ; U ; U' ; U'' ; VDS ; MNS ; VES > MIS,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder MNS', VIS, VES', MNS'', MNS3, MNS4, QIL))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = error('\r 'Error: '\o header2QidList(MN) 'is 'an 'internal 'module. '\n) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq getTermModule(MN,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder db(< MN ; DT ; U ; U' ; U'' ; VDS ; MNS ; VES > MIS,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder MNS', VIS, VES', MNS'', MNS3, MNS4, QIL))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = < DT ; none ; noModule > .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq getTermModule(MN,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder db(< MN ; U ; U' ; U'' ; U3 ; VDS ; MNS ; VES > MIS,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder MNS', VIS, VES', MNS'', MNS3, MNS4, QIL))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = < null ; VDS ; U > .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getTermModule(MN, DB)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = error('\r 'Error: '\o 'Module header2QidList(MN) '\n)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq getTopModule(MN,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder db(< MN ; DT ; U ; U' ; U'' ; VDS ; MNS ; VES > MIS,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder MNS', VIS, VES', MNS'', MNS3, MNS4, QIL))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = U .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq getTopModule(MN,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder db(< MN ; U ; U' ; U'' ; U3 ; VDS ; MNS ; VES > MIS,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder MNS', VIS, VES', MNS'', MNS3, MNS4, QIL))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = U' .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getTopModule(MN, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = unitError('\r 'Error: '\o 'Module header2QidList(MN) 'not 'in 'database. '\n)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq getInternalModule(MN,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder db(< MN ; DT ; U ; U' ; U'' ; VDS ; MNS ; VES > MIS,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder MNS', VIS, VES', MNS'', MNS3, MNS4, QIL))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = U' .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq getInternalModule(MN,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder db(< MN ; U ; U' ; U'' ; U3 ; VDS ; MNS ; VES > MIS,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder MNS', VIS, VES', MNS'', MNS3, MNS4, QIL))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = U'' .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getInternalModule(MN, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = unitError('\r 'Error: '\o 'Module header2QidList(MN) 'not 'in 'database. '\n)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq getVars(MN,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder db(< MN ; DT ; U ; U' ; M ; VDS ; MNS ; VES > MIS,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder MNS', VIS, VES', MNS'', MNS3, MNS4, QIL))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = VDS .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq getVars(MN,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder db(< MN ; U ; U' ; U'' ; M ; VDS ; MNS ; VES > MIS,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder MNS', VIS, VES', MNS'', MNS3, MNS4, QIL))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = VDS .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getVars(MN, DB) = none [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** The name of the signature and the flattened module is not the
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** module expression used as the name of the module but the result of
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** converting it into a quoted identifier.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq getFlatModule(MN,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder db(< MN ; DT ; U ; U' ; M ; VDS ; MNS ; VES > MIS, MNS', VIS, VES', MNS'', MNS3, MNS4, QIL))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if M == noModule
473b81d33893192056dde74b26b2467f983c102cChristian Maeder then unitError('\r 'Error: '\o 'Module header2QidList(MN) 'not 'compiled. '\n)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else remNegAnns(M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq getFlatModule(MN,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder db(< MN ; U ; U' ; U'' ; M ; VDS ; MNS ; VES > MIS, MNS', VIS, VES', MNS'', MNS3, MNS4, QIL))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if M == noModule
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then unitError('\r 'Error: '\o 'Module header2QidList(MN) 'not 'compiled. '\n)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else remNegAnns(M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getFlatModule(MN, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = unitError('\r 'Error: '\o 'Module header2QidList(MN) 'not 'in 'database. '\n)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** Handling of negative annotations (by Santiago Escobar)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq getFlatModuleNeg(MN,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder db(< MN ; DT ; U ; U' ; M ; VDS ; MNS ; VES > MIS,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder MNS', VIS, VES', MNS'', MNS3, MNS4, QIL))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = M .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq getFlatModuleNeg(MN,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder db(< MN ; U ; U' ; U'' ; M ; VDS ; MNS ; VES > MIS,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder MNS', VIS, VES', MNS'', MNS3, MNS4, QIL))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = M .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq getFlatModuleNeg(MN,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder db(< MN ; DT ; U ; U' ; noModule ; VDS ; MNS ; VES > MIS,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder MNS', VIS, VES', MNS'', MNS3, MNS4, QIL))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = unitError('\r 'Error: '\o
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder 'Module header2QidList(MN) 'not 'compiled. '\n) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq getFlatModuleNeg(MN,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder db(< MN ; U ; U' ; U'' ; noModule ; VDS ; MNS ; VES > MIS,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder MNS', VIS, VES', MNS'', MNS3, MNS4, QIL))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = unitError('\r 'Error: '\o
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder 'Module header2QidList(MN) 'not 'compiled. '\n) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getFlatModuleNeg(MN, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = unitError('\r 'Error: '\o 'Module header2QidList(MN) 'not 'in 'database. '\n)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** removeNegAnnotations
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op remNegAnns : Module -> Module .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op remNegAnns : OpDeclSet -> OpDeclSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op remNegAnns : AttrSet -> AttrSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op remNegAnns : IntList -> IntList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq remNegAnns(M) = setOps(M, remNegAnns(getOps(M))) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq remNegAnns(op F : TyL -> Ty [AtS] . OPDS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = op F : TyL -> Ty [remNegAnns(AtS)] . remNegAnns(OPDS) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq remNegAnns((none).OpDeclSet) = (none).OpDeclSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq remNegAnns(strat(NL:NatList) AtS) = strat(NL:NatList) AtS .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq remNegAnns(strat(IL:IntList) AtS) = AtS [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq remNegAnns(AtS) = AtS [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederendfm
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*******************************************************************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder***
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** The Evaluation of Modules
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder***
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** The general principle for the evaluation of units in our design consists in
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** first evaluating any module expression, reducing it to a canonical form in
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** which only unit inclusions appear, that is, to a unit hierarchy, which can
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** be seen as a partial order of unit inclusions. The design of the Full Maude
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** system has been based upon the principle of evaluating all module
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** expressions to irreducible structured units, and on using the flat version
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** of the units only for execution purposes. We have then two different
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** processes clearly distinguished: a first step in which the structured unit
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** is evaluated and reduced to its normal form, and a second step in which
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** this normal form is flattened.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** As explained in Section~\ref{execution-environment}, the process of
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** evaluation to normal form is also responsible for the parsing of the
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** bubbles in the premodules, which is accomplished once the signature has
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** been built. The parsing of bubbles is discussed in
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** Section~\ref{bubble-parsing}. To be able to handle the \texttt{up}
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** function and the \texttt{down} command presented in
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** Section~\ref{structured-specifications}, it is necessary to be able to
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** move terms and modules from one level of reflection to another. The
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** functionality to move between levels is presented in
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** Section~\ref{changing-levels}, where functions \texttt{up} and
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** \texttt{down} on sorts \texttt{Module} and \texttt{Term} are defined. The
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** transformation of object-oriented modules into system modules in discussed
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** in Section~\ref{omod2modfunction}. The evaluation of module expressions is
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** discussed in Sections~\ref{evalModExp}, \ref{application-of-maps},
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \ref{instantiation}, and~\ref{renaming}.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder***
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** Changing Levels
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder***
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** Moving terms of sorts \texttt{Term} and \texttt{Module} from one
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** level of reflection to another is possible thanks to the
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \texttt{up} and \texttt{down} functions, which are defined,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** respectively, in the following modules \texttt{MOVE-UP} and
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \texttt{MOVE-DOWN}.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder***
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** The \texttt{up} Function
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder***
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** Given a term of sort \texttt{Module} or \texttt{Term}, the
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \texttt{up} function, defined in the following module
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \texttt{MOVE-UP}, returns the term metarepresenting it. The
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** function is just call the \texttt{upTerm} predefined function.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** We shall see in Section~\ref{bubble-parsing} how the \texttt{up} function
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** is used to evaluate the homonymous function discussed in
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** Section~\ref{structured-specifications}. In Section~\ref{instantiation} we
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** shall discuss how the \texttt{up} function is used to evaluate the
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** \texttt{META-LEVEL} module expression (see
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** Section~\ref{structured-specifications}).
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*******************************************************************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederfmod MOVE-UP is
473b81d33893192056dde74b26b2467f983c102cChristian Maeder pr META-LEVEL .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr CONVERSION .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op up : Module -> Term .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op up : Term -> Term .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op up : EquationSet -> Term .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq up(M:Module) = upTerm(M:Module) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq up(T:Term) = upTerm(T:Term) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq up(EqS:EquationSet) = upTerm(EqS:EquationSet) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederendfm
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*******************************************************************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder***
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** The \texttt{down} Function
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder***
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** Given a term of sort \texttt{Term} metarepresenting a term of sort
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \texttt{Term} or \texttt{Module}, the \texttt{down} function can be seen
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** as the inverse of the \texttt{up} function discussed in the previous
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** section, that is, it returns the original term that had been
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** metarepresented. There are also \texttt{down} functions for terms
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** metarepresenting terms in other sorts. We present here only some of them.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** We assume that the \texttt{down} functions are called with valid
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** metarepresentations. In fact, these functions should be declared as
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** partial functions going to error sorts when their arguments are invalid.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** The main application of the \texttt{down} functions is in the evaluation
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** of the \texttt{down} command (see
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** Section~\ref{structured-specifications}). However, they are also used in
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** other tasks, as for example in the parsing of some inputs.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*******************************************************************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederfmod MOVE-DOWN is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr UNIT .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr CONVERSION .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr INT-LIST .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op downTerm : Term -> [Term] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op downModule : Term -> [Module] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op downQid : Term -> [Qid] [memo] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op downQidList : Term -> [QidList] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op downTypes : Term -> [TypeList] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op downSorts : Term -> [SortSet] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op downSort : Term -> [Sort] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op downModExp : Constant -> [Header] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op downNat : Term -> [Int] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op downString : Term -> [String] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op downResultPair : Term -> [ResultPair] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op downTerm : TermList -> [Term] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op downImports : TermList -> [ImportList] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op downSubsorts : TermList -> [SubsortDeclSet] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op downOps : TermList -> [OpDeclSet] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op downEqCond : TermList -> [EqCondition] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op downCond : TermList -> [Condition] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op downMbs : TermList -> [MembAxSet] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op downEqs : TermList -> [EquationSet] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op downRls : TermList -> [RuleSet] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op downAttrs : TermList -> [AttrSet] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op downAttr : Term -> [Attr] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op downHooks : TermList -> [HookList] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op downMetaNat : Term -> [Term] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op downNat : TermList -> [IntList] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op downClasses : TermList -> [ClassDeclSet] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op downMsgs : TermList -> [MsgDeclSet] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op downSubclasses : TermList -> [SubclassDeclSet] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op downClassAttrs : TermList -> [AttrDeclSet] .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars T T' T'' T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 : Term .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars TL TL' : TermList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars QI QI' F V L : Qid .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var Ct : Constant .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var M : Module .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var Tp : Type .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq downResultPair('`{_`,_`}[T, T']) = {downTerm(T), downTerm(T')} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq downModule('fmod_is_sorts_.____endfm[T1, T2, T3, T4, T5, T6, T7])
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (fmod downModExp(T1) is
473b81d33893192056dde74b26b2467f983c102cChristian Maeder downImports(T2)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder sorts downSorts(T3) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder downSubsorts(T4)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder downOps(T5)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder downMbs(T6)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder downEqs(T7)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder endfm) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq downModule('mod_is_sorts_._____endm[T1, T2, T3, T4, T5, T6, T7, T8])
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (mod downModExp(T1) is
473b81d33893192056dde74b26b2467f983c102cChristian Maeder downImports(T2)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder sorts downSorts(T3) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder downSubsorts(T4)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder downOps(T5)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder downMbs(T6)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder downEqs(T7)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder downRls(T8)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder endm) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq downModule('omod_is_sorts_.________endom[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11])
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (omod downModExp(T1) is
473b81d33893192056dde74b26b2467f983c102cChristian Maeder downImports(T2)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder sorts downSorts(T3) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder downSubsorts(T4)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder downClasses(T5)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder downSubclasses(T6)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder downOps(T7)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder downMsgs(T8)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder downMbs(T9)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder downEqs(T10)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder downRls(T11)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder endom) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq downModExp(Ct) = downQid(Ct) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq downImports('nil.ImportList) = nil .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq downImports('__[TL]) = downImports(TL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq downImports('including_.[T]) = (including downModExp(T) .) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq downImports('extending_.[T]) = (extending downModExp(T) .) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq downImports('protecting_.[T]) = (protecting downModExp(T) .) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq downImports((TL, TL')) = (downImports(TL) downImports(TL')) if TL =/= empty /\ TL' =/= empty .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq downSubsorts('none.SubsortDeclSet) = none .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq downSubsorts('__[TL]) = downSubsorts(TL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq downSubsorts('subsort_<_.[T, T']) = (subsort downQid(T) < downQid(T') .) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq downSubsorts((TL, TL')) = (downSubsorts(TL) downSubsorts(TL')) if TL =/= empty /\ TL' =/= empty .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq downOps('none.OpDeclSet) = none .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq downOps('__[TL]) = downOps(TL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq downOps('op_:_->_`[_`].[Ct, T, T', T''])
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (op downQid(Ct) : downTypes(T) -> downQid(T') [downAttrs(T'')] .) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq downOps((TL, TL')) = (downOps(TL) downOps(TL')) if TL =/= empty /\ TL' =/= empty .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq downAttrs('none.AttrSet) = none .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq downAttrs('__[TL]) = downAttrs(TL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq downAttrs((TL, TL')) = (downAttr(TL) downAttrs(TL')) if TL =/= empty /\ TL' =/= empty .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq downAttrs(T)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = downAttr(T)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if T =/= 'none.AttrSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq downAttr('assoc.Attr) = assoc .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq downAttr('comm.Attr) = comm .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq downAttr('idem.Attr) = idem .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq downAttr('id[T]) = id(downTerm(T)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq downAttr('left-id[T]) = left-id(downTerm(T)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq downAttr('right-id[T]) = right-id(downTerm(T)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq downAttr('poly[T]) = poly(downNat(T)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq downAttr('strat[T]) = strat(downNat(T)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq downAttr('memo.Attr) = memo .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq downAttr('prec[T]) = prec(downNat(T)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq downAttr('gather[T]) = gather(downQidList(T)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq downAttr('ctor.Attr) = ctor .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq downAttr('special[T]) = special(downHooks(T)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq downAttr('iter.Attr) = iter .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq downAttr('frozen[T]) = frozen(downNat(T)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq downAttr('label[T]) = label(downQid(T)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq downAttr('config.Attr) = config .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq downAttr('object.Attr) = object .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq downAttr('msg.Attr) = msg .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq downAttr('nonexec.Attr) = nonexec .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq downAttr('variant.Attr) = variant .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq downAttr('metadata`(_`)['token[T]]) = metadata(downString(downQid(T))) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq downHooks('__[TL]) = downHooks(TL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq downHooks('id-hook[T, T']) = id-hook(downQid(T), downQidList(T')) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq downHooks('op-hook[T, T', T'', T3])
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = op-hook(downQid(T), downQid(T'), downQidList(T''), downQid(T3)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq downHooks('term-hook[T, T']) = term-hook(downQid(T), downTerm(T')) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq downHooks((TL, TL')) = downHooks(TL) downHooks(TL') if TL =/= empty /\ TL' =/= empty .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- eq downTerm(T) = downTerm(T, qidError('\r 'Error: '\o 'Incorrect 'term. '\n)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq downTerm(QI) = downQid(QI) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq downTerm('_`[_`][T, T']) = downQid(T)[downTerm(T')] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq downTerm('_`,_[T, TL]) = (downTerm(T), downTerm(TL)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq downTerm((T, TL)) = (downTerm(T), downTerm(TL)) if TL =/= empty .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq downTerm(F[TL])
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = qidError('\r 'Error: '\o 'Incorrect 'term. '\n) [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq downEqCond('_/\_[TL]) = downEqCond(TL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq downEqCond('_=_[T, T']) = downTerm(T) = downTerm(T') .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq downEqCond('_:_[T, T']) = downTerm(T) : downSort(T') .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq downEqCond('_:=_[T, T']) = downTerm(T) := downTerm(T') .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq downEqCond((TL, TL')) = downEqCond(TL) /\ downEqCond(TL') if TL =/= empty /\ TL' =/= empty .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq downCond('_/\_[TL]) = downCond(TL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq downCond('_=_[T, T']) = downEqCond('_=_[T, T']) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq downCond('_:_[T, T']) = downEqCond('_:_[T, T']) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq downCond('_:=_[T, T']) = downEqCond('_:=_[T, T']) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq downCond('_=>_[T, T']) = downTerm(T) => downTerm(T') .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq downCond((TL, TL')) = downCond(TL) /\ downCond(TL') if TL =/= empty /\ TL' =/= empty .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq downMbs('none.MembAxSet) = none .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq downMbs('__[TL]) = downMbs(TL) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq downMbs('mb_:_`[_`].[T, T', T''])
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (mb downTerm(T) : downSort(T') [downAttrs(T'')] .) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq downMbs('cmb_:_if_`[_`].[T, T', T'', T3])
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (cmb downTerm(T) : downSort(T') if downEqCond(T'') [downAttrs(T3)] .) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq downMbs((TL, TL')) = (downMbs(TL) downMbs(TL')) if TL =/= empty /\ TL' =/= empty .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq downEqs('none.EquationSet) = none .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq downEqs('__[TL]) = downEqs(TL) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq downEqs('eq_=_`[_`].[T, T', T''])
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (eq downTerm(T) = downTerm(T') [downAttrs(T'')] .) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq downEqs('ceq_=_if_`[_`].[T, T', T'', T3])
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (ceq downTerm(T) = downTerm(T') if downEqCond(T'') [downAttrs(T3)] .) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq downEqs((TL, TL')) = (downEqs(TL) downEqs(TL')) if TL =/= empty /\ TL' =/= empty .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq downRls('none.RuleSet) = none .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq downRls('__[TL]) = downRls(TL) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq downRls('rl_=>_`[_`].[T, T', T''])
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (rl downTerm(T) => downTerm(T') [downAttrs(T'')] .) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq downRls('crl_=>_if_`[_`].[T, T', T'', T3])
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (crl downTerm(T) => downTerm(T') if downCond(T'') [downAttrs(T3)] .) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq downRls((TL, TL')) = (downRls(TL) downRls(TL')) if TL =/= empty /\ TL' =/= empty .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq downSorts('none.EmptyTypeSet) = none .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- eq downSorts('none.SortSet) = none .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq downSorts('_;_[TL]) = downSorts(TL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq downSorts((TL, TL')) = (downSorts(TL) ; downSorts(TL')) if TL =/= empty /\ TL' =/= empty .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq downSorts(QI) = downSort(QI) [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq downSort(Ct) = downQid(Ct) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq downTypes('nil.TypeList) = nil .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq downTypes('__[TL]) = downTypes(TL) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ceq downTypes((TL, TL'))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = (downTypes(TL) downTypes(TL'))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if TL =/= empty /\ TL' =/= empty .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq downTypes(QI) = downSort(QI) [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq downQidList('nil.TypeList) = nil .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq downQidList('__[TL]) = downQidList(TL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq downQidList((TL, TL')) = (downQidList(TL) downQidList(TL')) if TL =/= empty /\ TL' =/= empty .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq downQidList(QI) = downQid(QI) [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq downQid(Ct)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = qid(substr(string(getName(Ct)), 1, length(string(getName(Ct))))) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder---- eq downQid(Ct) = downTerm(Ct) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq downMetaNat(QI)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = qid(substr(string(getName(QI)), 1, length(string(getName(QI))))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder + ".Nat") .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- eq downNat(T) = downTerm(T, numberError('Error: 'non 'valid 'metaterm)) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ceq downNat(QI)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = trunc(rat(string(getName(QI)), 10))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if getType(QI) == 'Nat or getType(QI) == 'NzNat .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ceq downNat(QI)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if substr(string(getName(QI)), 0 ,1) == "-"
473b81d33893192056dde74b26b2467f983c102cChristian Maeder then - trunc(rat(substr(string(getName(QI)), 1,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder length(string(getName(QI)))), 10))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder else trunc(rat(string(getName(QI)), 10))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if getType(QI) == 'Int or getType(QI) == 'NzInt .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq downNat('0.Zero) = 0 .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq downNat('s_['0.Zero]) = 1 .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ceq downNat(F['0.Zero])
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = trunc(rat(substr(string(F), 3, 2), 10))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if substr(string(F), 0, 3) = "s_^" .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq downString(QI) = substr(string(QI), 1, _-_(length(string(QI)), 2)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq downNat('__[TL]) = downNat(TL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq downNat((TL, TL')) = (downNat(TL) downNat(TL')) if TL =/= empty /\ TL' =/= empty .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq downClasses('none.ClassDeclSet) = none .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq downClasses('__[TL]) = downClasses(TL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq downClasses((TL, TL')) = (downClasses(TL) downClasses(TL')) if TL =/= empty /\ TL' =/= empty .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq downClasses('class_|_.[T, T']) = (class downSort(T) | downClassAttrs(T') .) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq downClassAttrs('none.AttrDeclSet) = none .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq downClassAttrs('_`,_[TL]) = downClassAttrs(TL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq downClassAttrs((TL, TL')) = (downClassAttrs(TL), downClassAttrs(TL')) if TL =/= empty /\ TL' =/= empty .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq downClassAttrs('attr_:_[T, T']) = (attr downQid(T) : downSort(T')) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq downSubclasses('none.SubclassDeclSet) = none .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq downSubclasses('__[TL]) = downSubclasses(TL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq downSubclasses((TL, TL')) = (downSubclasses(TL) downSubclasses(TL')) if TL =/= empty /\ TL' =/= empty .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq downSubclasses('subclass_<_.[T, T']) = (subclass downQid(T) < downQid(T') .) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq downMsgs('none.MsgDeclSet) = none .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq downMsgs('__[TL]) = downMsgs(TL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq downMsgs((TL, TL')) = (downMsgs(TL) downMsgs(TL')) if TL =/= empty /\ TL' =/= empty .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq downMsgs('msg_:_->_.[Ct, T, T'])
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (msg downQid(Ct) : downTypes(T) -> downQid(T') .) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederendfm
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*******************************************************************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder***
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** Parsing of Bubbles
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder***
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** As discussed in Section~\ref{implementation-introduction}, in Full Maude,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** the parsing process is split into two phases. In a first stage, the input
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** is parsed using the top-level grammar for Full Maude modules, theories,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** views, and commands. Once this first stage is completed, we get a term
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** with bubbles in it, which is converted into a module, theory, or view.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** This unit or view may still have the bubbles in it. We say that a module
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** with bubbles is a premodule, a view with bubbles a preview, and so on. The
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** second stage of the process consists in taking this preunit or preview and
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** converting the bubbles in it into terms by parsing them in the appropriate
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** signatures, obtaining a `valid' unit or view out of it, or otherwise a
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** parsing error. In the case of commands, if they contain any bubble, the
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** same will have to be done. All bubbles have to be parsed in the
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** appropriate signature before any further processing can be done with the
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** module, view, or command in which they appear.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder***
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** Parsing of Module Expressions
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder***
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** Before introducing the \texttt{parseDecl} function, we present some
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** auxiliary functions. For example, the following functions
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \texttt{parseType}, \texttt{parseSortSet}, and \texttt{parseTypeList}
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** return, respectively, the sort, set of sorts, and list of sorts
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** represented by the term given as argument. Note that these functions, as
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** most of the functions in this module, are partial functions. We assume
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** that the term given as argument is in fact the representation of, for
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** example, a valid sort, or set of sorts, etc. In the case of
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** \texttt{parseDecl} we assume that the term is the representation of a
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** predeclaration.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*******************************************************************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederfmod MOD-EXP-PARSING is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr MOVE-DOWN .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr INT-LIST .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr VIEW-EXPR-TO-QID .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars T T' T'' T3 T4 : Term .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars T? T?' : [Term] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var TL TL' : TermList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var QIL : QidList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var Ct : Constant .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var AtS : AttrSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars QI F : Qid .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var CD? : [Condition] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars S S' : Sort .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var TyL : TypeList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op parseSort : Term ~> Sort .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op parseType : Term ~> Type .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op parseSortSet : Term ~> SortSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op parseTypeList : Term ~> TypeList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op parseViewExp : Term ~> ViewExp .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op parseParameterList : Term ~> ParameterList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq parseSort('sortToken[T])
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = if downQid(T) :: Type
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then downQid(T)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else qidError('\r 'Warning: '\o downQid(T) 'is 'not 'a 'valid 'sort. '\n)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq parseSort('_`{_`}[T, T'])
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = qid(string(parseSort(T))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder + "{" + string(parameterList2Qid(parseParameterList(T'))) + "}") .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parseSort(T) = qidError('\r 'Warning: '\o 'invalid 'sort. '\n) [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq parseType('`[_`][T])
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ---- = kind(parseSort(T)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = qid("[" + string(parseSort(T)) + "]") .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parseType(T) = parseSort(T) [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parseSortSet('__[T, T']) = (parseSort(T) ; parseSortSet(T')) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parseSortSet(T) = parseSort(T) [owise].
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parseTypeList('__[T, T']) = (parseType(T) parseTypeList(T')) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parseTypeList(T) = parseType(T) [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq parseViewExp('viewToken[T])
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = if downQid(T) :: Sort
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then downQid(T)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else qidError('\r 'Warning: '\o downQid(T) 'is 'not 'a 'valid 'sort. '\n)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq parseViewExp('_`{_`}[T, T'])
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = parseViewExp(T){parseParameterList(T')} .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq parseViewExp(T)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = qidError('\r 'Warning: '\o 'invalid 'view 'expression. '\n)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq parseParameterList('_`,_[T, T'])
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = parseViewExp(T), parseParameterList(T') .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parseParameterList(T) = parseViewExp(T) [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** The function \texttt{parseModExp} takes a term representing a
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** module expression and returns the corresponding term in sort
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** \texttt{ModuleExpression}. In case of adding new constructors for module
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** expressions, as it will be done in Section~\ref{extension}, new equations d
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** efining the semantics of the function on them will have to be given.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op parseModExp : Term -> ModuleExpression .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op parseMaps : Term -> RenamingSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op parseAttrs : Term -> AttrSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parseModExp('token[T]) = downQid(T) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parseModExp('`(_`)[T]) = parseModExp(T) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq parseModExp('_`{_`}[T, T'])
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = _`{_`}(parseModExp(T), parseParameterList(T')) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parseModExp('_*`(_`)[T, T']) = _*`(_`)(parseModExp(T), parseMaps(T')) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parseModExp('_+_[T, T']) = parseModExp(T) + parseModExp(T') .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parseModExp('TUPLE`[_`]['token[T]]) = TUPLE[parseNat(T)] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parseModExp('POWER`[_`]['token[T]]) = POWER[parseNat(T)] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parseMaps('_`,_[T, T']) = (parseMaps(T), parseMaps(T')) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parseMaps('sort_to_[T, T']) = (sort parseType(T) to parseType(T')) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq parseMaps('label_to_['token[T], 'token[T']])
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (label downQid(T) to downQid(T')) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parseMaps('class_to_[T, T']) = (class parseType(T) to parseType(T')) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parseMaps('attr_._to_[T, 'token[T'], 'token[T'']])
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (attr downQid(T') . parseType(T) to downQid(T'')) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq parseMaps('msg_to_['token[T], 'token[T']])
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (msg downQid(T) to downQid(T')) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parseMaps('msg_:_->_to_['token[T], T', T'', 'token[T3]])
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (msg downQid(T) : parseTypeList(T') -> parseType(T'') to downQid(T3)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parseMaps('msg_:`->_to_['token[T], T', 'token[T'']])
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (msg downQid(T) : nil -> parseType(T') to downQid(T'')) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parseMaps('op_to_`[_`]['token[T], 'token[T'], T''])
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (op downQid(T) to downQid(T') [parseAttrs(T'')]) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parseMaps('op_:_->_to_`[_`]['token[T], T', T'', 'token[T3], T4])
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = (op downQid(T) : parseTypeList(T') -> parseType(T'') to downQid(T3)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [parseAttrs(T4)]) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parseMaps('op_:`->_to_`[_`]['token[T], T', 'token[T''], T3])
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = (op downQid(T) : nil -> parseType(T') to downQid(T'')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [parseAttrs(T3)]) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parseMaps('op_:_~>_to_`[_`]['token[T], T', T'', 'token[T3], T4])
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = (op downQid(T) : kind(parseTypeList(T')) -> kind(parseType(T''))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder to downQid(T3) [parseAttrs(T4)]) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parseMaps('op_:`~>_to_`[_`]['token[T], T', 'token[T''], T3])
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = (op downQid(T) : nil -> kind(parseType(T')) to downQid(T'')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [parseAttrs(T3)]) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq parseMaps('op_to_['token[T], 'token[T']])
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (op downQid(T) to downQid(T') [none]) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parseMaps('op_:_->_to_['token[T], T', T'', 'token[T3]])
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = (op downQid(T) : parseTypeList(T') -> parseType(T'') to downQid(T3)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [none]) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parseMaps('op_:`->_to_['token[T], T', 'token[T'']])
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (op downQid(T) : nil -> parseType(T') to downQid(T'') [none]) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parseMaps('op_:_~>_to_['token[T], T', T'', 'token[T3]])
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = (op downQid(T) : kind(parseTypeList(T')) -> kind(parseType(T''))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder to downQid(T3) [none]) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parseMaps('op_:`~>_to_['token[T], T', 'token[T'']])
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (op downQid(T) : nil -> kind(parseType(T')) to downQid(T'') [none]) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parseAttrs('__[T, T']) = (parseAttrs(T) parseAttrs(T')) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parseAttrs('assoc.@Attr@) = assoc .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parseAttrs('associative.@Attr@) = assoc .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parseAttrs('comm.@Attr@) = comm .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parseAttrs('commutative.@Attr@) = comm .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parseAttrs('idem.@Attr@) = idem .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parseAttrs('idempotent.@Attr@) = idem .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parseAttrs('id:_[T]) = none .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parseAttrs('identity:_[T]) = none .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parseAttrs('left`id:_[T]) = none .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parseAttrs('left`identity:_[T]) = none .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parseAttrs('right`id:_[T]) = none .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parseAttrs('right`identity:_[T]) = none .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parseAttrs('poly`(_`)[T]) = poly(parseInt(T)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parseAttrs('strat`(_`)[T]) = none .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parseAttrs('strategy`(_`)[T]) = none .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parseAttrs('memo.@Attr@) = none .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parseAttrs('memoization.@Attr@) = none .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parseAttrs('prec_['token[T]]) = prec(parseNat(T)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parseAttrs('precedence_['token[T]]) = prec(parseNat(T)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parseAttrs('prec_['`(_`)['token[T]]]) = prec(parseNat(T)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parseAttrs('precedence_['`(_`)['token[T]]]) = prec(parseNat(T)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parseAttrs('gather`(_`)['neTokenList[T]]) = gather(downQidList(T)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parseAttrs('gathering`(_`)['neTokenList[T]]) = gather(downQidList(T)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parseAttrs('format`(_`)['neTokenList[T]]) = none .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parseAttrs('ctor.@Attr@) = ctor .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parseAttrs('constructor.@Attr@) = ctor .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parseAttrs('frozen.@Attr@) = none .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parseAttrs('frozen`(_`)[T]) = none .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parseAttrs('iter.@Attr@) = iter .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parseAttrs('ditto.@Attr@) = ditto .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parseAttrs('special`(_`)[T]) = parseSpecial(parseHookList(T)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parseAttrs('config.@Attr@) = config .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parseAttrs('object.@Attr@) = object .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parseAttrs('msg.@Attr@) = msg .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parseAttrs('message.@Attr@) = msg .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parseAttrs('metadata_['token[T]]) = metadata(downString(downQid(T))) .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq parseAttrs('variant.@Attr@) = variant .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq parseAttrs('nonexec.@Attr@) = nonexec .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op parseSpecial : Set<Hook> -> Attr .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op parseHookList : Term -> Set<Hook> .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op hookList : Set<Hook> -> HookList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder sort Set<Hook> .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder subsort Hook < Set<Hook> .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op none : -> Set<Hook> .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op _._ : Set<Hook> Set<Hook> -> Set<Hook> [assoc comm id: none] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var SH : Set<Hook> .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var H : Hook .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parseSpecial(none) = none .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parseSpecial(SH) = special(hookList(SH)) [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parseHookList('__[T, TL]) = parseHookList(T) . parseHookList(TL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parseHookList('id-hook_['token[T]]) = id-hook(downQid(T), nil) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parseHookList('id-hook_`(_`)['token[T], 'neTokenList[T']])
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = id-hook(downQid(T), downQidList(T')) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parseHookList(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder 'op-hook_`(_:_->_`)[
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder 'token[T], 'token[T'], 'neTokenList[T''], 'token[T3]])
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = op-hook(downQid(T), downQid(T'), downTypes(T''), downQid(T3)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parseHookList('op-hook_`(_:`->_`)['token[T], 'token[T'], 'token[T'']])
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = op-hook(downQid(T), downQid(T'), nil, downQid(T'')) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parseHookList(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder 'op-hook_`(_:_~>_`)[
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder 'token[T], 'token[T'], 'neTokenList[T''], 'token[T3]])
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = op-hook(downQid(T), downQid(T'), downTypes(T''), downQid(T3)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parseHookList('op-hook_`(_:`~>_`)['token[T], 'token[T'], 'token[T'']])
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = op-hook(downQid(T), downQid(T'), nil, downQid(T'')) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parseHookList('term-hook_`(_`)['token[T], T']) = none .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq hookList(H) = H .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq hookList(H . SH) = H hookList(SH) [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** Given a term representing a machine integer, the function
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \texttt{parseInt} returns the corresponding integer.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op parseNat : Term -> Nat .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op parseInt : Term -> Int .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op parseInt : TermList -> IntList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parseInt(('neTokenList['__[TL]], TL')) = parseInt(TL) parseInt(TL') .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parseInt(('neTokenList[QI], TL)) = parseInt(QI) parseInt(TL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parseInt(empty) = nil .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parseInt((T, TL)) = parseInt(T) parseInt(TL) [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parseInt(nil) = nil .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq parseInt(Ct)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = downNat(
473b81d33893192056dde74b26b2467f983c102cChristian Maeder qid(substr(string(getName(Ct)), 1, length(string(getName(Ct))))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder + ".Int")) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq parseNat(Ct)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = downNat(
473b81d33893192056dde74b26b2467f983c102cChristian Maeder qid(substr(string(getName(Ct)), 1, length(string(getName(Ct))))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder + ".Nat")) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederendfm
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*******************************************************************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder***
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** Parsing of Bubbles
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder***
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** In the following module \texttt{BUBBLE-PARSING}, the definitions for the
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** basic processing of bubbles are introduced. In it we declare a function
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** \texttt{solveBubbles} which takes a bubble and some other arguments and
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** returns the term resulting from parsing it.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*******************************************************************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederfmod BUBBLE-PARSING is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr DATABASE .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr MOVE-UP .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr MOVE-DOWN .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr MOD-EXP-PARSING .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr PRINT-SYNTAX-ERROR .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars T T' : Term .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars M M' : Module .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var B : Bool .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var QIL : QidList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars DB DB' : Database .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var TL : TermList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var S : Sort .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars QI QI' F : Qid .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var VDS : OpDeclSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var C : Constant .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var V : Variable .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var N : Nat .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var Tp : Type .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var RP : [ResultPair] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var MN : ModuleName .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var ME : ModuleExpression .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var U : Module .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var Cond : Condition .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op resultPairError : QidList -> [ResultPair] [ctor] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** As we shall see in Section~\ref{evaluation}, a declaration importing the
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** predefined module \texttt{UP} (see Section~\ref{non-built-in-predefined})
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** is added to all modules importing the \texttt{META-LEVEL} module. The
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \texttt{solveBubbles} function is called with a `flag' indicating whether
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** the module can contain calls to the \texttt{up} function or not. Thus,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** when we call \texttt{metaParse} with some bubble and the module in which
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** such bubble has to be parsed, if there are occurrences of the function
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** \texttt{up} in it, they will be of the form \verb~'token[T]]~ or
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** \verb~'up['token[T], 'bubble[T']]~ for terms \texttt{T} and \texttt{T'}.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** The function \texttt{solveUps} will evaluate them.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op solveBubbles : Term Module Bool OpDeclSet Database -> [Term] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op solveUps : TermList Database -> [TermList] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op solveUpsCondition : Condition Database -> Condition .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op solveUpsModExp : TermList Database -> [TermList] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op constsToVars : Term OpDeclSet -> Term [memo] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op constsToVars : TermList OpDeclSet -> TermList [memo] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op constsToVarsAux : Constant OpDeclSet -> Qid [memo] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq constsToVars(F[TL], VDS) = F[constsToVars(TL, VDS)] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq constsToVars(C, VDS) = constsToVarsAux(C, VDS) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq constsToVars(V, VDS) = V .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq constsToVars(qidError(QIL), VDS) = qidError(QIL) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ceq constsToVars((T, TL), VDS)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = (constsToVars(T, VDS), constsToVars(TL, VDS))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if TL =/= empty .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq constsToVarsAux(C, (op F : nil -> Tp [none] .) VDS)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = if getName(C) == F
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then qid(string(F) + ":" + string(Tp))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else constsToVarsAux(C, VDS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq constsToVarsAux(C, none) = C .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ceq solveBubbles('bubble[T], M, true, VDS, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** if META-LEVEL is a submodule the ups need to be solved
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if RP :: ResultPair
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then solveUps(constsToVars(getTerm(RP), VDS), DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else qidError('\r 'Warning: '\o printSyntaxError(RP, QIL) '\n
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder '\r 'Error: '\o 'no 'parse 'for QIL '\n)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder fi
473b81d33893192056dde74b26b2467f983c102cChristian Maeder if M' := addOps(VDS, M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder /\ QIL := downQidList(T)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder /\ RP := metaParse(M', QIL, anyType) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ceq solveBubbles('bubble[T], M, false, VDS, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if RP :: ResultPair
473b81d33893192056dde74b26b2467f983c102cChristian Maeder then constsToVars(getTerm(RP), VDS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else qidError('\r 'Warning: '\o printSyntaxError(RP, QIL) '\n
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder '\r 'Error: '\o 'no 'parse 'for QIL '\n)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder fi
473b81d33893192056dde74b26b2467f983c102cChristian Maeder if M' := addOps(VDS, M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder /\ QIL := downQidList(T)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder /\ RP := metaParse(M', QIL, anyType) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** The \texttt{solveBubbles1} function is in charge of calling the function
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** \texttt{metaParse}. The flag indicating the inclusion of the module
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** \texttt{META-LEVEL} in the module in which the term appears decides
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** whether the function \texttt{solveUps} is called or not, so the extra
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** price of searching for calls to the \texttt{up} function is paid only
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** when an occurrence of the function is possible. This function takes care
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** of the occurrences of the \texttt{up} function that may exist in such
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** bubbles.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** The function \texttt{solveUps} goes through the term looking for a term
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** with \texttt{'up} as top operator and \texttt{'token} as top operator of
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** its unique argument if there is only one argument, or with \texttt{'token}
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** and \texttt{'bubble} as top operators of its first and second arguments,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** respectively, if there are two. If a term of the form
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \mbox{\texttt{'up['token[T]]}} is reached, it is replaced by the
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** metarepresentation of the flat version of the module in the database with
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** the name given by the token. If a term of form
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** \mbox{\texttt{'up['token[T], 'bubble[T']]}} is reached, the
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** metarepresentation of the result of parsing the bubble in the signature
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** of the module with the name given by the token, after solving possible
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** nested calls to the \texttt{up} function, is returned.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq solveUps(QI, DB) = QI .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq solveUps(F[TL], DB) = F[solveUps(TL, DB)] [owise] .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ceq solveUps((T, TL), DB)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = (solveUps(T, DB), solveUps(TL, DB))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if TL =/= empty .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq solveUps('upModule['token[T]], DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = solveUpsModExp('upModule['token[T]], DB) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq solveUps('upModule['`(_`)[T]], DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = solveUpsModExp('upModule['`(_`)[T]], DB) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq solveUps('upModule['_`{_`}[T, T']], DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = solveUpsModExp('upModule['_`{_`}[T, T']], DB) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq solveUps('upModule['_*`(_`)[T, T']], DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = solveUpsModExp('upModule['_*`(_`)[T, T']], DB) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq solveUps('upModule['_+_[T, T']], DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = solveUpsModExp('upModule['_+_[T, T']], DB) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq solveUps('upModule['TUPLE`[_`]['token[T]]], DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = solveUpsModExp('upModule['TUPLE`[_`]['token[T]]], DB) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq solveUps('upModule['POWER`[_`]['token[T]]], DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = solveUpsModExp('upModule['POWER`[_`]['token[T]]], DB) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq solveUpsCondition(T = T' /\ Cond, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = solveUps(T, DB) = solveUps(T', DB) /\ solveUpsCondition(Cond, DB) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq solveUpsCondition(T : S /\ Cond, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = solveUps(T, DB) : S /\ solveUpsCondition(Cond, DB) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq solveUpsCondition(T := T' /\ Cond, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = T := solveUps(T', DB) /\ solveUpsCondition(Cond, DB) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq solveUpsCondition(T => T' /\ Cond, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = solveUps(T, DB) => solveUps(T', DB) /\ solveUpsCondition(Cond, DB) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq solveUpsCondition(nil, DB) = nil .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq solveUpsModExp('upModule[T], DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = up(getFlatModule(MN, DB'))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder if < DB' ; MN > := evalModExp(parseModExp(T), DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder /\ unitInDb(MN, DB') .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq solveUpsModExp('upModule[T], DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = qidError('\r 'Error: '\o 'Module header2QidList(MN) 'not 'in 'database. '\n)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if MN := parseModExp(T)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq solveUps('upTerm['token[T], 'bubble[T']], DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = solveUpsModExp('upTerm['token[T], 'bubble[T']], DB) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq solveUps('upTerm['`(_`)[T], 'bubble[T']], DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = solveUpsModExp('upTerm['`(_`)[T], 'bubble[T']], DB) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq solveUps('upTerm['_`{_`}[T, T'], 'bubble[T']], DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = solveUpsModExp('upTerm['_`{_`}[T, T'], 'bubble[T']], DB) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq solveUps('upTerm['_*`(_`)[T, T'], 'bubble[T']], DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = solveUpsModExp('upTerm['_*`(_`)[T, T'], 'bubble[T']], DB) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq solveUps('upTerm['_+_[T, T'], 'bubble[T']], DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = solveUpsModExp('upTerm['_+_[T, T'], 'bubble[T']], DB) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq solveUps('upTerm['TUPLE`[_`]['token[T]], 'bubble[T']], DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = solveUpsModExp('upTerm['TUPLE`[_`]['token[T]], 'bubble[T']], DB) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq solveUps('upTerm['POWER`[_`]['token[T]], 'bubble[T']], DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = solveUpsModExp('upTerm['POWER`[_`]['token[T]], 'bubble[T']], DB) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq solveUpsModExp('upTerm[T, 'bubble[T']], DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if included('META-MODULE, getImports(getInternalModule(MN, DB')), DB')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then if metaParse(U, QIL, anyType) :: ResultPair
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then up(solveUps(getTerm(metaParse(U, QIL, anyType)), DB'))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder else qidError('\r 'Warning: '\o
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder 'No 'parse 'for 'argument 'of 'up
473b81d33893192056dde74b26b2467f983c102cChristian Maeder printSyntaxError(metaParse(U, QIL, anyType), QIL)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder '\n)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else if metaParse(U, QIL, anyType) :: ResultPair
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then up(getTerm(metaParse(U, QIL, anyType)))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder else qidError('\r 'Warning: '\o
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder 'No 'parse 'for 'argument 'of 'up
473b81d33893192056dde74b26b2467f983c102cChristian Maeder printSyntaxError(metaParse(U, QIL, anyType), QIL)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder '\n)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi
473b81d33893192056dde74b26b2467f983c102cChristian Maeder if < DB' ; MN > := evalModExp(parseModExp(T), DB)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder /\ U := getFlatModule(MN, DB')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder /\ QIL := downQidList(T').
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq solveUpsModExp('upTerm[T, 'bubble[T']], DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = qidError('\r 'Error: 'op '\o 'Module header2QidList(ME) 'not 'in 'database. '\n)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if ME := parseModExp(T)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq solveUps('`[_`][QI], DB) = '`[_`][QI] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq solveUps('`[_`]['token[T]], DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = up(getFlatModule(QI, database(evalModExp(QI, DB))))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if QI := downQid(T) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq solveUps('`[_`][F[TL]], DB) = '`[_`][F[solveUps(TL, DB)]] [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederendfm
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*******************************************************************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder***
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** Parsing the Bubbles in a Module
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder***
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** The \texttt{solveBubbles} function defined in the
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \texttt{UNIT-BUBBLE-PARSING} module takes a term of sort \texttt{Module} (a
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** preunit in fact) and a signature, and returns the unit resulting from the
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** evaluation (parsing) of all the bubbles in it.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*******************************************************************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maederview AttrSet from TRIV to META-LEVEL is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder sort Elt to AttrSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederendv
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederfmod UNIT-BUBBLE-PARSING is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr BUBBLE-PARSING .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr DATABASE .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr MOVE-UP .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr MOVE-DOWN .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr PRINT-SYNTAX-ERROR .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars T T' T'' T3 T4 : Term .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars T? T?' : [Term] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars TL TL' TL'' : TermList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars TL? TL?' : [TermList] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var B : Bool .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars M M' M'' : Module .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var DB : Database .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars PU U U' : Module .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var K : Kind .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var KS : KindSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars S S' : Sort .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var SS : SortSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var VE : ViewExp .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars Ty Ty' Tp : Type .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars TyL TyL' : TypeList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var At : Attr .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars AtS AtS' AtS'' : AttrSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var NL : IntList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var QI QI' QI'' QI3 QI4 QI5 F L : Qid .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars QIL QIL' : QidList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var I : Nat .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var Hk : Hook .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var HkL : HookList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var MAS : MembAxSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var Eq : Equation .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var EqS : EquationSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var Rl : Rule .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var RlS : RuleSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var OPD : OpDecl .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars OPDS OPDS' OPDS'' VDS : OpDeclSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var CD? : [Condition] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var Ct : Constant .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var RP : [ResultPair] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var St : String .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** In the parsing of bubbles themselves, we consider three different cases:
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** The case of having one single bubble in which no context is
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** considered (used to parse bubbles in term maps in views and in the
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** special attributes of operators); the case of two bubbles to be parsed in
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** the same connected component (used for bubbles in equations and rules),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** and the case of one bubble to be parsed in a specific sort (used for the
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** bubbles appearing in the identity element attributes in the declarations
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** of operators, and in membership axioms). These three cases are reduced to
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** the case of one single bubble without context, which is handled by the
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** function \texttt{solveBubbles3}.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op solveBubblesEq : Term Term Module Bool OpDeclSet Database -> Term .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op solveBubblesCEq : Term Term Module Bool OpDeclSet Database -> Term .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op solveBubblesRl : Term Term Module Bool OpDeclSet Database -> Term .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op solveBubblesCRl : Term Term Module Bool OpDeclSet Database -> Term .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op solveBubbles2 : Term [Type] Module Bool OpDeclSet Database -> Term .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op solveBubblesCond : Term Module Module Bool OpDeclSet Database -> [Condition] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op conditionError : QidList -> [Condition] [ctor format (r o)] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** The case of two bubbles, generated in the case of equations and rules, is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** reduced to the case with one single bubble using the polymorphic operator
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** \verb~_==_~ and enclosing each of the bubbles in parentheses. Below, we
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** shall see how after calling this function the terms corresponding to each
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** of the bubbles is extracted.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq solveBubblesEq('bubble[T], 'bubble[T'], M, B, VDS, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if RP :: ResultPair
473b81d33893192056dde74b26b2467f983c102cChristian Maeder then if B
473b81d33893192056dde74b26b2467f983c102cChristian Maeder then solveUps(constsToVars(getTerm(RP), VDS), DB)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder else constsToVars(getTerm(RP), VDS)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder fi
473b81d33893192056dde74b26b2467f983c102cChristian Maeder else qidError('\r 'Warning:
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder '\o printSyntaxError(RP, '`( QIL '`) '= '`( QIL' '`)) '\n
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder '\r 'Error: '\o 'no 'parse 'for 'eq QIL '\s '~ '\s QIL' '\n)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder fi
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if M' := addOps((VDS
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op '_=_ : 'Universal 'Universal -> '@@@ [poly(1 2)] .),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder addSorts('@@@, M))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder /\ QIL := downQidList(T)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder /\ QIL' := downQidList(T')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder /\ RP := metaParse(M', '`( QIL '`) '= '`( QIL' '`), '@@@) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq solveBubblesCEq('bubble[T], 'bubble[T'], M, B, VDS, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if RP :: ResultPair
473b81d33893192056dde74b26b2467f983c102cChristian Maeder then if B
473b81d33893192056dde74b26b2467f983c102cChristian Maeder then solveUps(constsToVars(getTerm(RP), VDS), DB)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder else constsToVars(getTerm(RP), VDS)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder fi
473b81d33893192056dde74b26b2467f983c102cChristian Maeder else qidError('\r 'Warning:
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder '\o printSyntaxError(RP, '`( QIL '`) '= '`( QIL' '`)) '\n
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder '\r 'Error: '\o 'no 'parse 'for 'ceq QIL '\s '~ '\s QIL' '\n)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder fi
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if M' := addOps((VDS
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op '_=_ : 'Universal 'Universal -> '@@@ [poly(1 2)] .),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder addSorts('@@@, M))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder /\ QIL := downQidList(T)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder /\ QIL' := downQidList(T')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder /\ RP := metaParse(M', '`( QIL '`) '= '`( QIL' '`), '@@@) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq solveBubblesRl('bubble[T], 'bubble[T'], M, B, VDS, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if RP :: ResultPair
473b81d33893192056dde74b26b2467f983c102cChristian Maeder then if B
473b81d33893192056dde74b26b2467f983c102cChristian Maeder then solveUps(constsToVars(getTerm(RP), VDS), DB)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder else constsToVars(getTerm(RP), VDS)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder fi
473b81d33893192056dde74b26b2467f983c102cChristian Maeder else qidError('\r 'Warning:
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder '\o printSyntaxError(RP, '`( QIL '`) '=> '`( QIL' '`)) '\n
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder '\r 'Error: '\o 'no 'parse 'for 'rl QIL '\s '=> '\s QIL' '\n)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder fi
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if M' := addOps((VDS
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op '_=>_ : 'Universal 'Universal -> '@@@ [poly(1 2)] .),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder addSorts('@@@, M))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder /\ QIL := downQidList(T)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder /\ QIL' := downQidList(T')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder /\ RP := metaParse(M', '`( QIL '`) '=> '`( QIL' '`), '@@@) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq solveBubblesCRl('bubble[T], 'bubble[T'], M, B, VDS, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if RP :: ResultPair
473b81d33893192056dde74b26b2467f983c102cChristian Maeder then if B
473b81d33893192056dde74b26b2467f983c102cChristian Maeder then solveUps(constsToVars(getTerm(RP), VDS), DB)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder else constsToVars(getTerm(RP), VDS)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder fi
473b81d33893192056dde74b26b2467f983c102cChristian Maeder else qidError('\r 'Warning:
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder '\o printSyntaxError(RP, '`( QIL '`) '=> '`( QIL' '`)) '\n
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder '\r 'Error: '\o 'no 'parse 'for 'crl QIL '\s '=> '\s QIL' '\n)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder fi
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if M' := addOps((VDS
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op '_=>_ : 'Universal 'Universal -> '@@@ [poly(1 2)] .),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder addSorts('@@@, M))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder /\ QIL := downQidList(T)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder /\ QIL' := downQidList(T')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder /\ RP := metaParse(M', '`( QIL '`) '=> '`( QIL' '`), '@@@) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq solveBubbles2('bubble[T], T?:Type?, M, true, VDS, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if RP :: ResultPair
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then solveUps(constsToVars(getTerm(RP), VDS), DB)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder else qidError('\r 'Warning:
473b81d33893192056dde74b26b2467f983c102cChristian Maeder '\o printSyntaxError(RP, QIL) '\n
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder '\r 'Error: 'No 'parse 'for QIL '\n)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder fi
473b81d33893192056dde74b26b2467f983c102cChristian Maeder if QIL := downQidList(T)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder /\ RP := metaParse(M, QIL, T?:Type?) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq solveBubbles2('bubble[T], T?:Type?, M, false, VDS, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if RP :: ResultPair
473b81d33893192056dde74b26b2467f983c102cChristian Maeder then constsToVars(getTerm(RP), VDS)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder else qidError('\r 'Warning: '\o printSyntaxError(RP, QIL) '\n
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder '\r 'Error: 'No 'parse 'for QIL '\n)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder fi
473b81d33893192056dde74b26b2467f983c102cChristian Maeder if QIL := downQidList(T)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder /\ RP := metaParse(M, QIL, T?:Type?) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op addInfoConds : Module -> [Module] .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op addInfoConds : Module SortSet -> Module .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq addInfoConds(M) = addInfoConds(M, getAllSorts(M)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq addInfoConds(M, '@Token@ ; SS) = addInfoConds(M, SS) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq addInfoConds(M, '@Bubble@ ; SS) = addInfoConds(M, SS) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq addInfoConds(M, S ; SS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = addInfoConds(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder addOps(op qid(string(S)) : nil -> '@Sort@ [ctor] .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op '_:_ : S '@Sort@ -> '@Condition@ [ctor prec(71)] ., M),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder SS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [owise] .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq addInfoConds(M, none)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = addOps(op '_/\_ : '@Condition@ '@Condition@ -> '@Condition@
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [ctor assoc prec(73)] .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op '_=_ : 'Universal 'Universal -> '@Condition@
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [ctor poly(1 2) prec(71)] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op '_:=_ : 'Universal 'Universal -> '@Condition@
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [ctor poly(1 2) prec(71)] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op '_=>_ : 'Universal 'Universal -> '@Condition@
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [ctor poly(1 2) prec(71)] .,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder addSorts('@Condition@ ; '@Sort@,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if 'Bool in getSorts(M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then addSubsorts(subsort 'Bool < '@Condition@ ., M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else M
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq solveBubblesCond('bubble[T], M, M', B, VDS, DB)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = if 'Bool in getSorts(M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder and-then metaParse(M, QIL, 'Bool) :: ResultPair
473b81d33893192056dde74b26b2467f983c102cChristian Maeder then if B
473b81d33893192056dde74b26b2467f983c102cChristian Maeder then solveUps(constsToVars(getTerm(metaParse(M, QIL, 'Bool)), VDS), DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = 'true.Bool
473b81d33893192056dde74b26b2467f983c102cChristian Maeder else constsToVars(getTerm(metaParse(M, QIL, 'Bool)), VDS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = 'true.Bool
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else if metaParse(M', QIL, '@Condition@) :: ResultPair
473b81d33893192056dde74b26b2467f983c102cChristian Maeder then if B
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then solveUpsCondition(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder parseCond(getTerm(metaParse(M', QIL, '@Condition@)), VDS), DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else parseCond(getTerm(metaParse(M', QIL, '@Condition@)), VDS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi
473b81d33893192056dde74b26b2467f983c102cChristian Maeder else conditionError('\r 'Warning: '\o
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder printSyntaxError(metaParse(M', QIL, '@Condition@), QIL) '\n)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi
473b81d33893192056dde74b26b2467f983c102cChristian Maeder fi
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if QIL := downQidList(T) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op parseCond : Term OpDeclSet -> Condition .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parseCond('_/\_[T, T'], VDS) = parseCond(T, VDS) /\ parseCond(T', VDS) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq parseCond('_=_[T, T'], VDS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = constsToVars(T, VDS) = constsToVars(T', VDS) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parseCond('_:_[T, T'], VDS) = constsToVars(T, VDS) : getName(T') .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq parseCond('_:=_[T, T'], VDS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = constsToVars(T, VDS) := constsToVars(T', VDS) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq parseCond('_=>_[T, T'], VDS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = constsToVars(T, VDS) => constsToVars(T', VDS) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parseCond(T, VDS) = constsToVars(T, VDS) = 'true.Bool [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** Since bubbles can only appear in the identity or special attributes in the
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** declaration of operators, in equations, membership axioms, and rules, the
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** evaluation of bubbles on a preunit is reduced to calls to the
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \texttt{solveBubbles} functions on each of these sTS of declarations.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op solveBubblesMod : Module OpDeclSet Module Bool OpDeclSet Database -> Module .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op solveBubbles : EquationSet Module [Module] Bool OpDeclSet Database -> EquationSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op solveBubbles : RuleSet Module [Module] Bool OpDeclSet Database -> RuleSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op solveBubbles : MembAxSet Module [Module] Bool OpDeclSet Database -> MembAxSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op solveBubbles : Condition Module Bool OpDeclSet Database -> Condition .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op solveBubblesOps : OpDeclSet OpDeclSet Module Module -> OpDeclSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op solveBubblesOps : OpDeclSet OpDeclSet Module -> OpDeclSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op solveBubblesOpsAux : OpDeclSet Module -> OpDeclSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op solveBubblesAts : AttrSet TypeList Type Module -> AttrSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op solveBubblesHooks : HookList Type Module -> HookList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq solveBubblesMod(PU, OPDS, M, B, VDS, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = setOps(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder (if getMbs(PU) == none and getEqs(PU) == none and getRls(PU) == none
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then PU
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else setEqs(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder setMbs(
473b81d33893192056dde74b26b2467f983c102cChristian Maeder setRls(PU,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder solveBubbles(getRls(PU), M', addInfoConds(M'), B, VDS, DB)),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder solveBubbles(getMbs(PU), M', addInfoConds(M'), B, VDS, DB)),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder solveBubbles(getEqs(PU), M', addInfoConds(M'), B, VDS, DB))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder solveBubblesOps(getOps(PU), OPDS, M'))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder if M' := addOps(VDS, M) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** To avoid the parsing ambiguities in the identity elements we add the sort
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** of the operator to be used as context in which doing the parsing. We
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** assume that the term given as identity element of an operator is in the
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** kind of the sort of such operator.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq solveBubblesOps(OPDS, OPDS', M)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = solveBubblesOps(OPDS, OPDS',
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder setSubsorts(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder setSorts(emptyFModule('DUMMY), getSorts(M)), getSubsorts(M)), M) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq solveBubblesOps(op F : TyL -> Ty [ditto AtS] . op F : TyL' -> Ty' [AtS'] . OPDS, OPDS', M, M')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = solveBubblesOps(
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op F : TyL -> Ty [AtS removeCtorMetadata(AtS'')] . op F : TyL' -> Ty' [AtS''] . OPDS,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder OPDS', M, M')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if not ditto in AtS'
473b81d33893192056dde74b26b2467f983c102cChristian Maeder /\ sameKind(M, TyL Ty, TyL' Ty')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- /\ AtS'' := solveBubblesAts(AtS', TyL', Ty', M') .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder /\ AtS'' := AtS' .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq solveBubblesOps(op F : TyL -> Ty [ditto AtS] . OPDS, op F : TyL' -> Ty' [AtS'] . OPDS', M, M')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = solveBubblesOps(op F : TyL -> Ty [AtS removeCtorMetadata(AtS'')] . OPDS, op F : TyL' -> Ty' [AtS''] . OPDS', M, M')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if not ditto in AtS'
473b81d33893192056dde74b26b2467f983c102cChristian Maeder /\ sameKind(M, TyL Ty, TyL' Ty')
473b81d33893192056dde74b26b2467f983c102cChristian Maeder---- /\ AtS'' := solveBubblesAts(AtS', TyL, Ty, M')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder /\ AtS'' := AtS' .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- [owise] .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq solveBubblesOps(OPDS, OPDS', M, M')
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = solveBubblesOpsAux(OPDS, M')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op removeCtorMetadata : AttrSet -> AttrSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq removeCtorMetadata(ctor AtS) = removeCtorMetadata(AtS) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq removeCtorMetadata(metadata(St) AtS) = removeCtorMetadata(AtS) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq removeCtorMetadata(AtS) = AtS [owise] .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq solveBubblesOpsAux(op F : TyL -> Ty [AtS] . OPDS, M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = op F : TyL -> Ty [solveBubblesAts(AtS, TyL, Ty, M)] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder solveBubblesOpsAux(OPDS, M) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq solveBubblesOpsAux(none, M) = none .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq solveBubblesAts(id('bubble[T]) AtS, TyL, Ty, M)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = (id(solveBubbles2('bubble[T], Ty, M, false, none, emptyDatabase))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder solveBubblesAts(AtS, TyL, Ty, M)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq solveBubblesAts(left-id('bubble[T]) AtS, Ty TyL, Ty', M)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = (left-id(solveBubbles2('bubble[T], Ty, M, false, none, emptyDatabase))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder solveBubblesAts(AtS, Ty TyL, Ty', M)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq solveBubblesAts(right-id('bubble[T]) AtS, TyL Ty, Ty', M)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = (right-id(solveBubbles2('bubble[T], Ty, M, false, none, emptyDatabase))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder solveBubblesAts(AtS, TyL Ty, Ty', M)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq solveBubblesAts(special(HkL) AtS, TyL, Ty, M)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = (special(solveBubblesHooks(HkL, Ty, M))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder solveBubblesAts(AtS, TyL, Ty, M)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq solveBubblesAts(AtS, TyL, Ty, M) = AtS [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq solveBubblesHooks(term-hook(QI, 'bubble[T]) HkL, Ty, M)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = term-hook(QI,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder solveBubbles2('bubble[T], anyType, M, false, none, emptyDatabase))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder solveBubblesHooks(HkL, Ty, M) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq solveBubblesHooks(Hk HkL, Ty, M)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = Hk solveBubblesHooks(HkL, Ty, M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq solveBubblesHooks(nil, Ty, M) = nil .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** Since both sides of any equation or rule have to be in the same connected
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** component of sorts, we parse the two bubbles together using the
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** polymorphic operator \verb~_==_~\footnote{Note that if including
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \texttt{BOOL} the operator \texttt{\_\,==\_\,} is added for each kind.}.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** That is, given for example an equation as \verb~eq T = T' .~, we parse
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \verb~T == T'~, forcing them to be parsed in the same connected component,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** if possible. We add functions \texttt{lhs} and \texttt{rhs} to extract,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** respectively, the lefthand and righthand side terms from the result. Note
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** that these are partial functions.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder pr 2TUPLE{Term,AttrSet}
473b81d33893192056dde74b26b2467f983c102cChristian Maeder * (op p1_ to term, op p2_ to attrSet,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op `(_`,_`) : Term AttrSet -> Tuple{Term,AttrSet} to `{_`,_`}) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op pullStmtAttrOut : Term OpDeclSet -> [Tuple{Term,AttrSet}] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op pullStmtAttrOutAux : Term TermList AttrSet OpDeclSet -> [Tuple{Term,AttrSet}] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op pullLabelOut : Term -> [Tuple{Term,AttrSet}] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq pullStmtAttrOut('bubble[QI], VDS) = {'bubble[QI], none} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq pullStmtAttrOut('bubble['__[QI, QI']], VDS) = {'bubble['__[QI, QI']], none} .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq pullStmtAttrOut('bubble['__[QI, QI', QI'']], VDS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = {'bubble['__[QI, QI', QI'']], none} .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq pullStmtAttrOut('bubble['__[QI, QI', TL, QI'']], VDS)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = if QI'' =/= ''`].Qid
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then {'bubble['__[QI, QI', TL, QI'']], none}
473b81d33893192056dde74b26b2467f983c102cChristian Maeder else pullStmtAttrOutAux('bubble['__[QI, QI', TL, QI'']], (QI, QI', TL), none, VDS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq pullStmtAttrOutAux(T, (TL, ''`[.Qid), AtS, VDS)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = if AtS =/= none
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then {'bubble['__[TL]], AtS}
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else {T, none}
473b81d33893192056dde74b26b2467f983c102cChristian Maeder fi .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq pullStmtAttrOutAux(T, (TL, QI, ''nonexec.Qid), AtS, VDS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = pullStmtAttrOutAux(T, (TL, QI), AtS nonexec, VDS) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq pullStmtAttrOutAux(T, (TL, QI, ''variant.Qid), AtS, VDS)
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder = pullStmtAttrOutAux(T, (TL, QI), AtS variant, VDS) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq pullStmtAttrOutAux(T, (TL, QI, ''owise.Qid), AtS, VDS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = pullStmtAttrOutAux(T, (TL, QI), AtS owise, VDS) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq pullStmtAttrOutAux(T, (TL, QI, ''otherwise.Qid), AtS, VDS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = pullStmtAttrOutAux(T, (TL, QI), AtS owise, VDS) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq pullStmtAttrOutAux(T, (TL, QI, ''label.Qid, QI'), AtS, VDS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if downQid(QI') :: Qid
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then pullStmtAttrOutAux(T, (TL, QI), AtS label(downQid(QI')), VDS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else {T, none}
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq pullStmtAttrOutAux(T, (TL, QI, ''metadata.Qid, QI'), AtS, VDS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if downString(downQid(QI')) :: String
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then pullStmtAttrOutAux(T, (TL, QI), AtS metadata(downString(downQid(QI'))), VDS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else {T, none}
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ceq pullStmtAttrOutAux(T, (TL, QI, ''`[.Qid, TL', ''print.Qid, TL''), AtS, VDS)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = pullStmtAttrOutAux(T, (TL, QI, ''`[.Qid, TL'), AtS print(printArg(TL'', VDS)), VDS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if printArg(TL'', VDS) : QidList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq pullStmtAttrOutAux(T, TL, AtS, VDS) = {T, none} [owise] .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op printArg : TermList OpDeclSet ~> QidList .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ceq printArg((T, TL), op QI : nil -> Tp [AtS] . VDS)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = qid(string(downQid(T)) + ":" + string(Tp)) printArg(TL, VDS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if QI = downQid(T) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq printArg((T, TL), VDS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = downQid(T) printArg(TL, VDS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if downString(downQid(T)) : String .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq printArg(empty, VDS) = nil .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq pullLabelOut('bubble[QI]) = {'bubble[QI], none} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq pullLabelOut('bubble['__[QI, QI']]) = {'bubble['__[QI, QI']], none} .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq pullLabelOut('bubble['__[QI, QI', QI'']])
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = {'bubble['__[QI, QI', QI'']], none} .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq pullLabelOut('bubble['__[QI, QI', QI'', QI3]])
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = {'bubble['__[QI, QI', QI'', QI3]], none} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq pullLabelOut('bubble['__[QI, QI', QI'', QI3, TL]])
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if QI == ''`[.Qid and-then (QI'' == ''`].Qid and-then QI3 == '':.Qid)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder then {'bubble['__[TL]], label(downQid(QI'))}
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else {'bubble['__[QI, QI', QI'', QI3, TL]], none}
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ops lhs rhs : Term -> Term .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq lhs('_=_[T, T']) = T .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq lhs('_=>_[T, T']) = T .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq rhs('_=_[T, T']) = T' .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq rhs('_=>_[T, T']) = T' .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq lhs(qidError(QIL)) = qidError(QIL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq rhs(qidError(QIL)) = qidError(QIL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq solveBubbles(EqS, M, unitError(QIL), B, VDS, DB) = equationError(QIL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq solveBubbles(RlS, M, unitError(QIL), B, VDS, DB) = ruleError(QIL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq solveBubbles(MAS, M, unitError(QIL), B, VDS, DB) = membAxError(QIL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq solveBubbles(((eq T = T' [AtS] .) EqS), M, M', B, VDS, DB)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = ((eq lhs(solveBubblesEq(term(pullLabelOut(T)), term(pullStmtAttrOut(T', VDS)),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder M, B, VDS, DB))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = rhs(solveBubblesEq(term(pullLabelOut(T)), term(pullStmtAttrOut(T', VDS)),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder M, B, VDS, DB))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [attrSet(pullLabelOut(T)) attrSet(pullStmtAttrOut(T', VDS)) AtS] .)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder solveBubbles(EqS, M, M', B, VDS, DB)) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq solveBubbles(((ceq T = T' if T'' = 'true.Bool [AtS] .) EqS),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder M, M', B, VDS, DB)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = ((ceq lhs(solveBubblesCEq(term(pullLabelOut(T)), T', M, B, VDS, DB))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = rhs(solveBubblesCEq(term(pullLabelOut(T)), T', M, B, VDS, DB))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder if solveBubblesCond(term(pullStmtAttrOut(T'', VDS)), M, M', B, VDS, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [attrSet(pullLabelOut(T)) attrSet(pullStmtAttrOut(T'', VDS)) AtS] .)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder solveBubbles(EqS, M, M', B, VDS, DB)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq solveBubbles((none).EquationSet, M, M', B, VDS, DB) = none .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq solveBubbles(((rl T => T' [AtS] .) RlS), M, M', B, VDS, DB)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = ((rl lhs(solveBubblesRl(term(pullLabelOut(T)),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder term(pullStmtAttrOut(T', VDS)), M, B, VDS, DB))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder => rhs(solveBubblesRl(term(pullLabelOut(T)),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder term(pullStmtAttrOut(T', VDS)), M, B, VDS, DB))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [attrSet(pullLabelOut(T)) attrSet(pullStmtAttrOut(T', VDS)) AtS] .)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder solveBubbles(RlS, M, M', B, VDS, DB)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq solveBubbles(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ((crl T => T' if T'' = 'true.Bool [AtS] .) RlS), M, M', B, VDS, DB)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = ((crl lhs(solveBubblesCRl(term(pullLabelOut(T)), T', M, B, VDS, DB))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder => rhs(solveBubblesCRl(term(pullLabelOut(T)), T', M, B, VDS, DB))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder if solveBubblesCond(term(pullStmtAttrOut(T'', VDS)), M, M', B, VDS, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [attrSet(pullLabelOut(T)) attrSet(pullStmtAttrOut(T'', VDS)) AtS] .)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder solveBubbles(RlS, M, M', B, VDS, DB)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq solveBubbles((none).RuleSet, M, M', B, VDS, DB) = none .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** In the call to solve the bubbles in membership axioms we add the sort to
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** which it is constrained to be used as context.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq solveBubbles(((mb T : S [AtS] .) MAS), M, M', B, VDS, DB)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = ((mb solveBubbles2(term(pullLabelOut(T)), S, M, B, VDS, DB) : S
473b81d33893192056dde74b26b2467f983c102cChristian Maeder [attrSet(pullLabelOut(T)) AtS] .)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder solveBubbles(MAS, M, M', B, VDS, DB)) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq solveBubbles(((cmb T : S if T' = 'true.Bool [AtS] .) MAS),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder M, M', B, VDS, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = ((cmb solveBubbles2(term(pullLabelOut(T)), S, M, B, VDS, DB) : S
473b81d33893192056dde74b26b2467f983c102cChristian Maeder if solveBubblesCond(T', M, M', B, VDS, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [attrSet(pullLabelOut(T)) AtS] .)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder solveBubbles(MAS, M, M', B, VDS, DB)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq solveBubbles((none).MembAxSet, M, M', B, VDS, DB) = none .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** The parsing process may generate error terms. Since in the
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** current version of the system Core Maude is generating the appropriate
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** error messages, we just have to worry about the elimination of these
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** terms. The effect is the same one as introducing a module at the object
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** level of Core Maude: If there is any term in an identity attribute in an
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** operator declaration, equation, rule, or membership axiom with a parsing
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** error a message is generated and the axiom is eliminated.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq (op F : TyL -> Ty [id(qidError(QIL)) AtS] .) = opDeclError(QIL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq (op F : TyL -> Ty [left-id(qidError(QIL)) AtS] .) = opDeclError(QIL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq (op F : TyL -> Ty [right-id(qidError(QIL)) AtS] .) = opDeclError(QIL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq (conditionError(QIL) /\ T = T' /\ CD?) = conditionError(QIL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq (conditionError(QIL) /\ T : S /\ CD?) = conditionError(QIL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq (conditionError(QIL) /\ T := T' /\ CD?) = conditionError(QIL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq (conditionError(QIL) /\ T => T' /\ CD?) = conditionError(QIL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq (eq qidError(QIL) = T? [AtS] .) = equationError(QIL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq (eq T? = qidError(QIL) [AtS] .) = equationError(QIL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq (ceq qidError(QIL) = T? if CD? [AtS] .) = equationError(QIL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq (ceq T? = qidError(QIL) if CD? [AtS] .) = equationError(QIL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq (ceq T? = T?' if conditionError(QIL) [AtS] .) = equationError(QIL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq (mb qidError(QIL) : S [AtS] .) = membAxError(QIL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq (cmb qidError(QIL) : S if CD? [AtS] .) = membAxError(QIL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq (cmb T? : S if conditionError(QIL) [AtS] .) = membAxError(QIL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq (rl qidError(QIL) => T? [AtS] .) = ruleError(QIL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq (rl T? => qidError(QIL) [AtS] .) = ruleError(QIL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq (crl qidError(QIL) => T? if CD? [AtS] .) = ruleError(QIL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq (crl T? => qidError(QIL) if CD? [AtS] .) = ruleError(QIL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq (crl T? => T?' if conditionError(QIL) [AtS] .) = ruleError(QIL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq F[qidError(QIL), TL?] = qidError(QIL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq F[TL?, qidError(QIL)] = qidError(QIL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq F[TL?, qidError(QIL), TL?'] = qidError(QIL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederendfm
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*******************************************************************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** The function \texttt{solveBubbles} defined in the following
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \texttt{VIEW-BUBBLE-PARSING} module parses the bubbles in a set of preview
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** maps. It takes two modules, the signature of the view's source theory,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** with the variables declared in the view, to parse the source term in the
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** term maps, and the target theory, with the mappings of the variable
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** declarations in the view, to parse the target terms.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*******************************************************************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederfmod VIEW-BUBBLE-PARSING is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr BUBBLE-PARSING .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr PRE-VIEW .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var PVMAPS : Set{PreViewMap} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var VMAP : ViewMap .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars T T' : Term .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars M M' : Module .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var U : Module .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var QIL : QidList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars VDS VDS' : OpDeclSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op solveBubbles : Set{PreViewMap} OpDeclSet OpDeclSet Module Module -> RenamingSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq solveBubbles(PVMAPS, VDS, VDS', U, unitError(QIL)) = none .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq solveBubbles(PVMAPS, VDS, VDS', unitError(QIL), U) = none .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq solveBubbles(VMAP, VDS, VDS', M, M') = VMAP [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq solveBubbles((VMAP, PVMAPS), VDS, VDS', M, M')
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = (VMAP, solveBubbles(PVMAPS, VDS, VDS', M, M'))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq solveBubbles(preTermMap(T, T'), VDS, VDS', M, M')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = termMap(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder solveBubbles(T, M, false, VDS, emptyDatabase),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder solveBubbles(T', M', false, VDS', emptyDatabase)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq solveBubbles((preTermMap(T, T'), PVMAPS), VDS, VDS', M, M')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (termMap(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder solveBubbles(T, M, false, VDS, emptyDatabase),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder solveBubbles(T', M', false, VDS', emptyDatabase)),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder solveBubbles(PVMAPS, VDS, VDS', M, M')) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq solveBubbles(none, VDS, VDS', M, M') = none .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederendfm
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*******************************************************************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder***
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** Module Expression Evaluation
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder***
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** So far we have not introduced more module expressions than those given by
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** simple quoted identifiers. We will introduce some later, but the scheme
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** followed for evaluating them is very simple and can be presented in a
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** generic way. Given a module expression and a database state, the
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** evaluation of a module expression results in the generation of a new
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** module, which is introduced in the database, with the module expression
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** as its name. The resulting database is then returned. If there is already
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** a module in the database with that name, the function returns the original
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** database without any change. The evaluation of a module expression may
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** produce the evaluation of other module expressions contained in the
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** modules involved in the process. This is the case, for example, for the
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** renaming of modules, in which not only the top module is renamed but,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** perhaps, some of its submodules as well; it is also the case for the
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** instantiation of parameterized modules, where the module being
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** instantiated may contain submodules which are parameterized by some of
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** the parameter theories of the parameterized module in which are imported.
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** We shall discuss in more detail the renaming and instantiation of module
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** expressions in Sections~\ref{renaming} and~\ref{instantiation},
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** respectively.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** We saw in Section~\ref{module-expressions} how it is possible to import a
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** module expression in which a parameterized module is instantiated by some
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** of the formal parameters of the parameterized module into which it is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** imported. To be able to evaluate this kind of module expression, the list
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** of parameters of the module in which the module expression appears has to
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** be given.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*******************************************************************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederfmod MOD-EXPR-EVAL is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr DATABASE .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** decl. moved to module DATABASE
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** op evalModExp : ModuleExpression Database -> Database .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op evalModExp : ModuleExpression ParameterDeclList Database -> Tuple{Database, ModuleExpression} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op evalViewExp : ViewExp ParameterDeclList Database -> Database .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op evalViewExp : ParameterList ParameterDeclList Database -> Database .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var S : Sort .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var QI : Qid .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var ME : ModuleExpression .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var PDL : ParameterDeclList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var DB : Database .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars VE VE' VE'' : ViewExp .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars PL PL' : ParameterList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq evalModExp(ME, DB) = evalModExp(ME, nil, DB) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq evalModExp(ME, PDL, DB) = < DB ; ME > [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq evalModExp(QI, PDL, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if unitInDb(QI, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then if compiledModule(QI, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then < DB ; QI >
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else < procModule(QI, DB) ; QI >
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi
473b81d33893192056dde74b26b2467f983c102cChristian Maeder else if upModule(QI, false) :: Module
473b81d33893192056dde74b26b2467f983c102cChristian Maeder then < procModule(QI, insTermModule(QI, upModule(QI, false), DB)) ; QI >
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else < warning(DB, '\r 'Error: '\o 'Module QI 'not 'in 'database. '\n) ; QI >
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq evalViewExp(QI, PDL, DB)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = if labelInParameterDeclList(QI, PDL)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then DB
473b81d33893192056dde74b26b2467f983c102cChristian Maeder else if viewInDb(QI, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then if compiledView(QI, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then DB
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else procView(QI, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else warning(DB, ('\r 'Error: '\o 'View QI 'not 'in 'database. '\n))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq evalViewExp(S{PL}, PDL, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if viewInDb(S{PL}, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then DB
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else viewInst(S, PL, PDL, evalViewExp(S, PDL, evalViewExp(PL, PDL, DB)))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq evalViewExp(VE ;; VE', PDL, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = evalViewExp(VE, PDL, evalViewExp(VE', PDL, DB))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if VE =/= mtViewExp /\ VE' =/= mtViewExp .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq evalViewExp((S, PL), PDL, DB)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = evalViewExp(S, PDL, evalViewExp(PL, PDL, DB))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq evalViewExp((S{PL}, PL'), PDL, DB)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = evalViewExp(S{PL}, PDL, evalViewExp(PL', PDL, DB))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [owise] .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq evalViewExp(nil, PDL, DB) = DB .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op viewInst : ViewExp ViewExp ParameterDeclList Database -> Database .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*******************************************************************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** The equations specifying its behavior are later, in INST-EXPR-EVALUATION **
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*******************************************************************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederendfm
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*******************************************************************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder***
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** The Transformation of Object-Oriented Modules to System Modules
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder***
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** The transformation of object-oriented modules into system modules has
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** already been discussed in Section~\ref{omod2mod}, and also in
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** \cite{Meseguer93b,ClavelDuranEkerLincolnMarti-OlietMeseguerQuesada99}.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** We focus here on the part of the process accomplished by each of the main
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** functions involved in the transformation. The transformation discussed
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** in~\cite{DuranMeseguer98} assumed that object-oriented modules were
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** flattened before being transformed into system modules. However, doing it
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** in this way, the transformations already made for the modules in the
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** structure were not reused. In the current system, the transformation is
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** done only for the module being introduced, the top of the structure, and
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** dusing the `internal' representations of the submodules stored in the
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** ddatabase for the rest of the structure.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** This approach requires gathering all class and subclass relation
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** declarations in the structure before starting with the transformation
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** process itself. The function \texttt{prepClasses} collects all these
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** declarations in the structure, and completes all the declarations of
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** classes with the attributes inherited from their superclasses.
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** \begin{comment}
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** This function makes use of a `dummy' module, in which the classes are
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** introduced as sorts and the subclass relations as subsort relations to be
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** able to compute all the operations on the subclass relation using the
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** built-in functions on sorts.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \end{comment}
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** Once all the class declarations in the structure have been collected and
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** completed, the transformation is accomplished in two stages. First, the
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** function \texttt{omod2modAux} carries out the
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** following tasks:
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** \begin{itemize}
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** \item For each class declaration of the form
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** $\texttt{class }C\texttt{ | }a_1\texttt{:} S_1\texttt{,}
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \ldots\texttt{,} a_n\texttt{:} S_n$, the following items are
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** introduced: a subsort $C$ of sort \texttt{Cid}, a constant
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** $C$ of sort $C$, and declarations of operations $a_i
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \texttt{\ :\_} \texttt{ :\,\,} S_i \texttt{ -> Attribute}$
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** for each attribute $a_i$ (the function
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \texttt{ops4Attr} creates these declarations).
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** \item For each subclass relation of the form
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** $\texttt{subclass\ }C\texttt{\ <\ }C'$, a subsort
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** declaration $\texttt{subsort\ }C\texttt{\ <\ }C'$ is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** introduced.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \item For each message declaration of the form \verb~msg F : TyL
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** -> S~, an operator declaration \verb~op F : TyL -> S~ is added.
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** \end{itemize}
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** When this process has been completed, the function \texttt{prepAxs} is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** called. This function applies to the membership axioms, equations, and
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** rewriting rules in the module the transformations indicated in
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** Section~\ref{omod2mod}, so that they become applicable to all the objects
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** of the given class and of their subclasses. The set of attributes of the
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** objects appearing in the membership axioms, equations, and rewriting rules
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** are completed, so that the default convention of not having to
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** exhaustively mention the set of attributes of a class is supported.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** Note that in Meseguer's paper~\cite{Meseguer93b} a parallel hierarchy of
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** sorts was defined to deal with objects in different classes, and membership
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** axioms constraining the objects to their corresponding sorts were added.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** The transformation could be easily completed with sorts, subsort relations,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** and membership constraints as indicated there. In fact, these declarations
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** were added in an initial version and were then removed because they were
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** computationally expensive. However, there are examples in which it would
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** be interesting to have them; when needed, these declarations can be
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** explicitly added by the user in the current version.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*******************************************************************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederfmod EXT-TERMSET is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder protecting TERMSET .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op |_| : TermSet -> Nat .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq | X:Term | T:TermSet | = 1 + | T:TermSet | .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq | emptyTermSet | = 0 .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederendfm
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maederview TermSet from TRIV to EXT-TERMSET is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder sort Elt to TermSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederendv
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederfmod O-O-TO-SYSTEM-MOD-TRANSF is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr DATABASE .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr CONVERSION .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr EXT-TERMSET .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var DB : Database .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var I : Nat .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var ME : Header .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars S S' S'' C C' : Sort .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars SS SS' SS'' : SortSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var Ty : Type .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var TyL : TypeList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars T T' T'' T3 : Term .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars TL TL' : TermList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var PL : ParameterList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars IL IL' IL'' : ImportList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars CDS CDS' : ClassDeclSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars ADS ADS' : AttrDeclSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var SSDS : SubsortDeclSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars SCDS SCDS' : SubclassDeclSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var OPDS : OpDeclSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var MDS : MsgDeclSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars MAS MAS' : MembAxSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars EqS EqS' : EquationSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars RlS RlS' : RuleSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var QIL : QidList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var NQIL : NeQidList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars O O' : Term .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars M U : Module .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars QI A A' L F : Qid .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var V V' : Variable .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var CD : ClassDecl .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars SCD SCD' : SubclassDecl .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars Ct Ct' Ct'' : Constant .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var Cond : Condition .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var AtS : AttrSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var H : Header .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var PD : ParameterDecl .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var PDL : ParameterDeclList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var MN : ModuleName .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var CH : ClassHierarchy .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var C'' : Sort .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars TS TS' : TermSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op newVar : Sort Nat -> Variable .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq newVar(S, I) = qid("V#" + string(I, 10) + ":" + string(S)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** The function \texttt{prepClasses} completes all classes in the module with
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** all the attributes they inherit from their superclasses.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op prepClasses : ClassDeclSet SubclassDeclSet ImportList ParameterDeclList
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder Database -> ClassDeclSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op prepClasses2 : ClassDeclSet SubclassDeclSet ImportList
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ImportList Database -> ClassDeclSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op prepClasses3 : ClassDeclSet SubclassDeclSet -> ClassDeclSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq prepClasses(CDS, SCDS, IL, (PD, PDL), DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = prepClasses(CDS, SCDS, (IL protecting pd(PD) .), PDL, DB) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq prepClasses(CDS, SCDS, IL, nil, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = prepClasses2(CDS, SCDS, IL, nil, DB) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq prepClasses2(CDS, SCDS, ((including MN .) IL), IL', DB)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = if (including MN . ) in IL'
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then prepClasses2(CDS, SCDS, IL, IL', DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else prepClasses2(
473b81d33893192056dde74b26b2467f983c102cChristian Maeder (getClasses(getTopModule(MN, DB)) CDS),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder (getSubclasses(getTopModule(MN, DB)) SCDS),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder (getImports(getTopModule(MN, DB)) IL),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ((including MN .) IL'), DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq prepClasses2(CDS, SCDS, ((extending MN .) IL), IL', DB)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = if (extending MN . ) in IL'
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then prepClasses2(CDS, SCDS, IL, IL', DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else prepClasses2(
473b81d33893192056dde74b26b2467f983c102cChristian Maeder (getClasses(getTopModule(MN, DB)) CDS),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder (getSubclasses(getTopModule(MN, DB)) SCDS),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder (getImports(getTopModule(MN, DB)) IL),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ((extending MN .) IL'), DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq prepClasses2(CDS, SCDS, ((protecting MN .) IL), IL', DB)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = if (protecting MN . ) in IL'
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then prepClasses2(CDS, SCDS, IL, IL', DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else prepClasses2(
473b81d33893192056dde74b26b2467f983c102cChristian Maeder (getClasses(getTopModule(MN, DB)) CDS),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder (getSubclasses(getTopModule(MN, DB)) SCDS),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder (getImports(getTopModule(MN, DB)) IL),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ((protecting MN .) IL'), DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq prepClasses2(CDS, SCDS, nil, IL, DB) = prepClasses3(CDS, SCDS) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq prepClasses3(CDS, SCDS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = addAttrs(buildHierarchy(CDS, SCDS, none, empty), SCDS) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder sort ClassHierarchy ClassStruct .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder subsort ClassStruct < ClassHierarchy .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op [_,_] : ClassDecl SortSet -> ClassStruct .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op empty : -> ClassHierarchy .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op __ : ClassHierarchy ClassHierarchy -> ClassHierarchy
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [assoc comm id: empty] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op buildHierarchy :
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ClassDeclSet SubclassDeclSet SortSet ClassHierarchy -> ClassHierarchy .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op addAttrs : ClassHierarchy SubclassDeclSet -> ClassDeclSet .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op addAttrsToItsSons :
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ClassDecl ClassHierarchy SubclassDeclSet -> ClassHierarchy .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq buildHierarchy(((class C | ADS .) CDS), SCDS, SS, CH)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = if C in SS
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then buildHierarchy(CDS, SCDS, SS, CH)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else buildHierarchy(CDS, SCDS, C ; SS, [(class C | ADS .), none] CH)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq buildHierarchy(none, (subclass C < C' .) SCDS, SS,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder [(class C | ADS .), SS'] [(class C' | ADS' .), SS''] CH)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = buildHierarchy(none, SCDS, SS,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [(class C | ADS .), C' ; SS'] [(class C' | ADS' .), SS''] CH) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq buildHierarchy(none, none, SS, CH) = CH .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq addAttrs([(class C | ADS .), none] CH, SCDS)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = (class C | ADS .)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder addAttrs(addAttrsToItsSons((class C | ADS .), CH, SCDS), SCDS) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq addAttrs(empty, SCDS) = none .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq addAttrsToItsSons((class C | ADS .), [(class C' | ADS' .), C ; SS] CH,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder (subclass C' < C .) SCDS)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = addAttrsToItsSons((class C | ADS .), [(class C' | ADS, ADS' .), SS] CH,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder SCDS) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ceq addAttrsToItsSons((class C | ADS .), CH, (subclass C' < C'' .) SCDS)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = addAttrsToItsSons((class C | ADS .), CH, SCDS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if C =/= C'' .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq addAttrsToItsSons((class C | ADS .), CH, none) = CH .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- op inAttrDeclSet : Qid AttrDeclSet -> Bool .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder----
473b81d33893192056dde74b26b2467f983c102cChristian Maeder---- eq inAttrDeclSet(A, ((attr A' : S), ADS))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- = (A == A') or-else inAttrDeclSet(A, ADS) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- eq inAttrDeclSet(A, none) = false .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** Given a set of attribute declarations, the \texttt{ops4Attr}
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** function returns a set of operator declarations as indicated above. That
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** is, for each attribute $a\texttt{:} S$, an operator of the form
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** $a \texttt{\ :\_} \texttt{ :\,\,} S \texttt{ -> Attribute}$ is declared.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op ops4Attr : AttrDeclSet -> OpDeclSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq ops4Attr(((attr A : S), ADS))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = ((op qid(string(A) + "`:_") : S -> 'Attribute [gather('&)] .)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ops4Attr(ADS)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq ops4Attr(none) = none .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** The function \texttt{prepLHS} takes the term in the lefthand side of a
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** rule, equation, or membership axiom, and replaces each object
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder***
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** $\texttt{<\ }O\texttt{\ :\ }C\texttt{\ |\ }ADS\texttt{\ >}$
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder***
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** in it---with $O$ of sort \texttt{Oid}, $C$ the name of a class, and $ADS$
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** a set of attributes with their corresponding values---by an object
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder***
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** $\texttt{<\ }O\texttt{\ :\ }V\texttt{\ |\ }ADS\ ADS'\ Atts\texttt{\ >}$
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder***
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** where the identifier of the class is replaced by a variable $V$ of sort
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** $C$, which is not used in the axiom, and where the set of attributes is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** completed with attributes $ADS'$ as indicated in Section~\ref{omod2mod}, so
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** that each attribute declared in class $C$ or in any of its superclasses is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** added with a new variable as value. $Atts$ is a new variable of sort
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** \texttt{AttributeSet}, which is used to range over the additional
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** attributes that may appear in objects of a subclass.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** The function \texttt{prepLHS} takes as arguments a term (in the initial
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** call, the term in the lefthand side of a rule, equation, or membership
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** axiom), the set of variable declarations of those variables declared in the
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** module that are not used in the axiom---new variables are created only if
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** there are no variables in the module with the appropriate sort---the set of
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** attributes in the* occurrences of the objects---and an index---to make sure
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** that the variables being added have not occurrences of the objects---and an
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** index---to make sure that the variables being added have not been added
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** previously. In the initial call this index is set to zero. \texttt{prepLHS}
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** gives as result a tuple composed of the resulting term, the set of objects
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** in the term (so that the modification of the objects in the righthand side
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** of the rule is simplified), the set of variable declarations corresponding
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** to the new added variables, the set of variable declarations of the
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** variables in the module that have not been used, and the index for the
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** creation of new variables.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** change (03/20/2002): a new variable is created everytime one is needed
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** The set of objects in the lefthand side will be given as a set of terms.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder pr 4TUPLE{TermList, TermSet, Nat, QidList}
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder * (op p1_ to term, op p2_ to objects, op p3_ to index, op p4_ to messages,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op ((_,_,_,_)) : TermList TermSet Nat QidList -> Tuple{TermList,TermSet,Nat,QidList} to <_;_;_;_>) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op prepLHS : TermList ClassDeclSet Nat -> Tuple{TermList, TermSet, Nat, QidList} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op crtObject : Term Sort AttrDeclSet Tuple{TermList, TermSet, Nat, QidList} -> Tuple{TermList, TermSet, Nat, QidList} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op crtObject2 : Term Variable TermList TermList AttrDeclSet TermSet Nat QidList -> Tuple{TermList, TermSet, Nat, QidList} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op crtObject3 : Term Qid TermList AttrDeclSet TermSet Nat QidList -> Tuple{TermList, TermSet, Nat, QidList} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq prepLHS(qidError(QIL), CDS, I) = < qidError(QIL) ; emptyTermSet ; I ; nil > .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq prepLHS(F, CDS, I) = < F ; emptyTermSet ; I ; nil > .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq prepLHS(Ct, CDS, I) = < Ct ; emptyTermSet ; I ; nil > .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \texttt{prepLHS} on a list of terms $\texttt{(}T\texttt{,\ }TL\texttt{)}$,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** with $T$ a term and $TL$ a list of terms, has to make a call to itself with
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** $T$ and with $TL$. The call with $TL$ has to be made with the result of
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** the call with $T$ so that the variables and the index are right.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq prepLHS((T, TL), CDS, I)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = < (term(prepLHS(T, CDS, I)),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder term(prepLHS(TL, CDS, index(prepLHS(T, CDS, I))))) ;
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder _|_(objects(prepLHS(T, CDS, I)),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder objects(prepLHS(TL, CDS, index(prepLHS(T, CDS, I))))) ;
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder index(prepLHS(TL, CDS, index(prepLHS(T, CDS, I)))) ;
473b81d33893192056dde74b26b2467f983c102cChristian Maeder (messages(prepLHS(T, CDS, I))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder messages(prepLHS(TL, CDS, index(prepLHS(T, CDS, I))))) >
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if TL =/= empty .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq prepLHS(F[TL], CDS, I)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = < F[term(prepLHS(TL, CDS, I))] ;
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder objects(prepLHS(TL, CDS, I)) ;
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder index(prepLHS(TL, CDS, I)) ;
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder messages(prepLHS(TL, CDS, I)) >
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if (F =/= '<_:_|_>) /\ (F =/= '<_:_|`>) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq prepLHS('<_:_|_>[O, Ct, T], ((class C | ADS .) CDS), I)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = crtObject(O, C, ADS, prepLHS(T, ((class C | ADS .) CDS), I))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if getName(Ct) == C .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq prepLHS('<_:_|`>[O, Ct], ((class C | ADS .) CDS), I)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = crtObject(O, C, ADS,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder prepLHS('none.AttributeSet, ((class C | ADS .) CDS), I))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if getName(Ct) == C .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq prepLHS('<_:_|_>[O, V, T], CDS, I)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = < '<_:_|_>[O, V, T] ; emptyTermSet ; I ; nil > .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** is this eq necessary?
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq prepLHS('<_:_|`>[O, T], CDS, I)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = prepLHS('<_:_|_>[O, T, 'none.AttributeSet], CDS, I) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq prepLHS('<_:_|_>[O, T, T'], none, I)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = < qidError('Error: 'undefined 'class T '\n) ; emptyTermSet ; I ; nil > .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq crtObject(O, C, ADS, < T ; TS ; I ; QIL >)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = crtObject2(O, newVar(C, I), T, 'none.AttributeSet, ADS, TS, (I + 1), QIL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** The function \texttt{crtObject2} is called with the metarepresentation of
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** the list of attributes appearing in the current object (third argument)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** and the set of attribute declarations of the class to which such object
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** belongs + all the attributes declared in its superclasses (fifth
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** argument). The function proceeds recursively removing the attribute
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** declarations from the set of declarations of attributes for those
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** attributes that appear in the object. Each time an attribute is found, it
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** is passed with its actual value to the fourth argument of
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** \texttt{crtObject2}, which initially has value \verb~'none.AttributeSet~,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** composing a list of terms with them.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** We assume that:
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \begin{itemize}
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \item The metarepresentation of a list of attributes is always given with
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** form \verb~'_`,_[F[T], T]~, \verb~F[T]~, or
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \verb~'none.AttributeSet~, where \texttt{TL} is the
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** metarepresentation of a list of attributes with the same form (this
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** is ensured by the \verb~(e E)~ gathering pattern in the corresponding
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** declaration in the signature in which the parsing is done), and
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \item that all the attributes appearing in an object have been declared in
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** the corresponding class declaration or in one of its superclasses.
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** \end{itemize}
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq crtObject2(O, V, '_`,_[F[T], TL], TL', ADS, TS, I, QIL)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = crtObject2(O, V, (F[T], TL), TL', ADS, TS, I, QIL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq crtObject2(O, V, (F[T], TL), TL', ((attr A : S), ADS), TS, I, QIL)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = crtObject2(O, V, TL, (F[T], TL'), ADS, TS, I, QIL)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if qid(string(A) + "`:_") == F .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq crtObject2(O, V, (F[T], TL), TL', ADS, TS, I, QIL)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = crtObject2(O, V, TL, TL', ADS, TS, I,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder (QIL '\r 'Warning: '\o 'Attribute F 'not 'valid '\n))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq crtObject2(O, V, F[T], TL, ((attr A : S), ADS), TS, I, QIL)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = crtObject3(O, V, (F[T], TL), ADS, TS, I, QIL)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if qid(string(A) + "`:_") == F .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq crtObject2(O, V, F[T], TL, ADS, TS, I, QIL)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = crtObject3(O, V, TL, ADS, TS, I,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder (QIL '\r 'Warning: '\o 'Attribute F 'not 'valid '\n))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq crtObject2(O, V, V', TL, ADS, TS, I, QIL)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = crtObject3(O, V, TL, ADS, TS, I,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder QIL '\r 'Warning: '\o
473b81d33893192056dde74b26b2467f983c102cChristian Maeder 'Variables 'are 'not 'allowed 'in 'the 'set 'of 'attributes
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder 'of 'an 'object '`( V' '`) '\n) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq crtObject2(O, V, 'none.AttributeSet, TL, ADS, TS, I, QIL)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = crtObject3(O, V, TL, ADS, TS, I, QIL) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq crtObject2(O, V, empty, TL, ADS, TS, I, QIL)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = crtObject3(O, V, TL, ADS, TS, I, QIL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** When the function \texttt{crtObject2} has gone through all the
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** attributes in the current object, the function \texttt{crtObject3} is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** in charge of returning the metarepresentation of the current object
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** completed with the attributes that did not appear in it. These attributes
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** are added with new variables not used in the axiom as value.
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** \texttt{crtObject3} returns a pair composed by this resulting object,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** and the set of terms representing all the objects in the lefthand
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** side (the current object is added to this set).
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq crtObject3(O, V, TL, ((attr A : S), ADS), TS, I, QIL)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = crtObject3(O, V, (qid(string(A) + "`:_")[newVar(S, I)], TL),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ADS, TS, (I + 1), QIL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq crtObject3(O, V, TL, none, TS, I, QIL)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = < '<_:_|_>[O, V, '_`,_[TL, newVar('AttributeSet, I)]] ;
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder _|_('<_:_|_>[O, V, '_`,_[TL, newVar('AttributeSet, I)]], TS) ;
473b81d33893192056dde74b26b2467f983c102cChristian Maeder (I + 1) ;
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder QIL > .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** Once the lefthand side of a rule or equation has been `prepared', the
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** function \texttt{prepRHS} is called with the set of objects returned by
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \texttt{prepLHS} and the term in the righthand side of such rule or
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** equation. The function \texttt{prepRHS} proceeds recursively throughout the
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** term looking for objects. Each time an object is found, its set of
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** attributes is completed with those in the modified object of the lefthand
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** side which do not appear in it.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op prepRHS : TermSet TermList -> TermList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op prepRHS : TermSet Condition -> Condition .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op adjustObject : TermSet Term -> Term .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op adjustObjectRHS : TermSet Term -> [Term] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op adjustAttrsObjectRHS : Term Term -> [Term] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op adjustAttrsObjectRHSAux : TermSet Term -> [Term] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op termAttrListToTermSet : TermList -> TermSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op _attrInTermSet_ : Qid TermSet -> Bool .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq prepRHS(TS, T = T' /\ Cond)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = prepRHS(TS, T) = prepRHS(TS, T') /\ prepRHS(TS, Cond) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq prepRHS(TS, T : S /\ Cond) = prepRHS(TS, T) : S /\ prepRHS(TS, Cond) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq prepRHS(TS, T := T' /\ Cond)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = prepRHS(TS, T) := prepRHS(TS, T') /\ prepRHS(TS, Cond) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq prepRHS(TS, T => T' /\ Cond)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = prepRHS(TS, T) => prepRHS(TS, T') /\ prepRHS(TS, Cond) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq prepRHS(TS, (nil).Condition) = nil .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq prepRHS(TS, qidError(QIL)) = qidError(QIL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq prepRHS(TS, F) = F .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq prepRHS(TS, Ct) = Ct .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq prepRHS(TS, F[TL])
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = F[prepRHS(TS, TL)]
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if (F =/= '<_:_|_>) and (F =/= '<_:_|`>) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq prepRHS(TS, '<_:_|_>[O, Ct, T])
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = adjustObjectRHS(TS, '<_:_|_>[O, Ct, prepRHS(TS, T)]) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq prepRHS(TS, '<_:_|_>[O, V, T]) = '<_:_|_>[O, V, prepRHS(TS, T)] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq prepRHS(TS, '<_:_|`>[O, Ct])
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = adjustObjectRHS(TS, '<_:_|_>[O, Ct, prepRHS(TS, 'none.AttributeSet)]) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq prepRHS(TS, '<_:_|`>[O, V])
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = '<_:_|_>[O, V, prepRHS(TS, 'none.AttributeSet)] .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ceq prepRHS(TS, (T, TL))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = (prepRHS(TS, T), prepRHS(TS, TL))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if TL =/= empty .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq adjustObjectRHS(_|_('<_:_|_>[O, V, T], TS), '<_:_|_>[O', Ct, T'])
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if O == O'
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then if getType(V) == getType(Ct)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then '<_:_|_>[O, V, adjustAttrsObjectRHS(T, T')]
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else '<_:_|_>[O', Ct, T']
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else adjustObjectRHS(TS, '<_:_|_>[O', Ct, T'])
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq adjustObjectRHS(emptyTermSet, '<_:_|_>[O, Ct, T]) = '<_:_|_>[O, Ct, T] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** eq adjustObjectRHS(_|_('<_:_|_>[Ct, C, T], TS), '<_:_|_>[O, Ct', T'])
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** = adjustObjectRHS(TS, '<_:_|_>[O, Ct', T']) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** eq adjustObjectRHS(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** _|_('<_:_|_>[Ct, C, T], TS), '<_:_|_>[Ct', Ct'', T'])
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** = if Ct == Ct'
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** then '<_:_|_>[Ct, Ct'', adjustAttrsObjectRHS(T, T')]
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** else adjustObjectRHS(TS, '<_:_|_>[Ct', Ct'', T'])
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** fi .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** eq adjustObjectRHS(emptyTermSet, '<_:_|_>[Ct, Ct', T])
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** = '<_:_|_>[Ct, Ct', T] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** The function \texttt{adjustAttrsObjectRHS} completes the set of
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** attributes of an object in the righthand side with those in the object in
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** the lefthand side or in the class not used in the lefthand side, which
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** have been completed by the function \texttt{crtObject}.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq adjustAttrsObjectRHS('_`,_[TL], T)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = adjustAttrsObjectRHSAux(termAttrListToTermSet(TL), T) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq adjustAttrsObjectRHSAux(_|_(A[T], TS), '_`,_[A[T'], T''])
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = '_`,_[A[T'], adjustAttrsObjectRHSAux(TS, T'')] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq adjustAttrsObjectRHSAux(TS, '_`,_[A[T], T'])
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = qidError(A 'is 'not 'a 'valid 'attribute)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if not A attrInTermSet TS .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq adjustAttrsObjectRHSAux(_|_(A[T], TS), A[T'])
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = '_`,_[A[T'], adjustAttrsObjectRHSAux(TS, 'none.AttributeSet)] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq adjustAttrsObjectRHSAux(TS, A[T])
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = qidError(A 'is 'not 'a 'valid 'attribute)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if not A attrInTermSet TS .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq adjustAttrsObjectRHSAux(_|_(A[T], TS), 'none.AttributeSet)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = '_`,_[A[T], adjustAttrsObjectRHSAux(TS, 'none.AttributeSet)] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq adjustAttrsObjectRHSAux(V, 'none.AttributeSet) = V .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq A attrInTermSet _|_(V, TS) = A attrInTermSet TS .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq A attrInTermSet _|_(A'[T], TS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (A == A') or-else (A attrInTermSet TS) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq A attrInTermSet emptyTermSet = false .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq termAttrListToTermSet((T, TL))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if T == 'none.AttributeSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then termAttrListToTermSet(TL)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else _|_(T, termAttrListToTermSet(TL))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder fi
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if TL =/= empty .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq termAttrListToTermSet(T)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if T == 'none.AttributeSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then emptyTermSet
473b81d33893192056dde74b26b2467f983c102cChristian Maeder else T
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** In the case of equations and rules, the function \texttt{prepAxs} calls the
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** function \texttt{prepLHS} with the term in the lefthand side of the axiom,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** and then use the generated set of objects to call the \texttt{prepRHS}
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** function. For conditional equations, rules, and membership axioms, this set
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** of terms representing the objects in the lefthand side is also used in the
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** calls to \texttt{prepRHS} with each of the terms in the conditions. The
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** term in the lefthand side of the equation, rule, or membership axiom is
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** replaced by the term returned by \texttt{prepLHS}. The index is used in
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** the recursive calls to \texttt{prepAxs}.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \texttt{prepLHS} returns as second argument the set of objects (as a set of
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** terms) appearing in it. These objects are returned after extending their
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** set of attributes by those of the class to which they belong not already
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** specified.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op prepAxs : Module MembAxSet EquationSet RuleSet ClassDeclSet Nat QidList
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder -> Module .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq prepAxs(U, ((mb T : S [AtS] .) MAS), EqS, RlS, CDS, I, QIL)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = prepAxs(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder addMbs(mb term(prepLHS(T, CDS, I)) : S [AtS] ., U),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder MAS, EqS, RlS, CDS,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder index(prepLHS(T, CDS, I)),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder (QIL messages(prepLHS(T, CDS, I)))) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq prepAxs(U, ((cmb T : S if Cond [AtS] .) MAS), EqS, RlS, CDS, I, QIL)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = prepAxs(
473b81d33893192056dde74b26b2467f983c102cChristian Maeder addMbs(cmb term(prepLHS(T, CDS, I)) : S
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if prepRHS(objects(prepLHS(T, CDS, I)), Cond) [AtS] ., U),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder MAS, EqS, RlS, CDS,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder index(prepLHS(T, CDS, I)),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder (QIL messages(prepLHS(T, CDS, I)))) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq prepAxs(U, MAS, ((eq T = T' [AtS] .) EqS), RlS, CDS, I, QIL)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = prepAxs(
473b81d33893192056dde74b26b2467f983c102cChristian Maeder addEqs(eq term(prepLHS(T, CDS, I))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = prepRHS(objects(prepLHS(T, CDS, I)), T') [AtS] ., U),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder MAS, EqS, RlS, CDS,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder index(prepLHS(T, CDS, I)),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder (QIL messages(prepLHS(T, CDS, I)))) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq prepAxs(U, MAS, ((ceq T = T' if Cond [AtS] .) EqS), RlS, CDS, I, QIL)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = prepAxs(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder addEqs(ceq term(prepLHS(T, CDS, I))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = prepRHS(objects(prepLHS(T, CDS, I)), T')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if prepRHS(objects(prepLHS(T, CDS, I)), Cond) [AtS] ., U),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder MAS, EqS, RlS, CDS,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder index(prepLHS(T, CDS, I)),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder (QIL messages(prepLHS(T, CDS, I)))) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq prepAxs(U, MAS, EqS, ((rl T => T' [AtS] .) RlS), CDS, I, QIL)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = prepAxs(
473b81d33893192056dde74b26b2467f983c102cChristian Maeder addRls(rl term(prepLHS(T, CDS, I))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder => prepRHS(objects(prepLHS(T, CDS, I)), T') [AtS] ., U),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder MAS, EqS, RlS, CDS,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder index(prepLHS(T, CDS, I)),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder (QIL messages(prepLHS(T, CDS, I)))) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq prepAxs(U, MAS, EqS, ((crl T => T' if Cond [AtS] .) RlS), CDS, I, QIL)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = prepAxs(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder addRls(crl term(prepLHS(T, CDS, I))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder => prepRHS(objects(prepLHS(T, CDS, I)), T')
473b81d33893192056dde74b26b2467f983c102cChristian Maeder if prepRHS(objects(prepLHS(T, CDS, I)), Cond) [AtS] ., U),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder MAS, EqS, RlS, CDS,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder index(prepLHS(T, CDS, I)),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder (QIL messages(prepLHS(T, CDS, I)))) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq prepAxs(U, none, none, none, CDS, I, nil) = U .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq prepAxs(U, none, none, none, CDS, I, NQIL) = unitError(NQIL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq prepAxs(unitError(QIL), MAS, EqS, RlS:[RuleSet], CDS, I, QIL':QidList) = unitError(QIL':QidList QIL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** After completing the set of classes in the module with the attributes from
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** their superclasses, the function \texttt{omod2mod} calls the function
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \texttt{omod2modAux} with the same module and the set of class
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** declarations. The definition of the \texttt{omod2mod} function is given by
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** the five equations below.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op omod2mod : OModule Database -> SModule .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op omod2modAux : OModule ClassDeclSet -> SModule .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op omod2mod : OTheory Database -> SModule .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op omod2modAux : OTheory ClassDeclSet -> SModule .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq omod2mod(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder omod H is IL sorts SS . SSDS CDS SCDS OPDS MDS MAS EqS RlS endom,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = omod2modAux(
473b81d33893192056dde74b26b2467f983c102cChristian Maeder omod H is IL sorts SS . SSDS CDS SCDS OPDS MDS MAS EqS RlS endom,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder prepClasses(CDS, SCDS, IL, getParDecls(H), DB)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq omod2mod(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder oth H is IL sorts SS . SSDS CDS SCDS OPDS MDS MAS EqS RlS endoth,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = omod2modAux(
473b81d33893192056dde74b26b2467f983c102cChristian Maeder oth H is IL sorts SS . SSDS CDS SCDS OPDS MDS MAS EqS RlS endoth,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder prepClasses(CDS, SCDS, IL, getParDecls(H), DB)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq omod2modAux(
473b81d33893192056dde74b26b2467f983c102cChristian Maeder omod H is
473b81d33893192056dde74b26b2467f983c102cChristian Maeder IL sorts SS . SSDS ((class C | ADS .) CDS) SCDS OPDS MDS MAS EqS RlS
473b81d33893192056dde74b26b2467f983c102cChristian Maeder endom,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder CDS')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = omod2modAux(
473b81d33893192056dde74b26b2467f983c102cChristian Maeder omod H is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder IL sorts (SS ; C) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder (subsort C < 'Cid . SSDS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder CDS SCDS
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ((op C : nil -> C [none] .)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ops4Attr(ADS) OPDS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder MDS MAS EqS RlS
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder endom,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder CDS') .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq omod2modAux(
473b81d33893192056dde74b26b2467f983c102cChristian Maeder omod H is
473b81d33893192056dde74b26b2467f983c102cChristian Maeder IL sorts SS . SSDS CDS ((subclass C < C' .) SCDS)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder OPDS MDS MAS EqS RlS
473b81d33893192056dde74b26b2467f983c102cChristian Maeder endom,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder CDS')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = omod2modAux(
473b81d33893192056dde74b26b2467f983c102cChristian Maeder omod H is
473b81d33893192056dde74b26b2467f983c102cChristian Maeder IL sorts SS . ((subsort C < C' .) SSDS)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder CDS SCDS OPDS MDS MAS EqS RlS
473b81d33893192056dde74b26b2467f983c102cChristian Maeder endom,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder CDS') .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq omod2modAux(
473b81d33893192056dde74b26b2467f983c102cChristian Maeder omod H is
473b81d33893192056dde74b26b2467f983c102cChristian Maeder IL sorts SS . SSDS CDS SCDS OPDS
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ((msg F : TyL -> Ty .) MDS) MAS EqS RlS
473b81d33893192056dde74b26b2467f983c102cChristian Maeder endom,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder CDS')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = omod2modAux(
473b81d33893192056dde74b26b2467f983c102cChristian Maeder omod H is
473b81d33893192056dde74b26b2467f983c102cChristian Maeder IL sorts SS . SSDS CDS SCDS
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ((op F : TyL -> Ty [msg] .) OPDS) MDS MAS EqS RlS
473b81d33893192056dde74b26b2467f983c102cChristian Maeder endom,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder CDS') .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq omod2modAux(
473b81d33893192056dde74b26b2467f983c102cChristian Maeder omod H is IL sorts SS . SSDS none none OPDS none MAS EqS RlS endom,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder CDS)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = prepAxs(mod H is IL sorts SS . SSDS OPDS none none none endm,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder MAS, EqS, RlS, CDS, 0, nil) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq omod2modAux(
473b81d33893192056dde74b26b2467f983c102cChristian Maeder oth H is
473b81d33893192056dde74b26b2467f983c102cChristian Maeder IL sorts SS . SSDS ((class C | ADS .) CDS)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder SCDS OPDS MDS MAS EqS RlS
473b81d33893192056dde74b26b2467f983c102cChristian Maeder endoth,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder CDS')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = omod2modAux(
473b81d33893192056dde74b26b2467f983c102cChristian Maeder oth H is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder IL sorts (SS ; C) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder (subsort C < 'Cid . SSDS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder CDS SCDS
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ((op C : nil -> C [none] .)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ops4Attr(ADS) OPDS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder MDS MAS EqS RlS
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder endoth,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder CDS') .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq omod2modAux(
473b81d33893192056dde74b26b2467f983c102cChristian Maeder oth H is
473b81d33893192056dde74b26b2467f983c102cChristian Maeder IL sorts SS . SSDS CDS ((subclass C < C' .) SCDS)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder OPDS MDS MAS EqS RlS
473b81d33893192056dde74b26b2467f983c102cChristian Maeder endoth,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder CDS')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = omod2modAux(
473b81d33893192056dde74b26b2467f983c102cChristian Maeder oth H is
473b81d33893192056dde74b26b2467f983c102cChristian Maeder IL sorts SS . ((subsort C < C' .) SSDS)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder CDS SCDS OPDS MDS MAS EqS RlS
473b81d33893192056dde74b26b2467f983c102cChristian Maeder endoth,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder CDS') .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq omod2modAux(
473b81d33893192056dde74b26b2467f983c102cChristian Maeder oth H is
473b81d33893192056dde74b26b2467f983c102cChristian Maeder IL sorts SS . SSDS CDS SCDS OPDS
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ((msg F : TyL -> Ty .) MDS) MAS EqS RlS
473b81d33893192056dde74b26b2467f983c102cChristian Maeder endoth,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder CDS')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = omod2modAux(
473b81d33893192056dde74b26b2467f983c102cChristian Maeder oth H is
473b81d33893192056dde74b26b2467f983c102cChristian Maeder IL sorts SS . SSDS CDS SCDS
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ((op F : TyL -> Ty [msg] .) OPDS) MDS MAS EqS RlS
473b81d33893192056dde74b26b2467f983c102cChristian Maeder endoth,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder CDS') .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq omod2modAux(
473b81d33893192056dde74b26b2467f983c102cChristian Maeder oth H is IL sorts SS . SSDS none none OPDS none MAS EqS RlS endoth,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder CDS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = prepAxs(
473b81d33893192056dde74b26b2467f983c102cChristian Maeder th H is IL sorts SS . SSDS OPDS none none none endth,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder MAS, EqS, RlS, CDS, 0, nil) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederendfm
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*******************************************************************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder***
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** Evaluation of Modules and Theories
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder***
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** As explained in Section~\ref{evaluation-overview}, in our approach
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** transforming a module from its possibly complex structured version to its
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** unstructured form is a two-step process. First, all module expressions
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** are evaluated, generating an intermediate form in which there are only
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** simple inclusion relationships among the modules. This first step can be
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** seen as the reduction of a structured specification to its structured
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \emph{normal form}. Then, in a second step, this structured normal form is
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** flattened into an unstructured specification. Note, however, that the
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** importation of built-in modules is left explicit in the flattened form.
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** The function \texttt{normalize} is in charge of normalizing the
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** structure.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** The process of evaluation of a preunit has to take into account the
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** possibility of bubbles being contained in it. Depending on whether it is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** dealing with a preunit or with a unit, the evaluation process is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** accomplished by two different functions, namely, \texttt{evalPreModule} and
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \texttt{evalModule}. One function or the other will be called in each case.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** Evaluating a module already in the database, which is done by
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \texttt{evalModule}, does not require bubble handling. Besides this
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** difference, both functions proceed in a similar way. Before presenting the
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** functions \texttt{evalPreModule} and \texttt{evalModule} we introduce some
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** auxiliary declarations.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*******************************************************************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederfmod EVALUATION is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr O-O-TO-SYSTEM-MOD-TRANSF .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr MOD-EXPR-EVAL .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr UNIT-BUBBLE-PARSING .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder sort List<Module> .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder subsort Module < List<Module> .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op nil : -> List<Module> .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op __ : List<Module> List<Module> -> List<Module> [assoc id: nil] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq unitError(QIL) UL unitError(QIL') = unitError(QIL QIL') UL .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars M PU U U' U'' : Module .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars UL UL' : List<Module> .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars DB DB' : Database .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars ME ME' : ModuleExpression .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var P : ViewExp .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var PD : ParameterDecl .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars PL PL' PL'' : ParameterList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars IL IL' IL'' : ImportList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var I : Import .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var CDS : ClassDeclSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var SSDS : SubsortDeclSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var SCDS : SubclassDeclSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var OPD : OpDecl .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars OPDS VDS : OpDeclSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var MDS : MsgDeclSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var MAS : MembAxSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var EqS : EquationSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var RlS : RuleSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var B : Bool .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars QI QI' V L L' L'' A A' A'' F F' F'' X Y W Z : Qid .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars QIL QIL' SL : QidList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars S S' S'' C C' C'' : Sort .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars SS SS' : SortSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars Ty Ty' : Type .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars TyL TyL' : TypeList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars AtS AtS' : AttrSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var Rl : Rule .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var CD : ClassDecl .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var ADS : AttrDeclSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var MD : MsgDecl .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars T T' T'' T3 : Term .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var TL : TermList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var VMAP : ViewMap .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var VMAPS : RenamingSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var MAP : Renaming .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var MAPS : RenamingSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars VE VE' VE'' : ViewExp .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var HkL : HookList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars PDL PDL' : ParameterDeclList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var St : String .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** The \texttt{subunitImports} function returns the list of all the
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** subunits of a given unit. It is called with the list of importations of
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** the given unit as first argument, and proceeds recursively through its
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** structure collecting all the subunits in it.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** The function \texttt{subunitImports} proceeds storing the importations
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** considered up to that point, so it does not have to go through the same
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** part of the structure more than once. When the function is initially
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** called the second argument is set to \texttt{nil}.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op subunitImports : ParameterDeclList ImportList Database -> ImportList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op subunitImports : ImportList ImportList Database -> ImportList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq subunitImports((PD, PDL), IL, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = subunitImports(PDL, IL (protecting pd(PD) .), DB) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq subunitImports((nil).ParameterDeclList, IL, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = subunitImports(IL, nil, DB) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq subunitImports(I IL, IL' I IL'', DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = subunitImports(IL, IL' I IL'', DB) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq subunitImports(I IL, IL', DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = subunitImports(getImports(getTopModule(moduleName(I), DB)) IL, I IL', DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq subunitImports((nil).ImportList, IL, DB) = IL .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** The function \texttt{getModules} returns the list of those units
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** in the list of importations given as argument which are not built-in.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op getModules : ImportList Database -> List<Module> .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op getModules : ImportList List<Module> Database -> List<Module> .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getModules(IL, DB) = getModules(IL, nil, DB) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq getModules(((including ME .) IL), UL, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = getModules(IL, (UL getInternalModule(ME, DB)), DB) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq getModules(((including pd(PD) .) IL), UL, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = getModules(IL, (UL getInternalModule(pd(PD), DB)), DB) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq getModules(((extending ME .) IL), UL, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = getModules(IL, (UL getInternalModule(ME, DB)), DB) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq getModules(((extending pd(PD) .) IL), UL, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = getModules(IL, (UL getInternalModule(pd(PD), DB)), DB) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq getModules(((protecting ME .) IL), UL, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = getModules(IL, (UL getInternalModule(ME, DB)), DB) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq getModules(((protecting pd(PD) .) IL), UL, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = getModules(IL, (UL getInternalModule(pd(PD), DB)), DB) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getModules(IL, UL unitError(QIL) UL', DB) = unitError(QIL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getModules(nil, UL, DB) = UL .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** The normalization of a structure consists in evaluating each of the module
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** expressions appearing in it. Note that, if the \texttt{evalModExp} function
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** generates new modules, they will be evaluated using the \texttt{evalModule}
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** function, producing recursive calls on the part of the structure not
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** previously normalized. Parameters are handled separatedly. They are
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** folded out when analyzing the interface of a module.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr 3TUPLE{ImportList,ParameterDeclList,Database}
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder * (op ((_,_,_)) to <_;_;_>,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op p1_ to importList,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op p2_ to parameterDeclList,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op p3_ to database) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- sort Tuple{ImportList,ParameterDeclList,Database} .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder---- op <_;_;_> : ImportList ParameterDeclList Database
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- -> Tuple{ImportList,ParameterDeclList,Database} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- op importList : Tuple{ImportList,ParameterDeclList,Database} -> ImportList .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder---- op parameterDeclList :
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- Tuple{ImportList,ParameterDeclList,Database} -> ParameterDeclList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- op database : Tuple{ImportList,ParameterDeclList,Database} -> Database .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- eq importList(< IL ; PDL ; DB >) = IL .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- eq parameterDeclList(< IL ; PDL ; DB >) = PDL .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- eq database(< IL ; PDL ; DB >) = DB .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op normalize : ImportList ParameterDeclList Database
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder -> Tuple{ImportList,ParameterDeclList,Database} .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op normalize : ImportList ImportList ParameterDeclList ParameterDeclList
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder Database -> Tuple{ImportList,ParameterDeclList,Database} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op createCopy : ParameterDecl Database -> Database .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ---- its definition is in INST-EXPR-EVALUATION
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq normalize(IL, PDL, DB) = normalize(nil, IL, nil, PDL, DB) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq normalize(IL, IL', PDL, (X :: ME, PDL'), DB)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = normalize(IL, IL',
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder (PDL, X :: modExp(evalModExp(ME, nil, DB))), PDL',
473b81d33893192056dde74b26b2467f983c102cChristian Maeder createCopy((X :: modExp(evalModExp(ME, nil, DB))),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder database(evalModExp(ME, nil, DB)))) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq normalize(IL, (including ME .) IL', PDL, PDL', DB)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = normalize(IL (including modExp(evalModExp(ME, PDL, DB)) .), IL',
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder PDL, PDL', database(evalModExp(ME, PDL, DB))) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq normalize(IL, (extending ME .) IL', PDL, PDL', DB)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = normalize(IL (extending modExp(evalModExp(ME, PDL, DB)) .), IL',
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder PDL, PDL', database(evalModExp(ME, PDL, DB))) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq normalize(IL, (protecting ME .) IL', PDL, PDL', DB)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = normalize(IL (protecting modExp(evalModExp(ME, PDL, DB)) .), IL',
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder PDL, PDL', database(evalModExp(ME, PDL, DB))) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq normalize(IL, I IL', PDL, PDL', DB)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = normalize(IL I, IL', PDL, PDL', DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq normalize(IL, nil, PDL, nil, DB) = < IL ; PDL ; DB > .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \texttt{checkSortClashes} checks whether the intersection of the two sTS
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** of sorts given as arguments is empty or not. If it is nonempty, then there
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** is a clash of names, and a warning message is passed to the database. The
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** check is very simple, and only reports the name of one of the modules from
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** which the sorts come. Only the name of the module from which the sorts
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** given as second argument come is known at this point. This is the module
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** name given as first argument.
473b81d33893192056dde74b26b2467f983c102cChristian Maeder***
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** op checkSortClashes : Header SortSet SortSet Database -> Database .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder***
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** eq checkSortClashes(ME, (S ; SS), (S ; SS'), DB)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** = checkSortClashes(ME, SS, SS',
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** warning(DB,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** '\g 'Advisory: '\o
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** 'Clash 'of 'sort eSortToSort(S) 'from header2Qid(ME) '\n)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** ceq checkSortClashes(ME, (S ; SS), SS', DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** = checkSortClashes(ME, SS, SS', DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** if not (S in SS') .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** eq check(ME, none, SS, DB) = DB .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** In the current system, the only transformation handled by the
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \texttt{transform} function is the one from object-oriented modules to
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** system modules, which is accomplished by the
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \texttt{omod2mod} function presented in
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** Section~\ref{omod2modfunction}. However, \texttt{transform} has been
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** defined as a general transformation that could affect other kinds of
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** modules in a future extension.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op transform : Module Database -> Module .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq transform(unitError(QIL), DB) = unitError(QIL) .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder ceq transform(U, DB) = rmVariantAttrs(U) if U :: SModule or U :: STheory .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ceq transform(U, DB) = rmVariantAttrs(omod2mod(U, DB))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if not U :: SModule /\ not U :: STheory /\ U :: OModule or U :: OTheory .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** The function \texttt{signature} generates a functional module of sort
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \texttt{FModule}, without equations, by ``forgetting'' the appropriate
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** declarations and converting extended sorts and module names into quoted
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** identifiers.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op removeIds : OpDeclSet Module -> OpDeclSet .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq removeIds(op F : TyL -> Ty [id(T) AtS] . OPDS, M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = removeIds(op F : TyL -> Ty [AtS] . OPDS, M) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq removeIds(op F : TyL -> Ty [right-id(T) AtS] . OPDS, M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = removeIds(op F : TyL -> Ty [AtS] . OPDS, M) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq removeIds(op F : TyL -> Ty [left-id(T) AtS] . OPDS, M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = removeIds(op F : TyL -> Ty [AtS] . OPDS, M) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq removeIds(op F : TyL -> Ty [special(term-hook(QI, T) HkL) AtS] . OPDS, M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = removeIds(op F : TyL -> Ty [special(HkL) AtS] . OPDS, M) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq removeIds(OPDS, M) = OPDS [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op removeDittos : OpDeclSet Module -> OpDeclSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq removeDittos(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op F : TyL -> Ty [ditto AtS] . op F : TyL' -> Ty' [AtS'] . OPDS, M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = removeDittos(
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op F : TyL -> Ty [AtS removeCtorMetadata(AtS')] . op F : TyL' -> Ty' [AtS'] . OPDS, M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if not ditto in AtS' /\ sameKind(M, TyL Ty, TyL' Ty') .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq removeDittos(OPDS, M) = OPDS [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op signature : Module -> Module .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq signature(unitError(QIL)) = unitError(QIL) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq signature(U)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = fmod header2Qid(getName(U)) is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder convertModuleExpressions(getImports(U))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder sorts getSorts(U) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder getSubsorts(U)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder removeIds(
473b81d33893192056dde74b26b2467f983c102cChristian Maeder removeDittos(getOps(U),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder setSubsorts(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder setSorts(emptyFModule('DUMMY), getSorts(U)),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder getSubsorts(U))),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder setSubsorts(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder setSorts(emptyFModule('DUMMY), getSorts(U)),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder getSubsorts(U)))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder none
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder none
473b81d33893192056dde74b26b2467f983c102cChristian Maeder endfm
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** The function \texttt{flatModule} generates a module of sort \texttt{Module}
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** by ``forgetting'' declarations and converting extended sorts and module
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** identifiers into quoted identifiers.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op flatModule : Module -> Module .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq flatModule(unitError(QIL)) = unitError(QIL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq flatModule(U)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if U :: FModule or U :: FTheory
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then (fmod header2Qid(getName(U)) is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder getImports(U)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder sorts getSorts(U) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder getSubsorts(U)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder getOps(U)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder getMbs(U)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder getEqs(U)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder endfm)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else (mod header2Qid(getName(U)) is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder getImports(U)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder sorts getSorts(U) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder getSubsorts(U)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder getOps(U)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder getMbs(U)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder getEqs(U)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder getRls(U)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder endm)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder fi
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op convertModuleExpressions : ImportList -> ImportList .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq convertModuleExpressions(((protecting ME * (MAPS) .) IL))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (protecting ME * (renamings(MAPS)) .) convertModuleExpressions(IL) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq convertModuleExpressions(((extending ME * (MAPS) .) IL))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (extending ME * (renamings(MAPS)) .) convertModuleExpressions(IL) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq convertModuleExpressions(((including ME * (MAPS) .) IL))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (including ME * (renamings(MAPS)) .) convertModuleExpressions(IL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq convertModuleExpressions(I IL) = I convertModuleExpressions(IL) [owise] .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq convertModuleExpressions(nil) = nil .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op renamings : RenamingSet -> RenamingSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq renamings(op F to F' [AtS]) = op F to F' [AtS] .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq renamings((op F to F' [AtS], MAPS))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = (op F to F' [AtS], renamings(MAPS))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [owise] .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq renamings(op F : TyL -> Ty to F' [AtS])
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = op F : TyL -> Ty to F' [AtS] .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq renamings((op F : TyL -> Ty to F' [AtS], MAPS))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = (op F : TyL -> Ty to F' [AtS],
473b81d33893192056dde74b26b2467f983c102cChristian Maeder renamings(MAPS))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq renamings(sort S to S') = sort S to S' .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq renamings(((sort S to S'), MAPS))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = ((sort S to S'), renamings(MAPS))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq renamings(label L to L') = label L to L' .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq renamings(((label L to L'), MAPS))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = ((label L to L'), renamings(MAPS))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq renamings((MAP, MAPS)) = renamings(MAPS) [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq renamings(none) = none .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** The evaluation process for units without bubbles is as follows. After
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** normalizing the structure, the function \texttt{evalModule} calls
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \texttt{evalModule1} with an empty copy of the module to which the list of
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** declarations of importations of built-in modules is added, and with the
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** list of its nonbuilt-in subunits.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** \texttt{evalModule1} accumulates all the declarations in all the
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** nonbuilt-insubmodules in the copy of the module passed as second argument.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** The top module is then introduced in the database, and, after calling the
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** \texttt{transform} function and renaming all the variables in it, the
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** internal version of such a module is entered in the database as well.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** Finally, \texttt{evalModule2} generates the signature and the flat version
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** of the module and enters them in the database.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** op evalModule : Module Database -> Database .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** moved to MOD-EXPR-EVAL to solve dependency
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op evalModule1 : Module Module List<Module> OpDeclSet Database -> Database .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op evalModule2 : Module Module Database -> Database .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq evalModule(U, VDS, DB)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = evalModule1(setPars(setImports(U, IL), PDL), empty(U),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder getModules(IL', DB'), VDS, DB')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if < IL ; PDL ; DB' > := normalize(getImports(U), getPars(U), DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder /\ IL' := subunitImports(PDL, IL, DB') .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq evalModule1(U, U', (U'' UL), VDS, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = evalModule1(U, addDecls(U', setImports(U'', nil)), UL, VDS, DB) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq evalModule1(U, U', nil, VDS, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = evalModule2(
473b81d33893192056dde74b26b2467f983c102cChristian Maeder setImports(transform(U, DB), nil),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder U',
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder insertVars(getName(U), VDS,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder insertInternalModule(getName(U), transform(U, DB),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder insertTopModule(getName(U), U, DB)))) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq evalModule1(U, U', unitError(QIL), VDS, DB) = warning(DB, QIL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq evalModule2(U, U', DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = insertFlatModule(getName(U), flatModule(addDecls(U, U')), DB) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq evalModule2(unitError(QIL), U, DB) = warning(DB, QIL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** The function \texttt{evalPreModule} has to take care of the bubbles in the
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** unit. As we explained in Section~\ref{evaluation-overview}, both the
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** signature and the flattened version of the module are created
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** simultaneously, completing the parsing of the bubbles once the signature
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** has been built, and then completing the flattened module.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** The \texttt{evalPreModule} function takes as arguments two copies of the
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** module and a database. We shall see in Section~\ref{unit-processing} how
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** these two modules are generated; the one passed as first argument has
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** still bubbles in it, while the other one, which will be used to build the
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** signature, does not contain any bubbles. This module without bubbles is
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** the result of removing the bubbles from the declarations in it, or of
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** removing the declarations themselves when they contain bubbles, as in the
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** case of equations, for example.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** The \texttt{evalPreModule} function is quite similar to the function
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \texttt{evalModule}. First, the structure is normalized by calling the
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \texttt{normalize} function, and then all the subunits in the
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** structure are collected (accomplished by \texttt{subunitImports} and
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \texttt{getModules}) and the list of importations is updated
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** with the sublist of importations of built-in
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** modules (\texttt{selectBuiltInImports}). Second, the structure of all the
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** subunits below the top is flattened to a single unit. This unit is used to
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** create a first version of the signature (without identity elements of
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** operators) in which all the bubbles in the top preunit are
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** parsed (\texttt{solveBubbles}). The final version of the signature and
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** the flat unit are generated once the bubbles have been parsed. The
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** `internal' version of the module is also generated by renaming the
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** variables in it (\texttt{renameVars}). All these versions of the module
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** are finally entered in the database.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** Note that if the \texttt{META-LEVEL} module is imported in the module
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** being evaluated, a declaration importing the predefined module
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \texttt{UP} Section~\ref{non-built-in-predefined}) is added. With the
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** declarations in this module it will be possible to parse bubbles
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** containing calls to the \texttt{up} functions (see
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** Section~\ref{structured-specifications}) in them.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op evalPreModule : Module Module OpDeclSet Database -> Database .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op evalPreModule1 :
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder Module Module List<Module> Module OpDeclSet Database -> Database .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op evalPreModule2 : Module Module Module OpDeclSet Database -> Database .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op evalPreModule3 : Module Module Module Database -> Database .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder *** evalPreModule just calls evalPreModule1 with a set of the units in the
473b81d33893192056dde74b26b2467f983c102cChristian Maeder *** structure of the given module. Depending on whether the module is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** importing META-LEVEL or not UP will be added. BOOL will be added if
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** the include BOOL flag is set and the module doesn't include it already.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq evalPreModule(PU, U, VDS, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** PU : top unit with bubbles (preunit)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** U : top unit without bubbles (decls with bubbles were removed)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder *** VDS : ops corresponding to the vbles in the top unit
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = evalPreModule1(
473b81d33893192056dde74b26b2467f983c102cChristian Maeder setPars(setImports(PU, IL'), PDL'),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder setName(empty(U), getName(U)),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder getModules(IL'', DB'),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder setImports(U, nil),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder VDS,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder DB')
473b81d33893192056dde74b26b2467f983c102cChristian Maeder if IL := getImports(PU)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder /\ PDL := getPars(PU)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder /\ < IL' ; PDL' ; DB' > := normalize(defImports(PU, DB) IL, PDL, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder /\ IL'' := subunitImports(PDL, IL', DB') .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq evalPreModule(PU, U, VDS, DB) = DB [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** evalPreModule1 joins all the units in the structure into a single unit,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** the one given as second argument; recall that the fourth one is the
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** top module without bubbles but with the complete list of subunits
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** being imported explicitly
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq evalPreModule1(PU, U, (U' UL), U'', VDS, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = evalPreModule1(PU, addDecls(U, U'), UL, U'', VDS, DB) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq evalPreModule1(PU, U, nil, U', VDS, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = evalPreModule2(PU, U, signature(transform(addDecls(U', setImports(U, nil)), DB)), VDS, DB)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq evalPreModule1(PU, unitError(QIL), UL, U', VDS, DB) = warning(DB, QIL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq evalPreModule1(unitError(QIL), U, UL, U', VDS, DB) = warning(DB, QIL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq evalPreModule1(PU, U, unitError(QIL), U', VDS, DB) = warning(DB, QIL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq evalPreModule2(PU, U, M, VDS, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** PU : top module with bubbles
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** U : everything below
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** M : complete signature
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = evalPreModule3(
473b81d33893192056dde74b26b2467f983c102cChristian Maeder solveBubblesMod(PU, getOps(U), M,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder included('META-MODULE, getImports(PU), DB), VDS, DB),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder U, M,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder insertVars(getName(PU), VDS,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder insertTopModule(getName(PU),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder solveBubblesMod(PU, getOps(U), M,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder included('META-MODULE, getImports(PU), DB), VDS, DB), DB))) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq evalPreModule3(PU, U, M, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** PU : top module without bubbles
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** U : everything below
473b81d33893192056dde74b26b2467f983c102cChristian Maeder *** M : complete signature
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = insertFlatModule(getName(PU),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder flatModule(setImports(transform(addDecls(PU, U), DB), nil)),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder insertInternalModule(getName(PU), transform(PU, DB), DB)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq evalPreModule3(unitError(QIL), U, M, DB) = warning(DB, QIL) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederendfm
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*******************************************************************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** Note that in both \texttt{evalModule} and \texttt{evalPreModule}, the function
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \texttt{transform} has to be invoked to transform the module into a
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** functional or system module. In the current system, the only
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** transformation available is from object-oriented modules to system modules.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder***
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** 6.8 Application of Map STS
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder***
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** The following two modules deal with the application of a set of renaming
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** maps to a module. Except for the proof obligations and additional checks
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** associated with views---almost none of these checks are performed, and
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** none of these proof obligations is generated in the current version---the
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** way of applying a renaming map and a view map on a module is the same.
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** Internally, they are treated in the same way; the only difference between
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** them consists in the way of calling the function to accomplish this
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** application.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** Note that there might be some `interference' between sort maps, and
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** operator maps and message maps when they are applied. Let us consider for
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** example a module with an operator declaration
473b81d33893192056dde74b26b2467f983c102cChristian Maeder***
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** op f : Foo -> Foo .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder***
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** and a renaming map set
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder***
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** (sort Foo to Bar, op f : Foo -> Foo to g)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder***
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** These renamings have to be applied carefully to avoid unintended behaviors.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** Depending on which of the maps is applied first, the other will be
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** applicable or not. All the maps must be applied to the original module.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** To avoid the interference between the sort maps and other maps, the map set
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** is divided into two sTS: The first one contains the sort maps, and the
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** second one contains the other maps.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** We assume that there are no ambiguous mappings, that is, that we do not
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** have, for example, maps \verb~op f to g~ and \verb~op f to h~. In case of
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** such ambiguity, one of the maps will be arbitrarily chosen.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder***
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** 6.8.1 Map STS on Terms
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder***
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** The application of a set of view maps to a term is defined in the following
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** module \texttt{VIEW-MAP-SET-APPL-ON-TERM}. The function
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \texttt{applyMapsToTerm} is used to apply a given view map set to terms
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** appearing in equations, rules, identity element declarations, and
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** membership axioms, as part of the process of applying a map set to a unit.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** Some of the auxiliary functions introduced in this module will also be used
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** in the application of maps to operator and message declarations in the
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \texttt{VIEW-MAP-SET-APPL-ON-UNIT} module.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*******************************************************************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederfmod VIEW-MAP-SET-APPL-ON-TERM is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr UNIT .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr VIEW-MAP .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr EXT-SORT .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var VMAP : ViewMap .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars VMAPS VMAPS' VMAPS'' : Set{ViewMap} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var M : Module .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars F F' F'' A A' A'' : Qid .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars T T' T'' O : Term .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars TL TL' TL'' TL3 : TermList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars S S' S'' C C' C'' : Sort .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var SS : SortSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var K : Kind .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars TyL TyL' : TypeList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars Ty Ty' : Type .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars Subst Subst' Subst'' : Substitution .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var AtS : AttrSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var OPDS : OpDeclSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars V V' : Variable .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars Ct Ct' : Constant .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var QIL : QidList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var Cd : Condition .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** The following functions \texttt{applyMapsToSort} and
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \texttt{applyMapsToClassSort} apply a set of maps, respectively, to a
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** sort a to a class name in its single identifier form, that is, when they
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** appear qualifying constants. Functions \texttt{applyMapsToType} and
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** \texttt{applyMapsToClassName} are similar but being applied to sort or
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** class names in their normal form.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op applyMapsToSort : Set{ViewMap} Sort -> Sort .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq applyMapsToSort((sort S to S'), S) = S' .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq applyMapsToSort((sort S to S'), S'') = S'' [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq applyMapsToSort(((sort S to S'), VMAPS), S) = S' .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq applyMapsToSort(((sort S to S'), VMAPS), S'')
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = applyMapsToSort(VMAPS, S'')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq applyMapsToSort(VMAP, S) = S [owise].
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq applyMapsToSort((VMAP, VMAPS), S) = applyMapsToSort(VMAPS, S) [owise].
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq applyMapsToSort(none, S) = S .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op applyMapsToSortSet : Set{ViewMap} SortSet -> SortSet .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq applyMapsToSortSet(VMAPS, (S ; SS))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (applyMapsToType(VMAPS, S) ; applyMapsToSortSet(VMAPS, SS)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq applyMapsToSortSet(VMAPS, none) = none .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op applyMapsToType : Set{ViewMap} Type -> Type .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq applyMapsToType((sort S to S'), S) = S' .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq applyMapsToType((sort S to S'), S'') = S'' [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq applyMapsToType(((sort S to S'), VMAPS), S) = S' .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq applyMapsToType(((sort S to S'), VMAPS), S'')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = applyMapsToType(VMAPS, S'')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq applyMapsToType((sort S to S'), K)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = qid("[" + string(applyMapsToType(sort S to S', getSort(K))) + "]") .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq applyMapsToType(((sort S to S'), VMAPS), K)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = qid("["
473b81d33893192056dde74b26b2467f983c102cChristian Maeder + string(applyMapsToType(((sort S to S'), VMAPS), getSort(K)))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder + "]") .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq applyMapsToType(none, Ty) = Ty .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op applyMapsToClassName : Set{ViewMap} Sort -> Sort .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq applyMapsToClassName((class C to C'), C) = C' .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq applyMapsToClassName((class C to C'), C'') = C'' [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq applyMapsToClassName(((class C to C'), VMAPS), C) = C' .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq applyMapsToClassName(((class C to C'), VMAPS), C'')
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = applyMapsToClassName(VMAPS, C'')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq applyMapsToClassName(VMAP, C) = C [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq applyMapsToClassName((VMAP, VMAPS), C)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = applyMapsToClassName(VMAPS, C)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq applyMapsToClassName(none, C) = C .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \texttt{} applies a map set to an operator name.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op applyOpMapsToOpId : Qid Set{ViewMap} -> Qid .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq applyOpMapsToOpId(F, (op F to F' [AtS])) = F' .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq applyOpMapsToOpId(F, (op F : TyL -> Ty to F' [AtS])) = F' .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq applyOpMapsToOpId(F, VMAPS) = F [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** Note that all maps introduced in Sections~\ref{renaming-maps}
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** and~\ref{view-maps}, except for label maps, may affect a term. For example,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** sort maps will be applied to the qualifications of terms, and class and
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** attribute maps have to be applied to the objects appearing in the term.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** Operator and message maps in which an explicit arity and coarity is given,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** and operator maps going to derived operators (see Section~\ref{Views})
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** must be applied to the complete family of subsort-overloaded operators.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** The function \texttt{applyMapsToTerm} takes as arguments two sTS of
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** view maps (the first set for sort maps, and the second for the other maps),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** the term to which the maps will be applied, and a module to be used in the
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** matching of terms, sort comparisons, etc. Its declaration is as follows.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op applyMapsToTerm2 : Set{ViewMap} Set{ViewMap} Term Module -> Term .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** If the term on which the maps have to be applied is not an object,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** different cases have to be considered for each of the possible forms of a
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** term. If it is a variable or \texttt{error*}, the same term is returned
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** without change (term maps are a special case for this). If it is a sort
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** test or a lazy sort test, with forms \verb~T : S~ and \verb~T :: S~,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** respectively, the maps are applied to the term \texttt{T} and to the sort
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \texttt{S}. In case of being of forms \verb~F.S~ or \verb~F[TL]~ with
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \texttt{F} an operator name, \texttt{S} a sort, and \texttt{TL} a list of
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** terms, the function \texttt{getRightOpMaps} will return the subset of
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** maps which are applicable on such term. If \texttt{none} is returned then
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** no map is applicable. If more than one map is returned then there is an
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** ambiguity, and any of them will be arbitrarily taken. The function
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** \texttt{imagTerm} is called with the term and the maps applicable on
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** it and return the image of the term. In case of a term of the form
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** \texttt{F[TL]}, \texttt{imageOfTerm} will make recursive calls with the
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** arguments in \texttt{TL}.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** The application of a term map to a term requires the `matching' of the
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** source term in the map with the term on which the map is applied, and then
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** the application of the obtained substitution. Note, however, that a
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** complete matching algorithm is not required. Given the form of the pattern
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** we can choose before hand the appropriate map, that is, we know that in
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** fact there is a match when the function is called. Note also that the map
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** has to be applied to the whole family of subsort overloaded operators. We
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** just have to check that the sort of the given variable and the
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** corresponding term are in the same connected component of sorts. In
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** addition to getting the appropriate substitution, the only thing we need
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** to check is that there are no variables with different assignments, that
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** is, that in case of having a nonlinear pattern, the terms being assigned
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** to each variable are equal. We call \texttt{pseudoMatch} to the function
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** doing this task.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op applyMapsToTerm2 : Set{ViewMap} Set{ViewMap} TermList Module -> TermList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op imageOfTerm : Set{ViewMap} Set{ViewMap} Term Set{ViewMap} Module -> Term .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op applyMapsToSubst :
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder Set{ViewMap} Set{ViewMap} Substitution Module -> Substitution .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op pseudoMatch : TermList TermList Module Substitution -> Substitution .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op pseudoMatch2 : TermList TermList Module Substitution -> Substitution .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op pseudoMatchResult : Substitution -> Substitution .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op pseudoMatchResult :
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder Substitution Assignment Substitution Substitution -> Substitution .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op getRightOpMaps :
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder Qid TypeList Type Set{ViewMap} Module -> Set{ViewMap} .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op applyMapsToObjectAttrSet :
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder Set{ViewMap} Set{ViewMap} Sort Term Module -> Term .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op applyMapsToAttrNameInTerm : Set{ViewMap} Sort Qid Module -> Qid .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq applyMapsToTerm2(VMAPS, VMAPS', Ct, M)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = imageOfTerm(VMAPS, VMAPS', Ct,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder getRightOpMaps(getName(Ct), nil, getType(Ct), VMAPS', M), M) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq applyMapsToTerm2(VMAPS, VMAPS', V, M)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = qid(string(getName(V)) + ":"
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder + string(applyMapsToType(VMAPS, getType(V)))) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq applyMapsToTerm2(VMAPS, VMAPS', qidError(QIL), M) = qidError(QIL) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq applyMapsToTerm2(VMAPS, VMAPS', F[TL], M)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = imageOfTerm(VMAPS, VMAPS', F[TL],
473b81d33893192056dde74b26b2467f983c102cChristian Maeder getRightOpMaps(F, eLeastSort(M, TL), leastSort(M, F[TL]),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder VMAPS', M), M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ---- if (F =/= '<_:_|_>) and (F =/= '<_:_|`>) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq applyMapsToTerm2(VMAPS, VMAPS', '<_:_|_>[O, Ct, T], M)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = '<_:_|_>[applyMapsToTerm2(VMAPS, VMAPS', O, M),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder qid(string(applyMapsToClassName(VMAPS', getName(Ct)))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder + "." + string(applyMapsToClassName(VMAPS', getType(Ct)))),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder applyMapsToObjectAttrSet(VMAPS, VMAPS', getName(Ct), T, M)].
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ceq applyMapsToTerm2(VMAPS, VMAPS', '<_:_|_>[O, C, T], M)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = '<_:_|_>[applyMapsToTerm2(VMAPS, VMAPS', O, M),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder applyMapsToClassName(VMAPS', C),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder applyMapsToObjectAttrSet(VMAPS, VMAPS', C, T, M)]
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if not C :: Constant .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq applyMapsToTerm2(VMAPS, VMAPS', '<_:_|`>[O, Ct], M)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = '<_:_|_>[applyMapsToTerm2(VMAPS, VMAPS', O, M),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder qid(string(applyMapsToClassName(VMAPS', getName(Ct)))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder + "." + string(applyMapsToClassName(VMAPS', getType(Ct)))),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder 'none.AttributeSet] .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ceq applyMapsToTerm2(VMAPS, VMAPS', '<_:_|`>[O, C], M)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = '<_:_|_>[applyMapsToTerm2(VMAPS, VMAPS', O, M),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder applyMapsToClassName(VMAPS', C), 'none.AttributeSet]
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if not C :: Constant .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq applyMapsToTerm2(VMAPS, VMAPS', F[TL], M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = qid("_::`" + string(applyMapsToType(VMAPS, qid(substr(string(F), 4, length(string(F))))))) [
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder applyMapsToTerm2(VMAPS, VMAPS', TL, M)]
473b81d33893192056dde74b26b2467f983c102cChristian Maeder if substr(string(F), 0, 4) == "_::`"
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder /\ substr(string(F), sd(length(string(F)), 2), 2) = "`}" .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ceq applyMapsToTerm2(VMAPS, VMAPS', (T, TL), M)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = (applyMapsToTerm2(VMAPS, VMAPS', T, M),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder applyMapsToTerm2(VMAPS, VMAPS', TL, M))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if TL =/= empty .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** Application of a map set to the name of an attribute in an object
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq applyMapsToAttrNameInTerm((attr A . S to A'), C, A'', M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if sameKind(M, S, C) and-then (qid(string(A) + "`:_") == A'')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then qid(string(A') + "`:_")
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else A''
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq applyMapsToAttrNameInTerm(((attr A . S to A'), VMAPS), C, A'', M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if sameKind(M, S, C) and-then (qid(string(A) + "`:_") == A'')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then qid(string(A') + "`:_")
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else applyMapsToAttrNameInTerm(VMAPS, C, A'', M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq applyMapsToAttrNameInTerm(VMAP, C, A, M) = A [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq applyMapsToAttrNameInTerm((VMAP, VMAPS), C, A, M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = applyMapsToAttrNameInTerm(VMAPS, C, A, M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq applyMapsToAttrNameInTerm(none, S, A, M) = A .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** Selection of all the operator or message maps that are applicable on an
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** operator with a given arity and coarity.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getRightOpMaps(F, TyL, Ty, (msg F' to F''), M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = getRightOpMaps(F, TyL, Ty, (op F' to F'' [none]), M) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getRightOpMaps(F, TyL, Ty, ((msg F' to F''), VMAPS), M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = getRightOpMaps(F, TyL, Ty, ((op F' to F'' [none]), VMAPS), M) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getRightOpMaps(F, TyL, Ty, (msg F' : TyL' -> Ty' to F''), M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = getRightOpMaps(F, TyL, Ty, op F' : TyL' -> Ty' to F'' [none], M) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getRightOpMaps(F, TyL, Ty, ((msg F' : TyL' -> Ty' to F''), VMAPS), M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = getRightOpMaps(F, TyL, Ty,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder (op F' : TyL' -> Ty' to F'' [none], VMAPS), M) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getRightOpMaps(F, TyL, Ty, (op F to F' [AtS]), M) = (op F to F' [AtS]) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getRightOpMaps(F, TyL, Ty, (op F to F' [AtS], VMAPS), M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (op F to F' [AtS], getRightOpMaps(F, TyL, Ty, VMAPS, M)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getRightOpMaps(F, TyL, Ty, op F : TyL' -> Ty' to F' [AtS], M)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = if sameKind(M, TyL Ty, TyL' Ty')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then (op F : TyL' -> Ty' to F' [AtS])
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else none
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getRightOpMaps(F, TyL, Ty, (op F : TyL' -> Ty' to F' [AtS], VMAPS), M)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = if sameKind(M, TyL Ty, TyL' Ty')
473b81d33893192056dde74b26b2467f983c102cChristian Maeder then (op F : TyL' -> Ty' to F' [AtS],
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder getRightOpMaps(F, TyL, Ty, VMAPS, M))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else getRightOpMaps(F, TyL, Ty, VMAPS, M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getRightOpMaps(F, TyL, Ty, termMap(F[TL], T), M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if sameKind(M, TyL, varListSort(TL))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then (termMap(F[TL], T))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else none
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getRightOpMaps(F, TyL, Ty, (termMap(F[TL], T), VMAPS), M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if sameKind(M, TyL, varListSort(TL))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then (termMap(F[TL], T), getRightOpMaps(F, TyL, Ty, VMAPS, M))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder else getRightOpMaps(F, TyL, Ty, VMAPS, M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getRightOpMaps(F, TyL, Ty, (termMap(Ct, T)), M)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = if TyL == nil
473b81d33893192056dde74b26b2467f983c102cChristian Maeder and-then (F == getName(Ct)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder and-then sameKind(M, Ty, getType(Ct)))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then (termMap(Ct, T))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else none
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getRightOpMaps(F, TyL, Ty, (termMap(Ct, T), VMAPS), M)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = if TyL == nil
473b81d33893192056dde74b26b2467f983c102cChristian Maeder and-then (F == getName(Ct)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder and-then sameKind(M, Ty, getType(Ct)))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then (termMap(Ct, T), getRightOpMaps(F, TyL, Ty, VMAPS, M))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder else getRightOpMaps(F, TyL, Ty, VMAPS, M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getRightOpMaps(F, TyL:[Type], Ty:[Type], VMAPS, M) = none [owise].
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op varListSort : TermList -> TypeList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq varListSort((V, TL)) = (getType(V) varListSort(TL)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq varListSort(empty) = nil .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** Application of a map set to the set of attributes in an object
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq applyMapsToObjectAttrSet(VMAPS, VMAPS', C, '_`,_[A[T], TL], M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = '_`,_[applyMapsToAttrNameInTerm(VMAPS', C, A, M)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder [applyMapsToTerm2(VMAPS, VMAPS', T, M)],
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder applyMapsToObjectAttrSet(VMAPS, VMAPS', C, TL, M)] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq applyMapsToObjectAttrSet(VMAPS, VMAPS', C, A[T], M)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = applyMapsToAttrNameInTerm(VMAPS', C, A, M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [applyMapsToTerm2(VMAPS, VMAPS', T, M)] .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq applyMapsToObjectAttrSet(VMAPS, VMAPS', C,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder '_`,_['none.AttributeSet, TL], M)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = '_`,_['none.AttributeSet,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder applyMapsToObjectAttrSet(VMAPS, VMAPS', C, TL, M)] .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq applyMapsToObjectAttrSet(VMAPS, VMAPS', C, 'none.AttributeSet, M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = 'none.AttributeSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** Image of a term
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq imageOfTerm(VMAPS, VMAPS', Ct, none, M)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = qid(string(getName(Ct)) + "."
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder + string(applyMapsToType(VMAPS, getType(Ct)))) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq imageOfTerm(VMAPS, VMAPS', F[TL], none, M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = F [ applyMapsToTerm2(VMAPS, VMAPS', TL, M) ] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq imageOfTerm(VMAPS, VMAPS', F[TL], (op F to F' [AtS]), M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = F' [ applyMapsToTerm2(VMAPS, VMAPS', TL, M) ] .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq imageOfTerm(VMAPS, VMAPS', F[TL], ((op F to F' [AtS]), VMAPS''), M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = F' [ applyMapsToTerm2(VMAPS, VMAPS', TL, M) ] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq imageOfTerm(VMAPS, VMAPS', F[TL], (op F : TyL -> Ty to F'[AtS]), M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = F' [ applyMapsToTerm2(VMAPS, VMAPS', TL, M) ] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq imageOfTerm(VMAPS, VMAPS', F[TL], (op F : TyL -> Ty to F'[AtS], VMAPS''),M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = F' [ applyMapsToTerm2(VMAPS, VMAPS', TL, M) ] .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq imageOfTerm(VMAPS, VMAPS', T, termMap(T', T''), M)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = applySubst(T'',
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder applyMapsToSubst(VMAPS, VMAPS', pseudoMatch(T', T, M, none), M)) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq imageOfTerm(VMAPS, VMAPS', T, (termMap(T', T''), VMAPS''), M)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = applySubst(T'',
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder applyMapsToSubst(VMAPS, VMAPS', pseudoMatch(T', T, M, none), M)) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ceq imageOfTerm(VMAPS, VMAPS', Ct, (op F to F' [AtS]), M)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = qid(string(F') + "." + string(applyMapsToType(VMAPS, getType(Ct))))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if getName(Ct) = F .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ceq imageOfTerm(VMAPS, VMAPS', Ct, ((op F to F' [AtS]), VMAPS''), M)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = qid(string(F') + "." + string(applyMapsToType(VMAPS, getType(Ct))))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if getName(Ct) = F .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq imageOfTerm(VMAPS, VMAPS', Ct, (op F : TyL -> Ty to F' [AtS]), M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = qid(string(F') + "." + string(applyMapsToType(VMAPS, getType(Ct))))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if getName(Ct) = F .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq imageOfTerm(VMAPS, VMAPS', Ct, (op F : TyL -> Ty to F' [AtS], VMAPS''),M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = qid(string(F') + "." + string(applyMapsToType(VMAPS, getType(Ct))))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if getName(Ct) = F .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** Application of a Substitution on a term
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op applySubst : TermList Substitution -> TermList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq applySubst(T, none) = T .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq applySubst(V, ((V' <- T) ; Subst))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if getName(V) == getName(V')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then T
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else applySubst(V, Subst)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq applySubst(F[TL], Subst) = F[applySubst(TL, Subst)] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq applySubst(Ct, Subst) = Ct .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ceq applySubst((T, TL), Subst)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (applySubst(T, Subst), applySubst(TL,Subst))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if TL =/= empty .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** Application of a Substitution to a condition
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op applySubst : Condition Substitution -> Condition .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq applySubst(T = T' /\ Cd, Subst)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (applySubst(T, Subst) = applySubst(T', Subst)) /\ applySubst(Cd, Subst) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq applySubst(T => T' /\ Cd, Subst)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (applySubst(T, Subst) => applySubst(T', Subst)) /\ applySubst(Cd, Subst) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq applySubst(T : S /\ Cd, Subst)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (applySubst(T, Subst) : S) /\ applySubst(Cd, Subst) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq applySubst((nil).EqCondition, Subst) = nil .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** PseudoMatch
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq pseudoMatch(T, T', M, Subst)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = pseudoMatchResult(pseudoMatch2(T, T', M, Subst)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq pseudoMatch2(Ct, Ct', M, Subst) = none .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq pseudoMatch2(F[TL], F'[TL'], M, Subst)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if F == F'
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then pseudoMatch2(TL, TL', M, Subst)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder else none
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq pseudoMatch2((V, TL), (T, TL'), M, Subst)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if sameKind(M, getType(V), leastSort(M, T))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder then pseudoMatch2(TL, TL', M, (V <- T ; Subst))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else none
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq pseudoMatch2(V, T, M, Subst)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if sameKind(M, getType(V), leastSort(M, T))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder then (V <- T ; Subst)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else none
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq pseudoMatch2((V, TL), (T, TL'), M, Subst)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if sameKind(M, getType(V), leastSort(M, T))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder then pseudoMatch2(TL, TL', M, (V <- T ; Subst))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else none
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq pseudoMatch2((Ct, TL), (Ct', TL'), M, Subst)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if getName(Ct) == getName(Ct')
473b81d33893192056dde74b26b2467f983c102cChristian Maeder then pseudoMatch2(TL, TL', M, Subst)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else none
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq pseudoMatch2((F[TL], TL'), (F'[TL''], TL3), M, Subst)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if F == F'
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then pseudoMatch2(TL', TL3, M, pseudoMatch2(TL, TL'', M, none) ; Subst)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder else none
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq pseudoMatch2(empty, empty, M, Subst) = Subst .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** pseudoMatchResult detects conflicts and eliminates duplicates
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq pseudoMatchResult((V <- T) ; Subst)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = pseudoMatchResult(none, (V <- T), none, Subst) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq pseudoMatchResult(none) = none .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq pseudoMatchResult(Subst, (V <- T), Subst', (V' <- T') ; Subst'')
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = if V == V'
473b81d33893192056dde74b26b2467f983c102cChristian Maeder then if T == T'
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then pseudoMatchResult(Subst, (V <- T), Subst', Subst'')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else none
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else pseudoMatchResult(Subst, (V <- T), Subst' ; (V' <- T'), Subst'')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq pseudoMatchResult(Subst, (V <- T), (V' <- T') ; Subst', none)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = pseudoMatchResult(Subst ; (V <- T), (V' <- T'), none, Subst') .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq pseudoMatchResult(Subst, (V <- T), none, none) = (Subst ; (V <- T)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** Application of a set of maps to a substitution
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq applyMapsToSubst(VMAPS, VMAPS', ((V <- T) ; Subst), M)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = ((applyMapsToTerm2(VMAPS, VMAPS', V, M)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder <- applyMapsToTerm2(VMAPS, VMAPS', T, M)) ;
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder applyMapsToSubst(VMAPS, VMAPS', Subst, M)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq applyMapsToSubst(VMAPS, VMAPS', none, M) = none .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederendfm
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*******************************************************************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** We do not include here the equations defining the semantics of the function
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \texttt{applyMapsToTerm}. Instead, we present an example illustrating
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** the meaning of the function. Renaming maps and view maps were already
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** discussed in Sections~\ref{Views} and~\ref{module-expressions}.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** Let us consider the following configuration in the module
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \texttt{STACK2[Accnt]} presented in Section~\ref{module-expressions}. In
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** this configuration we have objects in the class \texttt{Accnt} which
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** represent the accounts of different clients of a bank, which is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** represented as an object \texttt{'bank} of class \texttt{Stack[Accnt]}.
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** The object \texttt{'bank} in the example configuration below keeps a stack
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** with the accounts of the bank represented as a linked list of nodes, each
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** of which corresponds to the account of one of the clients.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** ('bank push 'john)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** ('peter elt 2000)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** < 'bank : Stack[Accnt] | first : o ('bank, 1) >
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** < 'paul : Accnt | bal : 5000 >
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** < 'peter : Accnt | bal : 2000 >
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** < 'mary : Accnt | bal : 7200 >
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** < 'john : Accnt | bal : 100 >
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** < o('bank, 0) : Node[Accnt] | node : 'peter, next : null >
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** < o('bank, 1) : Node[Accnt] | node : 'mary, next : o('bank, 0) > .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder***
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** Let us apply the following renaming to the previous term.
473b81d33893192056dde74b26b2467f983c102cChristian Maeder***
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** (op o to id,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** class Stack[Accnt] to Bank,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** msg _push_ : Oid Oid -> Msg to open`account`in_to_,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** msg _pop to close`account`of_,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** msg _elt_ to _owns_dollars,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** attr node . Node[Accnt] to client,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** attr bal . Accnt to balance)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder***
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** The resulting term is as follows.
473b81d33893192056dde74b26b2467f983c102cChristian Maeder***
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** (open account in 'bank to 'john)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** ('peter owns 2000 dollars)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** < 'bank : Bank | first : id('bank, 1) >
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** < 'paul : Accnt | balance : 5000 >
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** < 'peter : Accnt | balance : 2000 >
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** < 'mary : Accnt | balance : 7200 >
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** < 'john : Accnt | balance : 100 >
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** < id('bank, 0) : Node[Accnt] | client : 'peter, next : null >
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** < id('bank, 1) : Node[Accnt] | client : 'mary, next : id('bank, 0) >
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** The function \texttt{applyMapsToTerm} treats the object constructor
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \verb~<_:_|_>~ in a special way. It cannot be renamed, and, when an
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** occurrence of such a constructor is found, class and attribute maps require
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** a particular handling. Inside terms these maps are only triggered when
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** this constructor is found, and they are applied in a very restricted way,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** according to the general pattern for objects. We assume that the operator
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** \verb~<_:_|_>~ is only used for objects and that objects constructed using
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** it are well-formed.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder***
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** 6.8.2 Map STS on Modules
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder***
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** The application of view maps to modules and theories of the different types
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** is defined in the following module \texttt{VIEW-MAP-SET-APPL-ON-UNIT}. The
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** function \texttt{applyMapsToModule} is defined recursively by applying it
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** to the different components of a unit. When the terms in the different
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** declarations are reached, the function \texttt{applyMapsToTerm} is
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** called. This call is made with the set of maps split conveniently, as
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** explained above.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*******************************************************************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederfmod VIEW-MAP-SET-APPL-ON-UNIT is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr VIEW-MAP-SET-APPL-ON-TERM .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr INT-LIST .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr VIEW-EXPR .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op applyMapsToModule : Set{ViewMap} Module Module -> Module .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op applyMapsToModuleAux : Set{ViewMap} Set{ViewMap} Module Module -> Module .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op splitMaps : Set{ViewMap} -> Tuple{Set{ViewMap},Set{ViewMap}} .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op splitMapsAux : Set{ViewMap} Set{ViewMap} Set{ViewMap}
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder -> Tuple{Set{ViewMap},Set{ViewMap}} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op applyMapsToTypeList : Set{ViewMap} TypeList -> TypeList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op applyMapsToSubsorts : Set{ViewMap} SubsortDeclSet -> SubsortDeclSet .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op applyMapsToOps : Set{ViewMap} Set{ViewMap} OpDeclSet Module
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder -> OpDeclSet .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op applyMapsToOp :
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder Set{ViewMap} Set{ViewMap} Set{ViewMap} OpDecl Module -> OpDecl .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op applyMapsToAttrs : Set{ViewMap} Set{ViewMap} AttrSet Module -> AttrSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op applyMapToAttrs : ViewMap AttrSet -> AttrSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op applyMapToAttrsAux : AttrSet AttrSet AttrSet -> AttrSet .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op applyMapsToHooks :
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder Set{ViewMap} Set{ViewMap} HookList Module -> HookList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op applyMapsToHooksAux : Set{ViewMap} Set{ViewMap} Hook Module -> Hook .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op applyMapsToMbs : Set{ViewMap} Set{ViewMap} MembAxSet Module
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder -> MembAxSet .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op applyMapsToEqs :
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder Set{ViewMap} Set{ViewMap} EquationSet Module -> EquationSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op applyMapsToRls : Set{ViewMap} Set{ViewMap} RuleSet Module -> RuleSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op applyMapsToCond : Set{ViewMap} Set{ViewMap} Condition Module -> Condition .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op applyMapsToLabel : Set{ViewMap} Qid -> Qid .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op applyMapsToClassDeclSet :
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder Set{ViewMap} Set{ViewMap} ClassDeclSet -> ClassDeclSet .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op applyMapsToSubclassDeclSet :
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder Set{ViewMap} SubclassDeclSet -> SubclassDeclSet .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op applyMapsToMsgDeclSet :
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder Set{ViewMap} Set{ViewMap} MsgDeclSet Module -> MsgDeclSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op applyMapsToMsgDecl : Set{ViewMap} Set{ViewMap} MsgDecl Module -> MsgDecl .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op applyMapsToAttrName : Set{ViewMap} Sort Qid -> Qid .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op applyMapsToAttrDeclSet :
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder Set{ViewMap} Set{ViewMap} Sort AttrDeclSet -> AttrDeclSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars M U : Module .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars QI QI' QI'' L L' L'' F F' F'' A A' A'' : Qid .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars V V' : Variable .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars QIL QIL' : QidList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var VE : ViewExp .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var H : Header .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var ME : ModuleExpression .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var PDL : ParameterDeclList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var IL : ImportList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars S S' S'' C C' C'' : Sort .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var Ty : Type .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars TyL TyL' : TypeList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var SS : SortSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var SSDS : SubsortDeclSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var OPDS : OpDeclSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var MAS : MembAxSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var EqS : EquationSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var RlS : RuleSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var CDS : ClassDeclSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var SCDS : SubclassDeclSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var MDS : MsgDeclSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var ADS : AttrDeclSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars T T' T'' T3 O : Term .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars TL TL' : TermList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var At : Attr .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder vars AtS AtS' AtS'' : AttrSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars I I' : Nat .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars NL NL' : IntList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var Hk : Hook .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var HkL : HookList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var VMAP : ViewMap .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars VMAPS VMAPS' VMAPS'' : Set{ViewMap} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var Subst : Substitution .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var Cond : Condition .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var St : String .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var MN : ModuleName .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder sort Tuple{Set{ViewMap},Set{ViewMap}} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op <_;_> : Set{ViewMap} Set{ViewMap} -> Tuple{Set{ViewMap},Set{ViewMap}} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ops sortMaps otherMaps : Tuple{Set{ViewMap},Set{ViewMap}} -> Set{ViewMap} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq sortMaps(< VMAPS ; VMAPS' >) = VMAPS .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq otherMaps(< VMAPS ; VMAPS' >) = VMAPS' .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq splitMaps(VMAPS) = splitMapsAux(VMAPS, none, none) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq splitMapsAux((sort S to S'), VMAPS', VMAPS'')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = splitMapsAux(none, ((sort S to S'), VMAPS'), VMAPS'') .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq splitMapsAux(((sort S to S'), VMAPS), VMAPS', VMAPS'')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = splitMapsAux(VMAPS, ((sort S to S'), VMAPS'), VMAPS'') .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq splitMapsAux(VMAP, VMAPS', VMAPS'')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = splitMapsAux(none, VMAPS', (VMAP, VMAPS'')) [owise] .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq splitMapsAux((VMAP, VMAPS), VMAPS', VMAPS'')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = splitMapsAux(VMAPS, VMAPS', (VMAP, VMAPS'')) [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq splitMapsAux(none, VMAPS, VMAPS') = < VMAPS ; VMAPS' > .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** To avoid the interference between the sort maps with other maps, the map
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** set is divided in two sets.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ceq applyMapsToModule(VMAPS, U, M)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = applyMapsToModuleAux(VMAPS', VMAPS'', U, M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if < VMAPS' ; VMAPS'' > := splitMaps(VMAPS) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq applyMapsToModule(VMAPS, U, unitError(QIL)) = unitError(QIL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq applyMapsToModuleAux(VMAPS, VMAPS',
473b81d33893192056dde74b26b2467f983c102cChristian Maeder mod H is IL sorts SS . SSDS OPDS MAS EqS RlS endm,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = mod H is
473b81d33893192056dde74b26b2467f983c102cChristian Maeder IL
473b81d33893192056dde74b26b2467f983c102cChristian Maeder sorts applyMapsToSortSet(VMAPS, SS) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder applyMapsToSubsorts(VMAPS, SSDS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder applyMapsToOps(VMAPS, VMAPS', OPDS, M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder applyMapsToMbs(VMAPS, VMAPS', MAS, M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder applyMapsToEqs(VMAPS, VMAPS', EqS, M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder applyMapsToRls(VMAPS, VMAPS', RlS, M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder endm .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq applyMapsToModuleAux(VMAPS, VMAPS',
473b81d33893192056dde74b26b2467f983c102cChristian Maeder th MN is IL sorts SS . SSDS OPDS MAS EqS RlS endth,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = th MN is
473b81d33893192056dde74b26b2467f983c102cChristian Maeder IL sorts applyMapsToSortSet(VMAPS, SS) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder applyMapsToSubsorts(VMAPS, SSDS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder applyMapsToOps(VMAPS, VMAPS', OPDS, M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder applyMapsToMbs(VMAPS, VMAPS', MAS, M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder applyMapsToEqs(VMAPS, VMAPS', EqS, M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder applyMapsToRls(VMAPS, VMAPS', RlS, M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder endth .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq applyMapsToModuleAux(VMAPS, VMAPS',
473b81d33893192056dde74b26b2467f983c102cChristian Maeder fmod H is IL sorts SS . SSDS OPDS MAS EqS endfm,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = fmod H is
473b81d33893192056dde74b26b2467f983c102cChristian Maeder IL
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder sorts applyMapsToSortSet(VMAPS, SS) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder applyMapsToSubsorts(VMAPS, SSDS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder applyMapsToOps(VMAPS, VMAPS', OPDS, M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder applyMapsToMbs(VMAPS, VMAPS', MAS, M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder applyMapsToEqs(VMAPS, VMAPS', EqS, M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder endfm .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq applyMapsToModuleAux(VMAPS, VMAPS', fth MN is IL sorts SS . SSDS OPDS MAS EqS endfth, M)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = fth MN is
473b81d33893192056dde74b26b2467f983c102cChristian Maeder IL
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder sorts applyMapsToSortSet(VMAPS, SS) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder applyMapsToSubsorts(VMAPS, SSDS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder applyMapsToOps(VMAPS, VMAPS', OPDS, M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder applyMapsToMbs(VMAPS, VMAPS', MAS, M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder applyMapsToEqs(VMAPS, VMAPS', EqS, M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder endfth .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq applyMapsToModuleAux(VMAPS, VMAPS',
473b81d33893192056dde74b26b2467f983c102cChristian Maeder omod H is IL sorts SS . SSDS CDS SCDS OPDS MDS MAS EqS RlS endom,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder M)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = omod H is
473b81d33893192056dde74b26b2467f983c102cChristian Maeder IL
473b81d33893192056dde74b26b2467f983c102cChristian Maeder sorts applyMapsToSortSet(VMAPS, SS) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder applyMapsToSubsorts(VMAPS, SSDS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder applyMapsToClassDeclSet(VMAPS, VMAPS', CDS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder applyMapsToSubclassDeclSet(VMAPS', SCDS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder applyMapsToOps(VMAPS, VMAPS', OPDS, M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder applyMapsToMsgDeclSet(VMAPS, VMAPS', MDS, M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder applyMapsToMbs(VMAPS, VMAPS', MAS, M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder applyMapsToEqs(VMAPS, VMAPS', EqS, M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder applyMapsToRls(VMAPS, VMAPS', RlS, M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder endom .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq applyMapsToModuleAux(VMAPS, VMAPS',
473b81d33893192056dde74b26b2467f983c102cChristian Maeder oth MN is
473b81d33893192056dde74b26b2467f983c102cChristian Maeder IL sorts SS . SSDS CDS SCDS OPDS MDS MAS EqS RlS
473b81d33893192056dde74b26b2467f983c102cChristian Maeder endoth,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder M)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = oth MN is
473b81d33893192056dde74b26b2467f983c102cChristian Maeder IL
473b81d33893192056dde74b26b2467f983c102cChristian Maeder sorts applyMapsToSortSet(VMAPS, SS) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder applyMapsToSubsorts(VMAPS, SSDS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder applyMapsToClassDeclSet(VMAPS, VMAPS', CDS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder applyMapsToSubclassDeclSet(VMAPS', SCDS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder applyMapsToOps(VMAPS, VMAPS', OPDS, M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder applyMapsToMsgDeclSet(VMAPS, VMAPS', MDS, M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder applyMapsToMbs(VMAPS, VMAPS', MAS, M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder applyMapsToEqs(VMAPS, VMAPS', EqS, M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder applyMapsToRls(VMAPS, VMAPS', RlS, M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder endoth .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq applyMapsToOps(VMAPS, VMAPS', (op F : TyL -> Ty [AtS] . OPDS), M)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = (applyMapsToOp(VMAPS, getRightOpMaps(F, TyL, Ty, VMAPS', M),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder VMAPS', (op F : TyL -> Ty [AtS] .), M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder applyMapsToOps(VMAPS, VMAPS', OPDS, M)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq applyMapsToOps(VMAPS, VMAPS', none, M) = none .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq applyMapsToOp(VMAPS, VMAP, VMAPS', (op F : TyL -> Ty [AtS] .), M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (op applyOpMapsToOpId(F, VMAP) : applyMapsToTypeList(VMAPS, TyL)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder -> applyMapsToType(VMAPS, Ty)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [applyMapsToAttrs(VMAPS, VMAPS', applyMapToAttrs(VMAP, AtS), M)] .) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq applyMapsToOp(VMAPS, (VMAP, VMAPS'), VMAPS'',
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder (op F : TyL -> Ty [AtS] .), M)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder *** In case of ambiguous mappings we take one of them arbitrarily
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (op applyOpMapsToOpId(F, VMAP) : applyMapsToTypeList(VMAPS, TyL)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder -> applyMapsToType(VMAPS, Ty)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [applyMapsToAttrs(VMAPS, VMAPS'', applyMapToAttrs(VMAP, AtS), M)] .) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq applyMapsToOp(VMAPS, none, VMAPS', (op F : TyL -> Ty [AtS] .), M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** No map for this declaration
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = (op F : applyMapsToTypeList(VMAPS, TyL) -> applyMapsToType(VMAPS, Ty)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [applyMapsToAttrs(VMAPS, VMAPS', AtS, M)] .) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq applyMapsToMsgDeclSet(VMAPS, VMAPS', ((msg F : TyL -> Ty .) MDS), M)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = (applyMapsToMsgDecl(VMAPS, getRightOpMaps(F, TyL, Ty, VMAPS', M),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder (msg F : TyL -> Ty .), M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder applyMapsToMsgDeclSet(VMAPS, VMAPS', MDS, M)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq applyMapsToMsgDeclSet(VMAPS, VMAPS', none, M) = none .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq applyMapsToMsgDecl(VMAPS, VMAP, (msg F : TyL -> Ty .), M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (msg applyOpMapsToOpId(F, VMAP) : applyMapsToTypeList(VMAPS, TyL)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder -> applyMapsToType(VMAPS, Ty) .) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq applyMapsToMsgDecl(VMAPS, (VMAP, VMAPS'), (msg F : TyL -> Ty .), M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** In case of ambiguous mappings we take one of them arbitrarily
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (msg applyOpMapsToOpId(F, VMAP) : applyMapsToTypeList(VMAPS, TyL)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder -> applyMapsToType(VMAPS, Ty) .) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq applyMapsToMsgDecl(VMAPS, none, (msg F : TyL -> Ty .), M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** No map for this declaration
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = (msg F : applyMapsToTypeList(VMAPS, TyL)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder -> applyMapsToType(VMAPS, Ty) .) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** The function \texttt{applyMapToAttrs} just takes care of changing the
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** attributes of the operators as indicated in the renamings. The renamings
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** properly said is accomplished by the function
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \texttt{applyMapsToAttrs}.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq applyMapToAttrs((msg F to F'), AtS) = AtS .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq applyMapToAttrs((msg F : TyL -> Ty to F'), AtS) = AtS .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq applyMapToAttrs(termMap(T, T'), AtS) = AtS .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq applyMapToAttrs((op F to F' [AtS]), AtS')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = applyMapToAttrsAux(AtS, AtS', none) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq applyMapToAttrs((op F : TyL -> Ty to F' [AtS]), AtS')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = applyMapToAttrsAux(AtS, AtS', none) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** add the new syntactic attributes
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq applyMapToAttrsAux((gather(QIL) AtS), AtS', AtS'')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = applyMapToAttrsAux(AtS, AtS', (gather(QIL) AtS'')) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq applyMapToAttrsAux((format(QIL) AtS), AtS', AtS'')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = applyMapToAttrsAux(AtS, AtS', (format(QIL) AtS'')) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq applyMapToAttrsAux((prec(I) AtS), AtS', AtS'')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = applyMapToAttrsAux(AtS, AtS', (prec(I) AtS'')) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq applyMapToAttrsAux((At AtS), AtS', AtS'')
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = applyMapToAttrsAux(AtS, AtS', AtS'')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** remove the old syntactic attributes
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq applyMapToAttrsAux(AtS, (format(QIL) AtS'), AtS'')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = applyMapToAttrsAux(AtS, AtS', AtS'') .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq applyMapToAttrsAux(AtS, (gather(QIL) AtS'), AtS'')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = applyMapToAttrsAux(AtS, AtS', AtS'') .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq applyMapToAttrsAux(AtS, (prec(I) AtS'), AtS'')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = applyMapToAttrsAux(AtS, AtS', AtS'') .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq applyMapToAttrsAux(none, (At AtS), AtS')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = applyMapToAttrsAux(none, AtS, (At AtS')) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq applyMapToAttrsAux(none, none, AtS) = AtS .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq applyMapsToTypeList(VMAPS, (Ty TyL))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (applyMapsToType(VMAPS, Ty) applyMapsToTypeList(VMAPS, TyL)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq applyMapsToTypeList(VMAPS, nil) = nil .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq applyMapsToSubsorts(VMAPS, ((subsort S < S' .) SSDS))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = ((subsort applyMapsToType(VMAPS, S)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder < applyMapsToType(VMAPS, S') .)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder applyMapsToSubsorts(VMAPS, SSDS)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq applyMapsToSubsorts(VMAPS, none) = none .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq applyMapsToAttrs(VMAPS, VMAPS', (id(T) AtS), M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (id(applyMapsToTerm2(VMAPS, VMAPS', T, M))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder applyMapsToAttrs(VMAPS, VMAPS', AtS, M)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq applyMapsToAttrs(VMAPS, VMAPS', (left-id(T) AtS), M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (left-id(applyMapsToTerm2(VMAPS, VMAPS', T, M))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder applyMapsToAttrs(VMAPS, VMAPS', AtS, M)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq applyMapsToAttrs(VMAPS, VMAPS', (right-id(T) AtS), M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (right-id(applyMapsToTerm2(VMAPS, VMAPS', T, M))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder applyMapsToAttrs(VMAPS, VMAPS', AtS, M)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq applyMapsToAttrs(VMAPS, VMAPS', (special(HkL) AtS), M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (special(applyMapsToHooks(VMAPS, VMAPS', HkL, M))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder applyMapsToAttrs(VMAPS, VMAPS', AtS, M)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq applyMapsToAttrs(VMAPS, VMAPS', (label(L) AtS), M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (label(applyMapsToLabel(VMAPS, L))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder applyMapsToAttrs(VMAPS, VMAPS', AtS, M)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq applyMapsToAttrs(VMAPS, VMAPS', AtS, M) = AtS [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq applyMapsToHooks(VMAPS, VMAPS', id-hook(QI, QIL) HkL, M)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = id-hook(QI, QIL)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder applyMapsToHooks(VMAPS, VMAPS', HkL, M).
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq applyMapsToHooks(VMAPS, VMAPS', op-hook(QI, QI', QIL, QI'') HkL, M)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = applyMapsToHooksAux(VMAPS,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder getRightOpMaps(QI', QIL, QI'', VMAPS', M),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op-hook(QI, QI', QIL, QI''), M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder applyMapsToHooks(VMAPS, VMAPS', HkL, M).
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq applyMapsToHooks(VMAPS, VMAPS', term-hook(QI, T) HkL, M)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = term-hook(QI, applyMapsToTerm2(VMAPS, VMAPS', T, M))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder applyMapsToHooks(VMAPS, VMAPS', HkL, M).
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq applyMapsToHooks(VMAPS, VMAPS', nil, M) = nil .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq applyMapsToHooksAux(VMAPS, VMAP, op-hook(QI, F, TyL, Ty), M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = op-hook(QI, applyOpMapsToOpId(F, VMAP),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder applyMapsToTypeList(VMAPS, TyL), applyMapsToType(VMAPS, Ty)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq applyMapsToHooksAux(VMAPS, (VMAP, VMAPS'), op-hook(QI, F, TyL, Ty), M)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder *** In case of ambiguous mappings we take any of them arbitrarily
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = op-hook(QI, applyOpMapsToOpId(F, VMAP),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder applyMapsToTypeList(VMAPS, TyL), applyMapsToType(VMAPS, Ty)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq applyMapsToHooksAux(VMAPS, none, op-hook(QI, F, TyL, Ty), M)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = op-hook(QI, F, applyMapsToTypeList(VMAPS, TyL),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder applyMapsToType(VMAPS, Ty)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq applyMapsToMbs(VMAPS, VMAPS', ((mb T : S [AtS] .) MAS), M)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = ((mb applyMapsToTerm2(VMAPS, VMAPS', T, M)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder : applyMapsToType(VMAPS, S)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [applyMapsToAttrs(VMAPS, VMAPS', AtS, M)] .)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder applyMapsToMbs(VMAPS, VMAPS', MAS, M)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq applyMapsToMbs(VMAPS, VMAPS', ((cmb T : S if Cond [AtS] .) MAS),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = ((cmb applyMapsToTerm2(VMAPS, VMAPS', T, M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder : applyMapsToType(VMAPS, S)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder if applyMapsToCond(VMAPS, VMAPS', Cond, M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [applyMapsToAttrs(VMAPS, VMAPS', AtS, M)] .)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder applyMapsToMbs(VMAPS, VMAPS', MAS, M)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq applyMapsToMbs(VMAPS, VMAPS', none, M) = none .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq applyMapsToEqs(VMAPS, VMAPS', ((ceq T = T' if Cond [AtS] .) EqS), M)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = ((ceq applyMapsToTerm2(VMAPS, VMAPS', T, M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = applyMapsToTerm2(VMAPS, VMAPS', T', M)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder if applyMapsToCond(VMAPS, VMAPS', Cond, M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [applyMapsToAttrs(VMAPS, VMAPS', AtS, M)] .)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder applyMapsToEqs(VMAPS, VMAPS', EqS, M)) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq applyMapsToEqs(VMAPS, VMAPS', ((eq T = T' [AtS] .) EqS), M)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = ((eq applyMapsToTerm2(VMAPS, VMAPS', T, M)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = applyMapsToTerm2(VMAPS, VMAPS', T', M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [applyMapsToAttrs(VMAPS, VMAPS', AtS, M)] .)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder applyMapsToEqs(VMAPS, VMAPS', EqS, M)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq applyMapsToEqs(VMAPS, VMAPS', none, M) = none .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq applyMapsToRls(VMAPS, VMAPS', ((crl T => T' if Cond [AtS] .) RlS), M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = ((crl applyMapsToTerm2(VMAPS, VMAPS', T, M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder => applyMapsToTerm2(VMAPS, VMAPS', T', M)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder if applyMapsToCond(VMAPS, VMAPS', Cond, M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [applyMapsToAttrs(VMAPS, VMAPS', AtS, M)] .)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder applyMapsToRls(VMAPS, VMAPS', RlS, M)) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq applyMapsToRls(VMAPS, VMAPS', ((rl T => T' [AtS] .) RlS), M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = ((rl applyMapsToTerm2(VMAPS, VMAPS', T, M)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder => applyMapsToTerm2(VMAPS, VMAPS', T', M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [applyMapsToAttrs(VMAPS, VMAPS', AtS, M)] .)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder applyMapsToRls(VMAPS, VMAPS', RlS, M)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq applyMapsToRls(VMAPS, VMAPS', none, M) = none .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq applyMapsToCond(VMAPS, VMAPS', T = T' /\ Cond, M)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = applyMapsToTerm2(VMAPS, VMAPS', T, M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = applyMapsToTerm2(VMAPS, VMAPS', T', M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder /\ applyMapsToCond(VMAPS, VMAPS', Cond, M) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq applyMapsToCond(VMAPS, VMAPS', T : S /\ Cond, M)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = applyMapsToTerm2(VMAPS, VMAPS', T, M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder : applyMapsToSort(VMAPS, S)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder /\ applyMapsToCond(VMAPS, VMAPS', Cond, M) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq applyMapsToCond(VMAPS, VMAPS', T := T' /\ Cond, M)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = applyMapsToTerm2(VMAPS, VMAPS', T, M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder := applyMapsToTerm2(VMAPS, VMAPS', T', M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder /\ applyMapsToCond(VMAPS, VMAPS', Cond, M) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq applyMapsToCond(VMAPS, VMAPS', T => T' /\ Cond, M)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = applyMapsToTerm2(VMAPS, VMAPS', T, M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder => applyMapsToTerm2(VMAPS, VMAPS', T', M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder /\ applyMapsToCond(VMAPS, VMAPS', Cond, M) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq applyMapsToCond(VMAPS, VMAPS', nil, M) = nil .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq applyMapsToLabel((label L to L'), L'')
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = if L == L''
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then L'
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else L''
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq applyMapsToLabel(((label L to L'), VMAPS), L'')
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = if L == L''
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then L'
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else applyMapsToLabel(VMAPS, L'')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq applyMapsToLabel(VMAP, L) = L [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq applyMapsToLabel((VMAP, VMAPS), L)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = applyMapsToLabel(VMAPS, L)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq applyMapsToLabel(none, L) = L .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq applyMapsToClassDeclSet(VMAPS, VMAPS', ((class C | ADS .) CDS))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = ((class applyMapsToClassName(VMAPS', C) |
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder applyMapsToAttrDeclSet(VMAPS, VMAPS', C, ADS) .)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder applyMapsToClassDeclSet(VMAPS, VMAPS', CDS)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq applyMapsToClassDeclSet(VMAPS, VMAPS', none) = none .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq applyMapsToAttrDeclSet(VMAPS, VMAPS', C, ((attr A : Ty), ADS))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = ((attr applyMapsToAttrName(VMAPS', C, A) : applyMapsToType(VMAPS, Ty)),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder applyMapsToAttrDeclSet(VMAPS, VMAPS', C, ADS)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq applyMapsToAttrDeclSet(VMAPS, VMAPS', C, none) = none .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq applyMapsToAttrName((attr A . C to A'), C', A'')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if (C == C') and (A == A'')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then A'
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else A''
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq applyMapsToAttrName(((attr A . C to A'), VMAPS), C', A'')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if (C == C') and (A == A'')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then A'
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else applyMapsToAttrName(VMAPS, C', A'')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq applyMapsToAttrName(VMAP, C, A) = A [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq applyMapsToAttrName((VMAP, VMAPS), C, A)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = applyMapsToAttrName(VMAPS, C, A)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq applyMapsToAttrName(none, C, A) = A .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq applyMapsToSubclassDeclSet(VMAPS, ((subclass C < C' .) SCDS))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = ((subclass applyMapsToClassName(VMAPS, C)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder < applyMapsToClassName(VMAPS, C') .)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder applyMapsToSubclassDeclSet(VMAPS, SCDS)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq applyMapsToSubclassDeclSet(VMAPS, none) = none .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederendfm
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*******************************************************************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder***
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** 6.9 Instantiation of Parameterized Modules and the
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \texttt{META-LEVEL} Module Expression
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** A parameterized module
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** $\texttt{M[L}_1\texttt{\ ::\ T}_1\texttt{,\}\ldots\texttt{, L}_n
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \texttt{ :: T}_n\texttt{]}$, with \mbox{$\texttt{L}_1\ldots\texttt{L}_n$}
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** labels and \mbox{$\texttt{T}_1\ldots\texttt{T}_n$} theory identifiers, is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** represented as a module with name \texttt{M} which contains parameter
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** declarations \mbox{$\texttt{par\ L}_i\texttt{\ ::\ T}_i$} for
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** $1\leq i\leq n$, and an importation declaration
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \mbox{$\texttt{inc\ par\ L}_i\texttt{\ ::\ T}_i\texttt{\ .}$} for each
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** parameter \mbox{$\texttt{L}_i\texttt{\ ::\ T}_i$} in its interface. Note
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** that all modules are handled in a uniform way: nonparameterized modules
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** and theories have their list of parameters set to \texttt{nil}.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** The instantiation of the formal parameters of a parameterized module with
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** actual modules or theories requires a view from each formal parameter
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** theory to its corresponding actual unit. The process of instantiation
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** results in the replacement of each interface theory by its corresponding
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** actual parameter, using the views to bind actual names to formal names.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** The naming conventions for sorts have to be taken into account in the
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** instantiation process: every occurrence of a sort coming from a theory in
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** the interface of a module must be qualified by its theory's label, and
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** sorts defined in the body of a parameterized module can be parameterized
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** by the labels in the interface of the module (see
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** Section~\ref{parameterized-modules}).
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** The labeling convention for theories and for the sorts coming from them is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** very useful to avoid collisions of sort names coming from the parameter
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** theories, and also to allow different uses of the same theory several
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** times in the interface of a module. We assume that all sorts coming from
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** the theory part of the parameter theories are used in their qualified form
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** to manipulate the maps defined in the views before being applied to the
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** body of the module being instantiated. If the target of a view is a
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** theory, the sorts from the theory part of the target theory appearing in
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** the targTS of the maps in the view will be qualified as well, following
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** the same convention.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** When a parameterized module
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** $\texttt{M[L}_1\texttt{\ ::\ T}_1\texttt{,\ }
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \ldots\texttt{,\ L}_n\texttt{\ ::\ T}_n\texttt{]}$
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** is instantiated with views $\texttt{V}_1\ldots\texttt{V}_n$, each
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** parameterized sort $\texttt{S[L}_1\texttt{,}\ldots\texttt{,L}_n\texttt{]}$
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** in the body of the parameterized module is renamed to
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** $\texttt{S[V}_1\texttt{,}\ldots\texttt{,V}_n\texttt{]}$.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** The discussion on the qualification of sorts in views before being used in
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** the instantiation process applies in a completely similar way to class
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** names in parameterized object-oriented modules.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** As we saw in Section~\ref{module-expressions}, it is possible to import a
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** module expression in which a parameterized module is instantiated by some
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** of the formal parameters of the parameterized module in which it is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** imported. This is done by using the label of some of the parameters in the
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** interface of a module, say \mbox{$\texttt{L}_k\texttt{\ ::\ T}_k$}, in a
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** module expression in which some parameterized module \texttt{N} with formal
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** parameter $\texttt{T}_k$ is instantiated with $\texttt{L}_k$, that is, we
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** have the module expression $\texttt{N[}\ldots\texttt{L}_k\ldots\texttt{]}$.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** In this case, $\texttt{L}_k$ is considered as the identity view for the
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** theory $\texttt{T}_k$ with $\texttt{L}_k$ as name. Note that to be able to
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** check whether a label in the interface of a module is used in an
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** instantiation of this form, in the evaluation of a module expression the
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** list of parameters of the module in which the module expression appears
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** must be available. This is the reason why the \texttt{evalModExp} function
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** was defined with \texttt{ParameterList} as one of the sorts in its
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** arity (see Section~\ref{evalModExp}). For module expressions appearing
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** outside of any module, that is, in commands, etc., this list will be set
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** to \texttt{nil}.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** Note that this kind of instantiation may produce a `cascade' effect. The
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** module being instantiated may itself import other module expressions in
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** which labels of some of its parameter theories are used in the
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** instantiation of some of these imported module expressions. This is handled
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** by `preparing' the module expressions appearing in the importation
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** declarations of the module (\texttt{prepImports}). This process
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** consists in changing the labels of the interface of the module being
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** instantiated which are used in the importations of module expressions by
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** the corresponding view names (\texttt{prepHeader}). After completing the
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** generation of the module resulting from the evaluation of the module
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** expression, this module will be evaluated with the \texttt{evalModule}
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** function, producing the evaluation of these new module expressions. In any
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** extension of the language, new equations for the function
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** \texttt{prepHeader} will have to be added for each new kind of module
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** expression being defined.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** In Sections~\ref{renaming} and~\ref{extension} we shall see how new
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** equations completing the semantics of \texttt{prepHeader} are added for
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** each new module expression being defined. In the case of the renaming
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** module expression, the renaming maps will have to be prepared as well, to
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** adjust the sort names being renamed to the conventions discussed above.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** As for any other module expression being defined, in addition to the
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** operator declaration for the constructor of the instantiation module
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** expression, equations completing the semantics of operators
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** \texttt{evalModExp}, \texttt{header2QidList}, and
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \texttt{setUpModExpDeps} have to be given.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederfmod INST-EXPR-EVALUATION is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr EVALUATION .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr VIEW-MAP-SET-APPL-ON-UNIT .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder inc MOD-EXPR .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder inc MOD-NAME .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr DATABASE .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** We start by giving the new constructor for sort \texttt{ModuleExpression}.
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** Note thatthe modules \texttt{MOD-EXPR} and \texttt{MOD-NAME} have been
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** imported in \texttt{including} mode.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars QI QI' QI'' X Y W Z C F F' A A' L L' : Qid .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var QIL : QidList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars M M' PU U U' U'' DM : Module .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var Th : OTheory .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars ME ME' ME'' : ModuleExpression .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var H : Header .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars MN MN' : ModuleName .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars MNS MNS' MNS'' MNS3 MNS4 MNS5 : Set{ModuleName} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars VE VE' VE'' VE3 VE4 : ViewExp .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars VES VES' : Set{ViewExp} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars MIS MIS' : Set{ModuleInfo} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var VIS : Set{ViewInfo} .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder vars DB DB' DB'' : Database .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var PD : ParameterDecl .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars PDL PDL' PDL'' PDL3 PDL4 PDL5 : ParameterDeclList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var PDS : Set{ParameterDecl} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars PL PL' PL'' PL3 : ParameterList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars S S' P P' P'' : Sort .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars IL IL' IL'' IL3 : ImportList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars VMAPS VMAPS' VMAPS'' VMAPS3 : Set{ViewMap} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var V : Variable .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var Ct : Constant .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var SL : QidList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var Ty : Type .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var TyL : TypeList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars SS SS' SS'' : SortSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var K : Kind .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars T T' O : Term .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var DT : Default{Term} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var TL : TermList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var CDS : ClassDeclSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var ADS : AttrDeclSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var B : Bool .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var AtS : AttrSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var VMAP : ViewMap .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var N : Nat .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var PV : PreView .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var VI : View .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var VDS : OpDeclSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** In the input given by the user, the operator \verb~_(_)~ is used both for
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** the instantiation of module expressions, and for expressions
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** parameterizing the module \texttt{META-LEVEL} with a list of module names.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** The function \texttt{evalModExp} distinguishes these two cases, calling
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** the function \texttt{unitInst} in the former and the function
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \texttt{prepMetalevel} in the latter.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op unitInst : Header ParameterList ParameterDeclList Database -> Database .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op prepMetalevel : ParameterList Database -> Database .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq evalModExp(ME{PL}, PDL, DB)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = if unitInDb(ME{PL}, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then < DB ; ME{PL} >
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else if ME == 'META-LEVEL
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then < prepMetalevel(PL, DB) ; ME{PL} >
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else < unitInst(
473b81d33893192056dde74b26b2467f983c102cChristian Maeder modExp(evalModExp(ME, PDL, evalViewExp(PL, PDL, DB))),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder PL, PDL,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder database(evalModExp(ME, PDL, evalViewExp(PL, PDL, DB))))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ;
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder modExp(evalModExp(ME, PDL, evalViewExp(PL, PDL, DB))){PL} >
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** The function \texttt{prepMetalevel} creates a new module with the
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** module expression being evaluated as name, which imports the predefined
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \texttt{META-LEVEL} module. For each module name \texttt{I} in the list
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** given as parameter of the expression, the declaration of a constant
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \texttt{I} of sort \texttt{Module} and an equation identifying such
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** constant with the metarepresentation of the module with such name in the
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** database are added to the module being created.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op prepMetalevelAux : ParameterList Module Database -> Database .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq prepMetalevel(PL, DB)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = prepMetalevelAux(PL,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder addImports((including 'META-LEVEL .),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder setName(emptyFModule, 'META-LEVEL{PL})), DB) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq prepMetalevelAux((QI), U, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = prepMetalevelAux(nil,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder addOps((op qid("META-" + string(QI)) : nil -> 'Module [none] .),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder addEqs((eq qid("META-" + string(QI) + ".Module")
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = up(getFlatModule(QI, database(evalModExp(QI, DB))))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder [none] .),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder U)),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder DB) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq prepMetalevelAux((QI, PL), U, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = prepMetalevelAux(PL,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder addOps((op qid("META-" + string(QI)) : nil -> 'Module [none] .),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder addEqs((eq qid("META-" + string(QI) + ".Module")
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = up(getFlatModule(QI, database(evalModExp(QI, DB))))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder [none] .),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder U)),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder DB) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq prepMetalevelAux(nil, U, DB) = evalModule(U, none, DB) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** The function \texttt{getClassNames} returns the set of the names of
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** the classes in a set of class declarations.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op getClassNames : ClassDeclSet -> SortSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq getClassNames(((class S | ADS .) CDS))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (S ; getClassNames(CDS)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getClassNames(none) = none .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** The following `getTh' functions return the corresponding elements in the
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** theory part of the structure of the given unit. For example, the function
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \texttt{getThSorts} returns the set of sorts declared in the ``loose
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** part'' of the structure of the unit in the database having the name
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** indicated as first argument.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op getThSorts : ModuleExpression Database -> SortSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op getThClasses : ModuleExpression Database -> SortSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op getThSortsAux : ImportList Database -> SortSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op getThClassesAux : ImportList Database -> SortSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getThSorts(ME, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if theory(getTopModule(ME, DB))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder then (getThSortsAux(getImports(getTopModule(ME, DB)), DB) ;
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder getSorts(getTopModule(ME, DB)))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else none
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getThSortsAux(((including MN .) IL), DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (getThSorts(MN, DB) ; getThSortsAux(IL, DB)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getThSortsAux(((extending MN .) IL), DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (getThSorts(MN, DB) ; getThSortsAux(IL, DB)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getThSortsAux(((protecting MN .) IL), DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (getThSorts(MN, DB) ; getThSortsAux(IL, DB)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getThSortsAux(nil, DB) = none .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getThClasses(ME, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if getTopModule(ME, DB) :: OTheory
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder and-then not getTopModule(ME, DB) :: STheory
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then (getThClassesAux(getImports(getTopModule(ME, DB)), DB) ;
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder getClassNames(getClasses(getTopModule(ME, DB))))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else none
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getThClassesAux(((including MN .) IL), DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (getThClasses(MN, DB) ; getThClassesAux(IL, DB)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getThClassesAux(((extending MN .) IL), DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (getThClasses(MN, DB) ; getThClassesAux(IL, DB)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getThClassesAux(((protecting MN .) IL), DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (getThClasses(MN, DB) ; getThClassesAux(IL, DB)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getThClassesAux(nil, DB) = none .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** The `get' functions return the corresponding elements in the structure of
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** the given unit. For example, \texttt{getSortSet} returns all the sorts
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** declared in the structure of the unit in the database having the name
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** given as first argument.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op getSortSet : ModuleName Database -> SortSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op getClassSet : ModuleName Database -> SortSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op getSortSetAux : ImportList Database -> SortSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op getClassSetAux : ImportList Database -> SortSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getSortSet(MN, DB)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = (getSortSetAux(getImports(getTopModule(MN, DB)), DB) ;
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder getSorts(getTopModule(MN, DB))) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq getSortSetAux(((including MN .) IL), DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (getSortSet(MN, DB) ; getSortSetAux(IL, DB)) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq getSortSetAux(((extending MN .) IL), DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (getSortSet(MN, DB) ; getSortSetAux(IL, DB)) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq getSortSetAux(((protecting MN .) IL), DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (getSortSet(MN, DB) ; getSortSetAux(IL, DB)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getSortSetAux(nil, DB) = none .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getClassSet(MN, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (getClassSetAux(getImports(getTopModule(MN, DB)), DB) ;
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder getClassNames(getClasses(getTopModule(MN, DB)))) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq getClassSetAux(((including MN .) IL), DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (getClassSet(MN, DB) ; getClassSetAux(IL, DB)) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq getClassSetAux(((extending MN .) IL), DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (getClassSet(MN, DB) ; getClassSetAux(IL, DB)) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq getClassSetAux(((protecting MN .) IL), DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (getClassSet(MN, DB) ; getClassSetAux(IL, DB)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getClassSetAux(nil, DB) = none .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** As pointed out in Section~\ref{parameterized-modules}, in a parameterized
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** module all occurrences of sorts or classes coming from the parameter
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** theories have to be qualified. \texttt{createCopy} is the function used
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** for creating these renamed copies of the parameters. As also explained in
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** Section~\ref{parameterized-modules}, if a parameter theory is structured,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** the renaming is carried out not only at the top level, but for the entire
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** ``theory part'' in the structure.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** The function \texttt{createCopy} calls an auxiliary function,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \texttt{prepPar}, which recursively proceeds through all the subtheories
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** of the given theory. For each theory in the structure, the required set of
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** maps is generated and applied to such a theory using the
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \texttt{applyMapsToModule} function discussed in
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** Section~\ref{applyMapsToModule}, which is then evaluated and entered into
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** the database. Note that the renamings to which a theory is subjected must
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** also be applied to the theories importing it. The new database and the
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** renaming maps applied to the theory will have to be returned by the
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** function.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** The function \texttt{prepPar} makes a copy of the theory specified by the
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** name given as first argument and of all its subtheories (only theories, no
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** modules), and qualifies all the sorts appearing in it with the label given
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** in the declaration of the parameter, which is given as second argument.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder pr 2TUPLE{ViewExp,ViewExp}
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder * (op ((_,_)) to <_;_>,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op p1_ to 1st,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op p2_ to 2nd).
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder sorts ---- Tuple{ViewExp,ViewExp}
473b81d33893192056dde74b26b2467f983c102cChristian Maeder Set{Tuple{ViewExp,ViewExp}}
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder prepParResult .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder subsort Tuple{ViewExp,ViewExp} < Set{Tuple{ViewExp,ViewExp}} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- op <_;_> : ViewExp ViewExp -> Tuple{ViewExp,ViewExp} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- ops 1st 2nd : Tuple{ViewExp,ViewExp} -> ViewExp .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op none : -> Set{Tuple{ViewExp,ViewExp}} .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op __ : Set{Tuple{ViewExp,ViewExp}} Set{Tuple{ViewExp,ViewExp}}
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder -> Set{Tuple{ViewExp,ViewExp}} [assoc comm id: none] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars VEPS VEPS' : Set{Tuple{ViewExp,ViewExp}} .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- eq 1st(< VE ; VE' >) = VE .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- eq 2nd(< VE ; VE' >) = VE' .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op prepPar : Qid Qid ModuleExpression Database -> prepParResult .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op prepParImports : ImportList ImportList Qid Qid RenamingSet
473b81d33893192056dde74b26b2467f983c102cChristian Maeder Set{Tuple{ViewExp,ViewExp}} ParameterDeclList Database
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder -> prepParResult .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op <_;_;_;_;_;_;_> : RenamingSet Database ViewExp ViewExp
473b81d33893192056dde74b26b2467f983c102cChristian Maeder Set{Tuple{ViewExp,ViewExp}} Bool ImportList
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder -> prepParResult .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op mapSet : prepParResult -> RenamingSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op database : prepParResult -> Database .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op sourceViewExp : prepParResult -> ViewExp .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op targetViewExp : prepParResult -> ViewExp .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op viewExpPairSet : prepParResult -> Set{Tuple{ViewExp,ViewExp}} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op theoryFlag : prepParResult -> Bool .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op getImports : prepParResult -> ImportList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq mapSet(< VMAPS ; DB ; VE ; VE' ; VEPS ; B ; IL >) = VMAPS .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq database(< VMAPS ; DB ; VE ; VE' ; VEPS ; B ; IL >) = DB .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq sourceViewExp(< VMAPS ; DB ; VE ; VE' ; VEPS ; B ; IL >) = VE .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq targetViewExp(< VMAPS ; DB ; VE ; VE' ; VEPS ; B ; IL >) = VE' .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq viewExpPairSet(< VMAPS ; DB ; VE ; VE' ; VEPS ; B ; IL >) = VEPS .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq theoryFlag(< VMAPS ; DB ; VE ; VE' ; VEPS ; B ; IL >) = B .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getImports(< VMAPS ; DB ; VE ; VE' ; VEPS ; B ; IL >) = IL .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ----op createCopy : ParameterDecl Database -> Database .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op prepPar : Qid ModuleExpression Database -> prepParResult .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op prepParImports : ImportList ImportList Qid RenamingSet
473b81d33893192056dde74b26b2467f983c102cChristian Maeder Set{Tuple{ViewExp,ViewExp}} ParameterDeclList Database
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder -> prepParResult .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq createCopy(X :: ME, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if unitInDb(pd(X :: ME), DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then DB
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else database(prepPar(X, ME, database(evalModExp(ME, DB))))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq prepPar(X, ME, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = < (VMAPS'', VMAPS3) ;
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder (if unitInDb(pd(X :: ME), DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then DB
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else evalModule(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder setImports(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder setName(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder applyMapsToModule(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder (VMAPS'', VMAPS3),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder Th,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder getFlatModule(ME, DB)),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pd(X :: ME)),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder IL),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder applyMapsToOps(
473b81d33893192056dde74b26b2467f983c102cChristian Maeder VMAPS'',
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder VMAPS3,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder getVars(ME, DB),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder getFlatModule(ME, DB)),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder DB')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi) ;
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder mtViewExp ; mtViewExp ; none ; true ; nil >
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if Th := getTopModule(ME, DB)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder /\ < VMAPS ; DB' ; VE ; VE' ; VEPS ; B ; IL >
473b81d33893192056dde74b26b2467f983c102cChristian Maeder := prepParImports(getImports(Th), nil, X, none, none, X :: ME, DB)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder /\ < VMAPS'' ; VMAPS3 >
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder := splitMaps(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder (VMAPS,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder sortMapsPar(X, getSorts(Th), none),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder classMapsPar(X, classSet(getClasses(Th)), none))) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq prepPar(X, ME, DB)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = < none ; warning(DB, '\r 'Error3: '\o 'Incorrect 'parameter '\n) ;
473b81d33893192056dde74b26b2467f983c102cChristian Maeder mtViewExp ; mtViewExp ; none ; false ; nil >
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq prepParImports(((including ME .) IL), IL', X, VMAPS, VEPS, PDL, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if B
473b81d33893192056dde74b26b2467f983c102cChristian Maeder then prepParImports(IL, (IL' (including pd(X :: ME') .)),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder X, (VMAPS, VMAPS'), VEPS, PDL, DB')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else prepParImports(IL, (IL' (including ME .)), X, VMAPS, VEPS, PDL, DB)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder fi
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if ME' := prepModExp(ME, VEPS)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder /\ < VMAPS' ; DB' ; VE ; VE' ; VEPS' ; B ; IL'' >
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder := prepPar(X, ME', database(evalModExp(ME', PDL, DB))) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq prepParImports(((extending ME .) IL), IL', X, VMAPS, VEPS, PDL, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if B
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then *** A theory shouldn't be imported in protecting mode
473b81d33893192056dde74b26b2467f983c102cChristian Maeder prepParImports(IL, (IL' (extending pd(X :: ME') .)),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder X, (VMAPS, VMAPS'), VEPS, PDL, DB')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else prepParImports(IL, (IL' (extending ME .)), X, VMAPS, VEPS, PDL, DB)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder fi
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if ME' := prepModExp(ME, VEPS)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder /\ < VMAPS' ; DB' ; VE ; VE' ; VEPS' ; B ; IL'' >
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder := prepPar(X, ME', database(evalModExp(ME', PDL, DB))) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq prepParImports(((protecting ME .) IL), IL', X, VMAPS, VEPS, PDL, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if B
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then *** A theory shouldn't be imported in protecting mode
473b81d33893192056dde74b26b2467f983c102cChristian Maeder prepParImports(IL, (IL' (protecting pd(X :: ME') .)),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder X, (VMAPS, VMAPS'), VEPS, PDL, DB')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else prepParImports(IL, (IL' (protecting ME .)), X, VMAPS, VEPS, PDL, DB)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder fi
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if ME' := prepModExp(ME, VEPS)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder /\ < VMAPS' ; DB' ; VE ; VE' ; VEPS' ; B ; IL'' >
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder := prepPar(X, ME', database(evalModExp(ME', PDL, DB))) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ceq prepParImports(((including pd(X :: ME) .) IL), IL',
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder Y, VMAPS, (< X ; Z > VEPS), PDL, DB)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = prepParImports(IL, (IL' (including pd(Z :: ME') .)),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder Y, (VMAPS, VMAPS'), (< X ; Z > VEPS), PDL, DB')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if ME' := prepModExp(ME, VEPS)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder /\ < VMAPS' ; DB' ; VE ; VE' ; VEPS' ; B ; IL'' >
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder := prepPar(X, ME', database(evalModExp(ME', PDL, DB))) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ceq prepParImports(((extending pd(X :: ME) .) IL), IL',
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder Y, VMAPS, (< X ; Z > VEPS), PDL, DB)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = prepParImports(IL, (IL' (extending pd(Z :: ME') .)),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder Y, (VMAPS, VMAPS'), (< X ; Z > VEPS), PDL, DB')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if ME' := prepModExp(ME, VEPS)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder /\ < VMAPS' ; DB' ; VE ; VE' ; VEPS' ; B ; IL'' >
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder := prepPar(X, ME', database(evalModExp(ME', PDL, DB))) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ceq prepParImports(((protecting pd(X :: ME) .) IL), IL',
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder Y, VMAPS, (< X ; Z > VEPS), PDL, DB)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = prepParImports(IL, (IL' (protecting pd(Z :: ME') .)),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder Y, (VMAPS, VMAPS'), (< X ; Z > VEPS), PDL, DB')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if ME' := prepModExp(ME, VEPS)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder /\ < VMAPS' ; DB' ; VE ; VE' ; VEPS' ; B ; IL'' >
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder := prepPar(X, ME', database(evalModExp(ME', PDL, DB))) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq prepParImports(nil, IL, X, VMAPS, VEPS, PDL, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = < VMAPS ; DB ; mtViewExp ; mtViewExp ; none ; false ; IL > .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq prepPar(X, Y, ME, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = < (VMAPS'', VMAPS3) ;
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder (if unitInDb(pd(Y :: ME), DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then DB
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else evalModule(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder setImports(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder setName(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder applyMapsToModule(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder (VMAPS'', VMAPS3),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder getTopModule(pd(X :: ME), DB),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder getFlatModule(pd(X :: ME), DB)),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pd(Y :: ME)),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder IL),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder applyMapsToOps(
473b81d33893192056dde74b26b2467f983c102cChristian Maeder VMAPS'',
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder VMAPS3,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder getVars(pd(X :: ME), DB),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder getFlatModule(pd(X :: ME), DB)),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder DB')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi) ;
473b81d33893192056dde74b26b2467f983c102cChristian Maeder X ; Y ; < X ; Y > ; true ; nil >
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if Th := getTopModule(ME, DB)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder /\ < VMAPS ; DB' ; VE ; VE' ; VEPS ; B ; IL >
473b81d33893192056dde74b26b2467f983c102cChristian Maeder := prepParImports(getImports(Th),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder nil, X, Y, none, < X ; Y >, X :: ME, DB)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder /\ < VMAPS'' ; VMAPS3 >
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder := splitMaps(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder (VMAPS,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder genMapsQualSorts(X, Y, getSorts(Th), none),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder genMapsQualClasses(X, Y, classSet(getClasses(Th)), none))) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq prepParImports(((including ME .) IL), IL', X, Y, VMAPS, VEPS, PDL, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = prepParImports(IL, (IL' including ME .), X, Y, VMAPS, VEPS, PDL, DB) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq prepParImports(((extending ME .) IL), IL', X, Y, VMAPS, VEPS, PDL, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = prepParImports(IL, (IL' extending ME .), X, Y, VMAPS, VEPS, PDL, DB) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq prepParImports(((protecting ME .) IL), IL', X, Y, VMAPS, VEPS, PDL, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = prepParImports(IL, (IL' protecting ME .), X, Y, VMAPS, VEPS, PDL, DB) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ceq prepParImports(including pd(X :: ME) . IL, IL',
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder Y, Z, VMAPS, VEPS, PDL, DB)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = prepParImports(IL, IL' including pd(X :: ME') .,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder Y, Z, (VMAPS, VMAPS'), VEPS, PDL, DB')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if ME' := prepModExp(ME, VEPS)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder /\ < VMAPS' ; DB' ; VE ; VE' ; VEPS' ; B ; IL'' >
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder := prepPar(Y, Z, ME', database(evalModExp(ME', PDL, DB))) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ceq prepParImports(extending pd(X :: ME) . IL, IL',
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder Y, Z, VMAPS, VEPS, PDL, DB)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = prepParImports(IL, IL' extending pd(X :: ME') .,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder Y, Z, (VMAPS, VMAPS'), VEPS, PDL, DB')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if ME' := prepModExp(ME, VEPS)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder /\ < VMAPS' ; DB' ; VE ; VE' ; VEPS' ; B ; IL'' >
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder := prepPar(Y, Z, ME', database(evalModExp(ME', PDL, DB))) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ceq prepParImports(protecting pd(X :: ME) . IL, IL',
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder Y, Z, VMAPS, VEPS, PDL, DB)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = prepParImports(IL, IL' protecting pd(X :: ME') .,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder Y, Z, (VMAPS, VMAPS'), VEPS, PDL, DB')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if ME' := prepModExp(ME, VEPS)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder /\ < VMAPS' ; DB' ; VE ; VE' ; VEPS' ; B ; IL'' >
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder := prepPar(Y, Z, ME', database(evalModExp(ME', PDL, DB))) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq prepParImports(nil, IL, X, Y, VMAPS, VEPS, PDL, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = < VMAPS ; DB ; mtViewExp ; mtViewExp ; none ; false ; IL > .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op sortMapsPar : Qid SortSet Set{Tuple{ViewExp,ViewExp}} -> RenamingSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op classMapsPar : Qid SortSet Set{Tuple{ViewExp,ViewExp}} -> RenamingSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op qualify : Qid Sort -> Sort .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op qualify : Qid Sort Set{Tuple{ViewExp,ViewExp}} -> Sort .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op qualify : Qid Sort ParameterList ParameterList
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder Set{Tuple{ViewExp,ViewExp}} -> Sort .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq qualify(X, S) = qualify(X, getName(S), getPars(S), empty, none) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq qualify(X, S, VEPS) = qualify(X, getName(S), getPars(S), empty, VEPS) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq qualify(X, S, (P, PL), PL', < P ; P' > VEPS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = qualify(X, S, PL, PL' P', < P ; P' > VEPS) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq qualify(X, S, (P, PL), PL', VEPS)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = qualify(X, S, PL, PL' P, VEPS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [owise] .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq qualify(X, S, empty, PL, VEPS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = qid(string(X) + "$" + string(makeSort(S, PL))) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq sortMapsPar(X, (S ; SS), VEPS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = ((sort S to qualify(X, S, VEPS)), sortMapsPar(X, SS, VEPS)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq sortMapsPar(X, none, VEPS) = none .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq classMapsPar(X, (S ; SS), VEPS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = ((class S to qualify(X, S, VEPS)), classMapsPar(X, SS, VEPS)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq classMapsPar(X, none, VEPS) = none .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** When one of the labels of the interface of a module is being used in a
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** module expression to instantiate some formal parameter of a module, then,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** in the evaluation of such module expression the qualification of all sorts
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** and class names coming from the theory part of the parameter theory have
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** to be changed according to such a label. In the evaluation of an
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** instantiation module expression this is done by generating the
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** corresponding renaming maps, which are then applied to the module being
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** instantiated. Given labels \texttt{L} and \texttt{L'}, for each sort or
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** class name \texttt{S} in the set given as argument, a map of the form
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \verb~L$S to L'$S~ is generated.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op genMapsQualSorts :
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder Qid Qid SortSet Set{Tuple{ViewExp,ViewExp}} -> RenamingSet .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op genMapsQualClasses :
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder Qid Qid SortSet Set{Tuple{ViewExp,ViewExp}} -> RenamingSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq genMapsQualSorts(X, Y, (S ; SS), VEPS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = ((sort qualify(X, S, VEPS) to qualify(Y, S, VEPS)),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder genMapsQualSorts(X, Y, SS, VEPS)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq genMapsQualSorts(X, Y, none, VEPS) = none .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq genMapsQualClasses(X, Y, (S ; SS), VEPS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = ((class qualify(X, S, VEPS) to qualify(Y, S, VEPS)),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder genMapsQualClasses(X, Y, SS, VEPS)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq genMapsQualClasses(X, Y, none, VEPS) = none .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** The function \texttt{prepare} takes the map set of a view and
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** prepares it to be used in an instantiation by transforming sort and class
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** names into their qualified form, if required (sorts and class names in a
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** view have to be qualified only if they were defined in a theory).
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** The \texttt{prepare} function takes five arguments: The set of maps
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** to be prepared, the label with which the sorts to be renamed have to be
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** qualified, the set of sorts in the theory part of the source of the view,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** and the set of sorts and class names in the theory part of the target of
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** the view.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** Note that we assume that there is a sort map and a class map for each sort
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** and class in the theory part of the source of the view. Therefore, sorts
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** and class names appearing as sources of sort and class maps are
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** systematically qualified. The sorts or class names used in the targTS of
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** the maps will be qualified only if they were declared in a theory. In maps
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** for operators in which the arity and coarity are specified, or for those
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** going to derived terms, the sorts appearing in the arity or coarity of an
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** operator and those used to qualify terms, or in sort tests in terms, must
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** also be qualified. However, in these cases the qualification cannot be
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** done on all sorts, but only on those defined in the theory parts. This is
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** the reason why the sTS of sorts in the theory parts of the source and
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** target and the set of class names in the target of the view are given when
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** calling \texttt{prepare}.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op prepare : Set{ViewMap} Qid SortSet SortSet SortSet -> RenamingSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op prepare : TypeList Qid SortSet -> TypeList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op prepTerm : TermList Qid SortSet -> TermList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq prepare((sort S to S'), X, SS, SS', SS'')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if S' in SS'
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then (sort qualify(X, S) to qualify(X, S'))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else (sort qualify(X, S) to S')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq prepare(((sort S to S'), VMAPS), X, SS, SS', SS'')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = ((if S' in SS'
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then (sort qualify(X, S) to qualify(X, S'))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else (sort qualify(X, S) to S')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder prepare(VMAPS, X, SS, SS', SS'')) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq prepare((op F : TyL -> Ty to F' [AtS]), X, SS, SS', SS'')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (op F : prepare(TyL, X, SS) -> prepare(Ty, X, SS) to F' [AtS]) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq prepare(((op F : TyL -> Ty to F' [AtS]), VMAPS),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder X, SS, SS', SS'')
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = ((op F : prepare(TyL, X, SS) -> prepare(Ty, X, SS) to F'
473b81d33893192056dde74b26b2467f983c102cChristian Maeder [AtS]),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder prepare(VMAPS, X, SS, SS', SS'')) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq prepare((op F to F' [AtS]), X, SS, SS', SS'') = (op F to F' [AtS]) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq prepare(((op F to F' [AtS]), VMAPS), X, SS, SS', SS'')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = ((op F to F' [AtS]), prepare(VMAPS, X, SS, SS', SS'')) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq prepare(termMap(T, T'), X, SS, SS', SS'')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = termMap(prepTerm(T, X, SS), prepTerm(T', X, SS')) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq prepare((termMap(T, T'), VMAPS), X, SS, SS', SS'')
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = (termMap(prepTerm(T, X, SS), prepTerm(T', X, SS')),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder prepare(VMAPS, X, SS, SS', SS'')) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq prepare((msg F : TyL -> Ty to F'), X, SS, SS', SS'')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (msg F : prepare(TyL, X, SS) -> prepare(Ty, X, SS) to F') .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq prepare(((msg F : TyL -> Ty to F'), VMAPS), X, SS, SS', SS'')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = ((msg F : prepare(TyL, X, SS) -> prepare(Ty, X, SS) to F'),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder prepare(VMAPS, X, SS, SS', SS'')) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq prepare((msg F to F'), X, SS, SS', SS'') = (msg F to F') .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq prepare(((msg F to F'), VMAPS), X, SS, SS', SS'')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = ((msg F to F'), prepare(VMAPS, X, SS, SS', SS'')) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq prepare((class S to S'), X, SS, SS', SS'')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if S' in SS''
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then (class qualify(X, S) to qualify(X, S'))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else (class qualify(X, S) to S')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq prepare(((class S to S'), VMAPS), X, SS, SS', SS'')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = ((if S' in SS''
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then (class qualify(X, S) to qualify(X, S'))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else (class qualify(X, S) to S')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder prepare(VMAPS, X, SS, SS', SS'')) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq prepare((attr A . S to A'), X, SS, SS', SS'')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (attr A . qualify(X, S) to A') .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq prepare(((attr A . S to A'), VMAPS), X, SS, SS', SS'')
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = ((attr A . qualify(X, S) to A'),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder prepare(VMAPS, X, SS, SS', SS'')) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq prepare((label L to L'), X, SS, SS', SS'') = (label L to L') .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq prepare(none, X, SS, SS', SS'') = none .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq prepare((S TyL), X, (S ; SS))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (qualify(X, S) prepare(TyL, X, (S ; SS))) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq prepare((K TyL), X, SS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = prepare((getSort(K) TyL), X, SS) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq prepare((S TyL), X, SS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (S prepare(TyL, X, SS))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq prepare(nil, X, SS) = nil .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq prepTerm(F[TL], X, SS) = F[prepTerm(TL, X, SS)] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq prepTerm(V, X, SS)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = if getType(V) in SS
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then qid(string(getName(V)) + ":" + string(qualify(X, getType(V))))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else qid(string(getName(V)) + ":" + string(getType(V)))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq prepTerm(Ct, X, SS)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = if getType(Ct) in SS
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then qid(string(getName(Ct)) + "." + string(qualify(X, getType(Ct))))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else qid(string(getName(Ct)) + "." + string(getType(Ct)))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ceq prepTerm((T, TL), X, SS)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = (prepTerm(T, X, SS), prepTerm(TL, X, SS))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if TL =/= empty .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq prepTerm(qidError(QIL), X, SS) = qidError(QIL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** For each parameterized sort
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** $\texttt{S[L}_1\texttt{,}\ldots\texttt{,L}_n\texttt{]}$ in the
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** body of a parameterized module with
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** $\texttt{L}_1\ldots\texttt{L}_n$ the labels of the parameters in
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** the interface of the module, a map of the form 9
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** $\texttt{sort\ S[L}_1\texttt{,}\ldots\texttt{,L}_n\texttt{]\
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** to\ S[V}_1\texttt{,}\ldots\texttt{,V}_n\texttt{]}$
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** is generated, where $\texttt{V}_i$ is the name of the view associated to
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** the label $\texttt{L}_i$ in the set of pairs given as argument.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op genMapsSorts : SortSet Set{Tuple{ViewExp,ViewExp}} -> RenamingSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op genMapsClasses : SortSet Set{Tuple{ViewExp,ViewExp}} -> RenamingSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op prepSort : Sort Set{Tuple{ViewExp,ViewExp}} -> Sort .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op prepSort :
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder Sort ParameterList ParameterList Set{Tuple{ViewExp,ViewExp}} -> Sort .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq genMapsSorts((S ; SS), VEPS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (if prepSort(S, VEPS) == S
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then none
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else (sort S to prepSort(S, VEPS))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder genMapsSorts(SS, VEPS) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq genMapsSorts(none, VEPS) = none .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq genMapsClasses((S ; SS), VEPS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (if prepSort(S, VEPS) == S
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then none
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else (class S to prepSort(S, VEPS))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder genMapsClasses(SS, VEPS) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq genMapsClasses(none, VEPS) = none .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq prepSort(S, VEPS) = prepSort(getName(S), empty, getPars(S), VEPS) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq prepSort(Ty, VEPS) = Ty [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq prepSort(S, PL, P, < P ; VE > VEPS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = prepSort(S, (PL, VE), empty, < P ; VE > VEPS) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq prepSort(S, PL, (P, PL'), < P ; VE > VEPS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = prepSort(S, (PL, VE), PL', < P ; VE > VEPS) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq prepSort(S, PL, P, VEPS)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = prepSort(S, (PL, prepSort(P, VEPS)), empty, VEPS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [owise] .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq prepSort(S, PL, (P, PL'), VEPS)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = prepSort(S, (PL, prepSort(P, VEPS)), PL', VEPS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [owise] .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq prepSort(S, PL, empty, VEPS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if getPars(S) == empty
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then makeSort(S, PL)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else makeSort(prepSort(S, VEPS), PL)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** The function \texttt{prepImports} takes a list of importation
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** declarations and a set of pairs composed of a label and a view name, and
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** returns the list of importations resulting from changing in each of the
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** module expressions the occurrences of the labels of the interface of the
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** module being instantiated by the names of the views associated to them in
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** the list of pairs.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op prepImports : ImportList Set{Tuple{ViewExp,ViewExp}} -> ImportList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op prepModExp :
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ModuleExpression Set{Tuple{ViewExp,ViewExp}} -> ModuleExpression .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op prepModExp : ModuleExpression ViewExp ViewExp ViewExp
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder Set{Tuple{ViewExp,ViewExp}} -> ModuleExpression .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op prepParameterDecl :
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ParameterDecl Set{Tuple{ViewExp,ViewExp}} -> ParameterDecl .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op prepViewExp : ViewExp Set{Tuple{ViewExp,ViewExp}} -> ViewExp .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op prepViewExp : ParameterList Set{Tuple{ViewExp,ViewExp}} -> ParameterList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq prepImports(((including ME .) IL), VEPS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (including prepModExp(ME, VEPS) .)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder prepImports(IL, VEPS) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq prepImports(((including pd(PD) .) IL), VEPS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (including pd(prepParameterDecl(PD, VEPS)) .)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder prepImports(IL, VEPS) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq prepImports(((extending ME .) IL), VEPS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (extending prepModExp(ME, VEPS) .)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder prepImports(IL, VEPS) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq prepImports(((extending pd(PD) .) IL), VEPS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (extending pd(prepParameterDecl(PD, VEPS)) .)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder prepImports(IL, VEPS) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq prepImports(((protecting ME .) IL), VEPS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (protecting prepModExp(ME, VEPS) .)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder prepImports(IL, VEPS) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq prepImports(((protecting pd(PD) .) IL), VEPS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (protecting pd(prepParameterDecl(PD, VEPS)) .)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder prepImports(IL, VEPS) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq prepImports(nil, VEPS) = nil .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq prepModExp(QI, VEPS) = QI .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq prepModExp(ME{PL}, VEPS) = prepModExp(ME, empty, empty, PL, VEPS) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq prepModExp(ME + ME', VEPS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = prepModExp(ME, VEPS) + prepModExp(ME', VEPS) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq prepModExp(ME, VEPS) = ME [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq prepModExp(ME, PL, PL', (P, PL''), < P ; S > VEPS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = prepModExp(ME, (PL, S), PL', PL'', < P ; S > VEPS) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq prepModExp(ME, PL, PL', (P, PL''), < P ; S{PL3} > VEPS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = prepModExp(ME, (PL, S{PL3}), PL', PL'', < P ; S{PL3} > VEPS) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ceq prepModExp(ME, PL, PL', (P, PL''), < P ; P' ;; VE > VEPS)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = prepModExp(ME, (PL, P'), (PL', VE), PL'', < P ; P' ;; VE > VEPS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if VE =/= mtViewExp .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq prepModExp(ME, PL, PL', (P, PL''), VEPS)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = prepModExp(ME, (PL, P), PL', PL'', VEPS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [owise] .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq prepModExp(ME, PL, PL', (QI{PL''}, PL3), VEPS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = prepModExp(ME, (PL, prepViewExp(QI{PL''}, VEPS)), PL', PL3, VEPS) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq prepModExp(ME, PL, empty, empty, VEPS) = ME{PL} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq prepModExp(ME, PL, PL', empty, VEPS) = ME{PL}{PL'} [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq prepParameterDecl(X :: ME, < Y ; Z > VEPS)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = if X == Y
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then (Z :: ME)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder else prepParameterDecl(X :: ME, VEPS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq prepParameterDecl(X :: ME, none) = X :: ME .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq prepViewExp(VE, < VE ; VE' > VEPS) = VE' .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq prepViewExp(QI, VEPS) = QI [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq prepViewExp(X{PL}, VEPS) = X{prepViewExp(PL, VEPS)} [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq prepViewExp((VE, PL), VEPS)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = prepViewExp(VE, VEPS), prepViewExp(PL, VEPS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if VE =/= nil /\ PL =/= nil [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** The function \texttt{unitInst} calls the auxiliary function
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \texttt{unitInstAux}, which proceeds recursively on each of the parameters
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** in the interface of the module being instantiated. For each view, a set of
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** maps to be applied to the module is generated, which are accumulated in
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** the third argument of the function.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** In the base case, when there are no more parameters and no more views, the
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** maps for the parameterized sorts are also generated, and all maps are
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** then applied.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \texttt{unitInstAux} proceeds accumulating also the list of parameters
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** being modified, the list of importations, and a list of label-view
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** pairs (\texttt{QidTuple{ViewExp,ViewExp}}) associating each label in
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** the interface to the view used in the instantiation of the theory with
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** such label. This list of pairs is used to generate the set of maps of the
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** parameterized sorts and to `prepare' the list of importations as
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** indicated above.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder sort TreatParResult .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op <_;_;_;_;_> : Set{ViewMap} ParameterDeclList ImportList
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder Set{Tuple{ViewExp,ViewExp}} Database -> TreatParResult .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op mapSet : TreatParResult -> Set{ViewMap} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op getPars : TreatParResult -> ParameterDeclList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op getImports : TreatParResult -> ImportList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op viewExpPairSet : TreatParResult -> Set{Tuple{ViewExp,ViewExp}} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op db : TreatParResult -> Database .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq mapSet(< VMAPS ; PDL ; IL ; VEPS ; DB >) = VMAPS .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getPars(< VMAPS ; PDL ; IL ; VEPS ; DB >) = PDL .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getImports(< VMAPS ; PDL ; IL ; VEPS ; DB >) = IL .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq viewExpPairSet(< VMAPS ; PDL ; IL ; VEPS ; DB >) = VEPS .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq db(< VMAPS ; PDL ; IL ; VEPS ; DB >) = DB .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op unitInstAux : Module Module OpDeclSet RenamingSet ParameterDeclList
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ParameterDeclList ImportList ImportList ParameterList
473b81d33893192056dde74b26b2467f983c102cChristian Maeder Set{Tuple{ViewExp,ViewExp}} ParameterDeclList Database
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder -> Database .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op treatPar : ParameterDecl ViewExp Set{Tuple{ViewExp,ViewExp}}
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ParameterDeclList Database -> TreatParResult .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op treatPar2 : ParameterDecl ViewExp Set{Tuple{ViewExp,ViewExp}}
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ParameterDeclList Database -> TreatParResult .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op treatParAux : Qid ModuleExpression ParameterDeclList ViewExp Qid ViewExp
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ViewExp ParameterDeclList RenamingSet ParameterDeclList
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ImportList Set{Tuple{ViewExp,ViewExp}} Database
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder -> TreatParResult .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op treatParAux2 : Qid ModuleExpression ParameterDeclList ViewExp Qid ViewExp
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ViewExp ParameterDeclList RenamingSet ParameterDeclList ImportList
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder Set{Tuple{ViewExp,ViewExp}} Database -> TreatParResult .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq unitInst(ME, PL, PDL, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = unitInstAux(setName(getTopModule(ME, DB), ME{PL}),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder signature(getFlatModule(ME, DB)), getVars(ME, DB), none,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder getPars(getTopModule(ME, DB)), nil,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder getImports(getTopModule(ME, DB)), nil, PL, none, PDL, DB) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ceq unitInstAux(U, M, VDS, VMAPS,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder (X :: ME, PDL), PDL', IL, IL'',
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder (QI, PL), VEPS, PDL'', DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = unitInstAux(U, M, VDS, (VMAPS, VMAPS'), PDL, (PDL', PDL3),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder IL, (IL'' IL3), PL, (VEPS VEPS'), PDL'', DB')
473b81d33893192056dde74b26b2467f983c102cChristian Maeder if < VMAPS' ; PDL3 ; IL3 ; VEPS' ; DB' >
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder := treatPar(X :: ME, QI, VEPS, PDL'', DB) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ceq unitInstAux(U, M, VDS, VMAPS,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder (X :: ME, PDL), PDL', IL, IL'',
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder (QI{PL}, PL'), VEPS, PDL'', DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = unitInstAux(U, M, VDS, (VMAPS, VMAPS'), PDL, (PDL', PDL3),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder IL, (IL'' IL3), PL', (VEPS VEPS'), PDL'', DB')
473b81d33893192056dde74b26b2467f983c102cChristian Maeder if < VMAPS' ; PDL3 ; IL3 ; VEPS' ; DB' >
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder := treatPar(X :: ME, QI{PL}, VEPS, PDL'', DB) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq unitInstAux(U, M, VDS, VMAPS, nil, PDL, IL, IL', empty, VEPS, PDL', DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = evalModule(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder setImports(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder setPars(applyMapsToModule((VMAPS', VMAPS''), U, M), PDL),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder (prepImports(IL, VEPS) IL')),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder applyMapsToOps(VMAPS', VMAPS'', VDS, M),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder DB)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder if < VMAPS' ; VMAPS'' >
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder := splitMaps(
473b81d33893192056dde74b26b2467f983c102cChristian Maeder (VMAPS,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder genMapsSorts(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder (getSorts(U) ; getSortSetAux(getImports(U), DB)), VEPS),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder genMapsClasses(
473b81d33893192056dde74b26b2467f983c102cChristian Maeder (getClassNames(getClasses(U)) ;
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder getClassSetAux(getImports(U), DB)), VEPS))) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq unitInstAux(unitError(QIL), UK:[Module], SDV:[OpDeclSet], VMAPS, PDL,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder PDL', IL, IL', PL, VEPS, PDL'', DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = warning(DB, QIL) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq unitInstAux(noModule,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder unitError(QIL), VDS, VMAPS, PDL, PDL', IL, IL', VE, VEPS, PDL'', DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = warning(DB, QIL) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq unitInstAux(U, M, VDS, VMAPS, (X :: ME, PDL),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder PDL', IL, IL', empty, VEPS, PDL'', DB)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = warning(DB,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder '\r 'Error: '\o 'Incorrect 'module header2QidList(getName(U)) '. '\n) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq unitInstAux(U, M, VDS, VMAPS, nil, PDL, IL, IL', (QI, VE, PL), VEPS, PDL', DB)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = warning(DB,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder '\r 'Error: '\o 'Incorrect 'module header2QidList(getName(U)) '. '\n) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq unitInstAux(U, M, VDS, VMAPS, PDL, PDL', IL, IL', PL, VEPS, PDL'', DB)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = DB
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq treatParView(X :: ME, VE, ME', VEPS, PDL, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if labelInModExp(X, ME')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then treatPar(X :: ME, VE, VEPS, PDL, DB)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder else < none ;
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder getPars(treatPar(X :: ME, VE, VEPS, PDL, DB)) ;
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder getImports(treatPar(X :: ME, VE, VEPS, PDL, DB)) ;
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder viewExpPairSet(treatPar(X :: ME, VE, VEPS, PDL, DB)) ;
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder db(treatPar(X :: ME, VE, VEPS, PDL, DB)) >
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op labelInModExp : Qid ModuleExpression -> Bool .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op labelInViewExp : Qid ViewExp -> Bool .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq labelInModExp(X, QI) = X == QI .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq labelInModExp(X, ME{VE}) = labelInViewExp(X, VE) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq labelInModExp(X, TUPLE[N]) = false .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq labelInModExp(X, POWER[N]) = false .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq labelInViewExp(X, QI) = X == QI .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq labelInViewExp(X, ((VE, VE')))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = labelInViewExp(X, VE) or-else labelInViewExp(X, VE') .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq labelInViewExp(X, QI{VE}) = X == QI or-else labelInViewExp(X, VE) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq treatPar(X :: ME, VE, VEPS, PDL, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if VE :: Qid and-then labelInParameterDeclList(VE, PDL)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then < (genMapsQualSorts(X, VE, getThSorts(ME, DB), VEPS),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder genMapsQualClasses(X, VE, getThClasses(ME, DB), VEPS)) ;
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder VE :: ME ;
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder nil ;
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder < X ; VE > ;
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder createCopy((VE :: ME), DB) >
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else if viewInDb(VE, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then if theory(getTopModule(target(getView(VE, DB)), DB))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then < prepare(
473b81d33893192056dde74b26b2467f983c102cChristian Maeder mapSet(getView(VE, DB)), X,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder getThSorts(ME, DB),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder getThSorts(target(getView(VE, DB)), DB),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder getThClasses(target(getView(VE, DB)), DB)) ;
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder X :: target(getView(VE, DB)) ;
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder nil ;
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder < X ; (VE ;; X) > ;
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder createCopy((X :: target(getView(VE, DB))), DB) >
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else < prepare(
473b81d33893192056dde74b26b2467f983c102cChristian Maeder mapSet(getView(VE, DB)), X,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder getThSorts(ME, DB), none, none) ;
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder getPars(getTopModule(target(getView(VE, DB)), DB)) ;
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder (protecting target(getView(VE, DB)) .) ;
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder < X ; VE > ;
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder DB >
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi
473b81d33893192056dde74b26b2467f983c102cChristian Maeder else < none ; nil ; nil ; none ;
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder warning(DB, '\r 'Error: '\o 'View VE 'not 'in 'database. '\n) >
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op viewInstAux : View Set{ViewMap} ParameterDeclList ParameterDeclList
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ParameterList Set{Tuple{ViewExp,ViewExp}} ParameterDeclList Database
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder -> Database .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op treatParView : ParameterDecl ParameterList ModuleExpression
473b81d33893192056dde74b26b2467f983c102cChristian Maeder Set{Tuple{ViewExp,ViewExp}} ParameterDeclList Database
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder -> TreatParResult .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op treatParAux : Qid ModuleExpression ParameterList Qid ViewExp ViewExp
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ParameterList RenamingSet ParameterList ImportList
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder Set{Tuple{ViewExp,ViewExp}} Database -> TreatParResult .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq viewInst(VE, PL, PDL, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = viewInstAux(setName(getView(VE, DB), VE{PL}),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder none, getPars(getView(VE, DB)), nil, PL, none, PDL, DB) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq viewInstAux(VI, VMAPS, (X :: ME, PDL), PDL', (QI, PL), VEPS, PDL'', DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = viewInstAux(VI, (VMAPS, VMAPS'), PDL, (PDL', PDL3),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder PL, (VEPS VEPS'), PDL'', DB')
473b81d33893192056dde74b26b2467f983c102cChristian Maeder if < VMAPS' ; PDL3 ; IL ; VEPS' ; DB' >
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder := treatParView(X :: ME, QI, source(VI), VEPS, PDL'', DB) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ceq viewInstAux(VI, VMAPS, (X :: ME, PDL), PDL',
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder (QI{PL}, PL'), VEPS, PDL'', DB)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = viewInstAux(VI, (VMAPS, VMAPS'), PDL, (PDL', PDL3),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder PL', (VEPS VEPS'), PDL'', DB')
473b81d33893192056dde74b26b2467f983c102cChristian Maeder if < VMAPS' ; PDL3 ; IL ; VEPS' ; DB' >
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder := treatParView(X :: ME, QI{PL}, source(VI), VEPS, PDL'', DB) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq viewInstAux(VI, VMAPS, nil, PDL, empty, VEPS, PDL', DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = insertView(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder setPars(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder sTSource(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder setTarget(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder setMaps(VI,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder applyMapsToMaps(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder (genMapsSorts(getSortSet(source(VI), DB''), VEPS),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder genMapsClasses(getClassSet(source(VI), DB''), VEPS)),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder (VMAPS,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder genMapsSorts(getSortSet(target(VI), DB''), VEPS),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder genMapsClasses(getClassSet(target(VI), DB''), VEPS)),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder mapSet(VI))),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder prepModExp(target(VI), VEPS)),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder prepModExp(source(VI), VEPS)),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder PDL),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder DB'')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if < DB' ; ME' > := evalModExp(prepModExp(source(VI), VEPS), PDL', DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder /\ < DB'' ; ME'' > := evalModExp(prepModExp(target(VI), VEPS), PDL', DB') .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq viewInstAux(viewError(QIL), VMAPS, PDL0:[ParameterDeclList], PDL, PL, VEPS, PDL', DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = warning(DB, QIL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq viewInstAux(VI, VMAPS, (X :: ME, PDL), PDL', empty, VEPS, PDL'', DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = warning(DB, ('\r 'Error: '\o 'Incorrect 'view name(VI) '. '\n)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq viewInstAux(VI, VMAPS, nil, PDL, (QI, PL), VEPS, PDL', DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = warning(DB, ('\r 'Error: '\o 'Incorrect 'view name(VI) '. '\n)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq viewInstAux(VI, VMAPS, (X :: ME, PDL), PDL', (QI{PL}, PL'), VEPS, PDL'', DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = warning(DB, ('\r 'Error: '\o 'Wrong 'instantiation name(VI) '. '\n)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op applyMapsToMaps : Set{ViewMap} Set{ViewMap} Set{ViewMap} -> Set{ViewMap} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op applyMapsToTerm : Set{ViewMap} TermList -> TermList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq applyMapsToMaps(VMAPS, VMAPS', op F to F' [AtS]) = (op F to F' [AtS]) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq applyMapsToMaps(VMAPS, VMAPS', (op F to F' [AtS], VMAPS''))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (op F to F' [AtS], applyMapsToMaps(VMAPS, VMAPS', VMAPS'')) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq applyMapsToMaps(VMAPS, VMAPS', op F : TyL -> Ty to F' [AtS])
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = (op F : applyMapsToTypeList(VMAPS, TyL)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder -> applyMapsToType(VMAPS, Ty) to F' [AtS]) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq applyMapsToMaps(VMAPS, VMAPS',
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder (op F : TyL -> Ty to F' [AtS], VMAPS''))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = (op F : applyMapsToTypeList(VMAPS, TyL)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder -> applyMapsToType(VMAPS, Ty) to F' [AtS],
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder applyMapsToMaps(VMAPS, VMAPS', VMAPS'')) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq applyMapsToMaps(VMAPS, VMAPS', (sort S to S'))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (sort applyMapsToType(VMAPS, S) to applyMapsToType(VMAPS', S')) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq applyMapsToMaps(VMAPS, VMAPS', ((sort S to S'), VMAPS''))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = ((sort applyMapsToType(VMAPS, S) to applyMapsToType(VMAPS', S')),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder applyMapsToMaps(VMAPS, VMAPS', VMAPS'')) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq applyMapsToMaps(VMAPS, VMAPS', (label L to L')) = (label L to L') .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq applyMapsToMaps(VMAPS, VMAPS', ((label L to L'), VMAPS''))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = ((label L to L'), applyMapsToMaps(VMAPS, VMAPS', VMAPS'')) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq applyMapsToMaps(VMAPS, VMAPS', (class S to S'))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (class applyMapsToType(VMAPS, S) to applyMapsToType(VMAPS',S')) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq applyMapsToMaps(VMAPS, VMAPS', ((class S to S'), VMAPS''))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = ((class applyMapsToType(VMAPS, S) to applyMapsToType(VMAPS',S')),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder applyMapsToMaps(VMAPS, VMAPS', VMAPS'')) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq applyMapsToMaps(VMAPS, VMAPS', (attr A . S to A'))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (attr A . applyMapsToType(VMAPS, S) to A') .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq applyMapsToMaps(VMAPS, VMAPS', ((attr A . S to A'), VMAPS''))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = ((attr A . applyMapsToType(VMAPS, S) to A'),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder applyMapsToMaps(VMAPS, VMAPS', VMAPS'')) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq applyMapsToMaps(VMAPS, VMAPS', (msg F to F')) = (msg F to F') .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq applyMapsToMaps(VMAPS, VMAPS', ((msg F to F'), VMAPS''))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = ((msg F to F'), applyMapsToMaps(VMAPS, VMAPS', VMAPS'')) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq applyMapsToMaps(VMAPS, VMAPS', (msg F : TyL -> S to F'))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = (msg F : applyMapsToTypeList(VMAPS, TyL)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder -> applyMapsToType(VMAPS, S) to F') .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq applyMapsToMaps(VMAPS, VMAPS',
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ((msg F : TyL -> S to F'), VMAPS''))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = ((msg F : applyMapsToTypeList(VMAPS, TyL)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder -> applyMapsToType(VMAPS, S) to F'),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder applyMapsToMaps(VMAPS, VMAPS', VMAPS'')) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq applyMapsToMaps(VMAPS, VMAPS', termMap(T, T'))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = termMap(applyMapsToTerm(VMAPS, T),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder applyMapsToTerm(VMAPS', T')) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq applyMapsToMaps(VMAPS, VMAPS', (termMap(T, T'), VMAPS''))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = (termMap(applyMapsToTerm(VMAPS, T),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder applyMapsToTerm(VMAPS', T')),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder applyMapsToMaps(VMAPS, VMAPS', VMAPS'')) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq applyMapsToMaps(VMAPS, VMAPS', none) = none .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq applyMapsToTerm(VMAPS, Ct)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = qid(string(getName(Ct))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder + "." + string(applyMapsToType(VMAPS, getType(Ct)))) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq applyMapsToTerm(VMAPS, V) = V .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq applyMapsToTerm(VMAPS, qidError(QIL)) = qidError(QIL) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ceq applyMapsToTerm(VMAPS, F[TL])
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = F[applyMapsToTerm(VMAPS, TL)]
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if (F =/= '<_:_|_>) and (F =/= '<_:_|`>) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq applyMapsToTerm(VMAPS, '<_:_|_>[O, Ct, T])
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = '<_:_|_>[applyMapsToTerm(VMAPS, O),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder qid(string(applyMapsToClassName(VMAPS, getName(Ct)))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder + "." + string(applyMapsToClassName(VMAPS, getType(Ct)))),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder applyMapsToTerm(VMAPS, T)] .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ceq applyMapsToTerm(VMAPS, '<_:_|_>[O, C, T])
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = '<_:_|_>[applyMapsToTerm(VMAPS, O),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder applyMapsToClassName(VMAPS, C),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder applyMapsToTerm(VMAPS, T)]
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if not C :: Constant .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq applyMapsToTerm(VMAPS, '<_:_|`>[O, Ct])
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = '<_:_|_>[applyMapsToTerm(VMAPS, O),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder qid(string(applyMapsToClassName(VMAPS, getName(Ct)))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder + "." + string(applyMapsToClassName(VMAPS, getType(Ct)))),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder 'none.AttributeSet] .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ceq applyMapsToTerm(VMAPS, '<_:_|`>[O, C])
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = '<_:_|_>[applyMapsToTerm(VMAPS, O),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder applyMapsToClassName(VMAPS, C),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder 'none.AttributeSet]
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if not C :: Constant .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ceq applyMapsToTerm(VMAPS, (T, TL))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = (applyMapsToTerm(VMAPS, T), applyMapsToTerm(VMAPS, TL))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if TL =/= empty .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** As pointed out in Section~\ref{module-names}, for each new module
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** expression constructor being introduced, we need to add equations for the
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** operator \texttt{header2Qid}. Since the function to transform view
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** expressions into lists of quoted identifiers was already defined in
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** Section~\ref{VIEW-EXPR}, we just need to add the following equation.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq header2Qid((ME { PL }))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = qidList2Qid(header2Qid(ME) '`{ parameterList2Qid(PL) '`}) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ceq header2QidList((ME { PL }))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = (if QI == '\s then QIL else QIL QI fi
473b81d33893192056dde74b26b2467f983c102cChristian Maeder '`{ parameterList2QidList(PL) '`} '\s)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if QIL QI := header2QidList(ME) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** Given a module expression of the form \verb~ME{VE}~ such that
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \texttt{ME} is in the database, we need to add \verb~ME{VE}~ to the set
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** of names of the modules depending on \texttt{ME} and on \texttt{VE}.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** Since \texttt{VE} may be a composed view expression, we have to add the
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** name of the module to each of the views in it. In this way, if \texttt{ME}
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** or any of the views in \texttt{VE} is redefined or removed from the
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** database, \verb~ME{VE}~ will be removed as well.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq setUpModExpDeps(ME{PL},
473b81d33893192056dde74b26b2467f983c102cChristian Maeder db(< ME ; DT ; U ; U' ; M ; VDS ; MNS ; VES > MIS, MNS',
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder VIS, VES', MNS'', MNS3, MNS4, QIL))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = viewExpDeps(ME{PL}, PL,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder db(< ME ; DT ; U ; U' ; M ; VDS ; (MNS . ME{PL}) ; VES > MIS,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder MNS', VIS, VES', MNS'', MNS3, MNS4, QIL)) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq setUpModExpDeps(ME{PL},
473b81d33893192056dde74b26b2467f983c102cChristian Maeder db(< ME ; DM ; U ; U' ; M ; VDS ; MNS ; VES > MIS, MNS',
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder VIS, VES', MNS'', MNS3, MNS4, QIL))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = viewExpDeps(ME{PL}, PL,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder db(< ME ; DM ; U ; U' ; M ; VDS ; (MNS . ME{PL}) ; VES > MIS,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder MNS', VIS, VES', MNS'', MNS3, MNS4, QIL)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq setUpModExpDeps('META-LEVEL{PL}, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = setUpModExpDeps('META-LEVEL{PL}, PL, DB) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq setUpModExpDeps('META-LEVEL{QI},
473b81d33893192056dde74b26b2467f983c102cChristian Maeder db(< QI ; DT ; U ; U' ; M ; VDS ; MNS ; VES > MIS, MNS',
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder VIS, VES', MNS'', MNS3, MNS4, QIL))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = db(< QI ; DT ; U ; U' ; M ; VDS ; MNS . 'META-LEVEL{QI} ; VES >
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder MIS, MNS', VIS, VES', MNS'', MNS3, MNS4, QIL) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq setUpModExpDeps('META-LEVEL{QI},
473b81d33893192056dde74b26b2467f983c102cChristian Maeder db(< QI ; DM ; U ; U' ; M ; VDS ; MNS ; VES > MIS, MNS',
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder VIS, VES', MNS'', MNS3, MNS4, QIL))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = db(< QI ; DM ; U ; U' ; M ; VDS ; MNS . 'META-LEVEL{QI} ; VES >
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder MIS, MNS', VIS, VES', MNS'', MNS3, MNS4, QIL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq setUpModExpDeps(ME{PL}, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = warning(DB, ('\r 'Error: '\o 'Module header2QidList(ME) 'not 'in 'database. '\n))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if (ME =/= 'META-LEVEL) /\ (not unitInDb(ME, DB)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq setUpModExpDeps('META-LEVEL{PL}, (QI, PL'),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder db(< QI ; DT ; U ; U' ; M ; VDS ; MNS ; VES > MIS, MNS',
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder VIS, VES', MNS'', MNS3, MNS4, QIL))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = setUpModExpDeps('META-LEVEL{PL}, PL',
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder db(< QI ; DT ; U ; U' ; M ; VDS ; MNS . 'META-LEVEL{PL} ; VES >
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder MIS, MNS', VIS, VES', MNS'', MNS3, MNS4, QIL)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq setUpModExpDeps('META-LEVEL{PL}, (QI, PL'),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder db(< QI ; DM ; U ; U' ; M ; VDS ; MNS ; VES > MIS, MNS',
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder VIS, VES', MNS'', MNS3, MNS4, QIL))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = setUpModExpDeps('META-LEVEL{PL}, PL',
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder db(< QI ; DM ; U ; U' ; M ; VDS ; MNS . 'META-LEVEL{PL} ; VES >
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder MIS, MNS', VIS, VES', MNS'', MNS3, MNS4, QIL)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq setUpModExpDeps('META-LEVEL{PL}, nil, DB) = DB .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op viewExpDeps : Header ViewExp Database -> Database .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder---- eq viewExpDeps(ME, VE,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder---- db(MIS, MNS,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder---- < VE ; DT ; VI ; MNS' ; VES > VIS, VES',
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- MNS'', MNS3, MNS4, QIL))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder---- = db(MIS, MNS, < VE ; DT ; VI ; MNS' . ME ; VES > VIS, VES',
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- MNS'', MNS3, MNS4, QIL) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq viewExpDeps(ME, (VE, PL),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder db(MIS, MNS,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder < VE ; DT ; VI ; MNS' ; VES > VIS, VES',
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder MNS'', MNS3, MNS4, QIL))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = viewExpDeps(ME, PL,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder db(MIS, MNS,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder < VE ; DT ; VI ; MNS' . ME ; VES > VIS, VES',
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder MNS'', MNS3, MNS4, QIL)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- eq viewExpDeps(ME, VE, DB) = DB [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq viewExpDeps(ME, (VE, PL), DB) = viewExpDeps(ME, PL, DB) [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq viewExpDeps(ME, empty, DB) = DB .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederendfm
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*******************************************************************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder***
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** 6.10 Renaming of Modules
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder***
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** In addition to the declaration of the constructor for renaming module
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** expressions, the following module \texttt{RENAMING-EXPR-EVALUATION}
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** introduces equations to treat this new case in the definition of functions
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** \texttt{evalModExp}, \texttt{header2QidList}, \texttt{prepHeader}, and
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \texttt{setUpModuleDeps}.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** A renaming expression is evaluated by applying the renaming maps, not only
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** to the top unit, but also to the part of the structure \emph{affected} by
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** the maps. The renaming process propagates downwards in the unit hierarchy
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** while the units in the structure are affected by the renamings. We say that
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** a unit is affected by a set of maps (checked by the \texttt{modAffd}
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** function) when any of the maps is applicable to any of the declarations in
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** the unit, or in any of its subunits. The application of a set of maps to a
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** single unit is accomplished by the \texttt{applyMapsToModule} function,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** discussed in Section~\ref{applyMapsToModule}.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederfmod RENAMING-EXPR-EVALUATION is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr DATABASE .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr VIEW-MAP-SET-APPL-ON-UNIT .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr EVALUATION .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder inc MOD-EXPR .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr MOD-EXPR-EVAL .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr INST-EXPR-EVALUATION .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr FMAP .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars ME ME' : ModuleExpression .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var MNS MNS' MNS'' MNS3 MNS4 : Set{ModuleName} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars MIS MIS' : Set{ModuleInfo} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var VIS : Set{ViewInfo} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars M M' : Module .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars PU U U' DM : Module .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars DB DB' : Database .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var QIL : QidList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars VES VES' : Set{ViewExp} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var PL : ParameterList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var PDL : ParameterDeclList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars PDS PDS' : Set{ParameterDecl} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var I : Import .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars IL IL' : ImportList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var VMAP : ViewMap .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars VMAPS VMAPS' VMAPS'' VMAPS3 : RenamingSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var VEPS : Set{Tuple{ViewExp,ViewExp}} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars X QI QI' QI'' F F' F'' L L' L'' A A' A'' : Qid .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars S S' S'' C C' C'' : Sort .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var K : Kind .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars SS : SortSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars TyL TyL' : TypeList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars Ty Ty' : Type .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars T T' T'' T3 : Term .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var DT : Default{Term} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var TL : TermList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var OPD : OpDeclSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars OPDS VDS : OpDeclSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars AtS AtS' : AttrSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var Rl : Rule .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var RlS : RuleSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var CD : ClassDecl .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var CDS : ClassDeclSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var ADS : AttrDeclSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var MD : MsgDecl .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var MDS : MsgDeclSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var MAP : Renaming .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars MAPS MAPS' MAPS'' : RenamingSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var N : Nat .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var NL : IntList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var Hk : Hook .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var HkL : HookList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var B : Bool .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var St : String .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** The function \texttt{crtCopyRen} creates a copy of the part of the
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** structure of the specified module which is affected by the renaming,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** applying to each of the generated modules in the new structure the subset
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** of maps affecting each one of them. The equation extending the
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** \texttt{evalModExp} function to the renaming module expression is then
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** reduced to a call to \texttt{crtCopyRen} with the appropriate
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** arguments.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq labelInModExp(X, ME * (MAPS)) = labelInModExp(X, ME) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op crtCopyRen : ModuleExpression RenamingSet Database -> Database .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ceq evalModExp(ME * (MAPS), PDL, DB)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = if unitInDb(ME' * (MAPS''), DB')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then < DB' ; ME' * (MAPS'') >
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else < crtCopyRen(ME', MAPS', DB') ; ME' * (MAPS'') >
473b81d33893192056dde74b26b2467f983c102cChristian Maeder fi
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if < DB' ; ME' > := evalModExp(ME, PDL, DB)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder /\ MAPS' := fixMaps(MAPS, ME', DB')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder /\ MAPS'' := canMaps(MAPS', getFlatModule(ME', DB')) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq crtCopyRen(ME, none, DB) = DB .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq crtCopyRen(ME, VMAPS, DB)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = if unitInDb(_*`(_`)(ME, VMAPS'), DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then DB
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else applyMapsRec(
473b81d33893192056dde74b26b2467f983c102cChristian Maeder VMAPS,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder getImports(getTopModule(ME, DB)),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder nil,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder setName(
473b81d33893192056dde74b26b2467f983c102cChristian Maeder applyMapsToModuleAux(VMAPS'', VMAPS3,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder getTopModule(ME, DB), getFlatModule(ME, DB)),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder _*`(_`)(ME, VMAPS')),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder applyMapsToOps(VMAPS'', VMAPS3,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder getVars(ME, DB), getFlatModule(ME, DB)),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder DB)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder fi
473b81d33893192056dde74b26b2467f983c102cChristian Maeder if VMAPS' := canMaps(VMAPS, getFlatModule(ME, DB))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder /\ < VMAPS'' ; VMAPS3 > := splitMaps(VMAPS') .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op canMaps : RenamingSet Module -> RenamingSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq canMaps(op F : TyL -> Ty to F' [AtS], M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = op F : canKinds(TyL, M) -> canKinds(Ty, M) to F' [AtS] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq canMaps((op F : TyL -> Ty to F' [AtS], MAPS), M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (op F : canKinds(TyL, M) -> canKinds(Ty, M) to F' [AtS],
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder canMaps(MAPS, M)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq canMaps(msg F : TyL -> Ty to F', M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = msg F : canKinds(TyL, M) -> canKinds(Ty, M) to F' .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq canMaps((msg F : TyL -> Ty to F', MAPS), M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (msg F : canKinds(TyL, M) -> canKinds(Ty, M) to F',
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder canMaps(MAPS, M)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq canMaps(MAP:Renaming, M) = MAP:Renaming [owise] .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq canMaps((MAP:Renaming, MAPS), M)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = (MAP:Renaming, canMaps(MAPS, M))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq canMaps(none, M) = none .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op canKinds : TypeList Module -> [TypeList] .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ---- eq canKinds(K:Kind TyL, M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ---- = kind(maximalSorts(M, K:Kind)) canKinds(TyL, M) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq canKinds(nil, M) = nil .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq canKinds(cc(S ; SS) TyL, M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = kind(maximalSorts(M, getKind(M, S))) canKinds(TyL, M) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ----eq canKinds(TyL, M) = nil [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** We proceed downwards while the set of maps affects the module, but we do so
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** restricting the set of maps to the subset affecting the module. Since
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** operator and message maps in which arity and coarity are specified must be
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** applied to the whole subsort-overloaded family of operators or messages, we
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** have to carry along the signature of the module at the top to make all the
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** calls to the engine. Note that we may have maps of operations or messages
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** with the domain given by sorts that are not in the submodules but which
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** have other sorts in the submodules in the same connected components.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op applyMapsRec : Set{ViewMap} ImportList
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ImportList Module OpDeclSet Database -> Database .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq applyMapsRec(VMAPS, ((including ME .) IL), IL', U, VDS, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = applyMapsRec(
473b81d33893192056dde74b26b2467f983c102cChristian Maeder VMAPS, IL,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder including ME *( canMaps(fixMaps(VMAPS, ME, DB),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder getFlatModule(ME, DB)) ) . IL',
473b81d33893192056dde74b26b2467f983c102cChristian Maeder U, VDS,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder crtCopyRen(ME, fixMaps(VMAPS, ME, DB), DB)) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq applyMapsRec(VMAPS, ((extending ME .) IL), IL', U, VDS, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = applyMapsRec(
473b81d33893192056dde74b26b2467f983c102cChristian Maeder VMAPS, IL,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder extending ME *( canMaps(fixMaps(VMAPS, ME, DB),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder getFlatModule(ME, DB)) ) . IL',
473b81d33893192056dde74b26b2467f983c102cChristian Maeder U, VDS,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder crtCopyRen(ME, fixMaps(VMAPS, ME, DB), DB)) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq applyMapsRec(VMAPS, ((protecting ME .) IL), IL', U, VDS, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = applyMapsRec(
473b81d33893192056dde74b26b2467f983c102cChristian Maeder VMAPS, IL,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder protecting ME *( canMaps(fixMaps(VMAPS, ME, DB),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder getFlatModule(ME, DB)) ) . IL',
473b81d33893192056dde74b26b2467f983c102cChristian Maeder U, VDS,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder crtCopyRen(ME, fixMaps(VMAPS, ME, DB), DB)) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq applyMapsRec(VMAPS, (I IL), IL', U, VDS, DB)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = applyMapsRec(VMAPS, IL, (I IL'), U, VDS, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [owise] .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq applyMapsRec(VMAPS, nil, IL, U, VDS, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = evalModule(setImports(U, IL), VDS, DB) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq applyMapsRec(VMAPS, IL, IL', unitError(QIL), VDS, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = warning(DB, QIL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op fixMaps : [RenamingSet] ModuleExpression Database -> RenamingSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op fixMaps2 : [RenamingSet] Module ClassDeclSet MsgDeclSet -> RenamingSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ceq fixMaps(MAPS, ME, DB)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = fixMaps2(MAPS, getFlatModule(ME, DB), CDS, MDS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if < CDS ; MDS > := getAllClassesAndMsgs(ME, DB) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq fixMaps2(op F to F' [AtS], M, CDS, MDS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = opsAffd(getOps(M), op F to F' [AtS], M) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq fixMaps2((op F to F' [AtS], MAPS), M, CDS, MDS)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = (opsAffd(getOps(M), op F to F' [AtS], M),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fixMaps2(MAPS, M, CDS, MDS)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq fixMaps2(op F : TyL -> Ty to F' [AtS], M, CDS, MDS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = opsAffd(getOps(M), op F : TyL -> Ty to F' [AtS], M) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq fixMaps2((op F : TyL -> Ty to F' [AtS], MAPS), M, CDS, MDS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (opsAffd(getOps(M), op F : TyL -> Ty to F' [AtS], M),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fixMaps2(MAPS, M, CDS, MDS)) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq fixMaps2(msg F to F', M, CDS, MDS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = msgsAffd(MDS, msg F to F', M) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq fixMaps2((msg F to F', MAPS), M, CDS, MDS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (msgsAffd(MDS, msg F to F', M), fixMaps2(MAPS, M, CDS, MDS)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq fixMaps2(msg F : TyL -> Ty to F', M, CDS, MDS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = msgsAffd(MDS, msg F : TyL -> Ty to F', M) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq fixMaps2((msg F : TyL -> Ty to F', MAPS), M, CDS, MDS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (msgsAffd(MDS, msg F : TyL -> Ty to F', M),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fixMaps2(MAPS, M, CDS, MDS)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq fixMaps2(sort Ty to Ty', M, CDS, MDS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if sortsAffd(getSorts(M), sort Ty to Ty')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then (sort Ty to Ty')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else none
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq fixMaps2(((sort Ty to Ty'), MAPS), M, CDS, MDS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (if sortsAffd(getSorts(M), sort Ty to Ty')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then (sort Ty to Ty')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else none
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fixMaps2(MAPS, M, CDS, MDS)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq fixMaps2(class Ty to Ty', M, CDS, MDS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if classesAffd(CDS, class Ty to Ty')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then (class Ty to Ty')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else none
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq fixMaps2(((class Ty to Ty'), MAPS), M, CDS, MDS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (if classesAffd(CDS, class Ty to Ty')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then (class Ty to Ty')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else none
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fixMaps2(MAPS, M, CDS, MDS)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq fixMaps2(attr A . Ty to Ty', M, CDS, MDS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if classesAffd(CDS, attr A . Ty to Ty')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then (attr A . Ty to Ty')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else none
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq fixMaps2(((class A . Ty to Ty'), MAPS), M, CDS, MDS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (if classesAffd(CDS, attr A . Ty to Ty')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then (attr A . Ty to Ty')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else none
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fixMaps2(MAPS, M, CDS, MDS)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq fixMaps2(MAP:Renaming, M, CDS, MDS) = MAP:Renaming [owise] .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq fixMaps2((MAP:Renaming, MAPS), M, CDS, MDS)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = (MAP:Renaming, fixMaps2(MAPS, M, CDS, MDS))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq fixMaps2(none, M, CDS, MDS) = none .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder sort Tuple{ClassDeclSet, MsgDeclSet} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op <_;_> : ClassDeclSet MsgDeclSet -> Tuple{ClassDeclSet, MsgDeclSet} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op getClasses : Tuple{ClassDeclSet, MsgDeclSet} -> ClassDeclSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op getMsgs : Tuple{ClassDeclSet, MsgDeclSet} -> MsgDeclSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getClasses(< CDS ; MDS >) = CDS .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getMsgs(< CDS ; MDS >) = MDS .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op getAllClassesAndMsgs :
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ModuleExpression Database -> Tuple{ClassDeclSet, MsgDeclSet} .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op getAllClassesAndMsgs :
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ImportList Database -> Tuple{ClassDeclSet, MsgDeclSet} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getAllClassesAndMsgs(ME, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if getTopModule(ME, DB) :: OModule
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder and-then not getTopModule(ME, DB) :: SModule
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then < getClasses(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder getAllClassesAndMsgs(getImports(getTopModule(ME, DB)), DB))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder getClasses(getTopModule(ME, DB))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ;
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder getMsgs(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder getAllClassesAndMsgs(getImports(getTopModule(ME, DB)), DB))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder getMsgs(getTopModule(ME, DB)) >
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else < none ; none >
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getAllClassesAndMsgs(I IL, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = < getClasses(getAllClassesAndMsgs(moduleName(I), DB))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder getClasses(getAllClassesAndMsgs(IL, DB))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ;
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder getMsgs(getAllClassesAndMsgs(moduleName(I), DB))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder getMsgs(getAllClassesAndMsgs(IL, DB)) > .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getAllClassesAndMsgs((nil).ImportList, DB) = < none ; none > .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- sorts NeSet<TypeList> Set<TypeList> .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- subsort TypeList < NeSet<TypeList> < Set<TypeList> .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- op noneTLS : -> Set<TypeList> [ctor] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- op _!_ : Set<TypeList> Set<TypeList> -> Set<TypeList>
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- [ctor assoc comm id: noneTLS] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- op _!_ : NeSet<TypeList> NeSet<TypeList> -> NeSet<TypeList>
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- [ctor assoc comm id: noneTLS] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- sort Set<Type> .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- subsorts Type SortSet < Set<Type> .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- op _o_ : Set<Type> Set<Type> -> Set<Type> [ctor assoc comm id: none] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder----
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- eq Ty o Ty = Ty .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder sort TypeSetList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder subsort TypeSet < TypeSetList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op nilTSL : -> TypeSetList [ctor] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op _l_ : TypeSetList TypeSetList -> TypeSetList
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [ctor assoc id: nilTSL] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var TS : TypeSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var TSL : TypeSetList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var TLS : TypeListSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- var NTLS : NeTypeListSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- eq TyL ! TyL = TyL .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ----eq _!_(qidError(QIL), NTLS) = qidError(QIL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op fixKinds : TypeList Module -> TypeListSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op fixKinds : TypeList TypeSetList Module -> TypeListSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op fixKindsAux : Type Module -> TypeSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op fixKindsAux2 : SortSet Module -> TypeSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op unfold : TypeSetList -> TypeListSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op add : TypeSet TypeListSet -> TypeListSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq fixKinds(TyL, M) = fixKinds(TyL, nilTSL, M) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq fixKinds(Ty TyL, TSL, M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if fixKindsAux(Ty, M) == nil
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then none
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else fixKinds(TyL, TSL l fixKindsAux(Ty, M), M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq fixKinds(nil, TSL, M) = unfold(TSL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq fixKindsAux(S, M)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = if S in getSorts(M)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder then cc(connectedSorts(M, S))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder else none
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq fixKindsAux(K, M) = fixKindsAux2(getSorts(K), M) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq fixKindsAux(cc(SS), M) = fixKindsAux2(SS, M) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq fixKindsAux2((S ; SS), M)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = (if S in getSorts(M)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder then cc(connectedSorts(M, S))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder else none
473b81d33893192056dde74b26b2467f983c102cChristian Maeder fi
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ;
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fixKindsAux2(SS, M)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq fixKindsAux2(none, M) = none .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq unfold(TS l TSL) = add(TS, unfold(TSL)) if TS =/= none .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq unfold(nilTSL) = none .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq add(Ty, TyL ; TLS) = add(Ty, TyL) ; add(Ty, TLS) if TLS =/= none .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq add(Ty ; Ty' ; TS, TLS) = add(Ty, TLS) ; add(Ty' ; TS, TLS) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq add(none, TLS) = nilTSL .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq add(Ty, none) = Ty .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq add(Ty, TyL) = Ty TyL .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op connectedSorts : Module Type -> SortSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op connectedSorts : Module SortSet Type -> SortSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq connectedSorts(M, Ty) = connectedSorts(M, getSorts(M), Ty) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq connectedSorts(M, S ; SS, Ty)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = if sameKind(M, S, Ty)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder then S
473b81d33893192056dde74b26b2467f983c102cChristian Maeder else none
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi ; connectedSorts(M, SS, Ty) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq connectedSorts(M, none, Ty) = none .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op sortsAffd : SortSet ViewMap -> Bool .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op opsAffd : OpDeclSet ViewMap Module -> RenamingSet .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op opsAffdAux : OpDeclSet Qid TypeListSet Qid AttrSet Module
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder -> RenamingSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq sortsAffd((S ; SS), (sort S to S')) = true .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq sortsAffd(SS, (sort S to S')) = false [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq opsAffd(op F : TyL -> Ty [AtS] . OPDS, op F to F' [AtS'], M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = op F to F' [AtS'] .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq opsAffd(OPDS, op F : TyL -> Ty to F' [AtS], M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = opsAffdAux(OPDS, F, fixKinds(TyL Ty, M), F', AtS, M) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq opsAffd(OPDS, VMAPS:[RenamingSet], M) = none [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq opsAffdAux(op F : TyL -> Ty [AtS] . OPDS,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder F, (TyL' Ty') ; TLS, F', AtS', M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if sameKind(M, (TyL Ty), (TyL' Ty'))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then (op F : TyL' -> Ty' to F' [AtS'],
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder opsAffdAux(OPDS, F, TLS, F', AtS', M))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else (opsAffdAux(OPDS, F, (TyL' Ty') ; TLS, F', AtS', M),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder opsAffdAux(op F : TyL -> Ty [AtS] . OPDS, F, TLS, F', AtS', M))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq opsAffdAux(OPDS, F, TLS, F', AtS, M) = none [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** The predicate \texttt{modAffd} checks whether the module with the
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** name given as first argument in the database is affected by the set of maps
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** given as second argument. A module is affected by a map set if any of the
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** maps is applicable to the module or to any of its submodules.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op modAffd : Header RenamingSet Module Database -> Bool .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op modAffdAux : Module RenamingSet Module Database -> Bool .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op rlsAffd : RuleSet RenamingSet -> Bool .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op importsAffd : ImportList RenamingSet Module Database -> Bool .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op classesAffd : ClassDeclSet RenamingSet -> Bool .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op msgsAffd : MsgDeclSet RenamingSet Module -> RenamingSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op msgsAffdAux : MsgDeclSet Qid TypeListSet Qid Module -> RenamingSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq modAffd(ME, VMAPS, M, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = modAffdAux(getTopModule(ME, DB), VMAPS, M, DB) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq modAffdAux(U, VMAPS, M, DB)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = sortsAffd(getSorts(U), VMAPS)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder or-else
473b81d33893192056dde74b26b2467f983c102cChristian Maeder (opsAffd(getOps(U), VMAPS, M) == none
473b81d33893192056dde74b26b2467f983c102cChristian Maeder or-else
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ((not U :: FModule
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder and-then
473b81d33893192056dde74b26b2467f983c102cChristian Maeder (rlsAffd(getRls(U), VMAPS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder or-else
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder (not U :: SModule
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder and-then
473b81d33893192056dde74b26b2467f983c102cChristian Maeder (classesAffd(getClasses(U), VMAPS)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder or-else
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder msgsAffd(getMsgs(U), VMAPS, M) == none))))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder or-else
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder importsAffd(getImports(U), VMAPS, M, DB))) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq importsAffd(((including ME .) IL), VMAPS, M, DB)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = modAffd(ME, VMAPS, M, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder or-else importsAffd(IL, VMAPS, M, DB) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq importsAffd(((extending ME .) IL), VMAPS, M, DB)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = modAffd(ME, VMAPS, M, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder or-else importsAffd(IL, VMAPS, M, DB) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq importsAffd(((protecting ME .) IL), VMAPS, M, DB)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = modAffd(ME, VMAPS, M, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder or-else importsAffd(IL, VMAPS, M, DB) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq importsAffd(nil, VMAPS, M, DB) = false .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq rlsAffd(((rl T => T' [label(L) AtS] .) RlS), (label L' to L''))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (L == L') or-else rlsAffd(RlS, label L' to L'') .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq rlsAffd(((rl T => T' [label(L) AtS] .) RlS),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ((label L' to L''), VMAPS))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (L == L') or-else
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder (rlsAffd((rl T => T' [label(L) AtS] .), VMAPS) or-else
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder rlsAffd(RlS, ((label L' to L''), VMAPS))) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq rlsAffd(((crl T => T' if T'' = T3 [label(L) AtS] .) RlS),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder (label L' to L''))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (L == L') or-else rlsAffd(RlS, (label L' to L'')) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq rlsAffd(((crl T => T' if T'' = T3 [label(L) AtS] .) RlS),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ((label L' to L''), VMAPS))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = (L == L')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder or-else
473b81d33893192056dde74b26b2467f983c102cChristian Maeder (rlsAffd((crl T => T' if T'' = T3 [label(L) AtS] .), VMAPS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder or-else
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder rlsAffd(RlS, ((label L' to L''), VMAPS))) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq rlsAffd(RlS, VMAPS) = false [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq classesAffd(((class C | ADS .) CDS), (class C' to C''))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = (C == C')
473b81d33893192056dde74b26b2467f983c102cChristian Maeder or-else
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder classesAffd(CDS, (class C' to C'')) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq classesAffd(((class C | ADS .) CDS), ((class C' to C''), VMAPS))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = (C == C')
473b81d33893192056dde74b26b2467f983c102cChristian Maeder or-else
473b81d33893192056dde74b26b2467f983c102cChristian Maeder (classesAffd((class C | ADS .), VMAPS)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder or-else
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder classesAffd(CDS, ((class C' to C''), VMAPS))) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq classesAffd(((class C | ((attr A : S), ADS) .) CDS),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder (attr A' . C' to A''))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if C == C'
473b81d33893192056dde74b26b2467f983c102cChristian Maeder then (A == A')
473b81d33893192056dde74b26b2467f983c102cChristian Maeder or-else
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder classesAffd(((class C | ADS .) CDS), (attr A' . C' to A''))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else classesAffd(CDS, (attr A' . C' to A''))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq classesAffd(((class C | ((attr A : S), ADS) .) CDS),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ((attr A' . C' to A''), VMAPS))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if C == C'
473b81d33893192056dde74b26b2467f983c102cChristian Maeder then (A == A')
473b81d33893192056dde74b26b2467f983c102cChristian Maeder or-else
473b81d33893192056dde74b26b2467f983c102cChristian Maeder (classesAffd(((class C | ADS .) CDS),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ((attr A' . C' to A''), VMAPS))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder or-else
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder classesAffd(CDS, VMAPS))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else classesAffd((class C | ((attr A : S), ADS) .), VMAPS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder or-else
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder classesAffd(CDS, ((attr A' . C' to A''), VMAPS))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq classesAffd(CDS, VMAPS) = false [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq msgsAffd(msg F : TyL -> Ty . MDS, msg F to F', M) = msg F to F' .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq msgsAffd(MDS, msg F : TyL -> Ty to F', M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = msgsAffdAux(MDS, F, fixKinds(TyL Ty, M), F', M) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq msgsAffd(MDS, VMAPS:[RenamingSet], M) = none [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq msgsAffdAux(msg F : TyL -> Ty . MDS, F, (TyL' Ty') ; TLS, F', M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if sameKind(M, (TyL Ty), (TyL' Ty'))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then (msg F : TyL' -> Ty' to F',
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder msgsAffdAux(MDS, F, TLS, F', M))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else (msgsAffdAux(MDS, F, (TyL' Ty') ; TLS, F', M),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder msgsAffdAux(msg F : TyL -> Ty . MDS, F, TLS, F', M))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq msgsAffdAux(MDS, F, TLS, F', M) = none [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** The function \texttt{mapsRestrict} returns the subset of the view
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** maps given as second argument that affect the given module.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op mapsRestrict : Module RenamingSet Module Database -> RenamingSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op mapsRestrict : Header RenamingSet Module Database -> RenamingSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq mapsRestrict(ME, VMAPS, M, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = mapsRestrict(getTopModule(ME, DB), VMAPS, M, DB) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq mapsRestrict(U, VMAP, M, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if modAffdAux(U, VMAP, M, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then VMAP
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else none
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq mapsRestrict(U, (VMAP, VMAPS), M, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if modAffdAux(U, VMAP, M, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then (VMAP, mapsRestrict(U, VMAPS, M, DB))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else mapsRestrict(U, VMAPS, M, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq mapsRestrict(U, none, M, DB) = none .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** The definition of the function \texttt{header2QidList} on the renaming
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** module expression has to take care of transforming into a quoted identifier
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** list the set of view maps given in the module expression.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op maps2QidList : RenamingSet -> QidList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op attrSet2QidList : AttrSet -> QidList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op hookList2QidList : HookList -> QidList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op termList2QidList : TermList -> QidList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op intList2QidList : IntList -> QidList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op typeList2QidList : TypeList -> QidList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq maps2QidList(((op F to F' [AtS]), MAPS))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = if AtS == none
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then ('op F 'to F' '`, '\s maps2QidList(MAPS))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder else ('op F 'to F' '\s '`[ attrSet2QidList(AtS) '`] '`, '\s
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder maps2QidList(MAPS))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq maps2QidList((op F to F' [AtS]))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = if AtS == none
473b81d33893192056dde74b26b2467f983c102cChristian Maeder then ('op F 'to F')
473b81d33893192056dde74b26b2467f983c102cChristian Maeder else ('op F 'to F' '\s '`[ attrSet2QidList(AtS) '`])
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq maps2QidList(((op F : TyL -> Ty to F' [AtS]), MAPS))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = if AtS == none
473b81d33893192056dde74b26b2467f983c102cChristian Maeder then ('op F ': typeList2QidList(TyL) '-> Ty 'to F' '`,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder '\s maps2QidList(MAPS))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder else ('op F ': typeList2QidList(TyL) '-> Ty 'to F'
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder '`[ attrSet2QidList(AtS) '`] '`, '\s maps2QidList(MAPS))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder fi
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq maps2QidList((op F : TyL -> Ty to F' [AtS]))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = if AtS == none
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then ('op F ': typeList2QidList(TyL) '-> Ty 'to F')
473b81d33893192056dde74b26b2467f983c102cChristian Maeder else ('op F ': typeList2QidList(TyL) '-> Ty 'to F'
473b81d33893192056dde74b26b2467f983c102cChristian Maeder '`[ attrSet2QidList(AtS) '`])
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq maps2QidList(((sort S to S'), MAPS))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = ('sort S 'to S' '`, '\s maps2QidList(MAPS))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq maps2QidList((sort S to S')) = ('sort S 'to S') .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq maps2QidList(((label L to L'), MAPS))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = ('label L 'to L' '`, '\s maps2QidList(MAPS))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq maps2QidList((label L to L')) = ('label L 'to L') .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq maps2QidList(((msg F to F'), MAPS))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = ('msg F 'to F' '`, '\s maps2QidList(MAPS))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq maps2QidList((msg F to F')) = ('msg F 'to F') .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq maps2QidList(((msg F : TyL -> Ty to F'), MAPS))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = ('msg F ': typeList2QidList(TyL) '-> Ty 'to F' '`, '\s
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder maps2QidList(MAPS))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq maps2QidList((msg F : TyL -> Ty to F'))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = ('msg F ': typeList2QidList(TyL) '-> Ty 'to F') .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq maps2QidList(((class S to S'), MAPS))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = ('class S 'to S' '`, '\s maps2QidList(MAPS))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq maps2QidList((class S to S')) = ('class S 'to S') .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq maps2QidList(((attr QI . S to QI'), MAPS))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = ('attr S '. QI 'to QI' '`, '\s maps2QidList(MAPS))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq maps2QidList((attr QI . S to QI')) = ('attr S '. QI 'to QI') .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq maps2QidList(none) = nil .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq attrSet2QidList(none) = nil .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq attrSet2QidList((assoc AtS)) = ('assoc attrSet2QidList(AtS)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq attrSet2QidList((comm AtS)) = ('comm attrSet2QidList(AtS)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq attrSet2QidList((idem AtS)) = ('idem attrSet2QidList(AtS)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq attrSet2QidList((iter AtS)) = ('iter attrSet2QidList(AtS)) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq attrSet2QidList((id(T) AtS))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = ('id: termList2QidList(T) attrSet2QidList(AtS)) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq attrSet2QidList((right-id(T) AtS))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = ('right-id: termList2QidList(T) attrSet2QidList(AtS)) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq attrSet2QidList((left-id(T) AtS))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = ('left-id: termList2QidList(T) attrSet2QidList(AtS)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq attrSet2QidList((poly(NL) AtS))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = ('poly '`( intList2QidList(NL) '`) attrSet2QidList(AtS)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq attrSet2QidList((strat(NL) AtS))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = ('strat '`( intList2QidList(NL) '`) attrSet2QidList(AtS)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq attrSet2QidList((memo AtS)) = ('memo attrSet2QidList(AtS)) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq attrSet2QidList((prec(N) AtS))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = ('prec intList2QidList(N) attrSet2QidList(AtS)) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq attrSet2QidList((gather(QIL) AtS))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = ('gather QIL attrSet2QidList(AtS)) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq attrSet2QidList((format(QIL) AtS))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = ('format QIL attrSet2QidList(AtS)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq attrSet2QidList((ctor AtS)) = ('ctor attrSet2QidList(AtS)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq attrSet2QidList((frozen(NL) AtS))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = ('frozen '`( intList2QidList(NL) '`) attrSet2QidList(AtS)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq attrSet2QidList((config AtS)) = ('config attrSet2QidList(AtS)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq attrSet2QidList((object AtS)) = ('object attrSet2QidList(AtS)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq attrSet2QidList((msg AtS)) = ('msg attrSet2QidList(AtS)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq attrSet2QidList((special(HkL) AtS))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = ('special '`( hookList2QidList(HkL) '`) attrSet2QidList(AtS)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq attrSet2QidList((none).AttrSet) = nil .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq attrSet2QidList((metadata(St) AtS)) = (('metadata qid("\"" + St + "\"")) attrSet2QidList(AtS)) .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq attrSet2QidList((nonexec AtS)) = ('nonexec attrSet2QidList(AtS)) .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq attrSet2QidList((variant AtS)) = ('variant attrSet2QidList(AtS)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq hookList2QidList((id-hook(QI, QIL) HkL))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = ('id-hook QI '`, '`( QIL '`) hookList2QidList(HkL)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq hookList2QidList((op-hook(QI, QI', QIL, QI'') HkL))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = ('op-hook QI '`( QI' ': QIL '-> QI'' '`) hookList2QidList(HkL)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq hookList2QidList((term-hook(QI, T) HkL))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = ('term-hook '`( QI '`, termList2QidList(T) '`) hookList2QidList(HkL)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq termList2QidList(QI) = QI .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq termList2QidList(F[TL]) = (F '`( termList2QidList(TL) '`)) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ceq termList2QidList((T, TL))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = (termList2QidList(T) '`, termList2QidList(TL))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if TL =/= empty .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq intList2QidList((N NL)) = (qid(string(N, 10)) intList2QidList(NL)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq intList2QidList(nil) = nil .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq typeList2QidList(Ty TyL) = type2qid(Ty) typeList2QidList(TyL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq typeList2QidList(nil) = nil .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** Let us now give the equations for \texttt{setUpModExpDeps} on the
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** renaming module expression. Given a module expression of the form
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \verb~ME *< VMAPS >~ such that \texttt{ME} is in the database, we just need
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** to add \verb~ME *< VMAPS >~ to the set of names of the modules depending on
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** \texttt{ME}. In this way, if \texttt{ME} is redefined or removed from the
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** database, \verb~ME *< VMAPS >~ will be removed as well.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq setUpModExpDeps(ME * (VMAPS),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder db(< ME ; DT ; U ; U' ; M ; VDS ; MNS ; VES > MIS,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder MNS', VIS, VES', MNS'', MNS3, MNS4, QIL))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = db(< ME ; DT ; U ; U' ; M ; VDS ; MNS . ME * (VMAPS) ; VES > MIS,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder MNS', VIS, VES', MNS'', MNS3, MNS4, QIL) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq setUpModExpDeps(ME * (VMAPS),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder db(< ME ; DM ; U ; U' ; M ; VDS ; MNS ; VES > MIS,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder MNS', VIS, VES', MNS'', MNS3, MNS4, QIL))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = db(< ME ; DM ; U ; U' ; M ; VDS ; MNS . ME * (VMAPS) ; VES > MIS,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder MNS', VIS, VES', MNS'', MNS3, MNS4, QIL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq setUpModExpDeps(ME * (VMAPS), DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = warning(DB, '\r 'Error: '\o 'Module header2QidList(ME) 'not 'in 'database. '\n)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if not unitInDb(ME, DB) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** The definition of the \texttt{prepHeader} function on a renaming module
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** expression must take into account the possibility of having parameterized
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** sorts or parameterized class names in the maps of a renaming module
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** expression. The preparation of a renaming module expression must take
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** into account this fact and prepare accordingly all parameterized sorts and
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** classes appearing in it.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op prepare : RenamingSet Set{Tuple{ViewExp,ViewExp}} -> RenamingSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op prepare : TypeList Set{Tuple{ViewExp,ViewExp}} -> TypeList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq prepModExp(ME * (VMAPS), VEPS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = _*`(_`)(prepModExp(ME, VEPS), prepare(VMAPS, VEPS)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** For example, for sort maps the equation is as follows.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq prepare((sort S to S'), VEPS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (sort prepSort(S, VEPS) to prepSort(S', VEPS)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq prepare(((sort S to S'), VMAPS), VEPS)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = ((sort prepSort(S, VEPS) to prepSort(S', VEPS)),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder prepare(VMAPS, VEPS)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq prepare((class S to S'), VEPS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (class prepSort(S, VEPS) to prepSort(S', VEPS)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq prepare(((class S to S'), VMAPS), VEPS)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = ((class prepSort(S, VEPS) to prepSort(S', VEPS)),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder prepare(VMAPS, VEPS)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq prepare((attr QI . S to QI'), VEPS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (attr QI . prepSort(S, VEPS) to QI') .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq prepare(((attr QI . S to QI'), VMAPS), VEPS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = ((attr QI . prepSort(S, VEPS) to QI'), prepare(VMAPS, VEPS)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq prepare((op F to F' [AtS]), VEPS) = (op F to F' [AtS]) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq prepare(((op F to F' [AtS]), VMAPS), VEPS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = ((op F to F' [AtS]), prepare(VMAPS, VEPS)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq prepare((op F : TyL -> Ty to F' [AtS]), VEPS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (op F : prepare(TyL, VEPS) -> prepSort(Ty, VEPS) to F' [AtS]) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq prepare(((op F : TyL -> Ty to F' [AtS]), VMAPS), VEPS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (op F : prepare(TyL, VEPS) -> prepSort(Ty, VEPS) to F' [AtS],
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder prepare(VMAPS, VEPS)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq prepare((label L to L'), VEPS) = (label L to L') .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq prepare(((label L to L'), VMAPS), VEPS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = ((label L to L'), prepare(VMAPS, VEPS)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq prepare((msg F to F'), VEPS) = (msg F to F') .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq prepare(((msg F to F'), VMAPS), VEPS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = ((msg F to F'), prepare(VMAPS, VEPS)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq prepare((msg F : TyL -> Ty to F'), VEPS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (msg F : prepare(TyL, VEPS) -> prepSort(Ty, VEPS) to F') .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq prepare(((msg F : TyL -> Ty to F'), VMAPS), VEPS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = ((msg F : prepare(TyL, VEPS) -> prepSort(Ty, VEPS) to F'),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder prepare(VMAPS, VEPS)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq prepare((none).RenamingSet, VEPS) = none .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq prepare((Ty TyL), VEPS) = (prepSort(Ty, VEPS) prepare(TyL, VEPS)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq prepare(nil, VEPS) = nil .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq header2Qid(ME * (MAPS))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = qid(string(header2Qid(ME))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder + " * (" + string(qidList2Qid(maps2QidList(MAPS))) + ")")
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq header2QidList(ME * (MAPS))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = (if QI == '\s then QIL QI else QIL QI '\s fi
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder '* '\s '`( maps2QidList(MAPS) '`))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder if QIL QI := header2QidList(ME)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederendfm
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*******************************************************************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder***
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** The Union Module Expression
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder***
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** The syntax used for the union of module expressions is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** op _+_ : ModuleExpression ModuleExpression -> ModuleExpression
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** [assoc prec 42] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** Its evaluation consists in generating a unit importing the two module
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** expressions given as arguments~\cite{Winkler91,OBJ92}.
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** As we explained in Sections~\ref{instantiation} and~\ref{renaming} for the
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** cases of the instantiation and the renaming module expressions,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** respectively, the declaration of any new kind of module expression must
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** come together with the definition of the functions \texttt{evalModExp},
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \texttt{header2QidList}, and \texttt{setUpModExpDeps} on the new
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** module operator. As discussed in Sections~\ref{instantiation}
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** and~\ref{parsing-unit-declarations}, equations for the \texttt{prepHeader}
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** and \texttt{parseModExp} functions have to be given as well.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederfmod UNION-EXPR is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder inc MOD-EXPR .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr INST-EXPR-EVALUATION .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr RENAMING-EXPR-EVALUATION .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr EVALUATION .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars QI X : Qid .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var PDL : ParameterDeclList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars DB DB' DB'' : Database .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars T T' : Term .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars DT DT' : Default{Term} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var IL : ImportList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var VEPS : Set{Tuple{ViewExp,ViewExp}} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars ME ME' ME'' ME3 : ModuleExpression .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars PU PU' U U' U'' U3 DM DM' : Module .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars M M' M'' M3 : Module .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars MNS MNS' MNS'' MNS3 MNS4 MNS5 : Set{ModuleName} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars VES VES' VES'' : Set{ViewExp} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars PDS PDS' PDS'' : Set{ParameterDecl} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars MIS MIS' : Set{ModuleInfo} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var VIS : Set{ViewInfo} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars QIL QIL' : QidList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var VDS VDS' : OpDeclSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var B : Bool .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var MAPS : RenamingSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** As mentioned above, the evaluation of a union module expression consists
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** in the creation of a new unit, with such a module expression as name,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** which imports the two module expressions being united. Note, however,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** that the unit being created has to be of the right type. The new unit
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** will be generated having one type or another, depending on the types of
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** the arguments of the union module expression.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** The function \texttt{rightEmptyModule} generates an empty unit of the
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** lowest of the sorts of its two arguments. In case of having a nonstructured
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** module as argument, the corresponding structured one is considered. If one
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** of the two module expressions corresponds to a theory, then a theory is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** generated, and the lowest sort is taken between the sort of such a theory
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** and the \texttt{Module} sort immediately above the sort of the other unit;
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** that is, sorts \texttt{FModule}, \texttt{SModule}, or \texttt{OModule} are
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** considered to do the comparison.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- ceq evalModExpAux(ME + ME', PDL, DB)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder---- = if unitInDb(ME'' + ME3, DB'') or-else not (unitInDb(ME'', DB'') and-then unitInDb(ME3, DB''))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- then < DB'' ; ME'' + ME3 >
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- else < evalModule(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- addImports(including ME'' . including ME3 .,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- setName(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- rightEmptyModule(
473b81d33893192056dde74b26b2467f983c102cChristian Maeder---- getTopModule(ME'', DB''),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- getTopModule(ME3, DB'')),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder---- ME'' + ME3)),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- none,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- DB'') ;
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- ME'' + ME3 >
473b81d33893192056dde74b26b2467f983c102cChristian Maeder---- fi
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- if < DB' ; ME3 > := evalModExpAux(ME', PDL, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- /\ < DB'' ; ME'' > := evalModExpAux(ME, PDL, DB') .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq evalModExp(ME + ME', PDL, DB)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = if unitInDb(ME'', DB') or-else not summandsInDB(ME'', DB')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then < DB' ; ME'' >
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else < evalModule(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder addImports(unfoldSummands(ME''),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder setName(rightEmptyModule(ME'', DB'), ME'')),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder none,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder DB')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ; ME'' >
473b81d33893192056dde74b26b2467f983c102cChristian Maeder fi
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if < DB' ; ME'' > := evalModExp+(ME + ME', PDL, DB) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op summandsInDB : ModuleExpression Database -> Bool .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq summandsInDB(ME + ME', DB)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = summandsInDB(ME, DB) and-then summandsInDB(ME', DB) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq summandsInDB(ME, DB) = unitInDb(ME, DB) [owise] .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op unfoldSummands : ModuleExpression -> ImportList .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq unfoldSummands(ME + ME') = unfoldSummands(ME) unfoldSummands(ME') .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq unfoldSummands(ME) = (including ME .) [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op rightEmptyModule : ModuleExpression Database -> Module .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq rightEmptyModule(ME, DB) = emptyModule(kindOfModule(ME, DB)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op evalModExp+ : ModuleExpression ParameterDeclList Database -> Tuple{Database, ModuleExpression} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq evalModExp+(ME + ME', PDL, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = < database(evalModExp+(ME', PDL, database(evalModExp+(ME, PDL, DB))))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ; modExp(evalModExp+(ME', PDL, database(evalModExp+(ME, PDL, DB))))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder + modExp(evalModExp+(ME, PDL, DB)) > .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq evalModExp+(ME, PDL, DB) = evalModExp(ME, PDL, DB) [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op kindOfModule : ModuleExpression Database -> Qid .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq kindOfModule(ME + ME', DB) = greaterLowest(kindOfModule(ME, DB), kindOfModule(ME', DB)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq kindOfModule(ME, DB) = kindOfModule(getTopModule(ME, DB)) [owise] .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op kindOfModule : Module -> Qid .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq kindOfModule(U:OModule)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if U:OModule :: FModule
473b81d33893192056dde74b26b2467f983c102cChristian Maeder then 'fmod
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else if U:OModule :: SModule
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then 'mod
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else 'omod
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq kindOfModule(U:OTheory)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if U:OTheory :: FTheory
473b81d33893192056dde74b26b2467f983c102cChristian Maeder then 'fmod
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else if U:OTheory :: STheory
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then 'mod
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else 'omod
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq kindOfModule(unitError(QIL)) = qidError(QIL) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op greaterLowest : Qid Qid ~> Qid [comm] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq greaterLowest('fmod, 'fmod) = 'fmod .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq greaterLowest('fmod, 'fth) = 'fth .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq greaterLowest('fth, 'fth) = 'fth .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq greaterLowest('mod, 'fmod) = 'mod .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq greaterLowest('mod, 'mod) = 'mod .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq greaterLowest('mod, 'fth) = 'th .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq greaterLowest('fmod, 'th) = 'th .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq greaterLowest('mod, 'th) = 'th .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq greaterLowest('th, 'th) = 'th .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq greaterLowest('omod, 'fmod) = 'omod .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq greaterLowest('omod, 'mod) = 'omod .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq greaterLowest('omod, 'omod) = 'omod .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq greaterLowest('omod, 'fth) = 'oth .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq greaterLowest('omod, 'th) = 'oth .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq greaterLowest('omod, 'oth) = 'oth .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq greaterLowest('fmod, 'oth) = 'oth .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq greaterLowest('mod, 'oth) = 'oth .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq greaterLowest('oth, 'th) = 'oth .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq greaterLowest('oth, 'fth) = 'oth .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq greaterLowest('oth, 'oth) = 'oth .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op emptyModule : Qid ~> Module .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq emptyModule('fmod) = emptyFModule .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq emptyModule('fth) = emptyFTheory .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq emptyModule('mod) = emptySModule .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq emptyModule('th) = emptySTheory .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq emptyModule('omod) = emptyOModule .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq emptyModule('oth) = emptyOTheory .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- op rightEmptyModule : Module Module -> Module [comm] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder----
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- eq rightEmptyModule(U1:FModule, U2:FModule) = emptyFModule .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- eq rightEmptyModule(U1:FModule, U2:FTheory) = emptyFTheory .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- eq rightEmptyModule(U1:FTheory, U2:FModule) = emptyFTheory .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- eq rightEmptyModule(U1:FTheory, U2:FTheory) = emptyFTheory .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- ceq rightEmptyModule(U1:SModule, U2:SModule) = emptySModule if not U1:SModule :: FModule or not U2:SModule :: FModule .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- ceq rightEmptyModule(U1:STheory, U2:SModule) = emptySTheory if not U1:STheory :: FTheory or not U2:SModule :: FModule .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- ceq rightEmptyModule(U1:SModule, U2:STheory) = emptySTheory if not U1:SModule :: FModule or not U2:STheory :: FTheory .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- ceq rightEmptyModule(U1:STheory, U2:STheory) = emptySTheory if not U1:STheory :: FTheory or not U2:STheory :: FTheory .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- ceq rightEmptyModule(U1:OModule, U2:OModule) = emptyOModule if not U1:OModule :: SModule or not U2:OModule :: SModule .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- ceq rightEmptyModule(U1:OTheory, U2:OModule) = emptyOTheory if not U1:OTheory :: STheory or not U2:OModule :: SModule .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- ceq rightEmptyModule(U1:OModule, U2:OTheory) = emptyOTheory if not U1:OModule :: SModule or not U2:OTheory :: STheory .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- ceq rightEmptyModule(U1:OTheory, U2:OTheory) = emptyOTheory if not U1:OTheory :: STheory or not U2:OTheory :: STheory .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- eq rightEmptyModule(unitError(QIL), U) = unitError(QIL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- eq rightEmptyModule(U, unitError(QIL)) = unitError(QIL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- eq rightEmptyModule(unitError(QIL), unitError(QIL')) = unitError(QIL QIL') .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** As pointed out in Section~\ref{module-names}, for each new module
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** expression operator being introduced, we need to add equations for the
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \texttt{header2Qid} function. For the union module expression we only
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** need the following equation:
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq header2Qid(ME + ME')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = qidList2Qid(header2QidList(ME) '+ header2QidList(ME')) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq header2Qid(_*`(_`)(ME + ME', MAPS))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = qid("(" + string(header2Qid(ME + ME')) + ")"
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder + " * (" + string(qidList2Qid(maps2QidList(MAPS))) + ")") .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq header2QidList(ME + ME')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (header2QidList(ME) '+ header2QidList(ME')) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq header2QidList(_*`(_`)(ME + ME', MAPS))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = (if QI == '\s then '`( QIL '`) QI else '`( QIL QI '`) '\s fi
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder '* '\s '`( maps2QidList(MAPS) '`))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if QIL QI := header2QidList(ME + ME') .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** Given a module
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** expression of the form \verb~ME + ME'~ such that \texttt{ME} and
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \texttt{ME'} are in the database, we need to add \verb~ME + ME'~ to
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** the set of names of the modules depending on \texttt{ME} and \texttt{ME'}.
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** In this way, if \texttt{ME} or \texttt{ME'} are redefined or removed from
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** the database, \verb~ME + ME'~ will be removed as well.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op setUpModExpDepsAux : ModuleExpression ModuleExpression Database -> Database .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq setUpModExpDeps(ME + ME', DB) = setUpModExpDepsAux(ME + ME', ME + ME', DB) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq setUpModExpDepsAux(ME, ME' + ME'', DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = setUpModExpDepsAux(ME, ME', setUpModExpDepsAux(ME, ME'', DB)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq setUpModExpDepsAux(ME, ME',
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder db(< ME' ; DT ; U ; U' ; M ; VDS ; MNS ; VES > MIS, MNS'', VIS, VES'', MNS3, MNS4, MNS5, QIL))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = db(< ME' ; DT ; U ; U' ; M ; VDS ; MNS . ME ; VES > MIS, MNS'', VIS, VES'', MNS3, MNS4, MNS5, QIL)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq setUpModExpDepsAux(ME, ME',
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder db(< ME' ; DM ; U ; U' ; M ; VDS ; MNS ; VES > MIS, MNS'', VIS, VES'', MNS3, MNS4, MNS5, QIL))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = db(< ME' ; DM ; U ; U' ; M ; VDS ; MNS . ME ; VES > MIS, MNS'', VIS, VES'', MNS3, MNS4, MNS5, QIL)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder---( eq setUpModExpDeps((ME + ME'),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder db((< ME ; DT ; U ; U' ; M ; VDS ; MNS ; VES >
473b81d33893192056dde74b26b2467f983c102cChristian Maeder < ME' ; DT' ; U'' ; U3 ; M' ; VDS' ; MNS' ; VES' > MIS),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder MNS'', VIS, VES'', MNS3, MNS4, MNS5, QIL))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = db((< ME ; DT ; U ; U' ; M ; VDS ; MNS . (ME + ME') ; VES >
473b81d33893192056dde74b26b2467f983c102cChristian Maeder < ME' ; DT' ; U'' ; U3 ; M' ; VDS' ; MNS' . (ME + ME') ; VES' >
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder MIS),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder MNS'', VIS, VES'', MNS3, MNS4, MNS5, QIL) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq setUpModExpDeps((ME + ME'),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder db((< ME ; DT ; U ; U' ; M ; VDS ; MNS ; VES >
473b81d33893192056dde74b26b2467f983c102cChristian Maeder < ME' ; DM ; U'' ; U3 ; M' ; VDS' ; MNS' ; VES' > MIS),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder MNS'', VIS, VES'', MNS3, MNS4, MNS5, QIL))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = db((< ME ; DT ; U ; U' ; M ; VDS ; MNS . (ME + ME') ; VES >
473b81d33893192056dde74b26b2467f983c102cChristian Maeder < ME' ; DM ; U'' ; U3 ; M' ; VDS' ; MNS' . (ME + ME') ; VES' >
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder MIS),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder MNS'', VIS, VES'', MNS3, MNS4, MNS5, QIL) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq setUpModExpDeps((ME + ME'),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder db((< ME ; DM ; U ; U' ; M ; VDS ; MNS ; VES >
473b81d33893192056dde74b26b2467f983c102cChristian Maeder < ME' ; DT ; U'' ; U3 ; M' ; VDS' ; MNS' ; VES' > MIS),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder MNS'', VIS, VES'', MNS3, MNS4, MNS5, QIL))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = db((< ME ; DM ; U ; U' ; M ; VDS ; MNS . (ME + ME') ; VES >
473b81d33893192056dde74b26b2467f983c102cChristian Maeder < ME' ; DT ; U'' ; U3 ; M' ; VDS' ; MNS' . (ME + ME') ; VES' >
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder MIS),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder MNS'', VIS, VES'', MNS3, MNS4, MNS5, QIL) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq setUpModExpDeps((ME + ME'),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder db((< ME ; DM ; U ; U' ; M ; VDS ; MNS ; VES >
473b81d33893192056dde74b26b2467f983c102cChristian Maeder < ME' ; DM' ; U'' ; U3 ; M' ; VDS' ; MNS' ; VES' > MIS),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder MNS'', VIS, VES'', MNS3, MNS4, MNS5, QIL))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = db((< ME ; DM ; U ; U' ; M ; VDS ; MNS . (ME + ME') ; VES >
473b81d33893192056dde74b26b2467f983c102cChristian Maeder < ME' ; DM' ; U'' ; U3 ; M' ; VDS' ; MNS' . (ME + ME') ; VES' >
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder MIS),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder MNS'', VIS, VES'', MNS3, MNS4, MNS5, QIL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq setUpModExpDeps((ME + ME'), DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = warning(DB, ('\r 'Error: '\o 'Module header2QidList(ME) 'not 'in 'database. '\n))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if not unitInDb(ME, DB) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq setUpModExpDeps((ME + ME'), DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = warning(DB, ('\r 'Error: '\o 'Module header2QidList(ME') 'not 'in 'database. '\n))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if not unitInDb(ME', DB) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** The \texttt{prepHeader} function on a union module expression makes
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** recursive calls with each of the module expressions given as arguments.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq prepModExp(ME + ME', VEPS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = prepModExp(ME, VEPS) + prepModExp(ME', VEPS) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** Finally, the equation for the \texttt{parseModExp} function is as follows:
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq labelInModExp(X, ME + ME')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = labelInModExp(X, ME) or-else labelInModExp(X, ME') .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederendfm
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*******************************************************************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder***
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** The $n$-tuple Module Expression
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder***
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** The syntax used for the $n$-tuple module expression is as follows:
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** op TUPLE[_] : Token -> ModuleExpression .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** Its evaluation consists in the generation of a parameterized functional
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** module with the number of \texttt{TRIV} parameters specified by the
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** argument. A sort for tuples of such size, and the corresponding constructor
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** and selector operators, are also defined. Note that the \texttt{TRIV}
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** theory is predefined in Full Maude (see Sections~\ref{main-module}
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** and~\ref{non-built-in-predefined}). For example, the module expression
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \verb~TUPLE[3]~ produces the following module.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** fmod TUPLE[3][C1 :: TRIV, C2 :: TRIV, C3 :: TRIV] is
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** sorts 3Tuple .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** op (_,_,_) : Elt.C1 Elt.C2 Elt.C3 -> 3Tuple .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** op p1_ : 3Tuple -> Elt.C1 .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** op p2_ : 3Tuple -> Elt.C2 .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** op p3_ : 3Tuple -> Elt.C3 .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** var E1 : Elt.C1 .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** var E2 : Elt.C2 .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** var E3 : Elt.C3 .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** eq p1(E1, E2, E3) = E1 .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** eq p2(E1, E2, E3) = E2 .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** eq p3(E1, E2, E3) = E3 .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** endfm
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** Even though the $n$-tuple module expression is in principle of a completely
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** different nature, the way of handling it is the same as the way of handling
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** any other module expression. Its evaluation produces a new unit, a
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** parameterized functional module in this case, wtupleParList(N)ith the module expression as
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** name. New equations defining the semantics of functions
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** \texttt{evalModExp}, \texttt{header2QidList},
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** \texttt{setUpModExpDeps}, \texttt{prepHeader}, and
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \texttt{parseModExp} are given for this module expression.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederfmod N-TUPLE-EXPR is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder inc MOD-EXPR .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr INST-EXPR-EVALUATION .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr EVALUATION .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars N N' : NzNat .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var PDL : ParameterDeclList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var DB : Database .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var T : Term .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var IL : ImportList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var VEPS : Set{Tuple{ViewExp,ViewExp}} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var X : Qid .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var S : Sort .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** The equation for the \texttt{evalModExp} is reduced to the creation of a
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** module as indicated above. Some auxiliary functions are defined in order
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** to generate the different declarations in the module.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op tupleParList : NzNat -> ParameterDeclList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op tupleImportList : NzNat -> ImportList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op createCopyPars : NzNat Database -> Database .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op tupleOps : NzNat -> OpDeclSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op tupleOpsCtor : NzNat -> OpDecl .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op tupleOpsCtorName : NzNat -> String .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op tupleOpsCtorArity : NzNat -> QidList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op tupleOpsSelectors : NzNat NzNat -> OpDeclSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op tupleEqSet : NzNat -> EquationSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op tupleEqSetAux : NzNat Term -> EquationSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op tupleTermArgs : NzNat -> TermList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ops tupleSort tupleSortAux : NzNat -> Sort .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq evalModExp(TUPLE[N], PDL, DB)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = if unitInDb(TUPLE[N], DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then < DB ; TUPLE[N] >
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else < evalModule(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fmod TUPLE[N]{tupleParList(N)} is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder nil ---- tupleImportList(N)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder sorts tupleSort(N) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder none
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder tupleOps(N)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder none
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder tupleEqSet(N)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder endfm,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder none,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder createCopyPars(N, DB)) ;
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder TUPLE[N] >
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq createCopyPars(N, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if N == 1
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then createCopy((qid("C" + string(N, 10)) :: 'TRIV), DB)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder else createCopyPars(_-_(N, 1),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder createCopy((qid("C" + string(N, 10)) :: 'TRIV), DB))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq tupleParList(N)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if N == 1
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then (qid("C" + string(N, 10)) :: 'TRIV)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else (tupleParList(_-_(N, 1)), (qid("C" + string(N, 10)) :: 'TRIV))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq tupleImportList(N)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if N == 1
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then (including pd(qid("C" + string(N, 10)) :: 'TRIV) .)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder else (tupleImportList(_-_(N, 1))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder (including pd(qid("C" + string(N, 10)) :: 'TRIV) .))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq tupleSort(N) = makeSort('Tuple, tupleSortAux(N)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq tupleSortAux(N)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if N == 1
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then qid("C" + string(N, 10))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else (tupleSortAux(_-_(N, 1)), qid("C" + string(N, 10)))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq tupleOps(N)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (tupleOpsCtor(N) tupleOpsSelectors(N, N)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq tupleOpsCtor(N)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = (op qid("(" + tupleOpsCtorName(N) + ")") :
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder tupleOpsCtorArity(N) -> tupleSort(N) [none] .) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq tupleOpsCtorName(N)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if N == 1
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then "_"
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else "_," + tupleOpsCtorName(_-_(N, 1))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq tupleOpsCtorArity(N)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if N == 1
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then qid("C" + string(N, 10) + "$Elt")
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else tupleOpsCtorArity(_-_(N, 1)) qid("C" + string(N, 10) + "$Elt")
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq tupleOpsSelectors(N, N')
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = if N == 1
473b81d33893192056dde74b26b2467f983c102cChristian Maeder then (op qid("p" + string(N, 10) + "_") :
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder tupleSort(N') -> qid("C" + string(N, 10) + "$Elt") [none] .)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else (tupleOpsSelectors(_-_(N, 1), N')
473b81d33893192056dde74b26b2467f983c102cChristian Maeder (op qid("p" + string(N, 10) + "_") :
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder tupleSort(N') -> qid("C" + string(N, 10) + "$Elt") [none] .))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq tupleEqSet(N)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = tupleEqSetAux(N,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder (qid("(" + tupleOpsCtorName(N) + ")") [ tupleTermArgs(N) ])) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq tupleTermArgs(N)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = if N == 1
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then qid("V" + string(N, 10) + ":C" + string(N, 10) + "$Elt")
473b81d33893192056dde74b26b2467f983c102cChristian Maeder else (tupleTermArgs(_-_(N, 1)),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder qid("V" + string(N, 10) + ":C" + string(N, 10) + "$Elt"))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq tupleEqSetAux(N, T)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = if N == 1
473b81d33893192056dde74b26b2467f983c102cChristian Maeder then (eq qid("p" + string(N, 10) + "_")[T]
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = qid("V" + string(N, 10) + ":C" + string(N, 10) + "$Elt")
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [none] .)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder else (tupleEqSetAux(_-_(N, 1), T)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder (eq qid("p" + string(N, 10) + "_")[T]
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = qid("V" + string(N, 10) + ":C" + string(N, 10) + "$Elt")
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [none] .))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** The equations for the \texttt{header2QidList},
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** \texttt{parseModExp}, \texttt{prepHeader}, and
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \texttt{setUpModExpDeps} functions on the $n$-tuple module
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** expression are as follows:
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq header2Qid(TUPLE[N]) = qid("TUPLE[" + string(N, 10) + "]") .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq header2QidList(TUPLE[N]) = ('TUPLE '`[ qid(string(N, 10)) '`]) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq prepModExp(TUPLE[N], VEPS) = TUPLE[N] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq setUpModExpDeps(TUPLE[N], DB) = DB .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederendfm
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederfmod N-POWER-EXPR is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder inc MOD-EXPR .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr INST-EXPR-EVALUATION .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr EVALUATION .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars N N' : NzNat .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var PDL : ParameterDeclList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var DB : Database .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var T : Term .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var IL : ImportList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var VEPS : Set{Tuple{ViewExp,ViewExp}} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var X : Qid .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var S : Sort .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** As for TUPLE, the equation for the \texttt{evalModExp} is reduced to the
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** creation of a new module. A module expression POWER[n]{Nat} produces a
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** module
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder***
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** fmod POWER[n]{X :: TRIV} is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** inc TUPLE[n]{X, X, ..., X} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** endfm
473b81d33893192056dde74b26b2467f983c102cChristian Maeder***
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** which is then instantiated by the Nat view.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** Some auxiliary functions are defined in order
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** to generate the different declarations in the module.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op powImportList : NzNat -> ImportList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op powTupleImportation : NzNat -> ViewExp .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq evalModExp(POWER[N], PDL, DB)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = if unitInDb(POWER[N], DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then < DB ; POWER[N] >
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else < evalModule(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fmod POWER[N]{'X :: 'TRIV} is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder powImportList(N)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder sorts none .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder none
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder none
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder none
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder none
473b81d33893192056dde74b26b2467f983c102cChristian Maeder endfm,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder none,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder createCopy('X :: 'TRIV, DB)) ;
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder POWER[N] >
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq powImportList(N)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (including TUPLE[N]{powTupleImportation(N)} .) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq powTupleImportation(N)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if N == 1
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then 'X
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else ('X, powTupleImportation(sd(N, 1)))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** The equations for the \texttt{header2QidList},
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** \texttt{parseModExp}, \texttt{prepHeader}, and
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \texttt{setUpModExpDeps} functions on the $n$-tuple module
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** expression are as follows:
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq header2Qid(POWER[N]) = qid("POWER[" + string(N, 10) + "]") .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq header2QidList(POWER[N]) = ('POWER '`[ qid(string(N, 10)) '`]) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq prepModExp(POWER[N], VEPS) = POWER[N] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq setUpModExpDeps(POWER[N], DB) = DB .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederendfm
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*******************************************************************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder***
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** 8 Input/Output Processing
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder***
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** In this section we discuss how the preterm resulting from the call to the
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** function \texttt{metaParse} with the input and the top-level signature of
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** Full Maude is transformed into a term of sort \texttt{Module}, representing
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** a preunit or a term of sort \texttt{PreView}. In the case of commands,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** they are evaluated giving the corresponding results in the appropriate
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** form.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder***
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** 8.1 Input Parsing
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder***
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** Let us recall here the example presented in Section~\ref{bubbles}. Calling
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \texttt{metaParse} with the module \texttt{NAT3} given there and the
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** signature of Full Maude presented in Section~\ref{sec:signature}, we
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** obtain the following term.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** 'fmod_is_endfm[
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** 'token[{''NAT3}'Qid],
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** '__['sort_.['token[{''Nat3}'Qid]],
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** '__['op_:_->_.['token[{''s_}'Qid],
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** 'neTokenList[{''Nat3}'Qid],
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** 'token[{''Nat3}'Qid]],
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** '__['op_:`->_.['token[{''0}'Qid],
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** 'token[{''Nat3}'Qid]],
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** 'eq_=_.['bubble['__[{''s}'Qid, {''s}'Qid,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** {''s}'Qid, {''0}'Qid]],
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** 'bubble[{''0}'Qid]]]]]]
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** Given each one of the subterms representing declarations in terms
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** representing modules as the previous one, the function \texttt{parseDecl}
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** generates the corresponding declaration, with no bubbles in it, and the
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** corresponding predeclaration, with the bubbles appearing in the term. For
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** example, for the term
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder***
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** 'op_:_->_.['token[{''s_}'Qid],
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** 'neTokenList[{''Nat3}'Qid],
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** 'token[{''Nat3}'Qid]]
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder***
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** the following operator declaration is generated:
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder***
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** op 's_ : 'Nat3 -> 'Nat3 [none] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder***
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** Note that in this case, since the operator is declared without identity
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** element (the only place a bubble might appear), the declaration and the
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** predeclaration generated by \texttt{parseDecl} coincide.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** In the following sections we shall see how this approach is followed for
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** declarations appearing in units and in views.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder***
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** 8.1.1 Parsing of Module Declarations
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder***
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** The \texttt{parseDecl} function takes a term (which corresponds to a
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** declaration to be parsed), a preunit (to which the parsed declaration with
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** its bubbles in it will be added), and a unit (to which the parsed
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** declaration without bubbles will be added to build up the signature). For
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** example, a term corresponding to an unconditional equation, that is, a term
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** of the form \verb~'eq_=_.[T, T']~ will be added to the set of equations of
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** the preunit as \verb~eq T = T' .~, but nothing will be added to the unit.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** Note that according to the signature used in the call to
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \texttt{metaParse} (see Sections~\ref{sec:signature}
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** and~\ref{main-module}), \texttt{T} and \texttt{T'} are bubbles.
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** Declarations of sorts, subsort relations, operators, classes, subclass
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** relations, messages, and variables will be added to both of them. In the
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** case of operator declarations, identity element attributes, which in
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** general can be terms, are not included in the added declaration.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** As in Core Maude, declarations in a module can be given in any order, and
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** therefore we follow a two-step approach consisting in first building the
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** signature to parse the bubbles, and then generating the unit without
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** bubbles in it. It could be different for other languages. For example, in
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** some languages we may be able to assume that each operator and sort has
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** been defined before being used, allowing then an incremental processing of
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** the input.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- fmod MAYBE{X :: TRIV} is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- sort Maybe{X} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- subsort X$Elt < Maybe{X} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- op maybe : -> Maybe{X} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- endfm
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederfmod UNIT-DECL-PARSING is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr DATABASE .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr MOVE-DOWN .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr INST-EXPR-EVALUATION .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr RENAMING-EXPR-EVALUATION .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr UNION-EXPR .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr N-TUPLE-EXPR .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr N-POWER-EXPR .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr DEFAULT-VALUE{Term} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr META-FULL-MAUDE-SIGN .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr UNIT-BUBBLE-PARSING .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars PU U : Module .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars T T' T'' T''' T3 T4 : Term .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars QI QI' QI'' L F : Qid .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars QIL QIL' : QidList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars S S' : Sort .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars SS SS' : TypeSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars TyL TyL' : TypeList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var TSL : TypeSetList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var AtS : AttrSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars TL TL' TL'' : TermList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var Ct : Constant .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var VDS : OpDeclSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars Ty Tp : Type .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var N : Nat .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var DT : Default{Term} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** Similarly, auxiliary functions parsing other elements in units
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** are defined.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op parsePreAttrs : Term Nat -> AttrSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op parsePreHookList : Term -> HookList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op parseVars : QidList [Type] -> OpDeclSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op parseSubsortRel : Term -> TypeListSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op parseAttrDeclList : Term -> AttrDeclSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op unfoldOpDecl : QidList TypeList Sort AttrSet -> OpDeclSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op unfoldMultipleMsgDecl : QidList TypeList Sort -> MsgDeclSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op unfoldSubsortRel : TypeSetList ~> SubsortDeclSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op unfoldSubclassRel : TypeSetList ~> SubclassDeclSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq parseSubsortRel('_<_[T, T'])
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = _l_(parseSortSet(T), parseSubsortRel(T')) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parseSubsortRel('__[T, T']) = parseSortSet('__[T, T']) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parseSubsortRel('sortToken[T]) = downQid(T) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq parseSubsortRel('_`{_`}['sortToken[T], T'])
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = makeSort(downQid(T), parseParameterList(T')) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parseSubsortRel('_`{_`}['_`{_`}[T, T'], T''])
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = makeSort(parseSubsortRel('_`{_`}[T, T']), parseParameterList(T'')) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq unfoldOpDecl((QI QIL), TyL, Ty, AtS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = ((op QI : TyL -> Ty [AtS] .) unfoldOpDecl(QIL, TyL, Ty, AtS)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq unfoldOpDecl(nil, TyL, Ty, AtS) = none .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq unfoldMultipleMsgDecl((QI QIL), TyL, Ty)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = ((msg QI : TyL -> Ty .) unfoldMultipleMsgDecl(QIL, TyL, Ty)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq unfoldMultipleMsgDecl(nil, TyL, Ty) = none .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq unfoldSubsortRel(_l_((S ; SS), (S' ; SS'), TSL))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = ((subsort S < S' .)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder unfoldSubsortRel(_l_(S, SS'))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder unfoldSubsortRel(_l_(SS, (S' ; SS')))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder unfoldSubsortRel(_l_((S' ; SS'), TSL))) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq unfoldSubsortRel(_l_(SS, none)) = none .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq unfoldSubsortRel(_l_(none, SS)) = none .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq unfoldSubsortRel(SS) = none .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq unfoldSubsortRel(qidError(QIL)) = subsortDeclError(QIL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq unfoldSubclassRel(_l_((S ; SS), (S' ; SS'), TSL))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = ((subclass S < S' .)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder unfoldSubclassRel(_l_(S, SS'))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder unfoldSubclassRel(_l_(SS, (S' ; SS')))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder unfoldSubclassRel(_l_((S' ; SS'), TSL))) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq unfoldSubclassRel(_l_(SS, none)) = none .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq unfoldSubclassRel(_l_(none, SS)) = none .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq unfoldSubclassRel(SS) = none .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq unfoldSubclassRel(qidError(QIL)) = subclassDeclError(QIL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq parseVars((QI QIL), Tp)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = ((op QI : nil -> Tp [none] .) parseVars(QIL, Tp)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parseVars(nil, Tp) = none .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parseVars(QIL, qidError(QIL')) = opDeclError(QIL') .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq parsePreAttrs('__[T, T'], N)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (parsePreAttrs(T, N) parsePreAttrs(T', N)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parsePreAttrs('assoc.@Attr@, N) = assoc .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parsePreAttrs('associative.@Attr@, N) = assoc .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parsePreAttrs('comm.@Attr@, N) = comm .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parsePreAttrs('commutative.@Attr@, N) = comm .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parsePreAttrs('idem.@Attr@, N) = idem .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parsePreAttrs('idempotent.@Attr@, N) = idem .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parsePreAttrs('id:_[T], N) = id(T) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parsePreAttrs('identity:_[T], N) = id(T) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parsePreAttrs('left`id:_[T], N) = left-id(T) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parsePreAttrs('left`identity:_[T], N) = left-id(T) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parsePreAttrs('right`id:_[T], N) = right-id(T) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parsePreAttrs('right`identity:_[T], N) = right-id(T) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parsePreAttrs('poly`(_`)[T], N) = poly(parseInt(T)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parsePreAttrs('strat`(_`)[T], N) = strat(parseInt(T)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parsePreAttrs('strategy`(_`)[T], N) = strat(parseInt(T)) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq parsePreAttrs('frozen.@Attr@, N)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = if N == 0
473b81d33893192056dde74b26b2467f983c102cChristian Maeder then none
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else frozen(from 1 to N list)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parsePreAttrs('frozen`(_`)[T], N) = frozen(parseInt(T)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parsePreAttrs('memo.@Attr@, N) = memo .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parsePreAttrs('memoization.@Attr@, N) = memo .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parsePreAttrs('ctor.@Attr@, N) = ctor .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parsePreAttrs('constructor.@Attr@, N) = ctor .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parsePreAttrs('prec_['token[T]], N) = prec(parseNat(T)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parsePreAttrs('gather`(_`)['neTokenList[T]], N) = gather(downQidList(T)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parsePreAttrs('special`(_`)[T], N) = special(parsePreHookList(T)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parsePreAttrs('format`(_`)['neTokenList[T]], N) = format(downQidList(T)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parsePreAttrs('iter.@Attr@, N) = iter .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parsePreAttrs('ditto.@Attr@, N) = ditto .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parsePreAttrs('config.@Attr@, N) = config .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parsePreAttrs('object.@Attr@, N) = object .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parsePreAttrs('msg.@Attr@, N) = msg .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parsePreAttrs('message.@Attr@, N) = msg .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parsePreAttrs('metadata_['token[T]], N) = metadata(downString(downQid(T))) .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq parsePreAttrs('nonexec.@Attr@, N) = nonexec .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq parsePreAttrs('variant.@Attr@, N) = variant .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parsePreHookList('__[T, TL]) = parsePreHookList(T) parsePreHookList(TL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parsePreHookList('id-hook_['token[T]]) = id-hook(downQid(T), nil) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parsePreHookList('id-hook_`(_`)['token[T], 'neTokenList[T']])
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = id-hook(downQid(T), downQidList(T')) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parsePreHookList(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder 'op-hook_`(_:_->_`)[
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder 'token[T], 'token[T'], 'neTokenList[T''], 'token[T3]])
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = op-hook(downQid(T), downQid(T'), downTypes(T''), downQid(T3)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parsePreHookList('op-hook_`(_:`->_`)['token[T], 'token[T'], 'token[T'']])
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = op-hook(downQid(T), downQid(T'), nil, downQid(T'')) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parsePreHookList(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder 'op-hook_`(_:_~>_`)[
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder 'token[T], 'token[T'], 'neTokenList[T''], 'token[T3]])
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = op-hook(downQid(T), downQid(T'), downTypes(T''), downQid(T3)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parsePreHookList('op-hook_`(_:`~>_`)['token[T], 'token[T'], 'token[T'']])
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = op-hook(downQid(T), downQid(T'), nil, downQid(T'')) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq parsePreHookList('term-hook_`(_`)['token[T], T'])
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = term-hook(downQid(T), T') .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq parseAttrDeclList('_`,_[T, T'])
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (parseAttrDeclList(T), parseAttrDeclList(T')) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq parseAttrDeclList('_:_['token[T], T'])
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (attr downQid(T) : parseType(T')) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** Given a term representing a declaration or a predeclaration, the function
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \texttt{parseDecl} must generate and update both the unit and the preunit
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** that it takes as arguments. Note that in the case of rules, for example,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** only a prerule is generated.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** Since the preunit and the unit may be modified, they have to be returned as
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** a pair, which will be used to extract the corresponding arguments for the
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** following calls. Note that the \texttt{parseDecl} functions are in fact
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** partial functions. Each parsing function assumes that it is possible to
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** parse the given term.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder sort ParseDeclResult .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op <_;_;_> : Module Module OpDeclSet -> ParseDeclResult .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op preModule : ParseDeclResult -> Module .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op unit : ParseDeclResult -> Module .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op vars : ParseDeclResult -> OpDeclSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq preModule(< PU ; U ; VDS >) = PU .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq preModule(< unitError(QIL) ; V:[Module] ; V:[OpDeclSet] >) = unitError(QIL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq preModule(< V:[Module] ; unitError(QIL) ; V:[OpDeclSet] >) = unitError(QIL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq preModule(< V:[Module] ; V':[Module] ; opDeclError(QIL) >) = unitError(QIL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq unit(< PU ; U ; VDS >) = U .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq unit(< unitError(QIL) ; V':[Module] ; V:[OpDeclSet] >) = unitError(QIL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq unit(< V:[Module] ; unitError(QIL) ; V:[OpDeclSet] >) = unitError(QIL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq unit(< V:[Module] ; V':[Module] ; opDeclError(QIL) >) = unitError(QIL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq vars(< PU ; U ; VDS >) = VDS .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq vars(< unitError(QIL) ; V:[Module] ; V:[OpDeclSet] >) = opDeclError(QIL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq vars(< V:[Module] ; unitError(QIL) ; V:[OpDeclSet] >) = opDeclError(QIL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq vars(< V:[Module] ; V':[Module] ; opDeclError(QIL) >) = opDeclError(QIL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op parseDecl : Term Module Module OpDeclSet -> ParseDeclResult .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** changed 03/27/02
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** In the case of importation declarations, since internally only the
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** \texttt{including} mode is handled, all importations are generated in
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** this mode, independently of the keyword used in the input.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq parseDecl('inc_.[T], PU, U, VDS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = parseDecl('including_.[T], PU, U, VDS) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq parseDecl('ex_.[T], PU, U, VDS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = parseDecl('extending_.[T], PU, U, VDS) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq parseDecl('pr_.[T], PU, U, VDS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = parseDecl('protecting_.[T], PU, U, VDS) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq parseDecl('including_.[T], PU, U, VDS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = < addImports((including parseModExp(T) .), PU) ; U ; VDS > .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq parseDecl('extending_.[T], PU, U, VDS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = < addImports((extending parseModExp(T) .), PU) ; U ; VDS > .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq parseDecl('protecting_.[T], PU, U, VDS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = < addImports((protecting parseModExp(T) .), PU) ; U ; VDS > .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parseDecl('sort_.[T], PU, U, VDS) = parseDecl('sorts_.[T], PU, U, VDS) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parseDecl('sorts_.[T], PU, U, VDS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = < addSorts(parseSortSet(T), PU) ; addSorts(parseSortSet(T), U) ; VDS > .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq parseDecl('subsort_.[T], PU, U, VDS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = parseDecl('subsorts_.[T], PU, U, VDS) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq parseDecl('subsorts_.[T], PU, U, VDS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = < addSubsorts(unfoldSubsortRel(parseSubsortRel(T)), PU) ;
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder addSubsorts(unfoldSubsortRel(parseSubsortRel(T)), U) ; VDS > .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** As pointed out in Section~\ref{SyntacticalRequirementsAndCaveats}, the
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** name of operators in operator declaration has to be given as a single
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** token identifier (see Section~\ref{order-sorted}). We assume that when
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** declaring a multitoken operator, its name is given as a single quoted
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** identifier in which each token is preceded by a backquote. Thus, the name
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** of an operator \verb~_(_)~, for example, is given as \verb~_`(_`)~.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parseDecl('op_:`->_.['token[T], T'], PU, U, VDS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = < addOps((op downQid(T) : nil -> parseType(T') [none] .), PU) ;
473b81d33893192056dde74b26b2467f983c102cChristian Maeder addOps((op downQid(T) : nil -> parseType(T') [none] .), U) ;
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder VDS > .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parseDecl('op_:`->_`[_`].['token[T], T', T''], PU, U, VDS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = < addOps(
473b81d33893192056dde74b26b2467f983c102cChristian Maeder (op downQid(T) : nil -> parseType(T') [parsePreAttrs(T'', 0)] .),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder PU) ;
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder addOps(
473b81d33893192056dde74b26b2467f983c102cChristian Maeder (op downQid(T) : nil -> parseType(T') [parseAttrs(T'')] .),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder U) ;
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder VDS > .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parseDecl('op_:_->_.['token[T], T', T''], PU, U, VDS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = < addOps(
473b81d33893192056dde74b26b2467f983c102cChristian Maeder (op downQid(T) : parseTypeList(T') -> parseType(T'') [none] .),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder PU) ;
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder addOps(
473b81d33893192056dde74b26b2467f983c102cChristian Maeder (op downQid(T) : parseTypeList(T') -> parseType(T'') [none] .),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder U) ;
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder VDS > .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parseDecl('op_:_->_`[_`].['token[T], T', T'', T3], PU, U, VDS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = < addOps(
473b81d33893192056dde74b26b2467f983c102cChristian Maeder (op downQid(T) : parseTypeList(T') -> parseType(T'')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [parsePreAttrs(T3, size(parseTypeList(T')))] .), PU) ;
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder addOps(
473b81d33893192056dde74b26b2467f983c102cChristian Maeder (op downQid(T) : parseTypeList(T') -> parseType(T'')
473b81d33893192056dde74b26b2467f983c102cChristian Maeder [parseAttrs(T3)] .), U) ;
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder VDS > .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq parseDecl('op_:`->_.[F[TL], T], PU, U, VDS)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = < PU ; U ; VDS >
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if F =/= 'token .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq parseDecl('op_:`->_`[_`].[F[TL], T, T'], PU, U, VDS)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = < PU ; U ; VDS >
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if F =/= 'token .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq parseDecl('op_:_->_.[F[TL], T, T'], PU, U, VDS)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = < PU ; U ; VDS >
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if F =/= 'token .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq parseDecl('op_:_->_`[_`].[F[TL], T, T', T''], PU, U, VDS)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = < PU ; U ; VDS >
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if F =/= 'token .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parseDecl('ops_:`->_.['neTokenList[T], T'], PU, U, VDS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = < addOps(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder unfoldOpDecl(downTypes(T), nil, parseType(T'), none), PU) ;
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder addOps(
473b81d33893192056dde74b26b2467f983c102cChristian Maeder unfoldOpDecl(downTypes(T), nil, parseType(T'), none), U) ;
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder VDS > .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parseDecl('ops_:`->_`[_`].['neTokenList[T], T', T''], PU, U, VDS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = < addOps(
473b81d33893192056dde74b26b2467f983c102cChristian Maeder unfoldOpDecl(downTypes(T), nil, parseType(T'),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder parsePreAttrs(T'', 0)),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder PU) ;
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder addOps(
473b81d33893192056dde74b26b2467f983c102cChristian Maeder unfoldOpDecl(downTypes(T), nil, parseType(T'),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder parseAttrs(T'')),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder U) ;
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder VDS > .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parseDecl('ops_:_->_.['neTokenList[T], T', T''], PU, U, VDS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = < addOps(
473b81d33893192056dde74b26b2467f983c102cChristian Maeder unfoldOpDecl(downTypes(T), parseTypeList(T'),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder parseType(T''), none),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder PU) ;
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder addOps(
473b81d33893192056dde74b26b2467f983c102cChristian Maeder unfoldOpDecl(downTypes(T), parseTypeList(T'),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder parseType(T''), none),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder U) ;
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder VDS > .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parseDecl('ops_:_->_`[_`].['neTokenList[T], T', T'', T3], PU, U, VDS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = < addOps(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder unfoldOpDecl(downTypes(T), parseTypeList(T'), parseType(T''),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder parsePreAttrs(T3, size(parseTypeList(T')))), PU) ;
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder addOps(
473b81d33893192056dde74b26b2467f983c102cChristian Maeder unfoldOpDecl(downTypes(T),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder parseTypeList(T'), parseType(T''), parseAttrs(T3)), U) ;
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder VDS > .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parseDecl('op_:`~>_.['token[T], T'], PU, U, VDS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = < addOps((op downQid(T) : nil -> kind(parseType(T')) [none] .), PU) ;
473b81d33893192056dde74b26b2467f983c102cChristian Maeder addOps((op downQid(T) : nil -> kind(parseType(T')) [none] .), U) ;
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder VDS > .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parseDecl('op_:`~>_`[_`].['token[T], T', T''], PU, U, VDS)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = < addOps((op downQid(T) : nil -> kind(parseType(T'))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [parsePreAttrs(T'', 0)] .), PU) ;
473b81d33893192056dde74b26b2467f983c102cChristian Maeder addOps((op downQid(T) : nil -> kind(parseType(T'))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder [parseAttrs(T'')] .), U) ;
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder VDS > .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parseDecl('op_:_~>_.['token[T], T', T''], PU, U, VDS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = < addOps((op downQid(T) : kind(parseTypeList(T')) -> kind(parseType(T''))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [none] .), PU) ;
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder addOps((op downQid(T) : kind(parseTypeList(T')) -> kind(parseType(T''))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder [none] .), U) ;
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder VDS > .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parseDecl('op_:_~>_`[_`].['token[T], T', T'', T3], PU, U, VDS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = < addOps((op downQid(T) : kind(parseTypeList(T')) -> kind(parseType(T''))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [parsePreAttrs(T3, size(parseTypeList(T')))] .), PU) ;
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder addOps((op downQid(T) : kind(parseTypeList(T')) -> kind(parseType(T''))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder [parseAttrs(T3)] .), U) ;
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder VDS > .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq parseDecl('op_:`~>_.[F[TL], T], PU, U, VDS)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = < PU ; U ; VDS >
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if F =/= 'token .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq parseDecl('op_:`~>_`[_`].[F[TL], T, T'], PU, U, VDS)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = < PU ; U ; VDS >
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if F =/= 'token .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq parseDecl('op_:_~>_.[F[TL], T, T'], PU, U, VDS)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = < PU ; U ; VDS >
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if F =/= 'token .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq parseDecl('op_:_~>_`[_`].[F[TL], T, T', T''], PU, U, VDS)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = < PU ; U ; VDS >
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if F =/= 'token .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parseDecl('ops_:`~>_.['neTokenList[T], T'], PU, U, VDS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = < addOps(
473b81d33893192056dde74b26b2467f983c102cChristian Maeder unfoldOpDecl(downTypes(T), nil, kind(parseType(T')), none),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder PU) ;
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder addOps(
473b81d33893192056dde74b26b2467f983c102cChristian Maeder unfoldOpDecl(downTypes(T), nil, kind(parseType(T')), none),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder U) ;
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder VDS > .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parseDecl('ops_:`~>_`[_`].['neTokenList[T], T', T''], PU, U, VDS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = < addOps(
473b81d33893192056dde74b26b2467f983c102cChristian Maeder unfoldOpDecl(downTypes(T), nil, kind(parseType(T')),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder parsePreAttrs(T'', 0)),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder PU) ;
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder addOps(
473b81d33893192056dde74b26b2467f983c102cChristian Maeder unfoldOpDecl(downTypes(T), nil, kind(parseType(T')),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder parseAttrs(T'')), U) ;
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder VDS > .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parseDecl('ops_:_~>_.['neTokenList[T], T', T''], PU, U, VDS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = < addOps(
473b81d33893192056dde74b26b2467f983c102cChristian Maeder unfoldOpDecl(downTypes(T), parseTypeList(T'),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder kind(parseType(T'')), none),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder PU) ;
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder addOps(
473b81d33893192056dde74b26b2467f983c102cChristian Maeder unfoldOpDecl(downTypes(T), parseTypeList(T'),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder kind(parseType(T'')), none),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder U) ;
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder VDS > .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq parseDecl('ops_:_~>_`[_`].['neTokenList[T], T', T'', T3], PU,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder U, VDS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = < addOps(
473b81d33893192056dde74b26b2467f983c102cChristian Maeder unfoldOpDecl(downTypes(T), parseTypeList(T'), parseType(T''),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder parsePreAttrs(T3, size(parseTypeList(T')))),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder PU) ;
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder addOps(
473b81d33893192056dde74b26b2467f983c102cChristian Maeder unfoldOpDecl(downTypes(T),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder parseTypeList(T'), parseType(T''), parseAttrs(T3)), U) ;
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder VDS > .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parseDecl('var_:_.['neTokenList[T], T'], PU, U, VDS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = parseDecl('vars_:_.['neTokenList[T], T'], PU, U, VDS) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parseDecl('vars_:_.['neTokenList[T], T'], PU, U, VDS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = < PU ; U ; VDS parseVars(downQidList(T), parseType(T')) > .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq parseDecl('mb_:_.['bubble['__[''`[.Qid, L, ''`].Qid]], T], PU, U, VDS)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = < addMbs((mb getTerm(breakMb(T, VDS)) : getSort(breakMb(T, VDS))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [label(downQid(L)) getAttrSet(breakMb(T, VDS))] .), PU) ; U ; VDS > .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq parseDecl('mb_:_.[T, T'], PU, U, VDS)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = < addMbs((mb T : getSort(breakMb(T', VDS)) [getAttrSet(breakMb(T', VDS))] .), PU) ; U ; VDS >
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parseDecl('cmb_:_if_.[T, T', T''], PU, U, VDS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = < addMbs(
473b81d33893192056dde74b26b2467f983c102cChristian Maeder (cmb T : getSort(breakMb(T', VDS))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder if term(pullStmtAttrOut(T'', VDS)) = 'true.Bool
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [attrSet(pullStmtAttrOut(T'', VDS))] .), PU) ; U ; VDS > .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parseDecl('cmb`[_`]:_:_if_.['token[T'''], T, T', T''], PU, U, VDS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = < addMbs(
473b81d33893192056dde74b26b2467f983c102cChristian Maeder (cmb T : getSort(breakMb(T', VDS))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder if term(pullStmtAttrOut(T'', VDS)) = 'true.Bool
473b81d33893192056dde74b26b2467f983c102cChristian Maeder [attrSet(pullStmtAttrOut(T'', VDS)) label(downQid(T'''))] .), PU) ; U ; VDS > .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder sort Tuple{Default{Term},Sort,AttrSet} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op breakMb : Term OpDeclSet -> [Tuple{Default{Term},Sort,AttrSet}] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op breakMbAux : Term TermList AttrSet OpDeclSet -> [Tuple{Default{Term},Sort,AttrSet}] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op {_,_,_} : Default{Term} Sort AttrSet -> Tuple{Default{Term},Sort,AttrSet} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op getTerm : Tuple{Default{Term},Sort,AttrSet} -> Default{Term} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op getSort : Tuple{Default{Term},Sort,AttrSet} -> Sort .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op getAttrSet : Tuple{Default{Term},Sort,AttrSet} -> AttrSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getTerm({DT, S, AtS}) = DT .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getTerm({DT, qidError(QIL), AtS}) = DT .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getSort({DT, S, AtS}) = S .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getSort({DT, qidError(QIL), AtS}) = qidError(QIL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getAttrSet({DT, S, AtS}) = AtS .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getAttrSet({DT, qidError(QIL), AtS}) = AtS .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- eq breakMb('bubble[QI]) = {maybe, downQidList(QI), none} .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder---- eq breakMb('bubble['__[QI, QI']])
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- = {maybe, getType(parseTypeMb('bubble['__[QI, QI']])), none} .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder---- eq breakMb('bubble['__[QI, QI', QI'']])
473b81d33893192056dde74b26b2467f983c102cChristian Maeder---- = {getTerm(parseTypeMb('bubble['__[QI, QI', QI'']])),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder---- getType(parseTypeMb('bubble['__[QI, QI', QI'']])),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- none} .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq breakMb('bubble['__[QI, QI', TL, QI'']], VDS)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = if QI'' =/= ''`].Qid
473b81d33893192056dde74b26b2467f983c102cChristian Maeder then {getTerm(parseTypeMb('bubble['__[QI, QI', TL, QI'']])),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder getType(parseTypeMb('bubble['__[QI, QI', TL, QI'']])),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder none}
473b81d33893192056dde74b26b2467f983c102cChristian Maeder else breakMbAux('bubble['__[QI, QI', TL, QI'']], (QI, QI', TL), none, VDS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq breakMb('sortToken[T], VDS) = {null, parseType('sortToken[T]), none} [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq breakMb('_`{_`}[T, T'], VDS) = {null, parseType('_`{_`}[T, T']), none} [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq breakMb(T, VDS) = {null, getType(parseTypeMb(T)), none} [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq breakMbAux(T, (TL, ''`[.Qid), AtS, VDS)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = if AtS =/= none
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then {null, getType(parseTypeMb('bubble[TL])), AtS}
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else {null, T, none}
473b81d33893192056dde74b26b2467f983c102cChristian Maeder fi .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq breakMbAux(T, (TL, QI, QI', ''`[.Qid), AtS, VDS)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = if AtS =/= none
473b81d33893192056dde74b26b2467f983c102cChristian Maeder then {getTerm(parseTypeMb('bubble['__[TL, QI, QI']])),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder getType(parseTypeMb('bubble['__[TL, QI, QI']])), AtS}
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else {getTerm(parseTypeMb(T)), getType(parseTypeMb(T)), none}
473b81d33893192056dde74b26b2467f983c102cChristian Maeder fi .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq breakMbAux(T, (TL, QI, ''nonexec.Qid), AtS, VDS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = breakMbAux(T, (TL, QI), AtS nonexec, VDS) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq breakMbAux(T, (TL, QI, ''variant.Qid), AtS, VDS)
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder = breakMbAux(T, (TL, QI), AtS variant, VDS) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq breakMbAux(T, (TL, QI, ''owise.Qid), AtS, VDS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = breakMbAux(T, (TL, QI), AtS owise, VDS) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq breakMbAux(T, (TL, QI, ''otherwise.Qid), AtS, VDS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = breakMbAux(T, (TL, QI), AtS owise, VDS) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq breakMbAux(T, (TL, QI, ''label.Qid, QI'), AtS, VDS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if downQid(QI') :: Qid
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then breakMbAux(T, (TL, QI), AtS label(downQid(QI')), VDS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else {null, T, none}
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq breakMbAux(T, (TL, QI, ''metadata.Qid, QI'), AtS, VDS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if downString(downQid(QI')) :: String
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then breakMbAux(T, (TL, QI), AtS metadata(downString(downQid(QI'))), VDS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else {null, T, none}
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ceq breakMbAux(T, (TL, QI, ''`[.Qid, TL', ''print.Qid, TL''), AtS, VDS)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = breakMbAux(T, (TL, QI, ''`[.Qid, TL'), AtS print(printArg(TL'', VDS)), VDS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if printArg(TL'', VDS) : QidList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq breakMbAux(T, TL, AtS, VDS) = {null, T, none} [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op parseTypeMb : Term ~> ResultPair .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- eq parseTypeMb('bubble[T])
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- = parseType(getTerm(metaParse(upModule('EXTENDED-SORTS, false), downQidList(T), '@Sort@))) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parseTypeMb('bubble[TL])
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if metaParse(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder addOps(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op '_:_ : '@Bubble@ '@Sort@ -> '@TermSort@ [none] .,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder addSorts('@TermSort@, GRAMMAR)),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder downQidList(TL), '@TermSort@) :: ResultPair
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then breakTermSort(
473b81d33893192056dde74b26b2467f983c102cChristian Maeder getTerm(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder metaParse(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder addOps(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op '_:_ : '@Bubble@ '@Sort@ -> '@TermSort@ [none] .,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder addSorts('@TermSort@, GRAMMAR)),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder downQidList(TL), '@TermSort@)))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else {null, parseType(getTerm(metaParse(GRAMMAR, downQidList(TL), '@Sort@)))}
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op breakTermSort : Term ~> ResultPair .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq breakTermSort('_:_[T, T']) = {T, parseType(T')} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq parseDecl('eq_=_.[T, T'], PU, U, VDS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = < addEqs((eq T = T' [none] .), PU) ; U ; VDS > .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parseDecl('ceq_=_if_.[T, T', T''], PU, U, VDS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = < addEqs((ceq T = T' if T'' = 'true.Bool [none] .), PU) ; U ; VDS > .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parseDecl('cq_=_if_.[T, T', T''], PU, U, VDS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = < addEqs((ceq T = T' if T'' = 'true.Bool [none] .), PU) ; U ; VDS > .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parseDecl('rl_=>_.[T, T'], PU, U, VDS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = < addRls((rl T => T' [none] .), PU) ; U ; VDS > .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parseDecl('crl_=>_if_.[T, T', T''], PU, U, VDS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = < addRls((crl T => T' if T'' = 'true.Bool [none] .), PU) ; U ; VDS > .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parseDecl('class_.[T], PU, U, VDS)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = < addClasses((class parseType(T) | none .), PU) ;
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder addClasses((class parseType(T) | none .), U) ; VDS > .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parseDecl('class_|_.[T, T'], PU, U, VDS)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = < addClasses((class parseType(T) | parseAttrDeclList(T') .), PU) ;
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder addClasses((class parseType(T) | parseAttrDeclList(T') .), U) ; VDS > .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parseDecl('subclass_.[T], PU, U, VDS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = < addSubclasses(unfoldSubclassRel(parseSubsortRel(T)), PU) ;
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder addSubclasses(unfoldSubclassRel(parseSubsortRel(T)), U) ; VDS > .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parseDecl('subclasses_.[T], PU, U, VDS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = < addSubclasses(unfoldSubclassRel(parseSubsortRel(T)), PU) ;
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder addSubclasses(unfoldSubclassRel(parseSubsortRel(T)), U) ; VDS > .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parseDecl('msg_:_->_.['token[T], T', T''], PU, U, VDS)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = < addMsgs((msg downQid(T) : parseTypeList(T') -> parseType(T'') .), PU)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ;
473b81d33893192056dde74b26b2467f983c102cChristian Maeder addMsgs((msg downQid(T) : parseTypeList(T') -> parseType(T'') .), U)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ;
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder VDS > .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parseDecl('msg_:`->_.['token[T], T'], PU, U, VDS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = < addMsgs((msg downQid(T) : nil -> parseType(T') .), PU) ;
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder addMsgs((msg downQid(T) : nil -> parseType(T') .), U) ; VDS > .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parseDecl('msgs_:_->_.['neTokenList[T], T', T''], PU, U, VDS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = < addMsgs(unfoldMultipleMsgDecl(downQidList(T), parseTypeList(T'), parseType(T'')), PU) ;
473b81d33893192056dde74b26b2467f983c102cChristian Maeder addMsgs(unfoldMultipleMsgDecl(downQidList(T), parseTypeList(T'), parseType(T'')), U) ;
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder VDS > .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parseDecl('msgs_:`->_.['neTokenList[T], T'], PU, U, VDS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = < addMsgs(unfoldMultipleMsgDecl(downQidList(T), nil, parseType(T')), PU) ;
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder addMsgs(unfoldMultipleMsgDecl(downQidList(T), nil, parseType(T')), U) ; VDS > .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederendfm
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*******************************************************************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder***
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** 8.1.2 Parsing of View Declarations
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder***
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** A similar approach is followed for the parsing of declarations in views.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederfmod VIEW-DECL-PARSING is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr PRE-VIEW .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr VIEW .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr UNIT .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr UNIT-DECL-PARSING .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars T T' : Term .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var OPDS : OpDeclSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var MDS : MsgDeclSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var M : Module .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars F F' : Qid .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars S S' : Sort .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars Ty Ty' : Type .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars TyL TyL' : TypeList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars T'' T3 : Term .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var PV : PreView .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var OPD : OpDecl .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var OPDS' : OpDeclSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var AtS : AttrSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var MD : MsgDecl .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var MDS' : MsgDeclSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var VDS : OpDeclSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** Operator and message name maps of the form \verb~F to F'~ are substituted
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** by an equivalent set of maps of the form \verb~F : TyL -> S to F'~. One
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** of these maps is added for each family of subsort-overloaded operators in
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** the source theory of the view.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** The following functions \texttt{genOpMaps} and \texttt{genMsgMaps}
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** take, respectively, an operator and a message map of the form
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \verb~F to F'~, a set of operator or message declarations, and a term of
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** sort \texttt{Module}, and return, respectively, a set of operator maps and
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** a set of message maps, with each of the members of those sTS having the
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** general form \verb~F : TyL -> S to F'~. One of these maps is generated
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** for each family of subsort-overloaded operators or messages with name
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \texttt{F} in the module given as argument.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op genOpMaps : Renaming OpDeclSet Module -> RenamingSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op genMsgMaps : Renaming MsgDeclSet Module -> RenamingSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op genOpMapsAux : OpDeclSet Qid -> RenamingSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op genMsgMapsAux : MsgDeclSet Qid -> RenamingSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op getOpDeclSet : Qid Module -> OpDeclSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op getOpDeclSetAux : Qid OpDeclSet -> OpDeclSet .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder *** getOpDeclSet(F, U) returns the set of declarations of operators with
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** name F in the unit U
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op getMsgDeclSet : Qid Module -> MsgDeclSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op getMsgDeclSetAux : Qid MsgDeclSet -> MsgDeclSet .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder *** getMsgDeclSet(F, U) returns the set of declarations of messages with
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** name F in the unit U
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op gTSubsortOverloadedFamilies :
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder OpDeclSet OpDeclSet Module -> OpDeclSet .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op gTSubsortOverloadedFamilies :
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder MsgDeclSet MsgDeclSet Module -> MsgDeclSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** gTSubsortOverloadedFamilies returns a declaration of operator or
473b81d33893192056dde74b26b2467f983c102cChristian Maeder *** message for each family of subsort-overloaded operators or messages.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op selectOpDeclSet : Qid OpDeclSet -> OpDeclSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op selectMsgDeclSet : Qid MsgDeclSet -> MsgDeclSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** selectOpDeclSet and selectMsgDeclSet returns, respectively, the subset
473b81d33893192056dde74b26b2467f983c102cChristian Maeder *** of those declarations of ops and msgs which name coincides with the
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** qid given ar argument.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op opFamilyIn : OpDecl OpDeclSet Module -> Bool .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op msgFamilyIn : MsgDecl MsgDeclSet Module -> Bool .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** Check whether the family of the subsort-overloaded operator given as
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** argument has already a representative in the set of declarations given.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq genOpMaps((op F to F' [none]), OPDS, M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = genOpMapsAux(
473b81d33893192056dde74b26b2467f983c102cChristian Maeder gTSubsortOverloadedFamilies(selectOpDeclSet(F, OPDS), none, M),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder F') .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq genMsgMaps((msg F to F'), MDS, M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = genMsgMapsAux(
473b81d33893192056dde74b26b2467f983c102cChristian Maeder gTSubsortOverloadedFamilies(selectMsgDeclSet(F, MDS), none, M),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder F') .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq selectOpDeclSet(F, ((op F' : TyL -> Ty [AtS] .) OPDS))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = ((if F == F'
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then (op F' : TyL -> Ty [AtS] .)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder else none
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder selectOpDeclSet(F, OPDS)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq selectOpDeclSet(F, none) = none .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq selectMsgDeclSet(F, ((msg F' : TyL -> Ty .) MDS))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = ((if F == F'
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then (msg F' : TyL -> Ty .)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder else none
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder selectMsgDeclSet(F, MDS)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq selectMsgDeclSet(F, none) = none .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq genOpMapsAux(((op F : TyL -> Ty [AtS] .) OPDS), F')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = ((op F : TyL -> Ty to F' [none]), genOpMapsAux(OPDS, F')) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq genOpMapsAux(none, F') = none .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq genMsgMapsAux(((msg F : TyL -> Ty .) MDS), F')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = ((msg F : TyL -> Ty to F'), genMsgMapsAux(MDS, F')) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq genMsgMapsAux(none, F') = none .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq gTSubsortOverloadedFamilies((OPD OPDS), OPDS', M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if opFamilyIn(OPD, OPDS', M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then gTSubsortOverloadedFamilies(OPDS, OPDS', M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else gTSubsortOverloadedFamilies(OPDS, (OPD OPDS'), M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq gTSubsortOverloadedFamilies(none, OPDS, M) = OPDS .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq gTSubsortOverloadedFamilies((MD MDS), MDS', M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if msgFamilyIn(MD, MDS', M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then gTSubsortOverloadedFamilies(MDS, MDS', M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else gTSubsortOverloadedFamilies(MDS, (MD MDS'), M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq gTSubsortOverloadedFamilies(none, MDS, M) = MDS .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq opFamilyIn(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder (op F : TyL -> Ty [AtS] .), ((op F' : TyL' -> Ty' [AtS] .) OPDS), M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = ((F == F') and-then sameKind(M, TyL, TyL')) or-else
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder opFamilyIn((op F : TyL -> Ty [AtS] .), OPDS, M) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq opFamilyIn((op F : TyL -> Ty [AtS] .), none, M) = false .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq msgFamilyIn((msg F : TyL -> Ty .), ((msg F' : TyL' -> Ty' .) MDS), M)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = ((F == F') and-then sameKind(M, TyL, TyL'))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder or-else
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder msgFamilyIn((msg F : TyL -> Ty .), MDS, M) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq msgFamilyIn((msg F : TyL -> Ty .), none, M) = false .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** In the case of views, the \texttt{parseDecl} function takes the term
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** representing the corresponding declaration and a preview in which the
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** declarations are introduced. Note that in the case of views, the approach
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** followed in the evaluation is somewhat different. The only predeclarations
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** in a preview correspond to the term premaps of sort \texttt{PreTermMap},
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** for which, in addition to solving the bubbles in them, we have to convert
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** them into term maps of sort \texttt{TermMap} associating to them the set
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** of declarations of variables in the view which are used in them (see
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** Section~\ref{view-processing}).
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** The function \texttt{parseDecl} for declarations in views takes then the
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** term representing such declaration and a preview in which the result of
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** adding the declaration will be returned. To be able to generate the sTS
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** of equivalent operator and message maps as indicated above, the function
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** takes also as parameters the sTS of declarations of operators and messages
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** in the theory part of the source theory of the view in question, and the
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** signature of such theory to make the necessary sort comparisons.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op parseDecl : Term PreView OpDeclSet MsgDeclSet Module -> PreView .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parseDecl('sort_to_.[T, T'], PV, OPDS, MDS, M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = addMaps((sort parseType(T) to parseType(T')), PV) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parseDecl('class_to_.[T, T'], PV, OPDS, MDS, M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = addMaps((class parseType(T) to parseType(T')), PV) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parseDecl('vars_:_.['neTokenList[T], T'], PV, OPDS, MDS, M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = addVars(parseVars(downQidList(T), parseType(T')), PV).
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parseDecl('var_:_.['neTokenList[T], T'], PV, OPDS, MDS, M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = addVars(parseVars(downQidList(T), parseType(T')), PV).
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq parseDecl('op_to`term_.[T, T'], PV, OPDS, MDS, M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = addMaps(preTermMap(T, T'), PV) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parseDecl('op_to_.['token[T], 'token[T']], PV, OPDS, MDS, M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = addMaps(genOpMaps((op downQid(T) to downQid(T') [none]), OPDS, M), PV) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parseDecl('op_:_->_to_.['token[T], T', T'', 'token[T3]], PV, OPDS, MDS, M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = addMaps(
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op downQid(T) : parseTypeList(T') -> parseType(T'') to downQid(T3)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder [none],
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder PV) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parseDecl('op_:`->_to_.['token[T], T', 'token[T'']], PV, OPDS, MDS, M)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = addMaps((op downQid(T) : nil -> parseType(T') to downQid(T'') [none]),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder PV) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parseDecl('msg_to_.['token[T], 'token[T']], PV, OPDS, MDS, M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = addMaps(genMsgMaps((msg downQid(T) to downQid(T')), MDS, M), PV) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq parseDecl('msg_:_->_to_.['token[T], T', T'', 'token[T3]],
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder PV, OPDS, MDS, M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = addMaps(
473b81d33893192056dde74b26b2467f983c102cChristian Maeder msg downQid(T) : parseTypeList(T') -> parseType(T'') to downQid(T3),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder PV) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parseDecl('msg_:`->_to_.['token[T], T', 'token[T'']], PV, OPDS, MDS, M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = addMaps((msg downQid(T) : nil -> parseType(T') to downQid(T'')), PV) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parseDecl('label_to_.['token[T], 'token[T']], PV, OPDS, MDS, M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = addMaps((label downQid(T) to downQid(T')), PV) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parseDecl('attr_._to_.[T', 'token[T], 'token[T'']], PV, OPDS, MDS, M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = addMaps((attr downQid(T) . parseType(T') to downQid(T'')), PV) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parseDecl(T, PV, OPDS, MDS, M) = PV [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederendfm
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*******************************************************************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder***
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** 8.2 Meta Pretty Printing
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder***
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** To be able to show to the user the modules, theories, views, and terms
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** resulting from the different commands, the built-in function
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** \texttt{meta-pretty-print} is extended in the modules in this section to
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** deal with units and views.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder***
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** 8.2.1 Meta Pretty Printing of Declarations
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder***
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** The predefined function \texttt{meta-pretty-print} is extended in the
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** following module \texttt{DECL-META-PRETTY-PRINT} to handle any declaration
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** that can appear in a unit. Note that the following
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \texttt{meta-pretty-print} functions, as the built-in one, return a list
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** terms---such as equations, rules,* operator declarations with an identity
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** attribute, etc.---they have been defined with a term of operator
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** declarations with an identity attribute, etc.---they have been defined
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** with a term of sort \texttt{Module} as argument. In the other cases the
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** module is not necessary.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederfmod DECL-META-PRETTY-PRINT is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr EXT-DECL .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr O-O-DECL .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr UNIT .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr CONVERSION .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr INT-LIST .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr VIEW-EXPR-TO-QID .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op eMetaPrettyPrint : Sort -> QidList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op eMetaPrettyPrint : SortSet -> QidList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op eMetaPrettyPrint : TypeList -> QidList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op eMetaPrettyPrint : SubsortDeclSet -> QidList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op eMetaPrettyPrint : ClassDeclSet -> QidList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op eMetaPrettyPrint : SubclassDeclSet -> QidList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op eMetaPrettyPrint : Module OpDeclSet -> QidList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op eMetaPrettyPrintVars : OpDeclSet -> QidList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op eMetaPrettyPrint : MsgDeclSet -> QidList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op eMetaPrettyPrint : Module MembAxSet -> QidList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op eMetaPrettyPrint : Module EquationSet -> QidList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op eMetaPrettyPrint : Module RuleSet -> QidList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op eMetaPrettyPrint : Module Condition -> QidList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op eMetaPrettyPrint : Module Term -> QidList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ---- error handling
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder---(
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq metaPrettyPrint(M, T, POS:PrintOptionSet)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = 'Module getName(M) 'contains 'errors. .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder---)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq eMetaPrettyPrint(U, T) = metaPrettyPrint(U, T) . ----, mixfix flat format) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq eMetaPrettyPrint(U, qidError(QIL)) = QIL .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq eMetaPrettyPrint(qidError(QIL)) = QIL .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op eMetaPrettyPrint : Module AttrSet -> QidList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op eMetaPrettyPrint : IntList -> QidList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op eMetaPrettyPrint : AttrDeclSet -> QidList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op eMetaPrettyPrint : Module HookList -> QidList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars QI QI' QI'' F V L : Qid .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var QIL : QidList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var St : String .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var M : Module .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var U : Module .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars VE VE' : ViewExp .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars SS : SortSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars S S' : Sort .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var TyL : TypeList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var Ty : Type .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var SSDS : SubsortDeclSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var OPDS : OpDeclSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var AtS : AttrSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var MAS : MembAxSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var EqS : EquationSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var RlS : RuleSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var Hk : Hook .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var HkL : HookList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var I : Int .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var NL : IntList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars T T' T'' T3 : Term .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var CDS : ClassDeclSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var SCDS : SubclassDeclSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var MDS : MsgDeclSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var ADS : AttrDeclSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var Cond : Condition .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var K : Kind .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder --- eq eMetaPrettyPrint(Ty) = Ty .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq eMetaPrettyPrint(S)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if getPars(S) == empty
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then S
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else getName(S) '`{ parameterList2QidList(getPars(S)) '`}
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq eMetaPrettyPrint(K) = '`[ eMetaPrettyPrint(getSort(K)) '`] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq eMetaPrettyPrint((S ; SS))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (eMetaPrettyPrint(S) eMetaPrettyPrint(SS))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq eMetaPrettyPrint((none).SortSet) = nil .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq eMetaPrettyPrint(Ty TyL)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = eMetaPrettyPrint(Ty) eMetaPrettyPrint(TyL)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq eMetaPrettyPrint((nil).TypeList) = nil .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq eMetaPrettyPrint(((subsort S < S' .) SSDS))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = ('\s '\s '\b
473b81d33893192056dde74b26b2467f983c102cChristian Maeder 'subsort '\o eMetaPrettyPrint(S) '\b
473b81d33893192056dde74b26b2467f983c102cChristian Maeder '< '\o eMetaPrettyPrint(S') '\b '. '\o '\n
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eMetaPrettyPrint(SSDS)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq eMetaPrettyPrint((none).SubsortDeclSet) = nil .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq eMetaPrettyPrint(M, ((op F : TyL -> Ty [none] .) OPDS))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = ('\s '\s
473b81d33893192056dde74b26b2467f983c102cChristian Maeder '\b 'op '\o F '\b ': '\o eMetaPrettyPrint(TyL)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder '\b '-> '\o eMetaPrettyPrint(Ty) '\b '. '\o '\n
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eMetaPrettyPrint(M, OPDS)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq eMetaPrettyPrint(M, ((op F : TyL -> Ty [AtS] .) OPDS))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = ('\s '\s
473b81d33893192056dde74b26b2467f983c102cChristian Maeder '\b 'op '\o F '\b ': '\o eMetaPrettyPrint(TyL)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder '\b '-> '\o eMetaPrettyPrint(Ty) '\n
473b81d33893192056dde74b26b2467f983c102cChristian Maeder '\s '\s '\s '\s '\b '`[ '\o eMetaPrettyPrint(M, AtS) '\b '`] '\s '. '\o '\n
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eMetaPrettyPrint(M, OPDS))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq eMetaPrettyPrint(M, (none).OpDeclSet) = nil .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq eMetaPrettyPrintVars((op F : nil -> Ty [none] .) OPDS)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = ('\s '\s '\b 'var '\o F '\b ': '\o eMetaPrettyPrint(Ty) '\b '. '\o '\n
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eMetaPrettyPrintVars(OPDS)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq eMetaPrettyPrintVars((none).OpDeclSet) = nil .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq eMetaPrettyPrint(M, (mb T : S [none] .) MAS)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = ('\s '\s '\b 'mb '\o eMetaPrettyPrint(M, T) '\b ': '\o eMetaPrettyPrint(S) '\b '. '\o '\n
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eMetaPrettyPrint(M, MAS)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq eMetaPrettyPrint(M, (mb T : S [AtS] .) MAS)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = ('\s '\s '\b 'mb '\o eMetaPrettyPrint(M, T)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder '\b ': '\o eMetaPrettyPrint(S)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder '\s '\b '`[ '\o eMetaPrettyPrint(M, AtS) '\b '`] '\s '. '\o '\n
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eMetaPrettyPrint(M, MAS))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq eMetaPrettyPrint(M, (cmb T : S if Cond [none] .) MAS)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = ('\s '\s '\b 'cmb '\o eMetaPrettyPrint(M, T)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder '\b ': '\o eMetaPrettyPrint(S) '\n
473b81d33893192056dde74b26b2467f983c102cChristian Maeder '\s '\s '\s '\s '\b 'if '\o eMetaPrettyPrint(M, Cond) '\b '. '\o '\n
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eMetaPrettyPrint(M, MAS)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq eMetaPrettyPrint(M, (cmb T : S if Cond [AtS] .) MAS)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = ('\s '\s '\b 'cmb '\o eMetaPrettyPrint(M, T)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder '\b ': '\o eMetaPrettyPrint(S) '\n
473b81d33893192056dde74b26b2467f983c102cChristian Maeder '\s '\s '\s '\s '\b 'if '\o eMetaPrettyPrint(M, Cond)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder '\s '\b '`[ '\o eMetaPrettyPrint(M, AtS) '\b '`] '\s '. '\o '\n
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eMetaPrettyPrint(M, MAS))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq eMetaPrettyPrint(M, (none).MembAxSet) = nil .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq eMetaPrettyPrint(M, ((eq T = T' [none] .) EqS))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = ('\s '\s '\b 'eq '\s '\o eMetaPrettyPrint(M, T) '\n
473b81d33893192056dde74b26b2467f983c102cChristian Maeder '\s '\s '\s '\s '\b '= '\s '\o eMetaPrettyPrint(M, T') '\b '\s '. '\n
473b81d33893192056dde74b26b2467f983c102cChristian Maeder '\o
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eMetaPrettyPrint(M, EqS)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq eMetaPrettyPrint(M, ((eq T = T' [AtS] .) EqS))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = ('\s '\s '\b 'eq '\s '\o eMetaPrettyPrint(M, T) '\n
473b81d33893192056dde74b26b2467f983c102cChristian Maeder '\s '\s '\s '\s '\b '= '\s '\o eMetaPrettyPrint(M, T')
473b81d33893192056dde74b26b2467f983c102cChristian Maeder '\s '\b '`[ '\o eMetaPrettyPrint(M, AtS) '\b '`] '\s '. '\o '\n
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eMetaPrettyPrint(M, EqS))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq eMetaPrettyPrint(M, ((ceq T = T' if Cond [none] .) EqS))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = ('\s '\s '\b 'ceq '\s '\o eMetaPrettyPrint(M, T) '\n
473b81d33893192056dde74b26b2467f983c102cChristian Maeder '\s '\s '\s '\s '\b '= '\s '\o eMetaPrettyPrint(M, T') '\n
473b81d33893192056dde74b26b2467f983c102cChristian Maeder '\s '\s '\s '\s '\b 'if '\o '\s eMetaPrettyPrint(M, Cond) '\b '\s '. '\o '\n
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eMetaPrettyPrint(M, EqS)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq eMetaPrettyPrint(M, ((ceq T = T' if Cond [AtS] .) EqS))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = ('\s '\s '\b 'ceq '\s '\o eMetaPrettyPrint(M, T) '\n
473b81d33893192056dde74b26b2467f983c102cChristian Maeder '\s '\s '\s '\s '\b '= '\s '\o eMetaPrettyPrint(M, T') '\n
473b81d33893192056dde74b26b2467f983c102cChristian Maeder '\s '\s '\s '\s '\b 'if '\o '\s eMetaPrettyPrint(M, Cond)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder '\s '\b '`[ '\o eMetaPrettyPrint(M, AtS) '\b '`] '\s '. '\o '\n
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eMetaPrettyPrint(M, EqS))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq eMetaPrettyPrint(M, (none).EquationSet) = nil .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq eMetaPrettyPrint(M, ((rl T => T' [none] .) RlS))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = ('\s '\s '\b 'rl '\s '\o eMetaPrettyPrint(M, T) '\n
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder '\s '\s '\s '\s '\b '=> '\o '\s eMetaPrettyPrint(M, T') '\b '\s '. '\n '\o
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eMetaPrettyPrint(M, RlS)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq eMetaPrettyPrint(M, ((rl T => T' [AtS] .) RlS))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = ('\s '\s '\b 'rl '\s '\o eMetaPrettyPrint(M, T) '\n
473b81d33893192056dde74b26b2467f983c102cChristian Maeder '\s '\s '\s '\s '\b '=> '\o '\s eMetaPrettyPrint(M, T')
473b81d33893192056dde74b26b2467f983c102cChristian Maeder '\s '\b '`[ '\o eMetaPrettyPrint(M, AtS) '\b '`] '\s '. '\o '\n
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eMetaPrettyPrint(M, RlS))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq eMetaPrettyPrint(M, ((crl T => T' if Cond [none] .) RlS))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = ('\s '\s '\b 'crl '\s '\o eMetaPrettyPrint(M, T) '\n
473b81d33893192056dde74b26b2467f983c102cChristian Maeder '\s '\s '\s '\s '\b '=> '\o '\s eMetaPrettyPrint(M, T') '\n
473b81d33893192056dde74b26b2467f983c102cChristian Maeder '\s '\s '\s '\s '\b 'if '\o '\s eMetaPrettyPrint(M, Cond) '\b '\s '. '\o '\n
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eMetaPrettyPrint(M, RlS)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq eMetaPrettyPrint(M, ((crl T => T' if Cond [AtS] .) RlS))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = ('\s '\s '\b 'crl '\s '\o eMetaPrettyPrint(M, T) '\n
473b81d33893192056dde74b26b2467f983c102cChristian Maeder '\s '\s '\s '\s '\b '=> '\o '\s eMetaPrettyPrint(M, T') '\n
473b81d33893192056dde74b26b2467f983c102cChristian Maeder '\s '\s '\s '\s '\b 'if '\o '\s eMetaPrettyPrint(M, Cond)
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder '\s '\b '`[ '\o eMetaPrettyPrint(M, AtS) '\b '`] '\s '. '\o '\n
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eMetaPrettyPrint(M, RlS))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq eMetaPrettyPrint(M, (none).RuleSet) = nil .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq eMetaPrettyPrint(M, T = T' /\ Cond)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = (eMetaPrettyPrint(M, T) '\b '= '\o eMetaPrettyPrint(M, T') '\b
473b81d33893192056dde74b26b2467f983c102cChristian Maeder '/\ '\o eMetaPrettyPrint(M, Cond))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq eMetaPrettyPrint(M, T : S /\ Cond)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = (eMetaPrettyPrint(M, T) '\b ': '\o eMetaPrettyPrint(S) '\b
473b81d33893192056dde74b26b2467f983c102cChristian Maeder '/\ '\o eMetaPrettyPrint(M, Cond))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq eMetaPrettyPrint(M, T := T' /\ Cond)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = (eMetaPrettyPrint(M, T) '\b ':= '\o eMetaPrettyPrint(M, T') '\b
473b81d33893192056dde74b26b2467f983c102cChristian Maeder '/\ '\o eMetaPrettyPrint(M, Cond))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq eMetaPrettyPrint(M, T => T' /\ Cond)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = (eMetaPrettyPrint(M, T) '\b '=> '\o eMetaPrettyPrint(M, T') '\b
473b81d33893192056dde74b26b2467f983c102cChristian Maeder '/\ '\o eMetaPrettyPrint(M, Cond))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [owise] .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq eMetaPrettyPrint(M, T = T')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (eMetaPrettyPrint(M, T) '\b '= '\o eMetaPrettyPrint(M, T')) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq eMetaPrettyPrint(M, T : S)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (eMetaPrettyPrint(M, T) '\b ': '\o eMetaPrettyPrint(S)) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq eMetaPrettyPrint(M, T := T')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (eMetaPrettyPrint(M, T) '\b ':= '\o eMetaPrettyPrint(M, T')) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq eMetaPrettyPrint(M, T => T')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (eMetaPrettyPrint(M, T) '\b '=> '\o eMetaPrettyPrint(M, T')) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq eMetaPrettyPrint(M, (nil).EqCondition) = nil .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq eMetaPrettyPrint(M, (assoc AtS))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = ('\b 'assoc '\o eMetaPrettyPrint(M, AtS)) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq eMetaPrettyPrint(M, (comm AtS))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = ('\b 'comm '\o eMetaPrettyPrint(M, AtS)) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq eMetaPrettyPrint(M, (memo AtS))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = ('\b 'memo '\o eMetaPrettyPrint(M, AtS)) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq eMetaPrettyPrint(M, (idem AtS))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = ('\b 'idem '\o eMetaPrettyPrint(M, AtS)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq eMetaPrettyPrint(M, (id(T) AtS))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = ('\b 'id: '\o eMetaPrettyPrint(M, T) eMetaPrettyPrint(M, AtS)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq eMetaPrettyPrint(M, (right-id(T) AtS))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = ('\b 'right 'id: '\o eMetaPrettyPrint(M, T) eMetaPrettyPrint(M, AtS)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq eMetaPrettyPrint(M, (left-id(T) AtS))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = ('\b 'left 'id: '\o eMetaPrettyPrint(M, T) eMetaPrettyPrint(M, AtS)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq eMetaPrettyPrint(M, (poly(NL) AtS))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = ('\b 'poly '`( '\o eMetaPrettyPrint(NL) '\b '`)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder '\o eMetaPrettyPrint(M, AtS)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq eMetaPrettyPrint(M, (strat(NL) AtS))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = ('\b 'strat '`( '\o eMetaPrettyPrint(NL) '\b '`)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder '\o eMetaPrettyPrint(M, AtS)) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq eMetaPrettyPrint(M, (memo AtS))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = ('\b 'memo '\o eMetaPrettyPrint(M, AtS)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq eMetaPrettyPrint(M, (prec(I) AtS))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = ('\b 'prec '\o eMetaPrettyPrint(I) eMetaPrettyPrint(M, AtS)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq eMetaPrettyPrint(M, (gather(QIL) AtS))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = ('\b 'gather '\o '`( QIL '`) eMetaPrettyPrint(M, AtS)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq eMetaPrettyPrint(M, (format(QIL) AtS))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = ('\b 'format '\o '`( QIL '`) eMetaPrettyPrint(M, AtS)) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq eMetaPrettyPrint(M, (ctor AtS))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = ('\b 'ctor '\o eMetaPrettyPrint(M, AtS)) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq eMetaPrettyPrint(M, (frozen(NL) AtS))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = ('\b 'frozen '`( '\o eMetaPrettyPrint(NL) '\b '`)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder '\o eMetaPrettyPrint(M, AtS)) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq eMetaPrettyPrint(M, (iter AtS))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = ('\b 'iter '\o eMetaPrettyPrint(M, AtS)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq eMetaPrettyPrint(M, (special(HkL) AtS))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = ('\b 'special '`( '\o eMetaPrettyPrint(M, HkL) '\b '`)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder '\o eMetaPrettyPrint(M, AtS)) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq eMetaPrettyPrint(M, (config AtS))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = ('\b 'config '\o eMetaPrettyPrint(M, AtS)) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq eMetaPrettyPrint(M, (object AtS))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = ('\b 'object '\o eMetaPrettyPrint(M, AtS)) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq eMetaPrettyPrint(M, (msg AtS))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = ('\b 'msg '\o eMetaPrettyPrint(M, AtS)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq eMetaPrettyPrint(M, (label(QI) AtS))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = ('\b 'label '\o QI '\b '\o eMetaPrettyPrint(M, AtS)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq eMetaPrettyPrint(M, (metadata(St) AtS))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = ('\b 'metadata '\o qid("\"" + St + "\"") '\b
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder '\o eMetaPrettyPrint(M, AtS)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq eMetaPrettyPrint(M, (nonexec AtS))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = ('\b 'nonexec '\o eMetaPrettyPrint(M, AtS)) .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq eMetaPrettyPrint(M, (variant AtS))
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder = ('\b 'variant '\o eMetaPrettyPrint(M, AtS)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq eMetaPrettyPrint(M, (owise AtS))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = ('\b 'owise '\o eMetaPrettyPrint(M, AtS)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq eMetaPrettyPrint(M, (print(QIL) AtS))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = ('\b 'print QIL '\o eMetaPrettyPrint(M, AtS)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq eMetaPrettyPrint(M, (none).AttrSet) = nil .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ceq eMetaPrettyPrint(M, (Hk HkL))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = (eMetaPrettyPrint(M, Hk) eMetaPrettyPrint(M, HkL))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if HkL =/= nil .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq eMetaPrettyPrint(M, id-hook(QI, nil)) = ('\b 'id-hook '\o QI) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq eMetaPrettyPrint(M, id-hook(QI, QIL))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = ('\b 'id-hook '\o QI '\b '`( '\o QIL '\b '`) '\o )
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq eMetaPrettyPrint(M, op-hook(QI, QI', nil, QI''))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = ('\b 'op-hook '\o QI '\b '`( '\o QI' ': '~> QI'' '\b '`) '\o) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq eMetaPrettyPrint(M, op-hook(QI, QI', QIL, QI''))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = ('\b 'op-hook '\o QI '\b '`( '\o QI' ': QIL '~> QI'' '\b '`) '\o)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq eMetaPrettyPrint(M, term-hook(QI, T))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = ('\b 'term-hook '\o QI '\b '`( '\o eMetaPrettyPrint(M, T) '\b '`) '\o) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq eMetaPrettyPrint((I NL)) = (qid(string(I, 10)) eMetaPrettyPrint(NL)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq eMetaPrettyPrint((nil).NatList) = nil .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq eMetaPrettyPrint((class S | ADS .) CDS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = ((if ADS == none
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder then ('\s '\s '\b 'class '\o eMetaPrettyPrint(S) '\b '. '\o '\n)
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder else ('\s '\s '\b 'class '\o eMetaPrettyPrint(S) '\b '| '\o eMetaPrettyPrint(ADS) '\b '. '\o '\n)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eMetaPrettyPrint(CDS)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq eMetaPrettyPrint((none).ClassDeclSet) = nil .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq eMetaPrettyPrint((subclass S < S' .) SCDS)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = ('\s '\s '\b 'subclass '\o eMetaPrettyPrint(S) '\b
473b81d33893192056dde74b26b2467f983c102cChristian Maeder '< '\o eMetaPrettyPrint(S') '\b '. '\o '\n
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eMetaPrettyPrint(SCDS)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq eMetaPrettyPrint((none).SubclassDeclSet) = nil .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq eMetaPrettyPrint((msg F : TyL -> Ty .) MDS)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = ('\s '\s '\b 'msg '\o F '\b ': '\o eMetaPrettyPrint(TyL) '\b '-> '\o eMetaPrettyPrint(Ty) '\b '. '\o '\n
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eMetaPrettyPrint(MDS)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq eMetaPrettyPrint((none).MsgDeclSet) = nil .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq eMetaPrettyPrint(((attr F : S), ADS))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (F '\b ': '\o eMetaPrettyPrint(S) '\b '`, '\o '\s eMetaPrettyPrint(ADS))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq eMetaPrettyPrint((attr F : S)) = (F '\b ': '\o eMetaPrettyPrint(S)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq eMetaPrettyPrint((none).AttrDeclSet) = nil .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederendfm
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*******************************************************************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder***
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** 8.2.2 Meta Pretty Printing of Modules
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder***
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** In the following module, the \texttt{meta-pretty-print} function is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** defined on sort \texttt{Module}.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederfmod UNIT-META-PRETTY-PRINT is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr UNIT .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr RENAMING-EXPR-EVALUATION .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr DECL-META-PRETTY-PRINT .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op eMetaPrettyPrint : Module Module -> QidList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op eMetaPrettyPrint : Module Module -> QidList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op eMetaPrettyPrint : Header -> QidList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op eMetaPrettyPrint : ParameterDeclList -> QidList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op eMetaPrettyPrint : ImportList -> QidList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var M : Module .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars QI F F' L L' : Qid .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var QIL : QidList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var ME : ModuleExpression .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars S S' : Sort .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var Ty : Type .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var TyL : TypeList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var SS : SortSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var PD : ParameterDecl .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var PDL : ParameterDeclList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars IL IL' : ImportList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var SSDS : SubsortDeclSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var OPDS : OpDeclSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var MAS : MembAxSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var EqS : EquationSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var RlS : RuleSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var CDS : ClassDeclSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var SCDS : SubclassDeclSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var MDS : MsgDeclSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var U : Module .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var AtS : AttrSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var MN : ModuleName .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ceq eMetaPrettyPrint(ME)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = if QI == '`) or QI == '`] or QI == '`}
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then QIL QI '\s
473b81d33893192056dde74b26b2467f983c102cChristian Maeder else QIL QI
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if QIL QI := header2QidList(ME) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq eMetaPrettyPrint(W:[Module], unitError(QIL)) = QIL .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq eMetaPrettyPrint(unitError(QIL), noModule) = QIL .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq eMetaPrettyPrint(noModule, noModule) = nil .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq eMetaPrettyPrint(M, mod ME is IL sorts SS . SSDS OPDS MAS EqS RlS endm)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = ('\b
473b81d33893192056dde74b26b2467f983c102cChristian Maeder 'mod '\o eMetaPrettyPrint(ME) '\b 'is '\o '\n
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eMetaPrettyPrint(IL)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder (if SS == none
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then nil
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder else ('\s '\s '\b 'sorts '\o eMetaPrettyPrint(SS) '\b '. '\o '\n)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eMetaPrettyPrint(SSDS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eMetaPrettyPrint(M, OPDS)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eMetaPrettyPrint(M, MAS)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eMetaPrettyPrint(M, EqS)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eMetaPrettyPrint(M, RlS)
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder '\b 'endm '\o '\n) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq eMetaPrettyPrint(M, mod ME{PDL} is IL sorts SS . SSDS OPDS MAS EqS RlS endm)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = ('\b
473b81d33893192056dde74b26b2467f983c102cChristian Maeder 'mod '\o eMetaPrettyPrint(ME) (if PDL == nil
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then nil
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else '`{ eMetaPrettyPrint(PDL) '`} '\s
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder fi) '\b 'is '\o '\n
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eMetaPrettyPrint(IL)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder (if SS == none
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then nil
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder else ('\s '\s '\b 'sorts '\o eMetaPrettyPrint(SS) '\b '. '\o '\n)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder fi)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eMetaPrettyPrint(SSDS)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eMetaPrettyPrint(M, OPDS)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eMetaPrettyPrint(M, MAS)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eMetaPrettyPrint(M, EqS)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eMetaPrettyPrint(M, RlS)
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder '\b 'endm '\o '\n) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq eMetaPrettyPrint(M, th MN is IL sorts SS . SSDS OPDS MAS EqS RlS endth)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = ('\b
473b81d33893192056dde74b26b2467f983c102cChristian Maeder 'th '\o eMetaPrettyPrint(MN) '\b 'is '\o '\n
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eMetaPrettyPrint(IL)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder (if SS == none
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then nil
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder else ('\s '\s '\b 'sorts '\o eMetaPrettyPrint(SS) '\b '. '\o '\n)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder fi)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eMetaPrettyPrint(SSDS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eMetaPrettyPrint(M, OPDS)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eMetaPrettyPrint(M, MAS)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eMetaPrettyPrint(M, EqS)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eMetaPrettyPrint(M, RlS)
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder '\b 'endth '\o '\n) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq eMetaPrettyPrint(M, fmod ME is IL sorts SS . SSDS OPDS MAS EqS endfm)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = ('\b
473b81d33893192056dde74b26b2467f983c102cChristian Maeder 'fmod '\o eMetaPrettyPrint(ME) '\b 'is '\o '\n
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eMetaPrettyPrint(IL)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder (if SS == none
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then nil
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder else ('\s '\s '\b 'sorts '\o eMetaPrettyPrint(SS) '\b '. '\o '\n)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder fi)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eMetaPrettyPrint(SSDS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eMetaPrettyPrint(M, OPDS)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eMetaPrettyPrint(M, MAS)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eMetaPrettyPrint(M, EqS)
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder '\b 'endfm '\o '\n) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq eMetaPrettyPrint(M, fmod ME{PDL} is IL sorts SS . SSDS OPDS MAS EqS endfm)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = ('\b
473b81d33893192056dde74b26b2467f983c102cChristian Maeder 'fmod '\o eMetaPrettyPrint(ME) (if PDL == nil
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then nil
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else '`{ eMetaPrettyPrint(PDL) '`} '\s
473b81d33893192056dde74b26b2467f983c102cChristian Maeder fi) '\b 'is '\o '\n
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eMetaPrettyPrint(IL)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder (if SS == none
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then nil
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder else ('\s '\s '\b 'sorts '\o eMetaPrettyPrint(SS) '\b '. '\o '\n)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder fi)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eMetaPrettyPrint(SSDS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eMetaPrettyPrint(M, OPDS)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eMetaPrettyPrint(M, MAS)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eMetaPrettyPrint(M, EqS)
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder '\b 'endfm '\o '\n) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq eMetaPrettyPrint(M, fth MN is IL sorts SS . SSDS OPDS MAS EqS endfth)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = ('\b
473b81d33893192056dde74b26b2467f983c102cChristian Maeder 'fth '\o eMetaPrettyPrint(MN) '\b 'is '\o '\n
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eMetaPrettyPrint(IL)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder (if SS == none
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then nil
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder else ('\s '\s '\b 'sorts '\o eMetaPrettyPrint(SS) '\b '. '\o '\n)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder fi)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eMetaPrettyPrint(SSDS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eMetaPrettyPrint(M, OPDS)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eMetaPrettyPrint(M, MAS)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eMetaPrettyPrint(M, EqS)
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder '\b 'endfth '\o '\n) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq eMetaPrettyPrint(M,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder omod ME is IL sorts SS . SSDS CDS SCDS OPDS MDS MAS EqS RlS endom)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = ('\b
473b81d33893192056dde74b26b2467f983c102cChristian Maeder 'omod '\o eMetaPrettyPrint(ME) '\b 'is '\o '\n
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eMetaPrettyPrint(IL)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder (if SS == none
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then nil
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder else ('\s '\s '\b 'sorts '\o eMetaPrettyPrint(SS) '\b '. '\o '\n )
473b81d33893192056dde74b26b2467f983c102cChristian Maeder fi)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eMetaPrettyPrint(SSDS) eMetaPrettyPrint(CDS)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eMetaPrettyPrint(SCDS) eMetaPrettyPrint(M, OPDS)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eMetaPrettyPrint(MDS) eMetaPrettyPrint(M, MAS)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eMetaPrettyPrint(M, EqS) eMetaPrettyPrint(M, RlS)
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder '\b 'endom '\o '\n) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq eMetaPrettyPrint(M, omod ME{PDL} is IL sorts SS . SSDS CDS SCDS OPDS MDS MAS EqS RlS endom)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = ('\b
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder 'omod '\o eMetaPrettyPrint(ME) (if PDL == nil
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then nil
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else ('`{ eMetaPrettyPrint(PDL) '`} '\s)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder fi) '\b 'is '\o '\n
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eMetaPrettyPrint(IL)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder (if SS == none
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then nil
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder else ('\s '\s '\b 'sorts '\o eMetaPrettyPrint(SS) '\b '. '\o '\n )
473b81d33893192056dde74b26b2467f983c102cChristian Maeder fi)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eMetaPrettyPrint(SSDS) eMetaPrettyPrint(CDS)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eMetaPrettyPrint(SCDS) eMetaPrettyPrint(M, OPDS)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eMetaPrettyPrint(MDS) eMetaPrettyPrint(M, MAS)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eMetaPrettyPrint(M, EqS) eMetaPrettyPrint(M, RlS)
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder '\b 'endom '\o '\n) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq eMetaPrettyPrint(M, oth MN is IL sorts SS . SSDS CDS SCDS OPDS MDS MAS EqS RlS endoth)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = ('\b
473b81d33893192056dde74b26b2467f983c102cChristian Maeder 'oth '\o eMetaPrettyPrint(MN) '\b 'is '\o '\n
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eMetaPrettyPrint(IL)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder (if SS == none
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then nil
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder else ('\s '\s '\b 'sorts '\o eMetaPrettyPrint(SS) '\b '. '\o '\n )
473b81d33893192056dde74b26b2467f983c102cChristian Maeder fi)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eMetaPrettyPrint(SSDS) eMetaPrettyPrint(CDS)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eMetaPrettyPrint(SCDS) eMetaPrettyPrint(M, OPDS)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eMetaPrettyPrint(MDS) eMetaPrettyPrint(M, MAS)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eMetaPrettyPrint(M, EqS) eMetaPrettyPrint(M, RlS) '\n '\b
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder 'endoth '\o '\n) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq eMetaPrettyPrint((including ME .) IL)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = ('\s '\s '\b 'including '\o eMetaPrettyPrint(ME) '\b '. '\o '\n
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eMetaPrettyPrint(IL)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq eMetaPrettyPrint((extending ME .) IL)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = ('\s '\s '\b 'extending '\o eMetaPrettyPrint(ME) '\b '. '\o '\n
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eMetaPrettyPrint(IL)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq eMetaPrettyPrint((protecting ME .) IL)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = ('\s '\s '\b 'protecting '\o eMetaPrettyPrint(ME) '\b '. '\o '\n
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eMetaPrettyPrint(IL)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq eMetaPrettyPrint((protecting pd(QI :: ME) .) IL)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = eMetaPrettyPrint(IL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq eMetaPrettyPrint((nil).ImportList) = nil .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq eMetaPrettyPrint((QI :: ME, PDL))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (QI ':: eMetaPrettyPrint(ME) '`, eMetaPrettyPrint(PDL))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq eMetaPrettyPrint((QI :: ME)) = (QI ':: eMetaPrettyPrint(ME)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq eMetaPrettyPrint((nil).ParameterDeclList) = (nil).QidList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op eMetaPrettyPrint : ModuleExpression -> QidList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq eMetaPrettyPrint(QI + ME:ModuleExpression)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = QI '+ eMetaPrettyPrint(ME:ModuleExpression) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq eMetaPrettyPrint(QI * (RnS:RenamingSet))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = QI '* '\s '`( renamingSet2QidList(RnS:RenamingSet) '`) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq eMetaPrettyPrint(pd(PD)) = eMetaPrettyPrint(PD) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op renamingSet2QidList : RenamingSet -> QidList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq renamingSet2QidList(((op F to F' [AtS]), RS:RenamingSet))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = if AtS == none
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then ('op F 'to F' '`, '\s renamingSet2QidList(RS:RenamingSet))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder else ('op F 'to F' '\s '`[ attrSet2QidList(AtS) '`] '`, '\s
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder renamingSet2QidList(RS:RenamingSet))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq renamingSet2QidList((op F to F' [AtS]))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = if AtS == none
473b81d33893192056dde74b26b2467f983c102cChristian Maeder then ('op F 'to F')
473b81d33893192056dde74b26b2467f983c102cChristian Maeder else ('op F 'to F' '\s '`[ attrSet2QidList(AtS) '`])
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq renamingSet2QidList(((op F : TyL -> Ty to F' [AtS]), RS:RenamingSet))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = if AtS == none
473b81d33893192056dde74b26b2467f983c102cChristian Maeder then ('op F ': typeList2QidList(TyL) '-> Ty 'to F' '`,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder '\s renamingSet2QidList(RS:RenamingSet))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder else ('op F ': typeList2QidList(TyL) '-> Ty 'to F'
473b81d33893192056dde74b26b2467f983c102cChristian Maeder '`[ attrSet2QidList(AtS) '`] '`,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder '\s renamingSet2QidList(RS:RenamingSet))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder fi
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq renamingSet2QidList((op F : TyL -> Ty to F' [AtS]))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = if AtS == none
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then ('op F ': typeList2QidList(TyL) '-> Ty 'to F')
473b81d33893192056dde74b26b2467f983c102cChristian Maeder else ('op F ': typeList2QidList(TyL) '-> Ty 'to F'
473b81d33893192056dde74b26b2467f983c102cChristian Maeder '`[ attrSet2QidList(AtS) '`])
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq renamingSet2QidList(((sort S to S'), RS:RenamingSet))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = ('sort S 'to S' '`, '\s
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder renamingSet2QidList(RS:RenamingSet))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq renamingSet2QidList((sort S to S')) = ('sort S 'to S') .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq renamingSet2QidList(((label L to L'), RS:RenamingSet))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = ('label L 'to L' '`, '\s renamingSet2QidList(RS:RenamingSet))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq renamingSet2QidList((label L to L')) = ('label L 'to L') .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederendfm
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*******************************************************************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** The function \texttt{meta-pretty-print} on units is defined recursively,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** calling the \texttt{meta-pretty-print} functions for the different
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** declarations in the unit defined in module \texttt{DECL-META-PRETTY-PRINT}.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder***
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** 8.2.3 Meta Pretty Printing of Maps and Views
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder***
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** We define in the following module the function \texttt{meta-pretty-print}
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** on maps.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederfmod MAP-SET-META-PRETTY-PRINT is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr DECL-META-PRETTY-PRINT .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr FMAP .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr UNIT .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op eMetaPrettyPrint : RenamingSet -> QidList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var MAP : Renaming .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var MAPS : RenamingSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars QI QI' F F' L L' : Qid .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var AtS : AttrSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars S S' : Sort .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var Ty : Type .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var TyL : TypeList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq eMetaPrettyPrint((MAP, MAPS))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (eMetaPrettyPrint(MAP) '`, '\s '\s eMetaPrettyPrint(MAPS))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq eMetaPrettyPrint((none).RenamingSet) = nil .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq eMetaPrettyPrint(op F to F' [AtS])
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if AtS == none
473b81d33893192056dde74b26b2467f983c102cChristian Maeder then ('\b 'op '\o F '\b 'to '\o F')
473b81d33893192056dde74b26b2467f983c102cChristian Maeder else ('\b 'op F '\b 'to '\o F' '\b
473b81d33893192056dde74b26b2467f983c102cChristian Maeder '`[ '\o eMetaPrettyPrint(noModule, AtS) '\b '`] '\o)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder *** In a map there should not be attributes requiring a module
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq eMetaPrettyPrint(op F : TyL -> Ty to F' [AtS])
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if AtS == none
473b81d33893192056dde74b26b2467f983c102cChristian Maeder then ('\b 'op '\o F '\b ':
473b81d33893192056dde74b26b2467f983c102cChristian Maeder '\o eMetaPrettyPrint(TyL) '\b '-> '\o eMetaPrettyPrint(Ty)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder '\b 'to '\o F')
473b81d33893192056dde74b26b2467f983c102cChristian Maeder else ('\b 'op '\o F '\b ':
473b81d33893192056dde74b26b2467f983c102cChristian Maeder '\o eMetaPrettyPrint(TyL) '\b '-> '\o eMetaPrettyPrint(Ty)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder '\b 'to '\o F'
473b81d33893192056dde74b26b2467f983c102cChristian Maeder '\b '`[ '\o eMetaPrettyPrint(noModule, AtS) '\b '`] '\o)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder *** In a map there should not be attributes requiring a module
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq eMetaPrettyPrint(sort S to S')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = ('\b 'sort '\o eMetaPrettyPrint(S) '\b 'to '\o eMetaPrettyPrint(S')) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq eMetaPrettyPrint(label L to L') = ('\b 'label '\o L '\b 'to '\o L') .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq eMetaPrettyPrint(class S to S')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = ('\b 'class '\o eMetaPrettyPrint(S) '\b 'to '\o eMetaPrettyPrint(S')) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq eMetaPrettyPrint(attr QI . S to QI')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = ('\b 'attr '\o eMetaPrettyPrint(S) '\b '. '\o QI '\b 'to '\o QI') .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq eMetaPrettyPrint(msg F to F') = ('\b 'msg '\o F '\b 'to '\o F') .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq eMetaPrettyPrint(msg F : TyL -> Ty to F')
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = ('\b 'msg '\o F '\b ':
473b81d33893192056dde74b26b2467f983c102cChristian Maeder '\o eMetaPrettyPrint(TyL) '\b '-> '\o eMetaPrettyPrint(Ty)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder '\b 'to '\o F') .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederendfm
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*******************************************************************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** Finally, in the \texttt{VIEW-META-PRETTY-PRINT} module, the
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \texttt{meta-pretty-print} function is defined on views.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederfmod VIEW-META-PRETTY-PRINT is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr DATABASE .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr MAP-SET-META-PRETTY-PRINT .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr VIEW-MAP-SET-APPL-ON-UNIT .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr UNIT-META-PRETTY-PRINT .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op eMetaPrettyPrint : Database View -> QidList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op eMetaPrettyPrint : ViewExp -> QidList .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op eMetaPrettyPrint : ModuleExpression ModuleExpression Database RenamingSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder RenamingSet -> QidList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var QI : Qid .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var QIL : QidList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var DB : Database .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars ME ME' : ModuleExpression .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var MAP : Renaming .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var VMAP : ViewMap .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars VMAPS VMAPS' : Set{ViewMap} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars T T' : Term .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var PDL : ParameterDeclList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars VE VE' : ViewExp .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var DT : Default{Term} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq eMetaPrettyPrint(DB, view VE from ME to ME' is VMAPS endv)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = ('\b 'view '\o
473b81d33893192056dde74b26b2467f983c102cChristian Maeder QIL QI
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if QI == '`) then '\s else nil fi
473b81d33893192056dde74b26b2467f983c102cChristian Maeder '\b 'from '\o eMetaPrettyPrint(ME)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder '\b 'to '\o eMetaPrettyPrint(ME') '\b 'is '\o '\n
473b81d33893192056dde74b26b2467f983c102cChristian Maeder '\s '\s eMetaPrettyPrint(ME, ME', DB, VMAPS, VMAPS)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder '\b 'endv '\o '\n)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if QIL QI := eMetaPrettyPrint(VE) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq eMetaPrettyPrint(DB, view VE{PDL} from ME to ME' is VMAPS endv)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = ('\b 'view '\o
473b81d33893192056dde74b26b2467f983c102cChristian Maeder QIL QI
473b81d33893192056dde74b26b2467f983c102cChristian Maeder (if PDL == nil
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then if QI == '`) then '\s else nil fi
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else '`{ eMetaPrettyPrint(PDL) '`} '\s
473b81d33893192056dde74b26b2467f983c102cChristian Maeder fi)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder '\b 'from '\o eMetaPrettyPrint(ME)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder '\b 'to '\o eMetaPrettyPrint(ME') '\b 'is '\o '\n
473b81d33893192056dde74b26b2467f983c102cChristian Maeder '\s '\s eMetaPrettyPrint(ME, ME', DB, VMAPS, VMAPS)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder '\b 'endv '\o '\n )
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if QIL QI := eMetaPrettyPrint(VE) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq eMetaPrettyPrint(DB, viewError(QIL)) = QIL .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq eMetaPrettyPrint(QI) = QI if not QI :: Type .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ceq eMetaPrettyPrint(((VE, VE')))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = eMetaPrettyPrint(VE) '`, '\s eMetaPrettyPrint(VE')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if VE =/= nil /\ VE' =/= nil .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq eMetaPrettyPrint(QI{VE}) = QI '`{ eMetaPrettyPrint(VE) '`} '\s .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq eMetaPrettyPrint(ME, ME', DB, (VMAP, VMAPS), VMAPS')
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = (eMetaPrettyPrint(ME, ME', DB, VMAP, VMAPS') '\n
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder '\s '\s eMetaPrettyPrint(ME, ME', DB, VMAPS, VMAPS'))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq eMetaPrettyPrint(ME, ME', DB, none, VMAPS) = nil .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq eMetaPrettyPrint(ME, ME', DB, MAP, VMAPS) = eMetaPrettyPrint(MAP) '. .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq eMetaPrettyPrint(ME, ME', DB, termMap(T, T'), VMAPS)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = ('\b 'op '\o eMetaPrettyPrint(getFlatModule(ME, DB), T) '\b 'to
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder 'term '\o eMetaPrettyPrint(getFlatModule(ME', DB), T') '\b '. '\o) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq eMetaPrettyPrint(termMap(T, T'))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = ('op eMetaPrettyPrint(T) '\b 'to '\o eMetaPrettyPrint(T')) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederendfm
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*******************************************************************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder***
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** 8.3 Input Processing
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder***
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** The processing functions presented in the following modules are in charge
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** of taking each term generated by the \texttt{metaParse} function and,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** after transforming it into an element of the data types \texttt{Module} or
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \texttt{View}, or generating some output, returning the database resulting
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** from introducing in it such a term. We shall see in
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** Section~\ref{database-handling} how the appropriate function is called
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** after having performed a first analysis of the term, in which it is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** detected whether the input corresponds to a unit, view, or command. In the
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** cases of units and views the processing is quite similar. After a
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** preprocessing of the term, the function \texttt{parseDecl} is called with
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** each of the subterms representing declarations, resulting in units or
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** views with the parsed declarations in it.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder***
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** 8.3.1 Module Processing
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder***
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** The processing of a term resulting from the parsing of some input
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** corresponding to a unit is accomplished by the \texttt{procModule} function.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** This function takes as arguments a term of sort \texttt{Term}, which
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** represents some preunit, and a database. The function then enters into the
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** given database the unit obtained from the transformation of such term
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** into a term of sort \texttt{Module}.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederfmod UNIT-PROCESSING is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr DATABASE .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr UNIT-DECL-PARSING .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr EVALUATION .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr VIEW-MAP-SET-APPL-ON-UNIT .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr META-FULL-MAUDE-SIGN .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr MOD-EXP-PARSING .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars QI F X : Qid .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var M : Module .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars PU PU' U U' : Module .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars DB DB' : Database .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars T T' T'' T3 : Term .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var TL : TermList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars PL PL' PL'' : ParameterList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var PDL : ParameterDeclList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var IL IL' : ImportList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var ME : ModuleExpression .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var S : Sort .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var SS : SortSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var ME' : ModuleExpression .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var VMAPS : RenamingSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var B : Bool .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var VDS : OpDeclSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var QIL : QidList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var PDR : ParseDeclResult .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var DT : Default{Term} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** The \texttt{parseParList} takes a term representing a list of parameters
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** and returns the corresponding list.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op parseParList : Term -> ParameterDeclList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parseParList('_::_['token[T], T']) = downQid(T) :: parseModExp(T') .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parseParList('_`,_[T, T']) = (parseParList(T), parseParList(T')) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** All the operators declared as constructors of sort \texttt{PreModule} in
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** the signature of Full Maude, given in Appendix~\ref{signature-full-maude},
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** are declared with two arguments, namely, the name, or name and interface,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** of the unit, and the list of declarations of such units. The function
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \texttt{procModule3} is called with the term corresponding to the name, or
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** name and interface, of the module as first argument, the term corresponding
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** to the set of declarations as second argument, and an empty module of the
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** appropriate type, in which the different declarations will be accumulated,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** as third argument.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** The task of the function \texttt{procModule4} is then to make a second
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** level parsing of the input, building up, simultaneously, the preunit
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** represented in the term passed as argument, and the unit resulting from the
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** declarations without bubbles. This unit without bubbles will be used by the
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** \texttt{evalPreModule} function to build the signature with which to
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** analyze the bubbles in the preunit (see Section~\ref{evaluation}).
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** The case of parameterized modules requires a special treatment of the
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** parameters. These parameters are evaluated and are added as submodules in
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** the appropriate way.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** When the last declaration is parsed, the function \texttt{evalPreModule} is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** called with the preunit (the top module with bubbles) as first argument,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** the empty copy of it as second argument, the top module without bubbles as
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** third argument, and the database.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** Note that the \texttt{procModule} function adds a declaration importing the
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** module \texttt{CONFIGURATION+}, presented in
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** Section~\ref{non-built-in-predefined}, to the object-oriented modules, and
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** that \texttt{procModule4} adds a declaration importing the built-in module
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \texttt{BOOL} to all modules.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op procModule : Term Database -> Database .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** moved to MOD-EXPR-EVAL to solve dependency
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** op procModule : Qid Database -> Database .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op procModule2 : Term Term Database -> Database .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op procModule2 : Term Database -> Database .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op procModule3 : Term Term Term Module Database -> Database .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op procModule3 : Term Term Module Database -> Database .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op procModule4 : Term Term Module Module OpDeclSet Database -> Database .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op procModule4 : Term Module Module OpDeclSet Database -> Database .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder *** When recompiling a module, it's called with a Qid, and it's
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** not reentered into the database.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ceq procModule(QI, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if DT == null
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then evalModule(U, VDS, DB)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder else procModule2(DT, DB)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder fi
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if < DT ; VDS ; U > := getTermModule(QI, DB) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq procModule(T, DB) = procModule2(T, T, DB) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder *** procModule2 just calls procModule3 with the name and the declarations of
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** the module, and an empty unit of the right type.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq procModule2(T, 'fmod_is_endfm[T', T''], DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = procModule3(T, T', T'', emptyFModule, DB) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq procModule2(T, 'obj_is_endo[T', T''], DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = procModule3(T, T', T'', emptyFModule, DB) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq procModule2(T, 'obj_is_jbo[T', T''], DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = procModule3(T, T', T'', emptyFModule, DB) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq procModule2(T, 'mod_is_endm[T', T''], DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = procModule3(T, T', T'', emptySModule, DB) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq procModule2(T, 'omod_is_endom[T', T''], DB)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = procModule3(T, T', T'',
473b81d33893192056dde74b26b2467f983c102cChristian Maeder addImports((including 'CONFIGURATION . including 'CONFIGURATION+ .),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder emptyOModule),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder DB) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq procModule2(T, 'fth_is_endfth[T', T''], DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = procModule3(T, T', T'', emptyFTheory, DB) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq procModule2(T, 'th_is_endth[T', T''], DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = procModule3(T, T', T'', emptySTheory, DB) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq procModule2(T, 'oth_is_endoth[T', T''], DB)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = procModule3(T, T', T'',
473b81d33893192056dde74b26b2467f983c102cChristian Maeder addImports((including 'CONFIGURATION . including 'CONFIGURATION+ .),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder emptyOTheory),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder DB) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq procModule2('fmod_is_endfm[T, T'], DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = procModule3(T, T', emptyFModule, DB) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq procModule2('obj_is_endo[T, T'], DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = procModule3(T, T', emptyFModule, DB) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq procModule2('obj_is_jbo[T, T'], DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = procModule3(T, T', emptyFModule, DB) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq procModule2('mod_is_endm[T, T'], DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = procModule3(T, T', emptySModule, DB) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq procModule2('omod_is_endom[T, T'], DB)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = procModule3(T, T',
473b81d33893192056dde74b26b2467f983c102cChristian Maeder addImports((including 'CONFIGURATION+ .),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder emptyOModule),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder DB) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq procModule2('fth_is_endfth[T, T'], DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = procModule3(T, T', emptyFTheory, DB) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq procModule2('th_is_endth[T, T'], DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = procModule3(T, T', emptySTheory, DB) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq procModule2('oth_is_endoth[T, T'], DB)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = procModule3(T, T',
473b81d33893192056dde74b26b2467f983c102cChristian Maeder addImports((including 'CONFIGURATION+ .),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder emptyOTheory),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder DB) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder *** procModule3 evaluates the name of the module and calls procModule4
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** with the declarations, two empty units (one to contain the declarations
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** with bubbles and another one the declarations without bubbles), and
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** a set of op decls initialy empty in which to store the variables
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq procModule3(T, 'token[T'], T'', U, DB)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = procModule4(T, T'', setName(U, QI), setName(U, QI), none, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if QI := downQid(T') .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq procModule3(T, '_`{_`}['token[T'], T''], T3, U, DB)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = procModule4(T, T3, setPars(setName(U, QI), parseParList(T'')),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder setName(U, QI), none, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if QI := downQid(T') .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq procModule3('token[T], T', U, DB)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = procModule4(T', setName(U, QI), setName(U, QI), none, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if QI := downQid(T) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq procModule3('_`{_`}['token[T], T'], T'', U, DB)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = procModule4(T'', setPars(setName(U, QI), parseParList(T')),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder setName(U, QI), none, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if QI := downQid(T) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** procModule4 parses one by one each of the declarations in the module.
473b81d33893192056dde74b26b2467f983c102cChristian Maeder *** Note that is parseDecl that adds the parsed declaration to the right
473b81d33893192056dde74b26b2467f983c102cChristian Maeder *** place. When it is done, it calls evalPreModule with the resulting
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** preModule-unit-vars triple.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq procModule4(T, '__[T', T''], PU, U, VDS, DB)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = procModule4(T, T'', preModule(PDR), unit(PDR), vars(PDR), DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if PDR := parseDecl(T', PU, U, VDS) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq procModule4(T, F[TL], PU, U, VDS, DB)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = evalPreModule(preModule(PDR), unit(PDR), vars(PDR),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder insTermModule(getName(U), T, DB))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder if F =/= '__
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder /\ PDR := parseDecl(F[TL], PU, U, VDS) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq procModule4(T, T', unitError(QIL), V:[Module], V:[OpDeclSet], DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = warning(DB, QIL) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq procModule4(T, T', V:[Module], unitError(QIL), V:[OpDeclSet], DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = warning(DB, QIL) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq procModule4(T, T', V:[Module], V':[Module], opDeclError(QIL), DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = warning(DB, QIL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq procModule4('__[T, T'], PU, U, VDS, DB)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = procModule4(T', preModule(PDR), unit(PDR), vars(PDR), DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if PDR := parseDecl(T, PU, U, VDS) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq procModule4(F[TL], PU, U, VDS, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = evalPreModule(preModule(PDR), unit(PDR), vars(PDR), DB)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder if F =/= '__
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder /\ PDR := parseDecl(F[TL], PU, U, VDS) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq procModule4(T, unitError(QIL), U, VDS, DB) = warning(DB, QIL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq procModule4(T, PU, unitError(QIL), VDS, DB) = warning(DB, QIL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq procModule4(T, PU, U, opDeclError(QIL), DB) = warning(DB, QIL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederendfm
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*******************************************************************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder***
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** 8.3.2 View Processing
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder***
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** A similar process is followed for views. Note that in case of operator
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** maps going to derived terms we have bubbles, which will have to be treated
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** using the signatures of the appropriate modules.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederfmod VIEW-PROCESSING is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr UNIT-PROCESSING .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr VIEW-DECL-PARSING .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr VIEW-BUBBLE-PARSING .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars QI X F : Qid .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var QIL : QidList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars T T' T'' T3 T4 : Term .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var M : Module .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var VE : ViewExp .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars PV PV' : PreView .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars ME ME' : ModuleExpression .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars DB DB' : Database .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars OPDS VDS VDS' VDS'' : OpDeclSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var MDS : MsgDeclSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var TL : TermList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars PDL PDL' : ParameterDeclList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var H : Header .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var IL : ImportList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var PVMAPS : Set{PreViewMap} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** As the functions \texttt{getThSorts} and \texttt{getThClasses}
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** presented in Section~\ref{instantiation}, the functions
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \texttt{getThOpDeclSet} and \texttt{getThMsgDeclSet} return, respectively,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** the set of declarations of operators, and the set of declarations of
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** messages in the theory part of the structure of the module given as
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** argument.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op getThOpDeclSet : Header Database -> OpDeclSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op getThMsgDeclSet : Header Database -> MsgDeclSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op getThOpDeclSetAux : ImportList Database -> OpDeclSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op getThMsgDeclSetAux : ImportList Database -> MsgDeclSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getThOpDeclSet(ME, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if theory(getTopModule(ME, DB))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder then (getThOpDeclSetAux(getImports(getTopModule(ME, DB)), DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder getOps(getTopModule(ME, DB)))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else none
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getThOpDeclSetAux(((including ME .) IL), DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (getThOpDeclSet(ME, DB) getThOpDeclSetAux(IL, DB)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getThOpDeclSetAux(((extending ME .) IL), DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (getThOpDeclSet(ME, DB) getThOpDeclSetAux(IL, DB)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getThOpDeclSetAux(((protecting ME .) IL), DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (getThOpDeclSet(ME, DB) getThOpDeclSetAux(IL, DB)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getThOpDeclSetAux(nil, DB) = none .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getThMsgDeclSet(ME, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if theory(getTopModule(ME, DB))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder then (getThMsgDeclSetAux(getImports(getTopModule(ME, DB)), DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder getMsgs(getTopModule(ME, DB)))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else none
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getThMsgDeclSetAux(((including ME .) IL), DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (getThMsgDeclSet(ME, DB) getThMsgDeclSetAux(IL, DB)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getThMsgDeclSetAux(((extending ME .) IL), DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (getThMsgDeclSet(ME, DB) getThMsgDeclSetAux(IL, DB)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getThMsgDeclSetAux(((protecting ME .) IL), DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (getThMsgDeclSet(ME, DB) getThMsgDeclSetAux(IL, DB)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getThMsgDeclSetAux(nil, DB) = none .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** The processing of terms representing previews accomplished by the function
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \texttt{procView} is quite similar to the one accomplished by
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \texttt{procModule} on terms representing preunits. The algorithms followed
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** are also quite similar. Both proceed recursively on the list of
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** declarations, accumulating them in a preunit or in a preview.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** The solving of bubbles in views requires the signatures of the source and
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** target units extended, respectively, with the declarations of variables in
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** the view and with the mappings of these declarations. As we shall see in
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** Section~\ref{databaseADT}, the signatures of the built-in modules are not
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** accesible at the metalevel, and thus built-in modules cannot be used
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** directly as arguments of built-in functions. Thus, to be able to use them
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** as targTS of views, a `dummy' module is created importing the
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** corresponding predefined module. The source and target module expressions
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** of the view are evaluated before the view processing itself starts.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** As we saw in Section~\ref{view-decl-parsing}, parsing of terms representing
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** operator and message maps requires the set of operator and message
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** declarations in the theory part of the source theory.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op procPars : ParameterDeclList Database -> Database .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq procPars((X :: ME, PDL), DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = procPars(PDL, createCopy((X :: ME), database(evalModExp(ME, DB)))) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq procPars((nil).ParameterDeclList, DB) = DB .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op procView : Term Database -> Database .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op procView2 : Term Database -> Database .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op procView : Term PreView Database -> Database .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op procViewAux :
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder Term PreView OpDeclSet MsgDeclSet Module Database -> Database .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq procView(QI, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = procView2(getTermView(QI, DB), DB) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq procView2('view_from_to_is_endv['token[T], T', T'', T3], DB)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = procView(T3,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder emptyPreView(downQid(T), parseModExp(T'), parseModExp(T'')),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder DB) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq procView2('view_from_to_is_endv['_`{_`}['token[T], T'], T'', T3, T4], DB)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = procView(T4,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder setPars(
473b81d33893192056dde74b26b2467f983c102cChristian Maeder emptyPreView(downQid(T), parseModExp(T''), parseModExp(T3)),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder parseParList(T')),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder procPars(parseParList(T'), DB)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq procView('view_from_to_is_endv['token[T], T', T'', T3], DB)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = procView(T3,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder emptyPreView(downQid(T), parseModExp(T'), parseModExp(T'')),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder insertTermView(downQid(T),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder 'view_from_to_is_endv['token[T], T', T'', T3], DB)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq procView('view_from_to_is_endv['_`{_`}['token[T], T'], T'', T3, T4], DB)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = procView(T4,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder setPars(
473b81d33893192056dde74b26b2467f983c102cChristian Maeder emptyPreView(downQid(T), parseModExp(T''), parseModExp(T3)),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder parseParList(T')),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder procPars(parseParList(T'),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder insertTermView(downQid(T),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder 'view_from_to_is_endv['_`{_`}['token[T], T'], T'', T3, T4],
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder DB))) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq procView(T, PV, DB)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = procViewAux(T, PV,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder getThOpDeclSet(ME, DB'),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder getThMsgDeclSet(ME, DB'),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder getFlatModule(ME, DB'),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder DB')
473b81d33893192056dde74b26b2467f983c102cChristian Maeder if preview_from_to_is__endpv(VE, ME, ME', none, none) := PV
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder /\ DB' := database(evalModExp(ME', nil, database(evalModExp(ME, nil, DB)))) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq procView(T, PV, DB)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = procViewAux(T, PV,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder getThOpDeclSet(ME, DB':[Database]),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder getThMsgDeclSet(ME, DB':[Database]),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder getFlatModule(ME, DB':[Database]),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder DB':[Database])
473b81d33893192056dde74b26b2467f983c102cChristian Maeder if preview_from_to_is__endpv(VE{PDL}, ME, ME', none, none) := PV
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder /\ DB':[Database] := database(evalModExp(ME', PDL, database(evalModExp(ME, PDL, DB)))) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq procViewAux('none.ViewDeclSet, preview_from_to_is__endpv(VE{PDL}, ME, ME', VDS, PVMAPS), OPDS, MDS, M, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = insertView(view VE{PDL} from ME to ME' is none endv, DB) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq procViewAux('none.ViewDeclSet, preview_from_to_is__endpv(VE, ME, ME', VDS, PVMAPS), OPDS, MDS, M, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = insertView(view VE from ME to ME' is none endv, DB) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq procViewAux('__[T, T'], PV, OPDS, MDS, M, DB)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder *** - OPDS and MDS are, respectively, the set of operation and
473b81d33893192056dde74b26b2467f983c102cChristian Maeder *** message declarations in the theory part of the source.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** - M is the signature of the source theory.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = procViewAux(T', parseDecl(T, PV, OPDS, MDS, M), OPDS, MDS, M, DB) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq procViewAux(F[TL], PV, OPDS, MDS, M, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = insertView(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder view VE{PDL} from ME to ME' is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder solveBubbles(
473b81d33893192056dde74b26b2467f983c102cChristian Maeder PVMAPS,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder VDS, VDS',
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder addOps(VDS, M),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder addOps(VDS', getFlatModule(ME', DB)))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder endv,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder DB)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder if F =/= '__
473b81d33893192056dde74b26b2467f983c102cChristian Maeder /\ preview_from_to_is__endpv(VE{PDL}, ME, ME', VDS, PVMAPS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder := parseDecl(F[TL], PV, OPDS, MDS, M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder /\ VDS' := applyMapsToOps(sortMaps(PVMAPS), none, VDS, M) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq procViewAux(F[TL], PV, OPDS, MDS, M, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = insertView(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder view VE from ME to ME' is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder solveBubbles(
473b81d33893192056dde74b26b2467f983c102cChristian Maeder PVMAPS,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder VDS, VDS',
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder addOps(VDS, M),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder addOps(VDS', getFlatModule(ME', DB)))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder endv,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder DB)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder if F =/= '__
473b81d33893192056dde74b26b2467f983c102cChristian Maeder /\ preview_from_to_is__endpv(VE, ME, ME', VDS, PVMAPS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder := parseDecl(F[TL], PV, OPDS, MDS, M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder /\ VDS' := applyMapsToOps(sortMaps(PVMAPS), none, VDS, M) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq procViewAux(T, PV, OPDS, MDS, unitError(QIL), DB) = warning(DB, QIL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederendfm
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*******************************************************************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder***
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** 8.3.3 Command Processing
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder***
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** The function \texttt{procCommand} only handles the \texttt{reduce},
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \texttt{rewrite}, and \texttt{down} commands. The other commands are
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** directly evaluated by the rules for the top-level handling of the
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** database (see Section~\ref{database-handling}). The \texttt{procCommand}
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** function takes a term, which represents one of these commands, the name of
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** the default module, and a database. The result is a list of quoted
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** identifiers representing the result of the evaluation of the command that
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** will be placed in the read-eval-print loop to be printed in the terminal.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** The \texttt{reduce} and \texttt{rewrite} commands are basically evaluated
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** calling the built-in functions \texttt{metaReduce} and
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \texttt{metaRewrite}, respectively. These functions are called with the
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** appropriate modules. In the case of commands in which an explicit module
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** is not specified the default module is used.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** The preparation of the output for these functions becomes more complex
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** when the \texttt{down} command is used. To deal with the \texttt{down}
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** command, an auxiliary function \texttt{procCommand2} is introduced,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** returning the term resulting from the evaluation of the command.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederfmod COMMAND-PROCESSING is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr UNIT-PROCESSING .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr UNIT-META-PRETTY-PRINT .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder inc (2TUPLE * (op `(_`,_`) to <<_;_>>,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op p1_ to getDatabase,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op p2_ to getQidList)) {Database, QidList} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr META-FULL-MAUDE-SIGN .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder pr META-NARROWING-SEARCH * (op addOps to addOpsSE, op addEqs to addEqsSE, op addSorts to addSortsSE) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq getDatabase(<< DB ; qidError(QIL) >>) = warning(DB, QIL) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq getQidList(<< DB ; qidError(QIL) >>) = QIL .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op {_,_} : Term Type ~> ResultPair [ctor] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op {_,_,_} : Term Type Substitution ~> ResultTriple [ctor] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op {_,_,_,_} : Term Type Substitution Context ~> Result4Tuple [ctor] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op {_,_} : Substitution Context ~> MatchPair [ctor] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** projection functions (from prelude.maude)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op getTerm : ResultPair ~> Term .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getTerm({T:[Term], T':[Type]}) = T:[Term] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op getType : ResultPair ~> Type .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getType({T:[Term], T':[Type]}) = T':[Type] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op getTerm : ResultTriple ~> Term .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getTerm({T:[Term], T':[Type], S:[Substitution]}) = T:[Term] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op getType : ResultTriple ~> Type .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getType({T:[Term], T':[Type], S:[Substitution]}) = T':[Type] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op gTSubstitution : ResultTriple ~> Substitution .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq gTSubstitution({T:[Term], T':[Type], S:[Substitution]})
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = S:[Substitution] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op getTerm : Result4Tuple ~> Term .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getTerm({T:[Term], T':[Type], S:[Substitution], C:[Context]}) = T:[Term] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op getType : Result4Tuple ~> Type .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getType({T:[Term], T':[Type], S:[Substitution], C:[Context]}) = T':[Type] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op gTSubstitution : Result4Tuple ~> Substitution .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq gTSubstitution({T:[Term], T':[Type], S:[Substitution], C:[Context]})
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = S:[Substitution] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op getContext : Result4Tuple ~> Context .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq getContext({T:[Term], T':[Type], S:[Substitution], C:[Context]})
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = C:[Context] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op gTSubstitution : MatchPair ~> Substitution .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq gTSubstitution({S:[Substitution], C:[Context]}) = S:[Substitution] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op getContext : MatchPair ~> Context .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getContext({S:[Substitution], C:[Context]}) = C:[Context] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars T T' T'' T''' : Term .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var TL : TermList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars DB DB' DB'' : Database .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var DB? : [Database] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars M M' : Module .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var M? : [Module] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars ME ME' : ModuleExpression .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars H H' : Header .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars MNS MNS' MNS'' MNS3 MNS4 : Set{ModuleName} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var VE : ViewExp .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var VES : Set{ViewExp} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars N I J : Nat .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var I? : [Nat] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars D D' : Bound .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var D? : [Bound] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var B : Bool .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var B? : [Bool] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars MIS MIS' : Set{ModuleInfo} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var VIS : Set{ViewInfo} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars PDS PDS' : Set{ParameterDecl} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var QIL : QidList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var SS : SortSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var SSDS : SubsortDeclSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars VS VDS OPDS : OpDeclSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var OPDS? : [OpDeclSet] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var MAS : MembAxSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var EqS : EquationSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var RlS : RuleSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars QI QI' F V O : Qid .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var Ct : Constant .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var IL : ImportList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var TM : [Tuple{Term,Module,Bool,OpDeclSet,Database}] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var TMVB : [Tuple{Term,Module,Bool,OpDeclSet,Bound,Database}] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var TMVBN : [Tuple{Term,Module,OpDeclSet,Bound,Nat}] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var T? : [Term] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var RP : [ResultPair] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var RT : [ResultTriple] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var Sb? : [Substitution] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var MP? : [MatchPair] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var CD : Condition .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var Sb : Substitution .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var UP? : [UnificationPair] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var UP : UnificationProblem .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder---- sorts Tuple{Term,Module,Bool,OpDeclSet,Database}
473b81d33893192056dde74b26b2467f983c102cChristian Maeder---- Tuple{Term,Module,Bool,OpDeclSet,Bound,Database}
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- Tuple{Term,Module,OpDeclSet,Bound,Nat} .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder---- op `{_`,_`,_`,_`,_`} : Term Module Bool OpDeclSet Database
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- -> Tuple{Term,Module,Bool,OpDeclSet,Database} .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder---- op `{_`,_`,_`,_`,_`,_`} : Term Module Bool OpDeclSet Bound Database
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- -> Tuple{Term,Module,Bool,OpDeclSet,Bound,Database} .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder---- op `{_`,_`,_`,_`,_`} : Term Module OpDeclSet Bound Nat
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- -> Tuple{Term,Module,OpDeclSet,Bound,Nat} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op tupleTMBODerror : QidList -> [Tuple{Term,Module,Bool,OpDeclSet,Database}] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op tupleTMBOBDerror : QidList -> [Tuple{Term,Module,Bool,OpDeclSet,Bound,Database}] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op tupleTMOBNerror : QidList -> [Tuple{Term,Module,OpDeclSet,Bound,Nat}] .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder pr 5TUPLE{Term,Module,Bool,OpDeclSet,Database}
473b81d33893192056dde74b26b2467f983c102cChristian Maeder * (op ((_,_,_,_,_)) to `{_`,_`,_`,_`,_`},
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op p1_ to getTerm,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op p2_ to getModule,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op p3_ to getBool,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op p4_ to getVars,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op p5_ to getDatabase) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder pr 6TUPLE{Term,Module,Bool,OpDeclSet,Bound,Database}
473b81d33893192056dde74b26b2467f983c102cChristian Maeder * (op ((_,_,_,_,_,_)) to `{_`,_`,_`,_`,_`,_`},
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op p1_ to getTerm,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op p2_ to getModule,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op p3_ to getBool,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op p4_ to getVars,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op p5_ to getBound,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op p6_ to getDatabase) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder pr 5TUPLE{Term,Module,OpDeclSet,Bound,Nat}
473b81d33893192056dde74b26b2467f983c102cChristian Maeder * (op ((_,_,_,_,_)) to `{_`,_`,_`,_`,_`},
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op p1_ to getTerm,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op p2_ to getModule,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op p3_ to getVars,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op p4_ to getBound,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op p5_ to getNat) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op boundError : QidList -> [Bound] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- op getTerm : Tuple{Term,Module,Bool,OpDeclSet,Database} ~> Term .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- op getModule : Tuple{Term,Module,Bool,OpDeclSet,Database} ~> Module .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- op getVars : Tuple{Term,Module,Bool,OpDeclSet,Database} ~> OpDeclSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- op getBool : Tuple{Term,Module,Bool,OpDeclSet,Database} ~> Bool .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- op getDatabase : Tuple{Term,Module,Bool,OpDeclSet,Database} ~> Database .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- op getTerm : Tuple{Term,Module,Bool,OpDeclSet,Bound,Database} ~> Term .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- op getModule : Tuple{Term,Module,Bool,OpDeclSet,Bound,Database} ~> Module .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- op getVars : Tuple{Term,Module,Bool,OpDeclSet,Bound,Database} ~> OpDeclSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- op getBound : Tuple{Term,Module,Bool,OpDeclSet,Bound,Database} ~> Bound .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- op getBool : Tuple{Term,Module,Bool,OpDeclSet,Bound,Database} ~> Bool .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- op getDatabase : Tuple{Term,Module,Bool,OpDeclSet,Bound,Database} ~> Database .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- op getTerm : Tuple{Term,Module,OpDeclSet,Bound,Nat} ~> Term .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- op getModule : Tuple{Term,Module,OpDeclSet,Bound,Nat} ~> Module .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- op getVars : Tuple{Term,Module,OpDeclSet,Bound,Nat} ~> OpDeclSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- op getBound : Tuple{Term,Module,OpDeclSet,Bound,Nat} ~> Bound .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- op getNat : Tuple{Term,Module,OpDeclSet,Bound,Nat} ~> Nat .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- eq {qidError(QIL), M?, B?, OPDS?, DB?} = tupleTMBODerror(QIL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- eq {qidError(QIL), M?, B?, OPDS?, D?, DB?} = tupleTMBOBDerror(QIL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- eq {qidError(QIL), M?, OPDS?, D?, I?} = tupleTMOBNerror(QIL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getTerm({T, M, B, VDS, DB}) = T .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getTerm(tupleTMBODerror(QIL)) = qidError(QIL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getModule({T, M, B, VDS, DB}) = M .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getModule(tupleTMBODerror(QIL)) = unitError(QIL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getVars({T, M, B, VDS, DB}) = VDS .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getVars(tupleTMBODerror(QIL)) = opDeclError(QIL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getBool({T, M, B, VDS, DB}) = B .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getBool(tupleTMBODerror(QIL)) = false .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getDatabase({T, M, B, VDS, DB}) = DB .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getDatabase(tupleTMBODerror(QIL)) = emptyDatabase .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getTerm({T, M, B, VDS, D, DB}) = T .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- eq getTerm(error(QIL)) = qidError(QIL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getModule({T, M, B, VDS, D, DB}) = M .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- eq getModule(error(QIL)) = unitError(QIL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getVars({T, M, B, VDS, D, DB}) = VDS .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- eq getVars(error(QIL)) = opDeclError(QIL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getBound({T, M, B, VDS, D, DB}) = D .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- eq getBound(error(QIL)) = boundError(QIL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getBool({T, M, B, VDS, D, DB}) = B .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- eq getBool(error(QIL)) = false .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getDatabase({T, M, B, VDS, D, DB}) = DB .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- eq getDatabase(error(QIL)) = emptyDatabase .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getTerm({T, M, VDS, D, I}) = T .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- eq getTerm(error(QIL)) = qidError(QIL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getModule({T, M, VDS, D, I}) = M .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- eq getModule(error(QIL)) = unitError(QIL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getVars({T, M, VDS, D, I}) = VDS .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- eq getVars(error(QIL)) = opDeclError(QIL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getBound({T, M, VDS, D, I}) = D .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- eq getBound(error(QIL)) = boundError(QIL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getNat({T, M, VDS, D, I}) = I .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- eq getNat(error(QIL)) = numberError(QIL) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ---- procLoad
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op procLoad : Term ModuleExpression Database -> Tuple{Database,QidList} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op procLoad : Term ModuleExpression Module OpDeclSet Database -> Tuple{Database,QidList} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq procLoad(T, ME, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if compiledModule(ME, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then procLoad(T, ME, getFlatModule(ME, DB), getVars(ME, DB), DB)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder else procLoad(T, modExp(evalModExp(ME, DB)),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder getFlatModule(modExp(evalModExp(ME, DB)),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder database(evalModExp(ME, DB))),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder getVars(modExp(evalModExp(ME, DB)), database(evalModExp(ME, DB))),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder database(evalModExp(ME, DB)))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder fi
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq procLoad(T, ME, M, VDS, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if downTerm(T:[Term], emptyFModule) =/= emptyFModule
473b81d33893192056dde74b26b2467f983c102cChristian Maeder then << evalModule(downModule(T:[Term]), none, DB) ; 'Introduced 'module header2Qid(getName(downModule(T:[Term]))) '\n >>
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else << DB ; '\r 'Error: '\o 'Incorrect 'metamodule. '\n >>
473b81d33893192056dde74b26b2467f983c102cChristian Maeder fi
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if T:[Term] := getTerm(metaReduce(M, solveBubbles(T, M, true, VDS, DB))) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq procLoad(T, ME, M, VDS, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if downModule(getTerm(metaReduce(M, solveBubbles(T, M, true, VDS, DB)))) :: Module
473b81d33893192056dde74b26b2467f983c102cChristian Maeder then << evalModule(downModule(getTerm(metaReduce(M, solveBubbles(T, M, true, VDS, DB)))), none, DB) ;
473b81d33893192056dde74b26b2467f983c102cChristian Maeder 'Introduced 'module header2Qid(getName(downModule(getTerm(metaReduce(M, solveBubbles(T, M, true, VDS, DB)))))) '\n >>
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else << DB ; '\r 'Error: '\o 'Incorrect 'metamodule. '\n >>
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ---- procCommand
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op procCommand : Term ModuleExpression Database -> Tuple{Database,QidList} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op procCommand : Term ModuleExpression Module OpDeclSet Database -> QidList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op procDownCommand : Term ModuleExpression Database -> Tuple{Database,QidList} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op procParse : ModuleExpression Module Term OpDeclSet Database -> QidList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op procRed : ModuleExpression Module Term OpDeclSet Database -> QidList .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op solveBubblesRed : Term Module Bool OpDeclSet Database
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder -> [Tuple{Term,Module,Bool,OpDeclSet,Database}] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op solveBubblesRed2 : Term Database -> [Tuple{Term,Module,Bool,OpDeclSet,Database}] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op solveBubblesRed3 : Term Module ModuleExpression OpDeclSet Database -> [Tuple{Term,Module,Bool,OpDeclSet,Database}] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op procRew : ModuleExpression Module Term OpDeclSet Database -> QidList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op solveBubblesRew : Term Module Bool Bound OpDeclSet Database -> [Tuple{Term,Module,Bool,OpDeclSet,Bound,Database}] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op solveBubblesRew2 : Term Module Bool OpDeclSet Database -> [Tuple{Term,Module,Bool,OpDeclSet,Bound,Database}] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op procFrew : ModuleExpression Module Term Bound Nat OpDeclSet Database -> QidList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op solveBubblesFrew : Term Module Bool Bound Nat OpDeclSet Database -> [Tuple{Term,Module,OpDeclSet,Bound,Nat}] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op solveBubblesFrew2 : Term Module Bool Nat OpDeclSet Database -> [Tuple{Term,Module,OpDeclSet,Bound,Nat}] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op procSearch : ModuleExpression Module Term Term Qid Bound Bound OpDeclSet Database -> QidList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op solveBubblesSearchL : Module Term Term Qid Bound Bound Bool OpDeclSet Database -> QidList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op solveBubblesSearchL1 : Module Term Term Qid Bound Bound Bool OpDeclSet Database -> QidList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op solveBubblesSearchR : Module Term Term Qid Bound Bound Bool OpDeclSet Database -> QidList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op solveBubblesSearchR1 : Module Module Term Term Qid Bound Bound Bool OpDeclSet Database -> QidList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op solveBubblesSearchR2 : Module Term Term Qid Bound Bound OpDeclSet -> QidList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op procSearch2 : Module Term Term Condition Qid Bound Bound -> QidList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op procSearch3 : Module Term Term Condition Qid Bound Nat Bound -> QidList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op procNarrowSearch : ModuleExpression Module Term Term Qid Bound Bound OpDeclSet Database -> QidList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op solveBubblesNarrowSearchL : Module Term Term Qid Bound Bound Bool OpDeclSet Database -> QidList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op solveBubblesNarrowSearchL1 : Module Term Term Qid Bound Bound Bool OpDeclSet Database -> QidList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op solveBubblesNarrowSearchR : Module Term Term Qid Bound Bound Bool OpDeclSet Database -> QidList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op solveBubblesNarrowSearchR1 : Module Module Term Term Qid Bound Bound Bool OpDeclSet Database -> QidList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op solveBubblesNarrowSearchR2 : Module Term Term Qid Bound Bound OpDeclSet -> QidList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op procNarrowSearch2 : Module Term Term Condition Qid Bound Bound -> QidList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op procNarrowSearch3 : Module Nat TermList ResultTripleSet -> QidList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op procMatch : ModuleExpression Module Term Term Qid Bound OpDeclSet Database -> QidList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op procMatch2 : Module Term Term Condition Qid Bound -> QidList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op procMatch3 : Module Term Term Condition Qid Bound Nat -> QidList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op solveBubblesMatch : Module Module Term Term Qid Bound Bool OpDeclSet Database ~> QidList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op solveBubblesMatch2 : Module Term Term Qid Bound OpDeclSet ~> QidList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op procUnify : ModuleExpression Module Term Bound OpDeclSet Database -> QidList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op procUnify2 : ModuleExpression Module Term Bound OpDeclSet Database -> QidList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op addInfoUnify : Module -> [Module] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op parseUnify : Term OpDeclSet -> UnificationProblem .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op procUnify2 : Module UnificationProblem Bound -> QidList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op eMetaPrettyPrint : Module UnificationProblem -> QidList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op procUnify3 : Module UnificationProblem Bound Nat -> QidList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op procUnify3Aux : Module UnificationPair Nat -> QidList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op unificationProblemError : QidList -> [UnificationProblem] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op procIdUnify : ModuleExpression Module Term Bound OpDeclSet Database -> QidList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op addInfoIdUnify : Module -> [Module] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op parseIdUnify : Term OpDeclSet -> UnificationProblem .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op procIdUnify2 : Module UnificationProblem Bound -> QidList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op procIdUnify3 : Module UnificationProblem Nat SubstitutionSet -> QidList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op solveBubblesUnify : Module Term OpDeclSet ~> UnificationProblem .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op solveBubblesRedUnify : Term Module Bool OpDeclSet Database
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder -> [Tuple{Term,Module,Bool,OpDeclSet,Database}] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op solveBubblesRedUnify2 : Term Database -> [Tuple{Term,Module,Bool,OpDeclSet,Database}] .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op solveBubblesRedUnify3 : Term Module ModuleExpression OpDeclSet Database
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder -> [Tuple{Term,Module,Bool,OpDeclSet,Database}] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op procRewUnify : ModuleExpression Module Term OpDeclSet Database -> QidList .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op solveBubblesRewUnify : Term Module Bool Bound OpDeclSet Database
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder -> [Tuple{Term,Module,Bool,OpDeclSet,Bound,Database}] .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op solveBubblesRewUnify2 : Term Module Bool OpDeclSet Database
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder -> [Tuple{Term,Module,Bool,OpDeclSet,Bound,Database}] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op eMetaPrettyPrint : Module Substitution -> QidList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq eMetaPrettyPrint(M, V <- T ; Sb:Substitution)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = V '--> '\s eMetaPrettyPrint(M, T)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if eMetaPrettyPrint(M, Sb:Substitution) == nil
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then nil
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else '; eMetaPrettyPrint(M, Sb:Substitution)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq eMetaPrettyPrint(M, (none).Substitution) = nil .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op procCommandUp : ModuleExpression Module Term OpDeclSet Database -> Term .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op procRedUp : ModuleExpression Module Term OpDeclSet Database -> Term .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op procRewUp : ModuleExpression Module Term Bound OpDeclSet Database -> Term .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op procFrewUp : ModuleExpression Module Term Bound Nat OpDeclSet Database -> Term .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** Processing of commands.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq procDownCommand('down_:_[T, T'], ME, DB)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = if T'':[Term] :: Term
473b81d33893192056dde74b26b2467f983c102cChristian Maeder then << DB'' ;
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ('\b 'result '\o
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder '\s eMetaPrettyPrint(leastSort(M, T'':[Term]))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder '\s '\b ': '\o '\n '\s '\s
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eMetaPrettyPrint(M, T'':[Term]) '\n) >>
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else << DB ; ('\r 'Error: '\o 'Incorrect 'input. '\n) >>
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi
473b81d33893192056dde74b26b2467f983c102cChristian Maeder if DB' := database(evalModExp(ME, DB))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder /\ < DB'' ; ME' > := evalModExp(parseModExp(T), DB')
473b81d33893192056dde74b26b2467f983c102cChristian Maeder /\ M := getFlatModule(ME', DB'')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder /\ T'':[Term] := procCommandUp(ME, getFlatModule(ME, DB''), T', getVars(ME, DB''), DB'').
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq procCommand(T, ME, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if compiledModule(ME, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then << DB ; procCommand(T, ME, getFlatModule(ME, DB), getVars(ME, DB), DB) >>
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else << database(evalModExp(ME, DB)) ;
473b81d33893192056dde74b26b2467f983c102cChristian Maeder procCommand(T, modExp(evalModExp(ME, DB)),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder getFlatModule(modExp(evalModExp(ME, DB)), database(evalModExp(ME, DB))),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder getVars(modExp(evalModExp(ME, DB)), database(evalModExp(ME, DB))),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder database(evalModExp(ME, DB))) >>
473b81d33893192056dde74b26b2467f983c102cChristian Maeder fi
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- eq procCommand(T, ME, unitError(QIL), VS, DB) = qidError(QIL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq procCommand(T, ME, unitError(QIL), VS, DB) = QIL .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq procCommand('parse_.['bubble[T]], ME, M, VS, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = procParse(ME, M, 'bubble[T], VS, DB) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq procCommand('reduce_.['bubble[T]], ME, M, VS, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = procCommand('red_.['bubble[T]], ME, M, VS, DB) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq procCommand('red_.['bubble[T]], ME, M, VS, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = procRed(ME, M, 'bubble[T], VS, DB) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq procCommand('rewrite_.['bubble[T]], ME, M, VS, DB)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = procCommand('rew_.['bubble[T]], ME, M, VS, DB) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq procCommand('rew_.['bubble[T]], ME, M, VS, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = procRew(ME, M, 'bubble[T], VS, DB) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq procCommand('frewrite_.['bubble[T]], ME, M, VS, DB)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = procCommand('frew_.['bubble[T]], ME, M, VS, DB) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq procCommand('frew_.['bubble[T]], ME, M, VS, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = procFrew(ME, M, 'bubble[T], unbounded, 1, VS, DB) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq procCommand('search_=>1_.['bubble[T], 'bubble[T']], ME, M, VS, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = procSearch(ME, M, 'bubble[T], 'bubble[T'], '+, unbounded, 1, VS, DB) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq procCommand('search_=>*_.['bubble[T], 'bubble[T']], ME, M, VS, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = procSearch(ME, M, 'bubble[T], 'bubble[T'], '*, unbounded, unbounded, VS, DB) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq procCommand('search_=>+_.['bubble[T], 'bubble[T']], ME, M, VS, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = procSearch(ME, M, 'bubble[T], 'bubble[T'], '+, unbounded, unbounded, VS, DB) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq procCommand('search_=>!_.['bubble[T], 'bubble[T']], ME, M, VS, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = procSearch(ME, M, 'bubble[T], 'bubble[T'], '!, unbounded, unbounded, VS, DB) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq procCommand('search_~>1_.['bubble[T], 'bubble[T']], ME, M, VS, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = procNarrowSearch(ME, M, 'bubble[T], 'bubble[T'], '+, unbounded, 1, VS, DB) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq procCommand('search_~>*_.['bubble[T], 'bubble[T']], ME, M, VS, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = procNarrowSearch(ME, M, 'bubble[T], 'bubble[T'], '*, unbounded, unbounded, VS, DB) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq procCommand('search_~>+_.['bubble[T], 'bubble[T']], ME, M, VS, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = procNarrowSearch(ME, M, 'bubble[T], 'bubble[T'], '+, unbounded, unbounded, VS, DB) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq procCommand('search_~>!_.['bubble[T], 'bubble[T']], ME, M, VS, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = procNarrowSearch(ME, M, 'bubble[T], 'bubble[T'], '!, unbounded, unbounded, VS, DB) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq procCommand('match_<=?_.['bubble[T], 'bubble[T']], ME, M, VS, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = procMatch(ME, M, 'bubble[T], 'bubble[T'], 'match, 0, VS, DB) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq procCommand('xmatch_<=?_.['bubble[T], 'bubble[T']], ME, M, VS, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = procMatch(ME, M, 'bubble[T], 'bubble[T'], 'xmatch, 0, VS, DB) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq procCommand('unify_.['bubble[T]], ME, M, VS, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = procUnify(ME, M, 'bubble[T], unbounded, VS, DB) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq procCommand('id-unify_.['bubble[T]], ME, M, VS, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = procIdUnify(ME, M, 'bubble[T], unbounded, VS, DB) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq procCommandUp(ME, M, 'down_:_[T, T'], VDS, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = downTerm(procCommandUp(ME, M, T', VDS, DB)) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq procCommandUp(ME, M, 'red_.['bubble[T]], VDS, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = downTerm(procRedUp(ME, M, 'bubble[T], VDS, DB)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq procCommandUp(ME, M, 'reduce_.['bubble[T]], VDS, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = downTerm(procRedUp(ME, M, 'bubble[T], VDS, DB)) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq procCommandUp(ME, M, 'rew_.['bubble[T]], VDS, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = downTerm(procRewUp(ME, M, 'bubble[T], unbounded, VDS, DB)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq procCommandUp(ME, M, 'rewrite_.['bubble[T]], VDS, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = downTerm(procRewUp(ME, M, 'bubble[T], unbounded, VDS, DB)) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq procCommandUp(ME, M, 'frew_.['bubble[T]], VDS, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = downTerm(procFrewUp(ME, M, 'bubble[T], unbounded, 0, VDS, DB)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq procCommandUp(ME, M, 'frewrite_.['bubble[T]], VDS, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = downTerm(procFrewUp(ME, M, 'bubble[T], unbounded, 0, VDS, DB)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ceq procRedUp(ME, M, T, VDS, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if metaReduce(getModule(TM), getTerm(TM)) :: ResultPair
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then getTerm(metaReduce(getModule(TM), getTerm(TM)))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else qidError('\r 'Error: '\o 'Incorrect 'command. '\n)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi
473b81d33893192056dde74b26b2467f983c102cChristian Maeder if TM := solveBubblesRed(T, M,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder included('META-MODULE, getImports(getTopModule(ME, DB)), DB),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder VDS, DB) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ceq procRewUp(ME, M, T, D, VDS, DB)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = if metaRewrite(getModule(TMVB), getTerm(TMVB), getBound(TMVB))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder :: ResultPair
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then getTerm(metaRewrite(getModule(TMVB), getTerm(TMVB), getBound(TMVB)))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else qidError('\r 'Error: '\o 'Incorrect 'command. '\n)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi
473b81d33893192056dde74b26b2467f983c102cChristian Maeder if TMVB := solveBubblesRew(T, M,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder included('META-MODULE, getImports(getTopModule(ME, DB)), DB),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder D, VDS, DB) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ceq procFrewUp(ME, M, T, D, I, VDS, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if metaFrewrite(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder getModule(TMVBN), getTerm(TMVBN), getBound(TMVBN), getNat(TMVBN))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder :: ResultPair
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then getTerm(
473b81d33893192056dde74b26b2467f983c102cChristian Maeder metaFrewrite(getModule(TMVBN), getTerm(TMVBN),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder getBound(TMVBN), getNat(TMVBN)))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else qidError('\r 'Error: '\o 'Incorrect 'command. '\n)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi
473b81d33893192056dde74b26b2467f983c102cChristian Maeder if TMVBN := solveBubblesFrew(T, M,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder included('META-MODULE, getImports(getTopModule(ME, DB)), DB),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder D, I, VDS, DB) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq procParse(ME, M, T, VDS, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if leastSort(getModule(TM), getTerm(TM)) :: Type
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then (eMetaPrettyPrint(leastSort(getModule(TM), getTerm(TM)))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder '\s '\b ': '\o '\n '\s '\s
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eMetaPrettyPrint(getModule(TM), getTerm(TM)) '\n)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else getMsg(getTerm(TM))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi
473b81d33893192056dde74b26b2467f983c102cChristian Maeder if TM := solveBubblesRed(T, M,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder included('META-MODULE, getImports(getTopModule(ME, DB)), DB),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder VDS, DB) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq procParse(ME, unitError(QIL), T, VDS, DB) = QIL .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq procParse(ME, noModule, T, VDS, DB) = getMsg(DB) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq procRed(ME, M, T, VDS, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if metaReduce(getModule(TM), getTerm(TM)) :: ResultPair
473b81d33893192056dde74b26b2467f983c102cChristian Maeder then ('\b 'reduce 'in
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder '\o eMetaPrettyPrint(getName(getModule(TM))) '\b ': '\o '\n '\s '\s
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eMetaPrettyPrint(getModule(TM), getTerm(TM)) '\n
473b81d33893192056dde74b26b2467f983c102cChristian Maeder '\b 'result '\o '\s
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eMetaPrettyPrint(getType(metaReduce(getModule(TM), getTerm(TM))))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder '\s '\b ': '\o '\n '\s '\s
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eMetaPrettyPrint(getModule(TM),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder getTerm(metaReduce(getModule(TM), getTerm(TM))))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder '\n)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else getMsg(getTerm(metaReduce(getModule(TM), getTerm(TM))))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder fi
473b81d33893192056dde74b26b2467f983c102cChristian Maeder if TM := solveBubblesRed(T, M,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder included('META-MODULE, getImports(getTopModule(ME, DB)), DB),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder VDS, DB) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq procRed(ME, unitError(QIL), T, VDS, DB) = QIL .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq procRed(ME, noModule, T, VDS, DB) = getMsg(DB) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq metaReduce(unitError(QIL), T) = {qidError(QIL), '`[Term`]} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq metaReduce(U:[Module], qidError(QIL)) = {qidError(QIL), '`[Term`]} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ceq solveBubblesRed('bubble[QI], M, B, VDS, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if T? :: Term
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then {T?, M, B, VDS, DB}
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else tupleTMBODerror('\r 'Error: '\o 'no 'parse 'for downQidList(QI) '\n)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder fi
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if T? := solveBubbles('bubble[QI], M, B, VDS, DB) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ceq solveBubblesRed('bubble['__[TL]], M, B, VDS, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if T? :: Term
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then {T?, M, B, VDS, DB}
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else if metaParse(GRAMMAR-RED, downQidList('__[TL, ''..Qid]), '@RedInPart@) :: ResultPair
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then solveBubblesRed2(
473b81d33893192056dde74b26b2467f983c102cChristian Maeder getTerm(metaParse(GRAMMAR-RED, downQidList('__[TL, ''..Qid]), '@RedInPart@)),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else tupleTMBODerror(
473b81d33893192056dde74b26b2467f983c102cChristian Maeder '\r 'Warning: '\o
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder printSyntaxError(
473b81d33893192056dde74b26b2467f983c102cChristian Maeder metaParse(GRAMMAR-RED, downQidList('__[TL, ''..Qid]),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder '@RedInPart@), downQidList('__[TL, ''..Qid])) '\n
473b81d33893192056dde74b26b2467f983c102cChristian Maeder '\r 'Error: '\o
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder 'no 'parse 'for downQidList('__[TL, ''..Qid]) '\n)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi
473b81d33893192056dde74b26b2467f983c102cChristian Maeder fi
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if T? := solveBubbles('bubble['__[TL]], M, B, VDS, DB) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder *** There is some problem parsing 'in_:_ in solveBubblesRed, but it
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** seems to work with the additional '.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ceq solveBubblesRed2('in_:_.[T, T'], DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if unitInDb(ME, DB')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then solveBubblesRed3(T', getFlatModule(ME, DB'), ME, getVars(ME, DB'), DB')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else tupleTMBODerror('\r 'Error: '\o 'It 'is 'not 'possible 'to 'compile eMetaPrettyPrint(ME) '. '\n)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder fi
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if < DB' ; ME > := evalModExp(parseModExp(T), DB) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq solveBubblesRed2('in_:_.[T, T'], DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = tupleTMBODerror('\r 'Error: '\o 'It 'isn't 'possible 'to 'compile eMetaPrettyPrint(parseModExp(T)) '. '\n)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq solveBubblesRed3(T, M, ME, VDS, DB)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = {solveBubbles(T, M,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder included('META-MODULE, getImports(getTopModule(ME, DB)), DB),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder VDS, DB),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder M,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder included('META-MODULE, getImports(getTopModule(ME, DB)), DB),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder VDS,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder DB} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op GRAMMAR-RED : -> FModule [memo] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq GRAMMAR-RED
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = addImports((including 'MOD-EXPRS .),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder addSorts('@RedInPart@,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder addOps((op 'in_:_. : '@ModExp@ '@Bubble@ -> '@RedInPart@ [none] .),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder BUBBLES))) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq procRew(ME, M, T, VDS, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if RP :: ResultPair
473b81d33893192056dde74b26b2467f983c102cChristian Maeder then ('\b 'rewrite 'in '\o eMetaPrettyPrint(getName(getModule(TMVB)))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder '\b ': '\o '\n '\s '\s
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eMetaPrettyPrint(getModule(TMVB), getTerm(TMVB)) '\n
473b81d33893192056dde74b26b2467f983c102cChristian Maeder '\b 'result '\o '\s
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eMetaPrettyPrint(getType(RP))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder '\s '\b ': '\o '\n '\s '\s
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eMetaPrettyPrint(getModule(TMVB), getTerm(RP))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder '\n)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else getMsg(getTerm(TMVB))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder fi
473b81d33893192056dde74b26b2467f983c102cChristian Maeder if TMVB := solveBubblesRew(T, M,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder included('META-MODULE, getImports(getTopModule(ME, DB)), DB),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder unbounded, VDS, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder /\ RP := metaRewrite(getModule(TMVB), getTerm(TMVB), getBound(TMVB)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq procRew(ME, unitError(QIL), T, VDS, DB) = qidError(QIL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq solveBubblesRew('bubble[QI], M, B, D, VDS, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if solveBubbles('bubble[QI], M, B, VDS, DB) :: Term
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then {solveBubbles('bubble[QI], M, B, VDS, DB), M, B, VDS, unbounded, DB}
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else tupleTMBOBDerror(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder '\r 'Error: '\o 'no 'parsing 'for downQidList(QI) '\n)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq solveBubblesRew('bubble['__[TL]], M, B, D, VDS, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if solveBubbles('bubble['__[TL]], M, B, VDS, DB) :: Term
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then {solveBubbles('bubble['__[TL]], M, B, VDS, DB), M, B, VDS, unbounded, DB}
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else if metaParse(GRAMMAR-REW, downQidList('__[TL, ''..Qid]), '@RewNuPart@)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder :: ResultPair
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then solveBubblesRew2(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder getTerm(
473b81d33893192056dde74b26b2467f983c102cChristian Maeder metaParse(GRAMMAR-REW, downQidList('__[TL, ''..Qid]),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder '@RewNuPart@)),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder M, B, VDS, DB)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder else {getTerm(solveBubblesRed('bubble['__[TL]], M, B, VDS, DB)),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder getModule(solveBubblesRed('bubble['__[TL]], M, B, VDS, DB)),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder getBool(solveBubblesRed('bubble['__[TL]], M, B, VDS, DB)),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder getVars(solveBubblesRed('bubble['__[TL]], M, B, VDS, DB)),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder unbounded,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder getDatabase(solveBubblesRed('bubble['__[TL]], M, B, VDS, DB))}
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq solveBubblesRew2('`[_`]_.['token[T], T'], M, B, VDS, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if downNat(downMetaNat(T)) :: Nat
473b81d33893192056dde74b26b2467f983c102cChristian Maeder and-then solveBubblesRed(T', M, B, VDS, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder :: Tuple{Term,Module,Bool,OpDeclSet,Database}
473b81d33893192056dde74b26b2467f983c102cChristian Maeder then {getTerm(solveBubblesRed(T', M, B, VDS, DB)),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder getModule(solveBubblesRed(T', M, B, VDS, DB)),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder getBool(solveBubblesRed(T', M, B, VDS, DB)),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder getVars(solveBubblesRed(T', M, B, VDS, DB)),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder downNat(downMetaNat(T)),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder getDatabase(solveBubblesRed(T', M, B, VDS, DB))}
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else tupleTMBOBDerror(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder '\r 'Error: '\o 'Incorrect 'command. '\n)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op GRAMMAR-REW : -> FModule [memo] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq GRAMMAR-REW
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = addSorts('@RewNuPart@ ; '@Token@ ; '@SortToken@ ; '@ViewToken@ ; '@NeTokenList@ ; '@Bubble@,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder addOps((op '`[_`]_. : '@Token@ '@Bubble@ -> '@RewNuPart@ [none] .),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder BUBBLES)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- eq metaRewrite(fmod QI is IL sorts SS . SSDS OPDS MAS EqS endfm, T, D)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- = metaReduce(fmod QI is IL sorts SS . SSDS OPDS MAS EqS endfm, T) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- eq metaRewrite(M, T, 0) = {T, leastSort(M, T)} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** FREW
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq procFrew(ME, M, T, D, I, VDS, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if RP :: ResultPair
473b81d33893192056dde74b26b2467f983c102cChristian Maeder then ('\b 'frewrite 'in '\o eMetaPrettyPrint(getName(getModule(TMVBN)))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder '\b ': '\o '\n '\s '\s
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eMetaPrettyPrint(getModule(TMVBN), getTerm(TMVBN)) '\n
473b81d33893192056dde74b26b2467f983c102cChristian Maeder '\b 'result '\o '\s eMetaPrettyPrint(getType(RP))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder '\s '\b ': '\o '\n '\s '\s
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eMetaPrettyPrint(getModule(TMVBN), getTerm(RP)) '\n)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else ('\r 'Error: '\o 'Incorrect 'command. '\n)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder fi
473b81d33893192056dde74b26b2467f983c102cChristian Maeder if TMVBN := solveBubblesFrew(T, M,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder included('META-MODULE, getImports(getTopModule(ME, DB)), DB),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder D, I, VDS, DB)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder /\ RP := metaFrewrite(getModule(TMVBN), getTerm(TMVBN),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder getBound(TMVBN), getNat(TMVBN)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq procFrew(ME, unitError(QIL), T, D, I, VDS, DB) = qidError(QIL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq solveBubblesFrew('bubble[QI], M, B, D, I, VDS, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if solveBubbles('bubble[QI], M, B, VDS, DB) :: Term
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then {solveBubbles('bubble[QI], M, B, VDS, DB), M, VDS, unbounded, I}
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else tupleTMOBNerror(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder '\r 'Error: '\o 'no 'parse 'for downQidList(QI) '\n)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq solveBubblesFrew('bubble['__[TL]], M, B, D, I, VDS, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if solveBubbles('bubble['__[TL]], M, B, VDS, DB) :: Term
473b81d33893192056dde74b26b2467f983c102cChristian Maeder then {solveBubbles('bubble['__[TL]], M, B, VDS, DB),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder M, VDS, unbounded, I}
473b81d33893192056dde74b26b2467f983c102cChristian Maeder else if metaParse(GRAMMAR-FREW, downQidList('__[TL, ''..Qid]),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder '@FrewNuPart@)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder :: ResultPair
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then solveBubblesFrew2(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder getTerm(
473b81d33893192056dde74b26b2467f983c102cChristian Maeder metaParse(GRAMMAR-FREW, downQidList('__[TL, ''..Qid]),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder '@FrewNuPart@)),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder M, B, I, VDS, DB)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder else {getTerm(solveBubblesRed('bubble['__[TL]], M, B, VDS, DB)),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder getModule(solveBubblesRed('bubble['__[TL]], M, B, VDS, DB)),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder getVars(solveBubblesRed('bubble['__[TL]], M, B, VDS, DB)),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder unbounded, I}
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder *** There is some problem parsing _ in solveBubblesRed, but it
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** seems to work with the additional '.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq solveBubblesFrew2('`[_`]_.['token[T], T'], M, B, I, VDS, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if downNat(downMetaNat(T)) :: Nat
473b81d33893192056dde74b26b2467f983c102cChristian Maeder and-then solveBubblesRed(T', M, B, VDS, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder :: Tuple{Term,Module,Bool,OpDeclSet,Database}
473b81d33893192056dde74b26b2467f983c102cChristian Maeder then {getTerm(solveBubblesRed(T', M, B, VDS, DB)),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder getModule(solveBubblesRed(T', M, B, VDS, DB)),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder getVars(solveBubblesRed(T', M, B, VDS, DB)),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder downNat(downMetaNat(T)),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder I}
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else tupleTMOBNerror(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder '\r 'Error: '\o 'Incorrect 'command. '\n)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq solveBubblesFrew2('`[_`,_`]_.['token[T], 'token[T'], T''],
473b81d33893192056dde74b26b2467f983c102cChristian Maeder M, B, I, VDS, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if downNat(downMetaNat(T)) :: Nat
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder and-then downNat(downMetaNat(T')) :: Nat
473b81d33893192056dde74b26b2467f983c102cChristian Maeder and-then solveBubblesRed(T'', M, B, VDS, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder :: Tuple{Term,Module,Bool,OpDeclSet,Database}
473b81d33893192056dde74b26b2467f983c102cChristian Maeder then {getTerm(solveBubblesRed(T'', M, B, VDS, DB)),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder getModule(solveBubblesRed(T'', M, B, VDS, DB)),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder getVars(solveBubblesRed(T'', M, B, VDS, DB)),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder downNat(downMetaNat(T)),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder downNat(downMetaNat(T'))}
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else tupleTMOBNerror('\r 'Error: '\o 'Incorrect 'command. '\n)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op GRAMMAR-FREW : -> FModule [memo] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq GRAMMAR-FREW
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = addSorts('@FrewNuPart@ ; '@Token@ ; '@SortToken@ ; '@ViewToken@ ; '@NeTokenList@ ; '@Bubble@,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder addOps(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder (op '`[_`]_. : '@Token@ '@Bubble@ -> '@FrewNuPart@ [none] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op '`[_`,_`]_. : '@Token@ '@Token@ '@Bubble@ -> '@FrewNuPart@ [none] .),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder BUBBLES)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq metaFrewrite(fmod QI is IL sorts SS . SSDS OPDS MAS EqS endfm, T, D, I)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = metaReduce(fmod QI is IL sorts SS . SSDS OPDS MAS EqS endfm, T) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq metaFrewrite(M, T, 0, I) = {T, leastSort(M, T)} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq metaFrewrite(M, T, D, 0) = {T, leastSort(M, T)} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder *** SEARCH
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op GRAMMAR-SEARCH : -> FModule [memo] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq GRAMMAR-SEARCH
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = addSorts('@SearchNuPart@ ; '@Token@ ; '@SortToken@ ; '@ViewToken@ ; '@NeTokenList@ ; '@Bubble@,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder addOps((op '`[_`,_`]_. : '@Token@ '@Token@ '@Bubble@ -> '@SearchNuPart@ [none] .)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder (op '`[`,_`]_. : '@Token@ '@Bubble@ -> '@SearchNuPart@ [none] .),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder BUBBLES)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq procSearch(ME, M, T, T', QI, D, D', VDS, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** D is a bound on the number of solutions, and D' is a bound on the depth of the search
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if solveBubblesRl(T, T', M, B, VDS, DB) :: Term
473b81d33893192056dde74b26b2467f983c102cChristian Maeder then procSearch2(addOps(VDS, M),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder lhs(solveBubblesRl(T, T', M, B, VDS, DB)),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder rhs(solveBubblesRl(T, T', M, B, VDS, DB)), nil, QI, D, D')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else solveBubblesSearchL(M, T, T', QI, D, D', B, VDS, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if B := included('META-MODULE, getImports(getTopModule(ME, DB)), DB) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq solveBubblesSearchL(M, 'bubble[QI], T, QI', D, D', B, VDS, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if solveBubbles('bubble[QI], M, B, VDS, DB) :: Term
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then solveBubblesSearchR(M, solveBubbles('bubble[QI], M, B, VDS, DB), T, QI', D, D', B, VDS, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else ('\r 'Error: '\o 'no 'parsing 'for downQidList(QI) '\n)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq solveBubblesSearchL(M, 'bubble['__[TL]], T, QI, D, D', B, VDS, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if solveBubbles('bubble['__[TL]], M, B, VDS, DB) :: Term
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then solveBubblesSearchR(M, solveBubbles('bubble['__[TL]], M, B, VDS, DB), T, QI, D, D', B, VDS, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else if metaParse(GRAMMAR-SEARCH, downQidList('__[TL, ''..Qid]), '@SearchNuPart@) :: ResultPair
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then solveBubblesSearchL1(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder M,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder getTerm(metaParse(GRAMMAR-SEARCH, downQidList('__[TL, ''..Qid]), '@SearchNuPart@)),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder T, QI, D, D', B, VDS, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else solveBubblesSearchR(
473b81d33893192056dde74b26b2467f983c102cChristian Maeder getModule(solveBubblesRew('bubble['__[TL]], M, B, D, VDS, DB)),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder getTerm(solveBubblesRew('bubble['__[TL]], M, B, D, VDS, DB)),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder T,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder QI,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder getBound(solveBubblesRew('bubble['__[TL]], M, B, D, VDS, DB)),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder D',
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder getBool(solveBubblesRew('bubble['__[TL]], M, B, D, VDS, DB)),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder getVars(solveBubblesRew('bubble['__[TL]], M, B, D, VDS, DB)),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder getDatabase(solveBubblesRew('bubble['__[TL]], M, B, D, VDS, DB)))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq solveBubblesSearchL1(M, '`[`,_`]_.['token[T], T'], T'', QI, D, D', B, VDS, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if downNat(downMetaNat(T)) :: Nat
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder and-then solveBubblesRed(T', M, B, VDS, DB) :: Tuple{Term,Module,Bool,OpDeclSet,Database}
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then solveBubblesSearchR(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder getModule(solveBubblesRed(T', M, B, VDS, DB)),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder getTerm(solveBubblesRed(T', M, B, VDS, DB)),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder T'', QI, D,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder downNat(downMetaNat(T)),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder B,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder getVars(solveBubblesRed(T', M, B, VDS, DB)),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else ('\r 'Error: '\o 'Incorrect 'command. '\n)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq solveBubblesSearchL1(M, '`[_`,_`]_.['token[T], 'token[T'], T''], T''', QI, D, D', B, VDS, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if downNat(downMetaNat(T)) :: Nat
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder and-then downNat(downMetaNat(T')) :: Nat
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder and-then solveBubblesRed(T'', M, B, VDS, DB) :: Tuple{Term,Module,Bool,OpDeclSet,Database}
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then solveBubblesSearchR(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder getModule(solveBubblesRed(T'', M, B, VDS, DB)),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder getTerm(solveBubblesRed(T'', M, B, VDS, DB)),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder T''', QI,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder downNat(downMetaNat(T)),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder downNat(downMetaNat(T')),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder B,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder getVars(solveBubblesRed(T'', M, B, VDS, DB)),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else ('\r 'Error: '\o 'Incorrect 'command. '\n)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq solveBubblesSearchR(M, T, T', QI, D, D', B, VDS, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = solveBubblesSearchR1(
473b81d33893192056dde74b26b2467f983c102cChristian Maeder M,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder addOps(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op '_s.t._. : leastSort(M, T) '@Condition@ -> 'PatternCondition [none] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op '_such`that_. : leastSort(M, T) '@Condition@ -> 'PatternCondition [none] .,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder addSorts('PatternCondition, addInfoConds(M))),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder T,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder T',
473b81d33893192056dde74b26b2467f983c102cChristian Maeder QI,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder D,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder D',
473b81d33893192056dde74b26b2467f983c102cChristian Maeder B,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder VDS,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder DB) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq solveBubblesSearchR(M:[Module], T:[Term], T':[Term], QI:[Qid], D:[Bound], D':[Bound], B:[Bool], VDS:[OpDeclSet], DB:[Database])
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = ('\r 'Error: '\o 'Incorrect 'use 'of 'the 'search 'command. '\n) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq solveBubblesSearchR1(M, M', T, 'bubble[QI], QI', D, D', B, VDS, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if T?:[Term] :: Term
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then procSearch2(M, T, T?:[Term], nil, QI', D, D')
473b81d33893192056dde74b26b2467f983c102cChristian Maeder else ('\r 'Error: '\o 'Incorrect 'use 'of 'the 'search 'command. '\n)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi
473b81d33893192056dde74b26b2467f983c102cChristian Maeder if T?:[Term] := solveBubbles('bubble[QI], M, B, VDS, DB) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq solveBubblesSearchR1(M, M', T, 'bubble['__[TL]], QI, D, D', B, VDS, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if T?:[Term] :: Term
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then procSearch2(M, T, T?:[Term], nil, QI, D, D')
473b81d33893192056dde74b26b2467f983c102cChristian Maeder else if metaParse(M', downQidList('__[TL, ''..Qid]), 'PatternCondition)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder :: ResultPair
473b81d33893192056dde74b26b2467f983c102cChristian Maeder then solveBubblesSearchR2(M, T,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder getTerm(
473b81d33893192056dde74b26b2467f983c102cChristian Maeder metaParse(M', downQidList('__[TL, ''..Qid]),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder 'PatternCondition)),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder QI, D, D', VDS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else '\r 'Error: '\o 'Incorrect 'use 'of 'the 'search 'command. '\n
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi
473b81d33893192056dde74b26b2467f983c102cChristian Maeder fi
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if T?:[Term] := solveBubbles('bubble['__[TL]], M, B, VDS, DB) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq solveBubblesSearchR2(M, T, QI, QI', D, D', VDS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = procSearch2(M, T, constsToVars(QI, VDS), nil, QI', D, D') .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq solveBubblesSearchR2(M, T, F[T], QI, D, D', VDS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = procSearch2(M, T, constsToVars(F[T], VDS), nil, QI, D, D') .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq solveBubblesSearchR2(M, T, F[T', T''], QI, D, D', VDS)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = if F == '_s.t._. or F == '_such`that_.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then procSearch2(M, T, T', parseCond(T'', VDS), QI, D, D')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else procSearch2(M, T, constsToVars(F[T', T''], VDS), nil, QI, D, D')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq solveBubblesSearchR2(M, T, F[T', T'', TL], QI, D, D', VDS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = procSearch2(M, T, constsToVars(F[T', T'', TL], VDS), nil, QI, D, D') .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq procSearch2(M, T, T', CD, QI, D, D')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if RT :: ResultTriple
473b81d33893192056dde74b26b2467f983c102cChristian Maeder then ('search
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if D == unbounded and D' == unbounded
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then nil
473b81d33893192056dde74b26b2467f983c102cChristian Maeder else '\s '`[
473b81d33893192056dde74b26b2467f983c102cChristian Maeder if D == unbounded
473b81d33893192056dde74b26b2467f983c102cChristian Maeder then nil
473b81d33893192056dde74b26b2467f983c102cChristian Maeder else qid(string(D, 10))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if D' == unbounded
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then nil
473b81d33893192056dde74b26b2467f983c102cChristian Maeder else '`, qid(string(D', 10))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder '`] '\s
473b81d33893192056dde74b26b2467f983c102cChristian Maeder fi
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder 'in eMetaPrettyPrint(getName(M)) ':
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eMetaPrettyPrint(M, T) '\s qid("=>" + string(QI)) '\s
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eMetaPrettyPrint(M, T'') '. '\n '\n
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder 'Solution '1 '\n
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if gTSubstitution(RT) == none
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder then 'empty 'substitution '\n '\n
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder else eMetaPrettyPrint(M, gTSubstitution(RT)) '\n '\n
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder procSearch3(M, T, T'', CD, QI, D, 1, D'))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else if RT == failure
473b81d33893192056dde74b26b2467f983c102cChristian Maeder then ('search
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if D == unbounded and D' == unbounded
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then nil
473b81d33893192056dde74b26b2467f983c102cChristian Maeder else '\s '`[
473b81d33893192056dde74b26b2467f983c102cChristian Maeder if D == unbounded
473b81d33893192056dde74b26b2467f983c102cChristian Maeder then nil
473b81d33893192056dde74b26b2467f983c102cChristian Maeder else qid(string(D, 10))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if D' == unbounded
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then nil
473b81d33893192056dde74b26b2467f983c102cChristian Maeder else '`, qid(string(D', 10))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder '`] '\s
473b81d33893192056dde74b26b2467f983c102cChristian Maeder fi
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder 'in eMetaPrettyPrint(getName(M)) ':
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eMetaPrettyPrint(M, T)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder '\s qid("=>" + string(QI)) '\s
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eMetaPrettyPrint(M, T'') '. '\n '\n
473b81d33893192056dde74b26b2467f983c102cChristian Maeder 'No 'solution. '\n)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder else '\r 'Error: '\o 'Incorrect 'use 'of 'the 'search 'command. '\n
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi
473b81d33893192056dde74b26b2467f983c102cChristian Maeder fi
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if T'' := prepSearchPattern(T')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder /\ RT := metaSearch(M, T, T'', CD, QI, D', 0) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq procSearch3(M, T, T', CD, QI, D, I, D')
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = if D == unbounded or-else (D == 0 or-else I < D)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then if metaSearch(M, T, T', CD, QI, D', I) :: ResultTriple
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder then ('Solution qid(string(I + 1, 10)) '\n
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if gTSubstitution(metaSearch(M, T, T', CD, QI, D', I)) == none
473b81d33893192056dde74b26b2467f983c102cChristian Maeder then 'empty 'substitution '\n '\n
473b81d33893192056dde74b26b2467f983c102cChristian Maeder else eMetaPrettyPrint(M,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder gTSubstitution(
473b81d33893192056dde74b26b2467f983c102cChristian Maeder metaSearch(M, T, T', CD, QI, D', I))) '\n '\n
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder procSearch3(M, T, T', CD, QI, D, I + 1, D'))
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder else ('No 'more 'solutions. '\n)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else nil
473b81d33893192056dde74b26b2467f983c102cChristian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** Equal to procSearch except replacing metaSearch by metaNarrowSearch
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq procNarrowSearch(ME, M, T, T', QI, D, D', VDS, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** D is a bound on the number of solutions, and D' is a bound on the depth of the search
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if solveBubblesRl(T, T', M, B, VDS, DB) :: Term
473b81d33893192056dde74b26b2467f983c102cChristian Maeder then procNarrowSearch2(addOps(VDS, M),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder lhs(solveBubblesRl(T, T', M, B, VDS, DB)),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder rhs(solveBubblesRl(T, T', M, B, VDS, DB)), nil, QI, D, D')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else solveBubblesNarrowSearchL(M, T, T', QI, D, D', B, VDS, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if B := included('META-MODULE, getImports(getTopModule(ME, DB)), DB) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq solveBubblesNarrowSearchL(M, 'bubble[QI], T, QI, D, D', B, VDS, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if solveBubbles('bubble[QI], M, B, VDS, DB) :: Term
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then solveBubblesNarrowSearchR(M, solveBubbles('bubble[QI], M, B, VDS, DB), T, QI, D, D', B, VDS, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else ('\r 'Error: '\o 'no 'parsing 'for downQidList(QI) '\n)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq solveBubblesNarrowSearchL(M, 'bubble['__[TL]], T, QI, D, D', B, VDS, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if solveBubbles('bubble['__[TL]], M, B, VDS, DB) :: Term
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then solveBubblesNarrowSearchR(M, solveBubbles('bubble['__[TL]], M, B, VDS, DB), T, QI, D, D', B, VDS, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else if metaParse(GRAMMAR-SEARCH, downQidList('__[TL, ''..Qid]), '@SearchNuPart@) :: ResultPair
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then solveBubblesNarrowSearchL1(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder M,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder getTerm(
473b81d33893192056dde74b26b2467f983c102cChristian Maeder metaParse(GRAMMAR-SEARCH, downQidList('__[TL, ''..Qid]),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder '@SearchNuPart@)),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder T, QI, D, D', B, VDS, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else solveBubblesNarrowSearchR(
473b81d33893192056dde74b26b2467f983c102cChristian Maeder getModule(solveBubblesRew('bubble['__[TL]], M, B, D, VDS, DB)),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder getTerm(solveBubblesRew('bubble['__[TL]], M, B, D, VDS, DB)),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder T,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder QI,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder getBound(solveBubblesRew('bubble['__[TL]], M, B, D, VDS, DB)),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder D',
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder getBool(solveBubblesRew('bubble['__[TL]], M, B, D, VDS, DB)),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder getVars(solveBubblesRew('bubble['__[TL]], M, B, D, VDS, DB)),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder getDatabase(solveBubblesRew('bubble['__[TL]], M, B, D, VDS, DB)))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq solveBubblesNarrowSearchL1(M, '`[`,_`]_.['token[T], T'], T'', QI, D, D', B, VDS, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if downNat(downMetaNat(T)) :: Nat
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder and-then solveBubblesRed(T', M, B, VDS, DB) :: Tuple{Term,Module,Bool,OpDeclSet,Database}
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then solveBubblesNarrowSearchR(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder getModule(solveBubblesRed(T', M, B, VDS, DB)),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder getTerm(solveBubblesRed(T', M, B, VDS, DB)),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder T'', QI, D,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder downNat(downMetaNat(T)),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder B,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder getVars(solveBubblesRed(T', M, B, VDS, DB)),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else ('\r 'Error: '\o 'Incorrect 'command. '\n)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq solveBubblesNarrowSearchL1(M, '`[_`,_`]_.['token[T], 'token[T'], T''], T''', QI, D, D', B, VDS, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if downNat(downMetaNat(T)) :: Nat
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder and-then downNat(downMetaNat(T')) :: Nat
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder and-then solveBubblesRed(T'', M, B, VDS, DB) :: Tuple{Term,Module,Bool,OpDeclSet,Database}
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then solveBubblesNarrowSearchR(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder getModule(solveBubblesRed(T'', M, B, VDS, DB)),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder getTerm(solveBubblesRed(T'', M, B, VDS, DB)),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder T''', QI,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder downNat(downMetaNat(T)),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder downNat(downMetaNat(T')),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder B,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder getVars(solveBubblesRed(T'', M, B, VDS, DB)),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else ('\r 'Error: '\o 'Incorrect 'command. '\n)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq solveBubblesNarrowSearchR(M, T, T', QI, D, D', B, VDS, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = solveBubblesNarrowSearchR1(
473b81d33893192056dde74b26b2467f983c102cChristian Maeder M,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder addOps(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op '_s.t._. : leastSort(M, T) '@Condition@ -> 'PatternCondition [none] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op '_such`that_. : leastSort(M, T) '@Condition@ -> 'PatternCondition [none] .,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder addSorts('PatternCondition, addInfoConds(M))),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder T,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder T',
473b81d33893192056dde74b26b2467f983c102cChristian Maeder QI,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder D,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder D',
473b81d33893192056dde74b26b2467f983c102cChristian Maeder B,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder VDS,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder DB) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq solveBubblesNarrowSearchR(M:[Module], T:[Term], T':[Term], QI:[Qid], D:[Bound], D':[Bound], B:[Bool], VDS:[OpDeclSet], DB:[Database])
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = qidError('\r 'Error: '\o 'Incorrect 'use 'of 'the 'search 'command. '\n) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq solveBubblesNarrowSearchR1(M, M', T, 'bubble[QI], QI', D, D', B, VDS, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if T?:[Term] :: Term
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then procNarrowSearch2(M, T, T?:[Term], nil, QI', D, D')
473b81d33893192056dde74b26b2467f983c102cChristian Maeder else ('\r 'Error: '\o 'Incorrect 'use 'of 'the 'search 'command. '\n)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi
473b81d33893192056dde74b26b2467f983c102cChristian Maeder if T?:[Term] := solveBubbles('bubble[QI], M, B, VDS, DB) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq solveBubblesNarrowSearchR1(M, M', T, 'bubble['__[TL]], QI, D, D', B, VDS, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if T?:[Term] :: Term
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then procNarrowSearch2(M, T, T?:[Term], nil, QI, D, D')
473b81d33893192056dde74b26b2467f983c102cChristian Maeder else if metaParse(M', downQidList('__[TL, ''..Qid]), 'PatternCondition)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder :: ResultPair
473b81d33893192056dde74b26b2467f983c102cChristian Maeder then solveBubblesNarrowSearchR2(M, T,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder getTerm(
473b81d33893192056dde74b26b2467f983c102cChristian Maeder metaParse(M', downQidList('__[TL, ''..Qid]),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder 'PatternCondition)),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder QI, D, D', VDS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else '\r 'Error: '\o 'Incorrect 'use 'of 'the 'search 'command. '\n
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi
473b81d33893192056dde74b26b2467f983c102cChristian Maeder fi
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if T?:[Term] := solveBubbles('bubble['__[TL]], M, B, VDS, DB) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq solveBubblesNarrowSearchR2(M, T, QI, QI', D, I, VDS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = procNarrowSearch2(M, T, constsToVars(QI, VDS), nil, QI', D, I) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq solveBubblesNarrowSearchR2(M, T, F[T], QI, D, I, VDS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = procNarrowSearch2(M, T, constsToVars(F[T], VDS), nil, QI, D, I) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq solveBubblesNarrowSearchR2(M, T, F[T', T''], QI, D, I, VDS)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = if F == '_s.t._. or F == '_such`that_.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then procNarrowSearch2(M, T, T', parseCond(T'', VDS), QI, D, I)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else procNarrowSearch2(M, T, constsToVars(F[T', T''], VDS), nil, QI, D, I)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq solveBubblesNarrowSearchR2(M, T, F[T', T'', TL], QI, D, I, VDS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = procNarrowSearch2(M, T, constsToVars(F[T', T'', TL], VDS), nil, QI, D, I) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq procNarrowSearch2(M, T, T', CD, QI, D, D')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if RTS:[ResultTripleSet] :: ResultTripleSet
473b81d33893192056dde74b26b2467f983c102cChristian Maeder then ('search
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if D == unbounded and D' == unbounded
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then nil
473b81d33893192056dde74b26b2467f983c102cChristian Maeder else '\s '`[
473b81d33893192056dde74b26b2467f983c102cChristian Maeder if D == unbounded
473b81d33893192056dde74b26b2467f983c102cChristian Maeder then nil
473b81d33893192056dde74b26b2467f983c102cChristian Maeder else qid(string(D, 10))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if D' == unbounded
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then nil
473b81d33893192056dde74b26b2467f983c102cChristian Maeder else '`, qid(string(D', 10))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder '`] '\s
473b81d33893192056dde74b26b2467f983c102cChristian Maeder fi
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder 'in eMetaPrettyPrint(getName(M)) ':
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eMetaPrettyPrint(M, T) '\s qid("~>" + string(QI)) '\s
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eMetaPrettyPrint(M, T'') '.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder procNarrowSearch3(M, 0, Vars((T,T')), RTS:[ResultTripleSet]))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else if RTS:[ResultTripleSet] == empty
473b81d33893192056dde74b26b2467f983c102cChristian Maeder then ('search
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if D == unbounded and D' == unbounded
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then nil
473b81d33893192056dde74b26b2467f983c102cChristian Maeder else '\s '`[
473b81d33893192056dde74b26b2467f983c102cChristian Maeder if D == unbounded
473b81d33893192056dde74b26b2467f983c102cChristian Maeder then nil
473b81d33893192056dde74b26b2467f983c102cChristian Maeder else qid(string(D, 10))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if D' == unbounded
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then nil
473b81d33893192056dde74b26b2467f983c102cChristian Maeder else '`, qid(string(D', 10))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder '`] '\s
473b81d33893192056dde74b26b2467f983c102cChristian Maeder fi
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder 'in eMetaPrettyPrint(getName(M)) ':
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eMetaPrettyPrint(M, T)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder '\s qid("~>" + string(QI)) '\s
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eMetaPrettyPrint(M, T'') '. '\n '\n
473b81d33893192056dde74b26b2467f983c102cChristian Maeder 'No 'solution. '\n)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder else '\r 'Error: '\o 'Incorrect 'use 'of 'the 'search 'command. '\n
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi
473b81d33893192056dde74b26b2467f983c102cChristian Maeder fi
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if T'' := prepSearchPattern(T')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder /\ RTS:[ResultTripleSet]
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder := upDown(M,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder metaNarrowSearchGen(M, T, T'', none, typeOfRelation(QI), D', D,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder full AC-unify noStrategy E-normalize-terms)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder |> (T,T'')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq procNarrowSearch3(M, I, TL:TermList, empty)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = ('\n '\n 'No 'more 'solutions.) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq procNarrowSearch3(M, I, TL:TermList, {T:Term,TP:Type,S:Substitution} | RTS:ResultTripleSet)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = ('\n '\n 'Solution qid(string(I + 1, 10))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if (S:Substitution |> TL:TermList) == none
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then '\n 'empty 'substitution
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else '\n eMetaPrettyPrint(M, S:Substitution |> TL:TermList)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder procNarrowSearch3(M, I + 1, TL:TermList, RTS:ResultTripleSet)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder sort Tuple{TermList, Nat} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op <_;_> : Term Nat -> Tuple{TermList, Nat} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op term : Tuple{TermList, Nat} -> TermList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op index : Tuple{TermList, Nat} -> Nat .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq term(< TL:[TermList] ; I:[Nat] >) = TL:[TermList] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq index(< TL:[TermList] ; I:[Nat] >) = I:[Nat] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op prepSearchPattern : Term -> Term .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op prepSearchPattern : TermList Nat -> Tuple{TermList, Nat} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq prepSearchPattern(T) = term(prepSearchPattern(T, 0)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq prepSearchPattern('<_:_|_>[O, Ct, T], I)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = < '<_:_|_>[O, qid("V#" + string(I, 10) + ":" + string(getName(Ct))),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder '_`,_[term(prepSearchPattern(T, s s I)),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder qid("V#" + string(s I, 10) + ":AttributeSet")]] ;
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder index(prepSearchPattern(T, s s I)) > .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq prepSearchPattern('<_:_|`>[O, Ct], I)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = < '<_:_|_>[O, qid("V#" + string(I, 10) + ":" + string(getName(Ct))),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder qid("V#" + string(s I, 10) + ".AttributeSet")] ;
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder s I > .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq prepSearchPattern(F[TL], I)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = < F[term(prepSearchPattern(TL, I))] ;
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder index(prepSearchPattern(TL, I)) >
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq prepSearchPattern(F, I) = < F ; I > .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq prepSearchPattern(Ct, I) = < Ct ; I > .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq prepSearchPattern((T, TL), I)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = < (term(prepSearchPattern(T, I)),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder term(prepSearchPattern(TL, index(prepSearchPattern(T, I))))) ;
473b81d33893192056dde74b26b2467f983c102cChristian Maeder index(prepSearchPattern(TL, index(prepSearchPattern(T, I)))) >
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if TL =/= empty .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder *** MATCH
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq procMatch(ME, M, T, T', QI, I, VDS, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** the number I in search is not a bound, but the number of solutions
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if solveBubblesRl(T, T', M, B, VDS, DB) :: Term
473b81d33893192056dde74b26b2467f983c102cChristian Maeder then procMatch2(addOps(VDS, M),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder lhs(solveBubblesRl(T, T', M, B, VDS, DB)),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder rhs(solveBubblesRl(T, T', M, B, VDS, DB)), nil, QI, I)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else if solveBubblesRew(T, M, B, I, VDS, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder :: Tuple{Term,Module,Bool,OpDeclSet,Bound,Database}
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then solveBubblesMatch(
473b81d33893192056dde74b26b2467f983c102cChristian Maeder getModule(solveBubblesRew(T, M, B, I, VDS, DB)),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder addOps(
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op '_s.t._. :
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder leastSort(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder getModule(solveBubblesRew(T, M, B, I, VDS, DB)),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder getTerm(solveBubblesRew(T, M, B, I, VDS, DB)))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder '@Condition@ -> 'PatternCondition [none] .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op '_such`that_. :
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder leastSort(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder getModule(solveBubblesRew(T, M, B, I, VDS, DB)),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder getTerm(solveBubblesRew(T, M, B, I, VDS, DB)))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder '@Condition@ -> 'PatternCondition [none] .,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder addSorts('PatternCondition,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder addInfoConds(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder getModule(solveBubblesRew(T, M, B, I, VDS, DB))))),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder getTerm(solveBubblesRew(T, M, B, I, VDS, DB)),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder T',
473b81d33893192056dde74b26b2467f983c102cChristian Maeder QI,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder (if getBound(solveBubblesRew(T, M, B, I, VDS, DB))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder == unbounded
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then 0
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else getBound(solveBubblesRew(T, M, B, I, VDS, DB))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder fi),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder B,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder getVars(solveBubblesRew(T, M, B, I, VDS, DB)),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else getMsg(getTerm(solveBubblesRew(T, M, B, I, VDS, DB)))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ----('\r 'Error: '\o 'Incorrect 'match 'command. '\n)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if B := included('META-MODULE, getImports(getTopModule(ME, DB)), DB) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq solveBubblesMatch(M, M', T, 'bubble[QI], QI', I, B, VDS, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if T?:[Term] :: Term
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then procMatch2(M, T, T?:[Term], nil, QI', I)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder else ('\r 'Error: '\o 'Incorrect 'use 'of 'the 'match 'command. '\n)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi
473b81d33893192056dde74b26b2467f983c102cChristian Maeder if T?:[Term] := solveBubbles('bubble[QI], M, B, VDS, DB) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq solveBubblesMatch(M, M', T, 'bubble['__[TL]], QI, I, B, VDS, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if T?:[Term] :: Term
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then procMatch2(M, T, T?:[Term], nil, QI, I)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder else if metaParse(M', downQidList('__[TL, ''..Qid]), 'PatternCondition)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder :: ResultPair
473b81d33893192056dde74b26b2467f983c102cChristian Maeder then solveBubblesMatch2(M, T,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder getTerm(
473b81d33893192056dde74b26b2467f983c102cChristian Maeder metaParse(M', downQidList('__[TL, ''..Qid]),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder 'PatternCondition)),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder QI, I, VDS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else '\r 'Error: '\o 'Incorrect 'use 'of 'the 'match 'command. '\n
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi
473b81d33893192056dde74b26b2467f983c102cChristian Maeder fi
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if T?:[Term] := solveBubbles('bubble['__[TL]], M, B, VDS, DB) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq solveBubblesMatch2(M, T, QI, QI', I, VDS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = procMatch2(M, T, constsToVars(QI, VDS), nil, QI', I) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq solveBubblesMatch2(M, T, F[T], QI, I, VDS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = procMatch2(M, T, constsToVars(F[T], VDS), nil, QI, I) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq solveBubblesMatch2(M, T, F[T', T''], QI, I, VDS)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = if F == '_s.t._. or F == '_such`that_.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then procMatch2(M, T, T', parseCond(T'', VDS), QI, I)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else procMatch2(M, T, constsToVars(F[T', T''], VDS), nil, QI, I)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq solveBubblesMatch2(M, T, F[T', T'', TL], QI, I, VDS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = procMatch2(M, T, constsToVars(F[T', T'', TL], VDS), nil, QI, I) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq procMatch2(M, T, T', CD, 'match, I)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if Sb? :: Substitution
473b81d33893192056dde74b26b2467f983c102cChristian Maeder then ('match
473b81d33893192056dde74b26b2467f983c102cChristian Maeder if I == 0 then nil else '\s '`[ qid(string(I, 10)) '`] '\s fi
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder 'in eMetaPrettyPrint(getName(M)) ':
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eMetaPrettyPrint(M, T) '\s '<=? '\s eMetaPrettyPrint(M, T') '. '\n '\n
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder 'Solution '1 '\n
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if Sb? == none
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder then 'empty 'substitution
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder else eMetaPrettyPrint(M, Sb?)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder procMatch3(M, T, T', CD, 'match, I, 1))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else if Sb? == noMatch
473b81d33893192056dde74b26b2467f983c102cChristian Maeder then ('match
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if I == 0
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then nil
473b81d33893192056dde74b26b2467f983c102cChristian Maeder else '\s '`[ qid(string(I, 10)) '`] '\s
473b81d33893192056dde74b26b2467f983c102cChristian Maeder fi
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder 'in eMetaPrettyPrint(getName(M)) ':
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eMetaPrettyPrint(M, T) '\s '<=? '\s
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eMetaPrettyPrint(M, T') '. '\n '\n
473b81d33893192056dde74b26b2467f983c102cChristian Maeder 'No 'solution. '\n)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder else '\r 'Error: '\o 'Incorrect 'use 'of 'the 'match 'command. '\n
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi
473b81d33893192056dde74b26b2467f983c102cChristian Maeder fi
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if Sb? := metaMatch(M, T, T', CD, 0) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq procMatch2(M, T, T', CD, 'xmatch, I)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if MP? :: MatchPair
473b81d33893192056dde74b26b2467f983c102cChristian Maeder then ('xmatch
473b81d33893192056dde74b26b2467f983c102cChristian Maeder if I == 0 then nil else '\s '`[ qid(string(I, 10)) '`] '\s fi
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder 'in eMetaPrettyPrint(getName(M)) ':
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eMetaPrettyPrint(M, T) '\s '<=? '\s eMetaPrettyPrint(M, T') '. '\n '\n
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder 'Solution '1 '\n
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if gTSubstitution(MP?) == none
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder then 'empty 'substitution
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder else eMetaPrettyPrint(M, gTSubstitution(MP?))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder fi '\n '\n
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder procMatch3(M, T, T', CD, 'xmatch, I, 1))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else if MP? == noMatch
473b81d33893192056dde74b26b2467f983c102cChristian Maeder then ('xmatch
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if I == 0
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then nil
473b81d33893192056dde74b26b2467f983c102cChristian Maeder else '\s '`[ qid(string(I, 10)) '`] '\s
473b81d33893192056dde74b26b2467f983c102cChristian Maeder fi
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder 'in eMetaPrettyPrint(getName(M)) ':
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eMetaPrettyPrint(M, T) '\s '<=? '\s
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eMetaPrettyPrint(M, T') '. '\n '\n
473b81d33893192056dde74b26b2467f983c102cChristian Maeder 'No 'solution. '\n)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder else '\r 'Error: '\o 'Incorrect 'use 'of 'the 'xmatch 'command. '\n
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi
473b81d33893192056dde74b26b2467f983c102cChristian Maeder fi
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if MP? := metaXmatch(M, T, T', CD, 0, unbounded, 0) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq procMatch3(M, T, T', CD, 'match, I, J)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = if I == 0 or J < I
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then if metaMatch(M, T, T', CD, J) :: Substitution
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder then ('Solution qid(string(J + 1, 10)) '\n
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if metaMatch(M, T, T', CD, J) == none
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder then 'empty 'substitution
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder else eMetaPrettyPrint(M, metaMatch(M, T, T', CD, J))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder fi '\n '\n
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder procMatch3(M, T, T', CD, 'match, I, J + 1))
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder else ('No 'more 'solutions. '\n)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else nil
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq procMatch3(M, T, T', CD, 'xmatch, I, J)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = if I == 0 or J < I
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then if metaXmatch(M, T, T', CD, 0, unbounded, J) :: MatchPair
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder then ('Solution qid(string(J + 1, 10)) '\n
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if gTSubstitution(metaXmatch(M, T, T', CD, 0, unbounded, J))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder == none
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder then 'empty 'substitution
473b81d33893192056dde74b26b2467f983c102cChristian Maeder else eMetaPrettyPrint(M,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder gTSubstitution(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder metaXmatch(M, T, T', CD, 0, unbounded, J)))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder fi '\n '\n
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder procMatch3(M, T, T', CD, 'xmatch, I, J + 1))
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder else ('No 'more 'solutions. '\n)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else nil
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder *** UNIFY
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq procUnify(ME, M, T, D, VDS, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** D is a bound on the number of solutions
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if solveBubblesRewUnify(T, addInfoUnify(M), B, D, VDS, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder :: Tuple{Term,Module,Bool,OpDeclSet,Bound,Database}
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then procUnify2(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder getModule(solveBubblesRewUnify(T, addInfoUnify(M), B, D, VDS, DB)),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder parseUnify(
473b81d33893192056dde74b26b2467f983c102cChristian Maeder getTerm(solveBubblesRewUnify(T, addInfoUnify(M), B, D, VDS, DB)),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder getVars(solveBubblesRewUnify(T, addInfoUnify(M), B, D, VDS, DB))),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder getBound(solveBubblesRewUnify(T, addInfoUnify(M), B, D, VDS, DB)))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else getMsg(getTerm(solveBubblesRewUnify(T, addInfoUnify(M), B, D, VDS, DB)))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ----('\r 'Error: '\o 'Incorrect 'match 'command. '\n)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if B := included('META-MODULE, getImports(getTopModule(ME, DB)), DB) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq addInfoUnify(M)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = addOps(op '_/\_ : '@UnificationProblem@ '@UnificationProblem@ -> '@UnificationProblem@
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [ctor assoc prec(73)] .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op '_=?_ : 'Universal 'Universal -> '@UnificationProblem@
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [ctor poly(1 2) prec(71)] .,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder addSorts('@UnificationProblem@, M)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parseUnify('_/\_[T, T'], VDS) = parseUnify(T, VDS) /\ parseUnify(T', VDS) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parseUnify('_=?_[T, T'], VDS) = constsToVars(T, VDS) =? constsToVars(T', VDS) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq procUnify2(M, UP, D)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if UP? :: UnificationPair?
473b81d33893192056dde74b26b2467f983c102cChristian Maeder then ('unify
473b81d33893192056dde74b26b2467f983c102cChristian Maeder if D == unbounded then nil else '\s '`[ qid(string(D, 10)) '`] '\s fi
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder 'in eMetaPrettyPrint(getName(M)) ':
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eMetaPrettyPrint(M, UP) '\n '\n
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if UP? == noUnifier
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder then 'No 'unifier
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder else procUnify3Aux(M, UP?, 0) '\n '\n
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder procUnify3(M, UP, D, 1)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder else '\r 'Error: '\o 'Incorrect 'use 'of 'the 'unify 'command. '\n
473b81d33893192056dde74b26b2467f983c102cChristian Maeder fi
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if UP? := metaUnify(M, UP, 0, 0) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq procUnify2(M?, UP??:[UnificationProblem], D?) = getMsg(M?) [owise] .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq eMetaPrettyPrint(M, T =? T')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = eMetaPrettyPrint(M, T) '\s '=? '\s eMetaPrettyPrint(M, T') '. .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq eMetaPrettyPrint(M, T =? T' /\ UP)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = eMetaPrettyPrint(M, T =? T') '\s '/\ '\s eMetaPrettyPrint(M, UP) '. .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq procUnify3Aux(M, {Sb, N}, I)
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder = 'Solution qid(string(I + 1, 10)) '\n
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if Sb == none
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder then 'empty 'substitution '\n '\n
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder else eMetaPrettyPrint(M, Sb) '\n '\n
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq procUnify3(M, UP, D, I)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = if D == unbounded or-else I < D
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then if metaUnify(M, UP, 0, I) :: UnificationPair
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then (procUnify3Aux(M, metaUnify(M, UP, 0, I), I)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder procUnify3(M, UP, D, I + 1))
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder else ('No 'more 'solutions. '\n)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else nil
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq solveBubblesUnify(M, 'bubble[T], VDS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if metaParse(M, QIL, '@UnificationProblem@) :: ResultPair
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then parseUnify(getTerm(metaParse(M, QIL, '@UnificationProblem@)), VDS)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder else unificationProblemError('\r 'Warning: '\o
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder printSyntaxError(metaParse(M, QIL, '@UnificationProblem@), QIL) '\n)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder fi
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if QIL := downQidList(T) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq solveBubblesRewUnify('bubble[QI], M, B, D, VDS, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if solveBubbles('bubble[QI], M, B, VDS, DB) :: Term
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then {solveBubbles('bubble[QI], M, B, VDS, DB), M, B, VDS, unbounded, DB}
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else tupleTMBOBDerror(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder '\r 'Error: '\o 'no 'parsing 'for downQidList(QI) '\n)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq solveBubblesRewUnify('bubble['__[TL]], M, B, D, VDS, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if solveBubbles('bubble['__[TL]], M, B, VDS, DB) :: Term
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then {solveBubbles('bubble['__[TL]], M, B, VDS, DB), M, B, VDS, unbounded, DB}
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else if metaParse(GRAMMAR-REW, downQidList('__[TL, ''..Qid]), '@RewNuPart@)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder :: ResultPair
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then solveBubblesRewUnify2(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder getTerm(
473b81d33893192056dde74b26b2467f983c102cChristian Maeder metaParse(GRAMMAR-REW, downQidList('__[TL, ''..Qid]),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder '@RewNuPart@)),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder M, B, VDS, DB)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder else {getTerm(solveBubblesRedUnify('bubble['__[TL]], M, B, VDS, DB)),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder getModule(solveBubblesRedUnify('bubble['__[TL]], M, B, VDS, DB)),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder getBool(solveBubblesRedUnify('bubble['__[TL]], M, B, VDS, DB)),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder getVars(solveBubblesRedUnify('bubble['__[TL]], M, B, VDS, DB)),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder unbounded,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder getDatabase(solveBubblesRedUnify('bubble['__[TL]], M, B, VDS, DB))}
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq solveBubblesRewUnify2('`[_`]_.['token[T], T'], M, B, VDS, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if downNat(downMetaNat(T)) :: Nat
473b81d33893192056dde74b26b2467f983c102cChristian Maeder and-then solveBubblesRedUnify(T', M, B, VDS, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder :: Tuple{Term,Module,Bool,OpDeclSet,Database}
473b81d33893192056dde74b26b2467f983c102cChristian Maeder then {getTerm(solveBubblesRedUnify(T', M, B, VDS, DB)),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder getModule(solveBubblesRedUnify(T', M, B, VDS, DB)),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder getBool(solveBubblesRedUnify(T', M, B, VDS, DB)),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder getVars(solveBubblesRedUnify(T', M, B, VDS, DB)),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder downNat(downMetaNat(T)),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder getDatabase(solveBubblesRedUnify(T', M, B, VDS, DB))}
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else tupleTMBOBDerror('\r 'Error: '\o 'Incorrect 'command. '\n)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ceq solveBubblesRedUnify('bubble[QI], M, B, VDS, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if T? :: Term
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then {T?, M, B, VDS, DB}
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else tupleTMBODerror('\r 'Error: '\o 'no 'parse 'for downQidList(QI) '\n)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder fi
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if T? := solveBubbles('bubble[QI], M, B, VDS, DB) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ceq solveBubblesRedUnify('bubble['__[TL]], M, B, VDS, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if T? :: Term
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then {T?, M, B, VDS, DB}
473b81d33893192056dde74b26b2467f983c102cChristian Maeder else if metaParse(GRAMMAR-RED,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder downQidList('__[TL, ''..Qid]), '@RedInPart@)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder :: ResultPair
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then solveBubblesRedUnify2(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder getTerm(
473b81d33893192056dde74b26b2467f983c102cChristian Maeder metaParse(GRAMMAR-RED, downQidList('__[TL, ''..Qid]), '@RedInPart@)),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder DB)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder else tupleTMBODerror('\r 'Warning: '\o
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder printSyntaxError(
473b81d33893192056dde74b26b2467f983c102cChristian Maeder metaParse(GRAMMAR-RED, downQidList('__[TL, ''..Qid]),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder '@RedInPart@), downQidList('__[TL, ''..Qid])) '\n
473b81d33893192056dde74b26b2467f983c102cChristian Maeder '\r 'Error: '\o
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder 'no 'parse 'for downQidList('__[TL, ''..Qid]) '\n)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi
473b81d33893192056dde74b26b2467f983c102cChristian Maeder fi
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if T? := solveBubbles('bubble['__[TL]], M, B, VDS, DB) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder *** There is some problem parsing 'in_:_ in solveBubblesRed, but it
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** seems to work with the additional '.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ceq solveBubblesRedUnify2('in_:_.[T, T'], DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if unitInDb(ME, DB')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then solveBubblesRed3(T', addInfoUnify(getFlatModule(ME, DB')), ME, getVars(ME, DB'), DB')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else tupleTMBODerror('\r 'Error: '\o 'The 'module eMetaPrettyPrint(ME) 'is 'not 'in 'the 'database '. '\n)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder fi
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if < DB' ; ME > := evalModExp(parseModExp(T), DB) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq solveBubblesRedUnify2('in_:_.[T, T'], DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = tupleTMBODerror('\r 'Error: '\o 'It 'isn't 'possible 'to 'compile eMetaPrettyPrint(parseModExp(T)) '. '\n)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder *** ID-UNIFY
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq procIdUnify(ME, M, T, D, VDS, DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** D is a bound on the number of solutions
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if solveBubblesRewUnify(T, addInfoIdUnify(M), B, D, VDS, DB) :: Tuple{Term,Module,Bool,OpDeclSet,Bound,Database}
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then procIdUnify2(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder getModule(solveBubblesRewUnify(T, addInfoIdUnify(M), B, D, VDS, DB)),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder parseIdUnify(
473b81d33893192056dde74b26b2467f983c102cChristian Maeder getTerm(solveBubblesRewUnify(T, addInfoIdUnify(M), B, D, VDS, DB)),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder getVars(solveBubblesRewUnify(T, addInfoIdUnify(M), B, D, VDS, DB))),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder getBound(solveBubblesRewUnify(T, addInfoIdUnify(M), B, D, VDS, DB)))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else getMsg(getTerm(solveBubblesRewUnify(T, addInfoIdUnify(M), B, D, VDS, DB)))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ----('\r 'Error: '\o 'Incorrect 'match 'command. '\n)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if B := included('META-MODULE, getImports(getTopModule(ME, DB)), DB) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq addInfoIdUnify(M)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = addOps(---op '_/\_ : '@UnificationProblem@ '@UnificationProblem@ -> '@UnificationProblem@
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder --- [ctor assoc prec(73)] .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op '_=?_ : 'Universal 'Universal -> '@UnificationProblem@
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [ctor poly(1 2) prec(71)] .,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder addSorts('@UnificationProblem@, M)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder--- eq parseIdUnify('_/\_[T, T'], VDS) = parseUnify(T, VDS) /\ parseUnify(T', VDS) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parseIdUnify('_=?_[T, T'], VDS) = constsToVars(T, VDS) =? constsToVars(T', VDS) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq procIdUnify2(M, T =? T', D)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if X:[SubstitutionSet] :: SubstitutionSet
473b81d33893192056dde74b26b2467f983c102cChristian Maeder then ('id-unify
473b81d33893192056dde74b26b2467f983c102cChristian Maeder if D == unbounded then nil else '\s '`[ qid(string(D, 10)) '`] '\s fi
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder 'in eMetaPrettyPrint(getName(M)) ':
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eMetaPrettyPrint(M, T =? T')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if X:[SubstitutionSet] == empty
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then '\n 'No 'unifier
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else procIdUnify3(M, T =? T', 0, X:[SubstitutionSet])
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder else '\r 'Error: '\o 'Incorrect 'use 'of 'the 'id-unify 'command. '\n
473b81d33893192056dde74b26b2467f983c102cChristian Maeder fi
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if X:[SubstitutionSet] := metaACUUnify(M, T, T') .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq procIdUnify2(M?, UP??:[UnificationProblem], D?) = getMsg(M?) [owise] .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq procIdUnify3(M, UP, I, empty)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = ('\n '\n 'No 'more 'solutions.) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq procIdUnify3(M, UP, I, S:Substitution | SS:SubstitutionSet)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = '\n '\n 'Solution qid(string(I + 1, 10))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if S:Substitution == none
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then '\n 'empty 'substitution
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else '\n eMetaPrettyPrint(M, S:Substitution)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder procIdUnify3(M, UP, I + 1, SS:SubstitutionSet) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederendfm
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder----load check-input-module.maude
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- Input modules are assumed not to have:
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- - idem
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- - assoc without comm
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- - variable alone in lhs
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- - owise
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- - iter
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- - built-ins
473b81d33893192056dde74b26b2467f983c102cChristian Maeder---- - something else?
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederfmod CHECK-INPUT-MODULE is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder inc EXT-TERM .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder inc MODULE-HANDLING * (op addOps to addOpsSE, op addEqs to addEqsSE, op addSorts to addSortsSE) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op checkModule : Module -> Bool .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op attr : OpDeclSet Attr -> Bool .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ops assocWithoutComm specialAttr : OpDeclSet -> Bool .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op nonValidAttrs : OpDeclSet AttrSet -> Bool .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op singleVbleInLHSs : RuleSet -> Bool .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op singleVbleInLHSs : EquationSet -> Bool .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var M : Module .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var F : Qid .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var TpL : TypeList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars Tp Tp' Tp'' Tp''' : Type .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var TpS : TypeSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var At : Attr .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars AtS AtS' : AttrSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars ODS ODS' : OpDeclSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var V : Variable .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var VS : QidSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var RlS : RuleSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var EqS : EquationSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars T LHS RHS : Term .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var Cond : Condition .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq attr(op F : TpL -> Tp [owise AtS] . ODS, At AtS) = true .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq attr(op F : TpL -> Tp [idem AtS] . ODS, idem) = true .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq attr(op F : TpL -> Tp [iter AtS] . ODS, iter) = true .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq attr(ODS, At) = false [owise] .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq nonValidAttrs(op F : TpL -> Tp [At AtS] . ODS, At AtS') = true .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq nonValidAttrs(ODS, AtS) = false [owise] .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ---- special attributes only allowed for constants
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq specialAttr(op F : TpL -> Tp [special(NEHL:NeHookList) AtS] . ODS) = TpL =/= nil .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq specialAttr(ODS) = false [owise] .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq assocWithoutComm(op F : TpL -> Tp [assoc AtS] . ODS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (not comm in AtS) or-else assocWithoutComm(ODS) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq assocWithoutComm(ODS) = false [owise] .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq singleVbleInLHSs(rl V => RHS [AtS] . RlS) = true .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq singleVbleInLHSs(crl V => RHS if Cond [AtS] . RlS) = true .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq singleVbleInLHSs(RlS) = false [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq singleVbleInLHSs(eq V = RHS [AtS] . EqS) = true .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq singleVbleInLHSs(ceq V = RHS if Cond [AtS] . EqS) = true .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq singleVbleInLHSs(EqS) = false [owise] .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op isRegular : EquationSet -> Bool .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op isRegular : RuleSet -> Bool .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq isRegular(eq LHS = RHS [AtS] . EqS) = (vars(LHS) == vars(RHS)) and isRegular(EqS) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq isRegular(ceq LHS = RHS if Cond [AtS] . EqS) = (vars(LHS) == vars(RHS)) and isRegular(EqS) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq isRegular(rl LHS => RHS [AtS] . RlS) = (vars(LHS) == vars(RHS)) and isRegular(RlS) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq isRegular(crl LHS => RHS if Cond [AtS] . RlS) = (vars(LHS) == vars(RHS)) and isRegular(RlS) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ---- We say that a term l is linear iff all its variables appear only once in it.
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op linear : Term -> Bool .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq linear(T) = | vars(T) | == size(varlist(T)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ---- We say that a term l is C-nonlinear iff all its variables are c-nonlinear.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ---- A variable x : s in vars(l) is c-nonlinear if it is nonlinear in l and
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ---- there is a \Sigma-subterm t with ls[t]_B <= s with a position p such that
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ---- t|_p = f(u,v) with B_f = {C_f}.
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op c-nonlinear : Qid Term Module -> Bool . ---- the variable (1st arg.) is c-linear in the term (2nd arg.)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op c-nonlinear : Term Module -> Bool . ---- no repeated variables and all such varaibles are c-linear
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op c-nonlinearAux : QidSet Module -> Bool .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op c-nonlinearAux : Type Module -> Bool .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op c-nonlinearAux : Type TypeSet OpDeclSet OpDeclSet Module -> Bool .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op c-nonlinearAux2 : TypeList TypeSet OpDeclSet Module -> Bool .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq c-nonlinear(V, T, M) = occurrences(V, T) > 1 and-then c-nonlinearAux(V, M) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq c-nonlinear(T, M) = not linear(T) and-then c-nonlinearAux(vars(T), M) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq c-nonlinearAux(V ; VS, M) = c-nonlinearAux(getType(V), M) or-else c-nonlinearAux(VS, M) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq c-nonlinearAux(none, M) = false .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq c-nonlinearAux(Tp, M) = c-nonlinearAux(Tp, Tp, getOps(M), getOps(M), M) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq c-nonlinearAux(Tp, TpS, op F : Tp' Tp'' -> Tp''' [comm AtS] . ODS, ODS', M)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = true
473b81d33893192056dde74b26b2467f983c102cChristian Maeder if sortLeq(M, Tp''', Tp) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq c-nonlinearAux(Tp, TpS, op F : TpL -> Tp' [AtS] . ODS, ODS', M)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = if not comm in AtS and-then (not Tp in TpS and-then sortLeq(M, Tp', Tp))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then c-nonlinearAux2(TpL, TpS, ODS', M) ---- all the sorts in that declarations have already been checked
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else c-nonlinearAux(Tp, TpS, ODS, ODS', M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [owise] .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq c-nonlinearAux(Tp, TpS, none, ODS, M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = false .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq c-nonlinearAux2(Tp TpL, TpS, ODS, M)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = if Tp in TpS
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then false
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else c-nonlinearAux(Tp, Tp ; TpS, ODS, ODS, M)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder fi
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder or-else c-nonlinearAux2(TpL, TpS, ODS, M) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq c-nonlinearAux2(nil, TpS, ODS, M) = false .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq c-permute(C, M) = C .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq c-permute(V, M) = V .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ceq c-permute(F[T, T'], M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = c-combine(F, c-permute((T, T'), M)) # c-combine(F, c-permute((T', T), M))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if isCommutative(M, F, getTypes(M, (T, T'))) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq c-permute(F[TL], M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = c-combine(F, c-permute(TL, M))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [owise] .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq c-permute((T, T'), M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = c-permute(T, M) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederendfm
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder--------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederview SubstitutionSet from TRIV to SUBSTITUTIONSET is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder sort Elt to SubstitutionSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederendv
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maederfmod MODULE-VARIANTS is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder inc CHECK-INPUT-MODULE .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder inc META-NARROWING-SEARCH * (op addOps to addOpsSE, op addEqs to addEqsSE, op addSorts to addSortsSE) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder inc UNIT .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder pr 2TUPLE{SubstitutionSet, Nat}
473b81d33893192056dde74b26b2467f983c102cChristian Maeder * (op `(_`,_`) : SubstitutionSet Nat -> Tuple{SubstitutionSet, Nat} to <_;_>,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op p1_ : Tuple{SubstitutionSet, Nat} -> SubstitutionSet to getSubst,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op p2_ : Tuple{SubstitutionSet, Nat} -> Nat to getIndex) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr CONVERSION .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr EXT-TERM .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr EXT-DECL .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr 2TUPLE{Module,Module}
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder * (op `(_`,_`) : Module Module -> Tuple{Module, Module} to <_;_>) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars V W : Variable .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var C : Constant .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars M M' M'' : Module .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var N : Nat .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars T T' T'' LHS RHS : Term .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var F : Qid .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var TL : TermList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var AtS : AttrSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var VFS : VariantFourSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars Tp Tp' Tp'' : Type .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var TpL : TypeList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var Rl : Rule .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var RlS : RuleSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var Eq : Equation .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var EqS : EquationSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var ODS : OpDeclSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var Cond : Condition .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var S : Sort .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var VS : QidSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars Subst Subst' : Substitution .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars SubstS SubstS' : SubstitutionSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var H : Header .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var SS : SortSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var SSDS : SubsortDeclSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars OPDS OPDS' : OpDeclSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var MAS : MembAxSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var IL : ImportList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ------------------------------------------------------------------------------
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ---- Given a module \mathcal{R} = (\Sigma, E, R)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ---- removeIds(\mathcal{R}) = removeIds((\widehat{\Sigma}, B, \widetilde{U}), R)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ---- where
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ---- - \widehat{\Sigma} is obtained by
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ---- - adding to $\Sigma$ a fresh new sort [Tuple] and
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ---- - a tupling operator <_,...,_> : [s] [s_1] ... [s_n] -> [Tuple]
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ---- for each rule l -> r if u_1 -> v_1 /\ ... /\ u_n -> v_n in R,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ---- where l has sort s and v_i has sort s_i, 1 <= i <= n,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ---- - B_f = E_f \cap {A_f, C_f}
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ---- - U_f = E_f \cap {LU_f, RU_f},
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ---- with LU_f and RU_f rewrite rules f(e,x) -> x and f(x,e) -> x, and
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ---- where \widetilde{U} is the B-coherence completion of U,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ---- which is described as \widetilde{U} = \bigcup_{f:[s_1]...[s_n] -> [s] \in \Sigma} \widetilde{U}_f.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ---- If A_f \not \in B_f, or A_f, C_f \in B_f, then \widetilde{U}_f = U_f.
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ---- Otherwise, if A_f \in B_f, but C_f \not \in B_f, then,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ---- if LU_f \in U_f, then we add the rule f(x,f(e,y)) -> f(x,y) and
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ---- if RU_f \in U_f, then we add the rule f(f(x,e'),y) -> f(x,y).
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ---- makeIdsModule computes (\widehat{\Sigma}, B, \widetilde{U})
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ------------------------------------------------------------------------------
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder sort VariantProcedure .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ops narrowing ad-hoc : -> VariantProcedure .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var VP : VariantProcedure .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op removeIds : Module ~> Module .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ---- given a module returns an equivalent module without ids but with variants of eqs and rls
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op removeIds : Module VariantProcedure ~> Module .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ---- given a module returns an equivalent module without ids but with variants
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ---- of eqs and rls using using the specified procedure for calculating variants
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op getVariants : Module Module RuleSet VariantProcedure -> RuleSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ---- given a (\widehat{\Sigma}, B, \widetilde{U}) returns the variants of the given set of rules
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ---- It takes the modules without and with ids. The module with id attributes is used to normalize.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op getVariants : Module Module EquationSet VariantProcedure -> EquationSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ---- given a (\widehat{\Sigma}, B, \widetilde{U}) returns the variants of the given set of equations
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ---- It takes the modules without and with ids. The module with id attributes is used to normalize.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op getVariants : Module Module Term VariantProcedure -> VariantFourSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ---- given a (\widehat{\Sigma}, B, \widetilde{U}) returns the variants of a term (a tuple)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op getRlVariants : Module VariantFourSet Term Condition AttrSet -> RuleSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ---- given the variants of a tuple < LHS, target terms in condition >, a RHS, a condition, and an attribute set,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ---- it constructs the corresponding variant rules
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op getEqVariants : Module VariantFourSet Term Condition AttrSet -> EquationSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ---- given the variants of a tuple < LHS, target terms in condition >, a RHS, a condition, and an attribute set,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ---- it constructs the corresponding variant equations
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq removeIds(M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if nonValidAttrs(getOps(M), owise idem iter)
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder then unitError('The 'module 'uses 'non-supported 'attributes '`(owise`, 'idem`, 'or 'iter '`). '\n)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else if singleVbleInLHSs(getRls(M))
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder then unitError('The 'module 'contains 'rules 'with 'single 'variables 'in 'their 'left-hand 'sides. '\n)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else if singleVbleInLHSs(getEqs(M))
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder then unitError('The 'module 'contains 'equations 'with 'single 'variables 'in 'their 'left-hand 'sides. '\n)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else if assocWithoutComm(getOps(M))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder then removeIds(M, ad-hoc)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder else removeIds(M, narrowing)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq removeIds(M, VP)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ---- the narrowing based getVariant function requires a module with id attributes turned into eqs
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ---- and sort Tuple and tuple operators in; the ad-hoc getVariant (FroCos th 2) only needs the
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ---- tuple declarations.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = setRls(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder addEqs(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder getVariants(makeIdsTuplingModule(M), addTupling(M, M), getEqs(M), VP),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder makeIdsModule(M)),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder getVariants(makeIdsTuplingModule(M), addTupling(M, M), getRls(M), VP)) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq getVariants(M, M', Rl RlS, VP)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = getRlVariants(M', getVariants(M, M', makeTuple(lhs(Rl), cond(Rl)), VP), rhs(Rl), cond(Rl), atts(Rl))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder getVariants(M, M', RlS, VP) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getVariants(M, M', (none).RuleSet, VP) = none .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq getVariants(M, M', Eq EqS, VP)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = getEqVariants(M', getVariants(M, M', makeTuple(lhs(Eq), cond(Eq)), VP), rhs(Eq), cond(Eq), atts(Eq))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder getVariants(M, M', EqS, VP) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getVariants(M, M', (none).EquationSet, VP) = none .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq getVariants(M, M', T, narrowing) = getVariants(M, T, 1, irreducible ACUnify) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getRlVariants(M, {'<_>[T], Subst, Subst', N} | VFS, T', nil, AtS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (rl T => getTerm(metaNormalize(M, _<<_(T', Subst))) [AtS] .)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder getRlVariants(M, VFS, T', nil, AtS) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getRlVariants(M, {F[T, TL], Subst, Subst', N} | VFS, T', Cond, AtS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (crl T => getTerm(metaNormalize(M, _<<_(T', Subst))) if makeCond(TL, Cond, Subst) [AtS] .)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder getRlVariants(M, VFS, T', Cond, AtS) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getRlVariants(M, empty, T', Cond, AtS) = none .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getEqVariants(M, {'<_>[T], Subst, Subst', N} | VFS, T', nil, AtS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (eq T = getTerm(metaNormalize(M, _<<_(T', Subst))) [AtS] .)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder getEqVariants(M, VFS, T', nil, AtS) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getEqVariants(M, {F[T, TL], Subst, Subst', N} | VFS, T', Cond, AtS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (ceq T = getTerm(metaNormalize(M, _<<_(T', Subst))) if makeCond(TL, Cond, Subst) [AtS] .)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder getEqVariants(M, VFS, T', Cond, AtS) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getEqVariants(M, empty, T', Cond, AtS) = none .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op makeTuple : Term Condition -> Term .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op tupleTermList : Condition -> TermList .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq makeTuple(T, Cond)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if Cond == nil
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then qid("<_>")[T]
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else qid("<_" + tupleId(Cond) + ">")[T, tupleTermList(Cond)]
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq tupleTermList(T' => T'' /\ Cond) = (T'', tupleTermList(Cond)) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq tupleTermList(T' = T'' /\ Cond) = tupleTermList(Cond) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq tupleTermList(T' : S /\ Cond) = tupleTermList(Cond) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq tupleTermList(T' := T'' /\ Cond) = (T', tupleTermList(Cond)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq tupleTermList(nil) = empty .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op makeCond : TermList Condition Substitution -> Condition .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq makeCond((T, TL), T' => T'' /\ Cond, Subst)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (T' << Subst) => T /\ makeCond(TL, Cond, Subst) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq makeCond((T, TL), T' := T'' /\ Cond, Subst)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = T := (T'' << Subst) /\ makeCond(TL, Cond, Subst) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq makeCond(TL, T' = T'' /\ Cond, Subst)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (T' << Subst) = (T'' << Subst) /\ makeCond(TL, Cond, Subst) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq makeCond(TL, T' : S /\ Cond, Subst)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (T' << Subst) : S /\ makeCond(TL, Cond, Subst) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq makeCond(empty, nil, Subst) = nil .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ---- makeIdsTuplingModule((\Sigma, E, R)) computes (\widehat{\Sigma}, B, \widetilde{U})
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op makeIdsTuplingModule : Module -> Module .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op makeIdsModule : Module -> Module .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder op addTupling : Module Module -> Module .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ---- addTupling is called after makeIdsModule, which removes the eqs in it
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ---- the first module is the oiginal one, with the original eqs and rls
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq makeIdsTuplingModule(M) = addTupling(M, makeIdsModule(M)) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq makeIdsModule(M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = setEqs(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder setOps(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder setRls(M, none),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder removeIds(getOps(M))),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder idEqs(M, getOps(M))) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq addTupling(M, M')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = addOps(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder tuplingOps(M, getEqs(M), getRls(M)),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder addSorts('Tuple, M')) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op idEqs : Module OpDeclSet -> EquationSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq idEqs(M, op F : Tp Tp' -> Tp'' [left-id(T) AtS] . ODS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (eq F[T, qid("X:" + string(type2qid(getKind(M, Tp))))] = qid("X:" + string(type2qid(getKind(M, Tp)))) [label('lIdEq1)] .)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- = (eq F[T, qid("X:" + string(type2qid(Tp)))] = qid("X:" + string(type2qid(Tp))) [label('lIdEq1)] .)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder if assoc in AtS and not comm in AtS
473b81d33893192056dde74b26b2467f983c102cChristian Maeder then (eq F[qid("X:" + string(type2qid(getKind(M, Tp)))), F[T, qid("Y:" + string(type2qid(getKind(M, Tp))))]]
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = F[qid("X:" + string(type2qid(getKind(M, Tp)))), qid("Y:" + string(type2qid(getKind(M, Tp))))]
473b81d33893192056dde74b26b2467f983c102cChristian Maeder---- then (eq F[qid("X:" + string(type2qid(Tp))), F[T, qid("Y:" + string(type2qid(Tp)))]]
473b81d33893192056dde74b26b2467f983c102cChristian Maeder---- = F[qid("X:" + string(type2qid(Tp))), qid("Y:" + string(type2qid(Tp)))]
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [label('lIdEq2)] .)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder else none
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi
473b81d33893192056dde74b26b2467f983c102cChristian Maeder idEqs(M, ODS) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq idEqs(M, op F : Tp Tp' -> Tp'' [right-id(T) AtS] . ODS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (eq F[qid("X:" + string(type2qid(getKind(M, Tp)))), T] = qid("X:" + string(type2qid(getKind(M, Tp)))) [label('rIdEq1)] .)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- = (eq F[qid("X:" + string(type2qid(Tp))), T] = qid("X:" + string(type2qid(Tp))) [label('rIdEq1)] .)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder if assoc in AtS and not comm in AtS
473b81d33893192056dde74b26b2467f983c102cChristian Maeder then (eq F[F[qid("X:" + string(type2qid(getKind(M, Tp)))), T], qid("Y:" + string(type2qid(getKind(M, Tp))))]
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = F[qid("X:" + string(type2qid(getKind(M, Tp)))), qid("Y:" + string(type2qid(getKind(M, Tp))))]
473b81d33893192056dde74b26b2467f983c102cChristian Maeder---- then (eq F[F[qid("X:" + string(type2qid(Tp))), T], qid("Y:" + string(type2qid(Tp)))]
473b81d33893192056dde74b26b2467f983c102cChristian Maeder---- = F[qid("X:" + string(type2qid(Tp))), qid("Y:" + string(type2qid(Tp)))]
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [label('rIdEq2)] .)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder else none
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi
473b81d33893192056dde74b26b2467f983c102cChristian Maeder idEqs(M, ODS) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq idEqs(M, op F : Tp Tp' -> Tp'' [id(T) AtS] . ODS)
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder ---- modified on Jan 13th, 2011
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder ---- The ACU case is now handled, the id attributes are left if also AC
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = if assoc in AtS and comm in AtS
473b81d33893192056dde74b26b2467f983c102cChristian Maeder then none
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder else if comm in AtS
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder then (eq F[T, qid("X:" + string(type2qid(getKind(M, Tp))))] = qid("X:" + string(type2qid(getKind(M, Tp)))) [label('idEq1)] .)
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder ---- then (eq F[T, qid("X:" + string(type2qid(Tp)))] = qid("X:" + string(type2qid(Tp))) [label('idEq1)] .)
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder else (eq F[qid("X:" + string(type2qid(getKind(M, Tp)))), T] = qid("X:" + string(type2qid(getKind(M, Tp)))) [label('idEq2)] .)
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder ---- else (eq F[qid("X:" + string(type2qid(Tp))), T] = qid("X:" + string(type2qid(Tp))) [label('idEq2)] .)
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder (eq F[T, qid("X:" + string(type2qid(getKind(M, Tp))))] = qid("X:" + string(type2qid(getKind(M, Tp)))) [label('idEq3)] .)
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder ---- (eq F[T, qid("X:" + string(type2qid(Tp)))] = qid("X:" + string(type2qid(Tp))) [label('idEq3)] .)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder fi
473b81d33893192056dde74b26b2467f983c102cChristian Maeder if assoc in AtS and not comm in AtS
473b81d33893192056dde74b26b2467f983c102cChristian Maeder then (eq F[qid("X:" + string(type2qid(getKind(M, Tp)))), F[T, qid("Y:" + string(type2qid(getKind(M, Tp))))]]
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = F[qid("X:" + string(type2qid(getKind(M, Tp)))), qid("Y:" + string(type2qid(getKind(M, Tp))))]
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ---- then (eq F[qid("X:" + string(type2qid(Tp))), F[T, qid("Y:" + string(type2qid(Tp)))]]
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ---- = F[qid("X:" + string(type2qid(Tp))), qid("Y:" + string(type2qid(Tp)))]
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder [none] .)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder (eq F[F[qid("X:" + string(type2qid(getKind(M, Tp)))), T], qid("Y:" + string(type2qid(getKind(M, Tp))))]
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = F[qid("X:" + string(type2qid(getKind(M, Tp)))), qid("Y:" + string(type2qid(getKind(M, Tp))))]
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ---- (eq F[F[qid("X:" + string(type2qid(Tp))), T], qid("Y:" + string(type2qid(Tp)))]
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ---- = F[qid("X:" + string(type2qid(Tp))), qid("Y:" + string(type2qid(Tp)))]
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder [none] .)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder else none
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder fi
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi
473b81d33893192056dde74b26b2467f983c102cChristian Maeder idEqs(M, ODS) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq idEqs(M, ODS) = none [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op removeIds : OpDeclSet -> OpDeclSet .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder ceq removeIds(op F : TpL -> Tp [id(T) AtS] . ODS)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = removeIds(op F : TpL -> Tp [AtS] . ODS)
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder if not (assoc in AtS and comm in AtS) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq removeIds(op F : TpL -> Tp [left-id(T) AtS] . ODS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = removeIds(op F : TpL -> Tp [AtS] . ODS) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq removeIds(op F : TpL -> Tp [right-id(T) AtS] . ODS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = removeIds(op F : TpL -> Tp [AtS] . ODS) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq removeIds(ODS) = ODS [owise] .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op tuplingOps : Module EquationSet RuleSet -> OpDeclSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op tuplingOps : Module EquationSet -> OpDeclSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op tuplingOps : Module RuleSet -> OpDeclSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq tuplingOps(M, EqS, RlS) = tuplingOps(M, EqS) tuplingOps(M, RlS) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq tuplingOps(M, eq LHS = RHS [AtS] . EqS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (op qid("<_>") : getKind(M, leastSort(M, LHS)) -> '`[Tuple`] [none] .)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder tuplingOps(M, EqS) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq tuplingOps(M, ceq LHS = RHS if Cond [AtS] . EqS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (op qid("<_" + tupleId(Cond) + ">") : getKind(M, leastSort(M, LHS)) arityCond(M, Cond) -> '`[Tuple`] [none] .)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder tuplingOps(M, EqS) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq tuplingOps(M, (none).EquationSet) = none .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq tuplingOps(M, rl LHS => RHS [AtS] . RlS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (op qid("<_>") : getKind(M, leastSort(M, LHS)) -> '`[Tuple`] [none] .)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder tuplingOps(M, RlS) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq tuplingOps(M, crl LHS => RHS if Cond [AtS] . RlS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (op qid("<_" + tupleId(Cond) + ">") : getKind(M, leastSort(M, LHS)) arityCond(M, Cond) -> '`[Tuple`] [none] .)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder tuplingOps(M, RlS) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq tuplingOps(M, (none).RuleSet) = none .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op arityCond : Module Condition -> TypeList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq arityCond(M, T => T' /\ Cond) = getKind(M, leastSort(M, T')) arityCond(M, Cond) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq arityCond(M, T := T' /\ Cond) = getKind(M, leastSort(M, T)) arityCond(M, Cond) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq arityCond(M, T = T' /\ Cond) = arityCond(M, Cond) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq arityCond(M, T : S /\ Cond) = arityCond(M, Cond) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq arityCond(M, nil) = nil .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op tupleId : Condition -> String .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq tupleId(T => T' /\ Cond) = ",_" + tupleId(Cond) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq tupleId(T := T' /\ Cond) = ",_" + tupleId(Cond) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq tupleId(T = T' /\ Cond) = tupleId(Cond) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq tupleId(T : S /\ Cond) = tupleId(Cond) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq tupleId(Cond) = "" .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ---- See Th. 2, FroCos'09
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ---- TO DO: it doesn't give the minimal set of variants
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op getVariants : Module Term SubstitutionSet -> VariantFourSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op getSubstitutions : Module QidSet OpDeclSet Nat -> Tuple{SubstitutionSet,Nat} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op getSubstitutions1 : Module Variable OpDeclSet Nat -> Tuple{SubstitutionSet,Nat} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op combineSubsts : SubstitutionSet SubstitutionSet -> SubstitutionSet .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq getVariants(M, M', T, ad-hoc)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = getVariants(M', T, getSubst(getSubstitutions(M', vars(T), getOps(M'), 0))) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getVariants(M, T, Subst | SubstS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = {getTerm(metaNormalize(M, T << Subst)), Subst, none, 0} | getVariants(M, T, SubstS) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getVariants(M, T, empty) = {T, none, none, 0} .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getSubstitutions(M, V ; VS, ODS, N)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = < combineSubsts(
473b81d33893192056dde74b26b2467f983c102cChristian Maeder getSubst(getSubstitutions1(M, V, ODS, N)),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder getSubst(getSubstitutions(M, VS, ODS, getIndex(getSubstitutions1(M, V, ODS, N))))) ;
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder getIndex(getSubstitutions(M, VS, ODS, getIndex(getSubstitutions1(M, V, ODS, N)))) > .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq getSubstitutions(M, none, ODS, N) = < empty ; N > .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq combineSubsts(Subst | SubstS, Subst' | SubstS')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (Subst ; Subst') | combineSubsts(SubstS, Subst' | SubstS') | combineSubsts(Subst, SubstS') .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq combineSubsts(SubstS, empty) = SubstS .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq combineSubsts(empty, SubstS) = SubstS .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ceq getSubstitutions1(M, V, op F : TpL -> Tp [id(T) AtS] . ODS, N)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = < (V <- T) |
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if (assoc in AtS and-then not comm in AtS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder and-then sortLeq(M, leastSort(M, F[qid("X@" + string(N, 10) + ":" + string(Tp)), T]), getType(V))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder then (V <- (F[qid("X@" + string(N, 10) + ":" + string(Tp)), T]))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder | (V <- (F[T, qid("X@" + string(s N, 10) + ":" + string(Tp))]))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else empty
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi |
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder getSubst(getSubstitutions1(M, V, ODS, s s N)) ;
473b81d33893192056dde74b26b2467f983c102cChristian Maeder getIndex(getSubstitutions1(M, V, ODS, s s N)) >
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if sortLeq(M, leastSort(M, T), getType(V)) . ---- ls[e] <= s ls[f(y,e)] <= s
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ceq getSubstitutions1(M, V, op F : TpL -> Tp [right-id(T) AtS] . ODS, N)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = < (V <- T) |
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if (assoc in AtS and-then not comm in AtS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder and-then sortLeq(M, leastSort(M, F[qid("X@" + string(N, 10) + ":" + string(Tp)), T]), getType(V))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then (V <- F[T, qid("X@" + string(N, 10) + ":" + string(Tp))])
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else empty
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi |
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder getSubst(getSubstitutions1(M, V, ODS, s s N)) ;
473b81d33893192056dde74b26b2467f983c102cChristian Maeder getIndex(getSubstitutions1(M, V, ODS, s s N)) >
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if sortLeq(M, leastSort(M, T), getType(V)) . ---- ls[e] <= s ls[f(y,e)] <= s
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ceq getSubstitutions1(M, V, op F : TpL -> Tp [left-id(T) AtS] . ODS, N)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = < (V <- T) |
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if (assoc in AtS and-then not comm in AtS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder and-then sortLeq(M, leastSort(M, F[qid("X@" + string(N, 10) + ":" + string(Tp)), T]), getType(V))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then (V <- F[qid("X@" + string(s N, 10) + ":" + string(Tp)), T])
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else empty
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi |
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder getSubst(getSubstitutions1(M, V, ODS, s s N)) ;
473b81d33893192056dde74b26b2467f983c102cChristian Maeder getIndex(getSubstitutions1(M, V, ODS, s s N)) >
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if sortLeq(M, leastSort(M, T), getType(V)) . ---- ls[e] <= s ls[f(y,e)] <= s
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq getSubstitutions1(M, V, ODS, N) = < empty ; N > [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ---- Given a module with axioms B where for each f we have B_f \in {A_f,C_f},
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ---- we now define a rewrite theory (\Sigma, B�, A), where for each f we have
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ---- B�_f = B_f if B_f =/= {A_f}, and B�_f = \emptyset if B_f == {A_f}, and
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ---- where A consists of rules of either the form
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ---- f(f(x, y), z) -> f(x, f(y, z))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ---- or the form
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ---- f(x, f(y, z)) -> f(f(x, y), z)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ---- for each f such that B_f == {A_f}. That is, for any such f we "choose" a
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ---- rule asociating f to the right or to the left (but only "one" of these possibilities).
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ---- TO DO: I cannot set a timeout. If the first one doesn't work it hangs up!
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ---- TO DO: All terms are in their flatten form, when removing the assoc atributes I get error messages.
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op removeLonelyAssocs : Module -> Module .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ---- removes all assoc with no comm, returning an equivalent module
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op $removeLonelyAssocs : OpDeclSet -> OpDeclSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ---- removes those assoc attributes that are not with the comm one
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op $removeLonelyAssocs : Module OpDeclSet OpDeclSet EquationSet ~> Module .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ---- arg. 1 (Module): the module with assoc attribute removed
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ---- arg. 2 (OpDeclSet): initially all op. decls.; they are evaluated one by one,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ---- adding the corresponding equation to the 4th arg. in the recursive call
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ---- arg. 3 (OpDeclSet): initially empty; evaluated op. decls. are added to this set
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ---- arg. 4 (EquationSet): assoc. eq. to be added to the module
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op $checkAEq : Module Equation -> Bool .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ---- checks whether the assoc. eq. given as argument unifies with any lhs in the module
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ---- arg. 1 (Module): the module with assoc attribute removed
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ---- arg. 2 (Equation): tentative assoc. eq. to evaluate
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op $checkAEqAux : Module EquationSet -> Bool .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ---- tries to narrow with the assoc. eq. (as a rule) on each lhs in the module.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ---- arg. 1 (Module): module with assoc attribute removed, with the assoc. eq.
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ---- turned into a rule as single rule (no eqs.)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ---- arg. 2 (EquationSet): eqs. in the original module
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op $anyLonelyAssoc : OpDeclSet -> Bool .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ---- checks whether the module contains an operator with assoc and no comm
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq removeLonelyAssocs(M)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = if $anyLonelyAssoc(getOps(M))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then if nonValidAttrs(getOps(M), owise idem iter)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then unitError('The 'module 'uses 'non-supported 'attributes '`(owise`, 'idem`, 'or 'iter '`). '`))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else if singleVbleInLHSs(getRls(M))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then unitError('The 'module 'contains 'rules 'with 'single 'variables 'in 'their 'left-hand 'sides. '`))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else if singleVbleInLHSs(getEqs(M))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder then unitError('The 'module 'contains 'equations 'with 'single 'variables 'in 'their 'left-hand 'sides. '`))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else $removeLonelyAssocs(setOps(M, $removeLonelyAssocs(getOps(M))), getOps(M), none, none)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder else M
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq $removeLonelyAssocs(op F : Tp Tp -> Tp [assoc AtS] . OPDS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = op F : Tp Tp -> Tp [AtS] . $removeLonelyAssocs(OPDS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if not comm in AtS .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq $removeLonelyAssocs(OPDS) = OPDS [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq $removeLonelyAssocs(M, op F : TpL -> Tp [AtS] . OPDS, OPDS', EqS)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = $removeLonelyAssocs(M, OPDS, op F : TpL -> Tp [AtS] . OPDS', EqS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if size(TpL) =/= 2 or not assoc in AtS or comm in AtS .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq $removeLonelyAssocs(M, op F : Tp Tp -> Tp [assoc AtS] . OPDS, OPDS', EqS)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = $removeLonelyAssocs(M, OPDS, op F : Tp Tp -> Tp [AtS] . OPDS', Eq EqS)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder if not comm in AtS
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder /\ Str:String := string(type2qid(getKind(M, Tp)))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder /\ Eq := (eq F[F[qid("X:" + Str:String), qid("Y:" + Str:String)], qid("Z:" + Str:String)]
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = F[qid("X:" + Str:String), F[qid("Y:" + Str:String), qid("Z:" + Str:String)]] [label('assocEq)] .)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder /\ $checkAEq(M, Eq) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq $removeLonelyAssocs(M, op F : Tp Tp -> Tp [assoc AtS] . OPDS, OPDS', EqS)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = $removeLonelyAssocs(M, OPDS, op F : Tp Tp -> Tp [AtS] . OPDS', Eq EqS)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder if not comm in AtS
473b81d33893192056dde74b26b2467f983c102cChristian Maeder /\ Str:String := string(type2qid(getKind(M, Tp)))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder /\ Eq := (eq F[qid("X:" + Str:String), F[qid("Y:" + Str:String), qid("Z:" + Str:String)]]
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = F[F[qid("X:" + Str:String), qid("Y:" + Str:String)], qid("Z:" + Str:String)] [label('assocEq)] .)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder /\ $checkAEq(M, Eq) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq $removeLonelyAssocs(M, none, OPDS', EqS) = addEqs(EqS, M) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq $removeLonelyAssocs(M, op F : TpL -> Tp [AtS] . OPDS, OPDS', EqS) = unitError('assoc 'attributes 'cannot 'be 'removed 'for F) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq $checkAEq(M, Eq) = $checkAEqAux(setRls(setEqs(M, none), rulify(Eq)), getEqs(M)) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq $checkAEqAux(M, Eq EqS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = T:Term == lhs(Eq) ---- the assoc eq doesn't unify with the equation's lhs
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder and
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder Subst:Substitution == none
473b81d33893192056dde74b26b2467f983c102cChristian Maeder and-then
473b81d33893192056dde74b26b2467f983c102cChristian Maeder $checkAEqAux(M, EqS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if {T:Term, Tp:Type, Subst:Substitution} := metaNarrow(M, lhs(Eq), 1) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq $checkAEqAux(M, none) = true .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq $anyLonelyAssoc(op F : Tp Tp -> Tp [assoc AtS] . OPDS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = true
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if not comm in AtS .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq $anyLonelyAssoc(OPDS) = false [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederendfm
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder-------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maederfmod ACU-COHERENCE-COMPLETION is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder inc UNIT .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder inc MODULE-HANDLING * (op addOps to addOpsSE, op addEqs to addEqsSE, op addSorts to addSortsSE) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars V W : Variable .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var C : Constant .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var FM : FModule .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var SM : SModule .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var M : Module .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var N : Nat .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars T T' T'' LHS RHS : Term .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars Subst Subst' : Substitution .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var F : Qid .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var TL : TermList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars AtS AtS' : AttrSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder---- var VFS : VariantFourSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars Tp Tp' Tp'' : Type .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var TpL : TypeList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var Rl : Rule .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var RlS : RuleSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var Eq : Equation .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var EqS : EquationSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var ODS : OpDeclSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var Cond : Condition .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var QIL : QidList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ------------------------------------------------------------------------------
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ---- coherence completion
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ------------------------------------------------------------------------------
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op acuCohComplete : SModule -> SModule .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op acuCohComplete : SModule OpDeclSet RuleSet -> RuleSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op acuCohComplete : SModule Type AttrSet Rule -> RuleSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op acuCohComplete : SModule OpDeclSet EquationSet -> EquationSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op acuCohComplete : SModule Type AttrSet Equation -> EquationSet .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq acuCohComplete(FM)
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder = moreGeneralEqs(setEqs(FM, acuCohComplete(FM, getOps(FM), getEqs(FM)))) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq acuCohComplete(SM)
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder = moreGeneralEqs(
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder moreGeneralRls(
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder setRls(
473b81d33893192056dde74b26b2467f983c102cChristian Maeder setEqs(SM,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder acuCohComplete(SM, getOps(SM), getEqs(SM))),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder acuCohComplete(SM, getOps(SM), getRls(SM)))))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder [owise] .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq acuCohComplete(unitError(QIL)) = unitError(QIL) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq acuCohComplete(M, op F : Tp Tp' -> Tp'' [assoc AtS] . ODS, rl F[TL] => RHS [AtS'] . RlS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = acuCohComplete(M, Tp, assoc AtS, rl F[TL] => RHS [AtS'] .)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder acuCohComplete(M, op F : Tp Tp' -> Tp'' [assoc AtS] . ODS, RlS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if sameKind(M, Tp, Tp')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder /\ sameKind(M, Tp', Tp'')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder /\ sameKindAll(M, Tp, eLeastSort(M, TL)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq acuCohComplete(M, op F : Tp Tp' -> Tp'' [assoc AtS] . ODS, crl F[TL] => RHS if Cond [AtS'] . RlS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = acuCohComplete(M, Tp, assoc AtS, crl F[TL] => RHS if Cond [AtS'] .)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder acuCohComplete(M, op F : Tp Tp' -> Tp'' [assoc AtS] . ODS, RlS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if sameKind(M, Tp, Tp')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder /\ sameKind(M, Tp', Tp'')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder /\ sameKindAll(M, Tp, eLeastSort(M, TL)) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq acuCohComplete(M, ODS, rl LHS => RHS [AtS] . RlS)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = rl LHS => RHS [AtS] . acuCohComplete(M, ODS, RlS)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder [owise] .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq acuCohComplete(M, ODS, crl LHS => RHS if Cond [AtS] . RlS)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = crl LHS => RHS if Cond [AtS] . acuCohComplete(M, ODS, RlS)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder [owise] .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq acuCohComplete(M, ODS, (none).RuleSet) = none .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq acuCohComplete(M, op F : Tp Tp' -> Tp'' [assoc AtS] . ODS, eq F[TL] = RHS [AtS'] . EqS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = acuCohComplete(M, Tp, assoc AtS, eq F[TL] = RHS [AtS'] .)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder acuCohComplete(M, op F : Tp Tp' -> Tp'' [assoc AtS] . ODS, EqS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if sameKind(M, Tp, Tp')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder /\ sameKind(M, Tp', Tp'')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder /\ sameKindAll(M, Tp, eLeastSort(M, TL)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq acuCohComplete(M, op F : Tp Tp' -> Tp'' [assoc AtS] . ODS, ceq F[TL] = RHS if Cond [AtS'] . EqS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = acuCohComplete(M, Tp, assoc AtS, ceq F[TL] = RHS if Cond [AtS'] .)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder acuCohComplete(M, op F : Tp Tp' -> Tp'' [assoc AtS] . ODS, EqS)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if sameKind(M, Tp, Tp')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder /\ sameKind(M, Tp', Tp'')
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder /\ sameKindAll(M, Tp, eLeastSort(M, TL)) .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq acuCohComplete(M, ODS, eq LHS = RHS [AtS] . EqS)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = eq LHS = RHS [AtS] . acuCohComplete(M, ODS, EqS)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder [owise] .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq acuCohComplete(M, ODS, ceq LHS = RHS if Cond [AtS] . EqS)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = ceq LHS = RHS if Cond [AtS] . acuCohComplete(M, ODS, EqS)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder [owise] .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder eq acuCohComplete(M, ODS, (none).EquationSet) = none .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op sameKindAll : Module Type TypeList -> Bool .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq sameKindAll(M, Tp, Tp' TpL) = sameKind(M, Tp, Tp') and-then sameKindAll(M, Tp, TpL) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq sameKindAll(M, Tp, nil) = true .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ---- Given f(t1,...,tn) -> r if C
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ---- if f AC add f(t1,...,tn,x:[s]) -> f(r,x:[s]) if C
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq acuCohComplete(M, Tp, assoc comm AtS, rl F[TL] => RHS [AtS'] .)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (rl F[TL] => RHS [AtS'] .)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder (rl F[TL, qid("X@@@:[" + string(Tp) + "]")] => F[RHS, qid("X@@@:[" + string(Tp) + "]")] [AtS'] .)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq acuCohComplete(M, Tp, assoc comm AtS, crl F[TL] => RHS if Cond [AtS'] .)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (crl F[TL] => RHS if Cond [AtS'] .)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder (crl F[TL, qid("X@@@:[" + string(Tp) + "]")] => F[RHS, qid("X@@@:[" + string(Tp) + "]")] if Cond [AtS'] .)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ---- if f ACU replace by f(t1,...,tn,x:[s]) -> f(r,x:[s]) if C
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq acuCohComplete(M, Tp, assoc comm id(T) AtS, rl F[TL] => RHS [AtS'] .)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = (rl F[TL, qid("X@@@:[" + string(Tp) + "]")] => F[RHS, qid("X@@@:[" + string(Tp) + "]")] [AtS'] .) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq acuCohComplete(M, Tp, assoc comm id(T) AtS, crl F[TL] => RHS if Cond [AtS'] .)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = (crl F[TL, qid("X@@@:[" + string(Tp) + "]")] => F[RHS, qid("X@@@:[" + string(Tp) + "]")] if Cond [AtS'] .) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ---- if f AU replace by f(x:[s],t1,...,tn,y:[s]) -> f(x:[s],r,y:[s]) if C
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq acuCohComplete(M, Tp, assoc id(T) AtS, rl F[TL] => RHS [AtS'] .)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = (rl F[qid("X@@@:[" + string(Tp) + "]"), TL, qid("Y@@@:[" + string(Tp) + "]")]
473b81d33893192056dde74b26b2467f983c102cChristian Maeder => F[qid("X@@@:[" + string(Tp) + "]"), RHS, qid("Y@@@:[" + string(Tp) + "]")] [AtS'] .)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder if not comm in AtS .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq acuCohComplete(M, Tp, assoc id(T) AtS, crl F[TL] => RHS if Cond [AtS'] .)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = (crl F[qid("X@@@:[" + string(Tp) + "]"), TL, qid("Y@@@:[" + string(Tp) + "]")]
473b81d33893192056dde74b26b2467f983c102cChristian Maeder => F[qid("X@@@:[" + string(Tp) + "]"), RHS, qid("Y@@@:[" + string(Tp) + "]")] if Cond [AtS'] .)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder if not comm in AtS .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ---- if f ALU replace by f(x:[s],t1,...,tn,y:[s]) -> f(x:[s],r,y:[s]) if C
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ---- and add f(x:[s],t1,...,tn) -> f(x:[s],r) if C
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq acuCohComplete(M, Tp, assoc left-id(T) AtS, rl F[TL] => RHS [AtS'] .)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = (rl F[qid("X@@@:[" + string(Tp) + "]"), TL, qid("Y@@@:[" + string(Tp) + "]")]
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder => F[qid("X@@@:[" + string(Tp) + "]"), RHS, qid("Y@@@:[" + string(Tp) + "]")] [AtS'] .)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder (rl F[qid("X@@@:[" + string(Tp) + "]"), TL]
473b81d33893192056dde74b26b2467f983c102cChristian Maeder => F[qid("X@@@:[" + string(Tp) + "]"), RHS] [AtS'] .) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq acuCohComplete(M, Tp, assoc left-id(T) AtS, crl F[TL] => RHS if Cond [AtS'] .)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = (crl F[qid("X@@@:[" + string(Tp) + "]"), TL, qid("Y@@@:[" + string(Tp) + "]")]
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder => F[qid("X@@@:[" + string(Tp) + "]"), RHS, qid("Y@@@:[" + string(Tp) + "]")] if Cond [AtS'] .)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder (crl F[qid("X@@@:[" + string(Tp) + "]"), TL]
473b81d33893192056dde74b26b2467f983c102cChristian Maeder => F[qid("X@@@:[" + string(Tp) + "]"), RHS] if Cond [AtS'] .) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ---- if f ARU replace by f(x:[s],t1,...,tn,y:[s]) -> f(x:[s],r,y:[s]) if C
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ---- and add f(t1,...,tn,y:[s]) -> f(r,y:[s]) if C
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq acuCohComplete(M, Tp, assoc right-id(T) AtS, rl F[TL] => RHS [AtS'] .)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = (rl F[qid("X@@@:[" + string(Tp) + "]"), TL, qid("Y@@@:[" + string(Tp) + "]")]
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder => F[qid("X@@@:[" + string(Tp) + "]"), RHS, qid("Y@@@:[" + string(Tp) + "]")] [AtS'] .)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder (rl F[TL, qid("Y@@@:[" + string(Tp) + "]")]
473b81d33893192056dde74b26b2467f983c102cChristian Maeder => F[RHS, qid("Y@@@:[" + string(Tp) + "]")] [AtS'] .) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq acuCohComplete(M, Tp, assoc right-id(T) AtS, crl F[TL] => RHS if Cond [AtS'] .)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = (crl F[qid("X@@@:[" + string(Tp) + "]"), TL, qid("Y@@@:[" + string(Tp) + "]")]
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder => F[qid("X@@@:[" + string(Tp) + "]"), RHS, qid("Y@@@:[" + string(Tp) + "]")] if Cond [AtS'] .)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder (crl F[TL, qid("Y@@@:[" + string(Tp) + "]")]
473b81d33893192056dde74b26b2467f983c102cChristian Maeder => F[RHS, qid("Y@@@:[" + string(Tp) + "]")] if Cond [AtS'] .) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ---- if f A add f(x:[s],t1,...,tn,y:[s]) -> f(x:[s],r,y:[s]) if C
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ---- f(x:[s],t1,...,tn) -> f(x:[s],r) if C
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ---- f(t1,...,tn,y:[s]) -> f(r,y:[s]) if C
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq acuCohComplete(M, Tp, assoc AtS, rl F[TL] => RHS [AtS'] .)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = (rl F[TL] => RHS [AtS'] .)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder (rl F[qid("X@@@:[" + string(Tp) + "]"), TL, qid("Y@@@:[" + string(Tp) + "]")]
473b81d33893192056dde74b26b2467f983c102cChristian Maeder => F[qid("X@@@:[" + string(Tp) + "]"), RHS, qid("Y@@@:[" + string(Tp) + "]")] [AtS'] .)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder (rl F[qid("X@@@:[" + string(Tp) + "]"), TL]
473b81d33893192056dde74b26b2467f983c102cChristian Maeder => F[qid("X@@@:[" + string(Tp) + "]"), RHS] [AtS'] .)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder (rl F[TL, qid("Y@@@:[" + string(Tp) + "]")]
473b81d33893192056dde74b26b2467f983c102cChristian Maeder => F[RHS, qid("Y@@@:[" + string(Tp) + "]")] [AtS'] .)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder if not comm in AtS
473b81d33893192056dde74b26b2467f983c102cChristian Maeder [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq acuCohComplete(M, Tp, assoc AtS, crl F[TL] => RHS if Cond [AtS'] .)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = (crl F[TL] => RHS if Cond [AtS'] .)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder (crl F[qid("X@@@:[" + string(Tp) + "]"), TL, qid("Y@@@:[" + string(Tp) + "]")]
473b81d33893192056dde74b26b2467f983c102cChristian Maeder => F[qid("X@@@:[" + string(Tp) + "]"), RHS, qid("Y@@@:[" + string(Tp) + "]")] if Cond [AtS'] .)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder (crl F[qid("X@@@:[" + string(Tp) + "]"), TL]
473b81d33893192056dde74b26b2467f983c102cChristian Maeder => F[qid("X@@@:[" + string(Tp) + "]"), RHS] if Cond [AtS'] .)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder (crl F[TL, qid("Y@@@:[" + string(Tp) + "]")]
473b81d33893192056dde74b26b2467f983c102cChristian Maeder => F[RHS, qid("Y@@@:[" + string(Tp) + "]")] if Cond [AtS'] .)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder if not comm in AtS
473b81d33893192056dde74b26b2467f983c102cChristian Maeder [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ---- Given f(t1,...,tn) -> r if C
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ---- if f AC add f(t1,...,tn,x:[s]) -> f(r,x:[s]) if C
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq acuCohComplete(M, Tp, assoc comm AtS, eq F[TL] = RHS [AtS'] .)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (eq F[TL] = RHS [AtS'] .)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder (eq F[TL, qid("X@@@:[" + string(Tp) + "]")] = F[RHS, qid("X@@@:[" + string(Tp) + "]")] [AtS'] .)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq acuCohComplete(M, Tp, assoc comm AtS, ceq F[TL] = RHS if Cond [AtS'] .)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = (ceq F[TL] = RHS if Cond [AtS'] .)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder (ceq F[TL, qid("X@@@:[" + string(Tp) + "]")] = F[RHS, qid("X@@@:[" + string(Tp) + "]")] if Cond [AtS'] .)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ---- if f ACU replace by f(t1,...,tn,x:[s]) -> f(r,x:[s]) if C
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq acuCohComplete(M, Tp, assoc comm id(T) AtS, eq F[TL] = RHS [AtS'] .)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = (eq F[TL, qid("X@@@:[" + string(Tp) + "]")] = F[RHS, qid("X@@@:[" + string(Tp) + "]")] [AtS'] .) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq acuCohComplete(M, Tp, assoc comm id(T) AtS, ceq F[TL] = RHS if Cond [AtS'] .)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = (ceq F[TL, qid("X@@@:[" + string(Tp) + "]")] = F[RHS, qid("X@@@:[" + string(Tp) + "]")] if Cond [AtS'] .) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ---- if f AU replace by f(x:[s],t1,...,tn,y:[s]) -> f(x:[s],r,y:[s]) if C
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq acuCohComplete(M, Tp, assoc id(T) AtS, eq F[TL] = RHS [AtS'] .)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = (eq F[qid("X@@@:[" + string(Tp) + "]"), TL, qid("Y@@@:[" + string(Tp) + "]")]
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = F[qid("X@@@:[" + string(Tp) + "]"), RHS, qid("Y@@@:[" + string(Tp) + "]")] [AtS'] .)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder if not comm in AtS .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq acuCohComplete(M, Tp, assoc id(T) AtS, ceq F[TL] = RHS if Cond [AtS'] .)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = (ceq F[qid("X@@@:[" + string(Tp) + "]"), TL, qid("Y@@@:[" + string(Tp) + "]")]
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = F[qid("X@@@:[" + string(Tp) + "]"), RHS, qid("Y@@@:[" + string(Tp) + "]")] if Cond [AtS'] .)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder if not comm in AtS .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ---- if f ALU replace by f(x:[s],t1,...,tn,y:[s]) -> f(x:[s],r,y:[s]) if C
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ---- and add f(x:[s],t1,...,tn) -> f(x:[s],r) if C
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq acuCohComplete(M, Tp, assoc left-id(T) AtS, eq F[TL] = RHS [AtS'] .)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = (eq F[qid("X@@@:[" + string(Tp) + "]"), TL, qid("Y@@@:[" + string(Tp) + "]")]
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = F[qid("X@@@:[" + string(Tp) + "]"), RHS, qid("Y@@@:[" + string(Tp) + "]")] [AtS'] .)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder (eq F[qid("X@@@:[" + string(Tp) + "]"), TL]
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = F[qid("X@@@:[" + string(Tp) + "]"), RHS] [AtS'] .) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq acuCohComplete(M, Tp, assoc left-id(T) AtS, ceq F[TL] = RHS if Cond [AtS'] .)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = (ceq F[qid("X@@@:[" + string(Tp) + "]"), TL, qid("Y@@@:[" + string(Tp) + "]")]
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = F[qid("X@@@:[" + string(Tp) + "]"), RHS, qid("Y@@@:[" + string(Tp) + "]")] if Cond [AtS'] .)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder (ceq F[qid("X@@@:[" + string(Tp) + "]"), TL]
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = F[qid("X@@@:[" + string(Tp) + "]"), RHS] if Cond [AtS'] .) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ---- if f ARU replace by f(x:[s],t1,...,tn,y:[s]) -> f(x:[s],r,y:[s]) if C
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ---- and add f(t1,...,tn,y:[s]) -> f(r,y:[s]) if C
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq acuCohComplete(M, Tp, assoc right-id(T) AtS, eq F[TL] = RHS [AtS'] .)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = (eq F[qid("X@@@:[" + string(Tp) + "]"), TL, qid("Y@@@:[" + string(Tp) + "]")]
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = F[qid("X@@@:[" + string(Tp) + "]"), RHS, qid("Y@@@:[" + string(Tp) + "]")] [AtS'] .)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder (eq F[TL, qid("Y@@@:[" + string(Tp) + "]")]
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = F[RHS, qid("Y@@@:[" + string(Tp) + "]")] [AtS'] .) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq acuCohComplete(M, Tp, assoc right-id(T) AtS, ceq F[TL] = RHS if Cond [AtS'] .)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = (ceq F[qid("X@@@:[" + string(Tp) + "]"), TL, qid("Y@@@:[" + string(Tp) + "]")]
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = F[qid("X@@@:[" + string(Tp) + "]"), RHS, qid("Y@@@:[" + string(Tp) + "]")] if Cond [AtS'] .)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder (ceq F[TL, qid("Y@@@:[" + string(Tp) + "]")]
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = F[RHS, qid("Y@@@:[" + string(Tp) + "]")] if Cond [AtS'] .) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ---- if f A add f(x:[s],t1,...,tn,y:[s]) -> f(x:[s],r,y:[s]) if C
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ---- f(x:[s],t1,...,tn) -> f(x:[s],r) if C
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ---- f(t1,...,tn,y:[s]) -> f(r,y:[s]) if C
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq acuCohComplete(M, Tp, assoc AtS, eq F[TL] = RHS [AtS'] .)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = (eq F[TL] = RHS [AtS'] .)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder (eq F[qid("X@@@:[" + string(Tp) + "]"), TL, qid("Y@@@:[" + string(Tp) + "]")]
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = F[qid("X@@@:[" + string(Tp) + "]"), RHS, qid("Y@@@:[" + string(Tp) + "]")] [AtS'] .)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder (eq F[qid("X@@@:[" + string(Tp) + "]"), TL]
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = F[qid("X@@@:[" + string(Tp) + "]"), RHS] [AtS'] .)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder (eq F[TL, qid("Y@@@:[" + string(Tp) + "]")]
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = F[RHS, qid("Y@@@:[" + string(Tp) + "]")] [AtS'] .)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder if not comm in AtS
473b81d33893192056dde74b26b2467f983c102cChristian Maeder [owise] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ceq acuCohComplete(M, Tp, assoc AtS, ceq F[TL] = RHS if Cond [AtS'] .)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = (ceq F[TL] = RHS if Cond [AtS'] .)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder (ceq F[qid("X@@@:[" + string(Tp) + "]"), TL, qid("Y@@@:[" + string(Tp) + "]")]
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = F[qid("X@@@:[" + string(Tp) + "]"), RHS, qid("Y@@@:[" + string(Tp) + "]")] if Cond [AtS'] .)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder (ceq F[qid("X@@@:[" + string(Tp) + "]"), TL]
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = F[qid("X@@@:[" + string(Tp) + "]"), RHS] if Cond [AtS'] .)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder (ceq F[TL, qid("Y@@@:[" + string(Tp) + "]")]
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = F[RHS, qid("Y@@@:[" + string(Tp) + "]")] if Cond [AtS'] .)
473b81d33893192056dde74b26b2467f983c102cChristian Maeder if not comm in AtS
473b81d33893192056dde74b26b2467f983c102cChristian Maeder [owise] .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maederendfm
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*******************************************************************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder***
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** Interaction with the Persistent Database
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder***
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** In the case of Full Maude, the persistent state of the system is given by
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** a single object which maintains the database of the system. This object
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** has an attribute \texttt{db}, to keep the actual database in which all the
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** modules being entered are stored, an attribute \texttt{default}, to keep
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** the identifier of the current module by default, and attributes
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \texttt{input} and \texttt{output} to simplify the communication of the
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** read-eval-print loop given by the \texttt{LOOP-MODE} module with the
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** database. Using the notation for classes in object-oriented modules (see
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** Section~\ref{object-oriented-modules}) we can declare the class
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \texttt{database} as follows:
473b81d33893192056dde74b26b2467f983c102cChristian Maeder***
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** class database | db : Database, input : TermList,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** output : QidList, default : ModId .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder***
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** Since we assume that \texttt{database} is the only object class that has
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** been defined---so that the only objects of sort \texttt{Object} will
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** belong to the \texttt{database} class---to specify the admissible states
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** in the persistent state of \texttt{LOOP-MODE} for Full Maude, it is enough
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** to give the subsort declaration
473b81d33893192056dde74b26b2467f983c102cChristian Maeder***
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** subsort Object < State .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
473b81d33893192056dde74b26b2467f983c102cChristian Maeder***
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \subsection{The \texttt{CONFIGURATION+} Module}
473b81d33893192056dde74b26b2467f983c102cChristian Maeder***
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** change (2/20/2002): CONFIGURATION is now part of the prelude
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder***
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** fmod CONFIGURATION is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** sort Oid Cid Attribute AttributeSet Configuration Object Msg .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder***
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** subsort Attribute < AttributeSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** subsorts Object Msg < Configuration .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder***
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** op none : -> AttributeSet .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** op _,_ : AttributeSet AttributeSet -> AttributeSet
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** [assoc comm id: none] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** op none : -> Configuration .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** op __ : Configuration Configuration -> Configuration
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** [assoc comm id: none] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** op <_:_|_> : Oid Cid AttributeSet -> Object .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** op <_:_| > : Oid Cid -> Object .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder***
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** var O : Oid .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** var C : Cid .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder***
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** eq < O : C | > = < O : C | none > .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** endfm
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*******************************************************************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder***
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** Top Level Handling of the Persistent Database
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder***
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** Note that, since the Full Maude specification is given as a system module
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder***Core Maude, object-oriented declarations cannot be given directly.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** Instead, the equivalent declarations desugaring the desired
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** object-oriented declarations have to be specified. We use also the same
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** conventions discussed in Section~\ref{omod2mod} regarding the use of
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** variables instead of class names in the objects and in the addition of
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** variables of sort \texttt{AttributeSet} to range over the additional
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** attributes. As we shall see in Chapter~\ref{crc}, this convention will
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** allow us to extend the Full Maude system in a very simple and clean way.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** To allow the use of the object-oriented notation the predefined module
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \texttt{CONFIGURATION}, presented in Section~\ref{omod2mod}, is included
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** in the following module \texttt{DATABASE-HANDLING}.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maedermod DATABASE-HANDLING is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder inc META-LEVEL .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder inc CONFIGURATION .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr VIEW-META-PRETTY-PRINT .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr VIEW-PROCESSING .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr COMMAND-PROCESSING .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr PREDEF-UNITS .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr MODULE-VARIANTS .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr ACU-COHERENCE-COMPLETION .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr HELP .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var F : Qid .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var QIL : QidList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var NQIL NQIL' NQIL'' : NeQidList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars T T' T'' T3 : Term .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var TL : TermList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var DB DB' : Database .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars ME ME' ME'' : ModuleExpression .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars QIL' QIL'' : QidList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars MNS MNS' MNS'' MNS3 MNS4 : Set{ModuleName} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var VE : ViewExp .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var VES : Set{ViewExp} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars MIS MIS' : Set{ModuleInfo} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var VIS : Set{ViewInfo} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars PDS PDS' : Set{ParameterDecl} .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var B : Bool .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var I : Import .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var IL : ImportList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var MN : ModuleName .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op initialDatabase : -> Database .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq initialDatabase
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = insTermModule('META-MODULE,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder addOps(getOps(#UP#),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder addSorts(getSorts(#UP#),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder addImports(getImports(#UP#), upModule('META-MODULE, false)))),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder insertTermView('TRIV,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ('view_from_to_is_endv['token[''TRIV.Qid],'token[''TRIV.Qid],'token[
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ''TRIV.Qid],'sort_to_.['sortToken[''Elt.Qid],'sortToken[
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ''Elt.Qid]]]),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder insertTermView('Bool,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ('view_from_to_is_endv['token[''Bool.Qid],'token[''TRIV.Qid],'token[
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ''BOOL.Qid],'sort_to_.['sortToken[''Elt.Qid],'sortToken[''Bool.Qid]]]),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder insertTermView('Nat,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ('view_from_to_is_endv['token[''Nat.Qid],'token[''TRIV.Qid],'token[
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ''NAT.Qid],'sort_to_.['sortToken[''Elt.Qid],'sortToken[''Nat.Qid]]]),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder insertTermView('Int,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ('view_from_to_is_endv['token[''Int.Qid],'token[''TRIV.Qid],'token[
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ''INT.Qid],'sort_to_.['sortToken[''Elt.Qid],'sortToken[''Int.Qid]]]),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder insertTermView('Rat,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ('view_from_to_is_endv['token[''Rat.Qid],'token[''TRIV.Qid],'token[
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ''RAT.Qid],'sort_to_.['sortToken[''Elt.Qid],'sortToken[''Rat.Qid]]]),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder insertTermView('Float,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ('view_from_to_is_endv['token[''Float.Qid],'token[''TRIV.Qid],'token[
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ''FLOAT.Qid],'sort_to_.['sortToken[''Elt.Qid],'sortToken[
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ''Float.Qid]]]),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder insertTermView('String,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ('view_from_to_is_endv['token[''String.Qid],'token[''TRIV.Qid],'token[
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ''STRING.Qid],'sort_to_.['sortToken[''Elt.Qid],'sortToken[
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ''String.Qid]]]),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder insertTermView('Qid,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ('view_from_to_is_endv['token[''Qid.Qid],'token[''TRIV.Qid],'token[
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ''QID.Qid],'sort_to_.['sortToken[''Elt.Qid],'sortToken[''Qid.Qid]]]),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder insertTermView('STRICT-WEAK-ORDER,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ('view_from_to_is_endv['token[''STRICT-WEAK-ORDER.Qid],'token[''TRIV.Qid],
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder 'token[''STRICT-WEAK-ORDER.Qid],'sort_to_.['sortToken[''Elt.Qid],
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder 'sortToken[''Elt.Qid]]]),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder insertTermView('STRICT-TOTAL-ORDER,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ('view_from_to_is_endv['token[''STRICT-TOTAL-ORDER.Qid],
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder 'token[''STRICT-WEAK-ORDER.Qid],'token[''STRICT-TOTAL-ORDER.Qid],
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder 'sort_to_.['sortToken[''Elt.Qid],'sortToken[''Elt.Qid]]]),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder insertTermView('Nat<,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ('view_from_to_is_endv['token[''Nat<.Qid],'token[''STRICT-TOTAL-ORDER.Qid],
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder 'token[''NAT.Qid],'sort_to_.['sortToken[''Elt.Qid],'sortToken[''Nat.Qid]]]),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder insertTermView('Int<,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ('view_from_to_is_endv['token[''Int<.Qid],'token[''STRICT-TOTAL-ORDER.Qid],
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder 'token[''INT.Qid],'sort_to_.['sortToken[''Elt.Qid],'sortToken[''Int.Qid]]]),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder insertTermView('Rat<,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ('view_from_to_is_endv['token[''Rat<.Qid],'token[''STRICT-TOTAL-ORDER.Qid],'token[
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ''RAT.Qid],'sort_to_.['sortToken[''Elt.Qid],'sortToken[''Rat.Qid]]]),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder insertTermView('Float<,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ('view_from_to_is_endv['token[''Float<.Qid],'token[''STRICT-TOTAL-ORDER.Qid],
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder 'token[''FLOAT.Qid],'sort_to_.['sortToken[''Elt.Qid],'sortToken[
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ''Float.Qid]]]),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder insertTermView('String<,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ('view_from_to_is_endv['token[''String<.Qid],'token[''STRICT-TOTAL-ORDER.Qid],
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder 'token[''STRING.Qid],'sort_to_.['sortToken[''Elt.Qid],'sortToken[
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ''String.Qid]]]),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder insertTermView('TOTAL-PREORDER,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ('view_from_to_is_endv['token[''TOTAL-PREORDER.Qid],'token[''TRIV.Qid],'token[
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ''TOTAL-PREORDER.Qid],'sort_to_.['sortToken[''Elt.Qid],'sortToken[
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ''Elt.Qid]]]),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder insertTermView('TOTAL-ORDER,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ('view_from_to_is_endv['token[''TOTAL-ORDER.Qid],'token[''TOTAL-PREORDER.Qid],
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder 'token[''TOTAL-ORDER.Qid],'sort_to_.['sortToken[''Elt.Qid],'sortToken[
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ''Elt.Qid]]]),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder insertTermView('Nat<=,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ('view_from_to_is_endv['token[''Nat<=.Qid],'token[''TOTAL-ORDER.Qid],
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder 'token[''NAT.Qid],'sort_to_.['sortToken[''Elt.Qid],'sortToken[''Nat.Qid]]]),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder insertTermView('Int<=,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ('view_from_to_is_endv['token[''Int<=.Qid],'token[''TOTAL-ORDER.Qid],
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder 'token[''INT.Qid],'sort_to_.['sortToken[''Elt.Qid],'sortToken[''Int.Qid]]]),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder insertTermView('Rat<=,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ('view_from_to_is_endv['token[''Rat<=.Qid],'token[''TOTAL-ORDER.Qid],'token[
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ''RAT.Qid],'sort_to_.['sortToken[''Elt.Qid],'sortToken[''Rat.Qid]]]),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder insertTermView('Float<=,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ('view_from_to_is_endv['token[''Float<=.Qid],'token[''TOTAL-ORDER.Qid],
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder 'token[''FLOAT.Qid],'sort_to_.['sortToken[''Elt.Qid],'sortToken[
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ''Float.Qid]]]),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder insertTermView('String<=,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ('view_from_to_is_endv['token[''String<=.Qid],'token[''TOTAL-ORDER.Qid],
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder 'token[''STRING.Qid],'sort_to_.['sortToken[''Elt.Qid],'sortToken[
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ''String.Qid]]]),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder insertTermView('DEFAULT,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ('view_from_to_is_endv['token[''DEFAULT.Qid],'token[''TRIV.Qid],'token[
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ''DEFAULT.Qid],'sort_to_.['sortToken[''Elt.Qid],'sortToken[
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ''Elt.Qid]]]),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder insertTermView('Nat0,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ('view_from_to_is_endv['token[''Nat0.Qid],'token[''DEFAULT.Qid],'token[
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ''NAT.Qid],'sort_to_.['sortToken[''Elt.Qid],'sortToken[''Nat.Qid]]]),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder insertTermView('Int0,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ('view_from_to_is_endv['token[''Int0.Qid],'token[''DEFAULT.Qid],'token[
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ''INT.Qid],'sort_to_.['sortToken[''Elt.Qid],'sortToken[''Int.Qid]]]),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder insertTermView('Rat0,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ('view_from_to_is_endv['token[''Rat0.Qid],'token[''DEFAULT.Qid],'token[
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ''RAT.Qid],'sort_to_.['sortToken[''Elt.Qid],'sortToken[''Rat.Qid]]]),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder insertTermView('Float0,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ('view_from_to_is_endv['token[''Float0.Qid],'token[''DEFAULT.Qid],
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder 'token[''FLOAT.Qid],'__['sort_to_.['sortToken[''Elt.Qid],'sortToken[
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ''Float.Qid]], 'op_to`term_.['bubble[''0.Qid],'bubble[''0.0.Qid]]]]),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder insertTermView('String0,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ('view_from_to_is_endv['token[''String0.Qid],'token[''DEFAULT.Qid],
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder 'token[''STRING.Qid],'__['sort_to_.['sortToken[''Elt.Qid],'sortToken[
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ''String.Qid]],'op_to`term_.['bubble[''0.Qid],'bubble[''"".Qid]]]]),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder insertTermView('Qid0,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ('view_from_to_is_endv['token[''Qid0.Qid],'token[''DEFAULT.Qid],'token[
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ''QID.Qid],'__['sort_to_.['sortToken[''Elt.Qid],'sortToken[''Qid.Qid]],
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder 'op_to`term_.['bubble[''0.Qid],'bubble['''.Qid]]]]),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder emptyDatabase)))))))))))))))))))))))))))))) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** We start by introducing a subsort \texttt{DatabaseClass} of sort
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \texttt{Cid}, the operator declarations necessary for representing objects
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** in class \texttt{DatabaseClass} as defined above, and variables to range
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** over subclasses of class \texttt{DatabaseClass} and over attributes.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder sort DatabaseClass .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder subsort DatabaseClass < Cid .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op Database : -> DatabaseClass .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op db :_ : Database -> Attribute .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op input :_ : TermList -> Attribute .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op output :_ : QidList -> Attribute .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op default :_ : Header -> Attribute .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var Atts : AttributeSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var X@DatabaseClass : DatabaseClass .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var O : Oid .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** Next, we introduce an auxiliary function \texttt{parseHeader} to parse
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** names of user-defined modules, and a constant \texttt{nilTermList} of sort
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \texttt{TermList}. Note that the name of a user-defined module must be a
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** single identifier (a token) or, for parameterized modules, its name---a
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** single identifier---and its interface.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op parseHeader : Term -> Qid .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parseHeader('token[T]) = downQid(T) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ----eq parseHeader('_`(_`)['token[T], T']) = downQid(T) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq parseHeader('_`{_`}['token[T], T']) = downQid(T) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op nilTermList : -> TermList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** Finally, we present the rules processing the inputs of the database. These
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** rules define the behavior of the system for the different commands,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** modules, theories, and views entered into the system. For example, the
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** first rule processes the different types of modules entered to the system.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** Note that the operators declared as constructors of sort \texttt{PreModule}
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** in the signature of Full Maude, given in
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** Appendix~\ref{signature-full-maude}, are declared with two arguments,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** namely the name of the unit, or its name + its interface, and the list
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** of declarations of such a unit.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder crl [module] :
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder < O : X@DatabaseClass | db : DB, input : (F[T, T']), output : nil, default : ME, Atts >
473b81d33893192056dde74b26b2467f983c102cChristian Maeder => < O : X@DatabaseClass |
473b81d33893192056dde74b26b2467f983c102cChristian Maeder db : procModule(F[T, T'], DB), input : nilTermList,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder output : ('Introduced 'module header2Qid(parseHeader(T)) '\n),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder default : parseHeader(T), Atts >
473b81d33893192056dde74b26b2467f983c102cChristian Maeder if (F == 'fmod_is_endfm) or-else
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ((F == 'obj_is_endo) or-else
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ((F == 'obj_is_jbo) or-else
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ((F == 'mod_is_endm) or-else
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder (F == 'omod_is_endom)))) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** Notice the message placed in the output channel, and the change in the
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** current module by default, which is now the new module just processed.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** Since the name of the module \texttt{T} can be complex---a parameterized
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** module---some extra parsing has to be performed by the auxiliary function
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** \texttt{parseHeader}. Similar rules are given for the processing of
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** theories and views.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder crl [theory] :
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder < O : X@DatabaseClass | db : DB, input : (F[T, T']), output : nil, default : ME, Atts >
473b81d33893192056dde74b26b2467f983c102cChristian Maeder => < O : X@DatabaseClass |
473b81d33893192056dde74b26b2467f983c102cChristian Maeder db : procModule(F[T, T'], DB), input : nilTermList,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder output : ('Introduced 'theory header2Qid(parseHeader(T)) '\n),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder default : parseHeader(T), Atts >
473b81d33893192056dde74b26b2467f983c102cChristian Maeder if (F == 'fth_is_endfth) or-else
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ((F == 'th_is_endth) or-else
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder (F == 'oth_is_endoth)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder rl [view] :
473b81d33893192056dde74b26b2467f983c102cChristian Maeder < O : X@DatabaseClass | db : DB,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder input : ('view_from_to_is`endv[T, T', T'']),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder output : nil, default : ME, Atts >
473b81d33893192056dde74b26b2467f983c102cChristian Maeder => < O : X@DatabaseClass |
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder db : procView('view_from_to_is_endv[T, T', T'', 'none.ViewDeclSet], DB),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder input : nilTermList,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder output : ('Introduced 'view header2Qid(parseHeader(T)) '\n),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder default : ME, Atts > .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder rl [view] :
473b81d33893192056dde74b26b2467f983c102cChristian Maeder < O : X@DatabaseClass | db : DB,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder input : ('view_from_to_is_endv[T, T', T'', T3]),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder output : nil, default : ME, Atts >
473b81d33893192056dde74b26b2467f983c102cChristian Maeder => < O : X@DatabaseClass |
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder db : procView('view_from_to_is_endv[T, T', T'', T3], DB),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder input : nilTermList,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder output : ('Introduced 'view header2Qid(parseHeader(T)) '\n),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder default : ME, Atts > .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** Commands are handled by rules as well. For example, the \texttt{down},
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** \texttt{reduce}, and \texttt{rewrite} commands are handled by the
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** following rules.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder rl [down] :
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder < O : X@DatabaseClass | db : DB, input : ('down_:_[T, T']), output : nil, default : ME, Atts >
473b81d33893192056dde74b26b2467f983c102cChristian Maeder => < O : X@DatabaseClass |
473b81d33893192056dde74b26b2467f983c102cChristian Maeder db : getDatabase(procDownCommand('down_:_[T, T'], ME, DB)),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder input : nilTermList,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder output : getQidList(procDownCommand('down_:_[T, T'], ME, DB)),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder default : ME, Atts > .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder crl [red/rew/frew] :
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder < O : X@DatabaseClass | db : DB, input : (F[T]), output : QIL, default : ME, Atts >
473b81d33893192056dde74b26b2467f983c102cChristian Maeder => < O : X@DatabaseClass |
473b81d33893192056dde74b26b2467f983c102cChristian Maeder db : getDatabase(procCommand(F[T], ME, DB)),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder input : nilTermList,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder output : getQidList(procCommand(F[T], ME, DB)),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder default : ME, Atts >
473b81d33893192056dde74b26b2467f983c102cChristian Maeder if (F == 'parse_.) or-else
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ((F == 'red_.) or-else
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ((F == 'reduce_.) or-else
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ((F == 'rew_.) or-else
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ((F == 'rewrite_.) or-else
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ((F == 'frew_.) or-else
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ((F == 'frewrite_.) or-else
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ((F == 'unify_.) or-else
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder (F == 'id-unify_.)))))))) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder crl [search] :
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder < O : X@DatabaseClass | db : DB, input : (F[T, T']), output : QIL, default : ME, Atts >
473b81d33893192056dde74b26b2467f983c102cChristian Maeder => < O : X@DatabaseClass |
473b81d33893192056dde74b26b2467f983c102cChristian Maeder db : getDatabase(procCommand(F[T, T'], ME, DB)),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder input : nilTermList,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder output : getQidList(procCommand(F[T, T'], ME, DB)),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder default : ME, Atts >
473b81d33893192056dde74b26b2467f983c102cChristian Maeder if (F == 'search_=>_.) or-else
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ((F == 'search_=>1_.) or-else
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ((F == 'search_=>*_.) or-else
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ((F == 'search_=>+_.) or-else
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ((F == 'search_=>!_.) or-else
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ((F == 'search_~>_.) or-else
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ((F == 'search_~>1_.) or-else
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ((F == 'search_~>*_.) or-else
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ((F == 'search_~>+_.) or-else
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ((F == 'search_~>!_.) or-else
473b81d33893192056dde74b26b2467f983c102cChristian Maeder ((F == 'match_<=?_.) or-else
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder (F == 'xmatch_<=?_.))))))))))) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder rl [select] :
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder < O : X@DatabaseClass | db : DB, input : ('select_.[T]), output : nil, default : ME, Atts >
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder => < O : X@DatabaseClass | db : DB, input : nilTermList, output : nil, default : parseModExp(T), Atts > .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder rl [show-modules] :
473b81d33893192056dde74b26b2467f983c102cChristian Maeder < O : X@DatabaseClass | db : DB,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder input : ('show`modules`..@Command@),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder output : nil, default : ME, Atts >
473b81d33893192056dde74b26b2467f983c102cChristian Maeder => < O : X@DatabaseClass | db : DB, input : nilTermList,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder output : showModules(DB), default : ME, Atts > .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder rl [show-views] :
473b81d33893192056dde74b26b2467f983c102cChristian Maeder < O : X@DatabaseClass | db : DB,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder input : ('show`views`..@Command@),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder output : nil, default : ME, Atts >
473b81d33893192056dde74b26b2467f983c102cChristian Maeder => < O : X@DatabaseClass | db : DB, input : nilTermList,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder output : showViews(DB), default : ME, Atts > .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** The \texttt{show module} command, which prints the specified module, or
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** the current one if no module name is specified, is handled by the
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** following rules.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder crl [show-module] :
473b81d33893192056dde74b26b2467f983c102cChristian Maeder < O : X@DatabaseClass | db : DB,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder input : ('show`module`..@Command@),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder output : nil, default : ME, Atts >
473b81d33893192056dde74b26b2467f983c102cChristian Maeder => < O : X@DatabaseClass | db : DB', input : nilTermList,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder output : eMetaPrettyPrint(getFlatModule(ME', DB'), getTopModule(ME', DB')),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder default : ME', Atts >
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if < DB' ; ME' > := evalModExp(ME, DB) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder crl [show-module] :
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder < O : X@DatabaseClass | db : DB, input : ('show`module_.[T]), output : nil, default : ME, Atts >
473b81d33893192056dde74b26b2467f983c102cChristian Maeder => < O : X@DatabaseClass |
473b81d33893192056dde74b26b2467f983c102cChristian Maeder db : DB', input : nilTermList,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder output : eMetaPrettyPrint(getFlatModule(ME'', DB'), getTopModule(ME'', DB')),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder default : ME, Atts >
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if < DB' ; ME'' > := evalModExp(parseModExp(T), DB) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder crl [show-all] :
473b81d33893192056dde74b26b2467f983c102cChristian Maeder < O : X@DatabaseClass | db : DB, input : ('show`all`..@Command@),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder output : nil, default : ME, Atts >
473b81d33893192056dde74b26b2467f983c102cChristian Maeder => < O : X@DatabaseClass | db : DB', input : nilTermList,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder output : eMetaPrettyPrint(getFlatModule(ME', DB'), getFlatModule(ME', DB')),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder default : ME', Atts >
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if < DB' ; ME' > := evalModExp(ME, DB) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder crl [show-all] :
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder < O : X@DatabaseClass | db : DB, input : ('show`all_.[T]), output : nil, default : ME, Atts >
473b81d33893192056dde74b26b2467f983c102cChristian Maeder => < O : X@DatabaseClass | db : DB', input : nilTermList,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder output : eMetaPrettyPrint(getFlatModule(ME', DB'), getFlatModule(ME', DB')),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder default : ME, Atts >
473b81d33893192056dde74b26b2467f983c102cChristian Maeder if ME'' := parseModExp(T)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder /\ < DB' ; ME' > := evalModExp(ME'', DB) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder crl [show-vars] :
473b81d33893192056dde74b26b2467f983c102cChristian Maeder < O : X@DatabaseClass | db : DB, input : ('show`vars`..@Command@),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder output : nil, default : ME, Atts >
473b81d33893192056dde74b26b2467f983c102cChristian Maeder => < O : X@DatabaseClass | db : DB', input : nilTermList,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder output : eMetaPrettyPrintVars(getVars(ME', DB')),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder default : ME', Atts >
473b81d33893192056dde74b26b2467f983c102cChristian Maeder if DB' := database(evalModExp(ME, DB))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder /\ ME' := modExp(evalModExp(ME, DB)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder crl [show-vars] :
473b81d33893192056dde74b26b2467f983c102cChristian Maeder < O : X@DatabaseClass | db : DB, input : ('show`vars_.[T]),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder output : nil, default : ME, Atts >
473b81d33893192056dde74b26b2467f983c102cChristian Maeder => < O : X@DatabaseClass | db : DB', input : nilTermList,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder output : eMetaPrettyPrintVars(getVars(ME', DB')),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder default : ME, Atts >
473b81d33893192056dde74b26b2467f983c102cChristian Maeder if ME'' := parseModExp(T)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder /\ DB' := database(evalModExp(ME'', DB))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder /\ ME' := modExp(evalModExp(ME'', DB)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder crl [show-sorts] :
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder < O : X@DatabaseClass | db : DB, input : ('show`sorts`..@Command@), output : nil, default : ME, Atts >
473b81d33893192056dde74b26b2467f983c102cChristian Maeder => < O : X@DatabaseClass | db : DB', input : nilTermList,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder output : eMetaPrettyPrint(getSorts(getFlatModule(ME', DB'))),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder default : ME', Atts >
473b81d33893192056dde74b26b2467f983c102cChristian Maeder if DB' := database(evalModExp(ME, DB))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder /\ ME' := modExp(evalModExp(ME, DB)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder crl [show-sorts] :
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder < O : X@DatabaseClass | db : DB, input : ('show`sorts_.[T]), output : nil, default : ME, Atts >
473b81d33893192056dde74b26b2467f983c102cChristian Maeder => < O : X@DatabaseClass | db : DB', input : nilTermList,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder output : eMetaPrettyPrint(getSorts(getFlatModule(ME', DB'))),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder default : ME, Atts >
473b81d33893192056dde74b26b2467f983c102cChristian Maeder if ME'' := parseModExp(T)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder /\ DB' := database(evalModExp(ME'', DB))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder /\ ME' := modExp(evalModExp(ME'', DB)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder crl [show-ops] :
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder < O : X@DatabaseClass | db : DB, input : ('show`ops`..@Command@), output : nil, default : ME, Atts >
473b81d33893192056dde74b26b2467f983c102cChristian Maeder => < O : X@DatabaseClass | db : DB', input : nilTermList,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder output : eMetaPrettyPrint(getFlatModule(ME', DB'), getOps(getFlatModule(ME', DB'))),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder default : ME', Atts >
473b81d33893192056dde74b26b2467f983c102cChristian Maeder if DB' := database(evalModExp(ME, DB))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder /\ ME' := modExp(evalModExp(ME, DB)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder crl [show-ops] :
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder < O : X@DatabaseClass | db : DB, input : ('show`ops_.[T]), output : nil, default : ME, Atts >
473b81d33893192056dde74b26b2467f983c102cChristian Maeder => < O : X@DatabaseClass | db : DB', input : nilTermList,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder output : eMetaPrettyPrint(getFlatModule(ME', DB'), getOps(getFlatModule(ME', DB'))),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder default : ME, Atts >
473b81d33893192056dde74b26b2467f983c102cChristian Maeder if ME'' := parseModExp(T)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder /\ DB' := database(evalModExp(ME'', DB))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder /\ ME' := modExp(evalModExp(ME'', DB)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder crl [show-mbs] :
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder < O : X@DatabaseClass | db : DB, input : ('show`mbs`..@Command@), output : nil, default : ME, Atts >
473b81d33893192056dde74b26b2467f983c102cChristian Maeder => < O : X@DatabaseClass | db : DB', input : nilTermList,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder output : eMetaPrettyPrint(getFlatModule(ME', DB'), getMbs(getFlatModule(ME', DB'))),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder default : ME', Atts >
473b81d33893192056dde74b26b2467f983c102cChristian Maeder if DB' := database(evalModExp(ME, DB))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder /\ ME' := modExp(evalModExp(ME, DB)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder crl [show-mbs] :
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder < O : X@DatabaseClass | db : DB, input : ('show`mbs_.[T]), output : nil, default : ME, Atts >
473b81d33893192056dde74b26b2467f983c102cChristian Maeder => < O : X@DatabaseClass | db : DB', input : nilTermList,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder output : eMetaPrettyPrint(getFlatModule(ME', DB'), getMbs(getFlatModule(ME', DB'))),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder default : ME, Atts >
473b81d33893192056dde74b26b2467f983c102cChristian Maeder if ME := parseModExp(T)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder /\ DB' := database(evalModExp(ME, DB))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder /\ ME' := modExp(evalModExp(ME, DB)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder crl [show-eqns] :
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder < O : X@DatabaseClass | db : DB, input : ('show`eqs`..@Command@), output : nil, default : ME, Atts >
473b81d33893192056dde74b26b2467f983c102cChristian Maeder => < O : X@DatabaseClass |
473b81d33893192056dde74b26b2467f983c102cChristian Maeder db : DB', input : nilTermList,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder output : eMetaPrettyPrint(getFlatModule(ME', DB'), getEqs(getFlatModule(ME', DB'))),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder default : ME', Atts >
473b81d33893192056dde74b26b2467f983c102cChristian Maeder if DB' := database(evalModExp(ME, DB))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder /\ ME' := modExp(evalModExp(ME, DB)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder crl [show-eqns] :
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder < O : X@DatabaseClass | db : DB, input : ('show`eqs_.[T]), output : nil, default : ME, Atts >
473b81d33893192056dde74b26b2467f983c102cChristian Maeder => < O : X@DatabaseClass |
473b81d33893192056dde74b26b2467f983c102cChristian Maeder db : DB', input : nilTermList,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder output : eMetaPrettyPrint(getFlatModule(ME', DB'), getEqs(getFlatModule(ME', DB'))),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder default : ME, Atts >
473b81d33893192056dde74b26b2467f983c102cChristian Maeder if ME'' := parseModExp(T)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder /\ DB' := database(evalModExp(ME'', DB))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder /\ ME' := modExp(evalModExp(ME'', DB)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder crl [show-rls] :
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder < O : X@DatabaseClass | db : DB, input : ('show`rls`..@Command@), output : nil, default : ME, Atts >
473b81d33893192056dde74b26b2467f983c102cChristian Maeder => < O : X@DatabaseClass | db : DB', input : nilTermList,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder output : eMetaPrettyPrint(getFlatModule(ME', DB'), getRls(getFlatModule(ME', DB'))),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder default : ME', Atts >
473b81d33893192056dde74b26b2467f983c102cChristian Maeder if DB' := database(evalModExp(ME, DB))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder /\ ME' := modExp(evalModExp(ME, DB)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder crl [show-rls] :
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder < O : X@DatabaseClass | db : DB, input : ('show`rls_.[T]), output : nil, default : ME, Atts >
473b81d33893192056dde74b26b2467f983c102cChristian Maeder => < O : X@DatabaseClass | db : DB', input : nilTermList,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder output : eMetaPrettyPrint(getFlatModule(ME', DB'), getRls(getFlatModule(ME', DB'))),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder default : ME, Atts >
473b81d33893192056dde74b26b2467f983c102cChristian Maeder if ME'' := parseModExp(T)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder /\ DB' := database(evalModExp(ME'', DB))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder /\ ME' := modExp(evalModExp(ME'', DB)) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder crl [show-view] :
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder < O : X@DatabaseClass | db : DB, input : ('show`view_.[T]), output : nil, default : ME, Atts >
473b81d33893192056dde74b26b2467f983c102cChristian Maeder => < O : X@DatabaseClass | db : DB', input : nilTermList,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder output : eMetaPrettyPrint(DB', getView(parseViewExp(T), DB')),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder default : ME, Atts >
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if DB' := evalViewExp(parseViewExp(T), nil, DB) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder crl [set`protect_on] :
473b81d33893192056dde74b26b2467f983c102cChristian Maeder < O : X@DatabaseClass |
473b81d33893192056dde74b26b2467f983c102cChristian Maeder db : DB,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder input : ('set`protect_on`.[T]),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder output : QIL',
473b81d33893192056dde74b26b2467f983c102cChristian Maeder default : ME, Atts >
473b81d33893192056dde74b26b2467f983c102cChristian Maeder => < O : X@DatabaseClass |
473b81d33893192056dde74b26b2467f983c102cChristian Maeder db : db(MIS, MNS, VIS, VES,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder MNS' ME', MNS'', MNS3, QIL),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder input : nilTermList,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder output : (QIL' 'set 'protect header2QidList(ME') 'on '\n),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder default : ME, Atts >
473b81d33893192056dde74b26b2467f983c102cChristian Maeder if ME' := parseModExp(T)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder /\ unitInDb(ME', DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder /\ db(MIS, MNS, VIS, VES, MNS', MNS'', MNS3, QIL) := DB .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder crl [set`protect_off] :
473b81d33893192056dde74b26b2467f983c102cChristian Maeder < O : X@DatabaseClass |
473b81d33893192056dde74b26b2467f983c102cChristian Maeder db : db(MIS, MNS, VIS, VES, MNS', MNS'', MNS3, QIL),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder input : ('set`protect_off`.[T]),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder output : QIL',
473b81d33893192056dde74b26b2467f983c102cChristian Maeder default : ME, Atts >
473b81d33893192056dde74b26b2467f983c102cChristian Maeder => < O : X@DatabaseClass |
473b81d33893192056dde74b26b2467f983c102cChristian Maeder db : db(MIS, MNS, VIS, VES, remove(MNS', ME'), MNS'', MNS3, QIL),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder input : nilTermList,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder output : (QIL' 'set 'protect header2QidList(ME') 'off '\n),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder default : ME, Atts >
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if ME' := parseModExp(T) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder crl [set`extend_on] :
473b81d33893192056dde74b26b2467f983c102cChristian Maeder < O : X@DatabaseClass |
473b81d33893192056dde74b26b2467f983c102cChristian Maeder db : DB,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder input : ('set`extend_on`.[T]),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder output : QIL',
473b81d33893192056dde74b26b2467f983c102cChristian Maeder default : ME, Atts >
473b81d33893192056dde74b26b2467f983c102cChristian Maeder => < O : X@DatabaseClass |
473b81d33893192056dde74b26b2467f983c102cChristian Maeder db : db(MIS, MNS, VIS, VES,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder MNS', MNS'' ME', MNS3, QIL),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder input : nilTermList,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder output : (QIL' 'set 'extend header2QidList(ME') 'on '\n),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder default : ME, Atts >
473b81d33893192056dde74b26b2467f983c102cChristian Maeder if ME' := parseModExp(T)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder /\ unitInDb(ME', DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder /\ db(MIS, MNS, VIS, VES, MNS', MNS'', MNS3, QIL) := DB .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder crl [set`extend_off] :
473b81d33893192056dde74b26b2467f983c102cChristian Maeder < O : X@DatabaseClass |
473b81d33893192056dde74b26b2467f983c102cChristian Maeder db : db(MIS, MNS, VIS, VES, MNS', MNS'', MNS3, QIL),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder input : ('set`extend_off`.[T]),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder output : QIL',
473b81d33893192056dde74b26b2467f983c102cChristian Maeder default : ME, Atts >
473b81d33893192056dde74b26b2467f983c102cChristian Maeder => < O : X@DatabaseClass |
473b81d33893192056dde74b26b2467f983c102cChristian Maeder db : db(MIS, MNS, VIS, VES, MNS', remove(MNS'', ME'), MNS3, QIL),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder input : nilTermList,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder output : (QIL' 'set 'extend header2QidList(ME') 'off '\n),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder default : ME, Atts >
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if ME' := parseModExp(T) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder crl [set`include_on] :
473b81d33893192056dde74b26b2467f983c102cChristian Maeder < O : X@DatabaseClass |
473b81d33893192056dde74b26b2467f983c102cChristian Maeder db : DB,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder input : ('set`include_on`.[T]),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder output : QIL',
473b81d33893192056dde74b26b2467f983c102cChristian Maeder default : ME, Atts >
473b81d33893192056dde74b26b2467f983c102cChristian Maeder => < O : X@DatabaseClass |
473b81d33893192056dde74b26b2467f983c102cChristian Maeder db : db(MIS, MNS, VIS, VES,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder MNS', MNS'', MNS3 . ME', QIL),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder input : nilTermList,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder output : (QIL' 'set 'include header2QidList(ME') 'on '\n),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder default : ME, Atts >
473b81d33893192056dde74b26b2467f983c102cChristian Maeder if ME' := parseModExp(T)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ----/\ unitInDb(ME', DB)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder /\ db(MIS, MNS, VIS, VES, MNS', MNS'', MNS3, QIL) := DB .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder crl [set`include_off] :
473b81d33893192056dde74b26b2467f983c102cChristian Maeder < O : X@DatabaseClass |
473b81d33893192056dde74b26b2467f983c102cChristian Maeder db : db(MIS, MNS, VIS, VES, MNS', MNS'', MNS3, QIL),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder input : ('set`include_off`.[T]),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder output : QIL',
473b81d33893192056dde74b26b2467f983c102cChristian Maeder default : ME, Atts >
473b81d33893192056dde74b26b2467f983c102cChristian Maeder => < O : X@DatabaseClass |
473b81d33893192056dde74b26b2467f983c102cChristian Maeder db : db(MIS, MNS, VIS, VES, MNS', MNS'', remove(MNS3, ME'), QIL),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder input : nilTermList,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder output : (QIL' 'set 'include header2QidList(ME') 'off '\n),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder default : ME, Atts >
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if ME' := parseModExp(T) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder crl [load] :
473b81d33893192056dde74b26b2467f983c102cChristian Maeder < O : X@DatabaseClass |
473b81d33893192056dde74b26b2467f983c102cChristian Maeder db : DB,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder input : ('load_.[T]),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder output : QIL',
473b81d33893192056dde74b26b2467f983c102cChristian Maeder default : ME, Atts >
473b81d33893192056dde74b26b2467f983c102cChristian Maeder => < O : X@DatabaseClass |
473b81d33893192056dde74b26b2467f983c102cChristian Maeder db : getDatabase(procLoad(T, ME, DB)),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder input : nilTermList,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder output : getQidList(procLoad(T, ME, DB)),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder default : ME, Atts >
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if ME' := parseModExp(T) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq 'rm`ids`..@Command@ = 'remove`identity`attributes`..@Command@ .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq 'rm`ids_.[T] = 'remove`identity`attributes_.[T] .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder crl [remove-id-attributes] :
473b81d33893192056dde74b26b2467f983c102cChristian Maeder < O : X@DatabaseClass | db : DB,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder input : ('remove`identity`attributes`..@Command@),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder output : nil, default : ME, Atts >
473b81d33893192056dde74b26b2467f983c102cChristian Maeder => < O : X@DatabaseClass | db : DB', input : nilTermList,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder output : (eMetaPrettyPrint(getFlatModule(ME', DB'), removeIds(getFlatModule(ME', DB')))),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder default : ME', Atts >
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if < DB' ; ME' > := evalModExp(ME, DB) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder crl [remove-id-attributes] :
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder < O : X@DatabaseClass | db : DB, input : ('remove`identity`attributes_.[T]), output : nil, default : ME, Atts >
473b81d33893192056dde74b26b2467f983c102cChristian Maeder => < O : X@DatabaseClass |
473b81d33893192056dde74b26b2467f983c102cChristian Maeder db : DB', input : nilTermList,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder output : (eMetaPrettyPrint(getFlatModule(ME'', DB'), removeIds(getFlatModule(ME'', DB')))),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder default : ME, Atts >
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if < DB' ; ME'' > := evalModExp(parseModExp(T), DB) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder crl [remove-assoc-attributes] :
473b81d33893192056dde74b26b2467f983c102cChristian Maeder < O : X@DatabaseClass | db : DB,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder input : ('remove`assoc`attributes`..@Command@),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder output : nil, default : ME, Atts >
473b81d33893192056dde74b26b2467f983c102cChristian Maeder => < O : X@DatabaseClass | db : DB', input : nilTermList,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder output : (eMetaPrettyPrint(getFlatModule(ME', DB'), removeLonelyAssocs(getFlatModule(ME', DB')))),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder default : ME', Atts >
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if < DB' ; ME' > := evalModExp(ME, DB) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder crl [remove-assoc-attributes] :
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder < O : X@DatabaseClass | db : DB, input : ('remove`assoc`attributes_.[T]), output : nil, default : ME, Atts >
473b81d33893192056dde74b26b2467f983c102cChristian Maeder => < O : X@DatabaseClass |
473b81d33893192056dde74b26b2467f983c102cChristian Maeder db : DB', input : nilTermList,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder output : (eMetaPrettyPrint(getFlatModule(ME'', DB'), removeLonelyAssocs(getFlatModule(ME'', DB')))),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder default : ME, Atts >
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if < DB' ; ME'' > := evalModExp(parseModExp(T), DB) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder crl [acu-coherence-completion] :
473b81d33893192056dde74b26b2467f983c102cChristian Maeder < O : X@DatabaseClass | db : DB,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder input : ('acu`coherence`completion`..@Command@),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder output : nil, default : ME, Atts >
473b81d33893192056dde74b26b2467f983c102cChristian Maeder => < O : X@DatabaseClass | db : DB', input : nilTermList,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder output : (eMetaPrettyPrint(getFlatModule(ME', DB'), acuCohComplete(getFlatModule(ME', DB')))),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder default : ME', Atts >
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if < DB' ; ME' > := evalModExp(ME, DB) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder crl [acu-coherence-completion] :
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder < O : X@DatabaseClass | db : DB, input : ('acu`coherence`completion_.[T]), output : nil, default : ME, Atts >
473b81d33893192056dde74b26b2467f983c102cChristian Maeder => < O : X@DatabaseClass |
473b81d33893192056dde74b26b2467f983c102cChristian Maeder db : DB', input : nilTermList,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder output : (eMetaPrettyPrint(getFlatModule(ME'', DB'), acuCohComplete(getFlatModule(ME'', DB')))),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder default : ME, Atts >
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder if < DB' ; ME'' > := evalModExp(parseModExp(T), DB) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder rl [error] :
473b81d33893192056dde74b26b2467f983c102cChristian Maeder < O : X@DatabaseClass |
473b81d33893192056dde74b26b2467f983c102cChristian Maeder db : db(MIS, MNS, VIS, VES, MNS', MNS'', MNS3, NQIL),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder input : TL, output : nil, default : ME, Atts >
473b81d33893192056dde74b26b2467f983c102cChristian Maeder => < O : X@DatabaseClass |
473b81d33893192056dde74b26b2467f983c102cChristian Maeder db : db(MIS, MNS, VIS, VES, MNS', MNS'', MNS3, nil),
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder input : TL, output : NQIL, default : ME, Atts > .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder *** Auxiliary Functions
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op showViews : Database -> QidList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op showModules : Database -> QidList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq showViews(db(MIS, MNS, VIS, (VE # VES), MNS', MNS'', MNS3, QIL))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = (eMetaPrettyPrint(VE) '\n
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder showViews(db(MIS, MNS, VIS, VES, MNS', MNS'', MNS3, QIL))) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq showViews(
473b81d33893192056dde74b26b2467f983c102cChristian Maeder db(MIS, MNS, VIS, emptyViewExpSet, MNS', MNS'', MNS3, QIL))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = nil .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq showModules(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder db(MIS, (MN . MNS), VIS, VES, MNS', MNS'', MNS3, QIL))
473b81d33893192056dde74b26b2467f983c102cChristian Maeder = (eMetaPrettyPrint(MN) '\n
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder showModules(db(MIS, MNS, VIS, VES, MNS', MNS'', MNS3, QIL))) .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder eq showModules(
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder db(MIS, emptyModuleNameSet, VIS, VES, MNS', MNS'', MNS3, QIL))
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder = nil .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder rl [help] :
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder < O : X@DatabaseClass | input : ('help`..@Command@), output : QIL, Atts >
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder => < O : X@DatabaseClass | input : nilTermList, output : fm-help, Atts > .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederendm
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder*******************************************************************************
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maederfmod TEXT-STYLE is
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder pr META-LEVEL .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder var QL : QidList .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder op green : QidList -> QidList .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq green(QL) = '\g QL '\o .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder op yellow : QidList -> QidList .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq yellow(QL) = '\y QL '\o .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder op red : QidList -> QidList .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq red(QL) = '\r QL '\o .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder op bold : QidList -> QidList .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder eq bold(QL) = '\! QL '\o .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maederendfm
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*******************************************************************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder***
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** The Full Maude Module
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder***
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** We now give the rules to initialize the loop, and to specify the
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** communication between the loop---the input/output of the system---and the
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** database. Depending on the kind of input that the database receives, its
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** state will be changed, or some output will be generated.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maedermod FULL-MAUDE is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr META-FULL-MAUDE-SIGN .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr DATABASE-HANDLING .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder inc LOOP-MODE .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder pr BANNER .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** The state of the persistent system, which is supported by the built-in
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** module \texttt{LOOP-MODE}, described in Section~\ref{loop}, is represented
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** as a single object.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder subsort Object < State .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op o : -> Oid .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder op init : -> System .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var Atts : AttributeSet .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var X@DatabaseClass : DatabaseClass .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var O : Oid .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var DB : Database .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var ME : Header .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var QI : Qid .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars QIL QIL' QIL'' : QidList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var TL : TermList .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder var N : Nat .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder vars RP RP' : ResultPair .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder rl [init] :
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder init
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder => [nil,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder < o : Database |
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder db : initialDatabase,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder input : nilTermList, output : nil,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder default : 'CONVERSION >,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder ('\n '\t '\s '\s '\s '\s string2qidList(banner) '\n)] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** When some text has been introduced in the loop, the first argument of the
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** operator \verb~[_,_,_,]~ is different from \texttt{nil}, and we can use
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** this fact to activate the following rule, that enters an input such as a
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** module or a command from the user into the database. The constant
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \texttt{GRAMMAR} names the module containing the signature defining the
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** top level syntax of Full Maude (see Section~\ref{sec:signature} and
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** Appendix~\ref{signature-full-maude}). This signature is used by the
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** \texttt{metaParse} function to parse the input. PD the input is
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** syntactically valid\footnote{Of course, the input may be syntactically
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** valid, but not semantically valid, since further processing---for example,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** of bubbles---may reveal a semantic inconsistency.}, the parsed input is
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** placed in the \texttt{input} attribute of the database object; otherwise,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** an error message is placed in the output channel of the loop.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder rl [in] :
473b81d33893192056dde74b26b2467f983c102cChristian Maeder [QI QIL,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder < O : X@DatabaseClass |
473b81d33893192056dde74b26b2467f983c102cChristian Maeder db : DB, input : nilTermList, output : nil, default : ME, Atts >,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder QIL']
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder => if metaParse(GRAMMAR, QI QIL, '@Input@) :: ResultPair
473b81d33893192056dde74b26b2467f983c102cChristian Maeder then [nil,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder < O : X@DatabaseClass | db : DB,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder input : getTerm(metaParse(GRAMMAR, QI QIL, '@Input@)),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder output : nil, default : ME, Atts >,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder QIL']
473b81d33893192056dde74b26b2467f983c102cChristian Maeder else [nil,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder < O : X@DatabaseClass | db : DB, input : nilTermList,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder output : ('\r 'Warning:
473b81d33893192056dde74b26b2467f983c102cChristian Maeder printSyntaxError(metaParse(GRAMMAR, QI QIL, '@Input@),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder QI QIL)
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder '\n
473b81d33893192056dde74b26b2467f983c102cChristian Maeder '\r 'Error: '\o 'No 'parse 'for 'input. '\n),
473b81d33893192056dde74b26b2467f983c102cChristian Maeder default : ME, Atts >,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder QIL']
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder fi .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** When the \texttt{output} attribute of the persistent object contains a
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** nonempty list of quoted identifiers, the \texttt{out} rule moves it to the
473b81d33893192056dde74b26b2467f983c102cChristian Maeder*** third argument of the loop. Then the Core Maude system displays it in the
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*** terminal.
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder rl [out] :
473b81d33893192056dde74b26b2467f983c102cChristian Maeder [QIL,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder < O : X@DatabaseClass |
473b81d33893192056dde74b26b2467f983c102cChristian Maeder db : DB, input : TL, output : (QI QIL'), default : ME, Atts >,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder QIL'']
473b81d33893192056dde74b26b2467f983c102cChristian Maeder => [QIL,
473b81d33893192056dde74b26b2467f983c102cChristian Maeder < O : X@DatabaseClass |
473b81d33893192056dde74b26b2467f983c102cChristian Maeder db : DB, input : TL, output : nil, default : ME, Atts >,
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder (QI QIL' QIL'')] .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederendm
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder*******************************************************************************
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maederloop init .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder---- trace exclude FULL-MAUDE .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder---- set show loop stats on .
c6f06f645ab759d047a16a377a1ce3510bc883f5Christian Maeder---- set show loop timing on .
473b81d33893192056dde74b26b2467f983c102cChristian Maeder---- set show advisories on .
ab4cb8d35411872623fee728101d9f2bfe4ab420Christian Maeder