§
    'ê[f�Ï  ã                   ó‚  — d dl Z d dlmZ d dlmZ d dlmZmZmZm	Z	m
Z
mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZ 	 d dlm Z m!Z! d dl"m#Z# d dl$m%Z% n# e&$ r Y nw xY w G d„ d	e¦  «        Z' G d
„ de¦  «        Z( G d„ d¦  «        Z) G d„ de)e¦  «        Z*d„ Z+ G d„ de)e¦  «        Z, G d„ de,e¦  «        Z- G d„ de,e¦  «        Z. G d„ de-e¦  «        Z/ G d„ de,e¦  «        Z0 G d„ de)e¦  «        Z1 G d„ de)e¦  «        Z2 G d„ d e)e¦  «        Z3 G d!„ d"e)e¦  «        Z4 G d#„ d$e4e¦  «        Z5 G d%„ d&e5e¦  «        Z6 G d'„ d(e4e¦  «        Z7 G d)„ d*e5¦  «        Z8 G d+„ d,e)e
¦  «        Z9d-„ Z: G d.„ d/e;e)e¦  «        Z< G d0„ d1e=¦  «        Z>g fd2„Z? G d3„ d4¦  «        Z@d5„ ZAd6„ ZBeCd7k    r eA¦   «          dS dS )8é    N)Úreduce)Úchain)ÚAPPÚAbstractVariableExpressionÚAllExpressionÚAndExpressionÚApplicationExpressionÚBinaryExpressionÚBooleanExpressionÚConstantExpressionÚEqualityExpressionÚEventVariableExpressionÚExistsExpressionÚ
ExpressionÚFunctionVariableExpressionÚImpExpressionÚIndividualVariableExpressionÚLambdaExpressionÚLogicParserÚNegatedExpressionÚOrExpressionÚTokensÚVariableÚis_eventvarÚ
is_funcvarÚ	is_indvarÚunique_variable)ÚCanvasÚTk)ÚFont)Úin_idlec                   ób   — e Zd ZdZdZdZdZdZdZeeeegZ	e
j        e	z   Ze
j        egz   e	z   ZdS )Ú	DrtTokensÚDRSú+ÚPROú[ú]ú:N)Ú__name__Ú
__module__Ú__qualname__r$   ÚDRS_CONCÚPRONOUNÚOPEN_BRACKETÚCLOSE_BRACKETÚCOLONÚPUNCTr   ÚSYMBOLSÚTOKENS© ó    ú@/var/www/piapp/venv/lib/python3.11/site-packages/nltk/sem/drt.pyr#   r#   5   sY   € € € € € Ø
€CØ€HØ€GØ€LØ€MØ€Eà�| ]°EÐ:€EàŒn˜uÑ$€GàŒ]˜c˜UÑ" UÑ*€F€F€Fr6   r#   c                   ól   — e 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 )Ú	DrtParserz$A lambda calculus expression parser.c                 ó®  — t          j        | ¦  «         t          d„ t          j        D ¦   «         d„ t          j        D ¦   «         z   t          dfgz   d„ t          j        t          j	        z   D ¦   «         z   t          j
        dfgz   t          j        dfgz   d„ t          j        D ¦   «         z   d„ t          j        D ¦   «         z   d	gz   ¦  «        | _        d S )
Nc                 ó   — g | ]}|d f‘ŒS ©é   r5   ©Ú.0Úxs     r7   ú
<listcomp>z&DrtParser.__init__.<locals>.<listcomp>K   s   € Ð3Ð3Ð3˜ˆa�ˆVÐ3Ð3Ð3r6   c                 ó   — g | ]}|d f‘ŒS )é   r5   r>   s     r7   rA   z&DrtParser.__init__.<locals>.<listcomp>L   ó   € Ð2Ð2Ð2˜!��1ˆvÐ2Ð2Ð2r6   é   c                 ó   — g | ]}|d f‘ŒS )é   r5   r>   s     r7   rA   z&DrtParser.__init__.<locals>.<listcomp>N   s   € ÐCÐCÐC˜!��1ˆvÐCÐCÐCr6   é   é   c                 ó   — g | ]}|d f‘ŒS )é   r5   r>   s     r7   rA   z&DrtParser.__init__.<locals>.<listcomp>Q   s   € Ð1Ð1Ð1˜!��1ˆvÐ1Ð1Ð1r6   c                 ó   — g | ]}|d f‘ŒS )é   r5   r>   s     r7   rA   z&DrtParser.__init__.<locals>.<listcomp>R   rD   r6   )Né	   )r   Ú__init__Údictr#   ÚLAMBDA_LISTÚNOT_LISTr   ÚEQ_LISTr   ÚNEQ_LISTr1   r-   ÚOR_LISTÚIMP_LISTÚoperator_precedence©Úselfs    r7   rO   zDrtParser.__init__G   sõ   € ÝÔ˜TÑ"Ô"Ð"å#'Ø3Ð3�YÔ2Ð3Ñ3Ô3Ø2Ð2�yÔ1Ð2Ñ2Ô2ñ3å�Qˆxˆjñð DÐC�yÔ0µ6´?ÑBÐCÑCÔCñDõ ” Ð#Ð$ñ	%õ
 Ô" AÐ&Ð'ñ(ð 2Ð1�yÔ0Ð1Ñ1Ô1ñ2ð 3Ð2�yÔ1Ð2Ñ2Ô2ñ3ð ˆkññ
$
ô 
$
ˆÔ Ð Ð r6   c                 ó   — t           j        S )z#This method exists to be overridden)r#   r3   rX   s    r7   Úget_all_symbolszDrtParser.get_all_symbolsV   s   € åÔ Ð r6   c                 ó   — |t           j        vS ©N)r#   r4   )rY   Útoks     r7   Ú
isvariablezDrtParser.isvariableZ   s   € Ø�)Ô*Ð*Ð*r6   c                 ó  — |t           j        v r|                      ||¦  «        S |t           j        v r|                      ||¦  «        S |t           j        k    rd|                      d¦  «        r9|                      d¦  «        t           j        k    r|  	                    ||¦  «        S |  
                    ||¦  «        S |                     ¦   «         t           j        k    r5|                      t           j        ¦  «         |  	                    ||¦  «        S |                      |¦  «        rd|                      d¦  «        r9|                      d¦  «        t           j        k    r|                      ||¦  «        S |                      ||¦  «        S dS )zgThis method is intended to be overridden for logics that
        use different operators or expressionsr   N)r#   rR   Úhandle_negationrQ   Úhandle_lambdaÚOPENÚinRangeÚtokenr/   Ú
handle_DRSÚhandle_openÚupperr$   ÚassertNextTokenr_   r1   Úhandle_propÚhandle_variable)rY   r^   Úcontexts      r7   ÚhandlezDrtParser.handle]   s]  € ð •)Ô$Ð$Ð$Ø×'Ò'¨¨WÑ5Ô5Ð5à•IÔ)Ð)Ð)Ø×%Ò% c¨7Ñ3Ô3Ð3à•I”NÒ"Ð"Ø�|Š|˜A‰Œð 6 4§:¢:¨a¡=¤=µIÔ4JÒ#JÐ#JØ—’ s¨GÑ4Ô4Ð4à×'Ò'¨¨WÑ5Ô5Ð5à�YŠY‰[Œ[�IœMÒ)Ð)Ø× Ò ¥¤Ñ0Ô0Ð0Ø—?’? 3¨Ñ0Ô0Ð0à�_Š_˜SÑ!Ô!ð 	:Ø�|Š|˜A‰Œð : 4§:¢:¨a¡=¤=µI´OÒ#CÐ#CØ×'Ò'¨¨WÑ5Ô5Ð5à×+Ò+¨C°Ñ9Ô9Ð9ð		:ð 	:r6   c                 ó    — t          |¦  «        S r]   ©ÚDrtNegatedExpression)rY   Ú
expressions     r7   Úmake_NegatedExpressionz DrtParser.make_NegatedExpressionv   s   € Ý# JÑ/Ô/Ð/r6   c                 óL  — |                       ¦   «         }|                      d¦  «        r7|                      d¦  «        t          j        k    r|                      ¦   «          |                      |¦  «        }|                      t          j        ¦  «         t          ||d ¦  «        S ©Nr   )	Úhandle_refsrd   re   r#   ÚCOMMAÚhandle_condsri   ÚCLOSEr$   )rY   r^   rl   ÚrefsÚcondss        r7   rf   zDrtParser.handle_DRSy   s„   € à×ÒÑ!Ô!ˆà�LŠL˜‰OŒOð	Ø $§
¢
¨1¡¤µ´Ò @Ð @à�JŠJ‰LŒLˆLØ×!Ò! 'Ñ*Ô*ˆØ×Ò�Yœ_Ñ-Ô-Ð-Ý�4˜ Ñ%Ô%Ð%r6   c                 ó(  — |                       t          j        ¦  «         g }|                      d¦  «        r¼|                      d¦  «        t          j        k    r™|r7|                      d¦  «        t          j        k    r|                      ¦   «          |                     |                      d¦  «        ¦  «         |                      d¦  «        r#|                      d¦  «        t          j        k    °™|                       t          j        ¦  «         |S )Nr   Ú
quantified)	ri   r#   r/   rd   re   r0   rv   ÚappendÚget_next_token_variable)rY   ry   s     r7   ru   zDrtParser.handle_refs„   sÝ   € Ø×Ò�YÔ3Ñ4Ô4Ð4ØˆØ�lŠl˜1‰oŒoð 	D $§*¢*¨Q¡-¤-µ9Ô3JÒ"JÐ"Jàð ˜Ÿ
š
 1™œ­¬Ò8Ð8Ø—
’
‘”�Ø�KŠK˜×4Ò4°\ÑBÔBÑCÔCÐCð	 �lŠl˜1‰oŒoð 	D $§*¢*¨Q¡-¤-µ9Ô3JÒ"JÐ"Jð
 	×Ò�YÔ4Ñ5Ô5Ð5Øˆr6   c                 ó(  — |                       t          j        ¦  «         g }|                      d¦  «        r¼|                      d¦  «        t          j        k    r™|r7|                      d¦  «        t          j        k    r|                      ¦   «          |                     |                      |¦  «        ¦  «         |                      d¦  «        r#|                      d¦  «        t          j        k    °™|                       t          j        ¦  «         |S rt   )	ri   r#   r/   rd   re   r0   rv   r}   Úprocess_next_expression)rY   rl   rz   s      r7   rw   zDrtParser.handle_conds�   sÝ   € Ø×Ò�YÔ3Ñ4Ô4Ð4ØˆØ�lŠl˜1‰oŒoð 	@ $§*¢*¨Q¡-¤-µ9Ô3JÒ"JÐ"Jàð ˜Ÿš A™œ­)¬/Ò9Ð9Ø—
’
‘”�Ø�LŠL˜×5Ò5°gÑ>Ô>Ñ?Ô?Ð?ð	 �lŠl˜1‰oŒoð 	@ $§*¢*¨Q¡-¤-µ9Ô3JÒ"JÐ"Jð
 	×Ò�YÔ4Ñ5Ô5Ð5Øˆr6   c                 ó´   — |                       |¦  «        }|                      d¦  «         |                      t          j        ¦  «        }t          ||¦  «        S )Nr)   )Úmake_VariableExpressionri   r€   r#   r1   ÚDrtProposition)rY   r^   rl   ÚvariableÚdrss        r7   rj   zDrtParser.handle_propš   sN   € Ø×/Ò/°Ñ4Ô4ˆØ×Ò˜SÑ!Ô!Ð!Ø×*Ò*­9¬?Ñ;Ô;ˆÝ˜h¨Ñ,Ô,Ð,r6   c                 ó"   — t          ||¦  «        S )zlThis method serves as a hook for other logic parsers that
        have different equality expression classes©ÚDrtEqualityExpression©rY   ÚfirstÚseconds      r7   Úmake_EqualityExpressionz!DrtParser.make_EqualityExpression    s   € õ % U¨FÑ3Ô3Ð3r6   c                 ó|   — |t           j        k    rd„ S |t           j        v rt          S |t           j        v rd„ }|S dS )zbThis method serves as a hook for other logic parsers that
        have different boolean operatorsc                 ó$   — t          | |d ¦  «        S r]   ©ÚDrtConcatenation©rŠ   r‹   s     r7   ú<lambda>z9DrtParser.get_BooleanExpression_factory.<locals>.<lambda>©   s   € Õ)9¸%ÀÈÑ)NÔ)N€ r6   c                 óà   — t          | t          ¦  «        rt          | j        | j        |¦  «        S t          | t          ¦  «        rt	          | j        | j        |¦  «        S t          d¦  «        ‚©Nz'Antecedent of implication must be a DRS)Ú
