§
    �zIfæJ  ã                   ó|  — d Z ddlmZ ddlmZ ddlmZmZ ddlm	Z	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  G d„ de¦  «        Zd	„ Z G d
„ de¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Z  G d„ de¦  «        Z! G d„ d¦  «        Z"d„ Z#d„ Z$d„ Z%d„ Z&d„ Z'd„ Z(d„ Z)e*dk    r e)¦   «          dS dS )zÆ
A module to perform nonmonotonic reasoning.  The ideas and demonstrations in
this module are based on "Logical Foundations of Artificial Intelligence" by
Michael R. Genesereth and Nils J. Nilsson.
é    )Údefaultdict)Úreduce)ÚProverÚProverCommandDecorator)ÚProver9ÚProver9Command)ÚAbstractVariableExpressionÚAllExpressionÚAndExpressionÚApplicationExpressionÚBooleanExpressionÚEqualityExpressionÚExistsExpressionÚ
ExpressionÚImpExpressionÚNegatedExpressionÚVariableÚVariableExpressionÚoperatorÚunique_variablec                   ó   — e Zd ZdS )ÚProverParseErrorN)Ú__name__Ú
__module__Ú__qualname__© ó    úO/var/www/piapp/venv/lib/python3.11/site-packages/nltk/inference/nonmonotonic.pyr   r   &   s   € € € € € Ø€Dr   r   c                 ó|   — | €|}n||  gz   }t          t          j        d„ |D ¦   «         t          ¦   «         ¦  «        S )Nc              3   ó>   K  — | ]}|                      ¦   «         V — Œd S ©N)Ú	constants©Ú.0Úas     r   ú	<genexpr>zget_domain.<locals>.<genexpr>/   s*   è è € Ð HÐ H°1 §¢¡¤Ð HÐ HÐ HÐ HÐ HÐ Hr   )r   r   Úor_Úset)ÚgoalÚassumptionsÚall_expressionss      r   Ú
get_domainr,   *   sC   € Ø€|Ø%ˆˆà%¨$¨¨Ñ/ˆÝ•(”,Ð HÐ H¸Ð HÑ HÔ HÍ#É%Ì%ÑPÔPÐPr   c                   ó$   — e Zd ZdZd„ Zd„ Zd„ ZdS )ÚClosedDomainProverz]
    This is a prover decorator that adds domain closure assumptions before
    proving.
    c                 ó¼   ‡ ‡— d„ ‰ j                              ¦   «         D ¦   «         }‰ j                              ¦   «         }t          ||¦  «        Šˆˆ fd„|D ¦   «         S )Nc                 ó   — g | ]}|‘ŒS r   r   r#   s     r   ú
<listcomp>z2ClosedDomainProver.assumptions.<locals>.<listcomp>9   s   € Ð>Ð>Ð>˜Q�qÐ>Ð>Ð>r   c                 ó<   •— g | ]}‰                      |‰¦  «        ‘ŒS r   ©Úreplace_quants)r$   ÚexÚdomainÚselfs     €€r   r1   z2ClosedDomainProver.assumptions.<locals>.<listcomp><   s)   ø€ ÐFÐFÐF°B�×#Ò# B¨Ñ/Ô/ÐFÐFÐFr   )Ú_commandr*   r)   r,   )r7   r*   r)   r6   s   `  @r   r*   zClosedDomainProver.assumptions8   sd   øø€ Ø>Ð> $¤-×";Ò";Ñ"=Ô"=Ð>Ñ>Ô>ˆØŒ}×!Ò!Ñ#Ô#ˆÝ˜D +Ñ.Ô.ˆØFÐFÐFÐFÐF¸+ÐFÑFÔFÐFr   c                 ó®   — | j                              ¦   «         }t          || j                              ¦   «         ¦  «        }|                      ||¦  «        S r!   )r8   r)   r,   r*   r4   )r7   r)   r6   s      r   r)   zClosedDomainProver.goal>   sH   € ØŒ}×!Ò!Ñ#Ô#ˆÝ˜D $¤-×";Ò";Ñ"=Ô"=Ñ>Ô>ˆØ×"Ò" 4¨Ñ0Ô0Ð0r   c                 ó4  ‡ ‡‡— t          ‰t          ¦  «        r.ˆfd„‰D ¦   «         }ˆˆ fd„|D ¦   «         }t          d„ |¦  «        S t          ‰t          ¦  «        rH‰                     ‰                      ‰j        ‰¦  «        ‰                      ‰j        ‰¦  «        ¦  «        S t          ‰t          ¦  «        r‰                      ‰j	        ‰¦  «         S t          ‰t          ¦  «        r.ˆfd„‰D ¦   «         }ˆˆ fd„|D ¦   «         }t          d„ |¦  «        S ‰S )aÜ  
        Apply the closed domain assumption to the expression

        - Domain = union([e.free()|e.constants() for e in all_expressions])
        - translate "exists x.P" to "(z=d1 | z=d2 | ... ) & P.replace(x,z)" OR
                    "P.replace(x, d1) | P.replace(x, d2) | ..."
        - translate "all x.P" to "P.replace(x, d1) & P.replace(x, d2) & ..."

        :param ex: ``Expression``
        :param domain: set of {Variable}s
        :return: ``Expression``
        c                 ój   •— g | ]/}‰j                              ‰j        t          |¦  «        ¦  «        ‘Œ0S r   ©ÚtermÚreplaceÚvariabler   ©r$   Údr5   s     €r   r1   z5ClosedDomainProver.replace_quants.<locals>.<listcomp>Q   óA   ø€ ð ð ð ØHI�”—’ ¤Õ-?ÀÑ-BÔ-BÑCÔCðð ð r   c                 ó<   •— g | ]}‰                      |‰¦  «        ‘ŒS r   r3   )r$   Úcr6   r7   s     €€r   r1   z5ClosedDomainProver.replace_quants.<locals>.<listcomp>T   ó)   ø€ ÐKÐKÐK¸A˜×,Ò,¨Q°Ñ7Ô7ÐKÐKÐKr   c                 ó   — | |z  S r!   r   ©ÚxÚys     r   ú<lambda>z3ClosedDomainProver.replace_quants.<locals>.<lambda>U   ó
   €  q¨1¡u€ r   c                 ój   •— g | ]/}‰j                              ‰j        t          |¦  «        ¦  «        ‘Œ0S r   r<   r@   s     €r   r1   z5ClosedDomainProver.replace_quants.<locals>.<listcomp>^   rB   r   c                 ó<   •— g | ]}‰                      |‰¦  «        ‘ŒS r   r3   )r$   rA   r6   r7   s     €€r   r1   z5ClosedDomainProver.replace_quants.<locals>.<listcomp>a   rE   r   c                 ó   — | |z  S r!   r   rG   s     r   rJ   z3ClosedDomainProver.replace_quants.<locals>.<lambda>b   rK   r   )Ú
