§
    'ê[f_ ã                   óž  — 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dgd„Ze G d„ d¦  «        ¦   «         Zdgd„Zdhd„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'dhd+„Z( G d,„ d-¦  «        Z) G d.„ d/e)¦  «        Z* G d0„ d1e*¦  «        Z+e G d2„ d3e*¦  «        ¦   «         Z, G d4„ d5e,¦  «        Z- G d6„ d7e,¦  «        Z. G d8„ d9e-¦  «        Z/ G d:„ d;e,¦  «        Z0d<„ Z1 G d=„ d>e*¦  «        Z2 G d?„ d@e2¦  «        Z3 G dA„ dBe2¦  «        Z4 G dC„ dDe4¦  «        Z5 G dE„ dFe4¦  «        Z6 G dG„ dHe4¦  «        Z7 G dI„ dJe*¦  «        Z8 G dK„ dLe*¦  «        Z9 G dM„ dNe9¦  «        Z: G dO„ dPe:¦  «        Z; G dQ„ dRe:¦  «        Z< G dS„ dTe:¦  «        Z= G dU„ dVe:¦  «        Z> G dW„ dXe9¦  «        Z? G dY„ dZe#¦  «        Z@ G d[„ d\e@¦  «        ZA G d]„ d^e@¦  «        ZBd_„ ZCd`„ ZDda„ ZEdb„ ZFdc„ ZGdd„ ZHde„ ZIeJdfk    r eF¦   «          dS dS )izV
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     úB/var/www/piapp/venv/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%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                 óR  — t          |t          ¦  «        sJ ‚d| _        g | _        || _        	 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>ƒ   rl   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>…   rl   r+   c                 ó   — g | ]}|d f‘ŒS )é	   rN   r&   s     r)   r*   z(LogicParser.__init__.<locals>.<listcomp>†   rl   r+   )Né
   N)Ú
isinstanceÚboolÚ_currentIndexÚ_bufferÚ
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__f   sN  € õ ˜*¥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¦  «        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   Nri   z	{}
{}
{}^Ú )Úrstripr}   Ú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 	
ri   )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š   ri   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.Nri   )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                 ó  — 	 |                       ¦   «         }n,# t          $ r}t          | j        dz   d¬¦  «        |‚d}~ww xY w|                      ||¦  «        }|st	          | j        |d¬¦  «        ‚|                      ||¦  «        S )zAParse the next complete expression from the stream and return it.ri   úExpression expected.©ÚmessageN)r�   rµ   r}   ÚhandlerŒ   Úattempt_adjuncts)r„   Úcontextr¶   r–   Úaccums        r)   rŠ   z#LogicParser.process_next_expression  s´   € ð	Ø—*’*‘,”,ˆCˆCøÝ*ð 	ð 	ð 	Ý-ØÔ" QÑ&Ð0Fðñ ô àðøøøøð	øøøð
 —’˜C Ñ)Ô)ˆàð 	Ý*ØÔ" CÐ1Gðñ ô ð ð ×$Ò$ U¨GÑ4Ô4Ð4ó   ‚ —
A ¡;»A 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.handle+  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_adjuncts=  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_negationF  s&   € Ø×*Ò*¨4×+GÒ+GÍÌ
Ñ+SÔ+SÑTÔTÐTr+   c                 ó    — t          |¦  «        S r¸   ©ÚNegatedExpression)r„   rÏ   s     r)   rÒ   z"LogicParser.make_NegatedExpressionI  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_variableL  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_variablej  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   rk   z;Variable and Expression expected following lambda operator.r½   Ú
abstractedTri   r¼   )r‹   rµ   r}   rá   r�   r
   r7   rº   rŸ   rŠ   Úmake_LambdaExpressionÚpop)r„   r¶   rÁ   ÚvarsrÂ   s        r)   rÇ   zLogicParser.handle_lambdaw  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   rk   z;Variable and Expression expected following quantifier '%s'.r½   Ú