isinstancer$   ry   rz   r�   rŠ   r‹   Ú	Exceptionr‘   s     r7   Úmake_imp_expressionzDDrtParser.get_BooleanExpression_factory.<locals>.make_imp_expression®   sd   € Ý˜e¥SÑ)Ô)ð @Ý˜uœz¨5¬;¸Ñ?Ô?Ð?Ý˜eÕ%5Ñ6Ô6ð OÝ+¨E¬K¸¼ÀvÑNÔNÐNÝÐ IÑJÔJÐJr6   N)r#   r-   rU   ÚDrtOrExpressionrV   )rY   r^   r—   s      r7   Úget_BooleanExpression_factoryz'DrtParser.get_BooleanExpression_factory¥   s\   € ð •)Ô$Ò$Ð$ØNÐNÐNØ•IÔ%Ð%Ð%Ý"Ð"Ø•IÔ&Ð&Ð&ðKð Kð Kð 'Ð&à�4r6   c                 ó   —  |||¦  «        S r]   r5   )rY   ÚfactoryrŠ   r‹   s       r7   Úmake_BooleanExpressionz DrtParser.make_BooleanExpression¹   s   € Øˆw�u˜fÑ%Ô%Ð%r6   c                 ó"   — t          ||¦  «        S r]   ©ÚDrtApplicationExpression)rY   ÚfunctionÚarguments      r7   Úmake_ApplicationExpressionz$DrtParser.make_ApplicationExpression¼   s   € Ý'¨°(Ñ;Ô;Ð;r6   c                 ó:   — t          t          |¦  «        ¦  «        S r]   )ÚDrtVariableExpressionr   )rY   Únames     r7   r‚   z!DrtParser.make_VariableExpression¿   s   € Ý$¥X¨d¡^¤^Ñ4Ô4Ð4r6   c                 ó"   — t          ||¦  «        S r]   )ÚDrtLambdaExpression)rY   Ú	variablesÚterms      r7   Úmake_LambdaExpressionzDrtParser.make_LambdaExpressionÂ   s   € Ý" 9¨dÑ3Ô3Ð3r6   N)r*   r+   r,   Ú__doc__rO   r[   r_   rm   rr   rf   ru   rw   rj   rŒ   r™   rœ   r¢   r‚   rª   r5   r6   r7   r9   r9   D   sû   € € € € € Ø.Ð.ð
ð 
ð 
ð!ð !ð !ð+ð +ð +ð:ð :ð :ð20ð 0ð 0ð	&ð 	&ð 	&ð	ð 	ð 	ð	ð 	ð 	ð-ð -ð -ð4ð 4ð 4ð
ð ð ð(&ð &ð &ð<ð <ð <ð5ð 5ð 5ð4ð 4ð 4ð 4ð 4r6   r9   c                   ó¾   — e Zd ZdZ e¦   «         Zed„ ¦   «         Zd„ Zd„ Z	d„ Z
d„ Zd„ Zdd	„Zed
„ ¦   «         Zdd„Zd„ Zdd„Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ ZdS )ÚDrtExpressionz_
    This is the base abstract DRT Expression from which every DRT
    Expression extends.
    c                 ó6   — | j                              |¦  «        S r]   )Ú_drt_parserÚparse)ÚclsÚss     r7   Ú
fromstringzDrtExpression.fromstringÎ   s   € àŒ×$Ò$ QÑ'Ô'Ð'r6   c                 ó"   — t          | |¦  «        S r]   rž   ©rY   Úothers     r7   ÚapplytozDrtExpression.applytoÒ   s   € Ý'¨¨eÑ4Ô4Ð4r6   c                 ó    — t          | ¦  «        S r]   ro   rX   s    r7   Ú__neg__zDrtExpression.__neg__Õ   s   € Ý# DÑ)Ô)Ð)r6   c                 ó   — t           S r]   )ÚNotImplementedrµ   s     r7   Ú__and__zDrtExpression.__and__Ø   s   € ÝÐr6   c                 óP   — t          |t          ¦  «        sJ ‚t          | |¦  «        S r]   )r•   r­   r˜   rµ   s     r7   Ú__or__zDrtExpression.__or__Û   s(   € Ý˜%¥Ñ/Ô/Ð/Ð/Ð/Ý˜t UÑ+Ô+Ð+r6   c                 ó  — t          |t          ¦  «        sJ ‚t          | t          ¦  «        rt          | j        | j        |¦  «        S t          | t
          ¦  «        rt          | j        | j        |¦  «        S t          d¦  «        ‚r”   )	r•   r­   r$   ry   rz   r�   rŠ   r‹   r–   rµ   s     r7   Ú__gt__zDrtExpression.__gt__ß   sy   € Ý˜%¥Ñ/Ô/Ð/Ð/Ð/Ý�d�CÑ Ô ð 	5Ý�t”y $¤*¨eÑ4Ô4Ð4Ý�dÕ,Ñ-Ô-ð 	DÝ# D¤J°´¸UÑCÔCÐCÝÐAÑBÔBÐBr6   Nc                 óô   — t          |t          ¦  «        sJ ‚|                      ¦   «                              ¦   «         }|                     ¦   «                              ¦   «         }|                     ||¦  «        S )a<  
        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 ``DrtExpression`` to check equality against
        :param prover: a ``nltk.inference.api.Prover``
        )r•   r­   ÚsimplifyÚfolÚequiv)rY   r¶   ÚproverÚf1Úf2s        r7   rÄ   zDrtExpression.equivç   sb   € õ ˜%¥Ñ/Ô/Ð/Ð/Ð/à�]Š]‰_Œ_× Ò Ñ"Ô"ˆØ�^Š^ÑÔ×!Ò!Ñ#Ô#ˆØ�xŠx˜˜FÑ#Ô#Ð#r6   c                 ó:   — t          d| j        j        z  ¦  «        ‚)Nz#'%s' object has no attribute 'type')ÚAttributeErrorÚ	__class__r*   rX   s    r7   ÚtypezDrtExpression.typeö   s!   € åØ1°D´NÔ4KÑKñ
ô 
ð 	
r6   c                 ó   — t          ¦   «         ‚r]   ©ÚNotImplementedError)rY   Ú	signatures     r7   Ú	typecheckzDrtExpression.typecheckü   s   € Ý!Ñ#Ô#Ð#r6   c                 ó$   — t          | |d ¦  «        S r]   r�   rµ   s     r7   Ú__add__zDrtExpression.__add__ÿ   s   € Ý  e¨TÑ2Ô2Ð2r6   Fc                 ó   — t          ¦   «         ‚)z¼
        Return the set of discourse referents in this DRS.
        :param recursive: bool Also find discourse referents in subterms?
        :return: list of ``Variable`` objects
        rÍ   ©rY   Ú	recursives     r7   Úget_refszDrtExpression.get_refs  s   € õ "Ñ#Ô#Ð#r6   c                 óÒ   — t          | t          ¦  «        oRt          | j        t          ¦  «        o8| j        j        j        t          j        k    ot          | j        t          ¦  «        S )zIs self of the form "PRO(x)"?)
r•   rŸ   r    ÚDrtAbstractVariableExpressionr„   r¥   r#   r.   r¡   ÚDrtIndividualVariableExpressionrX   s    r7   Úis_pronoun_functionz!DrtExpression.is_pronoun_function
  s^   € õ �tÕ5Ñ6Ô6ð KÝ˜4œ=Õ*GÑHÔHðKà”Ô&Ô+­yÔ/@Ò@ðKõ ˜4œ=Õ*IÑJÔJð		
r6   c                 ó"   — t          ||¦  «        S r]   r‡   r‰   s      r7   rŒ   z%DrtExpression.make_EqualityExpression  s   € Ý$ U¨FÑ3Ô3Ð3r6   c                 ó    — t          |¦  «        S r]   )r¤   )rY   r„   s     r7   r‚   z%DrtExpression.make_VariableExpression  s   € Ý$ XÑ.Ô.Ð.r6   c                 ó    — t          | ¦  «        S r]   )Úresolve_anaphorarX   s    r7   rÞ   zDrtExpression.resolve_anaphora  s   € Ý Ñ%Ô%Ð%r6   c                 ó:   — |                       d„ | j        ¦  «        S )Nc                 ó*   — |                       ¦   «         S r]   )Úeliminate_equality)Úes    r7   r’   z2DrtExpression.eliminate_equality.<locals>.<lambda>  s   € ¨q×/CÒ/CÑ/EÔ/E€ r6   )Úvisit_structuredrÊ   rX   s    r7   rá   z DrtExpression.eliminate_equality  s   € Ø×$Ò$Ð%EÐ%EÀtÄ~ÑVÔVÐVr6   c                 óP   — d                      |                      ¦   «         ¦  «        S )zG
        Draw the DRS
        :return: the pretty print string
        Ú
)ÚjoinÚ_prettyrX   s    r7   Úpretty_formatzDrtExpression.pretty_format  s   € ð
 �yŠy˜Ÿš™œÑ(Ô(Ð(r6   c                 óH   — t          |                      ¦   «         ¦  «         d S r]   )Úprintrè   rX   s    r7   Úpretty_printzDrtExpression.pretty_print&  s"   € Ýˆd× Ò Ñ"Ô"Ñ#Ô#Ð#Ð#Ð#r6   c                 óH   — t          | ¦  «                             ¦   «          d S r]   )Ú	DrsDrawerÚdrawrX   s    r7   rî   zDrtExpression.draw)  s    € Ý�$‰Œ×ÒÑÔÐÐÐr6   r]   ©F)r*   r+   r,   r«   r9   r¯   Úclassmethodr³   r·   r¹   r¼   r¾   rÀ   rÄ   ÚpropertyrË   rÐ   rÒ   rÖ   rÚ   rŒ   r‚   rÞ   rá   rè   rë   rî   r5   r6   r7   r­   r­   Æ   ss  € € € € € ðð ð
 �)‘+”+€Kàð(ð (ñ „[ð(ð5ð 5ð 5ð*ð *ð *ðð ð ð,ð ,ð ,ðCð Cð Cð$ð $ð $ð $ð ð
ð 
ñ „Xð
ð
$ð $ð $ð $ð3ð 3ð 3ð$ð $ð $ð $ð
ð 
ð 
ð4ð 4ð 4ð/ð /ð /ð&ð &ð &ðWð Wð Wð)ð )ð )ð$ð $ð $ðð ð ð ð r6   r­   c                   ót   — e Zd ZdZdd„Zdd„Zd„ Zdd„Zd	„ Zd
„ Z	d„ Z
d„ Zd„ Zd„ Zd„ Zd„ Zej        Zd„ ZdS )r$   z%A Discourse Representation Structure.Nc                 ó0   — || _         || _        || _        dS )z²
        :param refs: list of ``DrtIndividualVariableExpression`` for the
            discourse referents
        :param conds: list of ``Expression`` for the conditions
        N)ry   rz   Ú
consequent)rY   ry   rz   rô   s       r7   rO   zDRS.__init__0  s   € ð ˆŒ	ØˆŒ
Ø$ˆŒˆˆr6   FTc                 ó�  ‡‡‡‡‡‡	— ‰| j         v r’‰s| S | j                              ‰¦  «        }| j        r| j                             ‰‰d‰¦  «        }nd}t	          | j         d|…         ‰j        gz   | j         |dz   d…         z   ˆˆˆfd„| j        D ¦   «         |¦  «        S ‰rÓt          | j         ¦  «        ‰                     ¦   «         z  D ]©Š	t          ‰	¦  «        }t          |¦  «        Š| j                              ‰	¦  «        }| j        r| j                             ‰	‰d‰¦  «        }nd}t	          | j         d|…         |gz   | j         |dz   d…         z   ˆˆˆ	fd„| j        D ¦   «         |¦  «        } Œª| j        r| j                             ‰‰‰‰¦  «        }nd}t	          | j         ˆˆˆˆfd„| j        D ¦   «         |¦  «        S )ú_Replace all instances of variable v with expression E in self,
        where v is free in self.TNr=   c                 ó@   •— g | ]}|                      ‰‰d ‰¦  «        ‘ŒS ©T©Úreplace)r?   ÚcondÚalpha_convertrq   r„   s     €€€r7   rA   zDRS.replace.<locals>.<listcomp>K  s;   ø€ ð ð ð à ð Ÿš X¨z¸4ÀÑOÔOðð ð r6   c                 ó@   •— g | ]}|                      ‰‰d ‰¦  «        ‘ŒS rø   rù   )r?   rû   rü   ÚnewvarexÚrefs     €€€r7   rA   zDRS.replace.<locals>.<listcomp>a  s;   ø€ ð ð ð à $ð !ŸLšL¨¨h¸¸mÑLÔLðð ð r6   c                 ó@   •— g | ]}|                      ‰‰‰‰¦  «        ‘ŒS r5   rù   )r?   rû   rü   rq   Úreplace_boundr„   s     €€€€r7   rA   zDRS.replace.<locals>.<listcomp>q  s;   ø€ ð ð ð àð —L’L ¨:°}ÀmÑTÔTðð ð r6   )ry   Úindexrô   rú   r$   r„   rz   ÚsetÚfreer   r¤   )
rY   r„   rq   r  rü   Úirô   Únewvarrþ   rÿ   s
    ````   @@r7   rú   zDRS.replace:  si  øøøøøø€ ð �t”yÐ Ð à ð Ø�à”I—O’O HÑ-Ô-�Ø”?ð &Ø!%¤×!8Ò!8Ø  *¨d°Mñ"ô "�J�Jð "&�JÝØ”I˜b˜q˜b”M ZÔ%8Ð$9Ñ9¸D¼IÀaÈ!ÁeÀgÀgÔ<NÑNðð ð ð ð ð à$(¤Jðñ ô ð ñô ð ð ð õ ˜tœy™>œ>¨J¯OªOÑ,=Ô,=Ñ=ð ð �CÝ,¨SÑ1Ô1�FÝ4°VÑ<Ô<�HØœ	Ÿš¨Ñ,Ô,�AØ”ð *Ø%)¤_×%<Ò%<Ø ¨4°ñ&ô &˜
˜
ð &*˜
ÝØœ	 " 1 "œ¨¨Ñ0°4´9¸QÀ¹U¸W¸WÔ3EÑEðð ð ð ð ð à(,¬
ðñ ô ð #ñô �D�Dð Œð "Ø!œ_×4Ò4Ø˜j¨-¸ñô �
�
ð "�
ÝØ”	ðð ð ð ð ð ð à $¤
ðñ ô ð ñô ð r6   c                 ó  — t          t          j        d„ | j        D ¦   «         t	          ¦   «         ¦  «        }| j        r,|                     | j                             ¦   «         ¦  «         |t	          | j        ¦  «        z
  S )z:see: Expression.free()c                 ó6   — g | ]}|                      ¦   «         ‘ŒS r5   )r  ©r?   Úcs     r7   rA   zDRS.free.<locals>.<listcomp>z  s    € Ð*HÐ*HÐ*H¸¨1¯6ª6©8¬8Ð*HÐ*HÐ*Hr6   )	r   ÚoperatorÚor_rz   r  rô   Úupdater  ry   )rY   Ú