isinstancer
   r   r   Ú	__class__r4   ÚfirstÚsecondr   r=   r   )r7   r5   r6   Ú	conjunctsÚ	disjunctss   ```  r   r4   z!ClosedDomainProver.replace_quantsC   sj  øøø€ õ �b�-Ñ(Ô(ð 	ðð ð ð ØMSðñ ô ˆIð LÐKÐKÐKÐKÀÐKÑKÔKˆIÝÐ,Ð,¨iÑ8Ô8Ð8Ý˜Õ-Ñ.Ô.ð 	Ø—<’<Ø×#Ò# B¤H¨fÑ5Ô5Ø×#Ò# B¤I¨vÑ6Ô6ñô ð õ ˜Õ-Ñ.Ô.ð 		Ø×'Ò'¨¬°Ñ8Ô8Ð8Ð8Ý˜Õ,Ñ-Ô-ð 	ðð ð ð ØMSðñ ô ˆIð LÐKÐKÐKÐKÀÐKÑKÔKˆIÝÐ,Ð,¨iÑ8Ô8Ð8àˆIr   N)r   r   r   Ú__doc__r*   r)   r4   r   r   r   r.   r.   2   sN   € € € € € ðð ð
Gð Gð Gð1ð 1ð 1ð
!ð !ð !ð !ð !r   r.   c                   ó   — e Zd ZdZd„ ZdS )ÚUniqueNamesProverz[
    This is a prover decorator that adds unique names assumptions before
    proving.
    c                 óº  — | j                              ¦   «         }t          t          | j                              ¦   «         |¦  «        ¦  «        }t          ¦   «         }|D ]J}t          |t          ¦  «        r3|j        j	        }|j
        j	        }||                              |¦  «         ŒKg }t          |¦  «        D ]�\  }}||dz   d…         D ]Š}	|	||         vr~t          t          |¦  «        t          |	¦  «        ¦  «        }
t          ¦   «                              |
|¦  «        r||                              |	¦  «         Œt|                     |
 ¦  «         Œ‹Œž||z   S )z¤
        - Domain = union([e.free()|e.constants() for e in all_expressions])
        - if "d1 = d2" cannot be proven from the premises, then add "d1 != d2"
        é   N)r8   r*   Úlistr,   r)   Ú	SetHolderrO   r   rQ   r?   rR   ÚaddÚ	enumerater   r   ÚproveÚappend)r7   r*   r6   Úeq_setsr%   ÚavÚbvÚnew_assumptionsÚiÚbÚnewEqExs              r   r*   zUniqueNamesProver.assumptionsm   se  € ð
 ”m×/Ò/Ñ1Ô1ˆå•j ¤×!3Ò!3Ñ!5Ô!5°{ÑCÔCÑDÔDˆõ ‘+”+ˆØð 	$ð 	$ˆAÝ˜!Õ/Ñ0Ô0ð $Ø”WÔ%�Ø”XÔ&�à˜”—’ Ñ#Ô#Ð#øàˆÝ˜fÑ%Ô%ð 	9ð 	9‰DˆAˆqØ˜A ™E˜G˜G”_ð 9ð 9�à˜G AœJÐ&Ð&Ý0Ý*¨1Ñ-Ô-Õ/AÀ!Ñ/DÔ/Dñô �Gõ ‘y”y—’ w°Ñ<Ô<ð 9ð   œ
Ÿš qÑ)Ô)Ð)Ð)ð (×.Ò.°¨xÑ8Ô8Ð8øð9ð ˜_Ñ,Ð,r   N)r   r   r   rU   r*   r   r   r   rW   rW   g   s-   € € € € € ðð ð
"-ð "-ð "-ð "-ð "-r   rW   c                   ó   — e Zd ZdZd„ ZdS )r[   z&
    A list of sets of Variables.
    c                 ó~   — t          |t          ¦  «        sJ ‚| D ]
}||v r|c S Œ|h}|                      |¦  «         |S )zV
        :param item: ``Variable``
        :return: the set containing 'item'
        )rO   r   r_   )r7   ÚitemÚsÚnews       r   Ú__getitem__zSetHolder.__getitem__—   s`   € õ
 ˜$¥Ñ)Ô)Ð)Ð)Ð)Øð 	ð 	ˆAØ�qˆyˆyØ���ð ð ˆfˆØ�Š�CÑÔÐØˆ
