﻿<?xml-stylesheet type="text/xsl" href="../../templates/doc.xsl"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML Basic 1.0//EN" "http://www.w3.org/TR/xhtml-basic/xhtml-basic10.dtd">
<html 
	xmlns="http://www.w3.org/1999/xhtml" 
	xmlns:doc="http://www.lepus.org.uk/doc" 
	xmlns:classz="http://www.lepus.org.uk/classz" 
	xmlns:fopl="http://www.lepus.org.uk/fopl" 
	xml:lang="en-gb" 
	xmlns:v="urn:schemas-microsoft-com:vml" 
	xmlns:o="urn:schemas-microsoft-com:office:office">

<head>
	<title>Legend: Key to symbols, LePUS3 and Class-Z</title>
	<meta http-equiv="Content-Style-Type" content="text/css" />
	<meta name="Author" content="Amnon H Eden, Jonathan Nicholson, Epameinondas Gasparis" />
	<link rel="stylesheet" type="text/css" href="../../templates/doc.css" />
</head>

<body>

<p class="pagetitle">Legend</p>

<p class="subtitle">Key to LePUS3 and Class-Z Symbols</p>

<p><a href="legend.pdf" style="border:0px">
	<img alt="Print this document" src="../../site/print.gif" /></a></p>

<div class="abstract">
	<p> This document describes the visual vocabulary
		of LePUS3 and Class-Z that captures the 
		abstract building-blocks in object-oriented design. It
		gives a brief and informal summary of each
		term, relation and predicate symbols used in LePUS3 and Class-Z formulas. It 
		does <em>not</em> include formal definitions, which are given in the
		<a href="../refman/refman.xml">LePUS3 and Class-Z Reference Manual</a>.</p>
	
	<p> See also:</p>

	<ul>
		<li><a href="http://www.lepus.org.uk/about.xml"><strong>About</strong> LePUS3 and Class-Z</a></li>
		<li><a href="../refman/refman.xml">LePUS3 and Class-Z <strong>Reference Manual</strong></a> [<a href="../refman/refman.pdf">.pdf</a>]</li>
		<li><a href="../lepus3-tutorial.pdf"><strong>Tutorial</strong>: Object-Oriented 
	Modelling with LePUS3 and Class-Z</a> [<a href="../lepus3-tutorial.pdf">.pdf</a>][<a href="../lepus3-tutorial.ppt">.ppt</a>]</li>
	</ul>
</div>

<doc:toc />

<h1>LePUS3 Vocabulary</h1>

<p>The basic set of symbols used in LePUS3 is illustrated below.</p>

<p><img alt="LePUS3 Vocabulary" src="lepus3/vocabulary.gif"/></p>
<p>For the precise definitions of this vocabulary please refer to the
<a href="../refman/refman.xml">LePUS3 and Class-Z Reference Manual</a>.</p>

<h1>Some basic terminology</h1>

<p><span class="termdef">Terms</span> stand for entities, such as classes (as 
	defined in <a href="#Modelling_specific_classes_and_class_hierarchies">Section 
	2)</a> and methods (as defined in <a href="#Modelling_specific_methods">Section 
	3</a> below). <span class="termdef">Formulas</span> specify constraints on the entities, where 
	<a class="termdef" href="#Modelling_properties_and_simple_relations">ground formulas</a> 
	specify properties and relations between individual entities (see
	<a href="#Modelling_properties_and_simple_relations">Section 4</a> 
	below) and
	<a class="termdef" href="#Modelling_relations_between_sets">predicate formulas</a> specify relations between sets 
	of entities (see <a href="#Modelling_relations_between_sets">Section 5</a> below.)  
	</p>
<p>Each term has a <span class="termdef">dimension</span>: 0-dimensional terms stand for individual entities (either a class, 
	a method, or a signature) whereas 1-dimensional terms stand for sets of entities. 
	Each term also has a <span class="termdef">type</span> (see complete
<a href="../refman/refman.xml#type">list of types</a> in the reference manual), for example:
</p>