conds_frees     r7   r  zDRS.freex  si   € å�HœLÐ*HÐ*H¸T¼ZÐ*HÑ*HÔ*HÍ#É%Ì%ÑPÔPˆ
ØŒ?ð 	6Ø×Ò˜dœo×2Ò2Ñ4Ô4Ñ5Ô5Ð5Ø�C ¤	™NœNÑ*Ð*r6   c                 óð   — |rn| j         t          t          j        d„ | j        D ¦   «         ¦  «        ¦  «        z   }| j        r-|                     | j                             d¦  «        ¦  «         |S | j         S )ú#:see: AbstractExpression.get_refs()c              3   ó@   K  — | ]}|                      d ¦  «        V — ŒdS ©TN)rÖ   r	  s     r7   ú	<genexpr>zDRS.get_refs.<locals>.<genexpr>ƒ  s.   è è € Ð#IÐ#I¸ A§J¢J¨tÑ$4Ô$4Ð#IÐ#IÐ#IÐ#IÐ#IÐ#Ir6   T)ry   Úlistr   Úfrom_iterablerz   rô   ÚextendrÖ   )rY   rÕ   Ú
conds_refss      r7   rÖ   zDRS.get_refs  s€   € àð 	Øœ¥TÝÔ#Ð#IÐ#I¸d¼jÐ#IÑ#IÔ#IÑIÔIñ&ô &ñ ˆJð Œð BØ×!Ò! $¤/×":Ò":¸4Ñ"@Ô"@ÑAÔAÐAØÐà”9Ðr6   c                 ó°   — t          t          || j        ¦  «        ¦  «        }| j        r#|                      || j        ¦  «        ¦  «          ||¦  «        S ©z:see: Expression.visit())r  Úmaprz   rô   r}   )rY   r    Ú
combinatorÚpartss       r7   Úvisitz	DRS.visit‹  sS   € å•S˜ 4¤:Ñ.Ô.Ñ/Ô/ˆØŒ?ð 	4Ø�LŠL˜˜ $¤/Ñ2Ô2Ñ3Ô3Ð3Øˆz˜%Ñ Ô Ð r6   c           	      ó˜   — | j         r || j         ¦  «        nd} || j        t          t          || j        ¦  «        ¦  «        |¦  «        S )ú#:see: Expression.visit_structured()N)rô   ry   r  r  rz   )rY   r    r  rô   s       r7   rã   zDRS.visit_structured’  sI   € à26´/ÐK�X�X˜dœoÑ.Ô.Ð.Àtˆ
Øˆz˜$œ)¥T­#¨h¸¼
Ñ*CÔ*CÑ%DÔ%DÀjÑQÔQÐQr6   c                 óÐ  — | }d}|t          |j        ¦  «        k     �r|j        |         }t          |t          ¦  «        rßt          |j        t
          ¦  «        rÅt          |j        t
          ¦  «        r«t          t          t          |j
        ¦  «        |j        j        hz
  ¦  «        |j        d |…         |j        |dz   d …         z   |j        ¦  «        }|j        j        |j        j        k    r)|                     |j        j        |j        dd¦  «        }d}|dz  }|dz  }|t          |j        ¦  «        k     �°g }|j        D ]i}|                     ¦   «         }|                     ¦   «         }t          |t          ¦  «        r|j
        s|j        s|j        r|                     |¦  «         Œj|j        r|j                             ¦   «         nd }t          |j
        ||¦  «        S )Nr   r=   F)Úlenrz   r•   r   rŠ   r   r‹   r$   r  r  ry   r„   rô   rú   rá   rÂ   r}   )rY   r…   r  rû   rz   Únew_condÚnew_cond_simprô   s           r7   rá   zDRS.eliminate_equality—  sÛ  € ØˆØˆØ•#�c”i‘.”.Ò Ñ Ø”9˜Q”<ˆDå˜4Õ!3Ñ4Ô4ðå˜tœzÕ+EÑFÔFðõ ˜tœ{Õ,FÑGÔGðõ
 Ý�˜SœX™œ¨$¬+Ô*>Ð)?Ñ?Ñ@Ô@Ø”I˜b˜q˜b”M C¤I¨a°!©e¨g¨gÔ$6Ñ6Ø”Nñô �ð
 ”;Ô'¨4¬:Ô+>Ò>Ð>ØŸ+š+ d¤kÔ&:¸D¼JÈÈuÑUÔU�CØ�AØ�Q‘�Ø�‰FˆAð! •#�c”i‘.”.Ò Ñ ð$ ˆØ”Ið 		'ð 		'ˆDØ×.Ò.Ñ0Ô0ˆHØ$×-Ò-Ñ/Ô/ˆMå˜}­cÑ2Ô2ð'à Ô%ð'ð !Ô&ð'ð !Ô+ð	'ð —’˜XÑ&Ô&Ð&øà<?¼NÐT�S”^×6Ò6Ñ8Ô8Ð8ÐPTˆ
Ý�3”8˜U JÑ/Ô/Ð/r6   c                 óD  — | j         r•d }| j        r$t          t          d„ | j        D ¦   «         ¦  «        }|r(t	          || j                              ¦   «         ¦  «        }n| j                              ¦   «         }| j        d d d…         D ]}t          ||¦  «        }Œ|S | j        st          d¦  «        ‚t          t          d„ | j        D ¦   «         ¦  «        }t          t          |                      | j        ¦  «        d d d…         ¦  «        D ]}t          ||¦  «        }Œ|S )Nc                 ó6   — g | ]}|                      ¦   «         ‘ŒS r5   ©rÃ   r	  s     r7   rA   zDRS.fol.<locals>.<listcomp>¿  s    € Ð.KÐ.KÐ.K¸1¨q¯uªu©w¬wÐ.KÐ.KÐ.Kr6   éÿÿÿÿz-Cannot convert DRS with no conditions to FOL.c                 ó6   — g | ]}|                      ¦   «         ‘ŒS r5   r&  r	  s     r7   rA   zDRS.fol.<locals>.<listcomp>Î  s    € Ð*GÐ*GÐ*G°q¨1¯5ª5©7¬7Ð*GÐ*GÐ*Gr6   )rô   rz   r   r   r   rÃ   ry   r   r–   r  r   Ú_order_ref_stringsr   )rY   Úaccumrÿ   s      r7   rÃ   zDRS.fol»  s-  € ØŒ?ð 	ØˆEØŒzð MÝ�}Ð.KÐ.KÀÄ
Ð.KÑ.KÔ.KÑLÔL�àð .Ý% e¨T¬_×-@Ò-@Ñ-BÔ-BÑCÔC��àœ×+Ò+Ñ-Ô-�à”y   2 ”ð 2ð 2�Ý% c¨5Ñ1Ô1��àˆLð ”:ð QÝÐ OÑPÔPÐPÝ�=Ð*GÐ*G¸D¼JÐ*GÑ*GÔ*GÑHÔHˆEÝ�8 T×%<Ò%<¸T¼YÑ%GÔ%GÈÈÈ"ÈÔ%MÑNÔNð 5ð 5�Ý(¨¨eÑ4Ô4��ØˆLr6   c           	      ó8  ‡— d                      |                      | j        ¦  «        ¦  «        }d„ d„ | j        D ¦   «         D ¦   «         }t	          t          |¦  «        gt          t          t
          |¦  «        ¦  «        z   ¦  «        Šdd‰z  z   dz   d|                     ‰¦  «        z   dz   d	d
‰z  z   dz   gˆfd„|D ¦   «         z   dd‰z  z   dz   gz   }| j	        r=t                               |t          j        | j	                             ¦   «         ¦  «        S |S )NÚ c                 ó   — g | ]	}|D ]}|‘ŒŒ
S r5   r5   )r?   Ú	cond_linerû   s      r7   rA   zDRS._pretty.<locals>.<listcomp>Ö  sA   € ð 
ð 
ð 
àð "ð
ð 
ð
 ð	 ð
ð 
ð 
ð 
r6   c                 óT   — g | ]%}t          d „ |                     ¦   «         ¦  «        ‘Œ&S )c                 ó*   — |                       ¦   «         S r]   )Ústrip)r²   s    r7   r’   z(DRS._pretty.<locals>.<listcomp>.<lambda>Ù  s   €  §¢¡¤€ r6   )Úfilterrç   ©r?   rû   s     r7   rA   zDRS._pretty.<locals>.<listcomp>Ø  s;   € ð ð ð Ø@D•Ð*Ð*¨D¯LªL©N¬NÑ;Ô;ðð ð r6   z _Ú_z_ ú| ú |z|-Ú-z-|c                 óF   •— g | ]}d |                      ‰¦  «        z   dz   ‘ŒS )r5  r6  )Úljust)r?   ÚlineÚlengths     €r7   rA   zDRS._pretty.<locals>.<listcomp>ä  s/   ø€ ÐGÐGÐG°Dˆt�d—j’j Ñ(Ô(Ñ(¨4Ñ/ÐGÐGÐGr6   z|_z_|)ræ   r)  ry   rz   Úmaxr!  r  r  r9  rô   ÚDrtBinaryExpressionÚ_assemble_prettyr#   ÚIMPrç   )rY   Ú	refs_lineÚ
cond_linesr…   r;  s       @r7   rç   zDRS._prettyÓ  sP  ø€ Ø—H’H˜T×4Ò4°T´YÑ?Ô?Ñ@Ô@ˆ	ð
ð 
ðð ØHLÌ
ðñ ô ð
ñ 
ô 
ˆ
õ •c˜)‘n”nÐ%­­Sµ°jÑ-AÔ-AÑ(BÔ(BÑBÑCÔCˆð �s˜V‘|Ñ# dÑ*Ø�y—’ vÑ.Ô.Ñ.°Ñ5Ø�s˜V‘|Ñ# dÑ*ðð
 HÐGÐGÐG¸JÐGÑGÔGñHð �c˜F‘lÑ" TÑ)Ð*ñ+ð 	ð Œ?ð 	Ý&×7Ò7Ø•Y”] D¤O×$;Ò$;Ñ$=Ô$=ñô ð ð ˆ
r6   c                 óÌ  — d„ |D ¦   «         }g }g }g }g }|D ]†}t          |¦  «        r|                     |¦  «         Œ't          |¦  «        r|                     |¦  «         ŒLt          |¦  «        r|                     |¦  «         Œq|                     |¦  «         Œ‡t	          |¦  «        t	          |d„ ¬¦  «        z   t	          |d„ ¬¦  «        z   t	          |d„ ¬¦  «        z   S )Nc                 ó   — g | ]}d |z  ‘ŒS )ú%sr5   )r?   rÿ   s     r7   rA   z*DRS._order_ref_strings.<locals>.<listcomp>î  s   € Ð.Ð.Ð. #�4˜#‘:Ð.Ð.Ð.r6   c                 ór   — t          | dd …         dgt          | dd …         ¦  «        dk             ¦  «        S )NrC   r'  r   ©Úintr!  ©Úvs    r7   r’   z(DRS._order_ref_strings.<locals>.<lambda>þ  s1   € ­s°A°a°b°b´E¸2°;½sÀ1ÀQÀRÀRÄ5¹z¼zÈQºÔ3OÑ/PÔ/P€ r6   )Úkeyc           	      ó‚   — | d         t          | dd …         dgt          | dd …         ¦  «        dk             ¦  «        fS ©Nr   r=   r'  rF  rH  s    r7   r’   z(DRS._order_ref_strings.<locals>.<lambda>ÿ  s;   € ¨q°¬tµS¸!¸A¸B¸B¼%À¸ÅSÈÈ1È2È2ÌÁZÄZÐSTÂ_Ô9UÑ5VÔ5VÐ.W€ r6   c           	      ó‚   — | d         t          | dd …         dgt          | dd …         ¦  «        dk             ¦  «        fS rL  rF  rH  s    r7   r’   z(DRS._order_ref_strings.<locals>.<lambda>   s;   € ¨a°¬dµC¸¸1¸2¸2¼À¸ÅCÈÈ!È"È"ÌÁJÄJÐRSÂOÔ8TÑ4UÔ4UÐ-V€ r6   )r   r}   r   r   Úsorted)rY   ry   ÚstringsÚind_varsÚ	func_varsÚ
event_varsÚ
other_varsr²   s           r7   r)  zDRS._order_ref_stringsí  s  € Ø.Ð.¨Ð.Ñ.Ô.ˆØˆØˆ	Øˆ
Øˆ
Øð 	%ð 	%ˆAÝ˜‰|Œ|ð %Ø—’ Ñ"Ô"Ð"Ð"Ý˜A‘”ð %Ø× Ò  Ñ#Ô#Ð#Ð#Ý˜Q‘”ð %Ø×!Ò! !Ñ$Ô$Ð$Ð$à×!Ò! !Ñ$Ô$Ð$Ð$å�:ÑÔÝ�ZÐ%PÐ%PÐQÑQÔQñRå�YÐ$WÐ$WÐXÑXÔXñYõ �XÐ#VÐ#VÐWÑWÔWñXð	
r6   c                 óê  — t          |t          ¦  «        rÝt          | j        ¦  «        t          |j        ¦  «        k    r³|}t	          | j        |j        ¦  «        D ]1\  }}|                      |¦  «        }|                     ||d¦  «        }Œ2| j        |j        k    rUt          | j        ¦  «        t          |j        ¦  «        k    r+t	          | j        |j        ¦  «        D ]\  }}||k    s dS Œd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].TF)	r•   r$   r!  ry   Úzipr‚   rú   rô   rz   )rY   r¶   Úconverted_otherÚr1Úr2ÚvarexÚc1Úc2s           r7   Ú__eq__z
DRS.__eq__  s  € õ �e�SÑ!Ô!ð 	 Ý�4”9‰~Œ~¥ U¤Z¡¤Ò0Ð0Ø"'�Ý # D¤I¨Ô/CÑ DÔ Dð Oð O‘H�R˜Ø ×8Ò8¸Ñ<Ô<�EØ&5×&=Ò&=¸bÀ%ÈÑ&NÔ&N�O�OØ”? oÔ&@Ò@Ð@ÅSØ”JñFô Få˜Ô.Ñ/Ô/òF0ð F0õ #& d¤j°/Ô2GÑ"HÔ"Hð )ð )™˜˜BØ " b¢ Ø#( 5 5ð !)à˜4Øˆur6   c                 ó   — | |k     S r]   r5   rµ   s     r7   Ú__ne__z
DRS.__ne__  ó   € Ø˜5’=Ð Ð r6   c                 óN  — d                      d                     |                      | j        ¦  «        ¦  «        d                     d„ | j        D ¦   «         ¦  «        ¦  «        }| j        r:t          j        |z   dz   t          j        z   dz   d| j        z  z   t          j	        z   S |S )Nz([{}],[{}])ú,ú, c              3   ó    K  — | ]	}d |z  V — Œ
dS ©rD  Nr5   r3  s     r7   r  zDRS.__str__.<locals>.<genexpr>  s&   è è € Ð9Ð9 d�d˜T‘kÐ9Ð9Ð9Ð9Ð9Ð9r6   r,  rD  )
Úformatræ   r)  ry   rz   rô   r#   rc   r?  rx   ©rY   r…   s     r7   Ú__str__zDRS.__str__  s¶   € Ø×"Ò"Ø�HŠH�T×,Ò,¨T¬YÑ7Ô7Ñ8Ô8Ø�IŠIÐ9Ð9¨d¬jÐ9Ñ9Ô9Ñ9Ô9ñ
ô 
ˆð Œ?ð 		å”Øñàñõ ”-ñ ð ñ	ð
 ˜œÑ(ñ)õ ”/ñ"ðð ˆ
