ó <¿CVc@sšdZddlmZddlZddlZddlZddlmZmZm Z m Z m Z m Z m Z mZmZddlmZmZi ed6dd6ed 6d d 6d d 6dd6dd6dd6dd6Zdefd„ƒYZdeefd„ƒYZdefd„ƒYZd„Zd„Zdeefd„ƒYZd efd!„ƒYZd"efd#„ƒYZd$efd%„ƒYZ d&„Z!d'„Z"d(„Z#d)gfd*gfd+gfd,gfd-gfd*gfd+gfd-gfd.gfd/gfd0d1d2gfd3gfd4gfd5gfd6d7gfd8d7gfgZ$d9d:d;d<d=d>d?d@dAdBdCg Z%dDdE„Z&dF„Z'e(dGkr–e'ƒndS(HsD A theorem prover that makes use of the external 'Prover9' package. iÿÿÿÿ(tprint_functionN( t ExpressiontExistsExpressiont AllExpressiontNegatedExpressiont AndExpressiont IffExpressiont OrExpressiontEqualityExpressiont ImpExpression(tBaseProverCommandtProveris(FATAL)iis (MAX_MEGS)is (MAX_SECONDS)is (MAX_GIVEN)is (MAX_KEPT)is(ACTION)is (SIGSEGV)ietProver9CommandParentcBseZdZdd„ZRS(sÔ A common base class used by both ``Prover9Command`` and ``MaceCommand``, which is responsible for maintaining a goal and a set of assumptions, and generating prover9-style input files from them. tnltkcCs†|jƒdkr6xm|jƒD]}t|ƒqWnL|jƒdkrrx7t|jƒƒD]}t|ƒq[Wntd|ƒ‚dS(s< Print the list of the current assumptions. R tprover9s*Unrecognized value for 'output_format': %sN(tlowert assumptionstprinttconvert_to_prover9t NameError(tselft output_formatta((sh/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/inference/prover9.pytprint_assumptions.s(t__name__t __module__t__doc__R(((sh/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/inference/prover9.pyR (stProver9CommandcBs/eZdZddddd„Zed„ZRS(sº A ``ProverCommand`` specific to the ``Prover9`` prover. It contains the a print_assumptions() method that is used to print the list of assumptions in multiple formats. i<cCsY|sg}n|dk r3t|tƒs?t‚n t|ƒ}tj||||ƒdS(sÄ :param goal: Input expression to prove :type goal: sem.Expression :param assumptions: Input expressions to use as assumptions in the proof. :type assumptions: list(sem.Expression) :param timeout: number of seconds before timeout; set to 0 for no timeout. :type timeout: int :param prover: a prover. If not set, one will be created. :type prover: Prover9 N(tNonet isinstancetProver9tAssertionErrorR t__init__(RtgoalRttimeouttprover((sh/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/inference/prover9.pyR Bs    cCs4|r&|jj|dgƒdjƒS|jƒSdS(s9 :see BaseProverCommand.decorate_proof() t striplabelsiN(t_provert_call_prooftranstrstrip(Rt proof_stringtsimplify((sh/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/inference/prover9.pytdecorate_proofYs N(RRRRR tTrueR*(((sh/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/inference/prover9.pyR<st Prover9ParentcBsMeZdZdZed„Zd„Zd„Zed„Z ged„Z RS(sÀ A common class extended by both ``Prover9`` and ``Mace ``. It contains the functionality required to convert NLTK-style expressions into Prover9-style expressions. c Cs‰|dkr!d|_d|_ndd}tjj|d|ddgddd||dgd |ƒ|_|jjtjj d ƒ|_dS( NRt path_to_bintenv_varstPROVER9turls&http://www.cs.unm.edu/~mccune/prover9/t binary_namess.exetverbosei( Rt_binary_locationt _prover9_binR t internalst find_binarytrsplittostpathtsep(Rtbinary_locationR2tname((sh/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/inference/prover9.pytconfig_prover9ls      cCs}d}|rH|d7}x"t|ƒD]}|d|7}q#W|d7}n|ry|d7}|dt|ƒ7}|d7}n|S(sà :return: The input string that should be provided to the prover9 binary. This string is formed based on the goal, assumptions, and timeout value of this object. tsformulas(assumptions). s %s. send_of_list. sformulas(goals). (R(RR!Rtst p9_assumption((sh/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/inference/prover9.pyt prover9_input{s    cCsddddddgS(sÁ A list of directories that should be searched for the prover9 executables. This list is used by ``config_prover9`` when searching for the prover9 executables. s/usr/local/bin/prover9s/usr/local/bin/prover9/bins/usr/local/bins/usr/bins/usr/local/prover9s/usr/local/share/prover9((R((sh/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/inference/prover9.pytbinary_locationss c Csi|jƒ}|jdk r.||jg7}ntjj|d|ddgddd||dgd|ƒS( Nt searchpathR.R/R0s&http://www.cs.unm.edu/~mccune/prover9/R1s.exeR2(RBR3RR R5R6(RR<R2RB((sh/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/inference/prover9.pyt _find_binarys  c Cs |r3td|ƒtd|ƒtd|dƒn|g|}y|jdƒ}Wntk rfnXtj|dtjdtjdtjƒ}|jd |ƒ\}}|rôtd |jƒ|rØtd |dƒn|rôtd |dƒqôn|j d ƒ|jfS(s= Call the binary with the given input. :param input_str: A string whose contents are used as stdin. :param binary: The location of the binary to call :param args: A list of command-line arguments. :return: A tuple (stdout, returncode) :see: ``config_prover9`` sCalling:sArgs:sInput: s tutf8tstdouttstderrtstdintinputs Return code:sstdout: sstderr: sutf-8( RtencodetAttributeErrort subprocesstPopentPIPEtSTDOUTt communicatet returncodetdecode( Rt input_strtbinarytargsR2tcmdtpRFRG((sh/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/inference/prover9.pyt_call¨s(       N( RRRRR3tFalseR=RARBRDRX(((sh/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/inference/prover9.pyR,cs   cCs•t|tƒrbg}xF|D]>}y|jt|jƒƒƒWqtd|ƒ‚qXqW|Syt|jƒƒSWntd|ƒ‚nXdS(s; Convert a ``logic.Expression`` to Prover9 format. s4input %s cannot be converted to Prover9 input syntaxN(Rtlisttappendt_convert_to_prover9R)R(RItresultR?((sh/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/inference/prover9.pyRÊs  cCst|tƒr1dt|jƒdt|jƒSt|tƒrbdt|jƒdt|jƒSt|tƒr†dt|jƒdSt|tƒr»dt|j ƒdt|j ƒdSt|t ƒrðdt|j ƒdt|j ƒdSt|t ƒr%dt|j ƒd t|j ƒdSt|t ƒrZdt|j ƒd t|j ƒdSt|tƒrdt|j ƒd t|j ƒdSt|ƒSd S( sC Convert ``logic.Expression`` to Prover9 formatted string. sexists t sall s-(t)t(s & s | s -> s <-> s = N(RRtstrtvariableR\ttermRRRtfirsttsecondRR RR(t expression((sh/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/inference/prover9.pyR\Þs"""&&&&&RcBsYeZdZdZdd„Zdded„Zd„Zged„Z ged„Z RS(i<cCs ||_dS(N(t_timeout(RR"((sh/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/inference/prover9.pyR ÿs cCsF|sg}n|j|j||ƒd|ƒ\}}|dk|fS(sñ Use Prover9 to prove a theorem. :return: A pair whose first element is a boolean indicating if the proof was successful (i.e. returns value of 0) and whose second element is the output of the prover. R2i(t _call_prover9RA(RR!RR2RFRQ((sh/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/inference/prover9.pyt_proves  cCsd}|tj|||ƒS(s3 :see: Prover9Parent.prover9_input sclear(auto_denials). (R,RA(RR!RR?((sh/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/inference/prover9.pyRAsc Csû|jd kr'|jd|ƒ|_nd}|jdkrP|d|j7}n||7}|j||j||ƒ\}}|d krñd}||kr»|j|ƒ}||jƒ} nd } |d krßt|| ƒ‚qñt|| ƒ‚n||fS(s Call the ``prover9`` binary with the given input. :param input_str: A string whose contents are used as stdin. :param args: A list of command-line arguments. :return: A tuple (stdout, returncode) :see: ``config_prover9`` RR>isassign(max_seconds, %d). is%%ERROR:iiiiN(ii(iiii( R4RRDRgRXtindextstriptProver9LimitExceededExceptiontProver9FatalException( RRSRUR2tupdated_input_strRFRQterrormsgprefixtmsgstartterrormsg((sh/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/inference/prover9.pyRhs"  !   cCs@|jdkr'|jd|ƒ|_n|j||j||ƒS(s Call the ``prooftrans`` binary with the given input. :param input_str: A string whose contents are used as stdin. :param args: A list of command-line arguments. :return: A tuple (stdout, returncode) :see: ``config_prover9`` t prooftransN(t_prooftrans_binRRDRX(RRSRUR2((sh/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/inference/prover9.pyR&;s N( RRRR4RsR RYRiRARhR&(((sh/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/inference/prover9.pyRûs  !tProver9ExceptioncBseZd„ZRS(cCs5t|}|r!|d|7}ntj||ƒdS(Ns %s(tp9_return_codest ExceptionR (RRQtmessagetmsg((sh/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/inference/prover9.pyR Ks (RRR (((sh/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/inference/prover9.pyRtJsRmcBseZRS((RR(((sh/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/inference/prover9.pyRmQsRlcBseZRS((RR(((sh/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/inference/prover9.pyRlTscCsstjdƒ}tjdƒ}t|d|gƒ}d|_g|_|jƒt|jƒƒt|jƒƒdS(Ns(walk(j) & sing(j))swalk(j)R( Rt fromstringRRt_executable_pathtprover9_searchtproveRtproof(RtgRW((sh/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/inference/prover9.pyt test_config]s   cCs4x-|D]%}tj|ƒ}tt|ƒƒqWdS(s% Test that parsing works OK. N(RRyRR(texprttte((sh/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/inference/prover9.pyttest_convert_to_prover9is cCs—x|D]ˆ\}}tj|ƒ}g|D]}tj|ƒ^q)}t|d|ƒjƒ}x|D]}td|ƒqcWtd||fƒqWdS(s2 Try some proofs and exhibit the results. Rs %ss |- %s: %s N(RRyRR|R(t argumentsR!RR~RtalistRW((sh/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/inference/prover9.pyt test_proveqs" s(man(x) <-> (not (not man(x))))s(not (man(x) & (not man(x))))s(man(x) | (not man(x)))s(man(x) & (not man(x)))s(man(x) -> man(x))s(man(x) <-> man(x))s(not (man(x) <-> (not man(x))))smortal(Socrates)sall x.(man(x) -> mortal(x))s man(Socrates)sA((all x.(man(x) -> walks(x)) & man(Socrates)) -> some y.walks(y))s(all x.man(x) -> all x.man(x))ssome x.all y.sees(x,y)s#some e3.(walk(e3) & subj(e3, mary))sWsome e1.(see(e1) & subj(e1, john) & some e2.(pred(e1, e2) & walk(e2) & subj(e2, mary)))sVsome x e1.(see(e1) & subj(e1, x) & some e2.(pred(e1, e2) & walk(e2) & subj(e2, mary)))ssome x y.sees(x,y)ssome x.(man(x) & walks(x))s\x.(man(x) & walks(x))s\x y.sees(x,y)s walks(john)s\x.big(x, \y.mouse(y))s/(walks(x) & (runs(x) & (threes(x) & fours(x))))s(walks(x) -> runs(x))ssome x.(PRO(x) & sees(John, x))s some x.(man(x) & (not walks(x)))sall x.(man(x) -> walks(x))i-cCstd|ƒdS(Nt-(R(tnum((sh/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/inference/prover9.pytspaceržscCs`tdƒtƒtƒtƒtdƒtƒttƒtƒtdƒtƒttƒdS(NsTesting configurations$Testing conversion to Prover9 formatsTesting proofs(RR‰RRƒt expressionsR†R„(((sh/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/inference/prover9.pytdemo¡s    t__main__()Rt __future__RR8RLR tnltk.sem.logicRRRRRRRRR tnltk.inference.apiR R R+RYRutobjectR RR,RR\RRvRtRmRlRRƒR†R„RŠR‰R‹R(((sh/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/inference/prover9.pyt sz   @ 'g  O