<ul>
	<li>Terms of type 
		<classz:type value="CLASS" />
		(0-dimensional class terms) stand for individual classes, whereas terms of type
		<classz:type value="CLASS" exponent="1" />
		(1-dimensional class terms) stand for sets of classes</li>
	<li>Terms of type 
		<classz:type value="SIGNATURE" />
		(0-dimensional signature terms) stand for individual (method) signatures, 
		whereas terms of type
		<classz:type value="SIGNATURE" exponent="1" />
		(1-dimensional signature terms) stand for sets of signatures</li>
	<li><fopl:variable value="d" />-dimensional 
	<a href="#Modelling_specific_(sets_of-)methods">superimposition terms</a> 
		are of type 
		<classz:type value="METHOD" exponent="d" />
		</li>
</ul>



<p>The type 
	<classz:type value="HIERARCHY" /> 
	is a subtype of 
	<classz:type value="CLASS" exponent="1" /> 
	; in other words, a <a href="../refman/refman.xml#hierarchy_of_dimension_1">hierarchy</a> is also a set of classes. 
</p>


<p>For the precise definitions of this vocabulary please refer to the 
	<a href="../refman/refman.xml">LePUS3 and Class-Z Reference Manual</a>.</p>

<h1>Modelling specific (sets of-)classes and class hierarchies</h1>

<p>Constants are terms that stand each for a specific class, a (method) 
	signature, or a hierarchy, or a set of these entities. 
</p>

<table class="symbols">
<tr>
	<th style="width: 60px">Symbol name</th>
	<th style="width: 80px">Meaning in Java</th>
	<th>Sample Class-Z schema</th>
	<th>Sample LePUS3 chart</th>
	<th>Illustration</th>
</tr>
<tr>
	<td>0-dimensional class constant </td>
	<td>A class, an interface, or a primitive type</td>
	<td>
		<classz:schema title="IndividualClass">
			<classz:declarations>
				<classz:declare>
					<classz:constant value="linkedList" />
					<classz:type value="CLASS" />
				</classz:declare>
			</classz:declarations>
		</classz:schema>
	</td>
	<td>
		<img alt="" src="lepus3/linkedlist.png" style="width: 116px; height: 72px" /></td>
	<td>
		<pre class="program">
<strong>public class </strong>LinkedList {...}
		</pre>
	
	</td>
</tr>
<tr>
	<td>1-dimensional class constant </td>
	<td>A set of classes, interfaces, or primitive types</td>
	<td>
		<classz:schema title="ManyClasses">
			<classz:declarations>
				<classz:declare>
					<classz:constant value="ConcreteCollections" />
					<classz:type value="CLASS" exponent="1" />
				</classz:declare>
			</classz:declarations>
		</classz:schema>
	</td>
	<td><img src="lepus3/conc-coll1dim.png" style="width: 126px; height: 82px" /></td>
	<td><img alt="Concrete collections modelled using 0-dimensional constants" src="lepus3/conc-coll0dim.png" style="width: 116px; height: 389px" /></td>
</tr>
<tr>
	<td>1-dimensional hierarchy constant </td>
	<td>A set of classes which contains one class 
		such that all other classes inherit (possibly indirectly) from it </td>
	<td>
		<classz:schema title="AClassHierarchy">
			<classz:declarations>
				<classz:declare>
					<classz:constant value="Collections" />
					<classz:type value="HIERARCHY" />
				</classz:declare>
			</classz:declarations>
		</classz:schema>
	</td>
	<td><img alt="" src="lepus3/collhrc.png" style="width: 165px; height: 143px" /></td>
	<td><img alt="Collections hierarchy illustration" src="lepus3/collhrc_classes.png" style="width: 126px; height: 218px" /></td>
