§
    íóÉjˆ ã                   ó¨  — d Z ddlZddlZddlmZ ddlmZmZ ddlm	Z	 ddl
mZ dZ e	¦   «         Z G d„ d	¦  «        Zd
„ Zd„ Zd„ Z G d„ d¦  «        Zdid„Ze G d„ d¦  «        ¦   «         Zdid„Zdjd„Z G d„ d¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Z G d „ d!ee¦  «        Z e¦   «         Z e¦   «         Z e¦   «         Z  e¦   «         Z!d"„ Z" G d#„ d$e#¦  «        Z$ G d%„ d&e$¦  «        Z% G d'„ d(e$¦  «        Z& G d)„ d*e$¦  «        Z'djd+„Z( G d,„ d-¦  «        Z) G d.„ d/e)¦  «        Z*d0Z+d1„ Z, G d2„ d3e*¦  «        Z-e G d4„ d5e*¦  «        ¦   «         Z. G d6„ d7e.¦  «        Z/ G d8„ d9e.¦  «        Z0 G d:„ d;e/¦  «        Z1 G d<„ d=e.¦  «        Z2d>„ Z3 G d?„ d@e*¦  «        Z4 G dA„ dBe4¦  «        Z5 G dC„ dDe4¦  «        Z6 G dE„ dFe6¦  «        Z7 G dG„ dHe6¦  «        Z8 G dI„ dJe6¦  «        Z9 G dK„ dLe*¦  «        Z: G dM„ dNe*¦  «        Z; G dO„ dPe;¦  «        Z< G dQ„ dRe<¦  «        Z= G dS„ dTe<¦  «        Z> G dU„ dVe<¦  «        Z? G dW„ dXe<¦  «        Z@ G dY„ dZe;¦  «        ZA G d[„ d\e#¦  «        ZB G d]„ d^eB¦  «        ZC G d_„ d`eB¦  «        ZDda„ ZEdb„ ZFdc„ ZGdd„ ZHde„ ZIdf„ ZJdg„ ZKeLdhk    r eH¦   «          dS dS )kzV
A version of first order predicate logic, built on
top of the typed lambda calculus.
é    N)Údefaultdict)ÚreduceÚtotal_ordering)ÚCounter)ÚTrieÚAPPc                   ó  — e Zd ZdZdgZdZg d¢ZdZddgZdZ	dgZ
dZdZd	Zd
ZdZg d¢ZdZg d¢ZdZddgZdZg d¢ZdZg d¢ZdZddgZdZdgZeez   ez   ez   Zeez   e
z   ZeeeegZeez   ez   ez   ez   ez   ez   Z d„ e D ¦   «         Z!dS )ÚTokensú\Úexists)Úsomer   ÚexistÚallÚforallÚiotaú.ú(ú)ú,ú-)Únotr   ú!ú&)Úandr   ú^ú|Úorú->)Úimpliesr   z=>ú<->)Úiffr    z<=>ú=z==z!=c                 ó<   — g | ]}t          j        d |¦  «        ¯|‘ŒS )z^[-\\.(),!&^|>=<]*$)ÚreÚmatch©Ú.0Úxs     úq/home/lighthouse/badge-speaker-benchmark/.benchmark-venv-community/lib/python3.11/site-packages/nltk/sem/logic.pyú
<listcomp>zTokens.<listcomp>E   s*   € ÐHÐHÐH�Q¥B¤HÐ-CÀQÑ$GÔ$GÐHˆqÐHÐHÐHó    N)"Ú__name__Ú
__module__Ú__qualname__ÚLAMBDAÚLAMBDA_LISTÚEXISTSÚEXISTS_LISTÚALLÚALL_LISTÚIOTAÚ	IOTA_LISTÚDOTÚOPENÚCLOSEÚCOMMAÚNOTÚNOT_LISTÚANDÚAND_LISTÚORÚOR_LISTÚIMPÚIMP_LISTÚIFFÚIFF_LISTÚEQÚEQ_LISTÚNEQÚNEQ_LISTÚBINOPSÚQUANTSÚPUNCTÚTOKENSÚSYMBOLS© r+   r)   r
   r
      s3  € € € € € Ø€FØ�&€Kð €FØ-Ð-Ð-€KØ
€CØ�xÐ €HØ€DØ�€Ið €CØ€DØ€EØ€Eð €CØ Ð Ð €HØ
€CØ Ð Ð €HØ	€BØ�Sˆk€GØ
€CØ&Ð&Ð&€HØ
€CØ$Ð$Ð$€HØ	€BØ�Dˆk€GØ
€CØˆv€Hð ˜Ñ (Ñ*¨XÑ5€FØ˜8Ñ# iÑ/€FØ�$˜˜uÐ%€Eà�gÑ Ñ(¨6Ñ1°KÑ?À%ÑGÈ(ÑR€Fð IÐH˜&ÐHÑHÔH€G€G€Gr+   r
   c                  óÆ   — g d¢} t          | t          j        t          j        t          j        t          j        t          j        g¦  «        D ]}t          d|z  ¦  «         ŒdS )z
    Boolean operators
    )ÚnegationÚconjunctionÚdisjunctionÚimplicationÚequivalenceú%-15s	%sN)Úzipr
   r;   r=   r?   rA   rC   Úprint©ÚnamesÚpairs     r)   Úboolean_opsr[   H   s^   € ð UÐTÐT€EÝ�E�FœJ­¬
µF´I½v¼zÍ6Ì:ÐVÑWÔWð "ð "ˆÝˆk˜DÑ Ñ!Ô!Ð!Ð!ð"ð "r+   c                  ó„   — ddg} t          | t          j        t          j        g¦  «        D ]}t	          d|z  ¦  «         ŒdS )z
    Equality predicates
    ÚequalityÚ
inequalityrU   N)rV   r
   rE   rG   rW   rX   s     r)   Úequality_predsr_   Q   sP   € ð ˜Ð&€EÝ�E�FœI¥v¤zÐ2Ñ3Ô3ð "ð "ˆÝˆk˜DÑ Ñ!Ô!Ð!Ð!ð"ð "r+   c                  ó°   — g d¢} t          | t          j        t          j        t          j        t          j        g¦  «        D ]}t          d|z  ¦  «         ŒdS )z
    Binding operators
    )ÚexistentialÚ	universalÚlambdarU   N)rV   r
   r1   r3   r/   r5   rW   rX   s     r)   Úbinding_opsrd   Z   sY   € ð 3Ð2Ð2€EÝ�E�FœM­6¬:µv´}ÅfÄkÐRÑSÔSð "ð "ˆÝˆk˜DÑ Ñ!Ô!Ð!Ð!ð"ð "r+   c                   óâ   — e Zd ZdZdZd&d„Zd'd„Zd„ Zd„ Zd	„ Z	d
„ Z
d'd„Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd „ Z d!„ Z!d"„ Z"d#„ Z#d$„ Z$d%„ Z%dS )(ÚLogicParserz$A lambda calculus expression parser.éÈ   Fc                 ó`  — t          |t          ¦  «        sJ ‚d| _        g | _        d| _        || _        	 g | _        t          d„ t          j	        D ¦   «         d„ t          j
        D ¦   «         z   t          dfgz   d„ t          j        t          j        z   D ¦   «         z   d„ t          j        D ¦   «         z   d„ t          j        D ¦   «         z   d„ t          j        D ¦   «         z   d	„ t          j        D ¦   «         z   d
„ t          j        D ¦   «         z   dgz   ¦  «        | _        t          g| _        dS )z�
        :param type_check: should type checking be performed
            to their types?
        :type type_check: bool
        r   c                 ó   — g | ]}|d f‘ŒS )é   rN   r&   s     r)   r*   z(LogicParser.__init__.<locals>.<listcomp>†   s   € Ð0Ð0Ð0˜ˆa�ˆVÐ0Ð0Ð0r+   c                 ó   — g | ]}|d f‘ŒS )é   rN   r&   s     r)   r*   z(LogicParser.__init__.<locals>.<listcomp>‡   ó   € Ð/Ð/Ð/˜!��1ˆvÐ/Ð/Ð/r+   é   c                 ó   — g | ]}|d f‘ŒS )é   rN   r&   s     r)   r*   z(LogicParser.__init__.<locals>.<listcomp>‰   s   € Ð@Ð@Ð@˜!��1ˆvÐ@Ð@Ð@r+   c                 ó   — g | ]}|d f‘ŒS )é   rN   r&   s     r)   r*   z(LogicParser.__init__.<locals>.<listcomp>Š   s   € Ð-Ð-Ð-˜!��1ˆvÐ-Ð-Ð-r+   c                 ó   — g | ]}|d f‘ŒS )é   rN   r&   s     r)   r*   z(LogicParser.__init__.<locals>.<listcomp>‹   rm   r+   c                 ó   — g | ]}|d f‘ŒS )é   rN   r&   s     r)   r*   z(LogicParser.__init__.<locals>.<listcomp>Œ   s   € Ð.Ð.Ð.˜!��1ˆvÐ.Ð.Ð.r+   c                 ó   — g | ]}|d f‘ŒS )é   rN   r&   s     r)   r*   z(LogicParser.__init__.<locals>.<listcomp>�   rm   r+   c                 ó   — g | ]}|d f‘ŒS )é	   rN   r&   s     r)   r*   z(LogicParser.__init__.<locals>.<listcomp>Ž   rm   r+   )Né
   N)Ú
isinstanceÚboolÚ_currentIndexÚ_bufferÚ_parse_depthÚ
type_checkÚquote_charsÚdictr
   r0   r<   r   rF   rH   rJ   r>   r@   rB   rD   Úoperator_precedenceÚright_associated_operations)Úselfr�   s     r)   Ú__init__zLogicParser.__init__m   sV  € õ ˜*¥dÑ+Ô+Ð+Ð+Ð+àˆÔØˆŒØˆÔØ$ˆŒð	/ð ˆÔå#'Ø0Ð0�VÔ/Ð0Ñ0Ô0Ø/Ð/�vœÐ/Ñ/Ô/ñ0å�Qˆxˆjñð AÐ@�vœ~µ´Ñ?Ð@Ñ@Ô@ñAð .Ð-�vœ}Ð-Ñ-Ô-ñ	.ð
 0Ð/�vœÐ/Ñ/Ô/ñ0ð /Ð.�vœ~Ð.Ñ.Ô.ñ/ð 0Ð/�vœÐ/Ñ/Ô/ñ0ð 0Ð/�vœÐ/Ñ/Ô/ñ0ð ˆlñ	ñ$
ô $
ˆÔ õ -0¨5ˆÔ(Ð(Ð(r+   Nc           	      ó   — |                      ¦   «         }d| _        d| _        |                      |¦  «        \  | _        }	 |                      d¦  «        }|                      d¦  «        r+t          | j        dz   |                      d¦  «        ¦  «        ‚nK# t          $ r>}d 
                    ||d||j        dz
           z  ¦  «        }t          d|¦  «        |‚d}~ww xY w| j        r|                     |¦  «         |S )zä
        Parse the expression.

        :param data: str for the input to be parsed
        :param signature: ``dict<str, str>`` that maps variable names to type
            strings
        :returns: a parsed Expression
        r   Nrj   z	{}
{}
{}^ú )Úrstripr~   r€   Úprocessr   Úprocess_next_expressionÚinRangeÚUnexpectedTokenExceptionÚtokenÚLogicalExpressionExceptionÚformatÚindexr�   Ú	typecheck)r†   ÚdataÚ	signatureÚmappingÚresultÚeÚmsgs          r)   ÚparsezLogicParser.parse“   s
  € ð �{Š{‰}Œ}ˆàˆÔØˆÔØ $§¢¨TÑ 2Ô 2ÑˆŒ�gð	?Ø×1Ò1°$Ñ7Ô7ˆFØ�|Š|˜A‰Œð VÝ.¨tÔ/AÀAÑ/EÀtÇzÂzÐRSÁ}Ä}ÑUÔUÐUðVøå)ð 	?ð 	?ð 	?Ø×&Ò& q¨$°°g¸a¼gÈ¹kÔ6JÑ0JÑKÔKˆCÝ,¨T°3Ñ7Ô7¸QÐ>øøøøð	?øøøð Œ?ð 	(Ø×Ò˜YÑ'Ô'Ð'àˆs   ÁAB Â
CÂ!9CÃCc                 ó  — g }i }t          |                      ¦   «         ¦  «        }d}d}|}|t          |¦  «        k     �rV|}|                      ||¦  «        \  }	}|	r
|s|}||	z  }Œ;|}
||         }d}||
v rN||z  }|
|         }
t          |¦  «        |z
  t          |¦  «        k    r||t          |¦  «        z            }nn||
v °Nt           j        |
v re|r)||t          |¦  «        <   |                     |¦  «         d}||t          |¦  «        <   |                     |¦  «         |t          |¦  «        z  }nJ||         dv r,|r)||t          |¦  «        <   |                     |¦  «         d}n|s|}|||         z  }|dz  }|t          |¦  «        k     �°V|r'||t          |¦  «        <   |                     |¦  «         t          |¦  «        |t          |¦  «        <   t          |¦  «        dz   |t          |¦  «        dz   <   ||fS )zSplit the data into tokensÚ r   z 	
rj   )r   Úget_all_symbolsÚlenÚprocess_quoted_tokenÚLEAFÚappend)r†   r”   Úoutr–   Ú	tokenTrier�   Údata_idxÚtoken_start_idxÚcur_data_idxÚquoted_tokenÚstÚcÚsymbols                r)   r‹   zLogicParser.process¯   sG  € àˆØˆÝ˜×-Ò-Ñ/Ô/Ñ0Ô0ˆ	ØˆØˆØ"ˆØ�˜T™œÒ"Ñ"Ø#ˆLØ%)×%>Ò%>¸xÈÑ%NÔ%NÑ"ˆL˜(Øð Øð 3Ø&2�OØ˜Ñ%�ØàˆBØ�X”ˆAØˆFØ�r�'�'Ø˜!‘�Ø˜”U�Ý�t‘9”9˜xÑ'­#¨f©+¬+Ò5Ð5Ø˜X­¨F©¬Ñ3Ô4�A�Aàð �r�'�'õ Œy˜Bˆˆàð Ø(7�G�C ™HœHÑ%Ø—J’J˜uÑ%Ô%Ð%Ø�EØ$,��˜C™œÑ!Ø—
’
˜6Ñ"Ô"Ð"Ø�C ™KœKÑ'��à˜”> WÐ,Ð,Øð #Ø,;˜¥ C¡¤Ñ)ØŸ
š
 5Ñ)Ô)Ð)Ø "˜øà ð 3Ø*2˜Ø˜T (œ^Ñ+�EØ˜A‘�ðM �˜T™œÒ"Ñ"ðN ð 	Ø /ˆG•C˜‘H”HÑØ�JŠJ�uÑÔÐÝ ™IœIˆ•�C‘”ÑÝ # D¡	¤	¨A¡ˆ•�C‘”˜1‘ÑØ�Gˆ|Ðr+   c                 óì  — d}||         }|}| j         D ]Ý\  }}}}	||k    rÐ|	r||z  }|dz  }||         |k    r’||         |k    rD|	r|||         z  }|dz  }t          |¦  «        |k    rt          d d|z  ¦  «        ‚|||         z  }n|||         z  }|dz  }t          |¦  «        |k    rt          d d|z  ¦  «        ‚||         |k    °’|	r|||         z  }|dz  }|st          d d¦  «        ‚ nŒÞ||fS )Nrœ   rj   z:End of input reached.  Escape character [%s] found at end.z%End of input reached.  Expected: [%s]zEmpty quoted token found)r‚   rž   r�   )
r†   r¤   r”   r�   r©   ÚiÚstartÚendÚescapeÚincl_quotess
             r)   rŸ   z LogicParser.process_quoted_tokenå   su  € ØˆØ�ŒNˆØˆØ/3Ô/?ð 	ð 	Ñ+ˆE�3˜ Ø�EŠzˆzØð Ø˜Q‘J�EØ�Q‘�Ø˜1”g ’n�nØ˜A”w &Ò(Ð(Ø&ð -Ø! T¨!¤WÑ,˜EØ˜Q™˜Ý˜t™9œ9¨š>˜>Ý"<Ø $ð!FØHNñ!Oñ#ô #ð ð
   a¤Ñ(˜˜à  a¤Ñ(˜Ø˜‘F�AÝ˜4‘y”y A’~�~Ý8Ø Ð"LÈsÑ"Rñô ð ð! ˜1”g ’n�nð& ð %Ø˜T !œWÑ$�EØ�Q‘�Øð WÝ4°TÐ;UÑVÔVÐVØ�ð9 ð: �aˆxˆr+   c                 ó   — t           j        S )z#This method exists to be overridden)r
   rM   ©r†   s    r)   r�   zLogicParser.get_all_symbols	  s
   € åŒ~Ðr+   c                 óB   — | j         |z   t          | j        ¦  «        k     S )z6Return TRUE if the given location is within the buffer)r~   rž   r   )r†   Úlocations     r)   r�   zLogicParser.inRange  s   € àÔ! HÑ,­s°4´<Ñ/@Ô/@Ò@Ð@r+   c                 óÐ   — 	 |€#| j         | j                 }| xj        dz  c_        n| j         | j        |z            }|S # t          $ r}t          | j        dz   ¦  «        |‚d}~ww xY w)zÃGet the next waiting token.  If a location is given, then
        return the token at currentIndex+location without advancing
        currentIndex; setting it gives lookahead/lookback capability.Nrj   )r   r~   Ú
