Main page.

Declarations of functions associated with group_U.
Version of Monday 16 September 2024.


The following declarations are found in file group_A/permzbi_A3.h:

    class rothe {
        SVI lehmer;
        SVI remhel;    
    public:
        rothe () = delete;
        rothe (rothe const &) = default;
        rothe (rothe &&) = default;
        rothe & operator= (rothe const &) = default;
        rothe & operator= (rothe &&) = default;
        ~rothe () = default;
    
        /* U1 */ rothe (permzbi const & perm);
        /* U1 */ SVI const & get_lehmer () const;
        /* U1 */ SVI const & get_remhel () const;

        /* U1 */ void put_text (std::ostream & text_out) const;

        SVI permzbi_by_lehmer () const;
        SVI permzbi_by_rehmel () const;
    
        /* U1 */ explicit operator permzbi () const;        
    };

    /* U1 */ std::ostream & operator<< (std::ostream & text_out, rothe const & rt);

Member lehmer is the Lehmer code, and remhel its inversion counterpart. No better name presenting itself, "remhel" is "lehmer" spelled backwards.

The permzbi can be reconstructed from either lehmer or remhel individually; they do not have to be used together. The function to do this is operator permzbi. In this code it was implemented as a type conversion within class rothe rather than a constructor within permzbi because class permzbi already has too many functions.

An important characteristic is that for any permzbi P, the following are true:

rothe{P}.get_lehmer() == rothe{P.inverse()}.get_remhel();
rothe{P}.get_remhel() == rothe{P.inverse()}.get_lehmer();

The last number in each of lehmer and remhel is always zero, but it is retained here in order that lehmer and remhel have the same number of components as the permzbi they represent; this might be found convenient.