</tr>
<tr>
	<td>2-dimensional hierarchy constant</td>
	<td>A set of hierarchies</td>
	<td>
		<classz:schema title="ASetOfHierarchies">
			<classz:declarations>
				<classz:declare>
					<classz:constant value="PRODUCTS" />
					<classz:type value="HIERARCHY" exponent="2"/>
				</classz:declare>
			</classz:declarations>
		</classz:schema>
	</td>
	<td><img alt="" src="lepus3/products2dim.png" style="width: 175px; height: 153px" /></td>
	<td><img alt="" src="lepus3/products1dim.png" /></td>
</tr>
</table>

<p>For the precise definitions of this vocabulary please refer to the
<a href="../refman/refman.xml">LePUS3 and Class-Z Reference Manual</a>.</p>

<h1>Modelling specific (sets of-)methods</h1>

<p>A method or (a set thereof) is represented by 
<a href="../refman/refman.xml#Superimpositions">superimposing</a> a signature term 
	over a class term, a combination called a <span class="termdef">superimposition term</span>:</p>

<table class="symbols">
<tr>
	<th style="width: 60px">Term name</th>
	<th style="width: 120px">Meaning in Java</th>
	<th>Sample Class-Z schema</th>
	<th>Sample LePUS3 chart</th>
	<th>Illustration</th>
</tr>
<tr>
	<td>0-dimensional superimposition constant</td>
	<td>A method with signature 
		<fopl:row>
			<classz:constant value="sig" />
		</fopl:row>
		which is a member of (or inherited by) class
		<fopl:row>
			<classz:constant value="cls" />
		</fopl:row>
	</td>
	<td>
		<classz:schema title="AnIndividualMethod">
			<classz:declarations>
				<classz:declare>
					<classz:constant value="linkedList" />
					<classz:type value="CLASS" />
				</classz:declare>
				<classz:declare>
					<classz:constant value="add" />
					<classz:type value="SIGNATURE" />
				</classz:declare>
			</classz:declarations>
			<classz:formulas>
				<classz:formula>
					<classz:relationsymbol value="Method" />
					<classz:superimposition>
						<classz:constant value="add" />
						<classz:constant value="linkedList" />
					</classz:superimposition>
				</classz:formula>
			</classz:formulas>
		</classz:schema>
	</td>
	<td>
		<img alt="" src="lepus3/linkedlist_add.png" style="width: 148px; height: 72px" /></td>
	<td>
		<pre class="program">
<strong>public interface </strong>LinkedList {
  <strong>void </strong>add();
}
		</pre>
	</td>
</tr>
<tr>
	<td rowspan="3">
		1-dimensional superimposition constant</td>
	<td>
		A tribe (a set of methods with signatures
		<fopl:row>
			<classz:constant value="Signatures" />
		</fopl:row>
		) that are members of (or inherited by) class
		<fopl:row>
			<classz:constant value="cls" />
		</fopl:row>
	</td>
	<td>
		<classz:schema title="ATribe">
			<classz:declarations>
				<classz:declare>
					<classz:constant value="linkedList" />
					<classz:type value="CLASS" />
				</classz:declare>
				<classz:declare>
					<classz:constant value="ListOps" />
					<classz:type value="SIGNATURE" exponent="1" />
				</classz:declare>
			</classz:declarations>
			<classz:formulas>
				<classz:formula>
					<classz:predicatesymbol value="ALL" />
					<classz:relationsymbol value="Method" />
					<classz:superimposition>
						<classz:constant value="ListOps" />
						<classz:constant value="linkedList" />
					</classz:superimposition>
				</classz:formula>
			</classz:formulas>
		</classz:schema>
	</td>
	<td>
		<img alt="" src="lepus3/listopsxlinkedlist.png" style="width: 158px; height: 78px" /></td>
	<td>
		<img alt="" src="lepus3/listopsxlinkedlist0dim.png" style="width: 200px; height: 132px" /></td>