IndexErrorÚExpectedMoreTokensException)r†   r´   Útokr˜   s       r)   r�   zLogicParser.token  sˆ   € ð	MØÐØ”l 4Ô#5Ô6�ØÐ"Ô" aÑ'Ð"Ô"Ð"à”l 4Ô#5¸Ñ#@ÔA�ØˆJøÝð 	Mð 	Mð 	MÝ-¨dÔ.@À1Ñ.DÑEÔEÈ1ÐLøøøøð	Møøøs   ‚;> ¾
A%ÁA Á A%c                 ó   — |t           j        vS ©N)r
   rL   ©r†   r¸   s     r)   Ú
isvariablezLogicParser.isvariable  s   € Ø�&œ-Ð'Ð'r+   c                 óÜ  — | xj         dz  c_         	 | j         | j        k    r t          | j        dz   d| j        z  ¦  «        ‚	 |                      ¦   «         }n,# t
          $ r}t          | j        dz   d¬¦  «        |‚d}~ww xY w|                      ||¦  «        }|st          | j        |d¬¦  «        ‚|                      ||¦  «        | xj         dz  c_         S # | xj         dz  c_         w xY w)zAParse the next complete expression from the stream and return it.rj   z2Expression nesting exceeds the maximum depth (%d).úExpression expected.©ÚmessageN)	r€   ÚMAX_PARSE_DEPTHr�   r~   r�   r·   ÚhandlerŽ   Úattempt_adjuncts)r†   Úcontextr¸   r˜   Úaccums        r)   rŒ   z#LogicParser.process_next_expression"  s?  € àÐÔ˜QÑÐÔð	#ØÔ  4Ô#7Ò7Ð7õ 1ØÔ&¨Ñ*ØHØÔ*ñ+ñô ð ðØ—j’j‘l”l��øÝ.ð ð ð Ý1ØÔ&¨Ñ*Ð4Jðñ ô àðøøøøðøøøð
 —K’K  WÑ-Ô-ˆEàð Ý.ØÔ&¨Ð5Kðñ ô ð ð ×(Ò(¨°Ñ8Ô8àÐÔ Ñ"ÐÔÐøˆDÐÔ Ñ"ÐÔÐÐÐÐs0   ’0C ÁA ÁC Á
BÁ"A<Á<BÂAC ÃC+c                 ó€  — |                       |¦  «        r|                      ||¦  «        S |t          j        v r|                      ||¦  «        S |t          j        v r|                      ||¦  «        S |t          j        v r|                      ||¦  «        S |t          j	        k    r|  
                    ||¦  «        S dS )zgThis method is intended to be overridden for logics that
        use different operators or expressionsN)r¼   Úhandle_variabler
   r<   Úhandle_negationr0   Úhandle_lambdarJ   Úhandle_quantr8   Úhandle_open©r†   r¸   rÄ   s      r)   rÂ   zLogicParser.handleB  sÃ   € ð �?Š?˜3ÑÔð 	2Ø×'Ò'¨¨WÑ5Ô5Ð5à•F”OÐ#Ð#Ø×'Ò'¨¨WÑ5Ô5Ð5à•FÔ&Ð&Ð&Ø×%Ò% c¨7Ñ3Ô3Ð3à•F”MÐ!Ð!Ø×$Ò$ S¨'Ñ2Ô2Ð2à•F”KÒÐØ×#Ò# C¨Ñ1Ô1Ð1ð  Ðr+   c                 óÈ   — d }|| j         k    rT| j         }|                      ||¦  «        }|                      ||¦  «        }|                      ||¦  «        }|| j         k    °T|S rº   )r~   Úattempt_EqualityExpressionÚattempt_ApplicationExpressionÚattempt_BooleanExpression)r†   Ú
expressionrÄ   Úcur_idxs       r)   rÃ   zLogicParser.attempt_adjunctsT  st   € ØˆØ˜Ô+Ò+Ð+ØÔ(ˆGØ×8Ò8¸ÀWÑMÔMˆJØ×;Ò;¸JÈÑPÔPˆJØ×7Ò7¸
ÀGÑLÔLˆJð	 ˜Ô+Ò+Ð+ð
 Ðr+   c                 óf   — |                       |                      t          j        ¦  «        ¦  «        S rº   )Úmake_NegatedExpressionrŒ   r
   r;   rÌ   s      r)   rÈ   zLogicParser.handle_negation]  s&   € Ø×*Ò*¨4×+GÒ+GÍÌ
Ñ+SÔ+SÑTÔTÐTr+   c                 ó    — t          |¦  «        S rº   ©ÚNegatedExpression)r†   rÑ   s     r)   rÔ   z"LogicParser.make_NegatedExpression`  s   € Ý  Ñ,Ô,Ð,r+   c                 óN  — |                       |¦  «        }|                      d¦  «        �ry|                      d¦  «        t          j        k    �rUt          |t          ¦  «        s-t          |t          ¦  «        st          | j	        d|z  ¦  «        ‚|                      ¦   «          |  
                    ||                      t          ¦  «        ¦  «        }|                      d¦  «        r�|                      d¦  «        t          j        k    rz|                      ¦   «          |  
                    ||                      t          ¦  «        ¦  «        }|                      d¦  «        r#|                      d¦  «        t          j        k    °z|                      t          j        ¦  «         |S )Nr   zW'%s' is an illegal predicate name.  Individual variables may not be used as predicates.)Úmake_VariableExpressionr�   r�   r
   r8   r|   ÚFunctionVariableExpressionÚConstantExpressionr�   r~   Úmake_ApplicationExpressionrŒ   r   r:   ÚassertNextTokenr9   ©r†   r¸   rÄ   rÅ   s       r)   rÇ   zLogicParser.handle_variablec  sq  € ð ×,Ò,¨SÑ1Ô1ˆØ�<Š<˜‰?Œ?ñ 	/˜tŸzšz¨!™}œ}µ´Ò;Ñ;å˜eÕ%?Ñ@Ô@ð ÍØÕ)ñJô Jð õ 1ØÔ&ð"à$'ñ(ñô ð ð �JŠJ‰LŒLˆLð ×3Ò3Ø�t×3Ò3µCÑ8Ô8ñô ˆEð —,’,˜q‘/”/ð  d§j¢j°¡m¤mµv´|Ò&CÐ&CØ—
’
‘”�Ø×7Ò7Ø˜4×7Ò7½Ñ<Ô<ñô �ð —,’,˜q‘/”/ð  d§j¢j°¡m¤mµv´|Ò&CÐ&Cð
 × Ò ¥¤Ñ.Ô.Ð.Øˆr+   c                 ó$  — 	 |                       ¦   «         }n(# t          $ r}t          |j        d¦  «        |‚d }~ww xY wt          |                      |¦  «        t
          ¦  «        rt          | j        d|›d|›d�¦  «        ‚t          |¦  «        S )NzVariable expected.ú'z5' is an illegal variable name.  Constants may not be r   )	r�   r·   r’   r|   rÙ   rÛ   r�   r~   ÚVariable)r†   Údescriptionr¸   r˜   s       r)   Úget_next_token_variablez#LogicParser.get_next_token_variable�  s­   € ð	TØ—*’*‘,”,ˆCˆCøÝ*ð 	Tð 	Tð 	TÝ-¨a¬gÐ7KÑLÔLÐRSÐSøøøøð	Tøøøå�d×2Ò2°3Ñ7Ô7Õ9KÑLÔLð 	Ý,ØÔ"Ð"à.1¨c¨c°;°;°;ð@ñô ð õ
 ˜‰}Œ}Ðs   ‚ —
<¡7·<c                 ó  — |                       d¦  «        st          | j        dz   d¬¦  «        ‚|                      d¦  «        g}	 |                       d¦  «        r8|                      d¦  «        t
          j        k    r.|                       d¦  «        st          | j        dz   d¬¦  «        ‚|                      |                      d¦  «        ¦  «        sn)|                     |                      d¦  «        ¦  «         Œ¸|                       d¦  «        r7|                      d¦  «        t
          j        k    r|                      ¦   «          |  	                    |¦  «        }|r*|  
                    |                     ¦   «         |¦  «        }|°*|S )	Nr   rl   z;Variable and Expression expected following lambda operator.r¿   Ú
abstractedTrj   r¾   )r�   r·   r~   rã   r�   r
   r7   r¼   r¡   rŒ   Úmake_LambdaExpressionÚpop)r†   r¸   rÄ   ÚvarsrÅ   s        r)   rÉ   zLogicParser.handle_lambdaŽ  s}  € à�|Š|˜A‰Œð 	Ý-ØÔ" QÑ&ØUðñ ô ð ð ×,Ò,¨\Ñ:Ô:Ð;ˆð
	DØ—<’< ‘?”?ð Ø—
’
˜1‘”¥¤Ò+Ð+°D·L²LÀ±O´OÐ+å1ØÔ&¨Ñ*Ð4Jðñ ô ð ð —?’? 4§:¢:¨a¡=¤=Ñ1Ô1ð Øà�KŠK˜×4Ò4°\ÑBÔBÑCÔCÐCð
	Dð �<Š<˜‰?Œ?ð 	˜tŸzšz¨!™}œ}µ´
Ò:Ð:Ø�JŠJ‰LŒLˆLà×,Ò,¨SÑ1Ô1ˆØð 	BØ×.Ò.¨t¯xªx©z¬z¸5ÑAÔAˆEð ð 	Bàˆr+   c                 óL  — |                       |¦  «        }|                      d¦  «        st          | j        dz   d|z  ¬¦  «        ‚|                      d¦  «        g}	 |                      d¦  «        r8|                      d¦  «        t          j        k    r.|                      d¦  «        st          | j        dz   d¬¦  «        ‚|                      |                      d¦  «        ¦  «        sn)| 	                    |                      d¦  «        ¦  «         Œ¸|                      d¦  «        r7|                      d¦  «        t          j        k    r|                      ¦   «          |  
                    |¦  «        }|r+|                      ||                     ¦   «         |¦  «        }|°+|S )	Nr   rl   z;Variable and Expression expected following quantifier '%s'.r¿   Ú
quantifiedTrj   r¾   )Ú get_QuantifiedExpression_factoryr�   r·   r~   rã   r�   r
   r7   r¼   r¡   rŒ   Úmake_QuanifiedExpressionrç   )r†   r¸   rÄ   Úfactoryrè   rÅ   s         r)   rÊ   zLogicParser.handle_quant©  sš  € à×7Ò7¸Ñ<Ô<ˆà�|Š|˜A‰Œð 	Ý-ØÔ" QÑ&ØUØñðñ ô ð ð
 ×,Ò,¨\Ñ:Ô:Ð;ˆð
	DØ—<’< ‘?”?ð Ø—
’
˜1‘”¥¤Ò+Ð+°D·L²LÀ±O´OÐ+å1ØÔ&¨Ñ*Ð4Jðñ ô ð ð —?’? 4§:¢:¨a¡=¤=Ñ1Ô1ð Øà�KŠK˜×4Ò4°\ÑBÔBÑCÔCÐCð
	Dð �<Š<˜‰?Œ?ð 	˜tŸzšz¨!™}œ}µ´
