(* ----------------------------------------------------------------------------
 * $Id: MLDEMO.md,v 1.5 1995/11/04 18:00:23 pesch Exp $
 * ----------------------------------------------------------------------------
 * Copyright (c) 1993 Universitaet Passau
 * ----------------------------------------------------------------------------
 * This file is part of MAS.
 * ----------------------------------------------------------------------------
 * $Log: MLDEMO.md,v $
 * Revision 1.5  1995/11/04 18:00:23  pesch
 * Changed comments violating documentation rules. Should be rewritten.
 *
 * Revision 1.4  1994/11/28  21:04:10  dolzmann
 * New revision of the MASLOG system: New functions and bug fixes of old one.
 *
 * Revision 1.3  1993/12/17  17:15:35  dolzmann
 * Additional input procedures are added.
 *
 * Revision 1.2  1993/10/03  18:28:04  dolzmann
 * New version of procedure FORMKVD
 *
 * Revision 1.1  1993/07/13  14:44:07  dolzmann
 * The maslog-system and a simple example.
 *
 * ----------------------------------------------------------------------------
 *)

DEFINITION MODULE MLDEMO;
(* Maslog Demonstration Definition Module. *)

(******************************************************************************
*		   M A S L O G    D E M O N S T R A T I O N		      *
*-----------------------------------------------------------------------------*
* Author:   Andreas Dolzmann                                                  *
* Language: Modula II (mtc or mocka are possible)                             *
* System:   Program for the computer algebra system MAS by Heinz Kredel.      *
* Project:  MASLOG                                                            *
* Remark:   Library maslog is used.                                           *
* Abstract: This is a example for MASLOG.                                     *
******************************************************************************)

FROM MASSTOR	IMPORT	LIST;
FROM MASLISPU	IMPORT	PROCF1, PROCP1;

CONST rcsid = "$Id: MLDEMO.md,v 1.5 1995/11/04 18:00:23 pesch Exp $";
CONST copyright = "Copyright (c) 1993 Universitaet Passau";

VAR EQU, NEQ: LIST;


(******************************************************************************
*  I M P L E M E N T A T I O N   O F   T H E   A T O M I C   F O R M U L A S  *
******************************************************************************)

PROCEDURE MLDMKATOM(rel,left,right:LIST):LIST;
(* maslog demonstration make atomic formula. rel is the relation symbol
(either EQU or NEQ), left and right are beta integers or variables. The
formula (left rel right) is returned. *)


(******************************************************************************
*		  H I G H   L E V E L   P R O C E D U R E S		      *
******************************************************************************)

PROCEDURE MLDTST(l: LIST):LIST;
(* maslog demonstration test 1. l is a list; MLDTST returns 1 if l represents
a formula otherwise 0. *)

PROCEDURE MLDMKPOS(phi: LIST): LIST;
(* maslog demonstration make positive.  phi is a formula; a formula equivalent
to phi, which is relative positive, is returned. Relative positive means that
negations are only in front of atomic formulas. *)

PROCEDURE MLDMKPOS1(phi, pref: LIST): LIST;
(* maslog demonstration make positive 1.  phi is a formula; pref is a symbol
of the set \{ET, VEL, NON\}; a formula equivalent to phi, which is relative
positive, is returned. Relative positive means that negations are only in
front of atomic formulas. pref is a switch that controls the substitution of
the operators IMP, REP, EQUIV, XOR.*)

PROCEDURE MLDMKDNF(phi: LIST): LIST;
(* maslog demonstration make disjunctive normal form. phi is a formula;
MLMKDNF returns a formula in strict disjunctive normal form which is
equivalent to phi.  *)

PROCEDURE MLDMKCNF(phi: LIST): LIST;
(* maslog demonstration make disjunctive normal form. phi is a formula;
MLDMKCNF returns a formula in strict conjunctive normal form which is
equivalent to phi. *)

PROCEDURE MLDMKPRENEX(phi, pref: LIST): LIST;
(* maslog demonstration make prenex.  phi is a formula; pref is an element of
\{EXIST, FORALL\}; a formula psi in prenex normal form is returned.  phi must
be a relative positive formula without additional operation symbols like IMP,
REP, etc. All bound variables in phi must have different specifications
(i.e. different names or different types).  The only transformation which is
used to calculate psi is the interchange of a junctor with a quantifier.  The
formula psi has the minimal number of blocks of quantifiers under all prenex
formulas which are built using only the interchange of a junctor with an
quantifier.  The argument pref is only respected, if there are two equivalent
formulas with the same optimal number of blocks of quantifiers.  In this case
the formula is returned which has a "`pref"'-quantifier as the outermost
operation symbol.*)

PROCEDURE MLDSUBSTVAR(phi,old,new:LIST):LIST;
(* maslog demonstration substitute variables.  phi is a formula; old and new
are variables; a formula in which the variable old is substituted by the
variable new is returned. *)

PROCEDURE MLDMKVD(phi: LIST):LIST;
(* maslog demonstration make variables disjoint.  formula is a formula, this
procedure returns a formula in which all bound variables of the same sort
have different names.  Only the minimal number of renamings are done to make
the names different.*)

PROCEDURE MLDSMPL(phi: LIST): LIST;
(* maslog demonstration simplify.  phi is a formula; a formula phi1 equivalent
to phi is returned. The formula phi1 is simplified, that means the constants
VERUM and FALSUM are eliminated, and nested operators are eliminated. (In this
case the procedure takes advantage of associativity of ET and VEL, and the
idempotenz of NON. *)

PROCEDURE MLDPREPQE(phi: LIST):LIST;
(* maslog demonstration prepare quantifier elimination.  phi is a prenex
formu\-la; a formula psi equivalent to phi is returned. psi is built according
to the following rules: If the innermost block of quantifiers is an
exist-quantifier, then matrix(phi) is transformed in CNF and the innermost
block of quantifiers is moved inside the conjunction. If the innermost
quantifier is a forall-quantifier, then matrix(phi) is transformed in DNF and
the innermost block of quantifiers is moved inside the disjunction.*)

PROCEDURE MLDAPPLYAT(phi:LIST):LIST;
(* maslog demonstration apply to atomic formulas. phi is a formula; the
formula phi is returned and all atomic formulas are written in the outout
stream. *)

PROCEDURE MLDPPRT(phi: LIST);
(* maslog demonstration pretty print. phi is a formula; this procedure writes
the formula phi formated in the output stream. *)

PROCEDURE MLDTEXW(phi: LIST);
(* maslog demonstration tex write. phi is a formula; this procedure writes phi
in tex style in the output stream. *)

PROCEDURE MLDCONTVAR(phi,var:LIST):LIST;
(* maslog demonstration contain variable. phi is a formula, var is a variable;
1 is returned, if phi contains var as an unbound variable, otherwise 0 is
returned. *)

PROCEDURE MLDCONTBDVAR(phi,var:LIST):LIST;
(* maslog demonstration contains bound variable. phi is a formula, var is a
variable; 1 is returned, if phi contains var as bound variable, otherwise 0
is returned. *)

PROCEDURE MLDPREAD():LIST;
(* maslog demonstration prefix read. A formula is read from the input 
stream. *)

PROCEDURE MLDIREAD():LIST;
(* maslog demonstration infix read. A formula is read from the input 
stream. *)

END MLDEMO.

(* -EOF- *)