</tr>
<tr>
	<td>
		A clan (a set of methods with signature
		<fopl:row>
			<classz:constant value="sig" />
		</fopl:row>
		) that are members of (or inherited by) classes in
		<fopl:row>
			<classz:constant value="Classes" />
		</fopl:row>
	</td>
	<td>
		<classz:schema title="AClan">
			<classz:declarations>
				<classz:declare>
					<classz:constant value="Lists" />
					<classz:type value="CLASS" exponent="1" />
				</classz:declare>
				<classz:declare>
					<classz:constant value="add" />
					<classz:type value="SIGNATURE"  />
				</classz:declare>
			</classz:declarations>
			<classz:formulas>
				<classz:formula>
					<classz:predicatesymbol value="ALL" />
					<classz:relationsymbol value="Method" />
					<classz:superimposition>
						<classz:constant value="add" />
						<classz:constant value="Lists" />
					</classz:superimposition>
				</classz:formula>
			</classz:formulas>
		</classz:schema>
	</td>
	<td><img alt="" src="lepus3/addxlists1dim.png" style="width: 148px; height: 82px" /></td>
	<td><img alt="" src="lepus3/addxlists0dim.png" style="width: 383px; height: 376px" /></td>
</tr>
<tr>
	<td>
		A clan (a set of methods with signature
		<fopl:row>
			<classz:constant value="sig" />
		</fopl:row>
		) that are members of (or inherited by) classes in the hierarchy
		<fopl:row>
			<classz:constant value="Hrc" />
		</fopl:row>
	</td>
	<td>
		<classz:schema title="AClanInAHierarchy">
			<classz:declarations>
				<classz:declare>
					<classz:constant value="Lists" />
					<classz:type value="HIERARCHY" />
				</classz:declare>
				<classz:declare>
					<classz:constant value="add" />
					<classz:type value="SIGNATURE"  />
				</classz:declare>
			</classz:declarations>
			<classz:formulas>
				<classz:formula>
					<classz:predicatesymbol value="ALL" />
					<classz:relationsymbol value="Method" />
					<classz:superimposition>
						<classz:constant value="add" />
						<classz:constant value="Lists" />
					</classz:superimposition>
				</classz:formula>
			</classz:formulas>
		</classz:schema>
	</td>
	<td>
		<img alt="" src="lepus3/addxlists_hrc.png" style="width: 165px; height: 143px" /></td>
	<td>
		&nbsp;<img alt="" src="lepus3/addxlistshrc0dim.png" style="width: 383px; height: 376px" /></td>
</tr>
</table>

<p>For the precise definitions of this vocabulary please refer to the
<a href="../refman/refman.xml">LePUS3 and Class-Z Reference Manual</a>.</p>

<h1>Modelling properties and simple relations</h1>
<p>Properties of individual classes and methods are modelled using
<span class="termdef">unary relation symbols</span>, modelled in LePUS3 as 
inverted triangles. Relations between individual classes and methods are 
modelled using <span class="termdef">binary relation symbols</span>, A formula 
consisting of a unary or a binary relation symbol and 0-dimensional arguments is 
called a <a class="termdef" href="../refman/refman.xml#ground_formulas">ground formula</a>.</p>
<p>For the precise meaning of each unary and binary relation symbol in Java see:
<a href="../verif/1java_as.xml">Abstract Semantics for Java 1.4 Programs</a></p>


<table class="symbols">
	<tr>
		<th style="width: 60px">Relation Symbol</th>
		<th style="width: 100px">Meaning in Java</th>
		<th>Sample Class-Z schema</th>
		<th>Sample LePUS3 chart</th>
		<th>Illustration</th>
	</tr>
	<tr>
		<td rowspan="2">
			<classz:relationsymbol value="Abstract" />
		</td>
		<td rowspan="2">
			The class/method represented by the argument abstract.
		</td>
		<td>
			<classz:schema title="AnAbstractClass">
				<classz:declarations>
					<classz:declare>
						<classz:constant value="abstractList" />
						<classz:type value="CLASS" />
					</classz:declare>
				</classz:declarations>
				<classz:formulas>
					<classz:formula>
						<classz:relationsymbol value="Abstract" />
						<classz:constant value="abstractList" />
					</classz:formula>
				</classz:formulas>
			</classz:schema>
		</td>
		<td>
			<img alt="" src="lepus3/abs-abslist.png" style="width: 116px; height: 72px" /></td>
		<td>
		<pre class="program">