Ò:Ð:Ø�JŠJ‰LŒLˆLà×,Ò,¨SÑ1Ô1ˆØð 	NØ×1Ò1°'¸4¿8º8¹:¼:ÀuÑMÔMˆEð ð 	Nàˆr+   c                 óÄ   — |t           j        v rt          S |t           j        v rt          S |t           j        v rt          S |                      |t           j        ¦  «         dS )z\This method serves as a hook for other logic parsers that
        have different quantifiersN)	r
   r2   ÚExistsExpressionr4   ÚAllExpressionr6   ÚIotaExpressionÚassertTokenrJ   r»   s     r)   rë   z,LogicParser.get_QuantifiedExpression_factoryÇ  s]   € ð •&Ô$Ð$Ð$Ý#Ð#Ø•F”OÐ#Ð#Ý Ð Ø•FÔ$Ð$Ð$Ý!Ð!à×Ò˜S¥&¤-Ñ0Ô0Ð0Ð0Ð0r+   c                 ó   —  |||¦  «        S rº   rN   )r†   rí   ÚvariableÚterms       r)   rì   z$LogicParser.make_QuanifiedExpressionÓ  s   € Øˆw�x Ñ&Ô&Ð&r+   c                 ón   — |                       d ¦  «        }|                      t          j        ¦  «         |S rº   )rŒ   rÝ   r
   r9   rÞ   s       r)   rË   zLogicParser.handle_openÖ  s0   € à×,Ò,¨TÑ2Ô2ˆØ×Ò�Vœ\Ñ*Ô*Ð*Øˆr+   c                 ó|  — |                       d¦  «        r¦|                      d¦  «        }|t          j        t          j        z   v rv|                      ||¦  «        r`|                      ¦   «          |                      ||                      |¦  «        ¦  «        }|t          j        v r|                      |¦  «        }|S )z»Attempt 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.r   )	r�   r�   r
   rF   rH   Úhas_priorityÚmake_EqualityExpressionrŒ   rÔ   )r†   rÑ   rÄ   r¸   s       r)   rÎ   z&LogicParser.attempt_EqualityExpressionÜ  s³   € ð �<Š<˜‰?Œ?ð 
	IØ—*’*˜Q‘-”-ˆCØ•f”n¥v¤Ñ6Ð6Ð6¸4×;LÒ;LØ�Wñ<ô <Ð6ð —
’
‘”�Ø!×9Ò9Ø × <Ò <¸SÑ AÔ Añô �
ð �&œ/Ð)Ð)Ø!%×!<Ò!<¸ZÑ!HÔ!H�JØÐr+   c                 ó"   — t          ||¦  «        S )zlThis method serves as a hook for other logic parsers that
        have different equality expression classes)ÚEqualityExpression©r†   ÚfirstÚseconds      r)   rù   z#LogicParser.make_EqualityExpressioní  s   € õ " %¨Ñ0Ô0Ð0r+   c                 óÔ  — d}|                       d¦  «        rÐ|                      d¦  «        }|                      |¦  «        }|rŽ|                      ||¦  «        rx|dz  }| j        |z   | j        k    r!t          | j        dz   d| j        › d�¦  «        ‚|                      ¦   «          |                      |||  	                    |¦  «        ¦  «        }nn|                       d¦  «        °Ð|S )z¶Attempt 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.r   rj   z.Expression nesting exceeds the maximum depth (z).)
r�   r�   Úget_BooleanExpression_factoryrø   r€   rÁ   r�   r~   Úmake_BooleanExpressionrŒ   )r†   rÑ   rÄ   Úchainr¸   rí   s         r)   rÐ   z%LogicParser.attempt_BooleanExpressionò  s  € ð ˆØ�lŠl˜1‰oŒoð 	Ø—*’*˜Q‘-”-ˆCØ×8Ò8¸Ñ=Ô=ˆGØð ˜4×,Ò,¨S°'Ñ:Ô:ð Ø˜‘
�ØÔ$ uÑ,¨tÔ/CÒCÐCÝ4ØÔ*¨QÑ.ð5Ø Ô0ð5ð 5ð 5ñô ð ð
 —
’
‘”�Ø!×8Ò8Ø˜Z¨×)EÒ)EÀcÑ)JÔ)Jñô �
�
ð ð! �lŠl˜1‰oŒoð 	ð" Ðr+   c                 ó®   — |t           j        v rt          S |t           j        v rt          S |t           j        v rt          S |t           j        v rt          S dS )zbThis method serves as a hook for other logic parsers that
        have different boolean operatorsN)	r
   r>   ÚAndExpressionr@   ÚOrExpressionrB   ÚImpExpressionrD   ÚIffExpressionr»   s     r)   r   z)LogicParser.get_BooleanExpression_factory  sU   € ð •&”/Ð!Ð!Ý Ð Ø•F”NÐ"Ð"ÝÐØ•F”OÐ#Ð#Ý Ð Ø•F”OÐ#Ð#Ý Ð à�4r+   c                 ó   —  |||¦  «        S rº   rN   )r†   rí   rý   rþ   s       r)   r  z"LogicParser.make_BooleanExpression  s   € Øˆw�u˜fÑ%Ô%Ð%r+   c                 óº  — |                       t          |¦  «        �r¾|                      d¦  «        �r¨|                      d¦  «        t          j        k    �r„t          |t          ¦  «        sZt          |t          ¦  «        sEt          |t          ¦  «        s0t          |t          ¦  «        st          | j        d|z  dz   ¦  «        ‚|                      ¦   «          |                      ||                      t          ¦  «        ¦  «        }|                      d¦  «        r�|                      d¦  «        t          j        k    rz|                      ¦   «          |                      ||                      t          ¦  «        ¦  «        }|                      d¦  «        r#|                      d¦  «        t          j        k    °z|                      t          j        ¦  «         |S |S )zíAttempt 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.r   zThe function '%szq' is not a Lambda Expression, an Application Expression, or a functional predicate, so it may not take arguments.)rø   r   r�   r�   r
   r8   r|   ÚLambdaExpressionÚApplicationExpressionrÚ   rÛ   r�   r~   rÜ   rŒ   r:   rÝ   r9   )r†   rÑ   rÄ   rÅ   s       r)   rÏ   z)LogicParser.attempt_ApplicationExpression!  s£  € ð
 ×Ò�S 'Ñ*Ô*ñ 	Ø�|Š|˜A‰Œñ  4§:¢:¨a¡=¤=µF´KÒ#?Ñ#?å" :Õ/?Ñ@Ô@ðå& zÕ3HÑIÔIðõ ' zÕ3MÑNÔNðõ ' zÕ3EÑFÔFð	õ 5ØÔ*Ø+¨jÑ8ð.ñ.ñô ð ð —
’
‘”�à×7Ò7Ø × <Ò <½SÑ AÔ Añô �ð —l’l 1‘o”oð ¨$¯*ª*°Q©-¬-½6¼<Ò*GÐ*GØ—J’J‘L”L�LØ ×;Ò;Ø˜t×;Ò;½CÑ@Ô@ñô �Eð —l’l 1‘o”oð ¨$¯*ª*°Q©-¬-½6¼<Ò*GÐ*Gð
 ×$Ò$¥V¤\Ñ2Ô2Ð2Ø�ØÐr+   c                 ó"   — t          ||¦  «        S rº   )r  ©r†   ÚfunctionÚarguments      r)   rÜ   z&LogicParser.make_ApplicationExpressionD  s   € Ý$ X¨xÑ8Ô8Ð8r+   c                 ó:   — t          t          |¦  «        ¦  «        S rº   )ÚVariableExpressionrá   ©r†   Únames     r)   rÙ   z#LogicParser.make_VariableExpressionG  s   € Ý!¥(¨4¡.¤.Ñ1Ô1Ð1r+   c                 ó"   — t          ||¦  «        S rº   )r
  ©r†   rô   rõ   s      r)   ræ   z!LogicParser.make_LambdaExpressionJ  s   € Ý ¨$Ñ/Ô/Ð/r+   c                 ó„   — | j         |         | j         |         k     p$|| j        v o| j         |         | j         |         k    S rº   )r„   r…   )r†   Ú	operationrÄ   s      r)   rø   zLogicParser.has_priorityM  sU   € ØÔ'¨	Ô2°TÔ5MØô6
ò 
ð 
ð ˜Ô9Ð9ð YØÔ(¨Ô3°tÔ7OÐPWÔ7XÒXð		
r+   c                 ó$  — 	 |                       ¦   «         }n,# t          $ r}t          |j        d|z  ¬¦  «        |‚d }~ww xY wt          |t          ¦  «        r||vrt          | j        ||¦  «        ‚d S ||k    rt          | j        ||¦  «        ‚d S )NúExpected token '%s'.r¿   )r�   r·   r’   r|   ÚlistrŽ   r~   )r†   Úexpectedr¸   r˜   s       r)   rÝ   zLogicParser.assertNextTokenU  sÀ   € ð	Ø—*’*‘,”,ˆCˆCøÝ*ð 	ð 	ð 	Ý-Ø”Ð!7¸(Ñ!Bðñ ô àðøøøøð	øøøõ
 �h¥Ñ%Ô%ð 	RØ˜(Ð"Ð"Ý.¨tÔ/AÀ3ÈÑQÔQÐQð #Ð"ð �hŠˆÝ.¨tÔ/AÀ3ÈÑQÔQÐQð ˆs   ‚ —
A ¡;»A c                 ó    — t          |t          ¦  «        r||vrt          | j        ||¦  «        ‚d S ||k    rt          | j        ||¦  «        ‚d S rº   )r|   r  rŽ   r~   )r†   r¸   r  s      r)   rò   zLogicParser.assertTokend  sd   € Ý�h¥Ñ%Ô%ð 	RØ˜(Ð"Ð"Ý.¨tÔ/AÀ3ÈÑQÔQÐQð #Ð"ð �hŠˆÝ.¨tÔ/AÀ3ÈÑQÔQÐQð ˆr+   c                 ó’   — |                       d¦  «        rd|                      d¦  «        z   }nd}d| j        j        z   dz   |z   dz   S )Nr   zNext token: zNo more tokensú<ú: ú>)r�   r�   Ú	__class__r,   )r†   r™   s     r)   Ú__repr__zLogicParser.__repr__l  sN   € Ø�<Š<˜‰?Œ?ð 	#Ø  4§:¢:¨a¡=¤=Ñ0ˆCˆCà"ˆCØ�T”^Ô,Ñ,¨tÑ3°cÑ9¸CÑ?Ð?r+   )Frº   )&r,   r-   r.   Ú__doc__rÁ   r‡   rš   r‹   rŸ   r�   r�   r�   r¼   rŒ   rÂ   rÃ   rÈ   rÔ   rÇ   rã   rÉ   rÊ   rë   rì   rË   rÎ   rù   rÐ   r   r  rÏ   rÜ   rÙ   ræ   rø   rÝ   rò   r"  rN   r+   r)   rf   rf   c   s9  € € € € € Ø.Ð.ð €Oð$1ð $1ð $1ð $1ðLð ð ð ð84ð 4ð 4ðl"ð "ð "ðHð ð ðAð Að AðMð Mð Mð Mð(ð (ð (ð#ð #ð #ð@2ð 2ð 2ð$ð ð ðUð Uð Uð-ð -ð -ðð ð ð<ð ð ðð ð ð6ð ð ð<
1ð 
1ð 
1ð'ð 'ð 'ðð ð ðð ð ð"1ð 1ð 1ð
ð ð ð<ð ð ð&ð &ð &ð!ð !ð !ðF9ð 9ð 9ð2ð 2ð 2ð0ð 0ð 0ð
ð 
ð 
ðRð Rð RðRð Rð Rð@ð @ð @ð @ð @r+   rf   c                 ó¨  — |�|                       |¦  «        } |€t          ¦   «         }g }t          |                      ¦   «         ¦  «        D ]†\  }}|                     ¦   «         }|                     d¦  «        s|dk    rŒ5	 |                     |                     |¦  «        ¦  «         Œ_# t          $ r}t          d|› d|› �¦  «        |‚d}~ww xY w|S )až  
    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)
    Nú#rœ   zUnable to parse line r  )
Údecoderf   Ú	enumerateÚ
splitlinesÚstripÚ
startswithr¡   rš   r�   Ú
ValueError)ÚsÚlogic_parserÚencodingÚ
statementsÚlinenumÚliner˜   s          r)   Ú
read_logicr2  t  sõ   € ð ÐØ�HŠH�XÑÔˆØÐÝ"‘}”}ˆà€JÝ" 1§<¢<¡>¤>Ñ2Ô2ð Oð O‰ˆ�Ø�zŠz‰|Œ|ˆØ�?Š?˜3ÑÔð 	 4¨2¢: :Øð	OØ×Ò˜l×0Ò0°Ñ6Ô6Ñ7Ô7Ð7Ð7øÝ)ð 	Oð 	Oð 	OÝÐF°WÐFÐFÀÐFÐFÑGÔGÈQÐNøøøøð	OøøøàÐs   Â(B*Â*
CÂ4C
Ã
Cc                   ó8   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	dS )	rá   c                 óX   — t          |t          ¦  «        sJ d|z  ¦   «         ‚|| _        dS )z7
        :param name: the name of the variable
        ú%s is not a stringN)r|   Ústrr  r  s     r)   r‡   zVariable.__init__”  s3   € õ ˜$¥Ñ$Ô$ÐAÐAÐ&:¸TÑ&AÑAÔAÐAØˆŒ	ˆ	ˆ	r+   c                 óL   — t          |t          ¦  «        o| j        |j        k    S rº   )r|   rá   r  ©r†   Úothers     r)   Ú__eq__zVariable.__eq__›  s    € Ý˜%¥Ñ*Ô*ÐF¨t¬y¸E¼JÒ/FÐFr+   c                 óZ   — t          |t          ¦  «        st          ‚| j        |j        k     S rº   )r|   rá   Ú	TypeErrorr  r8  s     r)   Ú__lt__zVariable.__lt__ž  s(   € Ý˜%¥Ñ*Ô*ð 	ÝˆOØŒy˜5œ:Ò%Ð%r+   c                 ó.   — |                      | | ¦  «        S rº   )Úget©r†   Úbindingss     r)   Úsubstitute_bindingszVariable.substitute_bindings£  s   € Ø�|Š|˜D $Ñ'Ô'Ð'r+   c                 ó*   — t          | j        ¦  «        S rº   )Úhashr  r²   s    r)   Ú__hash__zVariable.__hash__¦  s   € Ý�D”I‰ŒÐr+   c                 ó   — | j         S rº   ©r  r²   s    r)   Ú__str__zVariable.__str__©  s
   € ØŒyÐr+   c                 ó   — d| j         z  S )NzVariable('%s')rG  r²   s    r)   r"  zVariable.__repr__¬  s   € Ø $¤)Ñ+Ð+r+   N)
r,   r-   r.   r‡   r:  r=  rB  rE  rH  r"  rN   r+   r)   rá   rá   ’  s€   € € € € € ðð ð ðGð Gð Gð&ð &ð &ð
(ð (ð (ðð ð ðð ð ð,ð ,ð ,ð ,ð ,r+   rá   c                 ól  — | �Ot          | j        ¦  «        rd}n:t          | j        ¦  «        rd}n#t          | j        ¦  «        rd}nJ d¦   «         ‚d}t	          |› t
                               ¦   «         › �¦  «        }|�4||v r0t	          |› t
                               ¦   «         › �¦  «        }|�||v °0|S )a  
    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
    NÚzÚFÚe0Fz!Cannot generate a unique constant)Ú	is_indvarr  Ú
is_funcvarÚis_eventvarrá   Ú_counterr?  )ÚpatternÚignoreÚprefixÚvs       r)   Úunique_variablerV  °  sÌ   € ð ÐÝ�W”\Ñ"Ô"ð 	>ØˆFˆFÝ˜œÑ%Ô%ð 	>ØˆFˆFÝ˜œÑ&Ô&ð 	>ØˆFˆFà=Ð=Ñ=Ô=Ð=àˆå�FÐ,�HŸLšL™NœNÐ,Ð,Ñ-Ô-€AØ
Ð
  f  Ý˜Ð0¥§¢¡¤Ð0Ð0Ñ1Ô1ˆð Ð
  f  à€Hr+   c                 óÊ   — t          t          dt                               ¦   «         z  ¦  «        ¦  «        }| r*t	          | ¦  «        D ]} |t          |¦  «        ¦  «        }Œ|S )zX
    Return a skolem function over the variables in univ_scope
    param univ_scope
    zF%s)r  rá   rQ  r?  r  )Ú
univ_scopeÚskolemrU  s      r)   Úskolem_functionrZ  Ì  sd   € õ
  ¥¨µ·²±´Ñ)?Ñ @Ô @ÑAÔA€FØð 3Ý�jÑ!Ô!ð 	3ð 	3ˆAØ�VÕ.¨qÑ1Ô1Ñ2Ô2ˆFˆFØ€Mr+   c                   ó0   — e Zd Zd„ Zd„ Zed„ ¦   «         ZdS )ÚTypec                 ó   — d| z  S ©Nú%srN   r²   s    r)   r"  zType.__repr__Ù  s   € Ø�d‰{Ðr+   c                 ó&   — t          d| z  ¦  «        S r^  )rD  r²   s    r)   rE  zType.__hash__Ü  s   € Ý�D˜4‘KÑ Ô Ð r+   c                 ó    — t          |¦  «        S rº   )Ú	read_type)Úclsr,  s     r)   Ú
fromstringzType.fromstringß  s   € å˜‰|Œ|Ðr+   N)r,   r-   r.   r"  rE  Úclassmethodrd  rN   r+   r)   r\  r\  Ø  sM   € € € € € ðð ð ð!ð !ð !ð ðð ñ „[ðð ð r+   r\  c                   ó@   — e Zd Zd„ Zd„ Zej        Zd„ Zd„ Zd„ Z	d„ Z
dS )ÚComplexTypec                 óª   — t          |t          ¦  «        sJ d|z  ¦   «         ‚t          |t          ¦  «        sJ d|z  ¦   «         ‚|| _        || _        d S )Nz%s is not a Type)r|   r\  rý   rþ   rü   s      r)   r‡   zComplexType.__init__å  s\   € Ý˜%¥Ñ&Ô&ÐBÐBÐ(:¸UÑ(BÑBÔBÐBÝ˜&¥$Ñ'Ô'ÐDÐDÐ);¸fÑ)DÑDÔDÐDØˆŒ
ØˆŒˆˆr+   c                 ól   — t          |t          ¦  «        o| j        |j        k    o| j        |j        k    S rº   )r|   rg  rý   rþ   r8  s     r)   r:  zComplexType.__eq__ë  s6   € å�u�kÑ*Ô*ð ,Ø”
˜eœkÒ)ð,à”˜uœ|Ò+ð	
r+   c                 ó¾   — t          |t          ¦  «        r>| j                             |j        ¦  «        o| j                             |j        ¦  «        S | t
          k    S rº   )r|   rg  rý   Úmatchesrþ   ÚANY_TYPEr8  s     r)   rk  zComplexType.matchesô  sN   € Ý�e�[Ñ)Ô)ð 	$Ø”:×%Ò% e¤kÑ2Ô2ÐX°t´{×7JÒ7JÈ5Ì<Ñ7XÔ7XÐXà�8Ò#Ð#r+   c                 ó  — |t           k    r| S t          |t          ¦  «        rT| j                             |j        ¦  «        }| j                             |j        ¦  «        }|r|rt          ||¦  «        S d S | t           k    r|S d S rº   )rl  r|   rg  rý   Úresolverþ   )r†   r9  Úfr,  s       r)   rn  zComplexType.resolveú  s‹   € Ø•HÒÐØˆKÝ˜�{Ñ+Ô+ð 
	Ø”
×"Ò" 5¤;Ñ/Ô/ˆAØ”×#Ò# E¤LÑ1Ô1ˆAØð �Qð Ý" 1 aÑ(Ô(Ð(à�tØ•XÒÐØˆLà�4r+   c                 óR   — | t           k    r
dt           z  S d| j        › d| j        › d�S )Nr_  r  r   r   )rl  rý   rþ   r²   s    r)   rH  zComplexType.__str__	  s4   € Ø•8ÒÐØ�(‘?Ð"à2�t”zÐ2Ð2 D¤KÐ2Ð2Ð2Ð2r+   c                 ó¸   — | t           k    rt                                ¦   «         S d| j                             ¦   «         › d| j                             ¦   «         › d�S )Nr   z -> r   )rl  r6  rý   rþ   r²   s    r)   r6  zComplexType.str  sL   € Ø•8ÒÐÝ—<’<‘>”>Ð!àA�t”z—~’~Ñ'Ô'ÐAÐA¨T¬[¯_ª_Ñ->Ô->ÐAÐAÐAÐAr+   N)r,   r-   r.   r‡   r:  r\  rE  rk  rn  rH  r6  rN   r+   r)   rg  rg  ä  s|   € € € € € ðð ð ð
ð 
ð 
ð Œ}€Hð$ð $ð $ðð ð ð3ð 3ð 3ðBð Bð Bð Bð Br+   rg  c                   ó.   — e Zd Zd„ Zej        Zd„ Zd„ ZdS )Ú	BasicTypec                 óD   — t          |t          ¦  «        od| z  d|z  k    S r^  )r|   rs  r8  s     r)   r:  zBasicType.__eq__  s$   € Ý˜%¥Ñ+Ô+ÐO°¸±À$ÈÁ,Ò0OÐOr+   c                 ó$   — |t           k    p| |k    S rº   )rl  r8  s     r)   rk  zBasicType.matches  s   € Ø�Ò Ð1 D¨E¢MÐ1r+   c                 ó4   — |                       |¦  «        r| S d S rº   )rk  r8  s     r)   rn  zBasicType.resolve  s    € Ø�<Š<˜ÑÔð 	ØˆKà�4r+   N)r,   r-   r.   r:  r\  rE  rk  rn  rN   r+   r)   rs  rs    sM   € € € € € ðPð Pð Pð Œ}€Hð2ð 2ð 2ðð ð ð ð r+   rs  c                   ó   — e Zd Zd„ Zd„ ZdS )Ú
EntityTypec                 ó   — dS )Nr˜   rN   r²   s    r)   rH  zEntityType.__str__'  ó   € Øˆsr+   c                 ó   — dS )NÚINDrN   r²   s    r)   r6  zEntityType.str*  ó   € Øˆur+   N©r,   r-   r.   rH  r6  rN   r+   r)   rx  rx  &  s2   € € € € € ðð ð ðð ð ð ð r+   rx  c                   ó   — e Zd Zd„ Zd„ ZdS )ÚTruthValueTypec                 ó   — dS )NÚtrN   r²   s    r)   rH  zTruthValueType.__str__/  rz  r+   c                 ó   — dS )NÚBOOLrN   r²   s    r)   r6  zTruthValueType.str2  s   € Øˆvr+   Nr~  rN   r+   r)   r€  r€  .  s2   € € € € € ðð ð ðð ð ð ð r+   r€  c                   ó   — e Zd Zd„ Zd„ ZdS )Ú	EventTypec                 ó   — dS )NrU  rN   r²   s    r)   rH  zEventType.__str__7  rz  r+   c                 ó   — dS )NÚEVENTrN   r²   s    r)   r6  zEventType.str:  s   € Øˆwr+   Nr~  rN   r+   r)   r†  r†  6  s2   € € € € € ðð ð ðð ð ð ð r+   r†  c                   ól   — e Zd Zd„ Zed„ ¦   «         Zed„ ¦   «         Zd„ Zej	        Z	d„ Z
d„ Zd„ Zd„ Zd	S )
ÚAnyTypec                 ó   — d S rº   rN   r²   s    r)   r‡   zAnyType.__init__?  s   € Øˆr+   c                 ó   — | S rº   rN   r²   s    r)   rý   zAnyType.firstB  ó   € àˆr+   c                 ó   — | S rº   rN   r²   s    r)   rþ   zAnyType.secondF  rŽ  r+   c                 óV   — t          |t          ¦  «        p|                     | ¦  «        S rº   )r|   r‹  r:  r8  s     r)   r:  zAnyType.__eq__J  s#   € Ý˜%¥Ñ)Ô)Ð?¨U¯\ª\¸$Ñ-?Ô-?Ð?r+   c                 ó   — dS )NTrN   r8  s     r)   rk  zAnyType.matchesO  s   € Øˆtr+   c                 ó   — |S rº   rN   r8  s     r)   rn  zAnyType.resolveR  s   € Øˆr+   c                 ó   — dS )Nú?rN   r²   s    r)   rH  zAnyType.__str__U  rz  r+   c                 ó   — dS )NÚANYrN   r²   s    r)   r6  zAnyType.strX  r}  r+   N)r,   r-   r.   r‡   Úpropertyrý   rþ   r:  r\  rE  rk  rn  rH  r6  rN   r+   r)   r‹  r‹  >  s°   € € € € € ðð ð ð ðð ñ „Xðð ðð ñ „Xðð@ð @ð @ð Œ}€Hðð ð ðð ð ðð ð ðð ð ð ð r+   r‹  c                 óh  — t          | t          ¦  «        sJ ‚|                      dd¦  «        } | d         dk    r�| d         dk    sJ ‚d}t          | ¦  «        D ]3\  }}|dk    r|dz  }Œ|dk    r|dz  }|dk    sJ ‚Œ%|dk    r|dk    r nŒ4t	          t          | d|…         ¦  «        t          | |dz   d…         ¦  «        ¦  «        S | d         d	t          z  k    rt          S | d         d	t          z  k    rt          S | d         d	t          z  k    rt          S t          d d
| d         z  ¦  «        ‚)Nr‰   rœ   r   r  éÿÿÿÿr   rj   r   r_  zUnexpected character: '%s'.)
r|   r6  Úreplacer'  rg  rb  ÚENTITY_TYPEÚ
TRUTH_TYPErl  r�   )Útype_stringÚparen_countr¬   Úchars       r)   rb  rb  b  sn  € Ý�k¥3Ñ'Ô'Ð'Ð'Ð'Ø×%Ò% c¨2Ñ.Ô.€Kà�1„~˜ÒÐØ˜2Œ #Ò%Ð%Ð%Ð%ØˆÝ  Ñ-Ô-ð 	ð 	‰GˆAˆtØ�sŠ{ˆ{Ø˜qÑ ��Ø˜’�Ø˜qÑ �Ø" Q’����Ø˜’�Ø !Ò#Ð#Ø�EøÝÝ�k ! A #Ô&Ñ'Ô'­°;¸qÀ1¹uÀr¸zÔ3JÑ)KÔ)Kñ
ô 
ð 	
ð 
�QŒ˜4¥+Ñ-Ò	-Ð	-ÝÐØ	�QŒ˜4¥*Ñ,Ò	,Ð	,ÝÐØ	�QŒ˜4¥(™?Ò	*Ð	*Ýˆå(ØÐ/°+¸a´.Ñ@ñ
ô 
ð 	
r+   c                   ó   ‡ — e Zd Zˆ fd„Zˆ xZS )ÚTypeExceptionc                 óJ   •— t          ¦   «                              |¦  «         d S rº   ©Úsuperr‡   )r†   r™   r!  s     €r)   r‡   zTypeException.__init__‚  s!   ø€ Ý‰Œ×Ò˜ÑÔÐÐÐr+   ©r,   r-   r.   r‡   Ú__classcell__©r!  s   @r)   r¡  r¡  �  s8   ø€ € € € € ðð ð ð ð ð ð ð ð r+   r¡  c                   ó    ‡ — e Zd Zdˆ fd„	Zˆ xZS )Ú"InconsistentTypeHierarchyExceptionNc                 ól   •— |r
d|›d|›d�}nd|z  }t          ¦   «                              |¦  «         d S )NzThe variable 'z8' was found in multiple places with different types in 'ú'.zDThe variable '%s' was found in multiple places with different types.r£  )r†   rô   rÑ   r™   r!  s       €r)   r‡   z+InconsistentTypeHierarchyException.__init__‡  s]   ø€ Øð 		ð 		ð &. X X¨z¨z¨zð;ð ˆCðØ%ñ'ð õ 	‰Œ×Ò˜ÑÔÐÐÐr+   rº   r¥  r§  s   @r)   r©  r©  †  s=   ø€ € € € € ðð ð ð ð ð ð ð ð ð r+   r©  c                   ó   ‡ — e Zd Zˆ fd„Zˆ xZS )ÚTypeResolutionExceptionc           	      óh   •— t          ¦   «                              d|›d|j        ›d|›d�¦  «         d S )NzThe type of 'z', 'z!', cannot be resolved with type 'rà   )r¤  r‡   Útype)r†   rÑ   Ú
other_typer!  s      €r)   r‡   z TypeResolutionException.__init__–  sF   ø€ Ý‰Œ×ÒÐàˆzˆz˜:œ?˜?˜?¨J¨J¨Jð8ñ	
ô 	
ð 	
ð 	
ð 	
r+   r¥  r§  s   @r)   r­  r­  •  ó8   ø€ € € € € ð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
r+   r­  c                   ó   ‡ — e Zd Zˆ fd„Zˆ xZS )ÚIllegalTypeExceptionc                 óx   •— t          ¦   «                              d|j        j        ›d|›d|›d|›d�	¦  «         d S )NzCannot set type of z 'z' to 'z'; must match type 'r«  )r¤  r‡   r!  r,   )r†   rÑ   r°  Úallowed_typer!  s       €r)   r‡   zIllegalTypeException.__init__ž  sS   ø€ Ý‰Œ×ÒÐàÔ#Ô,Ð,Ð,¨j¨j¨j¸*¸*¸*ÀlÀlÀlðTñ	
ô 	
ð 	
ð 	
ð 	
r+   r¥  r§  s   @r)   r³  r³  �  r±  r+   r³  c                 ó~   — | D ]}|                      |¦  «        }Œ| dd…         D ]}|                      |¦  «         Œ|S )zè
    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)
    Nr™  )r“   )Úexpressionsr•   rÑ   s      r)   r“   r“   ¥  s]   € ð "ð 4ð 4ˆ
Ø×(Ò(¨Ñ3Ô3ˆ	ˆ	à! # 2 #Ô&ð (ð (ˆ
Ø×Ò˜YÑ'Ô'Ð'Ð'ØÐr+   c                   ó   — e Zd ZdZd„ Zd„ ZdS )ÚSubstituteBindingsIzT
    An interface for classes that can perform substitutions for
    variables.
    c                 ó   — t          ¦   «         ‚)zÍ
        :return: The object that is obtained by replacing
            each variable bound by ``bindings`` with its values.
            Aliases are already resolved. (maybe?)
        :rtype: (any)
        ©ÚNotImplementedErrorr@  s     r)   rB  z'SubstituteBindingsI.substitute_bindings»  ó   € õ "Ñ#Ô#Ð#r+   c                 ó   — t          ¦   «         ‚)zB
        :return: A list of all variables in this object.
        r»  r²   s    r)   Ú	variableszSubstituteBindingsI.variablesÄ  s   € õ "Ñ#Ô#Ð#r+   N)r,   r-   r.   r#  rB  r¿  rN   r+   r)   r¹  r¹  µ  s<   € € € € € ðð ð
$ð $ð $ð$ð $ð $ð $ð $r+   r¹  c                   ó  — e Zd ZdZ e¦   «         Z ed¬¦  «        Zed"d„¦   «         Zd„ Z	d„ Z
d	„ Zd
„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd#d„Zd„ Zd#d„Zd„ Zedfd„Zd$d„Zd#d„Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z d„ Z!d„ Z"d „ Z#d!„ Z$dS )%Ú
Expressionz<This is the base abstract object for all logical expressionsT)r�   FNc                 ór   — |r| j                              ||¦  «        S | j                             ||¦  «        S rº   )Ú_type_checking_logic_parserrš   Ú_logic_parser)rc  r,  r�   r•   s       r)   rd  zExpression.fromstringÑ  s<   € àð 	9ØÔ2×8Ò8¸¸IÑFÔFÐFàÔ$×*Ò*¨1¨iÑ8Ô8Ð8r+   c                 óP   — |                       |¦  «        }|D ]} ||¦  «        }Œ|S rº   )Úapplyto)r†   r9  Ú
additionalrÅ   Úas        r)   Ú__call__zExpression.__call__Ø  s6   € Ø—’˜UÑ#Ô#ˆØð 	ð 	ˆAØ�E˜!‘H”HˆEˆEØˆr+   c                 óf   — t          |t          ¦  «        sJ d|z  ¦   «         ‚t          | |¦  «        S ©Nú%s is not an Expression)r|   rÁ  r  r8  s     r)   rÆ  zExpression.applytoÞ  s6   € Ý˜%¥Ñ,Ô,ÐOÐOÐ.GÈ%Ñ.OÑOÔOÐOÝ$ T¨5Ñ1Ô1Ð1r+   c                 ó    — t          | ¦  «        S rº   rÖ   r²   s    r)   Ú__neg__zExpression.__neg__â  s   € Ý  Ñ&Ô&Ð&r+   c                 ó   — |  S )zWIf this is a negated expression, remove the negation.
        Otherwise add a negation.rN   r²   s    r)   ÚnegatezExpression.negateå  s   € ð ˆuˆr+   c                 óp   — t          |t          ¦  «        st          d|z  ¦  «        ‚t          | |¦  «        S rË  )r|   rÁ  r<  r  r8  s     r)   Ú__and__zExpression.__and__ê  ó8   € Ý˜%¥Ñ,Ô,ð 	?ÝÐ5¸Ñ=Ñ>Ô>Ð>Ý˜T 5Ñ)Ô)Ð)r+   c                 óp   — t          |t          ¦  «        st          d|z  ¦  «        ‚t          | |¦  «        S rË  )r|   rÁ  r<  r  r8  s     r)   Ú__or__zExpression.__or__ï  s8   € Ý˜%¥Ñ,Ô,ð 	?ÝÐ5¸Ñ=Ñ>Ô>Ð>Ý˜D %Ñ(Ô(Ð(r+   c                 óp   — t          |t          ¦  «        st          d|z  ¦  «        ‚t          | |¦  «        S rË  )r|   rÁ  r<  r  r8  s     r)   Ú__gt__zExpression.__gt__ô  rÓ  r+   c                 óp   — t          |t          ¦  «        st          d|z  ¦  «        ‚t          | |¦  «        S rË  )r|   rÁ  r<  r  r8  s     r)   r=  zExpression.__lt__ù  rÓ  r+   c                 ó   — t           S rº   )ÚNotImplementedr8  s     r)   r:  zExpression.__eq__þ  s   € ÝÐr+   c                 ó:   — t          t          | ¦  «        ¦  «        S rº   )rD  Úreprr²   s    r)   rE  zExpression.__hash__  s   € Ý•D˜‘J”JÑÔÐr+   c                 óü   — t          |t          ¦  «        sJ d|z  ¦   «         ‚|€ddlm}  |¦   «         }t	          |                      ¦   «         |                     ¦   «         ¦  «        }|                     |¦  «        S )a9  
        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``
        rÌ  Nr   )ÚProver9)r|   rÁ  Únltk.inferencerÞ  r  ÚsimplifyÚprove)r†   r9  ÚproverrÞ  Úbiconds        r)   ÚequivzExpression.equiv  s}   € õ ˜%¥Ñ,Ô,ÐOÐOÐ.GÈ%Ñ.OÑOÔOÐOàˆ>Ø.Ð.Ð.Ð.Ð.Ð.à�W‘Y”YˆFÝ˜tŸ}š}™œ°·²Ñ0@Ô0@ÑAÔAˆØ�|Š|˜FÑ#Ô#Ð#r+   c                 ór  — | }|                      ¦   «         D ]�}||v r‡||         }t          |t          ¦  «        r|                      |¦  «        }n't          |t          ¦  «        st          d|›�¦  «        ‚|                     |¦  «        }|                     ||d¬¦  «        }ŒŽ|                     ¦   «         S )Nz>Can not substitute a non-expression value into an expression: T©Úalpha_convert)	r¿  r|   rá   rÙ   rÁ  r+  rB  rš  rà  )r†   rA  ÚexprÚvarÚvals        r)   rB  zExpression.substitute_bindings  sÇ   € ØˆØ—>’>Ñ#Ô#ð 	Bð 	BˆCØ�hˆˆØ˜s”m�Ý˜c¥8Ñ,Ô,ð Ø×6Ò6°sÑ;Ô;�C�CÝ# C­Ñ4Ô4ð Ý$˜*à:=¸#ð@ñô ð ð
 ×-Ò-¨hÑ7Ô7�à—|’| C¨¸D�|ÑAÔA�øØ�}Š}‰ŒÐr+   c                 ób  ‡— t          t          ¦  «        Š|ru|D ]r}||         }t          t          |¦  «        ¦  «        }t	          |t
          ¦  «        r||_        nt          |¦  «        |_        ‰|                              |¦  «         Œs|  	                    ‰¬¦  «         ˆfd„‰D ¦   «         S )zý
        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
        )r•   c                 ó8   •— i | ]}|‰|         d          j         “ŒS )r   )r¯  )r'   ÚkeyÚsigs     €r)   ú
<dictcomp>z(Expression.typecheck.<locals>.<dictcomp>=  s&   ø€ Ð5Ð5Ð5¨#��S˜”X˜a”[Ô%Ð5Ð5Ð5r+   )
r   r  r  rá   r|   r\  r¯  rb  r¡   Ú	_set_type)r†   r•   rí  rê  ÚvarExrî  s        @r)   r“   zExpression.typecheck(  s´   ø€ õ �$ÑÔˆØð 	'Ø ð 'ð '�Ø ”n�Ý*­8°C©=¬=Ñ9Ô9�Ý˜c¥4Ñ(Ô(ð 0Ø!$�E”J�Jå!*¨3¡¤�E”JØ�C”—’ Ñ&Ô&Ð&Ð&à�Š ˆÑ%Ô%Ð%à5Ð5Ð5Ð5°Ð5Ñ5Ô5Ð5r+   c                 ó   — t          ¦   «         ‚)zÉ
        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 "<e,t>"

        :param variable: Variable
        r»  ©r†   rô   s     r)   ÚfindtypezExpression.findtype?  r½  r+   c                 ó   — t          ¦   «         ‚)zá
        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))
        r»  ©r†   r°  r•   s      r)   rð  zExpression._set_typeH  s   € õ "Ñ#Ô#Ð#r+   c                 óÔ   ‡‡‡‡— t          ‰t          ¦  «        sJ d‰z  ¦   «         ‚t          ‰t          ¦  «        sJ d‰z  ¦   «         ‚|                      ˆˆˆˆfd„| j        ¦  «        S )au  
        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?
        ú%s is not a VariablerÌ  c                 ó4   •— |                       ‰‰‰‰¦  «        S rº   )rš  )r˜   rç  rÑ   Úreplace_boundrô   s    €€€€r)   ú<lambda>z$Expression.replace.<locals>.<lambda>`  s   ø€ �a—i’i ¨*°mÀ]ÑSÔS€ r+   )r|   rá   rÁ  Úvisit_structuredr!  ©r†   rô   rÑ   rú  rç  s    ````r)   rš  zExpression.replaceR  sŽ   øøøø€ õ ˜(¥HÑ-Ô-ÐPÐPÐ/EÈÑ/PÑPÔPÐPÝ˜*¥jÑ1Ô1ð 	
ð 	
Ø%¨
Ñ2ñ	
ô 	
ð 	
ð ×$Ò$ØSÐSÐSÐSÐSÐSÐSØŒNñ
ô 
ð 	
r+   c                 ó¦  ‡— ˆfd„Š| }t          t           ‰| ¦  «        d„ ¬¦  «        ¦  «        D ]Ÿ\  }}t          |t          ¦  «        r)|                     t          d|dz   z  ¦  «        ¦  «        }n@t          |t          ¦  «        r)|                     t          d|dz   z  ¦  «        ¦  «        }n|}|                     |j        |d¦  «        }Œ |S )z&Rename auto-generated unique variablesc                 ó¨   •— t          | t          ¦  «        r| hS t          | t          ¦  «        rt          ¦   «         S |                      ‰d„ ¦  «        S )Nc                 óP   — t          t          j        | t          ¦   «         ¦  «        S rº   ©r   ÚoperatorÚor_Úset©Úpartss    r)   rû  z>Expression.normalize.<locals>.get_indiv_vars.<locals>.<lambda>n  s   € µ&½¼ÀuÍcÉeÌeÑ2TÔ2T€ r+   )r|   ÚIndividualVariableExpressionÚAbstractVariableExpressionr  Úvisit)r˜   Úget_indiv_varss    €r)   r
  z,Expression.normalize.<locals>.get_indiv_varsg  sX   ø€ Ý˜!Õ9Ñ:Ô:ð Ø�s�
Ý˜AÕ9Ñ:Ô:ð Ý‘u”u�à—w’wØ"Ð$TÐ$Tñô ð r+   c                 ó   — | j         S rº   ©rô   ©r˜   s    r)   rû  z&Expression.normalize.<locals>.<lambda>r  s   € ÈÌ€ r+   )rí  ze0%srj   zz%sT)	r'  Úsortedr|   ÚEventVariableExpressionr!  rá   r  rš  rô   )r†   Únewvarsr—   r¬   r˜   ÚnewVarr
  s         @r)   Ú	normalizezExpression.normalized  sé   ø€ ð	ð 	ð 	ð 	ð 	ð ˆÝ�f ^ ^°DÑ%9Ô%9Ð?SÐ?SÐTÑTÔTÑUÔUð 	>ð 	>‰DˆAˆqÝ˜!Õ4Ñ5Ô5ð ØŸš¥X¨f¸¸A¹Ñ.>Ñ%?Ô%?Ñ@Ô@��Ý˜AÕ;Ñ<Ô<ð ØŸš¥X¨e°q¸1±u©oÑ%>Ô%>Ñ?Ô?��à�Ø—^’^ A¤J°¸Ñ=Ô=ˆFˆFØˆr+   c                 ó   — t          ¦   «         ‚)aR  
        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<Expression,T>`` to call on each subexpression
        :param combinator: ``Function<list<T>,R>`` to combine the results of the
        function calls
        :return: result of combination ``R``
        r»  ©r†   r  Ú