quantifiedTri   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¦  «        r—|                      d¦  «        }|                      |¦  «        }|rU|                      ||¦  «        r?|                      ¦   «          |                      |||                      |¦  «        ¦  «        }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   )r‹   r�   Úget_BooleanExpression_factoryrö   Úmake_BooleanExpressionrŠ   )r„   rÏ   rÁ   r¶   rë   s        r)   rÎ   z%LogicParser.attempt_BooleanExpressionÛ  s±   € ð �lŠl˜1‰oŒoð 		Ø—*’*˜Q‘-”-ˆCØ×8Ò8¸Ñ=Ô=ˆGØð ˜4×,Ò,¨S°'Ñ:Ô:ð Ø—
’
‘”�Ø!×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_ApplicationExpression  s   € Ý$ X¨xÑ8Ô8Ð8r+   c                 ó:   — t          t          |¦  «        ¦  «        S r¸   )ÚVariableExpressionrß   ©r„   Únames     r)   r×   z#LogicParser.make_VariableExpression"  s   € Ý!¥(¨4¡.¤.Ñ1Ô1Ð1r+   c                 ó"   — t          ||¦  «        S r¸   )r  ©r„   rò   ró   s      r)   rä   z!LogicParser.make_LambdaExpression%  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_priority(  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.assertNextToken0  sÀ   € ð	Ø—*’*‘,”,ˆCˆCøÝ*ð 	ð 	ð 	Ý-Ø”Ð!7¸(Ñ!Bðñ ô àðøøøøð	øøøõ
 �h¥Ñ%Ô%ð 	RØ˜(Ð"Ð"Ý.¨tÔ/AÀ3ÈÑQÔQÐQð #Ð"ð �hŠˆÝ.¨tÔ/AÀ3ÈÑQÔQÐQð ˆrÃ   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.assertToken?  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__G  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  rN   r+   r)   rf   rf   c   s1  € € € € € Ø.Ð.ð#1ð #1ð #1ð #1ðJð ð ð ð64ð 4ð 4ðl"ð "ð "ðHð ð ðAð Að AðMð Mð Mð Mð(ð (ð (ð5ð 5ð 5ð$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_logicr/  O  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                   ó>   — e Zd 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__o  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__v  s    € Ý˜%¥Ñ*Ô*ÐF¨t¬y¸E¼JÒ/FÐFr+   c                 ó   — | |k     S r¸   rN   r5  s     r)   Ú__ne__zVariable.__ne__y  ó   € Ø˜5’=Ð Ð r+   c                 óZ   — t          |t          ¦  «        st          ‚| j        |j        k     S r¸   )r{   rß   Ú	TypeErrorr  r5  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…   r7  r9  r=  rB  rE  rH  r  rN   r+   r)   rß   rß   m  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                   óF   — e Zd 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ü   r5  s     r)   r7  zComplexType.__eq__É  s6   € å�u�kÑ*Ô*ð ,Ø”
˜eœkÒ)ð,à”˜uœ|Ò+ð	
r+   c                 ó   — | |k     S r¸   rN   r5  s     r)   r9  zComplexType.__ne__Ð  r:  r+   c                 ó¾   — t          |t          ¦  «        r>| j                             |j        ¦  «        o| j                             |j        ¦  «        S | t
          k    S r¸   )r{   rg  rû   Úmatchesrü   ÚANY_TYPEr5  s     r)   rl  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¸   )rm  r{   rg  rû   Úresolverü   )r„   r6  Úfr)  s       r)   ro  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  )rm  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   )rm  r3  rû   rü   r°   s    r)   r3  zComplexType.strð  sL   € Ø•8ÒÐÝ—<’<‘>”>Ð!àA�t”z—~’~Ñ'Ô'ÐAÐA¨T¬[¯_ª_Ñ->Ô->ÐAÐAÐAÐAr+   N)r,   r-   r.   r…   r7  r9  r\  rE  rl  ro  rH  r3  rN   r+   r)   rg  rg  Â  s‹   € € € € € ðð ð ð
