with Standard_Integer_Vectors; package Permutations is -- DESCRIPTION : -- This package defines the type Permutation. type Permutation is new Standard_Integer_Vectors.Vector; type Link_to_Permutation is new Standard_Integer_Vectors.Link_to_Vector; -- DESCRIPTION : -- A permutation p defines the image of i -> p(i). -- As also negative entries are alowed, sign permutations -- will be modelled as follows: -- let perm = (1 3 -2), applied to F=(f1,f2,f3): -- perm*F = (f1,f3,-f2). function Is_Permutation ( p : Permutation ) return boolean; -- DESCRIPTION : -- Checks whether the vector p models a permutation: -- p(i) /= p(j) and p(i) /= -p(j), for all i /= j and -- -p'last <= p(i) <= p'last. function Equal ( p1,p2 : Permutation ) return boolean; -- DESCRIPTION : -- Returns true if both permutations are equal. function "*" ( p1,p2 : Permutation ) return Permutation; -- DESCRIPTION : -- returns p1 `after' p2 -- (1 3 -2) * (2 -1 3) = (3 -1 -2) -- REQUIRED : -- p1'range = p2'range function inv ( p : Permutation ) return Permutation; -- DESCRIPTION : -- inv(p)*p = p*inv(p) = the identical transformation end Permutations;