<strong>public abstract 
  class </strong>AbstractList
...		</pre>
		&nbsp;</td>
	</tr>
	<tr>
		<td>
			<classz:schema title="InterfaceAndAbstractMethod">
				<classz:declarations>
					<classz:declare>
						<classz:constant value="collection" />
						<classz:type value="CLASS" />
					</classz:declare>
					<classz:declare>
						<classz:constant value="size" />
						<classz:type value="SIGNATURE"  />
					</classz:declare>
				</classz:declarations>
				<classz:formulas>
					<classz:formula>
						<classz:relationsymbol value="Abstract" />
						<classz:constant value="collection" />
					</classz:formula>
					<classz:formula>
						<classz:relationsymbol value="Abstract" />
						<classz:superimposition>
							<classz:constant value="size" />
							<classz:constant value="collection" />
						</classz:superimposition>
					</classz:formula>
				</classz:formulas>
			</classz:schema>
		</td>
		<td>
			<img alt="" src="lepus3/abs-sizexcoll.png" /></td>
		<td>
		<pre class="program">
<strong>interface </strong>Collection
{ ...
  <strong>int</strong> size();
... }</pre>
		&nbsp;</td>
	</tr>
	<tr>
		<td>
			<classz:relationsymbol value="Inherit" />
		</td>
		<td>
			One static type <em>extends</em>, <em>implements</em>, or is a <em>subtype-of</em> 
			another.</td>
		<td>
			<classz:schema title="InheritRelation">
				<classz:declarations>
					<classz:declare>
						<classz:constant value="vector" />
						<classz:constant value="abstractList" />
						<classz:constant value="list" />
						<classz:type value="CLASS" />
					</classz:declare>
				</classz:declarations>
				<classz:formulas>
					<classz:formula>
						<classz:relationsymbol value="Inherit" />
						<classz:constant value="vector" />
						<classz:constant value="abstractList" />
					</classz:formula>
					<classz:formula>
						<classz:relationsymbol value="Inherit" />
						<classz:constant value="vector" />
						<classz:constant value="list" />
					</classz:formula>
				</classz:formulas>
			</classz:schema>
		</td>
		<td>
		<img alt="" src="lepus3/inherit.gif" /></td>
		<td>
		<pre class="program">
<strong>public class </strong>vector
   <strong>extends</strong> AbstractList
   <strong>implements</strong> List
   ...
</pre>
		</td>
	</tr>
	<tr>
		<td>
			<classz:relationsymbol value="Inherit" transitive="yes" />
		</td>
		<td>
			The class represented by the 'from' term inherits (possibly 
			indirectly) from the class represented by 'to' term.
		</td>
		<td>
			<classz:schema title="TransitiveInheritance">
				<classz:declarations>
					<classz:declare>
						<classz:constant value="linkedList" />
						<classz:constant value="collection" />
						<classz:type value="CLASS" />
					</classz:declare>
				</classz:declarations>
				<classz:formulas>
					<classz:formula>
						<classz:relationsymbol value="Inherit" transitive="yes" />
						<classz:constant value="linkedList" />
						<classz:constant value="collection" />
					</classz:formula>
				</classz:formulas>
			</classz:schema>
		</td>
		<td><img alt="Ground formula with a transitive binary relation: Illustration" src="lepus3/transinherit-ex.png" style="width: 325px; height: 72px" /></td>
		<td>
			<pre class="program">
<strong>public interface </strong>Collection<strong> ...
<span class="style1">public interface </span></strong><span class="style1">List 
  <strong>implements </strong>Collection ...