ð 
ð 
ð!ð !ð !ð Œ}€Hð$ð $ð $ðð ð ð3ð 3ð 3ðBð Bð Bð Bð Br+   rg  c                   ó4   — e Zd 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{   rt  r5  s     r)   r7  zBasicType.__eq__ø  s$   € Ý˜%¥Ñ+Ô+ÐO°¸±À$ÈÁ,Ò0OÐOr+   c                 ó   — | |k     S r¸   rN   r5  s     r)   r9  zBasicType.__ne__û  r:  r+   c                 ó$   — |t           k    p| |k    S r¸   )rm  r5  s     r)   rl  zBasicType.matches   s   € Ø�Ò Ð1 D¨E¢MÐ1r+   c                 ó4   — |                       |¦  «        r| S d S r¸   )rl  r5  s     r)   ro  zBasicType.resolve  s    € Ø�<Š<˜ÑÔð 	ØˆKà�4r+   N)	r,   r-   r.   r7  r9  r\  rE  rl  ro  rN   r+   r)   rt  rt  ÷  s\   € € € € € ðPð Pð Pð!ð !ð !ð Œ}€Hð2ð 2ð 2ðð ð ð ð r+   rt  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)   r3  zEntityType.str  ó   € Øˆur+   N©r,   r-   r.   rH  r3  rN   r+   r)   rz  rz  
  s2   € € € € € ðð ð ðð ð ð ð r+   rz  c                   ó   — e Zd Zd„ Zd„ ZdS )ÚTruthValueTypec                 ó   — dS )NÚtrN   r°   s    r)   rH  zTruthValueType.__str__  r|  r+   c                 ó   — dS )NÚBOOLrN   r°   s    r)   r3  zTruthValueType.str  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__  r|  r+   c                 ó   — dS )NÚEVENTrN   r°   s    r)   r3  zEventType.str  s   € Øˆwr+   Nr€  rN   r+   r)   rˆ  rˆ    s2   € € € € € ðð ð ðð ð ð ð r+   rˆ  c                   ór   — e Zd Zd„ Zed„ ¦   «         Zed„ ¦   «         Z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.first&  ó   € àˆr+   c                 ó   — | S r¸   rN   r°   s    r)   rü   zAnyType.second*  r�  r+   c                 óV   — t          |t          ¦  «        p|                     | ¦  «        S r¸   )r{   r�  r7  r5  s     r)   r7  zAnyType.__eq__.  s#   € Ý˜%¥Ñ)Ô)Ð?¨U¯\ª\¸$Ñ-?Ô-?Ð?r+   c                 ó   — | |k     S r¸   rN   r5  s     r)   r9  zAnyType.__ne__1  r:  r+   c                 ó   — dS )NTrN   r5  s     r)   rl  zAnyType.matches6  s   € Øˆtr+   c                 ó   — |S r¸   rN   r5  s     r)   ro  zAnyType.resolve9  s   € Øˆr+   c                 ó   — dS )Nú?rN   r°   s    r)   rH  zAnyType.__str__<  r|  r+   c                 ó   — dS )NÚANYrN   r°   s    r)   r3  zAnyType.str?  r  r+   N)r,   r-   r.   r…   Úpropertyrû   rü   r7  r9  r\  rE  rl  ro  rH  r3  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  ri   r   r_  zUnexpected character: '%s'.)
