001    /*
002     * $Id: RegularRingElem.java 1708 2008-02-24 17:28:36Z kredel $
003     */
004    
005    package edu.jas.structure;
006    
007    
008    /**
009     * Regular ring element interface.
010     * Defines idempotent operations and idempotent tests.
011     * @param <C> regular ring element type
012     * @author Heinz Kredel
013     */
014    
015    public interface RegularRingElem<C extends RegularRingElem<C>> 
016                     extends GcdRingElem<C> {
017    
018    
019        /* Get component. 
020         * Not possible to define in interface.
021         * @param i index of component.
022         * @return val(i).
023        public C get(int i);
024         */
025    
026    
027        /** Is regular ring element full. 
028         * @return If every component is non zero, 
029         *         then true is returned, else false.
030         */
031        public boolean isFull();
032    
033    
034        /** Is idempotent. 
035         * @return If this is a idempotent element then true is returned, else false.
036         */
037        public boolean isIdempotent();
038    
039    
040        /** Idempotent.  
041         * @return S with this*S = this.
042         */
043        public C idempotent();
044    
045    
046        /** Regular ring element idempotent complement.  
047         * @return 1-this.idempotent().
048         */
049        public C idemComplement();
050    
051    
052        /** Regular ring element idempotent and.  
053         * @param S Product.
054         * @return this.idempotent() and S.idempotent().
055         */
056        public C idempotentAnd(C S);
057    
058    
059        /** Regular ring element idempotent or.  
060         * @param S Product.
061         * @return this.idempotent() or S.idempotent().
062         */
063        public C idempotentOr(C S);
064    
065    
066        /** Regular ring element fill with idempotent.  
067         * @param S Product.
068         * @return fill this with S.idempotent().
069         */
070        public C fillIdempotent(C S);
071    
072    
073        /** Regular ring element fill with one.  
074         * @return fill this with one.
075         */
076        public C fillOne();
077    
078    }