ó
    ´OÂfmA  ã                   óR  • S SK Jr  S SKJrJr  \" 5       r " S S5      r " S S\5      r " S S5      r " S	 S
\5      r	 " S S\	5      r
 " S S\	5      r " S S\5      r " S S\5      r " S S5      r " S S\5      r " S S\5      r " S S\5      rS r\S:X  a  \" 5         gg)é    )ÚCounter)ÚAPPÚLogicParserc                   ó4   • \ rS rSrSrSrSr\\/r\\/-   rSr	g)ÚTokensé   Ú(Ú)z-o© N)
Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__ÚOPENÚCLOSEÚIMPÚPUNCTÚTOKENSÚ__static_attributes__r   ó    Ú6/usr/lib/python3/dist-packages/nltk/sem/linearlogic.pyr   r      s'   † à€DØ€Eð €Cà�5ˆM€EØ�c�U‰]ƒFr   r   c                   óB   • \ rS rSrSrS rS rS rS rS r	S r
S	 rS
rg)ÚLinearLogicParseré   z!A linear logic expression parser.c                 ó¶   • [         R                  " U 5        [        S[        R                  SS S0U l        U =R                  [        R                  /-  sl        g )Né   é   é   )r   Ú__init__r   r   r   Úoperator_precedenceÚright_associated_operations©Úselfs    r   r   ÚLinearLogicParser.__init__   s@   € Ü×Ò˜TÔ"ä$'¨¬F¯J©J¸¸4ÀÐ#CˆÔ Ø×(Ò(¬V¯Z©Z¨LÑ8Ö(r   c                 ó"   • [         R                  $ ©N)r   r   r"   s    r   Úget_all_symbolsÚ!LinearLogicParser.get_all_symbols$   s   € Ü�}‰}Ðr   c                 ó˜   • U[         R                  ;  a  U R                  X5      $ U[         R                  :X  a  U R	                  X5      $ g r&   )r   r   Úhandle_variabler   Úhandle_open)r#   ÚtokÚcontexts      r   ÚhandleÚLinearLogicParser.handle'   sA   € Ø”f—m‘mÓ#Ø×'Ñ'¨Ó5Ð5Ø”F—K‘KÓØ×#Ñ# CÓ1Ð1ð  r   c                 ó8   • U[         R                  :X  a  [        $ g r&   )r   r   ÚImpExpression)r#   r,   s     r   Úget_BooleanExpression_factoryÚ/LinearLogicParser.get_BooleanExpression_factory-   s   € Ø”&—*‘*ÓÜ Ð àr   c                 ó   • U" X#5      $ r&   r   )r#   ÚfactoryÚfirstÚseconds       r   Úmake_BooleanExpressionÚ(LinearLogicParser.make_BooleanExpression3   s   € Ù�uÓ%Ð%r   c                 óN  • U R                  [        U5      (       a‰  U R                  S5      (       as  U R                  S5      [        R
                  :X  aP  U R                  5         U R                  [        5      nU R                  [        R                  5        [        XS5      nU$ )zÐAttempt to make an application expression.  If the next tokens
are an argument in parens, then the argument expression is a
function being applied to the arguments.  Otherwise, return the
argument expression.r   N)
Úhas_priorityr   ÚinRangeÚtokenr   r   Úprocess_next_expressionÚassertNextTokenr   ÚApplicationExpression)r#   Ú
expressionr-   Úarguments       r   Úattempt_ApplicationExpressionÚ/LinearLogicParser.attempt_ApplicationExpression6   st   € ð
 ×ÑœS '×*Ñ*Ø�|‰|˜A�‰ 4§:¡:¨a£=´F·K±KÓ#?Ø—
‘
”Ø×7Ñ7¼Ó<�Ø×$Ñ$¤V§\¡\Ô2Ü2°:ÈÓN�
ØÐr   c                 ó^   • US   R                  5       (       a  [        U5      $ [        U5      $ )Nr   )ÚisupperÚVariableExpressionÚConstantExpression)r#   Únames     r   Úmake_VariableExpressionÚ)LinearLogicParser.make_VariableExpressionC   s)   € Ø�‰7�?‰?×ÑÜ% dÓ+Ð+ä% dÓ+Ð+r   )r    N)r   r   r   r   Ú__doc__r   r'   r.   r2   r8   rC   rJ   r   r   r   r   r   r      s(   † Ù+ò9òò2òò&òõ,r   r   c                   óH   • \ rS rSr\" 5       r\S 5       rSS jrS r	S r
Srg)	Ú
ExpressionéJ   c                 ó8   • U R                   R                  U5      $ r&   )Ú_linear_logic_parserÚparse)ÚclsÚss     r   Ú
fromstringÚExpression.fromstringM   s   € à×'Ñ'×-Ñ-¨aÓ0Ð0r   Nc                 ó   • [        XU5      $ r&   )r@   )r#   ÚotherÚother_indicess      r   ÚapplytoÚExpression.applytoQ   s   € Ü$ T°-Ó@Ð@r   c                 ó$   • U R                  U5      $ r&   )rZ   ©r#   rX   s     r   Ú__call__ÚExpression.__call__T   s   € Ø�|‰|˜EÓ"Ð"r   c                 ó<   • SU R                   R                   SU  S3$ )NÚ<Ú Ú>)Ú	__class__r   r"   s    r   Ú__repr__ÚExpression.__repr__W   s"   € Ø�4—>‘>×*Ñ*Ð+¨1¨T¨F°!Ð4Ð4r   r   r&   )r   r   r   r   r   rQ   ÚclassmethodrU   rZ   r^   re   r   r   r   r   rN   rN   J   s-   † Ù,Ó.Ðàñ1ó ð1ôAò#õ5r   rN   c                   óR   • \ rS rSrSS jrSS jrS rS rS rS r	S	 r
S
 rS rSrg)ÚAtomicExpressioné[   Nc                 ó\   • [        U[        5      (       d   eXl        U(       d  / nX l        g)zy
:param name: str for the constant name
:param dependencies: list of int for the indices on which this atom is dependent
N)Ú
isinstanceÚstrrI   Údependencies)r#   rI   rn   s      r   r   ÚAtomicExpression.__init__\   s*   € ô
 ˜$¤×$Ñ$Ð$Ð$ØŒ	æØˆLØ(Õr   c                 ó&   • U(       a	  X;   a  X   $ U $ )zÍ
If 'self' is bound by 'bindings', return the atomic to which it is bound.
Otherwise, return self.

:param bindings: ``BindingDict`` A dictionary of bindings used to simplify
:return: ``AtomicExpression``
r   ©r#   Úbindingss     r   ÚsimplifyÚAtomicExpression.simplifyh   s   € ö ˜Ó(Ø‘>Ð!àˆKr   c                 ó   • / U l         U / 4$ ©a  
From Iddo Lev's PhD Dissertation p108-109

:param index_counter: ``Counter`` for unique indices
:param glueFormulaFactory: ``GlueFormula`` for creating new glue formulas
:return: (``Expression``,set) for the compiled linear logic and any newly created glue formulas
©rn   ©r#   Úindex_counterÚglueFormulaFactorys      r   Úcompile_posÚAtomicExpression.compile_posu   ó   € ð ˆÔØ�bˆzÐr   c                 ó   • / U l         U / 4$ rv   rw   rx   s      r   Úcompile_negÚAtomicExpression.compile_neg€   r}   r   c                 ó`   • UR                  U R                  R                  5       5      U l        g r&   )Úinitialize_labelrI   Úlower©r#   Úfstructs     r   Úinitialize_labelsÚ"AtomicExpression.initialize_labels‹   s   € Ø×,Ñ,¨T¯Y©Y¯_©_Ó->Ó?ˆ�	r   c                 ót   • U R                   UR                   :H  =(       a    U R                  UR                  :H  $ r&   )rd   rI   r]   s     r   Ú__eq__ÚAtomicExpression.__eq__Ž   s'   € Ø�~‰~ §¡Ñ0×L°T·Y±YÀ%Ç*Á*Ñ5LÐLr   c                 ó   • X:X  + $ r&   r   r]   s     r   Ú__ne__ÚAtomicExpression.__ne__‘   ó   € ØÒ Ð r   c                 ód   • U R                   nU R                  (       a  USU R                  -  -  nU$ ©Nz%s)rI   rn   )r#   Úaccums     r   Ú__str__ÚAtomicExpression.__str__”   s.   € Ø—	‘	ˆØ××Ø�T˜D×-Ñ-Ñ-Ñ-ˆEØˆr   c                 ó,   • [        U R                  5      $ r&   )ÚhashrI   r"   s    r   Ú__hash__ÚAtomicExpression.__hash__š   s   € Ü�D—I‘I‹Ðr   )rn   rI   r&   )r   r   r   r   r   rs   r{   r   r†   r‰   rŒ   r’   r–   r   r   r   r   ri   ri   [   s1   † ô
)ôò	ò	ò@òMò!òõr   ri   c                   ó   • \ rS rSrS rSrg)rH   éž   c                 óÂ   • [        U[        5      (       d   e[        U[        5      (       a   U[        X4/5      -   $ X:X  a  U$ [        XU5      e! [         a     Nf = f)a®  
If 'other' is a constant, then it must be equal to 'self'.  If 'other' is a variable,
then it must not be bound to anything other than 'self'.

:param other: ``Expression``
:param bindings: ``BindingDict`` A dictionary of all current bindings
:return: ``BindingDict`` A new combined dictionary of of 'bindings' and any new binding
:raise UnificationException: If 'self' and 'other' cannot be unified in the context of 'bindings'
)rl   rN   rG   ÚBindingDictÚVariableBindingExceptionÚUnificationException)r#   rX   rr   s      r   ÚunifyÚConstantExpression.unifyŸ   sk   € ô ˜%¤×,Ñ,Ð,Ð,Ü�eÔ/×0Ñ0ðØ¤+°¨}¨oÓ">Ñ>Ð>ð ‹]ØˆOÜ" 4°Ó9Ð9øô	 ,ó Ùðús   ®A Á
AÁAr   N©r   r   r   r   rž   r   r   r   r   rH   rH   ž   s   † õ:r   rH   c                   ó   • \ rS rSrS rSrg)rG   é´   c                 óž   • [        U[        5      (       d   e X:X  a  U$ U[        X4/5      -   $ ! [         a  n[	        XU5      UeSnAff = f)aX  
'self' must not be bound to anything other than 'other'.

:param other: ``Expression``
:param bindings: ``BindingDict`` A dictionary of all current bindings
:return: ``BindingDict`` A new combined dictionary of of 'bindings' and the new binding
:raise UnificationException: If 'self' and 'other' cannot be unified in the context of 'bindings'
N)rl   rN   r›   rœ   r�   ©r#   rX   rr   Úes       r   rž   ÚVariableExpression.unifyµ   s\   € ô ˜%¤×,Ñ,Ð,Ð,ð	EØ‹}Ø�à¤+°¨}¨oÓ">Ñ>Ð>øÜ'ó 	EÜ& t°HÓ=À1ÐDûð	Eús   ™0  0 °
AºAÁAr   Nr    r   r   r   rG   rG   ´   s   † õEr   rG   c                   óT   • \ rS rSrS rSS jrS rS rS rS r	S	 r
S
 rS rS rSrg)r1   éÈ   c                 óx   • [        U[        5      (       d   e[        U[        5      (       d   eXl        X l        g)zk
:param antecedent: ``Expression`` for the antecedent
:param consequent: ``Expression`` for the consequent
N)rl   rN   Ú
antecedentÚ
consequent)r#   rª   r«   s      r   r   ÚImpExpression.__init__É   s4   € ô
 ˜*¤j×1Ñ1Ð1Ð1Ü˜*¤j×1Ñ1Ð1Ð1Ø$ŒØ$�r   Nc                 óŠ   • U R                  U R                  R                  U5      U R                  R                  U5      5      $ r&   )rd   rª   rs   r«   rq   s     r   rs   ÚImpExpression.simplifyÓ   s6   € Ø�~‰~Ø�O‰O×$Ñ$ XÓ.°·±×0HÑ0HÈÓ0Ró
ð 	
r   c                 ó  • [        U[        5      (       d   e UU R                  R                  UR                  U5      -   U R                  R                  UR                  U5      -   $ ! [
         a  n[        XU5      UeSnAff = f)ah  
Both the antecedent and consequent of 'self' and 'other' must unify.

:param other: ``ImpExpression``
:param bindings: ``BindingDict`` A dictionary of all current bindings
:return: ``BindingDict`` A new combined dictionary of of 'bindings' and any new bindings
:raise UnificationException: If 'self' and 'other' cannot be unified in the context of 'bindings'
N)rl   r1   rª   rž   r«   rœ   r�   r¤   s       r   rž   ÚImpExpression.unifyØ   sˆ   € ô ˜%¤×/Ñ/Ð/Ð/ð	EàØ—/‘/×'Ñ'¨×(8Ñ(8¸(ÓCñDà—/‘/×'Ñ'¨×(8Ñ(8¸(ÓCñDðøô
 (ó 	EÜ& t°HÓ=À1ÐDûð	Eús   ™AA) Á)
BÁ3B Â Bc                 ó”   • U R                   R                  X5      u  p4U R                  R                  X5      u  pV[	        X55      XF-   4$ rv   )rª   r   r«   r{   r1   )r#   ry   rz   ÚaÚa_newÚcÚc_news          r   r{   ÚImpExpression.compile_posë   sB   € ð —_‘_×0Ñ0°ÓS‰
ˆØ—_‘_×0Ñ0°ÓS‰
ˆÜ˜aÓ# U¡]Ð3Ð3r   c                 óú   • U R                   R                  X5      u  p4U R                  R                  X5      u  pVUR	                  5       nUR
                  R                  U5        U" SU-  X715      nXTU-   U/-   4$ )a  
From Iddo Lev's PhD Dissertation p108-109

:param index_counter: ``Counter`` for unique indices
:param glueFormulaFactory: ``GlueFormula`` for creating new glue formulas
:return: (``Expression``,list of ``GlueFormula``) for the compiled linear logic and any newly created glue formulas
zv%s)rª   r{   r«   r   Úgetrn   Úappend)	r#   ry   rz   r²   r³   r´   rµ   Úfresh_indexÚnew_vs	            r   r   ÚImpExpression.compile_neg÷   sw   € ð —_‘_×0Ñ0°ÓS‰
ˆØ—_‘_×0Ñ0°ÓS‰
ˆØ#×'Ñ'Ó)ˆØ	�‰×Ñ˜kÔ*Ù" 5¨;Ñ#6¸¸=ÓIˆØ˜5‘= E 7Ñ*Ð+Ð+r   c                 óp   • U R                   R                  U5        U R                  R                  U5        g r&   )rª   r†   r«   r„   s     r   r†   ÚImpExpression.initialize_labels  s&   € Ø�‰×)Ñ)¨'Ô2Ø�‰×)Ñ)¨'Õ2r   c                 ó´   • U R                   UR                   :H  =(       a9    U R                  UR                  :H  =(       a    U R                  UR                  :H  $ r&   )rd   rª   r«   r]   s     r   r‰   ÚImpExpression.__eq__
  sE   € à�N‰N˜eŸo™oÑ-÷ 4Ø—‘ 5×#3Ñ#3Ñ3÷4à—‘ 5×#3Ñ#3Ñ3ð	
r   c                 ó   • X:X  + $ r&   r   r]   s     r   rŒ   ÚImpExpression.__ne__  rŽ   r   c                 ó¨   • SR                  [        R                  U R                  [        R                  U R
                  [        R                  5      $ )Nz{}{} {} {}{})Úformatr   r   rª   r   r«   r   r"   s    r   r’   ÚImpExpression.__str__  s8   € Ø×$Ñ$Ü�K‰KØ�O‰OÜ�J‰JØ�O‰OÜ�L‰Ló
ð 	
r   c                 óŒ   • [        [        U R                  5       [        R                   [        U R                  5       35      $ r&   )r•   rª   r   r   r«   r"   s    r   r–   ÚImpExpression.__hash__  s2   € Ü”t˜DŸO™OÓ,Ð-¬f¯j©j¨\¼$¸t¿¹Ó:OÐ9PÐQÓRÐRr   )rª   r«   r&   )r   r   r   r   r   rs   rž   r{   r   r†   r‰   rŒ   r’   r–   r   r   r   r   r1   r1   È   s6   † ò%ô
ò
Eò&
4ò,ò3ò
ò!ò
õSr   r1   c                   ó@   • \ rS rSrS
S jrS
S jrS rS rS rS r	S	r
g)r@   i!  Nc           	      óÔ  • UR                  5       nUR                  5       n[        U[        5      (       d   e[        U[        5      (       d   e[	        5       n [        U[
        5      (       a  XaR                  -  n[        U[
        5      (       a  XbR                  -  nXdR                  R                  XV5      -  nU(       al  [        UR                  R                  5      U:  d  [        SU< SU< 35      e[        UR                  R                  5      U:X  a  [        SU< SU< 35      eXl        X l        X`l        g! [         a  n[        SU SU SU 35      UeSnAff = f)a1  
:param function: ``Expression`` for the function
:param argument: ``Expression`` for the argument
:param argument_indices: set for the indices of the glue formula from which the argument came
:raise LinearLogicApplicationException: If 'function' cannot be applied to 'argument' given 'argument_indices'.
zCannot apply z to z. NzGDependencies unfulfilled when attempting to apply Linear Logic formula zZDependencies not a proper subset of indices when attempting to apply Linear Logic formula )rs   rl   r1   rN   r›   r@   rr   rª   rž   r�   ÚLinearLogicApplicationExceptionÚsetrn   ÚfunctionrB   )r#   rÌ   rB   Úargument_indicesÚfunction_simpÚargument_simprr   r¥   s           r   r   ÚApplicationExpression.__init__"  sU  € ð !×)Ñ)Ó+ˆØ ×)Ñ)Ó+ˆä˜-¬×7Ñ7Ð7Ð7Ü˜-¬×4Ñ4Ð4Ð4ä“=ˆð		Ü˜(Ô$9×:Ñ:Ø×-Ñ-Ñ-�Ü˜(Ô$9×:Ñ:Ø×-Ñ-Ñ-�Ø×0Ñ0×6Ñ6°}ÓOÑOˆHö ä�}×/Ñ/×<Ñ<Ó=Ð@PÓPÝ5ã$¢mð5óð ô �=×+Ñ+×8Ñ8Ó9Ð=MÓMÝ5ã$¢mð5óð ð
 !ŒØ ŒØ �øô+ $ó 	Ü1Ø ˜¨d°=°/ÀÀAÀ3ÐGóàðûð	ús   ÁA#E Å
E'ÅE"Å"E'c                 ór   • U(       d  U R                   nU R                  R                  U5      R                  $ )a  
Since function is an implication, return its consequent.  There should be
no need to check that the application is valid since the checking is done
by the constructor.

:param bindings: ``BindingDict`` A dictionary of bindings used to simplify
:return: ``Expression``
)rr   rÌ   rs   r«   rq   s     r   rs   ÚApplicationExpression.simplifyN  s+   € ö Ø—}‘}ˆHà�}‰}×%Ñ% hÓ/×:Ñ:Ð:r   c                 ó´   • U R                   UR                   :H  =(       a9    U R                  UR                  :H  =(       a    U R                  UR                  :H  $ r&   )rd   rÌ   rB   r]   s     r   r‰   ÚApplicationExpression.__eq__\  sA   € à�N‰N˜eŸo™oÑ-÷ 0Ø—‘ §¡Ñ/÷0à—‘ §¡Ñ/ð	
r   c                 ó   • X:X  + $ r&   r   r]   s     r   rŒ   ÚApplicationExpression.__ne__c  rŽ   r   c                 ó„   • SU R                   -  [        R                  -   SU R                  -  -   [        R                  -   $ r�   )rÌ   r   r   rB   r   r"   s    r   r’   ÚApplicationExpression.__str__f  s1   € Ø�d—m‘mÑ#¤f§k¡kÑ1°D¸4¿=¹=Ñ4HÑHÌ6Ï<É<ÑWÐWr   c                 óŒ   • [        [        U R                  5       [        R                   [        U R                  5       35      $ r&   )r•   rª   r   r   r«   r"   s    r   r–   ÚApplicationExpression.__hash__i  s2   € Ü”t˜DŸO™OÓ,Ð-¬f¯k©k¨]¼4ÀÇÁÓ;PÐ:QÐRÓSÐSr   )rB   rr   rÌ   r&   )r   r   r   r   r   rs   r‰   rŒ   r’   r–   r   r   r   r   r@   r@   !  s#   † ô*!ôX;ò
ò!òXõTr   r@   c                   óN   • \ rS rSrSS jrS rS rS rS rS r	S	 r
S
 rS rSrg)r›   im  Nc                 óŠ   • 0 U l         [        U[        5      (       a  UR                  5       nU(       a  U H	  u  p#X0U'   M     gg)z¾
:param bindings:
    list [(``VariableExpression``, ``AtomicExpression``)] to initialize the dictionary
    dict {``VariableExpression``: ``AtomicExpression``} to initialize the dictionary
N)Údrl   ÚdictÚitems)r#   rr   ÚvÚbs       r   r   ÚBindingDict.__init__n  s?   € ð ˆŒä�h¤×%Ñ%Ø—~‘~Ó'ˆHæÛ ‘�Ø�Q“ò !ð r   c                 óö   • [        U[        5      (       d   e[        U[        5      (       d   eX:w  d   eU R                  R	                  US5      nU(       a  X#:X  a  X R                  U'   g[        SU-  5      e)ac  
A binding is consistent with the dict if its variable is not already bound, OR if its
variable is already bound to its argument.

:param variable: ``VariableExpression`` The variable bind
:param binding: ``Expression`` The expression to which 'variable' should be bound
:raise VariableBindingException: If the variable cannot be bound in this dictionary
Nz*Variable %s already bound to another value)rl   rG   rN   rÝ   r¸   rœ   )r#   ÚvariableÚbindingÚexistings       r   Ú__setitem__ÚBindingDict.__setitem__}  st   € ô ˜(Ô$6×7Ñ7Ð7Ð7Ü˜'¤:×.Ñ.Ð.Ð.àÓ"Ð"Ð"à—6‘6—:‘:˜h¨Ó-ˆæ˜7Ó.Ø&�F‰F�8Òä*Ø<ÀÑIóð r   c                 ó¶   • [        U[        5      (       d   eU R                  U   nU(       a   U R                  U   nU(       a  M  gg! [         a    Us $ f = f)z4
Return the expression to which 'variable' is bound
N)rl   rG   rÝ   ÚKeyError)r#   rä   Úintermediates      r   Ú__getitem__ÚBindingDict.__getitem__”  sZ   € ô ˜(Ô$6×7Ñ7Ð7Ð7à—v‘v˜hÑ'ˆÞð$Ø#Ÿv™v lÑ3�÷ Šløô ó $Ø#Ò#ð$ús   ¯A	 Á	AÁAc                 ó   • XR                   ;   $ r&   ©rÝ   )r#   Úitems     r   Ú__contains__ÚBindingDict.__contains__¡  s   € Ø—v‘v‰~Ðr   c                 óø   •  [        5       nU R                   H  nU R                  U   X#'   M     UR                   H  nUR                  U   X#'   M     U$ ! [         a  n[        SU < SU< 35      UeSnAff = f)zø
:param other: ``BindingDict`` The dict with which to combine self
:return: ``BindingDict`` A new dict containing all the elements of both parameters
:raise VariableBindingException: If the parameter dictionaries are not consistent with each other
z;Attempting to add two contradicting VariableBindingsLists: ú, N)r›   rÝ   rœ   )r#   rX   Úcombinedrà   r¥   s        r   Ú__add__ÚBindingDict.__add__¤  sz   € ð	Ü"“}ˆHØ—V”V�Ø"Ÿf™f Q™i�“ñ à—W”W�Ø#Ÿg™g a™j�“ñ àˆOøÜ'ó 	Ý*ã48º%ðAóð ðûð	ús   ‚AA Á
A9Á A4Á4A9c                 ó   • X:X  + $ r&   r   r]   s     r   rŒ   ÚBindingDict.__ne__·  rŽ   r   c                 ój   • [        U[        5      (       d  [        eU R                  UR                  :H  $ r&   )rl   r›   Ú	TypeErrorrÝ   r]   s     r   r‰   ÚBindingDict.__eq__º  s'   € Ü˜%¤×-Ñ-ÜˆOØ�v‰v˜Ÿ™Ñ Ð r   c                 óˆ   ^ • SSR                  U 4S j[        T R                  R                  5       5       5       5      -   S-   $ )NÚ{rô   c              3   óJ   >#   • U  H  o S TR                   U    3v •  M     g7f)z: Nrï   )Ú.0rà   r#   s     €r   Ú	<genexpr>Ú&BindingDict.__str__.<locals>.<genexpr>À  s$   øé € ÐRÒ<Q°q  B t§v¡v¨a¡y kÕ2Ò<Qùs   ƒ #Ú})ÚjoinÚsortedrÝ   Úkeysr"   s   `r   r’   ÚBindingDict.__str__¿  s2   ø€ Ø�T—Y‘YÔR¼FÀ4Ç6Á6Ç;Á;Ã=Ô<QÓRÓRÑRÐUXÑXÐXr   c                 ó   • SU -  $ )NzBindingDict: %sr   r"   s    r   re   ÚBindingDict.__repr__Â  s   € Ø  4Ñ'Ð'r   rï   r&   )r   r   r   r   r   rç   rì   rñ   rö   rŒ   r‰   r’   re   r   r   r   r   r›   r›   m  s0   † ôòò.$òòò&!ò!ò
Yõ(r   r›   c                   ó   • \ rS rSrSrg)rœ   iÆ  r   N©r   r   r   r   r   r   r   r   rœ   rœ   Æ  ó   † Úr   rœ   c                   ó   • \ rS rSrS rSrg)r�   iÊ  c           	      óB   • [         R                  U SU SU SU 35        g )NzCannot unify z with z given )Ú	Exceptionr   )r#   r²   rá   rr   s       r   r   ÚUnificationException.__init__Ë  s%   € Ü×Ñ˜4 =°°°6¸!¸¸GÀHÀ:Ð!NÕOr   r   N)r   r   r   r   r   r   r   r   r   r�   r�   Ê  s   † õPr   r�   c                   ó   • \ rS rSrSrg)rÊ   iÏ  r   Nr  r   r   r   rÊ   rÊ   Ï  r  r   rÊ   c                  ó¤  • [         R                  n [        U " S5      5        [        U " S5      5        [        U " S5      5        [        U " S5      5        [        U " S5      R                  5       5        [        U " S5      R                  5       5        [        U " S5      R                  5       5        [        U " S5      R                  5       5        g )	NÚfz(g -o f)z((g -o G) -o G)zg -o h -o fz(g -o f)(g)z(H -o f)(g)z((g -o G) -o G)((g -o f))z(H -o H)((g -o f)))rN   rU   Úprintrs   )Úlexprs    r   Údemor  Ó  s›   € Ü×!Ñ!€Eä	‰%�‹+ÔÜ	‰%�Ó
ÔÜ	‰%Ð"Ó
#Ô$Ü	‰%�Ó
Ô Ü	‰%�Ó
×
(Ñ
(Ó
*Ô+Ü	‰%�Ó
×
(Ñ
(Ó
*Ô+Ü	‰%Ð,Ó
-×
6Ñ
6Ó
8Ô9Ü	‰%Ð%Ó
&×
/Ñ
/Ó
1Õ2r   Ú__main__N)Únltk.internalsr   Únltk.sem.logicr   r   Ú_counterr   r   rN   ri   rH   rG   r1   r@   r›   r  rœ   r�   rÊ   r  r   r   r   r   Ú<module>r     sÎ   ðõ #ß +á‹9€÷	ñ 	ô,,˜ô ,,÷^5ñ 5ô"@�zô @ôF:Ð)ô :ô,EÐ)ô Eô(VS�Jô VSôrIT˜Jô IT÷XV(ñ V(ôr	˜yô 	ôP˜9ô Pô
	 iô 	ò
3ð ˆzÓÙ…Fð r   