r6   r]   ©FTrï   )r*   r+   r,   r«   rO   rú   r  rÖ   r  rã   rá   rÃ   rç   r)  r]  r_  r   Ú__hash__rh  r5   r6   r7   r$   r$   -  sû   € € € € € Ø/Ð/ð%ð %ð %ð %ð<ð <ð <ð <ð|+ð +ð +ð
ð 
ð 
ð 
ð!ð !ð !ðRð Rð Rð
"0ð "0ð "0ðHð ð ð0ð ð ð4
ð 
ð 
ð,ð ð ð$!ð !ð !ð Ô"€Hðð ð ð ð r6   r$   c                 óò   — 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
    ``DrtAbstractVariableExpression`` appropriate for the given variable.
    )r   r¥   rÙ   r   ÚDrtFunctionVariableExpressionr   ÚDrtEventVariableExpressionÚDrtConstantExpression©r„   s    r7   r¤   r¤   ,  sr   € õ
 �”ÑÔð /Ý.¨xÑ8Ô8Ð8Ý	�H”MÑ	"Ô	"ð /Ý,¨XÑ6Ô6Ð6Ý	�X”]Ñ	#Ô	#ð /Ý)¨(Ñ3Ô3Ð3å$ XÑ.Ô.Ð.r6   c                   ó(   — e Zd Zd„ Zdd„Zd„ Zd„ ZdS )rØ   c                 ó   — | S r]   r5   rX   s    r7   rÃ   z!DrtAbstractVariableExpression.fol<  ó   € Øˆr6   Fc                 ó   — g S ©r  r5   rÔ   s     r7   rÖ   z&DrtAbstractVariableExpression.get_refs?  s   € àˆ	r6   c                 ó<   — d| z  }dt          |¦  «        z  }||||gS ©NrD  r,  ©r!  ©rY   r²   Úblanks      r7   rç   z%DrtAbstractVariableExpression._prettyC  s)   € Ø�4‰KˆØ•c˜!‘f”f‘ˆØ�u˜a Ð'Ð'r6   c                 ó   — | S r]   r5   rX   s    r7   rá   z0DrtAbstractVariableExpression.eliminate_equalityH  rr  r6   Nrï   )r*   r+   r,   rÃ   rÖ   rç   rá   r5   r6   r7   rØ   rØ   ;  sU   € € € € € ðð ð ðð ð ð ð(ð (ð (ð
ð ð ð ð r6   rØ   c                   ó   — e Zd ZdS )rÙ   N©r*   r+   r,   r5   r6   r7   rÙ   rÙ   L  ó   € € € € € ð 	€Dr6   rÙ   c                   ó   — e Zd ZdS )rl  Nr|  r5   r6   r7   rl  rl  R  r}  r6   rl  c                   ó   — e Zd ZdS )rm  Nr|  r5   r6   r7   rm  rm  X  r}  r6   rm  c                   ó   — e Zd ZdS )rn  Nr|  r5   r6   r7   rn  rn  ^  ó   € € € € € Ø€Dr6   rn  c                   ób   — e Zd Zd„ Zdd„Zd„ Zdd„Zd„ Zd„ Ze	j
        Z
d	„ Zd
„ Zd„ Zd„ Zd„ ZdS )rƒ   c                 ó"   — || _         || _        d S r]   ©r„   r…   )rY   r„   r…   s      r7   rO   zDrtProposition.__init__c  s   € Ø ˆŒØˆŒˆˆr6   FTc           	      ó  — | j         |k    rOt          |t          ¦  «        s
J d¦   «         ‚t          |j         | j                             ||||¦  «        ¦  «        S t          | j         | j                             ||||¦  «        ¦  «        S )Nz4Can only replace a proposition label with a variable)r„   r•   rØ   rƒ   r…   rú   )rY   r„   rq   r  rü   s        r7   rú   zDrtProposition.replaceg  s¨   € ØŒ=˜HÒ$Ð$ÝØÕ9ñô ð Fð FàEñFô Fð Fõ "ØÔ#Ø”× Ò  ¨:°}ÀmÑTÔTñô ð õ
 "Ø”Ø”× Ò  ¨:°}ÀmÑTÔTñô ð r6   c                 óZ   — t          | j        | j                             ¦   «         ¦  «        S r]   )rƒ   r„   r…   rá   rX   s    r7   rá   z!DrtProposition.eliminate_equalityv  s"   € Ý˜dœm¨T¬X×-HÒ-HÑ-JÔ-JÑKÔKÐKr6   c                 ó>   — |r| j                              d¦  «        ng S ©NT)r…   rÖ   rÔ   s     r7   rÖ   zDrtProposition.get_refsy  s"   € Ø*3Ð;ˆtŒx× Ò  Ñ&Ô&Ð&¸Ð;r6   c                 ób   — | j         |j         k    o| j        |j        k    o| j        |j        k    S r]   )rÊ   r„   r…   rµ   s     r7   r]  zDrtProposition.__eq__|  s5   € àŒN˜eœoÒ-ð &Ø” ¤Ò/ð&à”˜EœIÒ%ð	
r6   c                 ó   — | |k     S r]   r5   rµ   s     r7   r_  zDrtProposition.__ne__ƒ  r`  r6   c                 ó4   — | j                              ¦   «         S r]   )r…   rÃ   rX   s    r7   rÃ   zDrtProposition.folˆ  s   € ØŒx�|Š|‰~Œ~Ðr6   c                 óô   ‡ ‡— ‰ j                              ¦   «         }dt          d‰ j        z  ¦  «        z  Šˆfd„|d d…         D ¦   «         ˆ fd„|dd…         D ¦   «         z   ˆfd„|dd …         D ¦   «         z   S )Nr,  rD  c                 ó    •— g | ]
}‰d z   |z   ‘ŒS ©r,  r5   ©r?   r:  ry  s     €r7   rA   z*DrtProposition._pretty.<locals>.<listcomp>�  s"   ø€ Ð6Ð6Ð6 DˆU�S‰[˜4ÑÐ6Ð6Ð6r6   r=   c                 ó0   •— g | ]}d ‰j         z  dz   |z   ‘ŒS )rD  r)   ro  )r?   r:  rY   s     €r7   rA   z*DrtProposition._pretty.<locals>.<listcomp>�  s*   ø€ ÐHÐHÐH°Tˆt�d”mÑ# cÑ)¨DÑ0ÐHÐHÐHr6   rC   c                 ó    •— g | ]
}‰d z   |z   ‘ŒS rŽ  r5   r�  s     €r7   rA   z*DrtProposition._pretty.<locals>.<listcomp>‘  s"   ø€ Ð8Ð8Ð8 dˆu�s‰{˜TÑ!Ð8Ð8Ð8r6   )r…   rç   r!  r„   )rY   Údrs_sry  s   ` @r7   rç   zDrtProposition._pretty‹  s�   øø€ Ø”× Ò Ñ"Ô"ˆØ•c˜$ ¤Ñ.Ñ/Ô/Ñ/ˆà6Ð6Ð6Ð6¨E°"°1°"¬IÐ6Ñ6Ô6ØHÐHÐHÐH¸UÀ1ÀQÀ3¼ZÐHÑHÔHñIà8Ð8Ð8Ð8¨e°A°B°B¬iÐ8Ñ8Ô8ñ9ð	
r6   c                 ó6   —  | || j         ¦  «        g¦  «        S r  )r…   ©rY   r    r  s      r7   r  zDrtProposition.visit”  s!   € àˆz˜8˜8 D¤HÑ-Ô-Ð.Ñ/Ô/Ð/r6   c                 ó@   —  || j          || j        ¦  «        ¦  «        S )r  r„  r”  s      r7   rã   zDrtProposition.visit_structured˜  s"   € àˆz˜$œ-¨¨°$´(Ñ);Ô);Ñ<Ô<Ð<r6   c                 ó(   — d| j         › d| j        › d�S )Nzprop(rc  ú)r„  rX   s    r7   rh  zDrtProposition.__str__œ  s   € Ø3�t”}Ð3Ð3¨¬Ð3Ð3Ð3Ð3r6   Nri  rï   )r*   r+   r,   rO   rú   rá   rÖ   r]  r_  r   rj  rÃ   rç   r  rã   rh  r5   r6   r7   rƒ   rƒ   b  sÐ   € € € € € ðð ð ðð ð ð ðLð Lð Lð<ð <ð <ð <ð
ð 
ð 
ð!ð !ð !ð Ô"€Hðð ð ð
ð 
ð 
ð0ð 0ð 0ð=ð =ð =ð4ð 4ð 4ð 4ð 4r6   rƒ   c                   ó"   — e Zd Zd„ Zdd„Zd„ ZdS )rp   c                 óN   — t          | j                             ¦   «         ¦  «        S r]   )r   r©   rÃ   rX   s    r7   rÃ   zDrtNegatedExpression.fol¡  s   € Ý  ¤§¢¡¤Ñ1Ô1Ð1r6   Fc                 ó6   — | j                              |¦  «        S rt  )r©   rÖ   rÔ   s     r7   rÖ   zDrtNegatedExpression.get_refs¤  s   € àŒy×!Ò! )Ñ,Ô,Ð,r6   c                 óÚ   — | j                              ¦   «         }d„ |d d…         D ¦   «         d„ |dd…         D ¦   «         z   d„ |dd…         D ¦   «         z   d„ |dd …         D ¦   «         z   S )Nc                 ó   — g | ]}d |z   ‘ŒS ©z    r5   ©r?   r:  s     r7   rA   z0DrtNegatedExpression._pretty.<locals>.<listcomp>«  s   € Ð6Ð6Ð6˜tˆV�d‰]Ð6Ð6Ð6r6   rC   c                 ó   — g | ]}d |z   ‘ŒS )z__  r5   rž  s     r7   rA   z0DrtNegatedExpression._pretty.<locals>.<listcomp>¬  ó   € Ð9Ð9Ð9 ˆv˜‰}Ð9Ð9Ð9r6   rE   c                 ó   — g | ]}d |z   ‘ŒS )z  | r5   rž  s     r7   rA   z0DrtNegatedExpression._pretty.<locals>.<listcomp>­  r   r6   rG   c                 ó   — g | ]}d |z   ‘ŒS r�  r5   rž  s     r7   rA   z0DrtNegatedExpression._pretty.<locals>.<listcomp>®  s   € Ð8Ð8Ð8 ˆv˜‰}Ð8Ð8Ð8r6   )r©   rç   )rY   Ú
term_liness     r7   rç   zDrtNegatedExpression._pretty¨  s�   € Ø”Y×&Ò&Ñ(Ô(ˆ
à6Ð6 z°"°1°"¤~Ð6Ñ6Ô6Ø9Ð9¨°A°a°C¬Ð9Ñ9Ô9ñ:à9Ð9¨°A°a°C¬Ð9Ñ9Ô9ñ:ð 9Ð8¨°A°B°B¬Ð8Ñ8Ô8ñ9ð	
r6   Nrï   ©r*   r+   r,   rÃ   rÖ   rç   r5   r6   r7   rp   rp      sF   € € € € € ð2ð 2ð 2ð-ð -ð -ð -ð
ð 
ð 
ð 
ð 
r6   rp   c                   ó(   — e Zd Zd„ Zd„ Zd„ Zdd„ZdS )r§   c           	      ó†   — |                       || 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
        T)rÊ   r©   rú   r„   r¤   )rY   r  s     r7   rü   z!DrtLambdaExpression.alpha_convert³  s?   € ð
 �~Š~ØØŒI×Ò˜dœmÕ-BÀ6Ñ-JÔ-JÈDÑQÔQñ
ô 
ð 	
r6   c                 óZ   — t          | j        | j                             ¦   «         ¦  «        S r]   )r   r„   r©   rÃ   rX   s    r7   rÃ   zDrtLambdaExpression.fol½  s   € Ý ¤¨t¬y¯}ª}©¬Ñ?Ô?Ð?r6   c                 ó   ‡‡— | j         g}| j        }|j        | j        k    r1|                     |j         ¦  «         |j        }|j        | j        k    °1d                     d„ |D ¦   «         ¦  «        t
          j        z   Š|                     ¦   «         }dt          ‰¦  «        z  Šˆfd„|d d…         D ¦   «         ˆfd„|dd…         D ¦   «         z   ˆfd„|dd…         D ¦   «         z   ˆfd	„|dd …         D ¦   «         z   S )