r   N)r   r   r   rU   rl   r   r   r   r[   r[   ’   s-   € € € € € ðð ðð ð ð ð r   r[   c                   ó0   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ ZdS )ÚClosedWorldProvera¡  
    This is a prover decorator that completes predicates before proving.

    If the assumptions contain "P(A)", then "all x.(P(x) -> (x=A))" is the completion of "P".
    If the assumptions contain "all x.(ostrich(x) -> bird(x))", then "all x.(bird(x) -> ostrich(x))" is the completion of "bird".
    If the assumptions don't contain anything that are "P", then "all x.-P(x)" is the completion of "P".

    walk(Socrates)
    Socrates != Bill
    + all x.(walk(x) -> (x=Socrates))
    ----------------
    -walk(Bill)

    see(Socrates, John)
    see(John, Mary)
    Socrates != John
    John != Mary
    + all x.all y.(see(x,y) -> ((x=Socrates & y=John) | (x=John & y=Mary)))
    ----------------
    -see(Socrates, Mary)

    all x.(ostrich(x) -> bird(x))
    bird(Tweety)
    -ostrich(Sam)
    Sam != Tweety
    + all x.(bird(x) -> (ostrich(x) | x=Tweety))
    + all x.-ostrich(x)
    -------------------
    -bird(Sam)
    c           	      óx  — | j                              ¦   «         }|                      |¦  «        }g }|D �]‚}||         }|                      |¦  «        }d„ |D ¦   «         }g }|j        D ]a}	g }
t          ||	¦  «        D ](\  }}|
                     t          ||¦  «        ¦  «         Œ)|                     t          d„ |
¦  «        ¦  «         Œb|j	        D ]S}i }t          ||d         ¦  «        D ]
\  }}|||<   Œ|                     |d          
                    |¦  «        ¦  «         ŒT|r8|                      ||¦  «        }t          d„ |¦  «        }t          ||¦  «        }n#t          |                      ||¦  «        ¦  «        }|d d d…         D ]}t          ||¦  «        }Œ|                     |¦  «         �Œ„||z   S )Nc                 ó,   — g | ]}t          |¦  «        ‘ŒS r   ©r   ©r$   Úvs     r   r1   z1ClosedWorldProver.assumptions.<locals>.<listcomp>Ï   s!   € ÐBÐBÐB°QÕ-¨aÑ0Ô0ÐBÐBÐBr   c                 ó   — | |z  S r!   r   rG   s     r   rJ   z/ClosedWorldProver.assumptions.<locals>.<lambda>Ø   s
   € °Q¸±U€ r   r   rY   c                 ó   — | |z  S r!   r   rG   s     r   rJ   z/ClosedWorldProver.assumptions.<locals>.<lambda>æ   s
   € °°Q±€ r   éÿÿÿÿ)r8   r*   Ú_make_predicate_dictÚ_make_unique_signatureÚ
signaturesÚzipr_   r   r   Ú
propertiesÚsubstitute_bindingsÚ_make_antecedentr   r   r
   )r7   r*   Ú
predicatesrc   ÚpÚ
predHolderÚnew_sigÚnew_sig_exsrT   ÚsigÚequality_exsÚv1Úv2ÚpropÚbindingsÚ
antecedentÚ
consequentÚaccumÚnew_sig_vars                      r   r*   zClosedWorldProver.assumptionsÆ   s  € Ø”m×/Ò/Ñ1Ô1ˆà×.Ò.¨{Ñ;Ô;ˆ
àˆØð #	*ñ #	*ˆAØ# AœˆJØ×1Ò1°*Ñ=Ô=ˆGØBÐB¸'ÐBÑBÔBˆKàˆIð "Ô,ð Kð K�Ø!�Ý! +¨sÑ3Ô3ð Dð D‘F�B˜Ø ×'Ò'Õ(:¸2¸rÑ(BÔ(BÑCÔCÐCÐCØ× Ò ¥Ð(:Ð(:¸LÑ!IÔ!IÑJÔJÐJÐJð #Ô-ð Hð H�à�Ý! +¨t°A¬wÑ7Ô7ð &ð &‘F�B˜Ø#%�H˜R‘L�LØ× Ò   a¤×!<Ò!<¸XÑ!FÔ!FÑGÔGÐGÐGð ð Mà!×2Ò2°1°gÑ>Ô>�
Ý#Ð$6Ð$6¸	ÑBÔB�
Ý% j°*Ñ=Ô=��õ *¨$×*?Ò*?ÀÀ7Ñ*KÔ*KÑLÔL�ð  ' t t¨ tœ}ð :ð :�Ý% k°5Ñ9Ô9��Ø×"Ò" 5Ñ)Ô)Ð)Ñ)à˜_Ñ,Ð,r   c                 óX   — t          d„ t          |j        ¦  «        D ¦   «         ¦  «        S )z˜
        This method figures out how many arguments the predicate takes and
        returns a tuple containing that number of unique variables.
        c              3   ó2   K  — | ]}t          ¦   «         V — Œd S r!   )r   )r$   rd   s     r   r&   z;ClosedWorldProver._make_unique_signature.<locals>.<genexpr>ø   s(   è è € ÐPÐP¨1•_Ñ&Ô&ÐPÐPÐPÐPÐPÐPr   )ÚtupleÚrangeÚsignature_len)r7   r€   s     r   rx   z(ClosedWorldProver._make_unique_signatureó   s,   € õ
 ÐPÐPµ°jÔ6NÑ0OÔ0OÐPÑPÔPÑPÔPÐPr   c                 óD   — |}|D ]} |t          |¦  «        ¦  «        }Œ|S )z†
        Return an application expression with 'predicate' as the predicate
        and 'signature' as the list of arguments.
        rq   )r7   Ú	predicateÚ	signaturer‰   rs   s        r   r}   z"ClosedWorldProver._make_antecedentú   s8   € ð
 ˆ