</span><strong>public class </strong>LinkedList 
  <strong>implements</strong> List ... </pre>
		</td>
	</tr>
	<tr>
		<td>
			<classz:relationsymbol value="Create" />
		</td>
		<td>
			The 'from' method may create instances of the 'to' class (or subtypes 
			thereof).

		</td>
		<td>
			<classz:schema title="CreateRelation">
				<classz:declarations>
					<classz:declare>
						<classz:constant value="string" />
						<classz:type value="CLASS" />
					</classz:declare>
					<classz:declare>
						<classz:constant value="toLowerCase" />
						<classz:type value="SIGNATURE"  />
					</classz:declare>
				</classz:declarations>
				<classz:formulas>
					<classz:formula>
						<classz:relationsymbol value="Create" />
						<classz:superimposition>
							<classz:constant value="toLowerCase" />
							<classz:constant value="string" />
						</classz:superimposition>
						<classz:constant value="char[]" />
					</classz:formula>
				</classz:formulas>
			</classz:schema>
		</td>
		<td><img alt="" src="lepus3/creat-char.png" />&nbsp;</td>
		<td>
			<pre class="program">
<strong>public String</strong> toLowerCase(Locale locale) { &#8230;
  <strong>if</strong> (&#8230;) { &#8230; }
  <strong>else</strong> { &#8230;
    <strong>for</strong> (&#8230;) { &#8230;
      char[] result2 = new char[&#8230;];
  &#8230;</pre>
		</td>
	</tr>
	<tr>
		<td>
			<classz:relationsymbol value="Member" />
		</td>
		<td>
			The 'from' class has a field of the type of the 'to' class (or subtypes 
			thereof). </td>
		<td>
			<classz:schema title="MemberRelation">
				<classz:declarations>
					<classz:declare>
						<classz:constant value="package" />
						<classz:constant value="url" />
						<classz:type value="CLASS" />
					</classz:declare>
				</classz:declarations>
				<classz:formulas>
					<classz:formula>
						<classz:relationsymbol value="Member" />
						<classz:constant value="package" />
						<classz:constant value="url" />
					</classz:formula>
				</classz:formulas>
			</classz:schema>
		</td>
		<td><img alt="" src="lepus3/create.gif" /></td>
		<td>
			<pre class="program">
<strong>public class </strong>package {&#8230;
   <strong>private </strong>URL theURL;</pre>
		</td>
	</tr>
	<tr>
		<td>
			<classz:relationsymbol value="Create" />
		</td>
		<td>
			The 'from' class is (or has a field of)a subtype of <code>
			Collection</code>, or has an 
			array of (possibly a subtype of) the 'to' class. </td>
		<td>
			<classz:schema title="AggregateRelation">
				<classz:declarations>
					<classz:declare>
						<classz:constant value="linkedList" />
						<classz:constant value="object" />
						<classz:type value="CLASS" />
					</classz:declare>
				</classz:declarations>
				<classz:formulas>
					<classz:formula>
						<classz:relationsymbol value="Aggregate" />
						<classz:constant value="linkedList" />
						<classz:constant value="object" />
					</classz:formula>
				</classz:formulas>
			</classz:schema>
		</td>
		<td><img alt="" src="lepus3/aggregate.gif" /></td>
		<td>
			<pre class="program" style="direction: ltr">
<strong>public class </strong>LinkedList 
 <strong>implements</strong> List // which implements Collection
 &#8230;</pre>
		</td>
	</tr>
	<tr>
		<td>
			<classz:relationsymbol value="Call" />
		</td>
		<td>
			The 'from' method may cal the 'to' method. </td>
		<td>
			<classz:schema title="CallRelation">
				<classz:declarations>
					<classz:declare>
						<classz:constant value="test" />
						<classz:constant value="printStream" />
						<classz:type value="CLASS" />
					</classz:declare>
					<classz:declare>
						<classz:constant value="main" />
						<classz:constant value="print" />
						<classz:type value="SIGNATURE"  />
					</classz:declare>
				</classz:declarations>
				<classz:formulas>
					<classz:formula>
						<classz:relationsymbol value="call" />
						<classz:superimposition>
							<classz:constant value="main" />
							<classz:constant value="text" />
						</classz:superimposition>
						<classz:superimposition>
							<classz:constant value="print" />
							<classz:constant value="printStream" />
						</classz:superimposition>
					</classz:formula>
				</classz:formulas>
			</classz:schema>
		</td>
		<td><img alt="" src="lepus3/call.gif" />&nbsp;</td>
		<td>
				<pre class="program">
<strong>public class </strong>Test {
  <strong>public static void</strong> main (&#8230;) 
  { &#8230; if (&#8230;) {
    System.out.print(&#8230;);
  &#8230; </pre>
		</td>
	</tr>
	<tr>
		<td colspan="5">
			<p>Any other relation symbol designating a decidable relation in code 
				is also permitted and modelled in the same manner, including:</p>
			<ul>
				<li><classz:relationsymbol value="Throws" />, indicating a method
					contains a return statement with a given type (or subtypes thereof);</li>
				<li><classz:relationsymbol value="Produce" />, indicating a method
					returns new instances of a given type (or subtypes thereof);</li>
				<li><classz:relationsymbol value="Throws" />, indicating a method
					may throw instances of a given type (or subtypes thereof);</li>
			</ul>
		</td>
	</tr>
	</table>

<p>For the precise definitions of this vocabulary please refer to the
<a href="../refman/refman.xml">LePUS3 and Class-Z Reference Manual</a>.</p>

<h1>Modelling correlations between sets</h1>

<p>Relations between sets of entities are represented using 
	<a class="termdef" href="../refman/refman.xml#Predicates">predicates</a>:</p>

<table class="symbols">
	<tr>
		<th style="width: 60px">Predicate name</th>
		<th style="width: 100px">Meaning</th>
		<th>Sample Class-Z schema</th>
		<th>Sample LePUS3 chart</th>
		<th>Illustration</th>
	</tr>
	<tr>
		<td>ALL</td>
		<td>
			All the entities represented by the 'to' term are in the relation
			<fopl:relation value="UnaryRelation" />.
		</td>
		<td>
			<classz:schema title="AllAbstract">
				<classz:declarations>
					<classz:declare>
						<classz:constant value="AbsCollections" />
						<classz:type value="CLASS" exponent="1" />
					</classz:declare>
				</classz:declarations>
				<classz:formulas>
					<classz:formula>
						<classz:predicatesymbol value="All" />
						<classz:relationsymbol value="Abstract"  />
						<classz:constant value="AbsCollections" />
					</classz:formula>
				</classz:formulas>
			</classz:schema>
		</td>
		<td><img alt="" src="lepus3/abscoll1dim.png" />&nbsp;</td>
		<td><img alt="" src="lepus3/abscoll0dim.png" />&nbsp;</td>
	</tr>
	<tr>
		<td>TOTAL</td>
		<td>
			Each one of the entities (except abstract methods) 
			in the set represented by the 'from' term is in the relation
			<fopl:relation value="BinaryRelation" />
			with some entity represented by the 'to' term.
		</td>
		<td>
			<classz:schema title="TotalInherit">
				<classz:declarations>
					<classz:declare>
						<classz:constant value="collection" />
						<classz:type value="CLASS" />
					</classz:declare>
					<classz:declare>
						<classz:constant value="ConcreteCollections" />
						<classz:type value="CLASS" exponent="1" />
					</classz:declare>
				</classz:declarations>
				<classz:formulas>
					<classz:formula>
						<classz:predicatesymbol value="TOTAL" />
						<classz:relationsymbol value="Inherit"  />
						<classz:constant value="ConcreteCollections" />
						<classz:constant value="collection" />
					</classz:formula>
				</classz:formulas>
			</classz:schema>
		</td>
		<td><img alt="Total predicate in concrete collections" src="lepus3/total-conc-collections.png" style="width: 126px; height: 232px" /></td>
		<td><img alt="Concrete Collections in 0-dimensional terms" src="lepus3/conc-collec0dim.png" style="width: 232px; height: 541px" /></td>
	</tr>
	<tr>
		<td>ISOMORPHIC</td>
		<td>
			Each one of the non-abstract entities in the set represented by the 'from' term
			can be paired with a unique non-abstract entity in the set represented by the 'to' term
			so as to satisfy the ground formula with the relation 
			<fopl:relation value="BinaryRelation" />.
		</td>
		<td>
			<classz:schema title="IsomorphicForward">
				<classz:declarations>
					<classz:declare>
						<classz:constant value="httpServlet" />
						<classz:constant value="webAppServlet" />
						<classz:type value="CLASS" />
					</classz:declare>
					<classz:declare>
						<classz:constant value="servletOps" />
						<classz:type value="Signature" exponent="1" />
					</classz:declare>
				</classz:declarations>
				<classz:formulas>
					<classz:formula>
						<classz:predicatesymbol value="Isomorphic" />
						<classz:relationsymbol value="Forward"  />
						<classz:superimposition>
							<classz:constant value="BufferOps" />
							<classz:constant value="lineNumberReader" />
						</classz:superimposition>
						<classz:superimposition>
							<classz:constant value="BufferOps" />
							<classz:constant value="bufferedReader" />
						</classz:superimposition>
					</classz:formula>
				</classz:formulas>
			</classz:schema>
		</td>
		<td><img alt="" src="lepus3/readers1dim.gif" /></td>
		<td><img alt="" src="lepus3/readers0dim.gif" /></td>
	</tr>
</table>
<!-- Definition -->


<p> Note that in LePUS3 we do not distinguish between the ground formula 
	<classz:formula>
		<classz:relationsymbol value="BinaryRelation" />
		<classz:variable value="t" subscript="1" />
		<classz:variable value="t" subscript="2" />
	</classz:formula> 
	and the predicate formula 
	<classz:formula>
		<classz:predicatesymbol value="TOTAL" />
		<classz:relationsymbol value="BinaryRelation" />
		<classz:variable value="t" subscript="1" />
		<classz:variable value="t" subscript="2" />
	</classz:formula>
	. Since both formulas are 
	<a href="../refman/refman.xml#Truth_conditions">satisfied under the same conditions</a>, 
	there is no ambiguity here. </p>


<p>For the precise definitions of this vocabulary please refer to the
<a href="../refman/refman.xml">LePUS3 and Class-Z Reference Manual</a>.</p>


<h1>Modelling generic design motifs</h1>

<p><a href="../companion/">Design patterns</a> and generic elements of 
	application frameworks are not tied in to a particular implementation. Their 
	specification therefore requires <em>variables </em>rather than <em>constants</em>. 
	The difference between constants and variables is as follows:</p>

<ul>
	<li><a name="constant_terms" class="termdef">Constants</a> represent 
		specific entities. Constants are modelled in LePUS3 as filled shapes and in Class-Z using
		<fopl:row>
			<classz:constant value="fixed-width typeface" />
		</fopl:row>
		.
	</li>
	<li><a name="variable_terms" class="termdef">Variables</a> range over entities. Constants are 
	modelled in LePUS3 as empty shapes and in Class-Z using 
		<classz:variable value="italicized typeface" />.</li>
</ul>


<p>In other words, variables are used to specify generic design constraints that 
	are not tied in to any specific implementation. For example, specifications of 
	design patterns use only variables, as demonstrated in the
	<a href="../companion/">'Gang of Four' Companion</a> document.</p>

<p><img alt="" src="lepus3/variables.png" />&nbsp;</p>

<p>For the precise definitions of this vocabulary please refer to the
<a href="../refman/refman.xml">LePUS3 and Class-Z Reference Manual</a>.</p>

</body>
</html>
