Goto Chapter: Top 1 Bib Ind
 [Top of Book]  [Contents]   [Previous Chapter]   [Next Chapter] 

1 Abstract incidence structures
 1.1 Mathematical background
 1.2 Constructing abstract incidence structures
 1.3 Methods for abstract incidence structures
 1.4 Examples

1 Abstract incidence structures

1.1 Mathematical background

We follow the notation and the terminology of the monograph [BJL99].

An incidence structure is a triple (V,\mathbf{B},I) where V and \mathbf{B} are any two disjoint sets and I is a binary relation between V and \mathbf{B}, i.e. I\subseteq V\times \mathbf{B}. The elements of V will be called points, those of \mathbf{B} blocks and those of I flags. Instead of (p, B) \in I, we will simply write p I B and use such geometric language as "the point p lies on the block B", "B passes through p", "p and B are incident", etc.

The trace of a block B is the set \{ x \in V : x I B\} of the points incident with B. The trace of a point p is the set \{ B \in \mathbf{B} : p I B\} of the blocks incident with p. An incidence structure is called simple if the traces of distinct blocks are distinct. For any simple incidence structure, we can (and usually will) identify each block B with its trace and the incidence relation I with the membership relation \in.

Let (V,\mathbf{B},I) and label the points as p_1,\ldots,p_v and the blocks B_1,\ldots,B_b. Then the b\times v matrix M=(m_{ij}) defined by m_{ij}=1 if p_j I B_i, m_{ij}=0 otherwise, is called the incidence matrix of the structure. The row of M belonging to a block B is the incidence vector of B.

Let (V,\mathbf{B},I) and (V',\mathbf{B}',I') be incidence structures and let \pi:V\cup \mathbf{B} \to V'\cup \mathbf{B}' be a bijection. \pi is called an isomorphism if and only if it satisfies:

In this case, the two incidence structures are said to be isomorphic. If (V,\mathbf{B},I)=(V',\mathbf{B}',I'), then \pi is called an automorphism.

1.2 Constructing abstract incidence structures

1.2-1 IsIncidenceStructure
‣ IsIncidenceStructure( object )( filter )

Returns: true or false

A GAP category of abstract incidence structures.

1.2-2 IncidenceStructureByIncidenceMatrix
‣ IncidenceStructureByIncidenceMatrix( pts, bls, incmat )( function )

Returns: The incidence structure object corresponding to the set pts of points and the list bls of blocks and the incidence matrix incmat. incmat must be a boolean matrix with |bls| rows and |pts| columns.

1.2-3 IncidenceStructureByIncidenceMatrixNC
‣ IncidenceStructureByIncidenceMatrixNC( pts, bls, incmat )( function )

The non-checking version of the command IncidenceStructureByIncidenceMatrix.

1.2-4 IncidenceStructureByBlocks
‣ IncidenceStructureByBlocks( pts, bls )( function )

Returns: The incidence structure object corresponding to the set pts of points and the list bls of blocks. The elements of bls must be subsets of pts.

1.2-5 IsIndexBasedIncidenceStructure
‣ IsIndexBasedIncidenceStructure( s )( attribute )

We call the incident structre s index based if its set of points is the integer range [1..n] and blocks are subsets of [1..n].

1.2-6 IsSimpleIncidenceStructure
‣ IsSimpleIncidenceStructure( s )( attribute )

Returns: true if s is a simple incident structure.

An incident structure is said to be simple if each block is uniquely determined by the set of points which are incident with it.

1.2-7 InfoIncidenceStructures
‣ InfoIncidenceStructures( info class )

An infoclass for the package. Its default value is 0.

1.3 Methods for abstract incidence structures

1.3-1 PointsOfIncidenceStructure
‣ PointsOfIncidenceStructure( s )( attribute )

Returns: The list of points of the incidence structure s.

1.3-2 BlocksOfIncidenceStructure
‣ BlocksOfIncidenceStructure( s )( attribute )

Returns: The list of blocks of the incidence structure s.

1.3-3 TraceOfPoint
‣ TraceOfPoint( s, pt )( operation )

Returns: The list of blocks which are incident with pt in the incidence structure s.

1.3-4 TraceOfBlock
‣ TraceOfBlock( s, bl )( operation )

Returns: The list of points which are incident with bl in the incidence structure s.

1.3-5 AutomorphismGroup
‣ AutomorphismGroup( s )( attribute )

Returns: The automorphism group of the incidence structure s.

The function computes the automorphism group of s with the help of its incidence digraph.

1.3-6 HashValue
‣ HashValue( s )( attribute )

Returns: The hash value of the incidence structure s.

The function computes the value of s with the help of canonical labeling of its incidence digraph.

1.3-7 Isomorphism
‣ Isomorphism( s1, s2 )( operation )

Returns: An isomorphism between the incidence structures s1 and s1 if they are isomorphic, and fail otherwise.

The isomorphism is a bijection between the points sets and between the line sets of the incidence structures S_1 and S_2 such that the incidence relations are preserved. In this implementation, an isomorphism is given by a permutation \beta of degree n+m, where n is the number of points and m is the number of lines. The bijections defined by \beta are p[i]\mapsto p'[i^\beta] and b[j] \mapsto b'[(j+n)^\beta-n], where p[i], p'[i'] are points and b[j], b'[j'] are blocks of S_1, S_2, respectively.