combinators      r)   r	  zExpression.visit|  s   € õ "Ñ#Ô#Ð#r+   c                 ó6   ‡— |                       |ˆfd„¦  «        S )af  
        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
        c                 ó   •—  ‰| Ž S rº   rN   )r  r  s    €r)   rû  z-Expression.visit_structured.<locals>.<lambda>š  s   ø€ °*°*¸eÐ2D€ r+   ©r	  r  s     `r)   rü  zExpression.visit_structured�  s#   ø€ ð �zŠz˜(Ð$DÐ$DÐ$DÐ$DÑEÔEÐEr+   c                 ó(   — d| j         j        › d| › d�S )Nr  r‰   r   )r!  r,   r²   s    r)   r"  zExpression.__repr__œ  s    € Ø4�4”>Ô*Ð4Ð4¨TÐ4Ð4Ð4Ð4r+   c                 ó*   — |                       ¦   «         S rº   )r6  r²   s    r)   rH  zExpression.__str__Ÿ  s   € Ø�xŠx‰zŒzÐr+   c                 ó’   — |                       ¦   «         d„ |                      ¦   «         |                      ¦   «         z  D ¦   «         z  S )zþ
        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
        c                 óF   — h | ]}t          j        d |j        ¦  «        ¯|’ŒS )z^[?@])r$   r%   r  )r'   Úps     r)   ú	<setcomp>z'Expression.variables.<locals>.<setcomp>©  s=   € ð 
ð 
ð 
Ø½r¼xÈÐQRÔQWÑ?XÔ?Xð
Øð
ð 
ð 
r+   )ÚfreeÚ
predicatesÚ	constantsr²   s    r)   r¿  zExpression.variables¢  sN   € ð �yŠy‰{Œ{ð 
ð 
Ø—’Ñ(Ô(¨4¯>ª>Ñ+;Ô+;Ñ;ð
ñ 
ô 
ñ 
ð 	
r+   c                 ó2   — |                       d„ d„ ¦  «        S )zÅ
        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
        c                 ó*   — |                       ¦   «         S rº   )r  r  s    r)   rû  z!Expression.free.<locals>.<lambda>´  s   € �a—f’f‘h”h€ r+   c                 óP   — t          t          j        | t          ¦   «         ¦  «        S rº   r  r  s    r)   rû  z!Expression.free.<locals>.<lambda>´  s   € ­fµX´\À5Í#É%Ì%Ñ.PÔ.P€ r+   r  r²   s    r)   r  zExpression.free­  s&   € ð �zŠzØÐÐ PÐ Pñ
ô 
ð 	
r+   c                 ó2   — |                       d„ d„ ¦  «        S )zu
        Return a set of individual constants (non-predicates).
        :return: set of ``Variable`` objects
        c                 ó*   — |                       ¦   «         S rº   )r!  r  s    r)   rû  z&Expression.constants.<locals>.<lambda>½  s   € �a—k’k‘m”m€ r+   c                 óP   — t          t          j        | t          ¦   «         ¦  «        S rº   r  r  s    r)   rû  z&Expression.constants.<locals>.<lambda>½  s   € µ6½(¼,ÈÍsÉuÌuÑ3UÔ3U€ r+   r  r²   s    r)   r!  zExpression.constants·  s&   € ð
 �zŠzØ#Ð#Ð%UÐ%Uñ
ô 
ð 	
r+   c                 ó2   — |                       d„ d„ ¦  «        S )zu
        Return a set of predicates (constants, not variables).
        :return: set of ``Variable`` objects
        c                 ó*   — |                       ¦   «         S rº   )r   r  s    r)   rû  z'Expression.predicates.<locals>.<lambda>Æ  s   € �a—l’l‘n”n€ r+   c                 óP   — t          t          j        | t          ¦   «         ¦  «        S rº   r  r  s    r)   rû  z'Expression.predicates.<locals>.<lambda>Æ  s   € µF½8¼<ÈÕPSÑPUÔPUÑ4VÔ4V€ r+   r  r²   s    r)   r   zExpression.predicatesÀ  s&   € ð
 �zŠzØ$Ð$Ð&VÐ&Vñ
ô 
ð 	
r+   c                 ó:   — |                       d„ | j        ¦  «        S )zD
        :return: beta-converted version of this expression
        c                 ó*   — |                       ¦   «         S rº   )rà  r  s    r)   rû  z%Expression.simplify.<locals>.<lambda>Í  s   € ¨q¯zªz©|¬|€ r+   )rü  r!  r²   s    r)   rà  zExpression.simplifyÉ  s    € ð ×$Ò$Ð%;Ð%;¸T¼^ÑLÔLÐLr+   c                 ó    — t          |¦  «        S rº   )r  ró  s     r)   rÙ   z"Expression.make_VariableExpressionÏ  s   € Ý! (Ñ+Ô+Ð+r+   )FNrº   ©FT)%r,   r-   r.   r#  rf   rÄ  rÃ  re  rd  rÉ  rÆ  rÎ  rÐ  rÒ  rÕ  r×  r=  r:  rE  rä  rB  r“   rô  rl  rð  rš  r  r	  rü  r"  rH  r¿  r  r!  r   rà  rÙ   rN   r+   r)   rÁ  rÁ  Ë  s  € € € € € ØFÐFà�K‘M”M€MØ"- +¸Ð">Ñ">Ô">Ðàð9ð 9ð 9ñ „[ð9ðð ð ð2ð 2ð 2ð'ð 'ð 'ðð ð ð
*ð *ð *ð
)ð )ð )ð
*ð *ð *ð
*ð *ð *ð
ð ð ð ð  ð  ð$ð $ð $ð $ð$ð ð ð$6ð 6ð 6ð 6ð.$ð $ð $ð $,°tð $ð $ð $ð $ð
ð 
ð 
ð 
ð$ð ð ð ð0$ð $ð $ð"Fð Fð Fð5ð 5ð 5ðð ð ð	
ð 	
ð 	
ð
ð 
ð 
ð
ð 
ð 
ð
ð 
ð 
ðMð Mð Mð,ð ,ð ,ð ,ð ,r+   rÁ  i'  c                 ó¼   — d}| g}|rT|                      ¦   «         }|dz  }||k    rdS t          |t          ¦  «        s|                     |j        d„ ¦  «         |°TdS )a  Return ``True`` if ``expression`` has more than ``limit`` subexpressions.

    Counts iteratively (so deep expressions can't overflow the stack) and stops
    as soon as the limit is passed, so the check costs ``O(limit)`` even for an
    exponentially large expression.
    r   rj   Tc                 ó   — d S rº   rN   r  s    r)   rû  z_exceeds_size.<locals>.<lambda>ñ  s   € °4€ r+   F)rç   r|   r  r	  r¡   )rÑ   ÚlimitÚcountÚstackÚnodes        r)   Ú_exceeds_sizer5  à  s|   € ð €EØˆL€EØ
ð 9Ø�yŠy‰{Œ{ˆØ�‰
ˆØ�5Š=ˆ=Ø�4õ ˜$Õ :Ñ;Ô;ð 	9Ø�JŠJ�u”|Ð%7Ð%7Ñ8Ô8Ð8ð ð 9ð ˆ5r+   c                   óª   — e Zd ZdZd„ Zd„ Zed„ ¦   «         Zedfd„Z	d„ Z
d„ Zd	„ Zd
„ Zd„ Zej        Zd„ Zd„ Zed„ ¦   «         Zed„ ¦   «         Zd„ ZdS )r  a`  
    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)".
    c                 óª   — t          |t          ¦  «        sJ d|z  ¦   «         ‚t          |t          ¦  «        sJ d|z  ¦   «         ‚|| _        || _        dS )zˆ
        :param function: ``Expression``, for the function expression
        :param argument: ``Expression``, for the argument
        rÌ  N)r|   rÁ  r  r  r  s      r)   r‡   zApplicationExpression.__init__  s^   € õ
 ˜(¥JÑ/Ô/ÐUÐUÐ1JÈXÑ1UÑUÔUÐUÝ˜(¥JÑ/Ô/ÐUÐUÐ1JÈXÑ1UÑUÔUÐUØ ˆŒØ ˆŒˆˆr+   c                 ó‚  — | j                              ¦   «         }| j                             ¦   «         }t          |t          ¦  «        rc|j                             |j        |d¬¦  «        }t          |t          ¦  «        rt          dt          › d�¦  «        ‚|                     ¦   «         S |                      ||¦  «        S )NTræ  z;Refusing to beta-reduce: result exceeds MAX_SIMPLIFY_SIZE (z}) subexpressions; the expression may cause exponential blow-up (CWE-400). Raise nltk.sem.logic.MAX_SIMPLIFY_SIZE to allow it.)r  rà  r  r|   r
  rõ   rš  rô   r5  ÚMAX_SIMPLIFY_SIZEr+  r!  )r†   r  r  r—   s       r)   rà  zApplicationExpression.simplify  sË   € Ø”=×)Ò)Ñ+Ô+ˆØ”=×)Ò)Ñ+Ô+ˆÝ�hÕ 0Ñ1Ô1ð 	6ð ”]×*Ò*ØÔ! 8¸4ð +ñ ô ˆFõ ˜VÕ%6Ñ7Ô7ð Ý ðEÝ)ðEð Eð Eñô ð ð —?’?Ñ$Ô$Ð$à—>’> (¨HÑ5Ô5Ð5r+   c                 óp   — t          | j        j        t          ¦  «        r| j        j        j        S t
          S rº   )r|   r  r¯  rg  rþ   rl  r²   s    r)   r¯  zApplicationExpression.type5  s,   € å�d”mÔ(­+Ñ6Ô6ð 	Ø”=Ô%Ô,Ð,åˆOr+   Nc                 óÆ  — t          |t          ¦  «        sJ ‚|€t          t          ¦  «        }| j                             t          |¦  «         	 | j                             t          | j        j	        |¦  «        |¦  «         dS # t          $ rR}t          d| j        ›d| j        j	        ›d| j        ›d| j        j	        ›d| j        j	        j        ›d�¦  «        |‚d}~ww xY w)ú:see Expression._set_type()NzThe function 'z' is of type 'z' and cannot be applied to 'z' of type 'z"'.  Its argument must match type 'r«  )r|   r\  r   r  r  rð  rl  r  rg  r¯  r­  r¡  rý   )r†   r°  r•   r˜   s       r)   rð  zApplicationExpression._set_type<  s   € å˜*¥dÑ+Ô+Ð+Ð+Ð+àÐÝ#¥DÑ)Ô)ˆIàŒ×Ò¥¨)Ñ4Ô4Ð4ð	ØŒM×#Ò#Ý˜DœMÔ.°