Nr,  c              3   ó    K  — | ]	}d |z  V — Œ
dS re  r5   )r?   rI  s     r7   r  z.DrtLambdaExpression._pretty.<locals>.<genexpr>Æ  s&   è è € Ð:Ð:¨1˜d Q™hÐ:Ð:Ð:Ð:Ð:Ð:r6   c                 ó    •— g | ]
}d ‰z   |z   ‘ŒS r�  r5   r�  s     €r7   rA   z/DrtLambdaExpression._pretty.<locals>.<listcomp>Ê  s"   ø€ Ð>Ð>Ð> tˆV�e‰^˜dÑ"Ð>Ð>Ð>r6   r=   c                 ó    •— g | ]
}d ‰z   |z   ‘ŒS )z \  r5   r�  s     €r7   rA   z/DrtLambdaExpression._pretty.<locals>.<listcomp>Ë  s"   ø€ ÐBÐBÐB¨$ˆw˜‰ Ñ%ÐBÐBÐBr6   rC   c                 ó    •— g | ]
}d ‰z   |z   ‘ŒS )z /\ r5   )r?   r:  Ú
var_strings     €r7   rA   z/DrtLambdaExpression._pretty.<locals>.<listcomp>Ì  s#   ø€ ÐGÐGÐG¨tˆw˜Ñ# dÑ*ÐGÐGÐGr6   rE   c                 ó    •— g | ]
}d ‰z   |z   ‘ŒS r�  r5   r�  s     €r7   rA   z/DrtLambdaExpression._pretty.<locals>.<listcomp>Í  s"   ø€ Ð@Ð@Ð@¨ˆv˜‰~ Ñ$Ð@Ð@Ð@r6   )	r„   r©   rÊ   r}   ræ   r#   ÚDOTrç   r!  )rY   r¨   r©   r£  ry  r­  s       @@r7   rç   zDrtLambdaExpression._prettyÀ  s-  øø€ Ø”]�Oˆ	ØŒyˆØŒn ¤Ò.Ð.Ø×Ò˜Tœ]Ñ+Ô+Ð+Ø”9ˆDð Œn ¤Ò.Ð.ð —X’XÐ:Ð:°	Ð:Ñ:Ô:Ñ:Ô:½Y¼]ÑJˆ
Ø—\’\‘^”^ˆ
Ø•c˜*‘o”oÑ%ˆà>Ð>Ð>Ð>¨z¸"¸1¸"¬~Ð>Ñ>Ô>ØBÐBÐBÐB°*¸Q¸q¸S´/ÐBÑBÔBñCàGÐGÐGÐG°zÀ!ÀAÀ#´ÐGÑGÔGñHð AÐ@Ð@Ð@°¸A¸B¸B´Ð@Ñ@Ô@ñAð	
r6   Fc                 ó\   — |r#| j         g| j                             d¦  «        z   n| j         gS ©r  T)r„   r©   rÖ   rÔ   s     r7   rÖ   zDrtLambdaExpression.get_refsÐ  s4   € ð ;DÐXˆTŒ]ˆO˜dœi×0Ò0°Ñ6Ô6Ñ6Ð6È$Ì-Èð	
r6   Nrï   )r*   r+   r,   rü   rÃ   rç   rÖ   r5   r6   r7   r§   r§   ²  sX   € € € € € ð
ð 
ð 
ð@ð @ð @ð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
r6   r§   c                   ó8   — e Zd Zdd„Zd„ Zed„ ¦   «         Zd„ ZdS )r=  Fc                 ót   — |r5| j                              d¦  «        | j                             d¦  «        z   ng S r±  )rŠ   rÖ   r‹   rÔ   s     r7   rÖ   zDrtBinaryExpression.get_refsØ  s>   € ð GPÐWˆDŒJ×Ò Ñ%Ô%¨¬×(<Ò(<¸TÑ(BÔ(BÑBÐBÐUWð	
r6   c                 ó¾   — t                                |                      | j        ¦  «        |                      ¦   «         |                      | j        ¦  «        ¦  «        S r]   )r=  r>  Ú_pretty_subexrŠ   ÚgetOpr‹   rX   s    r7   rç   zDrtBinaryExpression._prettyÞ  sK   € Ý"×3Ò3Ø×Ò˜tœzÑ*Ô*Ø�JŠJ‰LŒLØ×Ò˜tœ{Ñ+Ô+ñ
ô 
ð 	
r6   c                 ó€  ‡‡— t          t          | ¦  «        t          |¦  «        ¦  «        }t          | |¦  «        } t          ||¦  «        }dt          ‰¦  «        z  Št          t	          | |¦  «        ¦  «        }ˆfd„|d d…         D ¦   «         ˆfd„|dd…         D ¦   «         z   ˆfd„|dd …         D ¦   «         z   S )Nr,  c                 ó>   •— g | ]\  }}d |z   d z   ‰z   d z   |z   d z   ‘ŒS rŽ  r5   ©r?   Ú
first_lineÚsecond_linery  s      €r7   rA   z8DrtBinaryExpression._assemble_pretty.<locals>.<listcomp>í  sK   ø€ ð ð ð á+�J ð �jÑ  3Ñ&¨Ñ.°Ñ4°{ÑBÀSÑHðð ð r6   rC   c                 ó>   •— g | ]\  }}d |z   dz   ‰z   dz   |z   dz   ‘ŒS )ú(r,  r—  r5   )r?   rº  r»  Úops      €r7   rA   z8DrtBinaryExpression._assemble_pretty.<locals>.<listcomp>ñ  sK   ø€ ð ð ð á+�J ð �jÑ  3Ñ&¨Ñ+¨cÑ1°KÑ?À#ÑEðð ð r6   rE   c                 ó>   •— g | ]\  }}d |z   d z   ‰z   d z   |z   d z   ‘ŒS rŽ  r5   r¹  s      €r7   rA   z8DrtBinaryExpression._assemble_pretty.<locals>.<listcomp>õ  sK   ø€ ð ð ð á+�J ð �jÑ  3Ñ&¨Ñ.°Ñ4°{ÑBÀSÑHðð ð r6   )r<  r!  Ú_pad_verticallyr  rV  )Úfirst_linesr¾  Úsecond_linesÚ	max_linesÚfirst_second_linesry  s    `   @r7   r>  z$DrtBinaryExpression._assemble_prettyå  s  øø€ å�˜KÑ(Ô(­#¨lÑ*;Ô*;Ñ<Ô<ˆ	Ý% k°9Ñ=Ô=ˆÝ& |°YÑ?Ô?ˆØ•c˜"‘g”g‘ˆÝ!¥# k°<Ñ"@Ô"@ÑAÔAÐðð ð ð à/AÀ"À1À"Ô/Eðñ ô ðð ð ð à/AÀ!ÀAÀ#Ô/Fðñ ô ñ	ðð ð ð à/AÀ!À"À"Ô/Eðñ ô ñð	
r6   c                 ó*   — |                      ¦   «         S r]   ©rç   ©rY   Úsubexs     r7   rµ  z!DrtBinaryExpression._pretty_subexû  s   € Ø�}Š}‰ŒÐr6   Nrï   )r*   r+   r,   rÖ   rç   Ústaticmethodr>  rµ  r5   r6   r7   r=  r=  ×  sa   € € € € € ð
ð 
ð 
ð 
ð
ð 
ð 
ð ð
ð 
ñ „\ð
ð*ð ð ð ð r6   r=  c                   ó   — e Zd ZdS )ÚDrtBooleanExpressionNr|  r5   r6   r7   rË  rË  ÿ  r�  r6   rË  c                   ó   — e Zd Zd„ Zd„ ZdS )r˜   c                 ó~   — t          | j                             ¦   «         | j                             ¦   «         ¦  «        S r]   )r   rŠ   rÃ   r‹   rX   s    r7   rÃ   zDrtOrExpression.fol  s*   € Ý˜DœJŸNšNÑ,Ô,¨d¬k¯oªoÑ.?Ô.?Ñ@Ô@Ð@r6   c                 óž   — t          |t          ¦  «        rd„ |                     ¦   «         D ¦   «         S t                               | |¦  «        S )Nc                 ó"   — g | ]}|d d…         ‘ŒS ©r=   r'  r5   rž  s     r7   rA   z1DrtOrExpression._pretty_subex.<locals>.<listcomp>	  ó    € Ð;Ð;Ð; 4�D˜˜2˜”JÐ;Ð;Ð;r6   )r•   r˜   rç   rË  rµ  rÇ  s     r7   rµ  zDrtOrExpression._pretty_subex  sF   € Ý�e�_Ñ-Ô-ð 	<Ø;Ð;¨5¯=ª=©?¬?Ð;Ñ;Ô;Ð;Ý#×1Ò1°$¸Ñ>Ô>Ð>r6   N)r*   r+   r,   rÃ   rµ  r5   r6   r7   r˜   r˜     s5   € € € € € ðAð Að Að?ð ?ð ?ð ?ð ?r6   r˜   c                   ó   — e Zd Zd„ ZdS )rˆ   c                 ó~   — t          | j                             ¦   «         | j                             ¦   «         ¦  «        S r]   )r   rŠ   rÃ   r‹   rX   s    r7   rÃ   zDrtEqualityExpression.fol  s*   € Ý! $¤*§.¢.Ñ"2Ô"2°D´K·O²OÑ4EÔ4EÑFÔFÐFr6   N)r*   r+   r,   rÃ   r5   r6   r7   rˆ   rˆ     s(   € € € € € ðGð Gð Gð Gð Gr6   rˆ   c                   óz   — e Zd ZdZdd„Zdd„Zd„ Zd„ Zdd	„Zd
„ Z	d„ Z
d„ Zej        Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ ZdS )r�   zDRS of the form '(DRS + DRS)'Nc                 óL   — t                                | ||¦  «         || _        d S r]   )rË  rO   rô   )rY   rŠ   r‹   rô   s       r7   rO   zDrtConcatenation.__init__  s%   € Ý×%Ò% d¨E°6Ñ:Ô:Ð:Ø$ˆŒˆˆr6   FTc                 óø  — | j         }| j        }| j        }||                      ¦   «         v rM|rJ|                     ||||¦  «        }|                     ||||¦  «        }|r|                     ||||¦  «        }nì|r t          |                      d¦  «        ¦  «        |                     ¦   «         z  D ]h}t          t          |¦  «        ¦  «        }	|                     ||	d|¦  «        }|                     ||	d|¦  «        }|r|                     ||	d|¦  «        }Œi|                     ||||¦  «        }|                     ||||¦  «        }|r|                     ||||¦  «        }|  	                    |||¦  «        S )rö   T)
rŠ   r‹   rô   rÖ   rú   r  r  r¤   r   rÊ   )
rY   r„   rq   r  rü   rŠ   r‹   rô   rÿ   rI  s
             r7   rú   zDrtConcatenation.replace  sª  € ð ”
ˆØ”ˆØ”_ˆ
ð �t—}’}‘”Ð&Ð&Øð 
ØŸšØ˜j¨-¸ñô �ð  ŸšØ˜j¨-¸ñô �ð ð Ø!+×!3Ò!3Ø  *¨m¸]ñ"ô "�Jøð ð Uå˜tŸ}š}¨TÑ2Ô2Ñ3Ô3°j·o²oÑ6GÔ6GÑGð Uð U�CÝ-­o¸cÑ.BÔ.BÑCÔC�AØ!ŸMšM¨#¨q°$¸ÑFÔF�EØ#Ÿ^š^¨C°°D¸-ÑHÔH�FØ!ð UØ%/×%7Ò%7¸¸QÀÀmÑ%TÔ%T˜
øà—M’M (¨J¸À}ÑUÔUˆEØ—^’^ H¨j¸-ÈÑWÔWˆFØð Ø'×/Ò/Ø˜j¨-¸ñô �
ð �~Š~˜e V¨ZÑ8Ô8Ð8r6   c                 ó€   — |                       ¦   «         }t          |t          ¦  «        rJ ‚|                     ¦   «         S r]   )rÂ   r•   r�   rá   rg  s     r7   rá   z#DrtConcatenation.eliminate_equality@  s8   € à�mŠm‰oŒoˆÝ˜cÕ#3Ñ4Ô4Ð4Ð4Ð4Ø×%Ò%Ñ'Ô'Ð'r6   c                 óx  — | j                              ¦   «         }| j                             ¦   «         }| j        r| j                             ¦   «         nd }t	          |t
          ¦  «        r»t	          |t
          ¦  «        r¦t          |                     d¦  «        ¦  «        t          |                     d¦  «        ¦  «        z  D ]5}t          t          |¦  «        ¦  «        }| 
                    ||d¦  «        }Œ6t          |j        |j        z   |j        |j        z   |¦  «        S |                      |||¦  «        S rˆ  )rŠ   rÂ   r‹   rô   r•   r$   r  rÖ   r¤   r   rú   ry   rz   rÊ   )rY   rŠ   r‹   rô   rÿ   r  s         r7   rÂ   zDrtConcatenation.simplifyF  s  € Ø”
×#Ò#Ñ%Ô%ˆØ”×%Ò%Ñ'Ô'ˆØ37´?ÐL�T”_×-Ò-Ñ/Ô/Ð/Èˆ
å�e�SÑ!Ô!ð 		=¥j°½Ñ&=Ô&=ð 		=å˜5Ÿ>š>¨$Ñ/Ô/Ñ0Ô0µ3°v·²ÀtÑ7LÔ7LÑ3MÔ3MÑMð ;ð ;�å.­¸sÑ/CÔ/CÑDÔD�ØŸš¨¨V°TÑ:Ô:��å�u”z F¤KÑ/°´¸v¼|Ñ1KÈZÑXÔXÐXà—>’> %¨°Ñ<Ô<Ð<r6   c                 óÜ   — | j                              |¦  «        | j                             |¦  «        z   }| j        r/|r-|                     | j                             d¦  «        ¦  «         |S r±  )rŠ   rÖ   r‹   rô   r  )rY   rÕ   ry   s      r7   rÖ   zDrtConcatenation.get_refsV  sd   € àŒz×"Ò" 9Ñ-Ô-°´×0DÒ0DÀYÑ0OÔ0OÑOˆØŒ?ð 	8˜yð 	8Ø�KŠK˜œ×0Ò0°Ñ6Ô6Ñ7Ô7Ð7Øˆr6   c                 ó   — t           j        S r]   )r#   r-   rX   s    r7   r¶  zDrtConcatenation.getOp]  s   € ÝÔ!Ð!r6   c                 ó¨  — t          |t          ¦  «        r¼|                      ¦   «         }|                     ¦   «         }t          |¦  «        t          |¦  «        k    rt|}t	          ||¦  «        D ]1\  }}|                      |¦  «        }|                     ||d¦  «        }Œ2| j        |j        k    o| j        |j        k    o| j	        |j	        k    S dS rU  )
r•   r�   rÖ   r!  rV  r‚   rú   rŠ   r‹   rô   )rY   r¶   Ú	self_refsÚ
other_refsrW  rX  rY  rZ  s           r7   r]  zDrtConcatenation.__eq__`  sÙ   € õ �eÕ-Ñ.Ô.ð 	ØŸš™œˆIØŸšÑ)Ô)ˆJÝ�9‰~Œ~¥ Z¡¤Ò0Ð0Ø"'�Ý # I¨zÑ :Ô :ð Oð O‘H�R˜Ø ×8Ò8¸Ñ<Ô<�EØ&5×&=Ò&=¸bÀ%ÈÑ&NÔ&N�O�Oà”J /Ô"7Ò7ð FØœ Ô'=Ò=ðFàœ¨?Ô+EÒEðð
 ˆur6   c                 ó   — | |k     S r]   r5   rµ   s     r7   r_  zDrtConcatenation.__ne__r  r`  r6   c                 óÞ   — t          | j                             ¦   «         | j                             ¦   «         ¦  «        }| j        r't          || j                             ¦   «         ¦  «        }|S r]   )r   rŠ   rÃ   r‹   rô   r   )rY   râ   s     r7   rÃ   zDrtConcatenation.folw  sU   € Ý˜$œ*Ÿ.š.Ñ*Ô*¨D¬K¯OªOÑ,=Ô,=Ñ>Ô>ˆØŒ?ð 	8Ý˜a ¤×!4Ò!4Ñ!6Ô!6Ñ7Ô7ˆAØˆr6   c                 óJ  — t                                |                      | j        ¦  «        |                      ¦   «         |                      | j        ¦  «        ¦  «        }| j        r=t                                |t          j        | j         	                    ¦   «         ¦  «        }|S r]   )
