001 /* 002 * $Id: MonoidElem.java 1708 2008-02-24 17:28:36Z kredel $ 003 */ 004 005 package edu.jas.structure; 006 007 008 /** 009 * Monoid element interface. 010 * Defines the multiplicative methods. 011 * @param <C> element type 012 * @author Heinz Kredel 013 */ 014 015 public interface MonoidElem<C extends MonoidElem<C>> 016 extends Element<C> { 017 018 019 /** 020 * Test if this is one. 021 * @return true if this is 1, else false. 022 */ 023 public boolean isONE(); 024 025 026 /** 027 * Test if this is a unit. 028 * I.e. there exists x with this.multiply(x).isONE() == true. 029 * @return true if this is a unit, else false. 030 */ 031 public boolean isUnit(); 032 033 034 /** 035 * Multiply this with S. 036 * @param S 037 * @return this * S. 038 */ 039 public C multiply(C S); 040 041 042 /** 043 * Divide this by S. 044 * @param S 045 * @return this / S. 046 */ 047 public C divide(C S); 048 049 050 /** 051 * Remainder after division of this by S. 052 * @param S 053 * @return this - (this / S) * S. 054 */ 055 public C remainder(C S); 056 057 058 /** 059 * Inverse of this. 060 * Some implementing classes will throw NotInvertibleException if the element is not invertible. 061 * @return x with this * x = 1, if it exists. 062 */ 063 public C inverse() /*throws NotInvertibleException*/; 064 065 }