Canonocal labellings, automorphisms and isomorphisms of incidence structures are computed with the help of their incidence graphs, which is are bipartite graphs with upper vertices the points and lower vertices the blocks. The computation is done using the GAP package BlissInterface [Nag19].

1.4 Examples

gap> LoadPackage("IncidenceStructures",false);       
true
gap> s:=IncidenceStructureByBlocks([1..3],[[1],[1,2],[1,2,3]]);
<Incidence structure on 3 points>
gap> PointsOfIncidenceStructure(s);
[ 1, 2, 3 ]
gap> BlocksOfIncidenceStructure(s);
[ [ 1 ], [ 1, 2 ], [ 1, 2, 3 ] ]
gap> CanonicalLabellingOfIncidenceStructure(s);
(1,3)
gap> KnownAttributesOfObject(s);
[ "AutomorphismGroup", "IsIndexBasedIncidenceStructure", 
  "PointsOfIncidenceStructure", "BlocksOfIncidenceStructure", 
  "CanonicalLabellingOfIncidenceStructure" ]
gap> s:=IncidenceStructureByIncidenceMatrix( [1..4], "abcdef", 
>      [[true,true,false,false],
>      [true,false,true,false],
>      [true,false,false,true],
>      [false,true,true,false],
>      [false,true,false,true],
>      [false,false,true,true]]
> );
<Incidence structure on 4 points>
gap> TraceOfPoint(s,2);
"ade"
gap> TraceOfBlock(s,'c');
[ 1, 4 ]
gap> SetInfoLevel(InfoIncidenceStructures,1);
gap> CanonicalLabellingOfIncidenceStructure(s);
#I  BLISS_BIPARTITE_CANONICAL_LABELING called
(1,4)(2,3)(5,10,9)(6,8)
gap> StructureDescription(AutomorphismGroup(s));
"S4"
gap> SetInfoLevel(InfoIncidenceStructures,2);
gap> t:=IncidenceStructureByBlocks( "rozi", 
>      ["or","iz","rz","oi","ir","oz"] );                                               
<Incidence structure on 4 points>
gap> Isomorphism(s,t);
#I  BLISS_BIPARTITE_CANONICAL_LABELING called
#I  <outneigh> parameter for BLISS command: [ [ 2, 3 ], [ 1, 4 ], [ 3, 4 ], [ 1, 2 ], [ 1, 3 ], [ 2, 4 ] ]
#I  <iso>: ( 1, 3, 4)( 6, 7, 9, 8,10)
(1,3,4)(6,7,9,8,10)
gap> HashValue(s);
4078249033
gap> HashValue(t);
4078249033
gap> StructureDescription(AutomorphismGroup(t));
"S4"
 [Top of Book]  [Contents]   [Previous Chapter]   [Next Chapter] 
Goto Chapter: Top 1 Bib Ind

generated by GAPDoc2HTML