001    package aima.logic.fol.inference;
002    
003    import java.util.List;
004    
005    import aima.logic.fol.inference.proof.Proof;
006    
007    /**
008     * @author Ciaran O'Reilly
009     * 
010     */
011    public interface InferenceResult {
012            /**
013             * 
014             * @return true, if the query is not entailed from the premises. This just
015             *         means the query is not entailed, the query itself may be true.
016             */
017            boolean isPossiblyFalse();
018    
019            /**
020             * 
021             * @return true, if the query is entailed from the premises (Note: can get
022             *         partial results if the original query contains variables
023             *         indicating that there can possibly be more than 1 proof/bindings
024             *         for the query, see: isPartialResultDueToTimeout()).
025             */
026            boolean isTrue();
027    
028            /**
029             * 
030             * @return true, if the inference procedure ran for a length of time and
031             *         found no proof one way or the other before it timed out.
032             */
033            boolean isUnknownDueToTimeout();
034    
035            /**
036             * 
037             * @return true, if the inference procedure found a proof for a query
038             *         containing variables (i.e. possibly more than 1 proof can be
039             *         returned) and the inference procedure was still looking for other
040             *         possible answers before it timed out.
041             */
042            boolean isPartialResultDueToTimeout();
043    
044            /**
045             * 
046             * @return a list of 0 or more proofs (multiple proofs can be returned if
047             *         the original query contains variables).
048             */
049            List<Proof> getProofs();
050    }