e0fd?YZ8ed@e8fdAYZ9edBe8fdCYZ:dDe:fdEYZ;dFe:fdGYZ<edHe0fdIYZ=edJe0fdKYZ>dLe>fdMYZ?dNe?fdOYZ@dPe?fdQYZAdRe?fdSYZBdTe?fdUYZCdVe>fdWYZDdXefdYYZEdZe)fd[YZFd\eFfd]YZGd^eFfd_YZHd`ZIdaZJdbZKdcZLddZMdeZNdfZOePdgkr.eLndS(huV A version of first order predicate logic, built on top of the typed lambda calculus. i(tprint_functiontunicode_literalsN(t defaultdict(treduce(tCounter(ttotal_orderingt string_typestpython_2_unicode_compatibleuAPPtTokenscBsTeZdZdgZdZdddgZdZddgZdZdZ dZ d Z d Z d d d gZ d Zdd dgZdZddgZdZdddgZdZdddgZdZddgZdZdgZeeeeZeeZee e e gZeeeeeee ZgeD]Zej der.e^q.Z!RS(u\uexistsusomeuexistualluforallu.u(u)u,u-unotu!u&uandu^u|uoru->uimpliesu=>u<->uiffu<=>u=u==u!=u^[-\\.(),!&^|>=<]*$("t__name__t __module__tLAMBDAt LAMBDA_LISTtEXISTSt EXISTS_LISTtALLtALL_LISTtDOTtOPENtCLOSEtCOMMAtNOTtNOT_LISTtANDtAND_LISTtORtOR_LISTtIMPtIMP_LISTtIFFtIFF_LISTtEQtEQ_LISTtNEQtNEQ_LISTtBINOPStQUANTStPUNCTtTOKENStxtretmatchtSYMBOLS(((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyRs:      cCs_dddddg}xCt|tjtjtjtjtjgD]}td|qCWdS(u Boolean operators unegationu conjunctionu disjunctionu implicationu equivalenceu%-15s %sN(tzipRRRRRRtprint(tnamestpair((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyt boolean_ops=s4cCsDddg}x1t|tjtjgD]}td|q(WdS(u Equality predicates uequalityu inequalityu%-15s %sN(R+RRR!R,(R-R.((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pytequality_predsEs "cCsMdddg}x7t|tjtjtjgD]}td|q1WdS(u Binding operators u existentialu universalulambdau%-15s %sN(R+RR RR R,(R-R.((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyt binding_opsMs(t LogicParsercBs@eZdZedZd"dZdZdZdZ dZ d"dZ dZ d Z d Zd Zd Zd ZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZ dZ!dZ"dZ#d Z$d!Z%RS(#u$A lambda calculus expression parser.cCsut|tstd|_g|_||_g|_tgtj D]}|df^qFgtj D]}|df^qet dfggtj tj D]}|df^qgtjD]}|df^qgtjD]}|df^qgtjD]}|df^qgtjD]}|d f^qgtjD]}|d f^q9td fg|_t g|_d S( ud :param type_check: bool should type checking be performed? to their types. iiiiiiiiii i N(t isinstancetbooltAssertionErrort _currentIndext_buffert type_checkt quote_charstdictRR RtAPPR R"R$RRRRtNonetoperator_precedencetright_associated_operations(tselfR8R'((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyt__init__Zs    cCs|j}d|_|j|\|_}yD|jd}|jdrpt|jd|jdnWnDt k r}d||d||j df}t d|nX|j r|j |n|S(u Parse the expression. :param data: str for the input to be parsed :param signature: ``dict`` that maps variable names to type strings :returns: a parsed Expression iiu %s %s %s^u N( trstripR6tprocessR7tprocess_next_expressionR<tinRangetUnexpectedTokenExceptionttokentLogicalExpressionExceptiontindexR8t typecheck(R?tdatat signaturetmappingtresulttetmsg((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pytparse}s  &" c Cs2g}i}t|j}d}d}|}x|t|kr|}|j||\} }| r|sx|}n|| 7}q3n|} ||} d} xX| | kr| | 7} | | } t||t| kr||t| } qPqWtj| krd|r4||t|<|j|d}n||t|<|j| |t| 7}q3||dkr|r||t|<|j|d}qn|s|}n|||7}|d7}q3W|r||t|<|j|nt||t||j||S|tjkr]|j||S|tjkr||j||S|tj kr|j ||SdS(ugThis method is intended to be overridden for logics that use different operators or expressionsN( Rithandle_variableRRthandle_negationR t handle_lambdaR$t handle_quantRt handle_open(R?RhRm((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyRkscCs_d}xR||jkrZ|j}|j||}|j||}|j||}q W|S(N(R<R6tattempt_EqualityExpressiontattempt_ApplicationExpressiontattempt_BooleanExpression(R?t expressionRmtcur_idx((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyRl(s cCs|j|jtjS(N(tmake_NegatedExpressionRCRR(R?RhRm((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyRp1scCs t|S(N(tNegatedExpression(R?Rw((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyRy4scCs|j|}|jdr|jdtjkrt|t rot|t rot|j d|n|j|j ||j t }xP|jdr|jdtj kr|j|j ||j t }qW|jtjn|S(NiuW'%s' is an illegal predicate name. Individual variables may not be used as predicates.(tmake_VariableExpressionRDRFRRR3tFunctionVariableExpressiontConstantExpressionRGR6tmake_ApplicationExpressionRCR;RtassertNextTokenR(R?RhRmRn((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyRo7s'   * cCsyy|j}Wn%tk r7}t|jdnXt|j|trot|jd||fnt|S(NuVariable expected.u;'%s' is an illegal variable name. Constants may not be %s.( RFRgRHR3R{R}RGR6tVariable(R?t descriptionRhRN((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pytget_next_token_variableNs cCs<|jds+t|jdddn|jdg}xtr|jd s~|jdtjkr|jd rt|jdddn|j|jdsPn|j |jdq@W|jdr|jdtjkr|jn|j |}x"|r7|j |j |}qW|S(NiiRju;Variable and Expression expected following lambda operator.u abstractediuExpression expected.( RDRgR6RtTrueRFRRRiRVRCtmake_LambdaExpressiontpop(R?RhRmtvarsRn((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyRqYs   8'  cCsR|j|}|jds>t|jddd|n|jdg}xtr|jd s|jdtjkr|jd rt|jdddn|j |jdsPn|j |jdqSW|jdr|jdtjkr|jn|j |}x%|rM|j ||j |}q)W|S(NiiRju;Variable and Expression expected following quantifier '%s'.u quantifiediuExpression expected.(t get_QuantifiedExpression_factoryRDRgR6RRRFRRRiRVRCtmake_QuanifiedExpressionR(R?RhRmtfactoryRRn((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyRrns" 8'  cCs=|tjkrtS|tjkr&tS|j|tjdS(u\This method serves as a hook for other logic parsers that have different quantifiersN(RRtExistsExpressionRt AllExpressiont assertTokenR$(R?Rh((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyRs cCs |||S(N((R?Rtvariabletterm((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyRscCs#|jd}|jtj|S(N(RCR<RRR(R?RhRmRn((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyRsscCs|jdr|jd}|tjtjkr|j||r|j|j||j|}|tjkr|j|}qqn|S(uAttempt to make an equality expression. If the next token is an equality operator, then an EqualityExpression will be returned. Otherwise, the parameter will be returned.i( RDRFRR R"t has_prioritytmake_EqualityExpressionRCRy(R?RwRmRh((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyRts( cCs t||S(ulThis method serves as a hook for other logic parsers that have different equality expression classes(tEqualityExpression(R?tfirsttsecond((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyRscCs|xu|jdrw|jd}|j|}|rs|j||rs|j|j|||j|}qPqW|S(uAttempt to make a boolean expression. If the next token is a boolean operator, then a BooleanExpression will be returned. Otherwise, the parameter will be returned.i(RDRFtget_BooleanExpression_factoryRtmake_BooleanExpressionRC(R?RwRmRhR((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyRvs  cCsT|tjkrtS|tjkr&tS|tjkr9tS|tjkrLtSdSdS(ubThis method serves as a hook for other logic parsers that have different boolean operatorsN( RRt AndExpressionRt OrExpressionRt ImpExpressionRt IffExpressionR<(R?Rh((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyRscCs |||S(N((R?RRR((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyRscCs)|jt|r%|jdr%|jdtjkr%t|t rt|t rt|t  rt|t  rt |j d|dn|j|j ||jt}xP|jdr |jdtjkr |j|j ||jt}qW|jtj|Sn|S(uAttempt to make an application expression. The next tokens are a list of arguments in parens, then the argument expression is a function being applied to the arguments. Otherwise, return the argument expression.iuThe function '%suq' is not a Lambda Expression, an Application Expression, or a functional predicate, so it may not take arguments.(RR;RDRFRRR3tLambdaExpressiontApplicationExpressionR|R}RGR6R~RCRRR(R?RwRmRn((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyRus"'   * cCs t||S(N(R(R?tfunctiontargument((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyR~scCstt|S(N(tVariableExpressionR(R?tname((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyR{scCs t||S(N(R(R?RR((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyRscCsA|j||j|kp@||jko@|j||j|kS(N(R=R>(R?t operationRm((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyRscCsy|j}Wn,tk r>}t|jdd|nXt|tru||krt|j||qn$||krt|j||ndS(NRjuExpected token '%s'.(RFRgRHR3tlistRER6(R?texpectedRhRN((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyRs  cCs^t|tr6||krZt|j||qZn$||krZt|j||ndS(N(R3RRER6(R?RhR((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyRs   cCsE|jdr%d|jd}nd}d|jjd|dS(Niu Next token: uNo more tokensu(RDRFt __class__R (R?RO((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyt__repr__sN(&R R t__doc__tFalseR@R<RPRBRTRRRDRFRiRCRkRlRpRyRoRRqRrRRRsRtRRvRRRuR~R{RRRRR(((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyR2VsD #  6 !                       cCs|dk r|j|}n|dkr6t}ng}xt|jD]}\}}|j}|jdsO|dkrqOny|j|j|WqOt k rt d||fqOXqOW|S(u Convert a file of First Order Formulas into a list of {Expression}s. :param s: the contents of the file :type s: str :param logic_parser: The parser to be used to parse the logical expression :type logic_parser: LogicParser :param encoding: the encoding of the input string, if it is binary :type encoding: str :return: a list of parsed formulas. :rtype: list(Expression) u#uuUnable to parse line %s: %sN( R<tdecodeR2t enumeratet splitlineststript startswithRVRPRGt ValueError(tst logic_parsertencodingt statementstlinenumtline((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyt read_logics     RcBsPeZdZdZdZdZdZdZdZdZ RS(cCs,t|tstd|||_dS(u7 :param name: the name of the variable u%s is not a stringN(R3RR5R(R?R((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyR@0scCst|to|j|jkS(N(R3RR(R?tother((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyt__eq__7scCs ||k S(N((R?R((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyt__ne__:scCs(t|tstn|j|jkS(N(R3Rt TypeErrorR(R?R((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyt__lt__=s cCs|j||S(N(tget(R?tbindings((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pytsubstitute_bindingsBscCs t|jS(N(thashR(R?((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyt__hash__EscCs|jS(N(R(R?((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyt__str__HscCs d|jS(NuVariable('%s')(R(R?((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyRKs( R R R@RRRRRRR(((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyR-s       cCs|dk rit|jr$d}qot|jr<d}qot|jrTd}qotsotdnd}td|tj f}x8|dk r||krtd|tj f}qW|S(u Return a new, unique variable. :param pattern: ``Variable`` that is being replaced. The new variable must be the same type. :param term: a set of ``Variable`` objects that should not be returned from this function. :rtype: Variable uzuFue0u!Cannot generate a unique constantu%s%sN( R<t is_indvarRt is_funcvart is_eventvarRR5Rt_counterR(tpatterntignoretprefixtv((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pytunique_variableOs     cCsRttdtj}|rNx)t|D]}|t|}q/Wn|S(uX Return a skolem function over the variables in univ_scope param univ_scope uF%s(RRRRR(t univ_scopetskolemR((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pytskolem_functionjs tTypecBs)eZdZdZedZRS(cCsd|S(Nu%s((R?((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyRxscCstd|S(Nu%s(R(R?((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyR{scCs t|S(N(t read_type(tclsR((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyt fromstring~s(R R RRt classmethodR(((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyRvs  t ComplexTypecBsPeZdZdZdZejZdZdZdZ dZ RS(cCsTt|tstd|t|ts>td|||_||_dS(Nu%s is not a Type(R3RR5RR(R?RR((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyR@s cCs1t|to0|j|jko0|j|jkS(N(R3RRR(R?R((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyRscCs ||k S(N((R?R((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyRscCsEt|tr7|jj|jo6|jj|jS|tkSdS(N(R3RRtmatchesRtANY_TYPE(R?R((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyRscCs|tkr|St|tri|jj|j}|jj|j}|rb|rbt||SdSn|tkry|SdSdS(N(RR3RRtresolveRR<(R?RtfR((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyRs    cCs,|tkrdtSd|j|jfSdS(Nu%su<%s,%s>(RRR(R?((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyRs cCs:|tkrtjSd|jj|jjfSdS(Nu (%s -> %s)(RtstrRR(R?((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyRs  ( R R R@RRRRRRRR(((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyRs       t BasicTypecBs5eZdZdZejZdZdZRS(cCs!t|to d|d|kS(Nu%s(R3R(R?R((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyRscCs ||k S(N((R?R((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyRscCs|tkp||kS(N(R(R?R((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyRscCs|j|r|SdSdS(N(RR<(R?R((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyRs(R R RRRRRR(((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyRs     t EntityTypecBseZdZdZRS(cCsdS(Nue((R?((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyRscCsdS(NuIND((R?((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyRs(R R RR(((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyRs tTruthValueTypecBseZdZdZRS(cCsdS(Nut((R?((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyRscCsdS(NuBOOL((R?((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyRs(R R RR(((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyRs t EventTypecBseZdZdZRS(cCsdS(Nuv((R?((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyRscCsdS(NuEVENT((R?((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyRs(R R RR(((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyRs tAnyTypecBsneZdZedZedZdZdZej Z dZ dZ dZ dZ RS( cCsdS(N((R?((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyR@scCs|S(N((R?((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyRscCs|S(N((R?((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyRscCst|tp|j|S(N(R3RR(R?R((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyRscCs ||k S(N((R?R((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyRscCstS(N(R(R?R((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyRscCs|S(N((R?R((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyRscCsdS(Nu?((R?((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyRscCsdS(NuANY((R?((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyRs(R R R@tpropertyRRRRRRRRRR(((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyRs       cCs^t|tst|jdd}|ddkr|ddksMtd}x}t|D]o\}}|dkr|d7}q`|dkr|d8}|dkstq`|dkr`|dkrPqq`q`Wtt|d|!t||dd!S|dd tkrtS|dd tkr.tS|dd t krFt St d |ddS( Nu uiuiu,u%suUnexpected character: '%s'.( R3RR5treplaceRRRt ENTITY_TYPEt TRUTH_TYPERRG(t type_stringt paren_countR`tchar((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyRs.       t TypeExceptioncBseZdZRS(cCstj||dS(N(t ExceptionR@(R?RO((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyR@#s(R R R@(((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyR"st"InconsistentTypeHierarchyExceptioncBseZddZRS(cCs7|rd||f}n d|}tj||dS(NuLThe variable '%s' was found in multiple places with different types in '%s'.uDThe variable '%s' was found in multiple places with different types.(RR@(R?RRwRO((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyR@'s N(R R R<R@(((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyR&stTypeResolutionExceptioncBseZdZRS(cCs$tj|d||j|fdS(Nu9The type of '%s', '%s', cannot be resolved with type '%s'(RR@ttype(R?Rwt other_type((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyR@1s (R R R@(((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyR0stIllegalTypeExceptioncBseZdZRS(cCs*tj|d|jj|||fdS(Nu9Cannot set type of %s '%s' to '%s'; must match type '%s'.(RR@RR (R?RwRt allowed_type((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyR@7s  (R R R@(((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyR6scCsFx|D]}|j|}qWx|d D]}|j|q+W|S(u Ensure correct typing across a collection of ``Expression`` objects. :param expressions: a collection of expressions :param signature: dict that maps variable names to types (or string representations of types) i(RI(t expressionsRKRw((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyRI>s  tSubstituteBindingsIcBs eZdZdZdZRS(uT An interface for classes that can perform substitutions for variables. cCs tdS(u :return: The object that is obtained by replacing each variable bound by ``bindings`` with its values. Aliases are already resolved. (maybe?) :rtype: (any) N(tNotImplementedError(R?R((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyRSscCs tdS(uB :return: A list of all variables in this object. N(R(R?((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyt variables\s(R R RRR(((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyRNs t ExpressioncBsLeZdZeZedeZeeddZ dZ dZ dZ dZdZdZd Zd Zd Zd Zdd ZdZdZddZdZeddZeedZddZdZdZdZ dZ!dZ"dZ#dZ$dZ%dZ&dZ'RS( u<This is the base abstract object for all logical expressionsR8cCs0|r|jj||S|jj||SdS(N(t_type_checking_logic_parserRPt _logic_parser(RRR8RK((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyRjscGs0|j|}x|D]}||}qW|S(N(tapplyto(R?Rt additionalRnta((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyt__call__qs cCs,t|tstd|t||S(Nu%s is not an Expression(R3RR5R(R?R((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyRwscCs t|S(N(Rz(R?((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyt__neg__{scCs| S(uWIf this is a negated expression, remove the negation. Otherwise add a negation.((R?((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pytnegate~scCs/t|ts"td|nt||S(Nu%s is not an Expression(R3RRR(R?R((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyt__and__scCs/t|ts"td|nt||S(Nu%s is not an Expression(R3RRR(R?R((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyt__or__scCs/t|ts"td|nt||S(Nu%s is not an Expression(R3RRR(R?R((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyt__gt__scCs/t|ts"td|nt||S(Nu%s is not an Expression(R3RRR(R?R((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyRscCs tdS(N(R(R?R((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyRscCs ||k S(N((R?R((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyRscCsot|tstd||dkrGddlm}|}nt|j|j}|j|S(u9 Check for logical equivalence. Pass the expression (self <-> other) to the theorem prover. If the prover says it is valid, then the self and other are equal. :param other: an ``Expression`` to check equality against :param prover: a ``nltk.inference.api.Prover`` u%s is not an Expressioni(tProver9N( R3RR5R<tnltk.inferenceRRtsimplifytprove(R?RtproverRtbicond((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pytequivs   cCstt|S(N(Rtrepr(R?((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyRscCs|}x|jD]}||kr||}t|trP|j|}n%t|tsutd|fn|j|}|j||}qqW|jS(Nu@Can not substitute a non-expression value into an expression: %r( RR3RR{RRRRR(R?Rtexprtvartval((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyRs  cstt|r}xh|D]]}||}tt|}t|trV||_nt||_|j|qWn|j dt fdDS(u Infer and check types. Raise exceptions if necessary. :param signature: dict that maps variable names to types (or string representations of types) :return: the signature, plus any additional type mappings RKc3s&|]}||djfVqdS(iN(R(t.0tkey(tsig(s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pys s( RRRRR3RRRRVt _set_typeR:(R?RKRRtvarEx((Rs`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyRIs    cCs tdS(u Find the type of the given variable as it is used in this expression. For example, finding the type of "P" in "P(x) & Q(x,y)" yields "" :param variable: Variable N(R(R?R((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pytfindtypescCs tdS(u Set the type of this expression to be the given type. Raise type exceptions where applicable. :param other_type: Type :param signature: dict(str -> list(AbstractVariableExpression)) N(R(R?RRK((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyRscscttstdtts>td|jfd|jS(uu Replace every instance of 'variable' with 'expression' :param variable: ``Variable`` The variable to replace :param expression: ``Expression`` The expression with which to replace it :param replace_bound: bool Should bound variables be replaced? :param alpha_convert: bool Alpha convert automatically to avoid name clashes? u%s is not a Variableu%s is not an Expressioncs|jS(N(R(RN(t alpha_convertRwt replace_boundR(s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyts (R3RR5Rtvisit_structuredR(R?RRwR R ((R RwR Rs`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyRscsfd|}xtt|ddD]\}}t|trr|jtd|d}n5t|tr|jtd|d}n|}|j|j|t }q7W|S(u&Rename auto-generated unique variablescsIt|trt|gSt|tr2tS|jdSdS(NcSsttj|tS(N(Rtoperatortor_tset(tparts((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyR s(R3tIndividualVariableExpressionRtAbstractVariableExpressiontvisit(RN(tget_indiv_vars(s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyRs   RcSs|jS(N(R(RN((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyR sue0%siuz%s( RtsortedR3tEventVariableExpressionRRRRRR(R?tnewvarsRMR`RNtnewVar((Rs`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyt normalizes .  cCs tdS(uR Recursively visit subexpressions. Apply 'function' to each subexpression and pass the result of each function application to the 'combinator' for aggregation: return combinator(map(function, self.subexpressions)) Bound variables are neither applied upon by the function nor given to the combinator. :param function: ``Function`` to call on each subexpression :param combinator: ``Function,R>`` to combine the results of the function calls :return: result of combination ``R`` N(R(R?Rt combinator((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyRscs|j|fdS(uf Recursively visit subexpressions. Apply 'function' to each subexpression and pass the result of each function application to the 'combinator' for aggregation. The combinator must have the same signature as the constructor. The function is not applied to bound variables, but they are passed to the combinator. :param function: ``Function`` to call on each subexpression :param combinator: ``Function`` with the same signature as the constructor, to combine the results of the function calls :return: result of combination cs |S(N((R(R(s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyR .s(R(R?RR((Rs`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyR!s cCsd|jj|fS(Nu<%s %s>(RR (R?((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyR0scCs |jS(N(R(R?((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyR3scCs.|jtd|j|jBDBS(u Return a set of all the variables for binding substitution. The variables returned include all free (non-bound) individual variables and any variable starting with '?' or '@'. :return: set of ``Variable`` objects css*|] }tjd|jr|VqdS(u^[?@]N(R(R)R(Rtp((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pys =s(tfreeRt predicatest constants(R?((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyR6scCs|jddS(u Return a set of all the free (non-bound) variables. This includes both individual and predicate variables, but not constants. :return: set of ``Variable`` objects cSs |jS(N(R(RN((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyR FscSsttj|tS(N(RRRR(R((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyR Gs(R(R?((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyR@s cCs|jddS(uu Return a set of individual constants (non-predicates). :return: set of ``Variable`` objects cSs |jS(N(R (RN((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyR NscSsttj|tS(N(RRRR(R((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyR Os(R(R?((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyR Is cCs|jddS(uu Return a set of predicates (constants, not variables). :return: set of ``Variable`` objects cSs |jS(N(R(RN((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyR VscSsttj|tS(N(RRRR(R((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyR Ws(R(R?((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyRQs cCs|jd|jS(uD :return: beta-converted version of this expression cSs |jS(N(R(RN((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyR ]s(RR(R?((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyRYscCs t|S(N(R(R?R((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyR{_sN((R R RR2RRRRRR<RRRRRRRRRRRRRRRIR RRRRRRRRRRR RRR{(((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyRcsB                         RcBseZdZdZdZedZeddZ dZ dZ dZ dZ d Zd ZejZd Zd Zed ZedZdZRS(u` This class is used to represent two related types of logical expressions. The first is a Predicate Expression, such as "P(x,y)". A predicate expression is comprised of a ``FunctionVariableExpression`` or ``ConstantExpression`` as the predicate and a list of Expressions as the arguments. The second is a an application of one expression to another, such as "(\x.dog(x))(fido)". The reason Predicate Expressions are treated as Application Expressions is that the Variable Expression predicate of the expression may be replaced with another Expression, such as a LambdaExpression, which would mean that the Predicate should be thought of as being applied to the arguments. The logical expression reader will always curry arguments in a application expression. So, "\x y.see(x,y)(john,mary)" will be represented internally as "((\x y.(see(x))(y))(john))(mary)". This simplifies the internals since there will always be exactly one argument in an application. The str() method will usually print the curried forms of application expressions. The one exception is when the the application expression is really a predicate expression (ie, underlying function is an ``AbstractVariableExpression``). This means that the example from above will be returned as "(\x y.see(x,y)(john))(mary)". cCsTt|tstd|t|ts>td|||_||_dS(u :param function: ``Expression``, for the function expression :param argument: ``Expression``, for the argument u%s is not an ExpressionN(R3RR5RR(R?RR((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyR@s cCs]|jj}|jj}t|trI|jj|j|jS|j||SdS(N( RRRR3RRRRR(R?RR((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyRs cCs*t|jjtr"|jjjStSdS(N(R3RRRRR(R?((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyRs cCst|tst|dkr0tt}n|jjt|y&|j jt |jj ||WnKt k rt d|j |j j |j|jj |j j jfnXdS(u:see Expression._set_type()uqThe function '%s' is of type '%s' and cannot be applied to '%s' of type '%s'. Its argument must match type '%s'.N(R3RR5R<RRRRRRRRRRR(R?RRK((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyRs & c Cst|tstd||jr@|j\}}n|j}|jg}g|g|D]}|j|^qc}g}xW|D]O}|tkr|rx1|D]}|j |rPqqWq|j |qqWt |dkrt |dStSdS(u:see Expression.findtype()u%s is not a VariableiiN( R3RR5tis_atomtuncurryRRR RRRVRSR( R?RRtargstargtfoundtuniqueRtu((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyR s"   )    cCs>t|jtrt}n|jj}||jjBS(u:see: Expression.constants()(R3RRRR R(R?tfunction_constants((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyR s cCsJt|jtr*t|jjg}n|jj}||jjBS(u:see: Expression.predicates()(R3RR}RRRR(R?tfunction_preds((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyRscCs"|||j||jgS(u:see: Expression.visit()(RR(R?RR((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyRscCs1t|to0|j|jko0|j|jkS(N(R3RRR(R?R((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyRscCs ||k S(N((R?R((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyRscCs |jr:|j\}}djd|D}n|j}d|j}d|}t}t|trt|jt rt|jjt st }qqt|jt st }qnt|t rt }n|rt j|t j}n|t j|t jS(Nu,css|]}d|VqdS(u%sN((RR$((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pys su%s(R!R"tjoinRRRR3RRRRRtBooleanExpressionRRR(R?RR#targ_strt function_strtparenthesize_function((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyRs&         cCsQ|j}|jg}x/t|trF|jd|j|j}qW||fS(uh Uncurry this application expression return: A tuple (base-function, arg-list) i(RRR3Rtinsert(R?RR#((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyR"s    cCs|jdS(u Return uncurried base-function. If this is an atom, then the result will be a variable expression. Otherwise, it will be a lambda expression. i(R"(R?((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pytpred scCs|jdS(u+ Return uncurried arg-list i(R"(R?((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyR#scCst|jtS(uk Is this expression an atom (as opposed to a lambda expression applied to a term)? (R3R0R(R?((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyR!sN(R R RR@RRRRR<RR R RRRRRRRR"R0R#R!(((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyRcs"           RcBs}eZdZdZdZeedZed dZ dZ dZ dZ dZd ZejZd ZRS( uDThis class represents a variable to be used as a predicate or entitycCs,t|tstd|||_dS(uA :param variable: ``Variable``, for the variable u%s is not a VariableN(R3RR5R(R?R((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyR@(scCs|S(N((R?((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyR/scCsYt|tstd|t|ts>td||j|krQ|S|SdS(u:see: Expression.replace()u%s is not an Variableu%s is not an ExpressionN(R3RR5RR(R?RRwR R ((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyR2s cCst|tst|dkr0tt}n|}x?||jjD]-}|jj |}|sGt |qGqGW||jjj |x!||jjD]}||_qWdS(u:see Expression._set_type()N( R3RR5R<RRRRRRRRV(R?RRKt resolutionR ((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyR;s cCs=t|tstd||j|kr5|jStSdS(u:see Expression.findtype()u%s is not a VariableN(R3RR5RRR(R?R((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyR LscCstS(u:see: Expression.predicates()(R(R?((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyRTscCst|to|j|jkS(uTAllow equality between instances of ``AbstractVariableExpression`` subtypes.(R3RR(R?R((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyRXscCs ||k S(N((R?R((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyR^scCs(t|tstn|j|jkS(N(R3RRR(R?R((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyRas cCs d|jS(Nu%s(R(R?((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyRhsN(R R RR@RRRRRR<RR RRRRRRR(((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyR$s         RcBsGeZdZeddZdZeeeZdZ dZ RS(uThis class represents variables that take the form of a single lowercase character (other than 'e') followed by zero or more digits.cCsot|tst|dkr0tt}n|jtsTt||tn||j j j |dS(u:see Expression._set_type()N( R3RR5R<RRRRRRRRV(R?RRK((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyRns  cCstS(N(R(R?((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyt _get_typezscCst|jgS(u:see: Expression.free()(RR(R?((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyR}scCstS(u:see: Expression.constants()(R(R?((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyR sN( R R RRR<RR2RRRR (((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyRks   R|cBs&eZdZeZdZdZRS(uwThis class represents variables that take the form of a single uppercase character followed by zero or more digits.cCst|jgS(u:see: Expression.free()(RR(R?((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyRscCstS(u:see: Expression.constants()(R(R?((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyR s(R R RRRRR (((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyR|s RcBseZdZeZRS(u{This class represents variables that take the form of a single lowercase 'e' character followed by zero or more digits.(R R Rt EVENT_TYPER(((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyRsR}cBs5eZdZeZeddZdZdZ RS(utThis class represents variables that do not take the form of a single character followed by zero or more digits.cCst|tst|dkr0tt}n|tkrEt}n*|}|jtkro|j |j}nx?||j j D]-}|jj |}|st |qqW||j j j |x!||j j D]}||_qWdS(u:see Expression._set_type()N(R3RR5R<RRRRRRRRRRV(R?RRKR1R ((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyRs   cCstS(u:see: Expression.free()(R(R?((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyRscCst|jgS(u:see: Expression.constants()(RR(R?((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyR sN( R R RRRRR<RRR (((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyR}s  cCsxt|tstd|t|jr8t|St|jrQt|St|jrjt |St |SdS(u This is a factory method that instantiates and returns a subtype of ``AbstractVariableExpression`` appropriate for the given variable. u%s is not a VariableN( R3RR5RRRRR|RRR}(R((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyRs   tVariableBinderExpressioncBsneZdZdZeedZdZdZdZ dZ dZ dZ d Z ejZRS( uThis an abstract class for any Expression that binds a variable in an Expression. This includes LambdaExpressions and Quantified ExpressionscCsTt|tstd|t|ts>td|||_||_dS(us :param variable: ``Variable``, for the variable :param term: ``Expression``, for the term u%s is not a Variableu%s is not an ExpressionN(R3RR5RRR(R?RR((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyR@s cCst|tstd|t|ts>td||j|kr|rt|tsrtd||j|j|jj||t |S|Sna|r|j|j kr|j t d|j}n|j|j|jj||||SdS(u:see: Expression.replace()u%s is not a Variableu%s is not an Expressionu&%s is not a AbstractVariableExpressionRN( R3RR5RRRRRRRRR R(R?RRwR R ((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyRs   cCsJt|tstd||j||jj|jt|tS(uRename all occurrences of the variable introduced by this variable binder in the expression to ``newvar``. :param newvar: ``Variable``, for the new variable u%s is not a Variable( R3RR5RRRRRR(R?tnewvar((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyR s   cCs|jjt|jgS(u:see: Expression.free()(RRRR(R?((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyRscCsFt|tstd|||jkr2tS|jj|SdS(u:see Expression.findtype()u%s is not a VariableN(R3RR5RRRR (R?R((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyR scCs|||jgS(u:see: Expression.visit()(R(R?RR((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyRscCs||j||jS(u#:see: Expression.visit_structured()(RR(R?RR((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyR scCst||js$t||jrw|j|jkrF|j|jkSt|j}|j|jj|j|kSntSdS(u~Defines equality modulo alphabetic variance. If we are comparing \x.M and \y.N, then check equality of M and N[x/y].N(R3RRRRRR(R?Rtvarex((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyRs"cCs ||k S(N((R?R((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyRs(R R RR@RRRR RR RRRRRR(((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyR4s       RcBs/eZedZeddZdZRS(cCs"t|jj|j|jjS(N(RRR RR(R?((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyR&scCsnt|tst|dkr0tt}n|jj|j||j j |sjt ||ndS(u:see Expression._set_type()N( R3RR5R<RRRRRRRR(R?RRK((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyR+s  cCst|jg}|j}x/|j|jkrF|j|j|j}qWtjdjd|Dtjd|S(Nu css|]}d|VqdS(u%sN((RR((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pys <su%s(RRRRVRR R*R(R?RR((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyR6s    N(R R RRRR<RR(((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyR$s tQuantifiedExpressioncBs/eZedZeddZdZRS(cCstS(N(R(R?((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyRBscCskt|tst|dkr0tt}n|jtsTt||tn|j j t|dS(u:see Expression._set_type()N( R3RR5R<RRRRRRR(R?RRK((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyREs  cCs{|jg}|j}x/|j|jkrF|j|j|j}qW|jddjd|Dtjd|S(Nu css|]}d|VqdS(u%sN((RR((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pys Vsu%s(RRRRVt getQuantifierR*RR(R?RR((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyRPs    N(R R RRRR<RR(((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyR7@s RcBseZdZRS(cCstjS(N(RR (R?((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyR8Zs(R R R8(((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyRYsRcBseZdZRS(cCstjS(N(RR(R?((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyR8^s(R R R8(((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyR]sRzcBsneZdZedZed dZdZdZ dZ dZ dZ e jZdZRS( cCs,t|tstd|||_dS(Nu%s is not an Expression(R3RR5R(R?R((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyR@dscCstS(N(R(R?((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyRhscCskt|tst|dkr0tt}n|jtsTt||tn|j j t|dS(u:see Expression._set_type()N( R3RR5R<RRRRRRR(R?RRK((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyRks  cCs/t|tstd||jj|S(Nu%s is not a Variable(R3RR5RR (R?R((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyR vscCs|||jgS(u:see: Expression.visit()(R(R?RR((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyRzscCs|jS(u:see: Expression.negate()(R(R?((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyR~scCst|to|j|jkS(N(R3RzR(R?R((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyRscCs ||k S(N((R?R((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyRscCstjd|jS(Nu%s(RRR(R?((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyRsN(R R R@RRRR<RR RRRRRRR(((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyRzbs       tBinaryExpressioncBs_eZdZedZdZdZdZdZe j Z dZ dZ RS(cCsTt|tstd|t|ts>td|||_||_dS(Nu%s is not an Expression(R3RR5RR(R?RR((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyR@s cCstS(N(R(R?((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyRscCswt|tstd||jj|}|jj|}||ks[|tkr_|S|tkro|StSdS(u:see Expression.findtype()u%s is not a VariableN(R3RR5RR RR(R?RRR((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyR s cCs"|||j||jgS(u:see: Expression.visit()(RR(R?RR((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyRscCsFt||js$t||joE|j|jkoE|j|jkS(N(R3RRR(R?R((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyRscCs ||k S(N((R?R((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyRscCsL|j|j}|j|j}tj|d|jd|tjS(Nu (t _str_subexRRRRtgetOpR(R?RR((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyRscCsd|S(Nu%s((R?tsubex((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyR:s( R R R@RRR RRRRRRR:(((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyR9s      R+cBseZeddZRS(cCs~t|tst|dkr0tt}n|jtsTt||tn|j j t||j j t|dS(u:see Expression._set_type()N( R3RR5R<RRRRRRRR(R?RRK((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyRs N(R R RR<R(((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyR+sRcBs eZdZdZdZRS(u"This class represents conjunctionscCstjS(N(RR(R?((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyR;scCs(d|}t|tr$|dd!S|S(Nu%sii(R3R(R?R<R((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyR:s  (R R RR;R:(((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyRs RcBs eZdZdZdZRS(u"This class represents disjunctionscCstjS(N(RR(R?((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyR;scCs(d|}t|tr$|dd!S|S(Nu%sii(R3R(R?R<R((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyR:s  (R R RR;R:(((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyRs RcBseZdZdZRS(u"This class represents implicationscCstjS(N(RR(R?((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyR;s(R R RR;(((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyRsRcBseZdZdZRS(u$This class represents biconditionalscCstjS(N(RR(R?((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyR;s(R R RR;(((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyRsRcBs&eZdZeddZdZRS(u:This class represents equality expressions like "(x = y)".cCs~t|tst|dkr0tt}n|jtsTt||tn|j j t ||j j t |dS(u:see Expression._set_type()N( R3RR5R<RRRRRRRRR(R?RRK((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyRs cCstjS(N(RR(R?((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyR;sN(R R RRR<RR;(((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyRs RQcBs#eZdZddZdZRS(ucCs;tj|t|r7x|D]}|j|qWndS(N(RR@RQR/(R?tstringststring((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyR@s cCs9t|r(||dj|dn d|tj((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyR/s N(R R RUR<R@R/(((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyRQs RGcBseZdZRS(cCs||_tj||dS(N(RHRR@(R?RHRj((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyR@s (R R R@(((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyRGsREcBseZddddZRS(cCsj|r|rd||f}n4|rId|}|rS|d|7}qSn d|}tj|||dS(Nu-Unexpected token: '%s'. Expected token '%s'.uUnexpected token: '%s'.u uExpected token '%s'.(RGR@(R?RHt unexpectedRRjRO((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyR@s   N(R R R<R@(((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyREsRgcBseZddZRS(cCs*|sd}ntj||d|dS(NuMore tokens expected.uEnd of input found. (RGR@(R?RHRj((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyR@#s N(R R R<R@(((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyRg"scCs5t|tstd|tjd|dk S(u An individual variable must be a single lowercase character other than 'e', followed by zero or more digits. :param expr: str :return: bool True if expr is of the correct form u%s is not a stringu ^[a-df-z]\d*$N(R3RR5R(R)R<(R((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyR)scCs5t|tstd|tjd|dk S(u A function variable must be a single uppercase character followed by zero or more digits. :param expr: str :return: bool True if expr is of the correct form u%s is not a stringu ^[A-Z]\d*$N(R3RR5R(R)R<(R((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyR4scCs5t|tstd|tjd|dk S(u An event variable must be a single lowercase 'e' character followed by zero or more digits. :param expr: str :return: bool True if expr is of the correct form u%s is not a stringu^e\d*$N(R3RR5R(R)R<(R((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyR?scCstj}tdddt|dt|dt|dt|dt|dt|d t|d t|d t|d t|d t|dt|dt|dt|dt|dtdddt|djt|djt|djt|djtddd |d}t||jtd}t|t||kdS(!Nu=iu Test readerujohnuman(x)u-man(x)u(man(x) & tall(x) & walks(x))u&exists x.(man(x) & tall(x) & walks(x))u \x.man(x)u\x.man(x)(john)u\x y.sees(x,y)u\x y.sees(x,y)(a,b)u(\x.exists y.walks(x,y))(x)uexists x.x = yuexists x.(x = y)uP(x) & x=y & P(y)u\P Q.exists x.(P(x) & Q(x))uman(x) <-> tall(x)u Test simplifyu\x.\y.sees(x,y)(john)(mary)u\x.\y.sees(x,y)(john, mary)u,all x.(man(x) & (\x.exists y.walks(x,y))(x))u5(\P.\Q.exists x.(P(x) & Q(x)))(\x.dog(x))(\x.bark(x))u4Test alpha conversion and binder expression equalityu exists x.P(x)uzu====================u====================u====================u====================u====================u====================(RRR,RR R(tlexprte1te2((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pytdemoKs8    cCstdddtdtdtdtdtdtd td td td td tdtdtddS(Nu=iuTest reader errorsu (P(x) & Q(x)u((P(x) &) & Q(x))uP(x) -> uP(xuP(x,uP(x,)uexistsu exists x.u\u\ x y.uP(x)Q(x)u (P(x)Q(x)u exists x -> yu====================u====================(R,t demoException(((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyt demo_errorsks            cCsEytj|Wn-tk r@}td|jj|fnXdS(Nu%s: %s(RRRGR,RR (RRN((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyRD{scCs!td|j|jfdS(Nu%s : %s(R,RR(tex((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyt printtypesu__main__(QRt __future__RRR(Rt collectionsRt functoolsRtnltk.internalsRt nltk.compatRRRR;RtobjectRR/R0R1R2R<RRRRRRRRRRRRRR3RRRRRRRRIRRRRRR|RR}RR4RR7RRRzR9R+RRRRRRQRGRERgRRRRCRERDRGR (((s`/private/var/folders/cc/xm4nqn811x9b50x1q_zpkmvdjlphkp/T/pip-build-FUwmDn/nltk/nltk/sem/logic.pyt s   !      3       E & W+.