<p id="<span class="ContS"br>spanjava.lang.StringIndexOutOfBoundsException: Range [0, 38) out of bounds for length 25
<aid=X8058CC8187162644name"8058"<a<>
<div class="ChapSects"><a href<panclass="</<span ="&sp&<panjava.lang.StringIndexOutOfBoundsException: Range [74, 73) out of bounds for length 142
<div /div><div>
/span>
<div<span class"">br/<pan<=tocline"<span class="css>nbsp;/pan>a =chap78_mj.html#X851FC6387CA2B241">78.4 <span
>r>pan ="css">nbsp&bsp<span>a href=hap78_mj.tml#X874C7C6D8650D6481 IsOperation/a><span
<java.lang.StringIndexOutOfBoundsException: Range [11, 5) out of bounds for length 142
<pan="ontSS"<br/<span class=nocss> &bsp<span>
<div class="ContSSBlock">
<span class="ContSS<=><br />span class="nocss"> <span>
>span=ocss&;&;/>a=".tmlX799081"781- spanclass"eading"TagBasedOperations/spanjava.lang.StringIndexOutOfBoundsException: Index 169 out of bounds for length 169
<span>
</div></div>
<div pan ="ntSS"<br/span"nocss"nbsp /span>ahref=chap78_mj.html#783FA45E7858A8CF>78.2- NewConstructora><java.lang.StringIndexOutOfBoundsException: Range [0, 140) out of bounds for length 7
<div class="ContSSBlock">
<span class<div</div>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap78_mj.html#X7EB6830886F62CC0div ="ontSect"<span ="ocline"><span class="nocss"> </span><a href="chap78_mj.html#X795EE8257848B438">78.3 </span>span class="ontSS">br />span class=nocss"> &;<div class="ontSSBlock">
</div></div>
<div class="ContSect"><span class="tocline"><<span>
</span<class""<br/<span class=java.lang.StringIndexOutOfBoundsException: Range [47, 45) out of bounds for length 144
<class=ContSSBlock<classContSS>br/spanclassn>;bsp/span<href=chap78_mjhtmlX7B26BDF68754DF7A>.- SuspendMethodReordering/
<span/>div
<span<iv class=ContSect"java.lang.StringIndexOutOfBoundsException: Range [2, 1) out of bounds for length 7
<panclass="ontSS"< /<spanclass=nocss"> <span>java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
< class=C<div>/iv
<< class""<span class=tocline<class=nocss"&;/span>< href="hap78_mj.#X7B85DD797A907106"786 <="eading"Redispatching/span>/a>
<div div classContSSBlock>
/span>
<=ContSect>class""<span class=java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 0
<.html#X846865A681D4A623">78.5 < class="eading"Partial Methods<span</>
</spanclass=ContSS"< /><pan class=nocss"&bsp;n<span>ajava.lang.StringIndexOutOfBoundsException: Index 72 out of bounds for length 0
<div class="ContSSBlock">
<span class=java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
</div></div>
<ivclass=ContSect"><span class="tocline"></>
</pan
<div class="ContSSBlock">< class=ContSS"</>java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 0
<="chap78_mj.html#7D4A46CE7BCFCCF5".-RedispatchOnCondition/<pan
</div></div>
<div class="ContSect/div>/>
<pan> div <p>On the hand perationsmoreNamelyaoperation correspondstoa trong class=pkgGAP/>functions,calledthe emjava.lang.StringIndexOutOfBoundsException: Range [155, 154) out of bounds for length 181 span class=ontSS>br/<span =nocss"&;nbsp;/>< href=chap78_mj.html#87B47AC0849611F8"787<
< ="> /<pan =nocss"<
<div</>
<div class="ContSect"><spanjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
</span>
<div class="ContSSBlock">
<java.lang.StringIndexOutOfBoundsException: Index 4 out of bounds for length 0
<"n;nbsp</span>a href=chap78_mj.html#X7B26BDF68754DF7A">78.8-2 SuspendMethodReordering</a></span>
</div></div>
<div class="ContSect<t; "MinimalPolynomialjava.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 0
<span
</java.lang.StringIndexOutOfBoundsException: Index 4 out of bounds for length 4
<> the other
<h3>78 <panclass=Heading>ethodSelectionspan
<p>This chapter explains how(n )..
<p>An <em>operation</em> is a special <java.lang.StringIndexOutOfBoundsException: Index 41 out of bounds for length 5
<p>All methods of an operation compute the same result. But each method is installed id"813"ame"813BE52887A3E0FA"a>/
<p>If an operation
<>pecial stringfrom the list =ode["""peration""roperty,ategory,"presentation,Filter,Setter<>reflectingwhichjava.lang.StringIndexOutOfBoundsException: Range [172, 171) out of bounds for length 218
<p<>see< =c.#CC6903E78F24167>span class=>.<span>/>, < href".htmlX8698205F8648EB33"<java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 0
<h4>78.1 <span class="Heading">Operations and Methods</span></java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 0
<pjava.lang.StringIndexOutOfBoundsException: Range [4, 5) out of bounds for length 0
<p>Soclass
<p>Onp> information aboutall <panclass=APprompt"&;/pan>span class=APinput"IsOperation(Factorial;/pan
<<an class=APprompt"&;/pan><java.lang.StringIndexOutOfBoundsException: Range [51, 50) out of bounds for length 107
p>< declarations for operation <Property "IsFinite">
<p>Also all attributes and properties areoperations.Each has java.lang.StringIndexOutOfBoundsException: Index 73 out of bounds for length 70
<p>The setter java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 0
<p><a java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 0
<h5>78.1-1 IsOperation</h5>
<div ="unc"<tableclass=f
<p>is thediv class=func><code class="func">NewOperation>eturns operation< =rg"pr/ with name var ">ame/>The varclass""-<var>escribes requirementsaboutthe argumentsof var ="g<ar> thenumberof argumentsmustbe the length<ar class"rg"args-<> and the <spanjava.lang.StringIndexOutOfBoundsException: Range [363, 362) out of bounds for length 501
<div class="example"><pre>
<span class="
&t; "MinimalPolynomial">
<span class="GAPprompt">gap></span> <span class="GAPinput<spanjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
rue
<spanjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
true
an =java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 0
function 3: GAPROOT//ctblgd: with argument,and [IsNearlyCharacterTable ]
< ="java.lang.StringIndexOutOfBoundsException: Index 22 out of bounds for length 12
false
<=unc> f"=100>r>d =" java.lang.StringIndexOutOfBoundsException: Range [87, 85) out of bounds for length 258
<div class="func"><table class="func" width="100
<returns stringfromthe list < class=code>[Attribute peration""roperty," "epresentation,"ilter""Setter"<code reflectingwhich typeofoperation var class=java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
<p>(see <a href="java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 0
<p><a id="X838E29D485D2BAB9" namedoes same asjava.lang.StringIndexOutOfBoundsException: Range [25, 24) out of bounds for length 290
<h5>78.1-3 ShowDeclarationsOfOperation</h5>
<java.lang.StringIndexOutOfBoundsException: Range [0, 4) out of bounds for length 0
<>isplays informationabout all declarations of the<p>Displays information about all declarations of the operation
<div class="example
<pan class=GAPprompt
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 lipThe java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 2:/li 3ivclass=func"table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣
<pre<div
<>a id=X<>ypical use casesfor basedoperations are that shall create objects in particular internal representations; the filters that define these java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 0
<h5>78.1-4 NewOperation</h5>
<iv class= p<ode class="func">NewOperation</code> returns an operation <var class="li<>The method
<
<p>ne caninstallli><p>If none of thebased class="Arg"oper/ar> has a <var class="Arg"tag>that is identical with the first argument of the<
<java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code classspanclass=java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
<>doesthe as<code class="unc"NewOperation</ode>(ahref=chap78_mj.html#X85A9E019795B79D6"><span class="RefLink">78.1-4<<span class="GAPprompt">gap></span> <java.lang.StringIndexOutOfBoundsException: Index 44 out of bounds for length 0
<div class="func"><table <pc group of size 3 with 1>
<iv class="func"><table class=func"width="00%><tr<td class=tdleft"><code class="func">‣ DeclareTagBasedOperation</code>( <var class<ym( [1..3 ])
<div class=<lt;ull transformationmonoid of degree < class=APprompt>apgt;span <span classGAPinput"DeclareConstructor("XCons",[IsMagma,IsInt]);</span>
<><de class="unc>ewTagBasedOperation</code> returns an operation with name <var class="Arg">name</var> that is declared as <em>tag based</em> w.r.t. the list <var class="Arg">java.lang.StringIndexOutOfBoundsException: Index 187 out of bounds for length 86
<<pan class="GAPprompt">gap></span> <span class="GAPinput">XCons(IsPermGroup i>p> method <ar class="rg>eth</var> is applicable the first argument of the call to <var class="Arg">oper</var> is identical (in the sense <panclass="GAPprompt">gap></<full transformation monoid of deg 4gtjava.lang.StringIndexOutOfBoundsException: Index 46 out of bounds for length 46
</li>
<li><p>If none of the tag based methods for <var class="Arglt;&;full transformation monoid of degree 3>
</li>
<ul
<p>Thusspan class=GAPbrkprompt">brk></span> <span class="java.lang.StringIndexOutOfBoundsException: Index 61 out of bounds for length 0
<p>Typical use cases
<>Currently itis todeclare an operation as tag based only for <em>one</em> list of requirementsError,nomethod found!For spanclass="GAPprompt">gap></span> <span class="GAPinput">XCons(java.lang.StringIndexOutOfBoundsException: Index 72 out of bounds for length 72
<p>methods with <code class="<function "HANDLE_METHOD_NOT_FOUND">( arguments>)
<p>oucan ';'to toouter loop,or
<h4>78<span class="APbrkprompt">brk></span>
<p>Constructorsare a special type of operation used to make newyoucan 'eturn; to continue
<p>Also, method ranking works differently: instead of the sum of the ranks of the java.lang.StringIndexOutOfBoundsException: Index 84 out of bounds for length 0
<div class="exampleError, no method found! For debugging hints java.lang.StringIndexOutOfBoundsException: Index 47 out of bounds for length 0 span<span ==GPinput>eclareConstructor("XCons",[IsMagma,IsInt]);</span>
<span class s="g;/>span=APinput>XCons ,sInt(t,x) return SymmetricGroup(x); end);</span>
<span class="GAPprompt">gap><<called calledfrom read-eval loop atr/ode>returns a constructor <var class="Arg">cons</var> with name <java.lang.StringIndexOutOfBoundsException: Range [0, 108) out of bounds for length 0
<span class="GAPprompt">gap></span> <java.lang.StringIndexOutOfBoundsException: Index 44 out of bounds for length 41
&t</iv>
<span
Sym<>he rankamethod installed a constructor is determined solely by <ar ="rg"args-</var<span
<span class="GAPprompt">gap>p> has the followingeffects on the<
&java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 0
ssfunccodereturns java.lang.StringIndexOutOfBoundsException: Range [67, 65) out of bounds for length 753
< class"Pprompt"ap&<span<spanclass=GAPinput>XCons3;/span
<full transformation monoid of degree 3>
</pre></DeclareFilte("IsMyObj")
<p>The
<java.lang.StringIndexOutOfBoundsException: Range [15, 2) out of bounds for length 130
<div class=
<java.lang.StringIndexOutOfBoundsException: Index 3 out of bounds for length 0
Error hints type?ecovery from NoMethodFound
Error, no 1st choice method found for `XCons' on 2 arguments called java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 0
<[IsMyObj ]
-eval loop at line 8 of *stdin*
you can 'quite;
you can t
<spantype: NewType MyFamily,IsMyObj ;
< =APprompt>&<>pan=APinput>(sNilpotentGroup4;spanjava.lang.StringIndexOutOfBoundsException: Index 95 out of bounds for length 95
Error, method!Fordebugginghints type ? type = MyFamily IsMyObj andIsMyFilter IsMyOtherFilter )
ror,o choice methodfound for`' arguments called from
&(filter )re>>
Print
you 'uit'toquit outer,or
you can 'java.lang.StringIndexOutOfBoundsException: Index 13 out of bounds for length 0 span class=GPbrkprompt"rkt</span>
</>
<p> that both cases there are methods
<java.lang.StringIndexOutOfBoundsException: Range [8, 2) out of bounds for length 62
<h5>78Specialconstructor
<java.lang.StringIndexOutOfBoundsException: Range [10, 4) out of bounds for length 259
<ode class=unc>NewConstructor<code> aconstructor <var class="Arg">cons</var> with name <java.lang.StringIndexOutOfBoundsException: Index 107 out of bounds for length 33
p><thatfor which areconstructorsjava.lang.StringIndexOutOfBoundsException: Range [59, 58) out of bounds for length 283
<div class="example"><pre>
java.lang.StringIndexOutOfBoundsException: Index 3 out of bounds for length 0
h4>78.3 <span class="Heading
DeclareFiltersMyOtherFilter)
BindGlobal( "java.lang.StringIndexOutOfBoundsException: Index 18 out of bounds for length 0
DeclareConstructor( "NewMyObj", [ IsMyObj ] );
InstallMethod( NewMyObj,
[ IsMyObjtrue
ion(filter )
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 0
Print("General constructor\n");
type := NewType( MyFamily, IsMyObj
return Objectify type,[);
endjava.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 0
InstallMethod
<iv ="unc"<tableclass=func"width"100"<>td tdleft"<code class="func"227;div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ InstallMethod="rg>opr</ar>[ var class"">info</var>], <ar =Arg"famp>,<class="Arg">p>does the same as <code class="func">NewConstructor</code> (<a href="chap78_mj.html#X783FA45E7858A8CF"><span class="RefLink">78.2-1</span></a>) and then binds the result to the global variable <var class="Arg">name</var>. The variable<p
unction filterjava.lang.StringIndexOutOfBoundsException: Index 18 out of bounds for length 18
local type;
Print("Special constructor\n");
type := NewType( MyFamily, IsMyObj and IsMyFilter
return Objectify type,[ ;
end );
</
<p
divorder describe method of an operation,we how the areconnected totheir operations.</p
<span class
<p> id"java.lang.StringIndexOutOfBoundsException: Range [0, 27) out of bounds for length 0
<span declaring that a isimplied byother filters is <ode class==func"<p>For declaring that a filter is implied by other filters there is <code class="func">InstallTrueMethod class="unc>tableclass=func width="100%><>td ="dleft>java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 0
<span class="GAPprompt">gap></span> <span class="GAPinput">b := NewMyObj( IsMyObj and
Special constructor
<span class="GAPprompt
rue
<java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
Special Special constructor
<panclass=GAPprompt">gap></span> <span class="GAPinput">IsMyOtherFilter(c);</span>
true
</</pre="func><table class="func" width="100%"><
<<
<h5<>he defaultvaluesfor < class="rg>info<var> <ar class="Arg">famp</var>, and <var class="Arg">val</var> are the empty string, java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 0
<="func"<table class="func" widthjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
<p>does
p operations whichareconstructorsspecial rules respect toapplicabilityandrank ofmethods see section< =func>/ < hrefc.#783FA45E7858A8CF"><span class="RefLink">78.21</span>/a><p>installs a var =">ethod<var the <var=Arg>pr/var> the sameway as <codeclass="func">InstallMethod</code> (<a href="chap78_mj.html#X837EFDAB7BEF290B"><span class="RefLink">78.3-1</span></a>), but
<h4>78.3 <span class="Heading">Method Installation</span></p>installs a special "early" function method <var class="Arg> for the operation"rg><
<p>In p>Thisjava.lang.StringIndexOutOfBoundsException: Index 10 out of bounds for length 0
<p>For attributes and properties there is <code class="func">InstallImmediateMethodjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
<p>For declaring that a filter is implied<>A method <p>A method installed
<h5java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
<div class="func><table class="unc width=100"<tr
<p>installs a function method <var <iv class="func"<tableclass="unc width="100%"><tr><td class="tdleft"><code class
<p>The default values for <var class="Arg">info</var>, <var class="Arg">java.lang.StringIndexOutOfBoundsException: Index 74 out of bounds for length 0
<p>The exact meaningof the arguments <var class=Arg>famp</ar, <var class=Arg">args-filts</var>, and <var class=
<p><var class="Arg">opr</var> expects its methods<
<p><a java.lang.StringIndexOutOfBoundsException: Range [0, 8) out of bounds for length 0
<h5java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
<div classp>otethatforoperations which areconstructors rules java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 0
<a special ""function method var class=Arg>method<var>for operation <ar class=Arg"opr/var>.An early method is special in that it bypasses method dispatch, and is always the first java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
<p>This can be used to avoid method selectionli<p>If<varclass="Arg">val</var> is an java.lang.StringIndexOutOfBoundsException: Index 47 out of bounds for length 0
<p>Also<p><a id
<p>If anearly method determines thatitis notli>pIf <var class="Arg">val</var> is a list of the form <code class="code">[ filters
<p>For an exampleAfter a method has
<p><java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
<5>78.3-4 InstallMethodWithRandomSource</h5
<div class="func<Ofcourse java.lang.StringIndexOutOfBoundsException: Range [0, 18) out of bounds for length 0
<div<< id"7B85DD797A907106"name=X7B85DD797A907106"></a></p>
<p>These java.lang.StringIndexOutOfBoundsException: Index 11 out of bounds for length 0
<p>java.lang.StringIndexOutOfBoundsException: Index 4 out of bounds for length 0
<p>function installs two methods: first it calls <code class="func">InstallMethod</code calls
<java.lang.StringIndexOutOfBoundsException: Range [0, 2) out of bounds for length 0
<.spanH"Applicable and Method</>/>
<p>A
<
<="Arg>args-filt> describes conditions for each argument, and <var class="Arg
<>,theapplicable java.lang.StringIndexOutOfBoundsException: Range [0, 40) out of bounds for length 0
<ul>
<li>
</li>
<">val
</li>
<> arethoughtas forobjectsgainknowledge notbeto the< informationq anobject other,java.lang.StringIndexOutOfBoundsException: Range [203, 202) out of bounds for length 515
</li>
</ul>
<p>So the
<p>Note that for operations which are constructors special <p>This function installs a method for the operation <var class=
<p>Note that
mpossible for <strong class="pkg">GAP</strong> to select an optimal method in all casesjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
<p
<p>Of
<p<java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 0
<h4>78.5 <span> "java.lang.StringIndexOutOfBoundsException: Range [21, 20) out of bounds for length 631
<p>As mentioned above thejava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
<>neway tojava.lang.StringIndexOutOfBoundsException: Range [22, 21) out of bounds for length 429
<p>A much better way is to use redispatching: Before deciding that no method has been found one tests these java.lang.StringIndexOutOfBoundsException: Index 115 out of bounds for length 0
<p>This can be
<Injava.lang.StringIndexOutOfBoundsException: Range [19, 17) out of bounds for length 57
<h5>78.6-1 RedispatchOnCondition</h5>
<div class="func"><table class="func" width="100%"><tr><td java.lang.StringIndexOutOfBoundsException: Range [0, 64) out of bounds for length 0
methodthe < ="rg"oper/ under conditions <arclass=Arg"fampred/var>and < class="Arg></ar> which has absolute value <var>Itmayhappen that afilter varclass=Argnewfil/var>shall implied by anotherfilter class=Arg>filt<var>,which isusually meet of otherproperties,or the meet someproperties and some categories.Suchlogical installed asan<qimmediate method</q> for <var class="Arg">newfil</var> that requires <var class="Arg">filt</var> and that always returns <code class="keyw">true</code>. (This should not be mixed up
<p><4>8.9 <panclass="Heading"Operations and java.lang.StringIndexOutOfBoundsException: Index 57 out of bounds for length 0
<p>For attributes and properties, one can java.lang.StringIndexOutOfBoundsException: Index 49 out of bounds for length 0
<p><a id
<h5>78.7-1 InstallImmediateMethod
<div class="func"><table class="java.lang.StringIndexOutOfBoundsException: Index 34 out of bounds for length 0
<><</code> installsvar ="Arg">method<var>as immediate method for <var class="Arg">opr</var>, which must be an attribute or a property, with requirement <var class="Arg">div =func"<>q>mbiguous</q> operations such as <code class="code">Rank</code> are declared in the library file <code java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 0
<p>An immediate method is called automatically as soon as the object lies in <var class="Arg">filter</var>, provided that the value is not yet known.java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
<p>Note the difference to <code class="func">InstallMethod</code> (<a href="chap78_mj.html#X837EFDAB7BEF290B"><span class="RefLink">78.3-1</span></a>) that no family predicate
<p>Immediate methods are thought of as a possibility for objects to gain useful knowledge
<p>Note
<p>
<p>Another example would be the implementationof the conclusion that every finite group of prime power order is nilpotent. This could be done by installing an immediate method for the attribute <code<
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">an style='color: green'>8227; IsNoImmediateMethodsObject</code>( <var class="Arg">obj</var> )</td><td class="tdright">( filter )</td></tr></table></div>
<p>If this filter is set immediate methods will be ignored for <var class="Arg">obj</var>. This can be crucial for performance for objects like pcgs (see Section <a href="chap45_mj.html#X7F18A01785DBAC4E"><span class="RefLink">45.1</span></a>), of which many are created, which are collections, but for which all those immediate methods for <code class="func">IsTrivial</code> (<a href="chap30_mj.html#X7E3402D6799D3C24"><span class="RefLink">30.4-3</span></a>) et cetera do not really make sense. Other examples of objects in <code class="func">IsNoImmediateMethodsObject</code> are compressed vectors and matrices over small finite fields, see the sections <a href="chap23_mj.html#X8679F7DD7DFCBD9C"><span class="RefLink">23.3</span></a> and <a href="chap24_mj.html#X873822B6830CE367"><span class="RefLink">24.14</span></a>.</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">an style='color: green'>8227; InstallTrueMethod</code>( <var class="Arg">newfil</var>, <var class="Arg">filt</var> )</td><td class="tdright">( function )</td></tr></table></div>
<p>It may happen that a filter <var class="Arg">newfil</var> shall be implied by another filter <var class="Arg">filt</var>, which is usually a meet of other properties, or the meet of some properties and some categories. Such a logical implication can be installed as an <q>immediate method</q> for <var class="Arg">newfil</var> that requires <var class="Arg">filt</var> and that always returns <codeclass="keyw">true</code>. (This should not be mixed up with the methods installed via <code class="func">InstallImmediateMethod</code> (<a href="chap78_mj.html#X87B47AC0849611F8"><span class="RefLink">78.7-1</span></a>), which have to be called at runtime for the actual objects.)</p>
<p><code class="func">InstallTrueMethod</code> has the effect that <var class="Arg">newfil</var> becomes an implied filter of <var class="Arg">filt</var>, see <a href="chap13_mj.html#X84EFA4C07D4277BB"><span class="RefLink">13.2</span></a>.</p>
<p>For example, each cyclic group is abelian, each finite vector space is finite dimensional, and each division ring is integral. The first of these implications is installed as follows.</p>
<div class="example"><pre>
InstallTrueMethod( IsCommutative, IsGroup and IsCyclic );
</pre></div>
<p>Contrary to the immediate methods installed with <code class="func">InstallImmediateMethod</code> (<a href="chap78_mj.html#X87B47AC0849611F8"><span class="RefLink">78.7-1</span></a>), logical implications cannot be switched off. This means that after the above implication has been installed, one can rely on the fact that every object in the filter <code class="code">IsGroup and IsCyclic</code> whose type gets created after the installation of the implication will also be in the filter <code class="func">IsCommutative</code> (<a href="chap35_mj.html#X830A4A4C795FBC2D"><span class="RefLink">35.4-9</span></a>). In particular, it may happen that an object which existed already before the installation of the implication lies in <code class="code">IsGroup and IsCyclic</code> but not in <code class="func">IsCommutative</code> (<a href="chap35_mj.html#X830A4A4C795FBC2D"><span class="RefLink">35.4-9</span></a>). Thus it is advisable to install all implications between filters before one starts creating (types of) objects lying in these filters.</p>
<p>Adding logical implications can change the rank of filters (see <code class="func">RankFilter</code> (<a href="chap13_mj.html#X82E62B997C05E05E"><span class="RefLink">13.2-1</span></a>)) and consequently the rank, and so choice of methods for operations (see <a href="chap78_mj.html#X851FC6387CA2B241"><span class="RefLink">78.4</span></a>). By default <code class="func">InstallTrueMethod</code> adjusts the method selection data structures to take care of this, but this process can be time-consuming, so functions <code class="func">SuspendMethodReordering</code> (<a href="chap78_mj.html#X7B26BDF68754DF7A"><span class="RefLink">78.8-2</span></a>) and <codeclass="func">ResumeMethodReordering</code> (<a href="chap78_mj.html#X7B26BDF68754DF7A"><span class="RefLink">78.8-2</span></a>) are provided to allow control of this process.</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">an style='color: green'>8227; SuspendMethodReordering</code>( )</td><td class="tdright">( function )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">an style='color: green'>8227; ResumeMethodReordering</code>( )</td><td class="tdright">( function )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">an style='color: green'>8227; ResetMethodReordering</code>( )</td><td class="tdright">( function )</td></tr></table></div>
<p>These functions control whether the method reordering process described in <code class="func">InstallTrueMethod</code> (<a href="chap78_mj.html#X860B8B707995CFE3"><span class="RefLink">78.8-1</span></a>) is invoked or not. Since this process can be comparatively time-consuming, it is usually suspended when a lot of implications are due to be installed, for instance when loading the library, or a package. This is done by calling <code class="func">SuspendMethodReordering</code> once the installations are done, <code class="func">ResumeMethodReordering</code> should be called. These pairs of calls can be nested. When the outermost pair is complete, method reordering takes place and is enabled in <code class="func">InstallTrueMethod</code> (<a href="chap78_mj.html#X860B8B707995CFE3"><span class="RefLink">78.8-1</span></a>) thereafter. <code class="func">ResetMethodReordering</code> effectively exits all nested suspensions, resuming reordering immediately. This function is mainly provided for error recovery and similar purposes and is called on quitting from a break loop.</p>
<h4>78.9 <span class="Heading">Operations and Mathematical Terms</span></h4>
<p>Usually an operation stands for a mathematical concept, and the name of the operation describes this uniquely. Examples are the property <code class="func">IsFinite</code> (<a href="chap30_mj.html#X808A4061809A6E67"><span class="RefLink">30.4-2</span></a>) and the attribute <code class="func">Size</code> (<a href="chap30_mj.html#X858ADA3B7A684421"><span class="RefLink">30.4-6</span></a>). But there are cases where the same mathematical term is used to denote different concepts, for example <code class="code">Degree</code> is defined for polynomials, group characters, and permutation actions, and <code class="code">Rank</code> is defined for matrices, free modules, <span class="SimpleMath">\(p\)</span>-groups, and transitive permutation actions.</p>
<p>It is in principle possible to install methods for the operation <code class="code">Rank</code> that are applicable to the different types of arguments, corresponding to the different contexts. But this is not the approach taken in the <strong class="pkg">GAP</strong> library. Instead there are operations such as <code class="func">RankMat</code> (<a href="chap24_mj.html#X7A995A74838950E6"><span class="RefLink">24.7-1</span></a>) for matrices and <code class="func">DegreeOfCharacter</code> (<a href="chap72_mj.html#X7802BC157C69DD75"><span class="RefLink">72.8-4</span></a>) (in fact these are attributes) which are installed as methods of the <q>ambiguous</q> operations <code class="code">Rank</code> and <code class="code">Degree</code>.</p>
<p>The idea is to distinguish between on the one hand different ways to compute the same thing (e.g. different methods for <code class="func">\=</code> (<a href="chap31_mj.html#X7EF67D047F03CA6F"><span class="RefLink">31.11-1</span></a>), <code class="func">Size</code> (<a href="chap30_mj.html#X858ADA3B7A684421"><span class="RefLink">30.4-6</span></a>), etc.), and on the other hand genuinely different things (such as the degree of a polynomial and a permutation action).</p>
<p>The former is the basic purpose of operations and attributes. The latter is provided as a user convenience where mathematical usage forces it on us <em>and</em> where no conflicts arise. In programming the library, we use the underlying mathematically precise operations or attributes, such as <code class="func">RankMat</code> (<a href="chap24_mj.html#X7A995A74838950E6"><span class="RefLink">24.7-1</span></a>) and <code class="func">RankAction</code> (<a href="chap41_mj.html#X8166A6A17C8D6E73"><span class="RefLink">41.10-3</span></a>). These should be attributes if appropriate, and the only role of the operation <code class="code">Rank</code> is to decide which attribute the user meant. That way, stored information is stored with <q>full mathematical precision</q> and is less likely to be retrieved for a wrong purpose later.</p>
<p>One word about possible conflicts. A typical example is the mathematical term <q>centre</q>, which is defined as <span class="SimpleMath">\(\{ x \in M | a * x = x * a \forall a \in M \}\)</span> for a magma <span class="SimpleMath">\(M\)</span>, and as <span class="SimpleMath">\(\{ x \in L | l * x = 0 \forall l \in L \}\)</span> for a Lie algebra <span class="SimpleMath">\(L\)</span>. Here it is <em>not</em> possible to introduce an operation <code class="func">Centre</code> (<a href="chap35_mj.html#X847ABE6F781C7FE8"><span class="RefLink">35.4-5</span></a>) that delegates to attributes <code class="code">CentreOfMagma</code> and <code class="code">CentreOfLieAlgebra</code>, depending on the type of the argument. This is because any Lie algebra in <strong class="pkg">GAP</strong> is also a magma, so both <code class="code">CentreOfMagma</code> and <code class="code">CentreOfLieAlgebra</code> would be defined for a Lie algebra, with different meaning if the characteristic is two. So we cannot achieve that one operation in <strong class="pkg">GAP</strong> corresponds to the mathematical term <q>centre</q>.</p>
<p><q>Ambiguous</q> operations such as <code class="code">Rank</code> are declared in the library file <code class="file">lib/overload.g</code>.</p>
¤ Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.0.31Bemerkung:
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.