|
#############################################################################
##
## This file is part of GAP, a system for computational discrete algebra.
## This file's authors include Martin Schönert.
##
## Copyright of GAP belongs to its developers, whose names are too numerous
## to list here. Please refer to the COPYRIGHT file for details.
##
## SPDX-License-Identifier: GPL-2.0-or-later
##
## This file declares the operations for all objects.
##
#T Shall we add a check that no object ever lies in both
#T `IsComponentObjectRep' and `IsPositionalObjectRep'?
#T (A typical pitfall is that one decides to use `IsAttributeStoringRep'
#T for storing attribute values, *and* `IsPositionalObjectRep' for
#T convenience.)
#T Could we use `IsImpossible' and an immediate method that signals an error?
#############################################################################
##
#C IsObject( <obj> ) . . . . . . . . . . . . test if an object is an object
##
## <#GAPDoc Label="IsObject">
## <ManSection>
## <Filt Name="IsObject" Arg='obj' Type='Category'/>
##
## <Description>
## <Ref Filt="IsObject"/> returns <K>true</K> if the object <A>obj</A> is an
## object. Obviously it can never return <K>false</K>.
## <P/>
## It can be used as a filter in <Ref Func="InstallMethod"/>
## when one of the arguments can be anything.
## </Description>
## </ManSection>
## <#/GAPDoc>
##
DeclareCategoryKernel( "IsObject", IS_OBJECT, IS_OBJECT );
#############################################################################
##
#F IsIdenticalObj( <obj1>, <obj2> ) . . . . . . . are two objects identical
##
## <#GAPDoc Label="IsIdenticalObj">
## <ManSection>
## <Func Name="IsIdenticalObj" Arg='obj1, obj2'/>
##
## <Description>
## <Ref Func="IsIdenticalObj"/> tests whether the objects
## <A>obj1</A> and <A>obj2</A> are identical (that is they are either
## equal immediate objects or are both stored at the same location in
## memory.
## <P/>
## If two copies of a simple constant object
## (see section <Ref Sect="Mutability and Copyability"/>) are created,
## it is not defined whether &GAP; will
## actually store two equal but non-identical objects, or just a single
## object. For mutable objects, however, it is important to know whether
## two values refer to identical or non-identical objects, and the
## documentation of operations that return mutable values should make
## clear whether the values returned are new, or may be identical to
## values stored elsewhere.
## <P/>
## <Example><![CDATA[
## gap> IsIdenticalObj( 10^6, 10^6);
## true
## gap> IsIdenticalObj( 10^30, 10^30);
## false
## gap> IsIdenticalObj( true, true);
## true
## ]]></Example>
## <P/>
## Generally, one may compute with objects but think of the results in
## terms of the underlying elements because one is not interested in
## locations in memory, data formats or information beyond underlying
## equivalence relations. But there are cases where it is important to
## distinguish the relations identity and equality. This is best
## illustrated with an example. (The reader who is not familiar with
## lists in &GAP;, in particular element access and assignment, is
## referred to Chapter <Ref Chap="Lists"/>.)
## <Example><![CDATA[
## gap> l1:= [ 1, 2, 3 ];; l2:= [ 1, 2, 3 ];;
## gap> l1 = l2;
## true
## gap> IsIdenticalObj( l1, l2 );
## false
## gap> l1[3]:= 4;; l1; l2;
## [ 1, 2, 4 ]
## [ 1, 2, 3 ]
## gap> l1 = l2;
## false
## ]]></Example>
## The two lists <C>l1</C> and <C>l2</C> are equal but not identical.
## Thus a change in <C>l1</C> does not affect <C>l2</C>.
## <Example><![CDATA[
## gap> l1:= [ 1, 2, 3 ];; l2:= l1;;
## gap> l1 = l2;
## true
## gap> IsIdenticalObj( l1, l2 );
## true
## gap> l1[3]:= 4;; l1; l2;
## [ 1, 2, 4 ]
## [ 1, 2, 4 ]
## gap> l1 = l2;
## true
## ]]></Example>
## Here, <C>l1</C> and <C>l2</C> are identical objects,
## so changing <C>l1</C> means a change to <C>l2</C> as well.
## </Description>
## </ManSection>
## <#/GAPDoc>
##
BIND_GLOBAL( "IsIdenticalObj", IS_IDENTICAL_OBJ );
#############################################################################
##
#F IsNotIdenticalObj( <obj1>, <obj2> ) . . . . are two objects not identical
##
## <#GAPDoc Label="IsNotIdenticalObj">
## <ManSection>
## <Func Name="IsNotIdenticalObj" Arg='obj1, obj2'/>
##
## <Description>
## tests whether the objects <A>obj1</A> and <A>obj2</A> are not identical.
## </Description>
## </ManSection>
## <#/GAPDoc>
##
BIND_GLOBAL( "IsNotIdenticalObj", function ( obj1, obj2 )
return not IsIdenticalObj( obj1, obj2 );
end );
#############################################################################
##
#o <obj1> = <obj2> . . . . . . . . . . . . . . . . . . are two objects equal
##
DeclareOperationKernel( "=", [ IsObject, IsObject ], EQ );
#############################################################################
##
#o <obj1> < <obj2> . . . . . . . . . . . is one object smaller than another
##
DeclareOperationKernel( "<", [ IsObject, IsObject ], LT );
#############################################################################
##
#o <obj1> in <obj2> . . . . . . . . . . . is one object a member of another
##
DeclareOperationKernel( "in", [ IsObject, IsObject ], IN );
#############################################################################
##
#C IsCopyable( <obj> ) . . . . . . . . . . . . test if an object is copyable
##
## <#GAPDoc Label="IsCopyable">
## <ManSection>
## <Filt Name="IsCopyable" Arg='obj' Type='Category'/>
##
## <Description>
## If a mutable form of an object <A>obj</A> can be made in &GAP;,
## the object is called <E>copyable</E>. Examples of copyable objects are of
## course lists and records. A new mutable version of the object can
## always be obtained by the operation <Ref Oper="ShallowCopy"/>.
## <P/>
## Objects for which only an immutable form exists in &GAP; are called
## <E>constants</E>.
## Examples of constants are integers, permutations, and domains.
## Called with a constant as argument,
## <Ref Func="Immutable"/> and <Ref Oper="ShallowCopy"/> return this
## argument.
## </Description>
## </ManSection>
## <#/GAPDoc>
##
DeclareCategoryKernel( "IsCopyable", IsObject, IS_COPYABLE_OBJ );
#############################################################################
##
#C IsMutable( <obj> ) . . . . . . . . . . . . test if an object is mutable
##
## <#GAPDoc Label="IsMutable">
## <ManSection>
## <Filt Name="IsMutable" Arg='obj' Type='Category'/>
##
## <Description>
## tests whether <A>obj</A> is mutable.
## <P/>
## If an object is mutable then it is also copyable
## (see <Ref Filt="IsCopyable"/>),
## and a <Ref Oper="ShallowCopy"/> method should be supplied for it.
## Note that <Ref Filt="IsMutable"/> must not be implied by another filter,
## since otherwise <Ref Func="Immutable"/> would be able to create
## paradoxical objects in the sense that <Ref Filt="IsMutable"/> for such an
## object is <K>false</K> but the filter that implies
## <Ref Filt="IsMutable"/> is <K>true</K>.
## <P/>
## In many situations, however, one wants to ensure that objects are
## <E>immutable</E>. For example, take the identity of a matrix group.
## Since this matrix may be referred to as the identity of the group in
## several places, it would be fatal to modify its entries,
## or add or unbind rows.
## We can obtain an immutable copy of an object with
## <Ref Func="Immutable"/>.
## </Description>
## </ManSection>
## <#/GAPDoc>
##
DeclareCategoryKernel( "IsMutable", IsObject, IS_MUTABLE_OBJ );
#############################################################################
##
#C IsInternallyMutable( <obj> ) . . . . test if an object has mutable state
##
## <#GAPDoc Label="IsInternallyMutable">
## <ManSection>
## <Filt Name="IsInternallyMutable" Arg='obj' Type='Category'/>
##
## <Description>
## tests whether <A>obj</A> has mutable internal state.
## <P/>
## Unlike <Ref Func="IsMutable">, <Ref Func="IsInternallyMutable"> is
## true if and only if the object's internal representation chan change
## even though its outwardly visible behavior does not. For example, if
## a set of integers were represented internally as a T_DATOBJ containing
## an array of integers, the implementation may choose to sort the array
## to make membership tests faster. Such an object would be internally
## mutable even if elements could not be added and thus it were immutable
## per <Ref Func="IsMutable">.
## </Description>
## </ManSection>
## <#/GAPDoc>
##
if IsHPCGAP then
DeclareCategoryKernel( "IsInternallyMutable",
IsObject, IS_INTERNALLY_MUTABLE_OBJ );
fi;
InstallTrueMethod( IsCopyable, IsMutable);
#############################################################################
##
#O Immutable( <obj> )
##
## <#GAPDoc Label="Immutable">
## <ManSection>
## <Func Name="Immutable" Arg='obj'/>
##
## <Description>
## returns an immutable structural copy
## (see <Ref Func="StructuralCopy"/>) of <A>obj</A>
## in which the subobjects are immutable <E>copies</E> of the subobjects of
## <A>obj</A>.
## If <A>obj</A> is immutable then <Ref Func="Immutable"/> returns
## <A>obj</A> itself.
## <P/>
## &GAP; will complain with an error if one tries to change an
## immutable object.
## </Description>
## </ManSection>
## <#/GAPDoc>
##
BIND_GLOBAL( "Immutable", IMMUTABLE_COPY_OBJ );
#############################################################################
##
#O ShallowCopy( <obj> ) . . . . . . . . . . . . . shallow copy of an object
##
## <#GAPDoc Label="ShallowCopy">
## <ManSection>
## <Oper Name="ShallowCopy" Arg='obj'/>
##
## <Description>
## <Ref Oper="ShallowCopy"/> returns a <E>new mutable</E> object <E>equal</E>
## to its argument, if this is possible.
## The subobjects of <C>ShallowCopy( <A>obj</A> )</C> are <E>identical</E>
## to the subobjects of <A>obj</A>.
## <P/>
## If &GAP; does not support a mutable form of the immutable object <A>obj</A>
## (see <Ref Sect="Mutability and Copyability"/>) then
## <Ref Oper="ShallowCopy"/> returns <A>obj</A> itself.
## <P/>
## Since <Ref Oper="ShallowCopy"/> is an operation, the concrete meaning of
## <Q>subobject</Q> depends on the type of <A>obj</A>.
## But for any copyable object <A>obj</A>, the definition should reflect the
## idea of <Q>first level copying</Q>.
## <P/>
## The definition of <Ref Oper="ShallowCopy"/> for lists (in particular for
## matrices) can be found in <Ref Sect="Duplication of Lists"/>.
## </Description>
## </ManSection>
## <#/GAPDoc>
##
DeclareOperationKernel( "ShallowCopy", [ IsObject ], SHALLOW_COPY_OBJ );
#############################################################################
##
#F StructuralCopy( <obj> ) . . . . . . . . . . structural copy of an object
##
## <#GAPDoc Label="StructuralCopy">
## <ManSection>
## <Func Name="StructuralCopy" Arg='obj'/>
##
## <Description>
## In a few situations, one wants to make a <E>structural copy</E>
## <C>scp</C> of an object <A>obj</A>.
## This is defined as follows.
## <C>scp</C> and <A>obj</A> are identical if <A>obj</A> is immutable.
## Otherwise, <C>scp</C> is a mutable copy of <A>obj</A> such that
## each subobject of <C>scp</C> is a structural copy of the corresponding
## subobject of <A>obj</A>.
## Furthermore, if two subobjects of <A>obj</A> are identical then
## also the corresponding subobjects of <C>scp</C> are identical.
## <Example><![CDATA[
## gap> obj:= [ [ 0, 1 ] ];;
## gap> obj[2]:= obj[1];;
## gap> obj[3]:= Immutable( obj[1] );;
## gap> scp:= StructuralCopy( obj );;
## gap> scp = obj; IsIdenticalObj( scp, obj );
## true
## false
## gap> IsIdenticalObj( scp[1], obj[1] );
## false
## gap> IsIdenticalObj( scp[3], obj[3] );
## true
## gap> IsIdenticalObj( scp[1], scp[2] );
## true
## ]]></Example>
## <P/>
## That both <Ref Oper="ShallowCopy"/> and <Ref Func="StructuralCopy"/>
## return the argument <A>obj</A> itself if it is not copyable
## is consistent with this definition,
## since there is no way to change <A>obj</A> by modifying the result of any
## of the two functions,
## because in fact there is no way to change this result at all.
## </Description>
## </ManSection>
## <#/GAPDoc>
##
BIND_GLOBAL( "StructuralCopy", DEEP_COPY_OBJ );
#############################################################################
##
#A Name( <obj> ) . . . . . . . . . . . . . . . . . . . . . name of an object
##
## <#GAPDoc Label="Name">
## <ManSection>
## <Attr Name="Name" Arg='obj'/>
##
## <Description>
## returns the name, a string, previously assigned to <A>obj</A> via a call
## to <Ref Oper="SetName"/>.
## The name of an object is used <E>only</E> for viewing the object via this
## name.
## <P/>
## There are no methods installed for computing names of objects,
## but the name may be set for suitable objects,
## using <Ref Oper="SetName"/>.
## <Example><![CDATA[
## gap> R := PolynomialRing(Integers,2);
## Integers[x_1,x_2]
## gap> SetName(R,"Z[x,y]");
## gap> R;
## Z[x,y]
## gap> Name(R);
## "Z[x,y]"
## ]]></Example>
## </Description>
## </ManSection>
## <#/GAPDoc>
##
DeclareAttribute( "Name", IsObject );
#############################################################################
##
#A InfoText( <obj> )
##
## <#GAPDoc Label="InfoText">
## <ManSection>
## <Attr Name="InfoText" Arg='obj'/>
##
## <Description>
## is a mutable string with information about the object <A>obj</A>.
## There is no default method to create an info text.
## </Description>
## </ManSection>
## <#/GAPDoc>
##
DeclareAttribute( "InfoText", IsObject, "mutable" );
#############################################################################
##
#A String( <obj>[, <length>] ) formatted string representation of an object
##
## <#GAPDoc Label="String">
## <ManSection>
## <Attr Name="String" Arg='obj[, length]'/>
##
## <Description>
## <Ref Attr="String"/> returns a representation of <A>obj</A>,
## which may be an object of arbitrary type, as a string.
## This string should approximate as closely as possible the character
## sequence you see if you print <A>obj</A>.
## <P/>
## If <A>length</A> is given it must be an integer.
## The absolute value gives the minimal length of the result.
## If the string representation of <A>obj</A> takes less than that many
## characters it is filled with blanks.
## If <A>length</A> is positive it is filled on the left,
## if <A>length</A> is negative it is filled on the right.
## <P/>
## In the two argument case, the string returned is a new mutable
## string (in particular not a part of any other object);
## it can be modified safely,
## and <Ref Func="MakeImmutable"/> may be safely applied to it.
## <Example><![CDATA[
## gap> String(123);String([1,2,3]);
## "123"
## "[ 1, 2, 3 ]"
## ]]></Example>
## <Ref Attr="String"/> must not put in additional control
## characters <C>\<</C> (ASCII 1) and <C>\></C> (ASCII 2)
## that allow proper line breaks.
## </Description>
## </ManSection>
## <#/GAPDoc>
##
DeclareAttribute( "String", IsObject );
DeclareOperation( "String", [ IsObject, IS_INT ] );
#############################################################################
##
#O PrintObj( <obj> ) . . . . . . . . . . . . . . . . . . . . print an object
##
## <ManSection>
## <Oper Name="PrintObj" Arg='obj'/>
##
## <Description>
## <Ref Func="PrintObj"/> prints information about the object <A>obj</A>.
## This information is in general more detailed as that obtained from
## <Ref Func="ViewObj"/>,
## but still it need not be sufficient to construct <A>obj</A> from it,
## and in general it is not &GAP; readable.
## <P/>
## If <A>obj</A> has a name (see <Ref Func="Name"/>) then it will be
## printed via this name, and a domain without name is in many cases printed
## via its generators.
## <!-- write that many domains (without name) are in fact GAP readable?-->
## </Description>
## </ManSection>
##
DeclareOperationKernel( "PrintObj", [ IsObject ], PRINT_OBJ );
# for technical reasons, this cannot be in `function.g' but must be after
# the declaration.
InstallMethod( PrintObj, "for an operation", true, [IsOperation], 0,
function ( op )
Print("<Operation \"",NAME_FUNC(op),"\">");
end);
#############################################################################
##
#O PrintString( <obj> ) . . . . . . . . . . . string which would be printed
##
## <#GAPDoc Label="PrintString">
## <ManSection>
## <Oper Name="PrintString" Arg='obj[, length]'/>
##
## <Description>
## <Ref Oper="PrintString"/> returns a representation of <A>obj</A>,
## which may be an object of arbitrary type, as a string.
## This string should approximate as closely as possible the character
## sequence you see if you print <A>obj</A> using <Ref Oper="PrintObj"/>.
## <P/>
## If <A>length</A> is given it must be an integer.
## The absolute value gives the minimal length of the result.
## If the string representation of <A>obj</A> takes less than that many
## characters it is filled with blanks.
## If <A>length</A> is positive it is filled on the left,
## if <A>length</A> is negative it is filled on the right.
## <P/>
## In the two argument case, the string returned is a new mutable
## string (in particular not a part of any other object);
## it can be modified safely,
## and <Ref Func="MakeImmutable"/> may be safely applied to it.
## <Example><![CDATA[
## gap> PrintString(123);PrintString([1,2,3]);
## "123"
## "[ 1, 2, 3 ]"
## ]]></Example>
## <Ref Oper="PrintString"/> is entitled to put in additional control
## characters <C>\<</C> (ASCII 1) and <C>\></C> (ASCII 2)
## that allow proper line breaks. See <Ref Func="StripLineBreakCharacters"/>
## for a function to get rid of these control characters.
## </Description>
## </ManSection>
## <#/GAPDoc>
##
DeclareOperation( "PrintString", [ IsObject ] );
DeclareOperation( "PrintString", [ IsObject, IS_INT ] );
#############################################################################
##
#F StripLineBreakCharacters( <string> ) . . . removes \< and \> characters
##
## <#GAPDoc Label="StripLineBreakCharacters">
## <ManSection>
## <Func Name="StripLineBreakCharacters" Arg="st"/>
##
## <Description>
## This function takes a string <A>st</A> as an argument and removes all
## control characters <C>\<</C> (ASCII 1) and <C>\></C> (ASCII 2)
## which are used by
## <Ref Oper="PrintString"/> and <Ref Oper="PrintObj"/> to ensure proper
## line breaking. A new string with these characters removed is returned.
## </Description>
## </ManSection>
## <#/GAPDoc>
##
DeclareGlobalFunction( "StripLineBreakCharacters" );
#############################################################################
##
#O Display( <obj> ) . . . . . . . . . . . . . . . . . . . display an object
##
## <#GAPDoc Label="Display">
## <ManSection>
## <Oper Name="Display" Arg='obj'/>
##
## <Description>
## Displays the object <A>obj</A> in a nice, formatted way which is easy to
## read (but might be difficult for machines to understand).
## The actual format used for this depends on the type of <A>obj</A>.
## Each method should print a newline character as last character.
## <Example><![CDATA[
## gap> Display( [ [ 1, 2, 3 ], [ 4, 5, 6 ] ] * Z(5) );
## 2 4 1
## 3 . 2
## ]]></Example>
## <P/>
## One can assign a string to an object that <Ref Func="Print"/> will use
## instead of the default used by <Ref Func="Print"/>,
## via <Ref Oper="SetName"/>.
## Also, <Ref Attr="Name"/> returns the string previously assigned to
## the object for printing, via <Ref Oper="SetName"/>.
## The following is an example in the context of domains.
## <P/>
## <Example><![CDATA[
## gap> g:= Group( (1,2,3,4) );
## Group([ (1,2,3,4) ])
## gap> SetName( g, "C4" ); g;
## C4
## gap> Name( g );
## "C4"
## ]]></Example>
## </Description>
## </ManSection>
## <#/GAPDoc>
##
DeclareOperation( "Display", [ IsObject ] );
#############################################################################
##
#O DisplayString( <obj> ) . . . . . . . . . . . . . . . . display an object
##
## <#GAPDoc Label="DisplayString">
## <ManSection>
## <Oper Name="DisplayString" Arg='obj'/>
##
## <Description>
## Returns a string which could be used to
## display the object <A>obj</A> in a nice, formatted way which is easy to
## read (but might be difficult for machines to understand).
## The actual format used for this depends on the type of <A>obj</A>.
## Each method should include a newline character as last character.
## Note that no method for <Ref Oper="DisplayString"/> may delegate
## to any of the operations <Ref Oper="Display"/>, <Ref Oper="ViewObj"/>
## or <Ref Oper="PrintObj"/> to avoid circular delegations.
## </Description>
## </ManSection>
## <#/GAPDoc>
##
DeclareOperation( "DisplayString", [ IsObject ] );
#############################################################################
##
#O IsInternallyConsistent( <obj> )
##
## <#GAPDoc Label="IsInternallyConsistent">
## <ManSection>
## <Oper Name="IsInternallyConsistent" Arg='obj'/>
##
## <Description>
## For debugging purposes, it may be useful to check the consistency of
## an object <A>obj</A> that is composed from other (composed) objects.
## <P/>
## There is a default method of <Ref Oper="IsInternallyConsistent"/>,
## with rank zero, that returns <K>true</K>.
## So it is possible (and recommended) to check the consistency of
## subobjects of <A>obj</A> recursively by
## <Ref Oper="IsInternallyConsistent"/>.
## <P/>
## (Note that <Ref Oper="IsInternallyConsistent"/> is not an attribute.)
## </Description>
## </ManSection>
## <#/GAPDoc>
##
DeclareOperation( "IsInternallyConsistent", [ IsObject ] );
#############################################################################
##
#A IsImpossible( <obj> )
##
## <ManSection>
## <Attr Name="IsImpossible" Arg='obj'/>
##
## <Description>
## For debugging purposes, it may be useful to install immediate methods
## that raise an error if an object lies in a filter which is impossible.
## For example, if a matrix is in the two filters <C>IsOrdinaryMatrix</C> and
## <C>IsLieMatrix</C> then apparently something went wrong.
## Since we can install these immediate methods only for attributes
## (and not for the operation <Ref Oper="IsInternallyConsistent"/>),
## we need such an attribute.
## </Description>
## </ManSection>
##
DeclareAttribute( "IsImpossible", IsObject );
#############################################################################
##
#O ExtRepOfObj( <obj> ) . . . . . . . external representation of an object
##
## <ManSection>
## <Oper Name="ExtRepOfObj" Arg='obj'/>
##
## <Description>
## returns the external representation of the object <A>obj</A>.
## </Description>
## </ManSection>
##
DeclareOperation( "ExtRepOfObj", [ IsObject ] );
#############################################################################
##
#O ObjByExtRep( <F>, <descr> ) . object in family <F> and ext. repr. <descr>
##
## <ManSection>
## <Oper Name="ObjByExtRep" Arg='F, descr'/>
##
## <Description>
## creates an object in the family <A>F</A> which has the external
## representation <A>descr</A>.
## </Description>
## </ManSection>
##
DeclareOperation( "ObjByExtRep", [ IsFamily, IsObject ] );
#############################################################################
##
#O KnownAttributesOfObject( <object> ) . . . . . list of names of attributes
##
## <#GAPDoc Label="KnownAttributesOfObject">
## <ManSection>
## <Oper Name="KnownAttributesOfObject" Arg='object'/>
##
## <Description>
## returns a list of the names of the attributes whose values are known for
## <A>object</A>.
## <Example><![CDATA[
## gap> g:=Group((1,2),(1,2,3));;Size(g);;
## gap> KnownAttributesOfObject(g);
## [ "Size", "OneImmutable", "NrMovedPoints", "MovedPoints",
## "GeneratorsOfMagmaWithInverses", "MultiplicativeNeutralElement",
## "HomePcgs", "Pcgs", "StabChainMutable", "StabChainOptions" ]
## ]]></Example>
## </Description>
## </ManSection>
## <#/GAPDoc>
##
DeclareOperation( "KnownAttributesOfObject", [ IsObject ] );
#############################################################################
##
#O KnownPropertiesOfObject( <object> ) . . . . . list of names of properties
##
## <#GAPDoc Label="KnownPropertiesOfObject">
## <ManSection>
## <Oper Name="KnownPropertiesOfObject" Arg='object'/>
##
## <Description>
## returns a list of the names of the properties whose values are known for
## <A>object</A>.
## </Description>
## </ManSection>
## <#/GAPDoc>
##
DeclareOperation( "KnownPropertiesOfObject", [ IsObject ] );
#############################################################################
##
#O KnownTruePropertiesOfObject( <object> ) list of names of true properties
##
## <#GAPDoc Label="KnownTruePropertiesOfObject">
## <ManSection>
## <Oper Name="KnownTruePropertiesOfObject" Arg='object'/>
##
## <Description>
## returns a list of the names of the properties known to be <K>true</K> for
## <A>object</A>.
## <Example><![CDATA[
## gap> g:=Group((1,2),(1,2,3));;
## gap> KnownPropertiesOfObject(g);
## [ "IsEmpty", "IsTrivial", "IsNonTrivial", "IsFinite",
## "CanEasilyCompareElements", "CanEasilySortElements",
## "IsDuplicateFree", "IsGeneratorsOfMagmaWithInverses",
## "IsAssociative", "IsFinitelyGeneratedMagma",
## "IsGeneratorsOfSemigroup", "IsSimpleSemigroup",
## "IsRegularSemigroup", "IsInverseSemigroup",
## "IsCompletelyRegularSemigroup", "IsCompletelySimpleSemigroup",
## "IsGroupAsSemigroup", "IsMonoidAsSemigroup", "IsOrthodoxSemigroup",
## "IsFinitelyGeneratedMonoid", "IsFinitelyGeneratedGroup",
## "IsSubsetLocallyFiniteGroup", "KnowsHowToDecompose",
## "IsInfiniteAbelianizationGroup", "IsNilpotentByFinite",
## "IsTorsionFree", "IsFreeAbelian" ]
## gap> Size(g);
## 6
## gap> KnownPropertiesOfObject(g);
## [ "IsEmpty", "IsTrivial", "IsNonTrivial", "IsFinite",
## "CanEasilyCompareElements", "CanEasilySortElements",
## "IsDuplicateFree", "IsGeneratorsOfMagmaWithInverses",
## "IsAssociative", "IsFinitelyGeneratedMagma",
## "IsGeneratorsOfSemigroup", "IsSimpleSemigroup",
## "IsRegularSemigroup", "IsInverseSemigroup",
## "IsCompletelyRegularSemigroup", "IsCompletelySimpleSemigroup",
## "IsGroupAsSemigroup", "IsMonoidAsSemigroup", "IsOrthodoxSemigroup",
## "IsFinitelyGeneratedMonoid", "IsFinitelyGeneratedGroup",
## "IsSubsetLocallyFiniteGroup", "KnowsHowToDecompose",
## "IsPerfectGroup", "IsSolvableGroup", "IsPolycyclicGroup",
## "IsInfiniteAbelianizationGroup", "IsNilpotentByFinite",
## "IsTorsionFree", "IsFreeAbelian" ]
## gap> KnownTruePropertiesOfObject(g);
## [ "IsNonTrivial", "IsFinite", "CanEasilyCompareElements",
## "CanEasilySortElements", "IsDuplicateFree",
## "IsGeneratorsOfMagmaWithInverses", "IsAssociative",
## "IsFinitelyGeneratedMagma", "IsGeneratorsOfSemigroup",
## "IsSimpleSemigroup", "IsRegularSemigroup", "IsInverseSemigroup",
## "IsCompletelyRegularSemigroup", "IsCompletelySimpleSemigroup",
## "IsGroupAsSemigroup", "IsMonoidAsSemigroup", "IsOrthodoxSemigroup",
## "IsFinitelyGeneratedMonoid", "IsFinitelyGeneratedGroup",
## "IsSubsetLocallyFiniteGroup", "KnowsHowToDecompose",
## "IsSolvableGroup", "IsPolycyclicGroup", "IsNilpotentByFinite" ]
## ]]></Example>
## </Description>
## </ManSection>
## <#/GAPDoc>
##
DeclareOperation( "KnownTruePropertiesOfObject", [ IsObject ] );
#############################################################################
##
#O CategoriesOfObject( <object> ) . . . . . . . list of names of categories
##
## <#GAPDoc Label="CategoriesOfObject">
## <ManSection>
## <Oper Name="CategoriesOfObject" Arg='object'/>
##
## <Description>
## returns a list of the names of the categories in which <A>object</A> lies.
## <Example><![CDATA[
## gap> g:=Group((1,2),(1,2,3));;
## gap> CategoriesOfObject(g);
## [ "IsListOrCollection", "IsCollection", "IsExtLElement",
## "CategoryCollections(IsExtLElement)", "IsExtRElement",
## "CategoryCollections(IsExtRElement)",
## "CategoryCollections(IsMultiplicativeElement)",
## "CategoryCollections(IsMultiplicativeElementWithOne)",
## "CategoryCollections(IsMultiplicativeElementWithInverse)",
## "CategoryCollections(IsAssociativeElement)",
## "CategoryCollections(IsFiniteOrderElement)", "IsGeneralizedDomain",
## "CategoryCollections(IsPerm)", "IsMagma", "IsMagmaWithOne",
## "IsMagmaWithInversesIfNonzero", "IsMagmaWithInverses" ]
## ]]></Example>
## </Description>
## </ManSection>
## <#/GAPDoc>
##
DeclareOperation( "CategoriesOfObject", [ IsObject ] );
#############################################################################
##
#O RepresentationsOfObject( <object> ) . . list of names of representations
##
## <#GAPDoc Label="RepresentationsOfObject">
## <ManSection>
## <Oper Name="RepresentationsOfObject" Arg='object'/>
##
## <Description>
## returns a list of the names of the representations <A>object</A> has.
## <Example><![CDATA[
## gap> g:=Group((1,2),(1,2,3));;
## gap> RepresentationsOfObject(g);
## [ "IsComponentObjectRep", "IsAttributeStoringRep" ]
## ]]></Example>
## </Description>
## </ManSection>
## <#/GAPDoc>
##
DeclareOperation( "RepresentationsOfObject", [ IsObject ] );
#############################################################################
##
#R IsPackedElementDefaultRep( <obj> )
##
## <ManSection>
## <Filt Name="IsPackedElementDefaultRep" Arg='obj' Type='Representation'/>
##
## <Description>
## An object <A>obj</A> in this representation stores a related object as
## <A>obj</A><C>![1]</C>.
## This representation is used for example for elements in f.p. groups
## or f.p. algebras, where the stored object is an element of a
## corresponding free group or algebra, respectively;
## it is also used for Lie objects created from objects with an associative
## multiplication.
## </Description>
## </ManSection>
##
DeclareRepresentation( "IsPackedElementDefaultRep", IsAtomicPositionalObjectRep );
#############################################################################
##
#O PostMakeImmutable( <obj> ) clean-up after MakeImmutable
##
## <ManSection>
## <Oper Name="PostMakeImmutable" Arg='obj'/>
##
## <Description>
## This operation is called by the kernel immediately after making
## any COM_OBJ or POS_OBJ immutable using MakeImmutable
## It is intended that objects should have methods for this operation
## which make any appropriate subobjects immutable (eg list entries)
## other subobjects (eg MutableAttributes) need not be made immutable.
## <P/>
## A default method does nothing.
## </Description>
## </ManSection>
##
DeclareOperation( "PostMakeImmutable", [IsObject]);
[ Dauer der Verarbeitung: 0.29 Sekunden
(vorverarbeitet)
]
|