Sophie

Sophie

distrib > Mandriva > 2010.0 > i586 > media > contrib-release > by-pkgid > 5e1854624d3bc613bdd0dd13d1ef9ac7 > files > 1078

gap-system-4.4.12-5mdv2010.0.i586.rpm

<html><head><title>[CRISP] 2 Set theoretical classes</title></head>
<body text="#000000" bgcolor="#ffffff">
[<a href = "chapters.htm">Up</a>] [<a href ="CHAP001.htm">Previous</a>] [<a href ="CHAP003.htm">Next</a>] [<a href = "theindex.htm">Index</a>]
<h1>2 Set theoretical classes</h1><p>
<P>
<H3>Sections</H3>
<oL>
<li> <A HREF="CHAP002.htm#SECT001">Creating set theoretical classes</a>
<li> <A HREF="CHAP002.htm#SECT002">Properties of classes</a>
<li> <A HREF="CHAP002.htm#SECT003">Lattice operations for classes</a>
</ol><p>
<p>
In <font face="Gill Sans,Helvetica,Arial">CRISP</font>, a class (in the set-theoretical sense) is usually represented
by an algorithm which decides membership in that class. Wherever this makes
sense, sets (see <a href="badlink:ref:Set">Set</a> in the <font face="Gill Sans,Helvetica,Arial">GAP</font> reference
manual) may also be used as classes.
<p>
<p>
<h2><a name="SECT001">2.1 Creating set theoretical classes</a></h2>
<p><p>
<a name = "I0"></a>

<a name = "SSEC001.1"></a>
<li><code>IsClass(</code><var>C</var><code>) C</code>
<p>
returns true if <var>C</var> is a class object. The category of class objects is a
subcategory of the category <code>IsListOrCollection</code>.
<p>
<a name = "SSEC001.2"></a>
<li><code>Class(</code><var>rec</var><code>) O</code>
<li><code>Class(</code><var>func</var><code>) O</code>
<p>
returns a class <var>C</var>. In the first form, <var>rec</var> must be a record having a
component <code>\in</code> and an optional component <code>name</code>. The values of these
components, if present, are bound to the attributes <code>MemberFunction</code> and
<code>Name</code> (see <a href="badlink:ref:Name">Name</a>) of the class created. The value bound to <code>\in</code> must be a function
<var>func</var> which returns <code>true</code> if a <font face="Gill Sans,Helvetica,Arial">GAP</font> object belongs to <var>C</var>, and <code>false</code>
otherwise; cf. <a href="CHAP002.htm#SSEC002.2">MemberFunction</a> below. The second form is equivalent to <code>Class(rec(\in
:= </code><var>func</var><code>))</code>. It is the user's responsibility to ensure that <var>func</var> returns the same
result for different <font face="Gill Sans,Helvetica,Arial">GAP</font> objects representing the same mathematical object (or
element, in the <font face="Gill Sans,Helvetica,Arial">GAP</font> sense; see <a href="badlink:ref:objects and elements">objects and elements</a> in the <font face="Gill Sans,Helvetica,Arial">GAP</font>
reference manual).
<p>
<pre>
gap&gt; RequirePackage ("crisp");
                                                   
             _____  ___    __  ____   ___        
            / ___/ / _ \  / / / __/  / _ \       
           / /__  /   _/ / / _\_ \  / ___/       
           \___/ /_/\_\ /_/ /____/ /_/           
                                                    
                 A GAP 4 package for           
          Computing with Radicals, Injectors        
            Schunck classes and Projectors          
              of finite solvable groups             
                                                    
                By Burkhard H\"ofling               
                                                    
                For help, type ?CRISP               
                                                    
true
gap&gt; FermatPrimes := Class (p -&gt; IsPrime (p) and p = 2^LogInt (p, 2) + 1); 
Class (in:=function( p ) ... end)
</pre>
<p>
<a name = "SSEC001.3"></a>
<li><code>View(</code><var>class</var><code>)</code>
<p>
If the class does not have a name, this produces a brief description of the
information defining <var>class</var> which has been supplied by the user. If the
class has a name, only its name will be printed.
<p>
<pre>
gap&gt; View (FermatPrimes);
Class (in:=function( p ) ... end)
</pre>
<p>
<a name = "SSEC001.4"></a>
<li><code>Print(</code><var>class</var><code>)</code>
<p>
<code>Print</code> behaves very similarly to <code>View</code>, except that the defining
information is being printed in a more explicit way if possible.
<p>
<pre>
gap&gt; Print (FermatPrimes);
Class (rec ( in = function ( p )
    return IsPrime( p ) and p = 2 ^ LogInt( p, 2 ) + 1;
end))
</pre>
<p>
<a name = "SSEC001.5"></a>
<li><code>Display(</code><var>class</var><code>)</code>
<p>
For classes, <code>Display</code> works exactly as <code>Print</code>.
<p>
<a name = "SSEC001.6"></a>
<li><code></code><var>obj</var><code> in </code><var>class</var><code></code>
<p>
<a name = "I1"></a>