r{   r3  Úreplacer$  rg  rb  ÚENTITY_TYPEÚ
TRUTH_TYPErm  rŽ   )Útype_stringÚparen_countrª   Úchars       r)   rb  rb  I  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__i  s!   ø€ Ý‰Œ×Ò˜ÑÔÐÐÐr+   ©r,   r-   r.   r…   Ú__classcell__©r  s   @r)   r¤  r¤  h  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__n  s]   ø€ Øð 		ð 		ð &. X X¨z¨z¨zð;ð ˆCðØ%ñ'ð õ 	‰Œ×Ò˜ÑÔÐÐÐr+   r¸   r¨  rª  s   @r)   r¬  r¬  m  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„ 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„   r6  Ú
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  r5  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  r5  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  r5  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  r5  s     r)   Ú__gt__zExpression.__gt__Û  rÖ  r+   c                 óp   — t          |t          ¦  «        st          d|z  ¦  «        ‚t          | |¦  «        S rÎ  )r{   rÄ  r<  r  r5  s     r)   r=  zExpression.__lt__à  rÖ  r+   c                 ó   — t           S r¸   )ÚNotImplementedr5  s     r)   r7  zExpression.__eq__å  s   € ÝÐr+   c                 ó   — | |k     S r¸   rN   r5  s     r)   r9  zExpression.__ne__è  r:  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„   r6  Ú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                 ó:   — t          t          | ¦  «        ¦  «        S r¸   )rD  Úreprr°   s    r)   rE  zExpression.__hash__ý  s   € Ý•D˜‘J”JÑÔÐr+   c                 ón  — | }|                      ¦   «         D ]‹}||v r…||         }t          |t          ¦  «        r|                      |¦  «        }n't          |t          ¦  «        st          d|›�¦  «        ‚|                     |¦  «        }|                     ||¦  «        }ŒŒ|                     ¦   «         S )Nz>Can not substitute a non-expression value into an expression: )	rÂ  r{   rß   r×   rÄ  r(  rB  r�  râ  )r„   rA  ÚexprÚvarÚvals        r)   rB  zExpression.substitute_bindings   sÁ   € ØˆØ—>’>Ñ#Ô#ð 	.ð 	.ˆCØ�hˆˆØ˜s”m�Ý˜c¥8Ñ,Ô,ð Ø×6Ò6°sÑ;Ô;�C�CÝ# C­Ñ4Ô4ð Ý$˜*à:=¸#ð@ñô ð ð
 ×-Ò-¨hÑ7Ô7�à—|’| C¨Ñ-Ô-�øØ�}Š}‰ŒÐ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_type2  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–   Úalpha_convertrÏ   Úreplace_boundrò   s    €€€€r)   ú<lambda>z$Expression.replace.<locals>.<lambda>J  s   ø€ �a—i’i ¨*°mÀ]ÑSÔS€ r+   )r{   rß   rÄ  Úvisit_structuredr  ©r„   rò   rÏ   rý  rü  s    ````r)   r�  zExpression.replace<  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>X  s   € µ&½¼ÀuÍcÉeÌeÑ2TÔ2T€ r+   )r{   ÚIndividualVariableExpressionÚAbstractVariableExpressionr  Úvisit)r–   Úget_indiv_varss    €r)   r  z,Expression.normalize.<locals>.get_indiv_varsQ  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>\  s   € ÈÌ€ r+   )rï  ze0%sri   zz%sT)	r$  Úsortedr{   ÚEventVariableExpressionr  rß   r
  r�  rò   )r„   Únewvarsr•   rª   r–   ÚnewVarr  s         @r)   Ú	normalizezExpression.normalizeN  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.visitf  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_structuredw  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¸   )r3  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=  r7  r9  ræ  rE  rB  r‘   rö  rm  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Ä  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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          ¦  «        r2|j                             |j        |¦  «                             ¦   «         S |                      ||¦  «        S r¸   )	r  râ  r  r{   r  ró   r�  rò   r  r
  s      r)   râ  zApplicationExpression.simplifyä  sv   € Ø”=×)Ò)Ñ+Ô+ˆØ”=×)Ò)Ñ+Ô+ˆÝ�hÕ 0Ñ1Ô1ð 	6Ø”=×(Ò(¨Ô):¸HÑEÔE×NÒNÑPÔPÐPà—>’> (¨HÑ5Ô5Ð5r+   c                 óp   — t          | j        j        t          ¦  «        r| j        j        j        S t
          S r¸   )r{   r  r²  rg  rü   rm  r°   s    r)   r²  zApplicationExpression.typeì  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ò  rm  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+   ri   r   )r{   rß   Úis_atomÚuncurryr  r  rm  rl  rŸ   rœ   r  )r„   rò   r  ÚargsÚfoundÚuniquerp  Úus    `      r)   rö  zApplicationExpression.findtype  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.constants'  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.predicates/  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.visit7  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  r5  s     r)   r7  zApplicationExpression.__eq__;  s7   € å�uÕ3Ñ4Ô4ð 0Ø” ¤Ò/ð0à” ¤Ò/ð	
r+   c                 ó   — | |k     S r¸   rN   r5  s     r)   r9  zApplicationExpression.__ne__B  r:  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>K  s&   è è € Ð:Ð:¨c˜t c™zÐ:Ð:Ð:Ð:Ð:Ð:r+   r_  FT)r<  r=  Újoinr  r  r{   r  ró   r  r  ÚBooleanExpressionr
   r8   r9   )r„   r  r>  Úarg_strÚfunction_strÚparenthesize_functions         r)   rH  zApplicationExpression.__str__G  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  r>  s      r)   r=  zApplicationExpression.uncurrya  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   ©r=  r°   s    r)   ÚpredzApplicationExpression.predo  s   € ð �|Š|‰~Œ~˜aÔ Ð r+   c                 ó6   — |                       ¦   «         d         S )z+
        Return uncurried arg-list
        ri   rX  r°   s    r)   r>  zApplicationExpression.argsx  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{   rY  r  r°   s    r)   r<  zApplicationExpression.is_atom  s   € õ
 ˜$œ)Õ%?Ñ@Ô@Ð@r+   )r,   r-   r.   r   r…   râ  rš  r²  rm  rò  rö  r$  r#  r  r7  r9  rÄ  rE  rH  r=  rY  r>  r<  rN   r+   r)   r  r  ½  sD  € € € € € ðð ð8!ð !ð !ð6ð 6ð 6ð ðð ñ „Xðð $,°tð ð ð ð ð2ð ð ð6>ð >ð >ð;ð ;ð ;ðNð Nð Nð
ð 
ð 
ð!ð !ð !ð Ô"€HðCð Cð Cð4 ð  ð  ð ð!ð !ñ „Xð!ð ð!ð !ñ „Xð!ðAð Að Að Að Ar+   r  c                   ód   — 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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 ©r7  N)
r{   r\  r   r  rò   r  r²  ro  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 ©r9  rú  )r{   rß   rò   r²  rm  rõ  s     r)   rö  z#AbstractVariableExpression.findtype±  s@   € å˜(¥HÑ-Ô-ÐPÐPÐ/EÈÑ/PÑPÔPÐPØŒ=˜HÒ$Ð$Ø”9ÐåˆOr+   c                 ó   — t          ¦   «         S rF  ©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ò   r5  s     r)   r7  z!AbstractVariableExpression.__eq__½  s(   € õ �uÕ8Ñ9Ô9ð 0Ø” ¤Ò/ð	
r+   c                 ó   — | |k     S r¸   rN   r5  s     r)   r9  z!AbstractVariableExpression.__ne__Å  r:  r+   c                 óZ   — t          |t          ¦  «        st          ‚| j        |j        k     S r¸   )r{   r  r<  rò   r5  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+   r1  )r,   r-   r.   r   r…   râ  r�  rm  rò  rö  r#  r7  r9  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 rb  )
r{   r\  r   r  rl  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 rC  rh  r°   s    r)   r$  z&IndividualVariableExpression.constantsì  ri  r+   )r,   r-   r.   r   rm  rò  rq  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 rs  r  r°   s    r)   r"  zFunctionVariableExpression.free÷  rt  r+   c                 ó   — t          ¦   «         S rC  rh  r°   s    r)   r$  z$FunctionVariableExpression.constantsû  ri  r+   N)r,   r-   r.   r   rm  r²  r"  r$  rN   r+   r)   rØ   rØ   ñ  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     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 rb  )r{   r\  r   r  rm  rž  r²  ro  rò   r  r¬  rŸ   rc  s        r)   rò  zConstantExpression._set_type  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 rs  rh  r°   s    r)   r"  zConstantExpression.free%  ri  r+   c                 ó   — | j         hS rC  r  r°   s    r)   r$  zConstantExpression.constants)  rt  r+   )
r,   r-   r.   r   rž  r²  rm  rò  r"  r$  rN   r+   r)   rÙ   rÙ     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  .  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                   óX   — e Zd ZdZd„ Zdd„Z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__B  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 )r`  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.replaceL  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_convertj  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 rs  )ró   r"  rò   r°   s    r)   r"  zVariableBinderExpression.freet  s   € àŒy�~Š~ÑÔ 4¤= /Ñ1Ð1r+   c                 óž   — t          |t          ¦  «        sJ d|z  ¦   «         ‚|| j        k    rt          S | j                             |¦  «        S rf  )r{   rß   rò   rm  ró   rö  rõ  s     r)   rö  z!VariableBinderExpression.findtypex  sN   € å˜(¥HÑ-Ô-ÐPÐPÐ/EÈÑ/PÑPÔPÐPØ�t”}Ò$Ð$ÝˆOà”9×%Ò% hÑ/Ô/Ð/r+   c                 ó6   —  | || j         ¦  «        g¦  «        S rI  ©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„   r6  Úvarexs      r)   r7  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+   c                 ó   — | |k     S r¸   rN   r5  s     r)   r9  zVariableBinderExpression.__ne__•  r:  r+   Nr1  )r,   r-   r.   r   r…   r�  rü  r"  rö  r  rÿ  r7  r9  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 rb  )
r{   r\  r   r  ró   rò  rü   r²  ro  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 rN  rN   ©r'   rU  s     r)   rO  z+LambdaExpression.__str__.<locals>.<genexpr>³  ó&   è è € Ð3Ð3 A�t˜a‘xÐ3Ð3Ð3Ð3Ð3Ð3r+   r_  )rò   ró   r  rŸ   r
   r/   rP  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²  rm  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 rb  ©	r{   r\  r   r  rl  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 rN  rN   r”  s     r)   rO  z/QuantifiedExpression.__str__.<locals>.<genexpr>Ò  r•  r+   r_  )rò   ró   r  rŸ   ÚgetQuantifierrP  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                   óh   — e 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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 rb  rž  rø  s      r)   rò  zNegatedExpression._set_typeð  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 rI  r‰  r  s      r)   r  zNegatedExpression.visitÿ  rŠ  r+   c                 ó   — | j         S )z:see: Expression.negate()r‰  r°   s    r)   rÓ  zNegatedExpression.negate  s
   € àŒyÐr+   c                 óL   — t          |t          ¦  «        o| j        |j        k    S r¸   )r{   rÕ   ró   r5  s     r)   r7  zNegatedExpression.__eq__  s!   € Ý˜%Õ!2Ñ3Ô3ÐO¸¼	ÀUÄZÒ8OÐOr+   c                 ó   — | |k     S r¸   rN   r5  s     r)   r9  zNegatedExpression.__ne__
  r:  r+   c                 ó0   — t           j        d| j        z  z   S r^  )r
   r;   ró   r°   s    r)   rH  zNegatedExpression.__str__  s   € ÝŒz˜D 4¤9Ñ,Ñ,Ð,r+   )r,   r-   r.   r…   rš  r²  rm  rò  rö  r  rÓ  r7  r9  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                   ó\   — e Zd Zd„ Zed„ ¦   «         Z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__  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.type  rœ  r+   c                 óü   — t          |t          ¦  «        sJ d|z  ¦   «         ‚| j                             |¦  «        }| j                             |¦  «        }||k    s|t
          k    r|S |t
          k    r|S t
          S rf  )r{   rß   rû   rö  rü   rm  )r„   rò   rp  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 rI  )rû   rü   r  s      r)   r  zBinaryExpression.visit*  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ü   r5  s     r)   r7  zBinaryExpression.__eq__.  sI   € å˜˜eœoÑ.Ô.ÐSµ*¸UÀDÄNÑ2SÔ2Sð ,Ø”