Ñ;Ô;¸Yñô ð ð ð øõ 'ð 	ð 	ð 	Ý�-ð ”M�M�MØ”MÔ&Ð&Ð&Ø”M�M�MØ”MÔ&Ð&Ð&Ø”MÔ&Ô,Ð,Ð,ðñ
ô 
ð ð
øøøøð	øøøs   Á3B Â
C ÂACÃC c                 óÌ  ‡— t          ‰t          ¦  «        sJ d‰z  ¦   «         ‚|                      ¦   «         r|                      ¦   «         \  }}n| j        }| j        g}ˆfd„|g|z   D ¦   «         }g }|D ]A}|t          k    r4|r|D ]}|                     |¦  «        r nŒŒ,|                     |¦  «         ŒBt          |¦  «        dk    rt          |¦  «        d         S t          S )ú:see Expression.findtype()rø  c                 ó:   •— g | ]}|                      ‰¦  «        ‘ŒS rN   )rô  )r'   Úargrô   s     €r)   r*   z2ApplicationExpression.findtype.<locals>.<listcomp>_  s%   ø€ ÐEÐEÐE¨C�—’˜hÑ'Ô'ÐEÐEÐEr+   rj   r   )r|   rá   Úis_atomÚuncurryr  r  rl  rk  r¡   rž   r  )r†   rô   r  ÚargsÚfoundÚuniquero  Úus    `      r)   rô  zApplicationExpression.findtypeU  s  ø€ å˜(¥HÑ-Ô-ÐPÐPÐ/EÈÑ/PÑPÔPÐPØ�<Š<‰>Œ>ð 	#Ø!Ÿ\š\™^œ^‰NˆH�d�dð ”}ˆHØ”M�?ˆDàEÐEÐEÐE°H°:ÀÑ3DÐEÑEÔEˆàˆØð 	%ð 	%ˆAØ•HŠ}ˆ}Øð %Ø#ð "ð "˜ØŸ9š9 Q™<œ<ð "Ø!˜Eð"øð —M’M !Ñ$Ô$Ð$øåˆv‰;Œ;˜!ÒÐÝ˜‘<”< ”?Ð"åˆOr+   c                 ó¾   — t          | j        t          ¦  «        rt          ¦   «         }n| j                             ¦   «         }|| j                             ¦   «         z  S ©z:see: Expression.constants())r|   r  r  r  r!  r  )r†   Úfunction_constantss     r)   r!  zApplicationExpression.constantsp  sQ   € å�d”mÕ%?Ñ@Ô@ð 	;Ý!$¡¤ÐÐà!%¤×!8Ò!8Ñ!:Ô!:ÐØ! D¤M×$;Ò$;Ñ$=Ô$=Ñ=Ð=r+   c                 ó¼   — t          | j        t          ¦  «        r| j        j        h}n| j                             ¦   «         }|| j                             ¦   «         z  S ©z:see: Expression.predicates())r|   r  rÛ   rô   r   r  )r†   Úfunction_predss     r)   r   z ApplicationExpression.predicatesx  sR   € å�d”mÕ%7Ñ8Ô8ð 	8Ø"œmÔ4Ð5ˆNˆNà!œ]×5Ò5Ñ7Ô7ˆNØ ¤× 8Ò 8Ñ :Ô :Ñ:Ð:r+   c                 óT   —  | || j         ¦  «         || j        ¦  «        g¦  «        S ©z:see: Expression.visit())r  r  r  s      r)   r	  zApplicationExpression.visit€  s/   € àˆz˜8˜8 D¤MÑ2Ô2°H°H¸T¼]Ñ4KÔ4KÐLÑMÔMÐMr+   c                 ól   — t          |t          ¦  «        o| j        |j        k    o| j        |j        k    S rº   )r|   r  r  r  r8  s     r)   r:  zApplicationExpression.__eq__„  s7   € å�uÕ3Ñ4Ô4ð 0Ø” ¤Ò/ð0à” ¤Ò/ð	
r+   c                 óL  — |                       ¦   «         r7|                      ¦   «         \  }}d                     d„ |D ¦   «         ¦  «        }n| j        }d| j        z  }d|z  }d}t          |t          ¦  «        rYt          |j        t          ¦  «        r"t          |j        j        t          ¦  «        sd}n4t          |j        t          ¦  «        sd}nt          |t          ¦  «        rd}|rt          j        |z   t          j        z   }|t          j        z   |z   t          j        z   S )Nr   c              3   ó    K  — | ]	}d |z  V — Œ
dS ©r_  NrN   )r'   r@  s     r)   ú	<genexpr>z0ApplicationExpression.__str__.<locals>.<genexpr>‘  s&   è è € Ð:Ð:¨c˜t c™zÐ:Ð:Ð:Ð:Ð:Ð:r+   r_  FT)rA  rB  Újoinr  r  r|   r
  rõ   r  r  ÚBooleanExpressionr
   r8   r9   )r†   r  rC  Úarg_strÚfunction_strÚparenthesize_functions         r)   rH  zApplicationExpression.__str__�  s  € à�<Š<‰>Œ>ð 	+Ø!Ÿ\š\™^œ^‰NˆH�dØ—h’hÐ:Ð:°TÐ:Ñ:Ô:Ñ:Ô:ˆGˆGð ”}ˆHØ˜Tœ]Ñ*ˆGà˜h‘ˆØ %ÐÝ�hÕ 0Ñ1Ô1ð 	)Ý˜(œ-Õ)>Ñ?Ô?ð -Ý! (¤-Ô"8Õ:TÑUÔUð 1Ø,0Ð)øÝ ¤Õ/@ÑAÔAð -Ø(,Ð%øÝ˜Õ"7Ñ8Ô8ð 	)Ø$(Ð!à ð 	EÝ!œ;¨Ñ5½¼ÑDˆLà�fœkÑ)¨GÑ3µf´lÑBÐBr+   c                 óÀ   — | j         }| j        g}t          |t          ¦  «        r7|                     d|j        ¦  «         |j         }t          |t          ¦  «        °7||fS )zh
        Uncurry this application expression

        return: A tuple (base-function, arg-list)
        r   )r  r  r|   r  Úinsert)r†   r  rC  s      r)   rB  zApplicationExpression.uncurry§  sh   € ð ”=ˆØ”ˆˆÝ˜Õ#8Ñ9Ô9ð 	)à�KŠK˜˜8Ô,Ñ-Ô-Ð-ØÔ(ˆHõ ˜Õ#8Ñ9Ô9ð 	)ð ˜$ÐÐr+   c                 ó6   — |                       ¦   «         d         S )z¯
        Return uncurried base-function.
        If this is an atom, then the result will be a variable expression.
        Otherwise, it will be a lambda expression.
        r   ©rB  r²   s    r)   ÚpredzApplicationExpression.predµ  s   € ð �|Š|‰~Œ~˜aÔ Ð r+   c                 ó6   — |                       ¦   «         d         S )z+
        Return uncurried arg-list
        rj   r\  r²   s    r)   rC  zApplicationExpression.args¾  s   € ð
 �|Š|‰~Œ~˜aÔ Ð r+   c                 ó6   — t          | j        t          ¦  «        S )zk
        Is this expression an atom (as opposed to a lambda expression applied
        to a term)?
        )r|   r]  r  r²   s    r)   rA  zApplicationExpression.is_atomÅ  s   € õ
 ˜$œ)Õ%?Ñ@Ô@Ð@r+   )r,   r-   r.   r#  r‡   rà  r—  r¯  rl  rð  rô  r!  r   r	  r:  rÁ  rE  rH  rB  r]  rC  rA  rN   r+   r)   r  r  õ  s5  € € € € € ðð ð8!ð !ð !ð6ð 6ð 6ð2 ðð ñ „Xðð $,°tð ð ð ð ð2ð ð ð6>ð >ð >ð;ð ;ð ;ðNð Nð Nð
ð 
ð 
ð Ô"€HðCð Cð Cð4 ð  ð  ð ð!ð !ñ „Xð!ð ð!ð !ñ „Xð!ðAð Að Að Að Ar+   r  c                   ó^   — e Zd ZdZd„ Zd„ Zdd„Zedfd„Zd	„ Z	d
„ Z
d„ Zd„ Zej        Zd„ ZdS )r  zDThis class represents a variable to be used as a predicate or entityc                 óX   — t          |t          ¦  «        sJ d|z  ¦   «         ‚|| _        dS )zA
        :param variable: ``Variable``, for the variable
        rø  N)r|   rá   rô   ró  s     r)   r‡   z#AbstractVariableExpression.__init__Ñ  s3   € õ ˜(¥HÑ-Ô-ÐPÐPÐ/EÈÑ/PÑPÔPÐPØ ˆŒˆˆr+   c                 ó   — | S rº   rN   r²   s    r)   rà  z#AbstractVariableExpression.simplifyØ  s   € Øˆr+   FTc                 ó¨   — t          |t          ¦  «        sJ d|z  ¦   «         ‚t          |t          ¦  «        sJ d|z  ¦   «         ‚| j        |k    r|S | S )ú:see: Expression.replace()z%s is not an VariablerÌ  )r|   rá   rÁ  rô   rý  s        r)   rš  z"AbstractVariableExpression.replaceÛ  sn   € å˜(¥HÑ-Ô-ÐQÐQÐ/FÈÑ/QÑQÔQÐQÝ˜*¥jÑ1Ô1ð 	
ð 	
Ø%¨
Ñ2ñ	
ô 	
ð 	
ð Œ=˜HÒ$Ð$ØÐàˆKr+   Nc                 óf  — t          |t          ¦  «        sJ ‚|€t          t          ¦  «        }|}|| j        j                 D ]-}|j                             |¦  «        }|st          | ¦  «        ‚Œ.|| j        j                  	                    | ¦  «         || j        j                 D ]	}||_        Œ
dS ©r<  N)
r|   r\  r   r  rô   r  r¯  rn  r©  r¡   ©r†   r°  r•   Ú
resolutionrñ  s        r)   rð  z$AbstractVariableExpression._set_typeæ  sÅ   € å˜*¥dÑ+Ô+Ð+Ð+Ð+àÐÝ#¥DÑ)Ô)ˆIàˆ
Ø˜tœ}Ô1Ô2ð 	?ð 	?ˆEØœ×+Ò+¨JÑ7Ô7ˆJØð ?Ý8¸Ñ>Ô>Ð>ð?ð 	�$”-Ô$Ô%×,Ò,¨TÑ2Ô2Ð2Ø˜tœ}Ô1Ô2ð 	$ð 	$ˆEØ#ˆEŒJˆJð	$ð 	$r+   c                 óx   — t          |t          ¦  «        sJ d|z  ¦   «         ‚| j        |k    r| j        S t          S ©r>  rø  )r|   rá   rô   r¯  rl  ró  s     r)   rô  z#AbstractVariableExpression.findtype÷  s@   € å˜(¥HÑ-Ô-ÐPÐPÐ/EÈÑ/PÑPÔPÐPØŒ=˜HÒ$Ð$Ø”9ÐåˆOr+   c                 ó   — t          ¦   «         S rK  ©r  r²   s    r)   r   z%AbstractVariableExpression.predicatesÿ  ó   € å‰uŒuˆr+   c                 óL   — t          |t          ¦  «        o| j        |j        k    S )zTAllow equality between instances of ``AbstractVariableExpression``
        subtypes.)r|   r  rô   r8  s     r)   r:  z!AbstractVariableExpression.__eq__  s(   € õ �uÕ8Ñ9Ô9ð 0Ø” ¤Ò/ð	
r+   c                 óZ   — t          |t          ¦  «        st          ‚| j        |j        k     S rº   )r|   r  r<  rô   r8  s     r)   r=  z!AbstractVariableExpression.__lt__  s)   € Ý˜%Õ!;Ñ<Ô<ð 	ÝˆOØŒ}˜uœ~Ò-Ð-r+   c                 ó   — d| j         z  S r^  r  r²   s    r)   rH  z"AbstractVariableExpression.__str__  s   € Ø�d”mÑ#Ð#r+   r.  )r,   r-   r.   r#  r‡   rà  rš  rl  rð  rô  r   r:  r=  rÁ  rE  rH  rN   r+   r)   r  r  Í  s¼   € € € € € àNÐNð!ð !ð !ðð ð ð	ð 	ð 	ð 	ð $,°tð $ð $ð $ð $ð"ð ð ðð ð ð
ð 
ð 
ð.ð .ð .ð
 Ô"€Hð$ð $ð $ð $ð $r+   r  c                   óH   — e Zd ZdZedfd„Zd„ Z eee¦  «        Zd„ Z	d„ Z
dS )r  zˆThis class represents variables that take the form of a single lowercase
    character (other than 'e') followed by zero or more digits.Nc                 ó
  — t          |t          ¦  «        sJ ‚|€t          t          ¦  «        }|                     t
          ¦  «        st          | |t
          ¦  «        ‚|| j        j                  	                    | ¦  «         dS rf  )
r|   r\  r   r  rk  r›  r³  rô   r  r¡   rö  s      r)   rð  z&IndividualVariableExpression._set_type  sx   € å˜*¥dÑ+Ô+Ð+Ð+Ð+àÐÝ#¥DÑ)Ô)ˆIà×!Ò!¥+Ñ.Ô.ð 	FÝ& t¨Z½ÑEÔEÐEà�$”-Ô$Ô%×,Ò,¨TÑ2Ô2Ð2Ð2Ð2r+   c                 ó   — t           S rº   )r›  r²   s    r)   Ú	_get_typez&IndividualVariableExpression._get_type&  s   € ÝÐr+   c                 ó   — | j         hS ©z:see: Expression.free()r  r²   s    r)   r  z!IndividualVariableExpression.free+  ó   € à”ˆÐr+   c                 ó   — t          ¦   «         S rH  rl  r²   s    r)   r!  z&IndividualVariableExpression.constants/  rm  r+   )r,   r-   r.   r#  rl  rð  rt  r—  r¯  r  r!  rN   r+   r)   r  r    s{   € € € € € ðCð Cð $,°tð 
3ð 
3ð 
3ð 
3ðð ð ð ˆ8�I˜yÑ)Ô)€Dðð ð ðð ð ð ð r+   r  c                   ó"   — e Zd ZdZeZd„ Zd„ ZdS )rÚ   zwThis class represents variables that take the form of a single uppercase
    character followed by zero or more digits.c                 ó   — | j         hS rv  r  r²   s    r)   r  zFunctionVariableExpression.free:  rw  r+   c                 ó   — t          ¦   «         S rH  rl  r²   s    r)   r!  z$FunctionVariableExpression.constants>  rm  r+   N)r,   r-   r.   r#  rl  r¯  r  r!  rN   r+   r)   rÚ   rÚ   4  sC   € € € € € ð2ð 2ð €Dðð ð ðð ð ð ð r+   rÚ   c                   ó   — e Zd ZdZeZdS )r  z{This class represents variables that take the form of a single lowercase
    'e' character followed by zero or more digits.N)r,   r-   r.   r#  Ú
EVENT_TYPEr¯  rN   r+   r)   r  r  C  s   € € € € € ð6ð 6ð €D€D€Dr+   r  c                   ó.   — e Zd ZdZeZedfd„Zd„ Zd„ Z	dS )rÛ   ztThis class represents variables that do not take the form of a single
    character followed by zero or more digits.Nc                 óà  — t          |t          ¦  «        sJ ‚|€t          t          ¦  «        }|t          k    rt
          }n,|}| j        t
          k    r|                     | j        ¦  «        }|| j        j	                 D ]-}|j                             |¦  «        }|st          | ¦  «        ‚Œ.|| j        j	                                      | ¦  «         || j        j	                 D ]	}||_        Œ
dS rf  )r|   r\  r   r  rl  r›  r¯  rn  rô   r  r©  r¡   rg  s        r)   rð  zConstantExpression._set_typeP  sù   € å˜*¥dÑ+Ô+Ð+Ð+Ð+àÐÝ#¥DÑ)Ô)ˆIà�Ò!Ð!å$ˆJˆJà#ˆJØŒy�KÒ'Ð'Ø'×/Ò/°´	Ñ:Ô:�
à˜tœ}Ô1Ô2ð 	?ð 	?ˆEØœ×+Ò+¨JÑ7Ô7ˆJØð ?Ý8¸Ñ>Ô>Ð>ð?ð 	�$”-Ô$Ô%×,Ò,¨TÑ2Ô2Ð2Ø˜tœ}Ô1Ô2ð 	$ð 	$ˆEØ#ˆEŒJˆJð	$ð 	$r+   c                 ó   — t          ¦   «         S rv  rl  r²   s    r)   r  zConstantExpression.freeh  rm  r+   c                 ó   — | j         hS rH  r  r²   s    r)   r!  zConstantExpression.constantsl  rw  r+   )
r,   r-   r.   r#  r›  r¯  rl  rð  r  r!  rN   r+   r)   rÛ   rÛ   J  s\   € € € € € ð2ð 2ð €Dà#+°tð $ð $ð $ð $ð0ð ð ðð ð ð ð r+   rÛ   c                 ó6  — t          | t          ¦  «        sJ d| z  ¦   «         ‚t          | j        ¦  «        rt	          | ¦  «        S t          | j        ¦  «        rt          | ¦  «        S t          | j        ¦  «        rt          | ¦  «        S t          | ¦  «        S )z”
    This is a factory method that instantiates and returns a subtype of
    ``AbstractVariableExpression`` appropriate for the given variable.
    rø  )
r|   rá   rN  r  r  rO  rÚ   rP  r  rÛ   r  s    r)   r  r  q  s–   € õ
 �h¥Ñ)Ô)ÐLÐLÐ+AÀHÑ+LÑLÔLÐLÝ�”ÑÔð ,Ý+¨HÑ5Ô5Ð5Ý	�H”MÑ	"Ô	"ð ,Ý)¨(Ñ3Ô3Ð3Ý	�X”]Ñ	#Ô	#ð ,Ý& xÑ0Ô0Ð0å! (Ñ+Ô+Ð+r+   c                   óR   — e Zd ZdZd„ Zdd„Zd„ Zd„ Zd„ Zd	„ Z	d