r=  r>  rµ  rŠ   r¶  r‹   rô   r#   r?  rç   rg  s     r7   rç   zDrtConcatenation._pretty}  s‡   € Ý!×2Ò2Ø×Ò˜tœzÑ*Ô*Ø�JŠJ‰LŒLØ×Ò˜tœ{Ñ+Ô+ñ
ô 
ˆð
 Œ?ð 	Ý%×6Ò6Ø•Y”] D¤O×$;Ò$;Ñ$=Ô$=ñô ˆCð ˆ
r6   c                 óž   — t          |t          ¦  «        rd„ |                     ¦   «         D ¦   «         S t                               | |¦  «        S )Nc                 ó"   — g | ]}|d d…         ‘ŒS rÐ  r5   rž  s     r7   rA   z2DrtConcatenation._pretty_subex.<locals>.<listcomp>‹  rÑ  r6   )r•   r�   rç   rË  rµ  rÇ  s     r7   rµ  zDrtConcatenation._pretty_subex‰  sG   € Ý�eÕ-Ñ.Ô.ð 	<Ø;Ð;¨5¯=ª=©?¬?Ð;Ñ;Ô;Ð;Ý#×1Ò1°$¸Ñ>Ô>Ð>r6   c                 óÒ   — | j         r8 | || j        ¦  «         || j        ¦  «         || j         ¦  «        g¦  «        S  | || j        ¦  «         || j        ¦  «        g¦  «        S r  )rô   rŠ   r‹   r”  s      r7   r  zDrtConcatenation.visitŽ  s~   € àŒ?ð 	MØ�:Ø�˜$œ*Ñ%Ô% x x°´Ñ'<Ô'<¸h¸hÀtÄÑ>WÔ>WÐXñô ð ð �:˜x˜x¨¬
Ñ3Ô3°X°X¸d¼kÑ5JÔ5JÐKÑLÔLÐLr6   c                 ód  — |                       | j        ¦  «        }|                       | j        ¦  «        }t          j        |z   dz   |                      ¦   «         z   dz   |z   t          j        z   }| j        r:t          j        |z   dz   t          j	        z   dz   d| j        z  z   t          j        z   S |S )Nr,  rD  )
Ú
_str_subexrŠ   r‹   r   rc   r¶  rx   rô   r#   r?  )rY   rŠ   r‹   r…   s       r7   rh  zDrtConcatenation.__str__—  sµ   € Ø—’ ¤
Ñ+Ô+ˆØ—’ ¤Ñ-Ô-ˆÝŒk˜EÑ! CÑ'¨$¯*ª*©,¬,Ñ6¸Ñ<¸vÑEÍÌÑTˆØŒ?ð 		å”Øñàñõ ”-ñ ð ñ	ð
 ˜œÑ(ñ)õ ”/ñ"ðð ˆ
r6   c                 ó\   — d|z  }t          |t          ¦  «        r|j        €
|dd…         S |S )NrD  r=   r'  )r•   r�   rô   )rY   rÈ  r²   s      r7   rå  zDrtConcatenation._str_subex§  s8   € Ø�5‰LˆÝ�eÕ-Ñ.Ô.ð 	°5Ô3CÐ3KØ�Q�r�T”7ˆNØˆr6   r]   ri  rï   )r*   r+   r,   r«   rO   rú   rá   rÂ   rÖ   r¶  r]  r_  rË  rj  rÃ   rç   rµ  r  rh  rå  r5   r6   r7   r�   r�     s	  € € € € € Ø'Ð'ð%ð %ð %ð %ð%9ð %9ð %9ð %9ðN(ð (ð (ð=ð =ð =ð ð ð ð ð"ð "ð "ðð ð ð$!ð !ð !ð $Ô,€Hðð ð ð
ð 
ð 
ð?ð ?ð ?ð
Mð Mð Mðð ð ð ð ð ð ð r6   r�   c                   ó"   — e Zd Zd„ Zdd„Zd„ ZdS )rŸ   c                 ó~   — t          | j                             ¦   «         | j                             ¦   «         ¦  «        S r]   )r	   r    rÃ   r¡   rX   s    r7   rÃ   zDrtApplicationExpression.fol¯  s.   € Ý$ T¤]×%6Ò%6Ñ%8Ô%8¸$¼-×:KÒ:KÑ:MÔ:MÑNÔNÐNr6   Fc                 ót   — |r5| j                              d¦  «        | j                             d¦  «        z   ng S r±  )r    rÖ   r¡   rÔ   s     r7   rÖ   z!DrtApplicationExpression.get_refs²  s>   € ð ðˆDŒM×"Ò" 4Ñ(Ô(¨4¬=×+AÒ+AÀ$Ñ+GÔ+GÑGÐGàð	
r6   c           
      óØ  ‡— |                       ¦   «         \  }}|                     ¦   «         }d„ |D ¦   «         }t          t          t          |g|z   ¦  «        ¦  «        Št          |‰¦  «        }ˆfd„|D ¦   «         }t          t          |t          t          |Ž ¦  «        ¦  «        ¦  «        }d„ |d d…         D ¦   «         d„ |dd…         D ¦   «         z   d„ |dd …         D ¦   «         z   S )Nc                 ó6   — g | ]}|                      ¦   «         ‘ŒS r5   rÆ  )r?   Úargs     r7   rA   z4DrtApplicationExpression._pretty.<locals>.<listcomp>½  s    € Ð4Ð4Ð4¨�c—k’k‘m”mÐ4Ð4Ð4r6   c                 ó0   •— g | ]}t          |‰¦  «        ‘ŒS r5   )rÀ  )r?   Ú	arg_linesrÃ  s     €r7   rA   z4DrtApplicationExpression._pretty.<locals>.<listcomp>À  s#   ø€ ÐXÐXÐXÀ	•o i°Ñ;Ô;ÐXÐXÐXr6   c                 óP   — g | ]#\  }}|d z   d                       |¦  «        z   d z   ‘Œ$S rŽ  ©ræ   ©r?   Ú	func_lineÚ	args_lines      r7   rA   z4DrtApplicationExpression._pretty.<locals>.<listcomp>Ã  sF   € ð ð ð á(�I˜yð ˜C‘ #§(¢(¨9Ñ"5Ô"5Ñ5¸Ñ;ðð ð r6   rC   c                 óP   — g | ]#\  }}|d z   d                      |¦  «        z   dz   ‘Œ$S )r½  rb  r—  rð  rñ  s      r7   rA   z4DrtApplicationExpression._pretty.<locals>.<listcomp>Ç  óF   € ð ð ð á(�I˜yð ˜C‘ #§(¢(¨9Ñ"5Ô"5Ñ5¸Ñ;ðð ð r6   rE   c                 óP   — g | ]#\  }}|d z   d                       |¦  «        z   d z   ‘Œ$S rŽ  rð  rñ  s      r7   rA   z4DrtApplicationExpression._pretty.<locals>.<listcomp>Ë  rõ  r6   )Úuncurryrç   r<  r  r!  rÀ  r  rV  )rY   r    ÚargsÚfunction_linesÚ
args_linesÚfunc_args_linesrÃ  s         @r7   rç   z DrtApplicationExpression._prettyº  s!  ø€ ØŸš™œ‰ˆ�$Ø!×)Ò)Ñ+Ô+ˆØ4Ð4¨tÐ4Ñ4Ô4ˆ
Ý��C .Ð!1°JÑ!>Ñ?Ô?Ñ@Ô@ˆ	Ý(¨¸ÑCÔCˆØXÐXÐXÐXÈZÐXÑXÔXˆ
Ý�s >µ4½¸ZÐ8HÑ3IÔ3IÑJÔJÑKÔKˆðð à,;¸B¸Q¸BÔ,?ðñ ô ðð à,;¸A¸a¸CÔ,@ðñ ô ñ	ðð à,;¸A¸B¸BÔ,?ðñ ô ñð	
r6   Nrï   r¤  r5   r6   r7   rŸ   rŸ   ®  sI   € € € € € ðOð Oð Oð
ð 
ð 
ð 
ð
ð 
ð 
ð 
ð 
r6   rŸ   c                 ód   — dt          | d         ¦  «        z  g}| ||t          | ¦  «        z
  z  z   S )Nr,  r   rw  )ÚlinesrÃ  Úpad_lines      r7   rÀ  rÀ  Ò  s4   € Ø•c˜% œ(‘m”mÑ#Ð$€HØ�8˜y­3¨u©:¬:Ñ5Ñ6Ñ6Ð6r6   c                   ó(   — e Zd Zd„ Zdd„Zd„ Zd„ ZdS )	ÚPossibleAntecedentsc                 ó    — t          | ¦  «        S )zSet of free variables.)r  rX   s    r7   r  zPossibleAntecedents.freeØ  s   € å�4‰yŒyÐr6   FTc                 óŽ   — t          ¦   «         }| D ]3}||k    r|                      |¦  «         Œ|                      |¦  «         Œ4|S )rö   )r   r}   )rY   r„   rq   r  rü   ÚresultÚitems          r7   rú   zPossibleAntecedents.replaceÜ  sX   € õ %Ñ&Ô&ˆØð 	"ð 	"ˆDØ�xÒÐØ—’˜JÑ'Ô'Ð'Ð'à—’˜DÑ!Ô!Ð!Ð!Øˆr6   c                 ó:   — d| z  }dt          |¦  «        z  }|||gS rv  rw  rx  s      r7   rç   zPossibleAntecedents._prettyç  s'   € Ø�4‰KˆØ•c˜!‘f”f‘ˆØ�u˜aÐ Ð r6   c                 óL   — dd                      d„ | D ¦   «         ¦  «        z   dz   S )Nr'   rb  c              3   ó    K  — | ]	}d |z  V — Œ
dS re  r5   )r?   Úits     r7   r  z.PossibleAntecedents.__str__.<locals>.<genexpr>í  s&   è è € Ð7Ð7¨B˜d R™iÐ7Ð7Ð7Ð7Ð7Ð7r6   r(   rð  rX   s    r7   rh  zPossibleAntecedents.__str__ì  s-   € Ø�S—X’XÐ7Ð7°$Ð7Ñ7Ô7Ñ7Ô7Ñ7¸#Ñ=Ð=r6   Nri  )r*   r+   r,   r  rú   rç   rh  r5   r6   r7   r   r   ×  sU   € € € € € ðð ð ð	ð 	ð 	ð 	ð!ð !ð !ð
>ð >ð >ð >ð >r6   r   c                   ó   — e Zd ZdS )ÚAnaphoraResolutionExceptionNr|  r5   r6   r7   r
  r
  ð  r�  r6   r
  c                 óB  — t          | t          ¦  «        �r	|                      ¦   «         r­t          ¦   «         }|D ]c}|                     ¦   «         D ]L}|                      |¦  «        }|j        | j        j        k    r || j        k    s|                     |¦  «         ŒMŒdt          |¦  «        dk    r	|d         }n|}|  
                    | j        |¦  «        S t          | j        || gz   ¦  «        }t          | j        || gz   ¦  «        }|                      ||¦  «        S t          | t          ¦  «        rõg }	| j        D ]¬}
t          |
|| gz   ¦  «        }t          |t          ¦  «        rlt          |j        t          ¦  «        r|j        }|j        |_        ||_        t          |j        t          ¦  «        r|j        st%          d|j        z  ¦  «        ‚|	                     |¦  «         Œ­| j        rt          | j        || gz   ¦  «        }nd }|                      | j        |	|¦  «        S t          | t*          ¦  «        r| S t          | t,          ¦  «        r,|                      t          | j        || gz   ¦  «        ¦  «        S t          | t0          ¦  «        rh| j        rt          | j        || gz   ¦  «        }nd }|                      t          | j        || gz   ¦  «        t          | j        || gz   ¦  «        |¦  «        S t          | t2          ¦  «        rD|                      t          | j        || gz   ¦  «        t          | j        || gz   ¦  «        ¦  «        S t          | t4          ¦  «        r2|                      | j        t          | j        || gz   ¦  «        ¦  «        S d S )Nr=   r   z+Variable '%s' does not resolve to anything.)r•   r	   rÚ   r   rÖ   r‚   rÊ   r¡   r}   r!  rŒ   rÞ   r    r$   rz   r   rŠ   r‹   r
  rô   ry   r   r   r©   r�   r
   r   r„   )rq   ÚtrailÚpossible_antecedentsÚancestorrÿ   ÚrefexÚ
resolutionÚ
r_functionÚ
r_argumentÚr_condsrû   Úr_condÚtemprô   s                 r7   rÞ   rÞ   ô  sç  € Ý�*Õ3Ñ4Ô4ñ O
Ø×)Ò)Ñ+Ô+ð 	@Ý#6Ñ#8Ô#8Ð Ø!ð 
;ð 
;�Ø#×,Ò,Ñ.Ô.ð 	;ð 	;�CØ&×>Ò>¸sÑCÔC�Eð
 ”¨*Ô*=Ô*GÒGÐGØ Ô!4Ò4Ð4à,×3Ò3°EÑ:Ô:Ð:øð	;õ Ð'Ñ(Ô(¨AÒ-Ð-Ø1°!Ô4�
�
à1�
Ø×5Ò5°jÔ6IÈ:ÑVÔVÐVå)¨*Ô*=¸uÈ
À|Ñ?SÑTÔTˆJÝ)¨*Ô*=¸uÈ
À|Ñ?SÑTÔTˆJØ×'Ò'¨
°JÑ?Ô?Ð?å	�J¥Ñ	$Ô	$ð 6
ØˆØÔ$ð 	#ð 	#ˆDÝ% d¨E°Z°LÑ,@ÑAÔAˆFõ ˜&Õ"4Ñ5Ô5ð Ý˜fœlÕ,?Ñ@Ô@ð )à!œ<�DØ#)¤=�F”LØ$(�F”MÝ˜fœmÕ-@ÑAÔAð Ø!œ=ð Ý9ð3Ø5;´\ñBñô ð ð
 �NŠN˜6Ñ"Ô"Ð"Ð"ØÔ ð 	Ý)¨*Ô*?ÀÈ*ÈÑAUÑVÔVˆJˆJàˆJØ×#Ò# J¤O°W¸jÑIÔIÐIå	�JÕ :Ñ	;Ô	;ð 
ØÐå	�JÕ 1Ñ	2Ô	2ð 
Ø×#Ò#Ý˜Zœ_¨e°z°lÑ.BÑCÔCñ
ô 
ð 	
õ 
�JÕ 0Ñ	1Ô	1ð 
ØÔ ð 	Ý)¨*Ô*?ÀÈ*ÈÑAUÑVÔVˆJˆJàˆJØ×#Ò#Ý˜ZÔ-¨u¸
°|Ñ/CÑDÔDÝ˜ZÔ.°¸¸Ñ0DÑEÔEØñ
ô 
ð 	
õ 
�JÕ 0Ñ	1Ô	1ð 	
Ø×#Ò#Ý˜ZÔ-¨u¸
°|Ñ/CÑDÔDÝ˜ZÔ.°¸¸Ñ0DÑEÔEñ
ô 
ð 	
õ
 
�JÕ 0Ñ	1Ô	1ð 
Ø×#Ò#ØÔÕ!1°*´/À5ÈJÈ<ÑCWÑ!XÔ!Xñ
ô 
ð 	
ð
ð 
r6   c                   ó~   — e Zd ZdZdZdZdd„Zd„ Zeef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S )rí   rE   é
   rI   TNc                 óð  — d}|sÜt          ¦   «         }|                     d¦  «         t          dd¬¦  «        }|ryt          |dd¬¦  «        }||_        || _        |                      || j        | j        ¦  «        \  }}t          || j        z   d¦  «        }|| j        z   }	t          |||	¬¦  «        }nt          |d	d	¬¦  «        }| 
                    ¦   «          ||_        || _        || _        || _        dS )
a  
        :param drs: ``DrtExpression``, The DRS to be drawn
        :param size_canvas: bool, True if the canvas size should be the exact size of the DRS
        :param canvas: ``Canvas`` The canvas on which to draw the DRS.  If none is given, create a new canvas.
        NÚDRTÚ	helveticaé   )ÚfamilyÚsizer   )ÚwidthÚheightéd   i,  )r   Útitler    r   ÚfontÚcanvasÚ_visitÚ
OUTERSPACEÚTOPSPACEr<  Úpackr…   Úmaster)
rY   r…   Úsize_canvasr#  r(  r"  ÚrightÚbottomr  r  s
             r7   rO   zDrsDrawer.__init__L  sþ   € ð ˆØð 	Ý‘T”TˆFØ�LŠL˜ÑÔÐå˜{°Ð4Ñ4Ô4ˆDàð 
?Ý ¨a¸Ð:Ñ:Ô:�Ø"�”Ø$�”Ø"&§+¢+¨c°4´?ÀDÄMÑ"RÔ"R‘�˜å˜E D¤OÑ3°SÑ9Ô9�Ø $¤/Ñ1�Ý ¨e¸FÐCÑCÔC��å ¨c¸#Ð>Ñ>Ô>�à�KŠK‰MŒMˆMØˆFŒKàˆŒØˆŒØˆŒˆˆr6   c                 ó@   — | j         j                             d¦  «        S )z Get the height of a line of textÚ	linespace)r#  r"  ÚmetricsrX   s    r7   Ú_get_text_heightzDrsDrawer._get_text_heightl  s   € àŒ{Ô×'Ò'¨Ñ4Ô4Ð4r6   c                 óÞ   — |                       | j        | j        ||¦  «         | j        r)t	          ¦   «         s| j                             ¦   «          dS |                      | j        ||¦  «        S )zDraw the DRSN)Ú_handler…   Ú_draw_commandr(  r!   Úmainloopr$  )rY   r@   Úys      r7   rî   zDrsDrawer.drawp  sf   € à�Š�T”X˜tÔ1°1°aÑ8Ô8Ð8àŒ;ð 	/�w™yœyð 	/ØŒK× Ò Ñ"Ô"Ð"Ð"Ð"à—;’;˜tœx¨¨AÑ.Ô.Ð.r6   c                 ó<   — |                       || j        ||¦  «        S )a!  
        Return the bottom-rightmost point without actually drawing the item

        :param expression: the item to visit
        :param x: the top of the current drawing area
        :param y: the left side of the current drawing area
        :return: the bottom-rightmost point
        )r1  Ú_visit_command)rY   rq   r@   r4  s       r7   r$  zDrsDrawer._visity  s   € ð �|Š|˜J¨Ô(;¸QÀÑBÔBÐBr6   c                 óš  — t          |t          ¦  «        r*| j                             ||d| j        j        |¬¦  «         nvt          |t
          ¦  «        ra|\  }}| j                             ||||¦  «         ||                      ¦   «         z   | j        dz  z   }| j         	                    ||||¦  «         |  
                    |||¦  «        S )a   
        Draw the given item at the given location

        :param item: the item to draw
        :param x: the top of the current drawing area
        :param y: the left side of the current drawing area
        :return: the bottom-rightmost point
        Únw)Úanchorr"  ÚtextrC   )r•   Ústrr#  Úcreate_textr"  ÚtupleÚcreate_rectangler/  ÚBUFFERÚcreate_liner6  )rY   r  r@   r4  r*  r+  Úhoriz_line_ys          r7   r2  zDrsDrawer._draw_command„  sÓ   € õ �d�CÑ Ô ð 		JØŒK×#Ò# A q°¸D¼KÔ<LÐSWÐ#ÑXÔXÐXÐXÝ˜�eÑ$Ô$ð 	Jà"‰OˆU�FØŒK×(Ò(¨¨A¨u°fÑ=Ô=Ð=à�D×)Ò)Ñ+Ô+Ñ+¨t¬{¸Q©Ñ?ð ð ŒK×#Ò# A |°U¸LÑIÔIÐIà×"Ò" 4¨¨AÑ.Ô.Ð.r6   c                 óÐ   — t          |t          ¦  «        r9|| j        j                             |¦  «        z   ||                      ¦   «         z   fS t          |t          ¦  «        r|S dS )a  
        Return the bottom-rightmost point without actually drawing the item

        :param item: the item to visit
        :param x: the top of the current drawing area
        :param y: the left side of the current drawing area
        :return: the bottom-rightmost point
        N)r•   r;  r#  r"  Úmeasurer/  r=  )rY   r  r@   r4  s       r7   r6  zDrsDrawer._visit_commandš  sk   € õ �d�CÑ Ô ð 	Ø˜œÔ(×0Ò0°Ñ6Ô6Ñ6¸¸D×<QÒ<QÑ<SÔ<SÑ8SÐTÐTÝ˜�eÑ$Ô$ð 	ØˆKð	ð 	r6   r   c                 ó¾  — || j         k    r)	 |j        |z   }|j        |z   }||fS # t          $ r Y nw xY wt	          |t
          ¦  «        r| j        }nät	          |t          ¦  «        r| j        }nÇt	          |t          ¦  «        r| j
        }nªt	          |t          ¦  «        r| j        }n�t	          |t          ¦  «        r| j        }npt	          |t          ¦  «        r| j        }nSt	          |t"          ¦  «        r| j        }n6t	          |t$          ¦  «        r| j        }nt)          |j        j        ¦  «        ‚ |||||¦  «        \  }}||z
  |_        ||z
  |_        ||fS )a1  
        :param expression: the expression to handle
        :param command: the function to apply, either _draw_command or _visit_command
        :param x: the top of the current drawing area
        :param y: the left side of the current drawing area
        :return: the bottom-rightmost point
        )r6  Ú_drawing_widthÚ_drawing_heightrÉ   r•   rØ   Ú_handle_VariableExpressionr$   Ú_handle_DRSrp   Ú_handle_NegatedExpressionr§   Ú_handle_LambdaExpressionr
   Ú_handle_BinaryExpressionrŸ   Ú_handle_ApplicationExpressionr   rƒ   Ú_handle_DrtPropositionr–   rÊ   r*   )rY   rq   Úcommandr@   r4  r*  r+  r›   s           r7   r1  zDrsDrawer._handle¨  s”  € ð �dÔ)Ò)Ð)ðà"Ô1°AÑ5�Ø#Ô3°aÑ7�Ø˜v�Ð&øÝ!ð ð ð à�ðøøøõ �jÕ"?Ñ@Ô@ð 	;ØÔ5ˆGˆGÝ˜
¥CÑ(Ô(ð 	;ØÔ&ˆGˆGÝ˜
Õ$8Ñ9Ô9ð 	;ØÔ4ˆGˆGÝ˜
Õ$7Ñ8Ô8ð 	;ØÔ3ˆGˆGÝ˜
Õ$4Ñ5Ô5ð 		;ØÔ3ˆGˆGÝ˜
Õ$<Ñ=Ô=ð 	;ØÔ8ˆGˆGÝ˜
Õ$7Ñ8Ô8ð 	;ØÔ5ˆGˆGÝ˜
¥NÑ3Ô3ð 	;ØÔ1ˆGˆGå˜JÔ0Ô9Ñ:Ô:Ð:à!˜' *¨g°q¸!Ñ<Ô<‰ˆ�ð %*¨A¡Iˆ
Ô!Ø%+¨a¡Zˆ
Ô"à�vˆÐs   �% ¥
2±2c                 ó"   —  |d|z  ||¦  «        S )NrD  r5   )rY   rq   rN  r@   r4  s        r7   rG  z$DrsDrawer._handle_VariableExpressionÖ  s   € Øˆw�t˜jÑ(¨!¨QÑ/Ô/Ð/r6   c           
      ó  — |                       t          j        ||¦  «        d         }|                      |j        |||¦  «        \  }} |t          j        ||                      |||z
  |                      ¦   «         ¦  «        ¦  «         ||fS rt   )r6  r#   ÚNOTr1  r©   Ú_get_centered_topr/  ©rY   rq   rN  r@   r4  r*  r+  s          r7   rI  z#DrsDrawer._handle_NegatedExpressionÙ  sŽ   € à×#Ò#¥I¤M°1°aÑ8Ô8¸Ô;ˆð Ÿ,š, z¤¸ÀÈÑJÔJ‰ˆ�ð 	ˆÝŒMØØ×"Ò" 1 f¨q¡j°$×2GÒ2GÑ2IÔ2IÑJÔJñ	
ô 	
ð 	
ð �vˆÐr6   c                 ó¾  — || j         z   }|| j         z   }|j        r%d                     d„ |j        D ¦   «         ¦  «        }nd} ||||¦  «        \  }}|| j         dz  z  }|j        r@|j        D ]7}	|                      |	|||¦  «        \  }
}t          ||
¦  «        }|| j         z  }Œ8n||                      ¦   «         | j         z   z  }|| j         z  } |||f||¦  «        S )Nr,  c              3   ó    K  — | ]	}d |z  V — Œ
dS re  r5   )r?   Úrs     r7   r  z(DrsDrawer._handle_DRS.<locals>.<genexpr>ï  s&   è è € Ð>Ð>¨˜D 1™HÐ>Ð>Ð>Ð>Ð>Ð>r6   z     rC   )r?  ry   ræ   rz   r1  r<  r/  )rY   rq   rN  r@   r4  Úleftr+  ry   Ú	max_rightrû   r*  s              r7   rH  zDrsDrawer._handle_DRSé  s  € Ø�4”;‰ˆØ�T”[‘ˆð Œ?ð 	Ø—8’8Ð>Ð>¨j¬oÐ>Ñ>Ô>Ñ>Ô>ˆDˆDàˆDØ%˜g d¨D°&Ñ9Ô9Ñˆ�FØ�$”+ ‘/Ñ!ˆð Ôð 	<Ø"Ô(ð &ð &�Ø"&§,¢,¨t°W¸dÀFÑ"KÔ"K‘�˜Ý 	¨5Ñ1Ô1�	Ø˜$œ+Ñ%��ð&ð
 �d×+Ò+Ñ-Ô-°´Ñ;Ñ;ˆFð 	�T”[Ñ ˆ	Øˆw˜	 6Ð*¨A¨qÑ1Ô1Ð1r6   c                 óP  ‡ ‡‡— |                      ¦   «         \  }}t          |t          ¦  «        s|j        }|j        g}‰                      |‰‰¦  «        d         }t          |gˆ ˆˆfd„|D ¦   «         z   ¦  «        }|‰z
  }	‰                      ‰|	|j        ¦  «        }
‰  	                    ||‰|
¦  «        d         }‰                      ‰|	‰  
                    ¦   «         ¦  «        } |t          j        ||¦  «        d         }t          |¦  «        D ]u\  }}‰                      ‰|	|j        ¦  «        }‰  	                    ||||¦  «        d         }|dz   t          |¦  «        k     r  |t          j        dz   ||¦  «        d         }Œv |t          j        ||¦  «        d         }||fS )Nr=   c                 óJ   •— g | ]}‰                      |‰‰¦  «        d          ‘Œ S r<   )r$  )r?   rì  rY   r@   r4  s     €€€r7   rA   z;DrsDrawer._handle_ApplicationExpression.<locals>.<listcomp>  s.   ø€ Ð KÐ KÐ K¸s §¢¨S°!°QÑ!7Ô!7¸Ô!:Ð KÐ KÐ Kr6   r   r,  )r÷  r•   rØ   r    r¡   r$  r<  rR  rF  r1  r/  r#   rc   Ú	enumerater!  rv   rx   )rY   rq   rN  r@   r4  r    rø  Úfunction_bottomÚ