˜eœkÒ)ð,à”˜uœ|Ò+ð	
r+   c                 ó   — | |k     S r¸   rN   r5  s     r)   r9  zBinaryExpression.__ne__5  r:  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__:  sX   € Ø—’ ¤
Ñ+Ô+ˆØ—’ ¤Ñ-Ô-ˆÝŒ{˜UÑ" SÑ(¨4¯:ª:©<¬<Ñ7¸#Ñ=ÀÑFÍÌÑUÐUr+   c                 ó   — d|z  S r^  rN   )r„   Úsubexs     r)   r¾  zBinaryExpression._str_subex?  s   € Ø�e‰|Ðr+   N)r,   r-   r.   r…   rš  r²  rö  r  r7  r9  rÄ  rE  rH  r¾  rN   r+   r)   r¶  r¶    s¨   € € € € € ðð ð ð ðð ñ „Xðð
ð 
ð 
ðIð Ið Ið
ð 
ð 
ð!ð !ð !ð Ô"€HðVð Vð Vð
ð ð ð ð r+   r¶  c                   ó   — e Zd Zedfd„ZdS )rQ  Nc                 ó@  — t          |t          ¦  «        sJ ‚|€t          t          ¦  «        }|                     t
          ¦  «        st          | |t
          ¦  «        ‚| j                             t
          |¦  «         | j	                             t
          |¦  «         dS rb  )
