001/*
002 * $Id$
003 */
004
005package edu.jas.structure;
006
007
008/**
009 * Non-commutative ring element interface. Defines right divide and right remainder.
010 * @param <C> ring element type
011 * @author Heinz Kredel
012 */
013
014public interface NoncomRingElem<C extends NoncomRingElem<C>> extends RingElem<C> {
015
016
017    /**
018     * Right division.
019     * @param a element.
020     * @return right, with a * right = this
021     */
022    public C rightDivide(C a);
023
024
025    /**
026     * Right remainder.
027     * @param a element.
028     * @return r = this - a * (a/right), where a * right = this.
029     */
030    public C rightRemainder(C a);
031
032
033    /**
034     * Two-sided division.
035     * @param a element.
036     * @return [left,right], with left * a * right = this
037     */
038    public C[] twosidedDivide(C a);
039
040
041    /**
042     * Two-sided remainder.
043     * @param a element.
044     * @return r = this - (a/left) * a * (a/right), where left * a * right = this.
045     */
046    public C twosidedRemainder(C a);
047
048}