Øð 	;ð 	;ˆAØ#˜Õ$6°qÑ$9Ô$9Ñ:Ô:ˆJˆJØÐr   c                 ód   — t          t          ¦  «        }|D ]}|                      ||¦  «         Œ|S )zÏ
        Create a dictionary of predicates from the assumptions.

        :param assumptions: a list of ``Expression``s
        :return: dict mapping ``AbstractVariableExpression`` to ``PredHolder``
        )r   Ú
PredHolderÚ_map_predicates)r7   r*   r~   r%   s       r   rw   z&ClosedWorldProver._make_predicate_dict  s?   € õ !¥Ñ,Ô,ˆ
Øð 	0ð 	0ˆAØ× Ò   JÑ/Ô/Ð/Ð/ØÐr   c                 ó¦  — t          |t          ¦  «        rX|                     ¦   «         \  }}t          |t          ¦  «        r*||                              t          |¦  «        ¦  «         d S d S t          |t          ¦  «        r8|                      |j        |¦  «         |                      |j	        |¦  «         d S t          |t          ¦  «        �rr|j        g}|j        }t          |t          ¦  «        r6|                     |j        ¦  «         |j        }t          |t          ¦  «        °6t          |t          ¦  «        �rt          |j        t          ¦  «        rìt          |j	        t          ¦  «        rÔ|j                             ¦   «         \  }}|j	                             ¦   «         \  }	}
t          |t          ¦  «        r‰t          |	t          ¦  «        rv|d„ |D ¦   «         k    rh|d„ |
D ¦   «         k    rZ||	                              t          |¦  «        |j        f¦  «         ||                              |¦  «         d S d S d S d S d S d S d S d S d S )Nc                 ó   — g | ]	}|j         ‘Œ
S r   ©r?   rr   s     r   r1   z5ClosedWorldProver._map_predicates.<locals>.<listcomp>(  ó   € Ð#>Ð#>Ð#>°1 A¤JÐ#>Ð#>Ð#>r   c                 ó   — g | ]	}|j         ‘Œ
S r   rš   rr   s     r   r1   z5ClosedWorldProver._map_predicates.<locals>.<listcomp>)  r›   r   )rO   r   Úuncurryr	   Ú
append_sigr�   r   r—   rQ   rR   r
   r?   r=   r_   r   Úappend_propÚvalidate_sig_len)r7   Ú