r{   r\  r   r  rl  rŸ  r¶  rû   rò  rü   rø  s      r)   rò  zBooleanExpression._set_typeD  sŠ   € å˜*¥dÑ+Ô+Ð+Ð+Ð+àÐÝ#¥DÑ)Ô)ˆIà×!Ò!¥*Ñ-Ô-ð 	EÝ& t¨Z½ÑDÔDÐDØŒ
×Ò�Z¨Ñ3Ô3Ð3ØŒ×Ò�j¨)Ñ4Ô4Ð4Ð4Ð4r+   )r,   r-   r.   rm  rò  rN   r+   r)   rQ  rQ  C  s-   € € € € € Ø#+°tð 
5ð 
5ð 
5ð 
5ð 
5ð 
5r+   rQ  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.getOpT  r¨  r+   c                 óN   — d|z  }t          |t          ¦  «        r
|dd…         S |S ©Nr_  ri   rœ  )r{   r  ©r„   rÁ  r)  s      r)   r¾  zAndExpression._str_subexW  s/   € Ø�5‰LˆÝ�e�]Ñ+Ô+ð 	Ø�Q�r�T”7ˆNØˆr+   N©r,   r-   r.   r   r¿  r¾  rN   r+   r)   r  r  Q  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.getOpa  ó
   € ÝŒyÐr+   c                 óN   — d|z  }t          |t          ¦  «        r