max_bottomÚline_heightÚfunction_drawing_topr*  Úcentred_string_topr  rì  Úarg_drawing_tops   `  ``           r7   rL  z'DrsDrawer._handle_ApplicationExpression  sÞ  øøø€ Ø#×+Ò+Ñ-Ô-‰ˆ�$Ý˜(Õ$AÑBÔBð 	)à!Ô*ˆHØÔ'Ð(ˆDð Ÿ+š+ h°°1Ñ5Ô5°aÔ8ˆÝØÐÐ KÐ KÐ KÐ KÐ KÐ KÀdÐ KÑ KÔ KÑKñ
ô 
ˆ
ð ! 1‘nˆð  $×5Ò5Øˆ{˜HÔ4ñ 
ô  
Ðð —’˜X w°Ð3GÑHÔHÈÔKˆð "×3Ò3Øˆ{˜D×1Ò1Ñ3Ô3ñ
ô 
Ðð ��	œ¨Ð/AÑBÔBÀ1ÔEˆõ " $™œð 	Uð 	U‰HˆQ�Ø"×4Ò4Ø�; Ô 3ñô ˆOð —L’L  g¨u°oÑFÔFÀqÔIˆEà�1‰u•s˜4‘y”yÒ Ð à˜¥	¤°#Ñ 5°uÐ>PÑQÔQÐRSÔT�øð ��	œ¨Ð0BÑCÔCÀAÔFˆà�zÐ"Ð"r6   c           
      ó:  — t           j        d|j        z  z   t           j        z   }|                      |||¦  «        d         }|                      |j        |||¦  «        \  }} ||||                      |||z
  |                      ¦   «         ¦  «        ¦  «         ||fS )NrD  r   )	r#   ÚLAMBDAr„   r¯  r6  r1  r©   rR  r/  )rY   rq   rN  r@   r4  r¨   r*  r+  s           r7   rJ  z"DrsDrawer._handle_LambdaExpression-  s¤   € åÔ$ t¨jÔ.AÑ'AÑAÅIÄMÑQˆ	Ø×#Ò# I¨q°!Ñ4Ô4°QÔ7ˆð Ÿ,š, z¤¸ÀÈÑJÔJ‰ˆ�ð 	ˆØ�q˜$×0Ò0°°F¸Q±JÀ×@UÒ@UÑ@WÔ@WÑXÔXñ	
ô 	
ð 	
ð �vˆÐr6   c           
      óè  — |                       |j        dd¦  «        d         }|                       |j        dd¦  «        d         }t          ||¦  «        }|                      |||                      ¦   «         ¦  «        } |t          j        ||¦  «        d         }	|j        j        }|  	                    |j        ||	|                      |||¦  «        ¦  «        \  }	}
 |d| 
                    ¦   «         z  |	|¦  «        d         }	|j        j        }|  	                    |j        ||	|                      |||¦  «        ¦  «        \  }	} |t          j        |	|¦  «        d         }	|	t          |
|¦  «        fS )Nr   r=   z %s )r$  rŠ   r‹   r<  rR  r/  r#   rc   rF  r1  r¶  rx   )rY   rq   rN  r@   r4  Úfirst_heightÚsecond_heightr^  r`  r*  Úfirst_bottomÚsecond_bottoms               r7   rK  z"DrsDrawer._handle_BinaryExpression<  s~  € à—{’{ :Ô#3°Q¸Ñ:Ô:¸1Ô=ˆØŸš JÔ$5°q¸!Ñ<Ô<¸QÔ?ˆÝ˜,¨Ñ6Ô6ˆð "×3Ò3Øˆ{˜D×1Ò1Ñ3Ô3ñ
ô 
Ðð ��	œ¨Ð+=Ñ>Ô>¸qÔAˆð "Ô'Ô7ˆØ $§¢ØÔØØØ×"Ò" 1 k°<Ñ@Ô@ñ	!
ô !
Ñˆ�ð �˜ ×!1Ò!1Ñ!3Ô!3Ñ3°UÐ<NÑOÔOÐPQÔRˆð #Ô)Ô9ˆØ!%§¢ØÔØØØ×"Ò" 1 k°=ÑAÔAñ	"
ô "
Ñˆ�ð ��	œ¨Ð0BÑCÔCÀAÔFˆà•s˜<¨Ñ7Ô7Ð8Ð8r6   c                 óz   —  ||j         ||¦  «        d         }|                      |j        |||¦  «        \  }}||fS rt   )r„   r1  r©   rS  s          r7   rM  z DrsDrawer._handle_DrtPropositionb  sF   € à�˜
Ô+¨Q°Ñ2Ô2°1Ô5ˆð Ÿ,š, z¤¸ÀÈÑJÔJ‰ˆ�à�vˆÐr6   c                 ó   — |||z
  dz  z   S )zÅGet the y-coordinate of the point that a figure should start at if
        its height is 'item_height' and it needs to be centered in an area that
        starts at 'top' and is 'full_height' tall.rC   r5   )rY   ÚtopÚfull_heightÚitem_heights       r7   rR  zDrsDrawer._get_centered_topk  s   € ð �k KÑ/°1Ñ4Ñ4Ð4r6   r  )r   r   )r*   r+   r,   r?  r&  r%  rO   r/  rî   r$  r2  r6  r1  rG  rI  rH  rL  rJ  rK  rM  rR  r5   r6   r7   rí   rí   G  s!  € € € € € Ø€FØ€HØ€Jðð ð ð ð@5ð 5ð 5ð   8ð /ð /ð /ð /ð	Cð 	Cð 	Cð/ð /ð /ð,ð ð ð,ð ,ð ,ð ,ð\0ð 0ð 0ðð ð ð 2ð 2ð 2ð2)#ð )#ð )#ðVð ð ð$9ð $9ð $9ðLð ð ð5ð 5ð 5ð 5ð 5r6   rí   c                  ót  — t          d¦  «         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¦  «          | d¦  «        }t          |¦  «         |                     t          d¦  «        ¦  «        }t          |¦  «         t          ||k    ¦  «         t          d¦  «         t          t           | d¦  «        ¦  «        ¦  «         t          t           | d¦  «        ¦  «        ¦  «         t          t           | d¦  «        ¦  «        ¦  «         t          d¦  «          | d¦  «                             ¦   «           | d¦  «                             ¦   «           | d¦  «                             ¦   «           | d¦  «                             ¦   «           | d¦  «                             ¦   «          d S )Nz2====================TEST PARSE====================ú([x,y],[sees(x,y)])ú([x],[man(x), walks(x)])z\x.\y.([],[sees(x,y)])z\x.([],[walks(x)])(john)z$(([x],[walks(x)]) + ([y],[runs(y)]))z#(([],[walks(x)]) -> ([],[runs(x)]))z([x],[PRO(x), sees(John,x)])ú ([x],[man(x), -([],[walks(x)])])ú*([],[(([x],[man(x)]) -> ([],[walks(x)]))])z2====================Test fol()====================z\====================Test alpha conversion and lambda expression equality====================z\x.([],[P(x)])Úzz?====================Test resolve_anaphora()====================z,([x,y,z],[dog(x), cat(y), walks(z), PRO(z)])z3([],[(([x],[dog(x)]) -> ([y],[walks(y), PRO(y)]))])z(([x,y],[]) + ([],[PRO(x)]))z;====================Test pretty_print()====================ú([],[])z@([],[([x],[big(x), dog(x)]) -> ([],[bark(x)]) -([x],[walk(x)])])z'([x,y],[x=y]) + ([z],[dog(z), walk(z)])z4([],[([x],[]) | ([y],[]) | ([z],[dog(z), walk(z)])])z0\P.\Q.(([x],[]) + P(x) + Q(x))(\x.([],[dog(x)])))rê   r­   r³   rÃ   rü   r   rÞ   rë   )ÚdexprÚe1Úe2s      r7   Údemorx  r  s­  € Ý	Ð
,Ñ-Ô-Ð-ÝÔ$€EÝ	ˆ%ˆ%Ð&Ñ
'Ô
'Ñ(Ô(Ð(Ý	ˆ%ˆ%Ð+Ñ
,Ô
,Ñ-Ô-Ð-Ý	ˆ%ˆ%Ð)Ñ
*Ô
*Ñ+Ô+Ð+Ý	ˆ%ˆ%Ð+Ñ
,Ô
,Ñ-Ô-Ð-Ý	ˆ%ˆ%Ð7Ñ
8Ô
8Ñ9Ô9Ð9Ý	ˆ%ˆ%Ð6Ñ
7Ô
7Ñ8Ô8Ð8Ý	ˆ%ˆ%Ð/Ñ
0Ô
0Ñ1Ô1Ð1Ý	ˆ%ˆ%Ð3Ñ
4Ô
4Ñ5Ô5Ð5Ý	ˆ%ˆ%Ð=Ñ
>Ô
>Ñ?Ô?Ð?å	Ð
,Ñ-Ô-Ð-Ý	ˆ%ˆ%Ð&Ñ
'Ô
'×
+Ò
+Ñ
-Ô
-Ñ.Ô.Ð.å	Ð
VÑWÔWÐWØ	ˆÐ Ñ	!Ô	!€BÝ	ˆ"�I„I€IØ	×	Ò	�( 3™-œ-Ñ	(Ô	(€BÝ	ˆ"�I„I€IÝ	ˆ"�Š(�O„O€Oå	Ð
9Ñ:Ô:Ð:Ý	Õ
˜5˜5Ð!PÑQÔQÑ
RÔ
RÑSÔSÐSÝ	Ý˜˜ÐUÑVÔVÑWÔWñô ð õ 
Õ
˜5˜5Ð!@ÑAÔAÑ
BÔ
BÑCÔCÐCå	Ð
5Ñ6Ô6Ð6Ø	€Eˆ*ÑÔ×"Ò"Ñ$Ô$Ð$Ø	€EØKñô ç‚l�n„n€nØ	€EÐ
4Ñ5Ô5×BÒBÑDÔDÐDØ	€EÐ
AÑBÔB×OÒOÑQÔQÐQØ	€EÐ
=Ñ>Ô>×KÒKÑMÔMÐMÐMÐMr6   c                  óÆ   — 	 ddl m}  n!# t          $ r}t          d¦  «        ‚d }~ww xY wg d¢}|D ]0}t                               |¦  «        }|                     ¦   «          Œ1d S )Nr   )r   z,tkinter is required, but it's not available.)r@   rt  z([x],[])z([x],[man(x)])ro  rp  z\x.([],[man(x), walks(x)])z\x y.([],[sees(x,y)])z)([],[(([],[walks(x)]) + ([],[runs(x)]))])rq  rr  )Útkinterr   ÚImportErrorÚ
ValueErrorr­   r³   rî   )r   râ   ÚexpressionsÚds       r7   Ú	test_drawr  š  s�   € ðIØÐÐÐÐÐÐøÝð Ið Ið IÝÐGÑHÔHÐHøøøøðIøøøðð ð €Kð ð ð ˆÝ×$Ò$ QÑ'Ô'ˆØ	�Š‰Œˆˆðð s   ‚	 ‰
'“"¢'Ú__main__)Dr  Ú	functoolsr   Ú	itertoolsr   Únltk.sem.logicr   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rz  r   r   Útkinter.fontr    Ú	nltk.utilr!   r{  r#   r9   r­   r$   r¤   rØ   rÙ   rl  rm  rn  rƒ   rp   r§   r=  rË  r˜   rˆ   r�   rŸ   rÀ  r  r   r–   r
  rÞ   rí   rx  r  r*   r5   r6   r7   ú<module>r†     s  ðð €€€Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð:	Ø"Ð"Ð"Ð"Ð"Ð"Ð"Ð"Ø!Ð!Ð!Ð!Ð!Ð!à!Ð!Ð!Ð!Ð!Ð!Ð!øàð 	ð 	ð 	à€Dð	øøøð
+ð +ð +ð +ð +�ñ +ô +ð +ð4ð 4ð 4ð 4ð 4�ñ 4ô 4ð 4ðDdð dð dð dð dñ dô dð dðN|ð |ð |ð |ð |ˆ-˜ñ |ô |ð |ð~/ð /ð /ðð ð ð ð  MÐ3Mñ ô ð ð"	ð 	ð 	ð 	ð 	Ø!Ð#?ñ	ô 	ð 	ð	ð 	ð 	ð 	ð 	Ø!Ð#=ñ	ô 	ð 	ð	ð 	ð 	ð 	ð 	Ø#Ð%<ñ	ô 	ð 	ð	ð 	ð 	ð 	ð 	Ð9Ð;Mñ 	ô 	ð 	ð;4ð ;4ð ;4ð ;4ð ;4�] Jñ ;4ô ;4ð ;4ð|
ð 
ð 
ð 
ð 
˜=Ð*;ñ 
ô 
ð 
ð$"
ð "
ð "
ð "
ð "
˜-Ð)9ñ "
ô "
ð "
ðJ%ð %ð %ð %ð %˜-Ð)9ñ %ô %ð %ðP	ð 	ð 	ð 	ð 	Ð.Ð0Añ 	ô 	ð 	ð?ð ?ð ?ð ?ð ?Ð*¨Lñ ?ô ?ð ?ðGð Gð Gð Gð GÐ/Ð1Cñ Gô Gð Gð
Yð Yð Yð Yð YÐ+ñ Yô Yð Yðx!
ð !
ð !
ð !
ð !
˜}Ð.Cñ !
ô !
ð !
ðH7ð 7ð 7ð
>ð >ð >ð >ð >˜$ ¨zñ >ô >ð >ð2	ð 	ð 	ð 	ð 	 )ñ 	ô 	ð 	ð (*ð P
ð P
ð P
ð P
ðfh5ð h5ð h5ð h5ð h5ñ h5ô h5ð h5ðV	%Nð %Nð %NðPð ð ð2 ˆzÒÐØ€D�F„F€F€F€Fð Ðs   ÁA ÁA%Á$A%