expressionÚpredDictÚfuncÚargsrƒ   r=   Úfunc1Úargs1Úfunc2Úargs2s              r   r—   z!ClosedWorldProver._map_predicates  sw  € Ý�jÕ"7Ñ8Ô8ð 	>Ø#×+Ò+Ñ-Ô-‰JˆD�$Ý˜$Õ :Ñ;Ô;ð 7Ø˜”×)Ò)­%°©+¬+Ñ6Ô6Ð6Ð6Ð6ð7ð 7å˜
¥MÑ2Ô2ð 	>Ø× Ò  Ô!1°8Ñ<Ô<Ð<Ø× Ò  Ô!2°HÑ=Ô=Ð=Ð=Ð=Ý˜
¥MÑ2Ô2ñ 	>àÔ&Ð'ˆCØ”?ˆDÝ˜T¥=Ñ1Ô1ð !Ø—
’
˜4œ=Ñ)Ô)Ð)Ø”y�õ ˜T¥=Ñ1Ô1ð !õ ˜$¥Ñ.Ô.ñ >Ý˜dœjÕ*?Ñ@Ô@ð >ÅZØ”KÕ!6ñFô Fð >ð $(¤:×#5Ò#5Ñ#7Ô#7‘L�E˜5Ø#'¤;×#6Ò#6Ñ#8Ô#8‘L�E˜5å" 5Õ*DÑEÔEð>å& uÕ.HÑIÔIð>ð  Ð#>Ð#>¸Ð#>Ñ#>Ô#>Ò>Ð>ØÐ#>Ð#>¸Ð#>Ñ#>Ô#>Ò>Ð>à  œ×3Ò3µU¸3±Z´ZÀÄÐ4LÑMÔMÐMØ  œ×8Ò8¸Ñ=Ô=Ð=Ð=Ð=ð)	>ð 	>ð>ð >ð>ð >ð >ð >ð
>ð >ð >ð >ð ?Ð>Ø>Ð>r   N)	r   r   r   rU   r*   rx   r}   rw   r—   r   r   r   rn   rn   ¦   sm   € € € € € ðð ð>+-ð +-ð +-ðZQð Qð Qðð ð ð
ð 
ð 
ð>ð >ð >ð >ð >r   rn   c                   ó6   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	dS )	r–   aŸ  
    This class will be used by a dictionary that will store information
    about predicates to be used by the ``ClosedWorldProver``.

    The 'signatures' property is a list of tuples defining signatures for
    which the predicate is true.  For instance, 'see(john, mary)' would be
    result in the signature '(john,mary)' for 'see'.

    The second element of the pair is a list of pairs such that the first
    element of the pair is a tuple of variables and the second element is an
    expression of those variables that makes the predicate true.  For instance,
    'all x.all y.(see(x,y) -> know(x,y))' would result in "((x,y),('see(x,y)'))"
    for 'know'.
    c                 ó0   — g | _         g | _        d | _        d S r!   ©ry   r{   r‘   ©r7   s    r   Ú__init__zPredHolder.__init__?  s   € ØˆŒØˆŒØ!ˆÔÐÐr   c                 ód   — |                       |¦  «         | j                             |¦  «         d S r!   )r    ry   r_   ©r7   r�   s     r   rž   zPredHolder.append_sigD  s2   € Ø×Ò˜gÑ&Ô&Ð&ØŒ×Ò˜wÑ'Ô'Ð'Ð'Ð'r   c                 óp   — |                       |d         ¦  «         | j                             |¦  «         d S )Nr   )r    r{   r_   )r7   Únew_props     r   rŸ   zPredHolder.append_propH  s6   € Ø×Ò˜h qœkÑ*Ô*Ð*ØŒ×Ò˜xÑ(Ô(Ð(Ð(Ð(r   c                 óŽ   — | j         €t          |¦  «        | _         d S | j         t          |¦  «        k    rt          d¦  «        ‚d S )NzSignature lengths do not match)r‘   ÚlenÚ	Exceptionr¯   s     r   r    zPredHolder.validate_sig_lenL  sJ   € ØÔÐ%Ý!$ W¡¤ˆDÔÐÐØÔ¥3 w¡<¤<Ò/Ð/ÝÐ<Ñ=Ô=Ð=ð 0Ð/r   c                 ó8   — d| j         › d| j        › d| j        › d�S )Nú(ú,ú)r«   r¬   s    r   Ú__str__zPredHolder.__str__R  s*   € ØL�4”?ÐLÐL T¤_ÐLÐL°tÔ7IÐLÐLÐLÐLr   c                 ó   — d| z  S )Nz%sr   r¬   s    r   Ú__repr__zPredHolder.__repr__U  s   € Ø�d‰{Ðr   N)
r   r   r   rU   r­   rž   rŸ   r    r¹   r»   r   r   r   r–   r–   /  s{   € € € € € ðð ð"ð "ð "ð
(ð (ð (ð)ð )ð )ð>ð >ð >ðMð Mð Mðð ð ð ð r   r–   c                  ó.	  — t           j        }  | d¦  «        } | d¦  «        } | d¦  «        }t          |||g¦  «        }t          |                     ¦   «         ¦  «         t          |¦  «        }t          d¦  «         |                     ¦   «         D ]}t          d|¦  «         Œt          d|                     ¦   «         ¦  «         t          |                     ¦   «         ¦  «          | d¦  «        } | d¦  «        } | d¦  «        } | d¦  «        }t          ||||g¦  «        }t          |                     ¦   «         ¦  «         t          |¦  «        }t          d¦  «         |                     ¦   «         D ]}t          d|¦  «         Œt          d|                     ¦   «         ¦  «         t          |                     ¦   «         ¦  «          | d¦  «        } | d¦  «        } | d¦  «        } | d¦  «        }t          ||||g¦  «        }t          |                     ¦   «         ¦  «         t          |¦  «        }t          d¦  «         |                     ¦   «         D ]}t          d|¦  «         Œt          d|                     ¦   «         ¦  «         t          |                     ¦   «         ¦  «          | d¦  «        } | d¦  «        } | d	¦  «        }t          |||g¦  «        }t          |                     ¦   «         ¦  «         t          |¦  «        }t          d¦  «         |                     ¦   «         D ]}t          d|¦  «         Œt          d|                     ¦   «         ¦  «         t          |                     ¦   «         ¦  «          | d
¦  «        } | d¦  «        } | d¦  «        } | d¦  «        } | d¦  «        }	 | d¦  «        }t          ||||||	g¦  «        }t          |                     ¦   «         ¦  «         t          |¦  «        }t          d¦  «         |                     ¦   «         D ]}t          d|¦  «         Œt          d|                     ¦   «         ¦  «         t          |                     ¦   «         ¦  «         d S )Nzexists x.walk(x)úman(Socrates)úwalk(Socrates)úassumptions:ú   úgoal:ú-walk(Bill)z
walk(Bill)zall x.walk(x)z
girl(mary)z
dog(rover)zall x.(girl(x) -> -dog(x))zall x.(dog(x) -> -girl(x))zchase(mary, rover)z1exists y.(dog(y) & all x.(girl(x) -> chase(x,y))))r   Ú
fromstringr   Úprintr^   r.   r*   r)   )
ÚlexprÚp1Úp2rD   ÚproverÚcdpr%   Úp3Úp4Úp5s
             r   Úclosed_domain_demorÍ   Y  sX  € ÝÔ!€Eà	ˆÐ"Ñ	#Ô	#€BØ	ˆÐÑ	 Ô	 €BØˆÐÑ Ô €AÝ˜A  B˜xÑ(Ô(€FÝ	ˆ&�,Š,‰.Œ.ÑÔÐÝ