|dd…         S |S rÇ  )r{   r  rÈ  s      r)   r¾  zOrExpression._str_subexd  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.getOpn  r¨  r+   N©r,   r-   r.   r   r¿  rN   r+   r)   r  r  k  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.getOpu  r¨  r+   NrÐ  rN   r+   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 rb  )r{   r\  r   r  rl  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   rm  rò  r¿  rN   r+   r)   rù   rù   y  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
    r2  z^[a-df-z]\d*$N©r{   r3  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
    r2  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
    r2  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   r3  r²  )Úexs    r)   Ú	printtyperò    s.   € Ý	ˆR�VŠV‰XŒXÐ
#Ð
#˜"œ'Ð
#Ð
#Ñ$Ô$Ð$Ð$Ð$r+   Ú__main__)NNr¸   )Kr   r  r$   Úcollectionsr   Ú	functoolsr   r   Únltk.internalsr   Ú	nltk.utilr   r   rQ  r
   r[   r_   rd   rf   r/  rß   rV  rZ  r\  rg  rt  rz  r‚  rˆ  r�  rŸ  rž  rz  rm  rb  rØ  r¤  r¬  r°  r¶  r‘   r¼  rÄ  r  r  r
  rØ   r  rÙ   r  r�  r  r™  rí   rî   rï   rÕ   r¶  rQ  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"ð "ð "ð"ð "ð "ð"ð "ð "ði@ð i@ð i@ð i@ð i@ñ i@ô i@ð i@ðXð ð ð ð< ð,ð ,ð ,ð ,ð ,ñ ,ô ,ñ „ð,ð@ð ð ð ð8	ð 	ð 	ð 	ð	ð 	ð 	ð 	ð 	ñ 	ô 	ð 	ð2Bð 2Bð 2Bð 2Bð 2B�$ñ 2Bô 2Bð 2Bðjð ð ð ð �ñ ô ð ð&ð ð ð ð �ñ ô ð ðð ð ð ð �Yñ ô ð ðð ð ð ð �	ñ ô ð ðð ð ð ð ˆi˜ñ ô ð ðB ˆ^ÑÔ€
Øˆj‰lŒl€ØˆY‰[Œ[€
Øˆ7‰9Œ9€ð
ð 
ð 
ð>ð ð ð ð �Iñ ô ð ð
ð ð ð ð ¨ñ ô ð ð
ð 
ð 
ð 
ð 
˜mñ 
ô 
ð 
ð
ð 
ð 
ð 
ð 
˜=ñ 
ô 
ð 
ðð ð ð ð $ð $ð $ð $ð $ñ $ô $ð $ð,H,ð H,ð H,ð H,ð H,Ð$ñ H,ô H,ð H,ðVGAð GAð GAð GAð GA˜Jñ GAô GAð GAðT ðH$ð H$ð H$ð H$ð H$ ñ H$ô H$ñ „ðH$ðVð ð ð ð Ð#=ñ ô ð ð<ð ð ð ð Ð!;ñ ô ð ðð ð ð ð Ð:ñ ô ð ð$ð $ð $ð $ð $Ð3ñ $ô $ð $ðN,ð ,ð ,ð Z#ð Z#ð Z#ð Z#ð Z#˜zñ Z#ô Z#ð Z#ðz
ð 
ð 
ð 
ð 
Ð/ñ 
ô 
ð 
ð<
ð 
ð 
ð 
ð 
Ð3ñ 
ô 
ð 
ð>ð ð ð ð Ð+ñ ô ð ð
ð ð ð ð Ð(ñ ô ð ð
ð ð ð ð Ð)ñ ô ð ð
)-ð )-ð )-ð )-ð )-˜
ñ )-ô )-ð )-ðX-ð -ð -ð -ð -�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+   