<a name = "I1"></a>
<a name = "I2"></a>

not. If <var>obj</var> can store attributes, the outcome of the membership test is
stored in an attribute <code>ComputedIsMembers</code> of <var>obj</var>.
<p>
<a name = "SSEC001.7"></a>
<li><code></code><var>C1</var><code> = </code><var>C2</var><code></code>
<p>
Since it is not possible to compare classes given by membership algorithms,
two classes are equal in <font face="Gill Sans,Helvetica,Arial">GAP</font> if and only if they are the same <font face="Gill Sans,Helvetica,Arial">GAP</font>
object (see <a href="badlink:ref:IsIdenticalObj">IsIdenticalObj</a> in the <font face="Gill Sans,Helvetica,Arial">GAP</font> reference manual).
<p>
<a name = "SSEC001.8"></a>
<li><code></code><var>C1</var><code> &lt; </code><var>C2</var><code></code>
<p>
The operation <code>&lt;</code> for classes has no mathematical meaning; it only exists
so that one can form sorted lists of classes.
<p>
<p>
<h2><a name="SECT002">2.2 Properties of classes</a></h2>
<p><p>
<a name = "I3"></a>

<a name = "I4"></a>

<a name = "SSEC002.1"></a>
<li><code>IsEmpty(</code><var>C</var><code>) P</code>
<p>
This property may be set to <code>true</code> or <code>false</code> if the class <var>C</var> is empty
resp. not empty.
<p>
<a name = "SSEC002.2"></a>
<li><code>MemberFunction(</code><var>C</var><code>) A</code>
<p>
This attribute, if bound, stores a function with one argument, <var>obj</var>,
which decides if <var>obj</var> belongs to <var>C</var> or not, and returns <code>true</code> and <code>false</code> accordingly.
If present, this function is called by the default method for <code>\in</code>.
<code>MemberFunction</code> is part of the definition of <var>C</var> and should not be called 
directly by the user.
<p>
<p>
<h2><a name="SECT003">2.3 Lattice operations for classes</a></h2>
<p><p>
<a name = "I5"></a>

<a name = "SSEC003.1"></a>
<li><code>Complement(</code><var>C</var><code>) O</code>
<p>
returns the unary complement of the class <var>C</var>, that is, the class consisting
of all objects not in <var>C</var>. <var>C</var> may also be a set.
<p>
<pre>
gap&gt; cmpl := Complement([1,2]);
Complement ([ 1, 2 ])
gap&gt; Complement (cmpl);
[ 1, 2 ]
</pre>
<p>
<a name = "SSEC003.2"></a>
<li><code>Intersection(</code><var>list</var><code>) F</code>
<li><code>Intersection(</code><var>C1</var><code>, </code><var>C2</var><code>, ...) F</code>
<a name = "I6"></a>

<p>
returns the intersection of the groups in <var>list</var>, resp. of the classes
<var>C1</var>, <var>C2</var>, .... If one of the classes is a list with fewer than
<code>INTERSECTION_LIMIT</code> elements, then the result will be
a sublist of that list. By default, <code>INTERSECTION_LIMIT</code> is 1000. 
<p>
<pre>
gap&gt; Intersection (Class (IsPrimeInt), [1..10]);
[ 2, 3, 5, 7 ]
gap&gt; Intersection (Class (IsPrimeInt), Class (n -&gt; n = 2^LogInt (n+1, 2) - 1));
Intersection ([ Class (in:=function( n ) ... end), 
  Class (in:=function( n ) ... end) ])
</pre>
<p>
<a name = "SSEC003.3"></a>
<li><code>Union(</code><var>C</var><code>, </code><var>D</var><code>) F</code>
<p>
returns the union of <var>C</var> and <var>D</var>.  
<p>
<pre>
gap&gt; Union (Class (n -&gt; n mod 2 = 0), Class (n -&gt; n mod 3 = 0));
Union ([ Class (in:=function( n ) ... end), Class (in:=function( n ) ... end) 
 ])
</pre>
<p>
<a name = "SSEC003.4"></a>
<li><code>Difference(</code><var>C</var><code>, </code><var>D</var><code>) O</code>
<p>
returns the difference of <var>C</var> and <var>D</var>. If <var>C</var> is a list, then the
result will be a sublist of <var>C</var>.
<p>
<pre>
gap&gt; Difference (Class (IsPrimePowerInt), Class (IsPrimeInt));
Intersection ([ Class (in:=function( n ) ... end), 
  Complement (Class (in:=function( n ) ... end)) ])
gap&gt; Difference ([1..10], Class (IsPrimeInt));
[ 1, 4, 6, 8, 9, 10 ]
</pre>
<p>
<p>
[<a href = "chapters.htm">Up</a>] [<a href ="CHAP001.htm">Previous</a>] [<a href ="CHAP003.htm">Next</a>] [<a href = "theindex.htm">Index</a>]
<P>
<address>CRISP manual<br>June 2007
</address></body></html>