˜VÑ
$Ô
$€CÝ	ˆ.ÑÔÐØ�_Š_ÑÔð ð ˆÝˆe�Q‰ŒˆˆÝ	ˆ'�3—8’8‘:”:ÑÔÐÝ	ˆ#�)Š)‰+Œ+ÑÔÐà	ˆÐ"Ñ	#Ô	#€BØ	ˆÐÑ	 Ô	 €BØ	ˆˆ~Ñ	Ô	€BØˆÐÑ Ô €AÝ˜A  B¨˜|Ñ,Ô,€FÝ	ˆ&�,Š,‰.Œ.ÑÔÐÝ
˜VÑ
$Ô
$€CÝ	ˆ.ÑÔÐØ�_Š_ÑÔð ð ˆÝˆe�Q‰ŒˆˆÝ	ˆ'�3—8’8‘:”:ÑÔÐÝ	ˆ#�)Š)‰+Œ+ÑÔÐà	ˆÐ"Ñ	#Ô	#€BØ	ˆÐÑ	 Ô	 €BØ	ˆˆ~Ñ	Ô	€BØˆÐÑ Ô €AÝ˜A  B¨˜|Ñ,Ô,€FÝ	ˆ&�,Š,‰.Œ.ÑÔÐÝ
˜VÑ
$Ô
$€CÝ	ˆ.ÑÔÐØ�_Š_ÑÔð ð ˆÝˆe�Q‰ŒˆˆÝ	ˆ'�3—8’8‘:”:ÑÔÐÝ	ˆ#�)Š)‰+Œ+ÑÔÐà	ˆÐ Ñ	!Ô	!€BØ	ˆˆ}Ñ	Ô	€BØˆÐÑÔ€AÝ˜A  B˜xÑ(Ô(€FÝ	ˆ&�,Š,‰.Œ.ÑÔÐÝ
˜VÑ
$Ô
$€CÝ	ˆ.ÑÔÐØ�_Š_ÑÔð ð ˆÝˆe�Q‰ŒˆˆÝ	ˆ'�3—8’8‘:”:ÑÔÐÝ	ˆ#�)Š)‰+Œ+ÑÔÐà	ˆˆ}Ñ	Ô	€BØ	ˆˆ}Ñ	Ô	€BØ	ˆÐ,Ñ	-Ô	-€BØ	ˆÐ,Ñ	-Ô	-€BØ	ˆÐ$Ñ	%Ô	%€BØˆÐBÑCÔC€AÝ˜A  B¨¨B°Ð3Ñ4Ô4€FÝ	ˆ&�,Š,‰.Œ.ÑÔÐÝ
˜VÑ
$Ô
$€CÝ	ˆ.ÑÔÐØ�_Š_ÑÔð ð ˆÝˆe�Q‰ŒˆˆÝ	ˆ'�3—8’8‘:”:ÑÔÐÝ	ˆ#�)Š)‰+Œ+ÑÔÐÐÐr   c                  ó¦  — t           j        }  | d¦  «        } | d¦  «        } | d¦  «        }t          |||g¦  «        }t          |                     ¦   «         ¦  «         t          |¦  «        }t          d¦  «         |                     ¦   «         D ]}t          d|¦  «         Œt          d|                     ¦   «         ¦  «         t          |                     ¦   «         ¦  «          | d¦  «        } | d¦  «        } | d	¦  «        } | d
¦  «        }t          ||||g¦  «        }t          |                     ¦   «         ¦  «         t          |¦  «        }t          d¦  «         |                     ¦   «         D ]}t          d|¦  «         Œt          d|                     ¦   «         ¦  «         t          |                     ¦   «         ¦  «         d S )Nr½   z	man(Bill)zexists x.exists y.(x != y)r¿   rÀ   rÁ   z!all x.(walk(x) -> (x = Socrates))zBill = WilliamzBill = Billyz-walk(William))r   rÃ   r   rÄ   r^   rW   r*   r)   )rÅ   rÆ   rÇ   rD   rÈ   Úunpr%   rÊ   s           r   Úunique_names_demorÐ   ž  s´  € ÝÔ!€Eà	ˆÐÑ	 Ô	 €BØ	ˆˆ|Ñ	Ô	€BØˆÐ+Ñ,Ô,€AÝ˜A  B˜xÑ(Ô(€FÝ	ˆ&�,Š,‰.Œ.ÑÔÐÝ
˜FÑ
#Ô
#€CÝ	ˆ.ÑÔÐØ�_Š_ÑÔð ð ˆÝˆe�Q‰ŒˆˆÝ	ˆ'�3—8’8‘:”:ÑÔÐÝ	ˆ#�)Š)‰+Œ+ÑÔÐà	ˆÐ3Ñ	4Ô	4€BØ	ˆÐ Ñ	!Ô	!€BØ	ˆˆÑ	Ô	€BØˆÐÑ Ô €AÝ˜A  B¨˜|Ñ,Ô,€FÝ	ˆ&�,Š,‰.Œ.ÑÔÐÝ
˜FÑ
#Ô
#€CÝ	ˆ.ÑÔÐØ�_Š_ÑÔð ð ˆÝˆe�Q‰ŒˆˆÝ	ˆ'�3—8’8‘:”:ÑÔÐÝ	ˆ#�)Š)‰+Œ+ÑÔÐÐÐr   c                  ó¦  — t           j        }  | d¦  «        } | d¦  «        } | d¦  «        }t          |||g¦  «        }t          |                     ¦   «         ¦  «         t          |¦  «        }t          d¦  «         |                     ¦   «         D ]}t          d|¦  «         Œt          d|                     ¦   «         ¦  «         t          |                     ¦   «         ¦  «          | d¦  «        } | d¦  «        } | d	¦  «        } | d
¦  «        } | d¦  «        }t          |||||g¦  «        }t          |                     ¦   «         ¦  «         t          |¦  «        }t          d¦  «         |                     ¦   «         D ]}t          d|¦  «         Œt          d|                     ¦   «         ¦  «         t          |                     ¦   «         ¦  «          | d¦  «        } | d¦  «        } | d¦  «        } | d¦  «        } | d¦  «        }t          |||||g¦  «        }t          |                     ¦   «         ¦  «         t          |¦  «        }t          d¦  «         |                     ¦   «         D ]}t          d|¦  «         Œt          d|                     ¦   «         ¦  «         t          |                     ¦   «         ¦  «         d S )Nr¾   z(Socrates != Bill)rÂ   r¿   rÀ   rÁ   úsee(Socrates, John)úsee(John, Mary)z(Socrates != John)z(John != Mary)ú-see(Socrates, Mary)zall x.(ostrich(x) -> bird(x))zbird(Tweety)z-ostrich(Sam)zSam != Tweetyz
-bird(Sam))r   rÃ   r   rÄ   r^   rn   r*   r)   )	rÅ   rÆ   rÇ   rD   rÈ   Úcwpr%   rÊ   rË   s	            r   Úclosed_world_demorÖ   »  sµ  € ÝÔ!€Eà	ˆÐ Ñ	!Ô	!€BØ	ˆÐ$Ñ	%Ô	%€BØˆˆnÑÔ€AÝ˜A  B˜xÑ(Ô(€FÝ	ˆ&�,Š,‰.Œ.ÑÔÐÝ
˜FÑ
#Ô
#€CÝ	ˆ.ÑÔÐØ�_Š_ÑÔð ð ˆÝˆe�Q‰ŒˆˆÝ	ˆ'�3—8’8‘:”:ÑÔÐÝ	ˆ#�)Š)‰+Œ+ÑÔÐà	ˆÐ%Ñ	&Ô	&€BØ	ˆÐ!Ñ	"Ô	"€BØ	ˆÐ$Ñ	%Ô	%€BØ	ˆÐ Ñ	!Ô	!€BØˆÐ%Ñ&Ô&€AÝ˜A  B¨¨BÐ/Ñ0Ô0€FÝ	ˆ&�,Š,‰.Œ.ÑÔÐÝ
˜FÑ
#Ô
#€CÝ	ˆ.ÑÔÐØ�_Š_ÑÔð ð ˆÝˆe�Q‰ŒˆˆÝ	ˆ'�3—8’8‘:”:ÑÔÐÝ	ˆ#�)Š)‰+Œ+ÑÔÐà	ˆÐ/Ñ	0Ô	0€BØ	ˆˆÑ	Ô	€BØ	ˆÐÑ	 Ô	 €BØ	ˆÐÑ	 Ô	 €BØˆˆmÑÔ€AÝ˜A  B¨¨BÐ/Ñ0Ô0€FÝ	ˆ&�,Š,‰.Œ.ÑÔÐÝ
˜FÑ
#Ô
#€CÝ	ˆ.ÑÔÐØ�_Š_ÑÔð ð ˆÝˆe�Q‰ŒˆˆÝ	ˆ'�3—8’8‘:”:ÑÔÐÝ	ˆ#�)Š)‰+Œ+ÑÔÐÐÐr   c                  ó¦  — t           j        }  | d¦  «        } | d¦  «        } | d¦  «        }t          |||g¦  «        }t          |                     ¦   «         ¦  «         t          t          t          |¦  «        ¦  «        ¦  «        }|                     ¦   «         D ]}t          |¦  «         Œt          |                     ¦   «         ¦  «         d S )NrÒ   rÓ   rÔ   )	r   rÃ   r   rÄ   r^   r.   rW   rn   r*   )rÅ   rÆ   rÇ   rD   rÈ   Úcommandr%   s          r   Úcombination_prover_demorÙ   ç  sÆ   € ÝÔ!€Eà	ˆÐ%Ñ	&Ô	&€BØ	ˆÐ!Ñ	"Ô	"€BØˆÐ%Ñ&Ô&€AÝ˜A  B˜xÑ(Ô(€FÝ	ˆ&�,Š,‰.Œ.ÑÔÐÝ Õ!2Õ3DÀVÑ3LÔ3LÑ!MÔ!MÑNÔN€GØ× Ò Ñ"Ô"ð ð ˆÝˆa‰ŒˆˆÝ	ˆ'�-Š-‰/Œ/ÑÔÐÐÐr   c                  ón  — t           j        } g }|                      | d¦  «        ¦  «         |                      | d¦  «        ¦  «         |                      | d¦  «        ¦  «         |                      | d¦  «        ¦  «         |                      | d¦  «        ¦  «         |                      | d¦  «        ¦  «         |                      | d¦  «        ¦  «         |                      | d¦  «        ¦  «         |                      | d	¦  «        ¦  «         |                      | d
¦  «        ¦  «         |                      | d¦  «        ¦  «         |                      | d¦  «        ¦  «         |                      | d¦  «        ¦  «         |                      | d¦  «        ¦  «         t          d |¦  «        }t	          t          |¦  «        ¦  «        }|                     ¦   «         D ]}t          |¦  «         Œt          d|¦  «         t          d|¦  «         t          d|¦  «         d S )Nz'all x.(elephant(x)        -> animal(x))z'all x.(bird(x)            -> animal(x))z%all x.(dove(x)            -> bird(x))z%all x.(ostrich(x)         -> bird(x))z(all x.(flying_ostrich(x)  -> ostrich(x))z)all x.((animal(x)  & -Ab1(x)) -> -fly(x))z(all x.((bird(x)    & -Ab2(x)) -> fly(x))z)all x.((ostrich(x) & -Ab3(x)) -> -fly(x))z#all x.(bird(x)           -> Ab1(x))z#all x.(ostrich(x)        -> Ab2(x))z#all x.(flying_ostrich(x) -> Ab3(x))zelephant(E)zdove(D)z
ostrich(O)z-fly(E)zfly(D)z-fly(O))	r   rÃ   r_   r   rW   rn   r*   rÄ   Úprint_proof)rÅ   ÚpremisesrÈ   rØ   r%   s        r   Údefault_reasoning_demorÝ   õ  sH  € ÝÔ!€Eà€Hð ‡O‚O�E�EÐDÑEÔEÑFÔFÐFØ‡O‚O�E�EÐDÑEÔEÑFÔFÐFØ‡O‚O�E�EÐBÑCÔCÑDÔDÐDØ‡O‚O�E�EÐBÑCÔCÑDÔDÐDØ‡O‚O�E�EÐEÑFÔFÑGÔGÐGð ‡O‚OØˆÐ:Ñ;Ô;ñô ð ð ‡O‚OØˆÐ9Ñ:Ô:ñô ð ð ‡O‚OØˆÐ:Ñ;Ô;ñô ð ð
 ‡O‚O�E�EÐ@ÑAÔAÑBÔBÐBØ‡O‚O�E�EÐ@ÑAÔAÑBÔBÐBØ‡O‚O�E�EÐ@ÑAÔAÑBÔBÐBð ‡O‚O�E�E˜.Ñ)Ô)Ñ*Ô*Ð*Ø‡O‚O�E�E˜*Ñ%Ô%Ñ&Ô&Ð&Ø‡O‚O�E�E˜-Ñ(Ô(Ñ)Ô)Ð)õ ˜D (Ñ+Ô+€FÝÕ 1°&Ñ 9Ô 9Ñ:Ô:€GØ× Ò Ñ"Ô"ð ð ˆÝˆa‰Œˆˆå�	˜8Ñ$Ô$Ð$Ý�˜(Ñ#Ô#Ð#Ý�	˜8Ñ$Ô$Ð$Ð$Ð$r   c                 óò   — t           j        }t           || ¦  «        |¦  «        }t          t	          |¦  «        ¦  «        }t          | |                     ¦   «         |                     ¦   «         ¦  «         d S r!   )r   rÃ   r   rW   rn   rÄ   r^   )r)   rÜ   rÅ   rÈ   rØ   s        r   rÛ   rÛ   !  s_   € ÝÔ!€EÝ˜E˜E $™KœK¨Ñ2Ô2€FÝÕ 1°&Ñ 9Ô 9Ñ:Ô:€GÝ	ˆ$�—’‘” §¢¡¤Ñ0Ô0Ð0Ð0Ð0r   c                  ó’   — t          ¦   «          t          ¦   «          t          ¦   «          t          ¦   «          t	          ¦   «          d S r!   )rÍ   rÐ   rÖ   rÙ   rÝ   r   r   r   Údemorà   (  sD   € ÝÑÔÐÝÑÔÐÝÑÔÐÝÑÔÐÝÑÔÐÐÐr   Ú__main__N)+rU   Úcollectionsr   Ú	functoolsr   Únltk.inference.apir   r   Únltk.inference.prover9r   r   Únltk.sem.logicr	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r´   r   r,   r.   rW   rZ   r[   rn   r–   rÍ   rÐ   rÖ   rÙ   rÝ   rÛ   rà   r   r   r   r   ú<module>rç      s³  ððð ð $Ð #Ð #Ð #Ð #Ð #Ø Ð Ð Ð Ð Ð à =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ø :Ð :Ð :Ð :Ð :Ð :Ð :Ð :ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð$	ð 	ð 	ð 	ð 	�yñ 	ô 	ð 	ðQð Qð Qð2ð 2ð 2ð 2ð 2Ð/ñ 2ô 2ð 2ðj(-ð (-ð (-ð (-ð (-Ð.ñ (-ô (-ð (-ðVð ð ð ð �ñ ô ð ð(F>ð F>ð F>ð F>ð F>Ð.ñ F>ô F>ð F>ðR'ð 'ð 'ð 'ð 'ñ 'ô 'ð 'ðTBð Bð BðJð ð ð:)ð )ð )ðXð ð ð)%ð )%ð )%ðX1ð 1ð 1ðð ð ð ˆzÒÐØ€D�F„F€F€F€Fð Ðr   