„ Z
d„ Zej        ZdS )ÚVariableBinderExpressionz‘This an abstract class for any Expression that binds a variable in an
    Expression.  This includes LambdaExpressions and Quantified Expressionsc                 óª   — t          |t          ¦  «        sJ d|z  ¦   «         ‚t          |t          ¦  «        sJ d|z  ¦   «         ‚|| _        || _        dS )zs
        :param variable: ``Variable``, for the variable
        :param term: ``Expression``, for the term
        rø  rÌ  N)r|   rá   rÁ  rô   rõ   r  s      r)   r‡   z!VariableBinderExpression.__init__…  s^   € õ
 ˜(¥HÑ-Ô-ÐPÐPÐ/EÈÑ/PÑPÔPÐPÝ˜$¥
Ñ+Ô+ÐMÐMÐ-FÈÑ-MÑMÔMÐMØ ˆŒØˆŒ	ˆ	ˆ	r+   FTc           	      óN  — t          |t          ¦  «        sJ d|z  ¦   «         ‚t          |t          ¦  «        sJ d|z  ¦   «         ‚| j        |k    r\|rXt          |t          ¦  «        sJ d|z  ¦   «         ‚|                      |j        | j                             ||d|¦  «        ¦  «        S | S |rC| j        |                     ¦   «         v r(|  	                    t          | j        ¬¦  «        ¦  «        } |                      | j        | j                             ||||¦  «        ¦  «        S )rd  rø  rÌ  z&%s is not a AbstractVariableExpressionT)rR  )r|   rá   rÁ  rô   r  r!  rõ   rš  r  rç  rV  rý  s        r)   rš  z VariableBinderExpression.replace�  sO  € å˜(¥HÑ-Ô-ÐPÐPÐ/EÈÑ/PÑPÔPÐPÝ˜*¥jÑ1Ô1ð 	
ð 	
Ø%¨
Ñ2ñ	
ô 	
ð 	
ð Œ=˜HÒ$Ð$Øð 	Ý! *Õ.HÑIÔIð ð Ø<¸zÑIñô ð ð —~’~ØÔ'Ø”I×%Ò% h°
¸DÀ-ÑPÔPñô ð ð
 �ð ð R ¤°*·/²/Ñ2CÔ2CÐ!CÐ!CØ×)Ò)­/À$Ä-Ð*PÑ*PÔ*PÑQÔQ�ð —>’>Ø”Ø”	×!Ò! (¨J¸À}ÑUÔUñô ð r+   c           	      óÊ   — t          |t          ¦  «        sJ d|z  ¦   «         ‚|                      || j                             | j        t          |¦  «        d¦  «        ¦  «        S )zµRename all occurrences of the variable introduced by this variable
        binder in the expression to ``newvar``.
        :param newvar: ``Variable``, for the new variable
        rø  T)r|   rá   r!  rõ   rš  rô   r  )r†   Únewvars     r)   rç  z&VariableBinderExpression.alpha_convert­  sc   € õ
 ˜&¥(Ñ+Ô+ÐLÐLÐ-CÀfÑ-LÑLÔLÐLØ�~Š~Ø�D”I×%Ò% d¤mÕ5GÈÑ5OÔ5OÐQUÑVÔVñ
ô 
ð 	
r+   c                 óF   — | j                              ¦   «         | j        hz
  S rv  )rõ   r  rô   r²   s    r)   r  zVariableBinderExpression.free·  s   € àŒy�~Š~ÑÔ 4¤= /Ñ1Ð1r+   c                 óž   — t          |t          ¦  «        sJ d|z  ¦   «         ‚|| j        k    rt          S | j                             |¦  «        S rj  )r|   rá   rô   rl  rõ   rô  ró  s     r)   rô  z!VariableBinderExpression.findtype»  sN   € å˜(¥HÑ-Ô-ÐPÐPÐ/EÈÑ/PÑPÔPÐPØ�t”}Ò$Ð$ÝˆOà”9×%Ò% hÑ/Ô/Ð/r+   c                 ó6   —  | || j         ¦  «        g¦  «        S rN  ©rõ   r  s      r)   r	  zVariableBinderExpression.visitÃ  ó!   € àˆz˜8˜8 D¤IÑ.Ô.Ð/Ñ0Ô0Ð0r+   c                 ó@   —  || j          || j        ¦  «        ¦  «        S )z#:see: Expression.visit_structured())rô   rõ   r  s      r)   rü  z)VariableBinderExpression.visit_structuredÇ  s"   € àˆz˜$œ-¨¨°$´)Ñ)<Ô)<Ñ=Ô=Ð=r+   c                 ó  — t          | |j        ¦  «        st          || j        ¦  «        r]| j        |j        k    r| j        |j        k    S t	          | j        ¦  «        }| j        |j                             |j        |¦  «        k    S dS )z~Defines equality modulo alphabetic variance.  If we are comparing
        \x.M  and \y.N, then check equality of M and N[x/y].F)r|   r!  rô   rõ   r  rš  )r†   r9  Úvarexs      r)   r:  zVariableBinderExpression.__eq__Ë  s€   € õ �d˜EœOÑ,Ô,ð 	µ
¸5À$Ä.Ñ0QÔ0Qð 	ØŒ} ¤Ò.Ð.Ø”y E¤JÒ.Ð.õ +¨4¬=Ñ9Ô9�Ø”y E¤J×$6Ò$6°u´~ÀuÑ$MÔ$MÒMÐMà�5r+   Nr.  )r,   r-   r.   r#  r‡   rš  rç  r  rô  r	  rü  r:  rÁ  rE  rN   r+   r)   r„  r„  �  s¡   € € € € € ðOð Oðð ð ðð ð ð ð<
ð 
ð 
ð2ð 2ð 2ð0ð 0ð 0ð1ð 1ð 1ð>ð >ð >ðð ð ð Ô"€H€H€Hr+   r„  c                   ó6   — e Zd Zed„ ¦   «         Zedfd„Zd„ ZdS )r
  c                 óp   — t          | j                             | j        ¦  «        | j        j        ¦  «        S rº   )rg  rõ   rô  rô   r¯  r²   s    r)   r¯  zLambdaExpression.typeÜ  s(   € å˜4œ9×-Ò-¨d¬mÑ<Ô<¸d¼i¼nÑMÔMÐMr+   Nc                 óô   — t          |t          ¦  «        sJ ‚|€t          t          ¦  «        }| j                             |j        |¦  «         | j                             |¦  «        st          | |¦  «        ‚dS rf  )
r|   r\  r   r  rõ   rð  rþ   r¯  rn  r­  rö  s      r)   rð  zLambdaExpression._set_typeà  sx   € å˜*¥dÑ+Ô+Ð+Ð+Ð+àÐÝ#¥DÑ)Ô)ˆIàŒ	×Ò˜JÔ-¨yÑ9Ô9Ð9ØŒy× Ò  Ñ,Ô,ð 	<Ý)¨$°
Ñ;Ô;Ð;ð	<ð 	<r+   c                 ó   — | j         g}| j        }|j        | j        k    r1|                     |j         ¦  «         |j        }|j        | j        k    °1t          j        d                     d„ |D ¦   «         ¦  «        z   t          j        z   d|z  z   S )Nr‰   c              3   ó    K  — | ]	}d |z  V — Œ
dS rR  rN   ©r'   rU  s     r)   rS  z+LambdaExpression.__str__.<locals>.<genexpr>ó  ó&   è è € Ð3Ð3 A�t˜a‘xÐ3Ð3Ð3Ð3Ð3Ð3r+   r_  )rô   rõ   r!  r¡   r
   r/   rT  r7   ©r†   r¿  rõ   s      r)   rH  zLambdaExpression.__str__ë  s–   € Ø”]�Oˆ	ØŒyˆØŒn ¤Ò.Ð.Ø×Ò˜Tœ]Ñ+Ô+Ð+Ø”9ˆDð Œn ¤Ò.Ð.õ ŒMØ�hŠhÐ3Ð3¨Ð3Ñ3Ô3Ñ3Ô3ñ4åŒjñð �T‰kñð	
r+   ©r,   r-   r.   r—  r¯  rl  rð  rH  rN   r+   r)   r
  r
  Û  sZ   € € € € € ØðNð Nñ „XðNð $,°tð 	<ð 	<ð 	<ð 	<ð
ð 
ð 
ð 
ð 
r+   r
  c                   ó6   — e Zd Zed„ ¦   «         Zedfd„Zd„ ZdS )ÚQuantifiedExpressionc                 ó   — t           S rº   ©rœ  r²   s    r)   r¯  zQuantifiedExpression.typeú  ó   € åÐr+   Nc                 ó   — t          |t          ¦  «        sJ ‚|€t          t          ¦  «        }|                     t
          ¦  «        st          | |t
          ¦  «        ‚| j                             t
          |¦  «         dS rf  ©	r|   r\  r   r  rk  rœ  r³  rõ   rð  rö  s      r)   rð  zQuantifiedExpression._set_typeþ  ór   € å˜*¥dÑ+Ô+Ð+Ð+Ð+àÐÝ#¥DÑ)Ô)ˆIà×!Ò!¥*Ñ-Ô-ð 	EÝ& t¨Z½ÑDÔDÐDØŒ	×Ò�J¨	Ñ2Ô2Ð2Ð2Ð2r+   c                 ó6  — | j         g}| j        }|j        | j        k    r1|                     |j         ¦  «         |j        }|j        | j        k    °1|                      ¦   «         dz   d                     d„ |D ¦   «         ¦  «        z   t          j        z   d|z  z   S )Nr‰   c              3   ó    K  — | ]	}d |z  V — Œ
dS rR  rN   r–  s     r)   rS  z/QuantifiedExpression.__str__.<locals>.<genexpr>  r—  r+   r_  )rô   rõ   r!  r¡   ÚgetQuantifierrT  r
   r7   r˜  s      r)   rH  zQuantifiedExpression.__str__	  sª   € Ø”]�Oˆ	ØŒyˆØŒn ¤Ò.Ð.Ø×Ò˜Tœ]Ñ+Ô+Ð+Ø”9ˆDð Œn ¤Ò.Ð.ð ×ÒÑ Ô Øñà�hŠhÐ3Ð3¨Ð3Ñ3Ô3Ñ3Ô3ñ4õ Œjñð �T‰kñ	ð	
r+   r™  rN   r+   r)   r›  r›  ù  sW   € € € € € Øðð ñ „Xðð $,°tð 	3ð 	3ð 	3ð 	3ð
ð 
ð 
ð 
ð 
r+   r›  c                   ó   — e Zd Zd„ ZdS )rï   c                 ó   — t           j        S rº   )r
   r1   r²   s    r)   r¤  zExistsExpression.getQuantifier  s
   € ÝŒ}Ðr+   N©r,   r-   r.   r¤  rN   r+   r)   rï   rï     s#   € € € € € ðð ð ð ð r+   rï   c                   ó   — e Zd Zd„ ZdS )rð   c                 ó   — t           j        S rº   )r
   r3   r²   s    r)   r¤  zAllExpression.getQuantifier  ó
   € ÝŒzÐr+   Nr§  rN   r+   r)   rð   rð     s#   € € € € € ðð ð ð ð r+   rð   c                   ó   — e Zd Zd„ ZdS )rñ   c                 ó   — t           j        S rº   )r
   r5   r²   s    r)   r¤  zIotaExpression.getQuantifier#  s
   € ÝŒ{Ðr+   Nr§  rN   r+   r)   rñ   rñ   "  s#   € € € € € ðð ð ð ð r+   rñ   c                   ób   — e Zd Zd„ Zed„ ¦   «         Zedfd„Zd„ Zd„ Z	d„ Z
d„ Zej        Zd	„ ZdS )
r×   c                 óX   — t          |t          ¦  «        sJ d|z  ¦   «         ‚|| _        d S rË  )r|   rÁ  rõ   )r†   rõ   s     r)   r‡   zNegatedExpression.__init__(  s1   € Ý˜$¥
Ñ+Ô+ÐMÐMÐ-FÈÑ-MÑMÔMÐMØˆŒ	ˆ	ˆ	r+   c                 ó   — t           S rº   r�  r²   s    r)   r¯  zNegatedExpression.type,  rž  r+   Nc                 ó   — t          |t          ¦  «        sJ ‚|€t          t          ¦  «        }|                     t
          ¦  «        st          | |t
          ¦  «        ‚| j                             t
          |¦  «         dS rf  r   rö  s      r)   rð  zNegatedExpression._set_type0  r¡  r+   c                 óz   — t          |t          ¦  «        sJ d|z  ¦   «         ‚| j                             |¦  «        S )Nrø  )r|   rá   rõ   rô  ró  s     r)   rô  zNegatedExpression.findtype;  s<   € Ý˜(¥HÑ-Ô-ÐPÐPÐ/EÈÑ/PÑPÔPÐPØŒy×!Ò! (Ñ+Ô+Ð+r+   c                 ó6   —  | || j         ¦  «        g¦  «        S rN  rŒ  r  s      r)   r	  zNegatedExpression.visit?  r�  r+   c                 ó   — | j         S )z:see: Expression.negate()rŒ  r²   s    r)   rÐ  zNegatedExpression.negateC  s
   € àŒyÐr+   c                 óL   — t          |t          ¦  «        o| j        |j        k    S rº   )r|   r×   rõ   r8  s     r)   r:  zNegatedExpression.__eq__G  s!   € Ý˜%Õ!2Ñ3Ô3ÐO¸¼	ÀUÄZÒ8OÐOr+   c                 ó0   — t           j        d| j        z  z   S r^  )r
   r;   rõ   r²   s    r)   rH  zNegatedExpression.__str__L  s   € ÝŒz˜D 4¤9Ñ,Ñ,Ð,r+   )r,   r-   r.   r‡   r—  r¯  rl  rð  rô  r	  rÐ  r:  rÁ  rE  rH  rN   r+   r)   r×   r×   '  s±   € € € € € ðð ð ð ðð ñ „Xðð $,°tð 	3ð 	3ð 	3ð 	3ð,ð ,ð ,ð1ð 1ð 1ðð ð ðPð Pð Pð Ô"€Hð-ð -ð -ð -ð -r+   r×   c                   óV   — e Zd Zd„ Zed„ ¦   «         Zd„ Zd„ Zd„ Ze	j
        Z
d„ Zd„ ZdS )	ÚBinaryExpressionc                 óª   — t          |t          ¦  «        sJ d|z  ¦   «         ‚t          |t          ¦  «        sJ d|z  ¦   «         ‚|| _        || _        d S rË  )r|   rÁ  rý   rþ   rü   s      r)   r‡   zBinaryExpression.__init__Q  s\   € Ý˜%¥Ñ,Ô,ÐOÐOÐ.GÈ%Ñ.OÑOÔOÐOÝ˜&¥*Ñ-Ô-ÐQÐQÐ/HÈ6Ñ/QÑQÔQÐQØˆŒ
ØˆŒˆˆr+   c                 ó   — t           S rº   r�  r²   s    r)   r¯  zBinaryExpression.typeW  rž  r+   c                 óü   — t          |t          ¦  «        sJ d|z  ¦   «         ‚| j                             |¦  «        }| j                             |¦  «        }||k    s|t
          k    r|S |t
          k    r|S t
          S rj  )r|   rá   rý   rô  rþ   rl  )r†   rô   ro  r,  s       r)   rô  zBinaryExpression.findtype[  sy   € å˜(¥HÑ-Ô-ÐPÐPÐ/EÈÑ/PÑPÔPÐPØŒJ×Ò Ñ)Ô)ˆØŒK× Ò  Ñ*Ô*ˆØ�Š6ˆ6�Q�(’]�]ØˆHØ•(Š]ˆ]ØˆHåˆOr+   c                 óT   —  | || j         ¦  «         || j        ¦  «        g¦  «        S rN  )rý   rþ   r  s      r)   r	  zBinaryExpression.visitg  s/   € àˆz˜8˜8 D¤JÑ/Ô/°°¸$¼+Ñ1FÔ1FÐGÑHÔHÐHr+   c                 ó–   — t          | |j        ¦  «        st          || j        ¦  «        o| j        |j        k    o| j        |j        k    S rº   )r|   r!  rý   rþ   r8  s     r)   r:  zBinaryExpression.__eq__k  sI   € å˜˜eœoÑ.Ô.ÐSµ*¸UÀDÄNÑ2SÔ2Sð ,Ø”
˜eœkÒ)ð,à”˜uœ|Ò+ð	
r+   c                 óÞ   — |                       | j        ¦  «        }|                       | j        ¦  «        }t          j        |z   dz   |                      ¦   «         z   dz   |z   t          j        z   S )Nr‰   )Ú
_str_subexrý   rþ   r
   r8   ÚgetOpr9   rü   s      r)   rH  zBinaryExpression.__str__t  sX   € Ø—’ ¤
Ñ+Ô+ˆØ—’ ¤Ñ-Ô-ˆÝŒ{˜UÑ" SÑ(¨4¯:ª:©<¬<Ñ7¸#Ñ=ÀÑFÍÌÑUÐUr+   c                 ó   — d|z  S r^  rN   )r†   Úsubexs     r)   r¾  zBinaryExpression._str_subexy  s   € Ø�e‰|Ðr+   N)r,   r-   r.   r‡   r—  r¯  rô  r	  r:  rÁ  rE  rH  r¾  rN   r+   r)   r·  r·  P  s™   € € € € € ðð ð ð ðð ñ „Xðð
ð 
ð 
ðIð Ið Ið
ð 
ð 
ð Ô"€HðVð Vð Vð
ð ð ð ð r+   r·  c                   ó   — e Zd Zedfd„ZdS )rU  Nc                 ó@  — t          |t          ¦  «        sJ ‚|€t          t          ¦  «        }|                     t
          ¦  «        st          | |t
          ¦  «        ‚| j                             t
          |¦  «         | j	                             t
          |¦  «         dS rf  )
r|   r\  r   r  rk  rœ  r³  rý   rð  rþ   rö  s      r)   rð  zBooleanExpression._set_type~  sŠ   € å˜*¥dÑ+Ô+Ð+Ð+Ð+àÐÝ#¥DÑ)Ô)ˆIà×!Ò!¥*Ñ-Ô-ð 	EÝ& t¨Z½ÑDÔDÐDØŒ
×Ò�Z¨Ñ3Ô3Ð3ØŒ×Ò�j¨)Ñ4Ô4Ð4Ð4Ð4r+   )r,   r-   r.   rl  rð  rN   r+   r)   rU  rU  }  s-   € € € € € Ø#+°tð 
5ð 
5ð 
5ð 
5ð 
5ð 
5r+   rU  c                   ó   — e Zd ZdZd„ Zd„ ZdS )r  z"This class represents conjunctionsc                 ó   — t           j        S rº   )r
   r=   r²   s    r)   r¿  zAndExpression.getOpŽ  rª  r+   c                 óN   — d|z  }t          |t          ¦  «        r
|dd…         S |S ©Nr_  rj   r™  )r|   r  ©r†   rÁ  r,  s      r)   r¾  zAndExpression._str_subex‘  s/   € Ø�5‰LˆÝ�e�]Ñ+Ô+ð 	Ø�Q�r�T”7ˆNØˆr+   N©r,   r-   r.   r#  r¿  r¾  rN   r+   r)   r  r  ‹  s8   € € € € € Ø,Ð,ðð ð ðð ð ð ð r+   r  c                   ó   — e Zd ZdZd„ Zd„ ZdS )r  z"This class represents disjunctionsc                 ó   — t           j        S rº   )r
   r?   r²   s    r)   r¿  zOrExpression.getOp›  ó
   € ÝŒyÐr+   c                 óN   — d|z  }t          |t          ¦  «        r
|dd…         S |S rÇ  )r|   r  rÈ  s      r)   r¾  zOrExpression._str_subexž  s/   € Ø�5‰LˆÝ�e�\Ñ*Ô*ð 	Ø�Q�r�T”7ˆNØˆr+   NrÉ  rN   r+   r)   r  r  ˜  s8   € € € € € Ø,Ð,ðð ð ðð ð ð ð r+   r  c                   ó   — e Zd ZdZd„ ZdS )r  z"This class represents implicationsc                 ó   — t           j        S rº   )r
   rA   r²   s    r)   r¿  zImpExpression.getOp¨  rª  r+   N©r,   r-   r.   r#  r¿  rN   r+   r)   r  r  ¥  s)   € € € € € Ø,Ð,ðð ð ð ð r+   r  c                   ó   — e Zd ZdZd„ ZdS )r  z$This class represents biconditionalsc                 ó   — t           j        S rº   )r
   rC   r²   s    r)   r¿  zIffExpression.getOp¯  rª  r+   NrÐ  rN   r+   r)   r  r  ¬  s)   € € € € € Ø.Ð.ðð ð ð ð r+   r  c                   ó$   — e Zd ZdZedfd„Zd„ ZdS )rû   z:This class represents equality expressions like "(x = y)".Nc                 ó@  — t          |t          ¦  «        sJ ‚|€t          t          ¦  «        }|                     t
          ¦  «        st          | |t
          ¦  «        ‚| j                             t          |¦  «         | j
                             t          |¦  «         dS rf  )r|   r\  r   r  rk  rœ  r³  rý   rð  r›  rþ   rö  s      r)   rð  zEqualityExpression._set_type¶  sŠ   € å˜*¥dÑ+Ô+Ð+Ð+Ð+àÐÝ#¥DÑ)Ô)ˆIà×!Ò!¥*Ñ-Ô-ð 	EÝ& t¨Z½ÑDÔDÐDØŒ
×Ò�[¨)Ñ4Ô4Ð4ØŒ×Ò�k¨9Ñ5Ô5Ð5Ð5Ð5r+   c                 ó   — t           j        S rº   )r
   rE   r²   s    r)   r¿  zEqualityExpression.getOpÂ  rÌ  r+   )r,   r-   r.   r#  rl  rð  r¿  rN   r+   r)   rû   rû   ³  sB   € € € € € ØDÐDà#+°tð 
6ð 
6ð 
6ð 
6ðð ð ð ð r+   rû   c                   ó   — e Zd Zd„ ZdS )r�   c                 óJ   — || _         t                               | |¦  «         d S rº   )r’   Ú	Exceptionr‡   ©r†   r’   rÀ   s      r)   r‡   z#LogicalExpressionException.__init__Ê  s%   € ØˆŒ
Ý×Ò˜4 Ñ)Ô)Ð)Ð)Ð)r+   N©r,   r-   r.   r‡   rN   r+   r)   r�   r�   É  s#   € € € € € ð*ð *ð *ð *ð *r+   r�   c                   ó   — e Zd Zdd„ZdS )rŽ   Nc                 óˆ   — |r|r
d|›d|›d�}n|rd|z  }|r|d|z   z  }nd|z  }t                                | ||¦  «         d S )NzUnexpected token: 'z'.  Expected token 'r«  zUnexpected token: '%s'.z  r  ©r�   r‡   )r†   r’   Ú
unexpectedr  rÀ   r™   s         r)   r‡   z!UnexpectedTokenException.__init__Ð  s€   € Øð 
	4˜(ð 
	4ð 
	4à�
�
Ø��ðˆCˆCð ð 	4Ø+¨jÑ8ˆCØð &Ø�t˜g‘~Ñ%�øà(¨8Ñ3ˆCÝ"×+Ò+¨D°%¸Ñ=Ô=Ð=Ð=Ð=r+   )NNNrÚ  rN   r+   r)   rŽ   rŽ   Ï  s(   € € € € € ð>ð >ð >ð >ð >ð >r+   rŽ   c                   ó   — e Zd Zdd„ZdS )r·   Nc                 óL   — |sd}t                                | |d|z   ¦  «         d S )NzMore tokens expected.zEnd of input found.  rÝ  rÙ  s      r)   r‡   z$ExpectedMoreTokensException.__init__à  s>   € Øð 	.Ø-ˆGÝ"×+Ò+Ø�%Ð0°7Ñ:ñ	
ô 	
ð 	
ð 	
ð 	
r+   rº   rÚ  rN   r+   r)   r·   r·   ß  s(   € € € € € ð
ð 
ð 
ð 
ð 
ð 
r+   r·   c                 ót   — t          | t          ¦  «        sJ d| z  ¦   «         ‚t          j        d| ¦  «        duS )zÆ
    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
    r5  z^[a-df-z]\d*$N©r|   r6  r$   r%   ©rè  s    r)   rN  rN  è  s@   € õ �d�CÑ Ô Ð=Ð=Ð"6¸Ñ"=Ñ=Ô=Ð=ÝŒ8Ð$ dÑ+Ô+°4Ð7Ð7r+   c                 ót   — t          | t          ¦  «        sJ d| z  ¦   «         ‚t          j        d| ¦  «        duS )z³
    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
    r5  z
^[A-Z]\d*$Nrâ  rã  s    r)   rO  rO  ô  s?   € õ �d�CÑ Ô Ð=Ð=Ð"6¸Ñ"=Ñ=Ô=Ð=ÝŒ8�M 4Ñ(Ô(°Ð4Ð4r+   c                 ót   — t          | t          ¦  «        sJ d| z  ¦   «         ‚t          j        d| ¦  «        duS )zµ
    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
    r5  z^e\d*$Nrâ  rã  s    r)   rP  rP     s?   € õ �d�CÑ Ô Ð=Ð=Ð"6¸Ñ"=Ñ=Ô=Ð=ÝŒ8�I˜tÑ$Ô$¨DÐ0Ð0r+   c                  óT  — t           j        } t          d¦  «         t           | d¦  «        ¦  «         t           | d¦  «        ¦  «         t           | d¦  «        ¦  «         t           | d¦  «        ¦  «         t           | d¦  «        ¦  «         t           | d¦  «        ¦  «         t           | d¦  «        ¦  «         t           | d	¦  «        ¦  «         t           | d
¦  «        ¦  «         t           | d¦  «        ¦  «         t           | d¦  «        ¦  «         t           | d¦  «        ¦  «         t           | d¦  «        ¦  «         t           | d¦  «        ¦  «         t           | d¦  «        ¦  «         t          d¦  «         t           | d¦  «                             ¦   «         ¦  «         t           | d¦  «                             ¦   «         ¦  «         t           | d¦  «                             ¦   «         ¦  «         t           | d¦  «                             ¦   «         ¦  «         t          d¦  «          | d¦  «        }t          |¦  «         |                     t          d¦  «        ¦  «        }t          |¦  «         t          ||k    ¦  «         d S )Nz3====================Test reader====================Újohnzman(x)z-man(x)z(man(x) & tall(x) & walks(x))z&exists x.(man(x) & tall(x) & walks(x))z	\x.man(x)z\x.man(x)(john)z\x y.sees(x,y)z\x y.sees(x,y)(a,b)z(\x.exists y.walks(x,y))(x)zexists x.x = yzexists x.(x = y)zP(x) & x=y & P(y)z\P Q.exists x.(P(x) & Q(x))zman(x) <-> tall(x)z5====================Test simplify====================z\x.\y.sees(x,y)(john)(mary)z\x.\y.sees(x,y)(john, mary)z,all x.(man(x) & (\x.exists y.walks(x,y))(x))z5(\P.\Q.exists x.(P(x) & Q(x)))(\x.dog(x))(\x.bark(x))z\====================Test alpha conversion and binder expression equality====================zexists x.P(x)rK  )rÁ  rd  rW   rà  rç  rá   )ÚlexprÚe1Úe2s      r)   Údemorë    s�  € ÝÔ!€EÝ	Ð
-Ñ.Ô.Ð.Ý	ˆ%ˆ%�‰.Œ.ÑÔÐÝ	ˆ%ˆ%�	Ñ
Ô
ÑÔÐÝ	ˆ%ˆ%�
Ñ
Ô
ÑÔÐÝ	ˆ%ˆ%Ð0Ñ
1Ô
1Ñ2Ô2Ð2Ý	ˆ%ˆ%Ð9Ñ
:Ô
:Ñ;Ô;Ð;Ý	ˆ%ˆ%�Ñ
Ô
ÑÔÐÝ	ˆ%ˆ%Ð"Ñ
#Ô
#Ñ$Ô$Ð$Ý	ˆ%ˆ%Ð!Ñ
"Ô
"Ñ#Ô#Ð#Ý	ˆ%ˆ%Ð&Ñ
'Ô
'Ñ(Ô(Ð(Ý	ˆ%ˆ%Ð.Ñ
/Ô
/Ñ0Ô0Ð0Ý	ˆ%ˆ%Ð!Ñ
"Ô
"Ñ#Ô#Ð#Ý	ˆ%ˆ%Ð#Ñ
$Ô
$Ñ%Ô%Ð%Ý	ˆ%ˆ%Ð#Ñ
$Ô
$Ñ%Ô%Ð%Ý	ˆ%ˆ%Ð.Ñ
/Ô
/Ñ0Ô0Ð0Ý	ˆ%ˆ%Ð%Ñ
&Ô
&Ñ'Ô'Ð'å	Ð
/Ñ0Ô0Ð0Ý	ˆ%ˆ%Ð.Ñ
/Ô
/×
8Ò
8Ñ
:Ô
:Ñ;Ô;Ð;Ý	ˆ%ˆ%Ð.Ñ
/Ô
/×
8Ò
8Ñ
:Ô
:Ñ;Ô;Ð;Ý	ˆ%ˆ%Ð?Ñ
@Ô
@×
IÒ
IÑ
KÔ
KÑLÔLÐLÝ	ˆ%ˆ%ÐHÑ
IÔ
I×
RÒ
RÑ
TÔ
TÑUÔUÐUå	Ð
VÑWÔWÐWØ	ˆˆÑ	Ô	€BÝ	ˆ"�I„I€IØ	×	Ò	�( 3™-œ-Ñ	(Ô	(€BÝ	ˆ"�I„I€IÝ	ˆ"�Š(�O„O€O€O€Or+   c                  óª  — t          d¦  «         t          d¦  «         t          d¦  «         t          d¦  «         t          d¦  «         t          d¦  «         t          d¦  «         t          d¦  «         t          d	¦  «         t          d
¦  «         t          d¦  «         t          d¦  «         t          d¦  «         t          d¦  «         d S )Nz:====================Test reader errors====================z(P(x) & Q(x)z((P(x) &) & Q(x))zP(x) -> zP(xzP(x,zP(x,)r   z	exists x.r   z\ x y.zP(x)Q(x)z	(P(x)Q(x)zexists x -> y)rW   ÚdemoExceptionrN   r+   r)   Údemo_errorsrî  -  sÎ   € Ý	Ð
4Ñ5Ô5Ð5Ý�.Ñ!Ô!Ð!ÝÐ%Ñ&Ô&Ð&Ý�*ÑÔÐÝ�%ÑÔÐÝ�&ÑÔÐÝ�'ÑÔÐÝ�(ÑÔÐÝ�+ÑÔÐÝ�$ÑÔÐÝ�)ÑÔÐÝ�*ÑÔÐÝ�+ÑÔÐÝ�/Ñ"Ô"Ð"Ð"Ð"r+   c                 ó¨   — 	 t                                | ¦  «         d S # t          $ r)}t          |j        j        › d|› �¦  «         Y d }~d S d }~ww xY w)Nr  )rÁ  rd  r�   rW   r!  r,   )r,  r˜   s     r)   rí  rí  >  ss   € ð.Ý×Ò˜aÑ Ô Ð Ð Ð øÝ%ð .ð .ð .Ý�”Ô%Ð,Ð,¨Ð,Ð,Ñ-Ô-Ð-Ð-Ð-Ð-Ð-Ð-Ð-øøøøð.øøøs   ‚ ž
A¨AÁAc                 ó\   — t          |                      ¦   «         › d| j        › �¦  «         d S )Nz : )rW   r6  r¯  )Úexs    r)   Ú	printtyperò  E  s.   € Ý	ˆR�VŠV‰XŒXÐ
#Ð
#˜"œ'Ð
#Ð
#Ñ$Ô$Ð$Ð$Ð$r+   Ú__main__)NNrº   )Mr#  r  r$   Úcollectionsr   Ú	functoolsr   r   Únltk.internalsr   Ú	nltk.utilr   r   rQ  r
   r[   r_   rd   rf   r2  rá   rV  rZ  r\  rg  rs  rx  r€  r†  r‹  rœ  r›  r}  rl  rb  rØ  r¡  r©  r­  r³  r“   r¹  rÁ  r9  r5  r  r  r  rÚ   r  rÛ   r  r„  r
  r›  rï   rð   rñ   r×   r·  rU  r  r  r  r  rû   r�   rŽ   r·   rN  rO  rP  rë  rî  rí  rò  r,   rN   r+   r)   ú<module>rø     sË  ððð ð
 €€€Ø 	€	€	€	Ø #Ð #Ð #Ð #Ð #Ð #Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,à "Ð "Ð "Ð "Ð "Ð "Ø Ð Ð Ð Ð Ð à€àˆ7‰9Œ9€ð*Ið *Ið *Ið *Ið *Iñ *Iô *Ið *IðZ"ð "ð "ð"ð "ð "ð"ð "ð "ðN@ð N@ð N@ð N@ð N@ñ N@ô N@ð N@ðbð ð ð ð< ð,ð ,ð ,ð ,ð ,ñ ,ô ,ñ „ð,ð:ð ð ð ð8	ð 	ð 	ð 	ð	ð 	ð 	ð 	ð 	ñ 	ô 	ð 	ð/Bð /Bð /Bð /Bð /B�$ñ /Bô /Bð /Bðdð ð ð ð �ñ ô ð ð ð ð ð ð �ñ ô ð ðð ð ð ð �Yñ ô ð ðð ð ð ð �	ñ ô ð ðð ð ð ð ˆi˜ñ ô ð ð< ˆ^ÑÔ€
Øˆj‰lŒl€ØˆY‰[Œ[€
Øˆ7‰9Œ9€ð
ð 
ð 
ð>ð ð ð ð �Iñ ô ð ð
ð ð ð ð ¨ñ ô ð ð
ð 
ð 
ð 
ð 
˜mñ 
ô 
ð 
ð
ð 
ð 
ð 
ð 
˜=ñ 
ô 
ð 
ðð ð ð ð $ð $ð $ð $ð $ñ $ô $ð $ð,E,ð E,ð E,ð E,ð E,Ð$ñ E,ô E,ð E,ðd Ð ðð ð ð*UAð UAð UAð UAð UA˜Jñ UAô UAð UAðp ðE$ð E$ð E$ð E$ð E$ ñ E$ô E$ñ „ðE$ðPð ð ð ð Ð#=ñ ô ð ð<ð ð ð ð Ð!;ñ ô ð ðð ð ð ð Ð:ñ ô ð ð$ð $ð $ð $ð $Ð3ñ $ô $ð $ðN,ð ,ð ,ð W#ð W#ð W#ð W#ð W#˜zñ W#ô W#ð W#ðt
ð 
ð 
ð 
ð 
Ð/ñ 
ô 
ð 
ð<
ð 
ð 
ð 
ð 
Ð3ñ 
ô 
ð 
ð>ð ð ð ð Ð+ñ ô ð ð
ð ð ð ð Ð(ñ ô ð ð
ð ð ð ð Ð)ñ ô ð ð
&-ð &-ð &-ð &-ð &-˜
ñ &-ô &-ð &-ðR*ð *ð *ð *ð *�zñ *ô *ð *ðZ5ð 5ð 5ð 5ð 5Ð(ñ 5ô 5ð 5ð
ð 
ð 
ð 
ð 
Ð%ñ 
ô 
ð 
ð
ð 
ð 
ð 
ð 
Ð$ñ 
ô 
ð 
ðð ð ð ð Ð%ñ ô ð ðð ð ð ð Ð%ñ ô ð ðð ð ð ð Ð)ñ ô ð ð,*ð *ð *ð *ð * ñ *ô *ð *ð>ð >ð >ð >ð >Ð9ñ >ô >ð >ð 
ð 
ð 
ð 
ð 
Ð"<ñ 
ô 
ð 
ð	8ð 	8ð 	8ð	5ð 	5ð 	5ð	1ð 	1ð 	1ðð ð ðB#ð #ð #ð".ð .ð .ð%ð %ð %ð ˆzÒÐØ€D�F„F€F€F€Fð Ðr+   