+
    ÖÇÜhµH  ã                   óT  € R t ^ RIHt ^ RIHt ^ RIHtHt ^ RIH	t	H
t
 ^ RIHtHtHtHtHtHtHtHtHtHtHtHtHtHt  ! R R]4      tR t ! R	 R
]4      t ! R R]4      t ! R R]4      t  ! R R]4      t! ! R R4      t"R t#R t$R t%R t&R t'R t(R t)]*R8X  d
   ])! 4        R# R# )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                   ó   € ] tR t^&tRtR# )ÚProverParseError© N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__static_attributes__r   ó    Ú=/usr/lib/python3/dist-packages/nltk/inference/nonmonotonic.pyr   r   &   s   † Ûr   r   c                 óx   € V f   TpM
W) .,           p\        \        P                  R V 4       \        4       4      # )Nc              3   ó@   "  € T F  qP                  4       x € K  	  R # 5i©N)Ú	constants)Ú.0Úas   & r   Ú	<genexpr>Úget_domain.<locals>.<genexpr>/   s   é € Ð H¹°1§¡§ »ùs   ‚)r   r   Úor_Úset)ÚgoalÚassumptionsÚall_expressionss   && r   Ú
get_domainr-   *   s3   € Ø‚|Ø%‰à%¨¨Õ/ˆÜ”(—,‘,Ñ H¹Ó HÌ#Ë%ÓPÐPr   c                   ó6   a € ] tR t^2t o RtR tR tR tRtV t	R# )ÚClosedDomainProverzQ
This is a prover decorator that adds domain closure assumptions before
proving.
c                óð   € V P                   P                  4        Uu. uF  qNK  	  ppV P                   P                  4       p\        W24      pV Uu. uF  qPP	                  WT4      NK  	  up# u upi u upi r"   )Ú_commandr+   r*   r-   Úreplace_quants)Úselfr%   r+   r*   ÚdomainÚexs   &     r   r+   ÚClosedDomainProver.assumptions8   sj   € Ø"&§-¡-×";Ñ";Ô"=Ó>Ñ"=˜Q’qÑ"=ˆÐ>Ø�}‰}×!Ñ!Ó#ˆÜ˜DÓ.ˆÙ:EÓF¹+°B×#Ñ# BÖ/¹+ÑFÐFùò ?ùò Gs   �
A.ÁA3c                óž   € V P                   P                  4       p\        WP                   P                  4       4      pV P	                  W4      # r"   )r1   r*   r-   r+   r2   )r3   r*   r4   s   &  r   r*   ÚClosedDomainProver.goal>   s<   € Ø�}‰}×!Ñ!Ó#ˆÜ˜D§-¡-×";Ñ";Ó"=Ó>ˆØ×"Ñ" 4Ó0Ð0r   c           	     óH  € \        V\        4      '       dj   V Uu. uF1  q1P                  P                  VP                  \        V4      4      NK3  	  ppV Uu. uF  qPP                  WR4      NK  	  pp\        R V4      # \        V\        4      '       dG   VP                  V P                  VP                  V4      V P                  VP                  V4      4      # \        V\        4      '       d   V P                  VP                  V4      ) # \        V\        4      '       dj   V Uu. uF1  q1P                  P                  VP                  \        V4      4      NK3  	  ppV Uu. uF  q0P                  W24      NK  	  pp\        R V4      # V# u upi u upi u upi u upi )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                 ó   € W,          # r"   r   ©ÚxÚys   &&r   Ú<lambda>Ú3ClosedDomainProver.replace_quants.<locals>.<lambda>U   ó   €  q¦ur   c                 ó   € W,          # r"   r   r;   s   &&r   r>   r?   b   r@   r   )Ú
isinstancer	   ÚtermÚreplaceÚvariabler   r2   r   r   Ú	__class__ÚfirstÚsecondr   r   )r3   r5   r4   ÚdÚ	conjunctsÚcÚ	disjunctss   &&&    r   r2   Ú!ClosedDomainProver.replace_quantsC   so  € ô �bœ-×(Ò(áMSóÙMSÈ—‘—‘ §¡Ô-?ÀÓ-BÖCÉVð ð ñ BKÓKÁ¸A×,Ñ,¨QÖ7ÁˆIÐKÜÑ,¨iÓ8Ð8Ü˜Ô-×.Ò.Ø—<‘<Ø×#Ñ# B§H¡H¨fÓ5Ø×#Ñ# B§I¡I¨vÓ6óð ô ˜Ô-×.Ò.Ø×'Ñ'¨¯©°Ó8Ð8Ð8Ü˜Ô,×-Ò-áMSóÙMSÈ—‘—‘ §¡Ô-?ÀÓ-BÖCÉVð ð ñ BKÓKÁ¸A×,Ñ,¨QÖ7ÁˆIÐKÜÑ,¨iÓ8Ð8àˆIùò'ùò Lùòùò Ls   ›7FÁFÄ)7FÅ&Fr   N)
r   r   r   r   Ú__doc__r+   r*   r2   r   Ú__classdictcell__©Ú__classdict__s   @r   r/   r/   2   s   ø‡ € ñò
Gò1÷
!ð !r   r/   c                   ó*   a € ] tR t^gt o RtR tRtV tR# )ÚUniqueNamesProverzO
This is a prover decorator that adds unique names assumptions before
proving.
c                óº  € V P                   P                  4       p\        \        V P                   P	                  4       V4      4      p\        4       pV F^  p\        V\        4      '       g   K  VP                  P                  pVP                  P                  pW5,          P                  V4       K`  	  . p\        V4       FŽ  w  r„W(^,           R  Fz  p	W“V,          9  g   K  \        \        V4      \        V	4      4      p
\        4       P                  W¡4      '       d   W4,          P                  V	4       Kh  VP!                  V
) 4       K|  	  K�  	  W,           # )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)r1   r+   Úlistr-   r*   Ú	SetHolderrB   r   rG   rE   rH   ÚaddÚ	enumerater   r   ÚproveÚappend)r3   r+   r4   Úeq_setsr%   ÚavÚbvÚnew_assumptionsÚiÚbÚnewEqExs   &          r   r+   ÚUniqueNamesProver.assumptionsm   s  € ð
 —m‘m×/Ñ/Ó1ˆä”j §¡×!3Ñ!3Ó!5°{ÓCÓDˆô “+ˆÛˆAÜ˜!Ô/×0Ô0Ø—W‘W×%Ñ%�Ø—X‘X×&Ñ&�à•—‘ Ö#ñ ð ˆÜ˜fÖ%‰DˆAØ �E˜G“_�à A�JÖ&Ü0Ü*¨1Ó-Ô/AÀ!Ó/Dó�Gô “y—‘ w×<Ò<ð  �
Ÿ™ qÖ)ð (×.Ñ.°¨xÖ8ó %ñ &ð Õ,Ð,r   r   N)r   r   r   r   rN   r+   r   rO   rP   s   @r   rS   rS   g   s   ø‡ € ñ÷
"-ð "-r   rS   c                   ó*   a € ] tR t^’t o RtR tRtV tR# )rV   z
A list of sets of Variables.
c                ó„   € \        V\        4      '       g   Q hV  F  pW9   g   K  Vu # 	  V0pV P                  V4       V# )z>
:param item: ``Variable``
:return: the set containing 'item'
)rB   r   rZ   )r3   ÚitemÚsÚnews   &&  r   Ú__getitem__ÚSetHolder.__getitem__—   sE   € ô
 ˜$¤×)Ò)Ð)Ð)ÛˆAØŽyØ’ñ ð ˆfˆØ�‰�CÔØˆ
r   r   N)r   r   r   r   rN   rh   r   rO   rP   s   @r   rV   rV   ’   s   ø‡ € ñ÷ð r   rV   c                   óB   a € ] tR t^¦t o RtR tR tR tR tR t	Rt
V tR# )	Ú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           	     ód  € V P                   P                  4       pV P                  V4      p. pV EFp  pW$,          pV P                  V4      pV Uu. uF  p\	        V4      NK  	  pp. p	VP
                   FO  p
. p\        WŠ4       F  w  rÍVP                  \        WÍ4      4       K!  	  V	P                  \        R  V4      4       KQ  	  VP                   FK  p/ p\        WŽ^ ,          4       F	  w  rÍWÏV&   K  	  V	P                  V^,          P                  V4      4       KM  	  V	'       d,   V P                  WF4      p\        R V	4      p\        VV4      pM\        V P                  WF4      4      pVRRR1,           F  p\        VV4      pK  	  VP                  V4       EKs  	  W,           # u upi )c                 ó   € W,          # r"   r   r;   s   &&r   r>   Ú/ClosedWorldProver.assumptions.<locals>.<lambda>Ø   s   € °Q¶Ur   c                 ó   € W,          # r"   r   r;   s   &&r   r>   rn   æ   s   € °¶r   Néÿÿÿÿ)r1   r+   Ú_make_predicate_dictÚ_make_unique_signaturer   Ú
signaturesÚziprZ   r   r   Ú
propertiesÚsubstitute_bindingsÚ_make_antecedentr   r   r	   )r3   r+   Ú
predicatesr^   ÚpÚ
predHolderÚnew_sigÚvÚnew_sig_exsrL   ÚsigÚequality_exsÚv1Úv2ÚpropÚbindingsÚ
antecedentÚ
consequentÚaccumÚnew_sig_vars   &                   r   r+   ÚClosedWorldProver.assumptionsÆ   s”  € Ø—m‘m×/Ñ/Ó1ˆà×.Ñ.¨{Ó;ˆ
àˆÜˆAØ#�ˆJØ×1Ñ1°*Ó=ˆGÙ:AÓB¹'°QÔ-¨aÖ0¹'ˆKÐBàˆIð "×,Ô,�Ø!�Ü! +Ö3‘F�BØ ×'Ñ'Ô(:¸2Ó(BÖCñ 4à× Ñ ¤Ñ(:¸LÓ!IÖJñ	 -ð #×-Ô-�à�Ü! +°A­wÖ7‘F�BØ#%˜R“Lñ 8à× Ñ   a¥×!<Ñ!<¸XÓ!FÖGñ .÷ à!×2Ñ2°1Ó>�
Ü#Ñ$6¸	ÓB�
Ü% j°*Ó=‘ô *¨$×*?Ñ*?ÀÓ*KÓL�ð  '¡t¨ tŸ}˜}�Ü% k°5Ó9’ñ  -à×"Ñ" 5×)ñG ðJ Õ,Ð,ùòE Cs   ÁF-c                ó¦   € \         ;QJ d'    . R \        VP                  4       4       F  NK  	  5# ! R \        VP                  4       4       4      # )z€
This method figures out how many arguments the predicate takes and
returns a tuple containing that number of unique variables.
c              3   ó6   "  € T F  p\        4       x € K  	  R # 5ir"   )r   )r$   r_   s   & r   r&   Ú;ClosedWorldProver._make_unique_signature.<locals>.<genexpr>ø   s   é € ÐPÑ0O¨1”_×&Ð&Ó0Oùs   ‚)ÚtupleÚrangeÚsignature_len)r3   rz   s   &&r   rr   Ú(ClosedWorldProver._make_unique_signatureó   s<   € ÷
 ŒuÑP´°j×6NÑ6NÔ0OÓP�uÐPˆuÑP´°j×6NÑ6NÔ0OÓPÓPÐPr   c                ó>   € TpV F  pV! \        V4      4      pK  	  V# )zn
Return an application expression with 'predicate' as the predicate
and 'signature' as the list of arguments.
)r   )r3   Ú	predicateÚ	signaturer„   r|   s   &&&  r   rw   Ú"ClosedWorldProver._make_antecedentú   s)   € ð
 ˆ
ÛˆAÙ#Ô$6°qÓ$9Ó:ŠJñ àÐr   c                óX   € \        \        4      pV F  pV P                  W24       K  	  V# )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)r3   r+   rx   r%   s   &&  r   rq   Ú&ClosedWorldProver._make_predicate_dict  s,   € ô !¤Ó,ˆ
ÛˆAØ× Ñ  Ö/ñ àÐr   c                óö  € \        V\        4      '       dM   VP                  4       w  r4\        V\        4      '       d#   W#,          P	                  \        V4      4       R # R # \        V\        4      '       d;   V P                  VP                  V4       V P                  VP                  V4       R # \        V\        4      '       Ed¦   VP                  .pVP                  p\        V\        4      '       d*   VP                  VP                  4       VP                  pK?  \        V\        4      '       Ed5   \        VP                  \        4      '       Ed   \        VP                  \        4      '       dð   VP                  P                  4       w  rxVP                  P                  4       w  rš\        V\        4      '       d    \        V	\        4      '       dˆ   YX Uu. uF  q»P                  NK  	  up8X  dg   YZ Uu. uF  q»P                  NK  	  up8X  dF   W),          P                  \        V4      VP                  34       W',          P!                  V4       R # R # R # R # R # R # R # R # R # u upi u upi r"   )rB   r   Úuncurryr   Ú
append_sigrŒ   r
   r–   rG   rH   r	   rE   rC   rZ   r   Úappend_propÚvalidate_sig_len)r3   Ú
expressionÚpredDictÚfuncÚargsr~   rC   Úfunc1Úargs1Úfunc2Úargs2r|   s   &&&         r   r–   Ú!ClosedWorldProver._map_predicates  s×  € Ü�jÔ"7×8Ò8Ø#×+Ñ+Ó-‰JˆDÜ˜$Ô :×;Ò;Ø•×)Ñ)¬%°«+Ö6ñ <ä˜
¤M×2Ò2Ø× Ñ  ×!1Ñ!1°8Ô<Ø× Ñ  ×!2Ñ!2°HÖ=Ü˜
¤M×2Ó2à×&Ñ&Ð'ˆCØ—?‘?ˆDÜ˜T¤=×1Ò1Ø—
‘
˜4Ÿ=™=Ô)Ø—y‘y’Ü˜$¤×.Ó.Ü˜dŸj™jÔ*?×@Ó@ÄZØ—K‘KÔ!6÷Fò Fð $(§:¡:×#5Ñ#5Ó#7‘L�EØ#'§;¡;×#6Ñ#6Ó#8‘L�Eä" 5Ô*D×EÒEÜ& uÔ.H×IÒIØ¸Ó#>¹°1§J¤J¹Ñ#>Ô>Ø¸Ó#>¹°1§J¤J¹Ñ#>Ô>à �×3Ñ3´U¸3³ZÀÇÁÐ4LÔMØ �×8Ñ8¸Ö=ñ ?ñ ?ñ Jñ FñFÑ@ñ /ñ 3ùò  $?ùÚ#>s   Ç"I1ÈI6r   N)r   r   r   r   rN   r+   rr   rw   rq   r–   r   rO   rP   s   @r   rk   rk   ¦   s*   ø‡ € ñò>+-òZQòò
÷>ð >r   rk   c                   óH   a € ] tR tRt o RtR tR tR tR tR t	R t
R	tV tR
# )r•   i/  as  
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   € . V n         . V n        R V n        R # r"   ©rs   ru   rŽ   ©r3   s   &r   Ú__init__ÚPredHolder.__init__?  s   € ØˆŒØˆŒØ!ˆÖr   c                ó^   € V P                  V4       V P                  P                  V4       R # r"   )rœ   rs   rZ   ©r3   r{   s   &&r   rš   ÚPredHolder.append_sigD  s"   € Ø×Ñ˜gÔ&Ø�‰×Ñ˜wÖ'r   c                ól   € V P                  V^ ,          4       V P                  P                  V4       R# )é    N)rœ   ru   rZ   )r3   Únew_props   &&r   r›   ÚPredHolder.append_propH  s&   € Ø×Ñ˜h q�kÔ*Ø�‰×Ñ˜xÖ(r   c                ó�   € V P                   f   \        V4      V n         R # V P                   \        V4      8w  d   \        R4      hR # )NzSignature lengths do not match)rŽ   ÚlenÚ	Exceptionr­   s   &&r   rœ   ÚPredHolder.validate_sig_lenL  s=   € Ø×ÑÒ%Ü!$ W£ˆDÖØ×Ñ¤3 w£<Ô/ÜÐ<Ó=Ð=ñ 0r   c                óV   € R V P                    RV P                   RV P                   R2# )Ú(Ú,Ú)r¨   r©   s   &r   Ú__str__ÚPredHolder.__str__R  s.   € Ø�4—?‘?Ð# 1 T§_¡_Ð$5°Q°t×7IÑ7IÐ6JÈ!ÐLÐLr   c                ó   € R V ,          # )z%sr   r©   s   &r   Ú__repr__ÚPredHolder.__repr__U  s   € Ø�d�{Ðr   )ru   rŽ   rs   N)r   r   r   r   rN   rª   rš   r›   rœ   r»   r¾   r   rO   rP   s   @r   r•   r•   /  s.   ø‡ € ñò"ò
(ò)ò>òM÷ð r   r•   c                  ó  € \         P                  p V ! R 4      pV ! R4      pV ! R4      p\        W1V.4      p\        VP	                  4       4       \        V4      p\        R4       VP                  4        F  p\        RV4       K  	  \        RVP                  4       4       \        VP	                  4       4       V ! R 4      pV ! R4      pV ! R4      pV ! R4      p\        W1W'.4      p\        VP	                  4       4       \        V4      p\        R4       VP                  4        F  p\        RV4       K  	  \        RVP                  4       4       \        VP	                  4       4       V ! R 4      pV ! R4      pV ! R4      pV ! R4      p\        W1W'.4      p\        VP	                  4       4       \        V4      p\        R4       VP                  4        F  p\        RV4       K  	  \        RVP                  4       4       \        VP	                  4       4       V ! R4      pV ! R4      pV ! R4      p\        W1V.4      p\        VP	                  4       4       \        V4      p\        R4       VP                  4        F  p\        RV4       K  	  \        RVP                  4       4       \        VP	                  4       4       V ! R	4      pV ! R
4      pV ! R4      pV ! R4      pV ! R4      p	V ! R4      p\        W1W'W‰.4      p\        VP	                  4       4       \        V4      p\        R4       VP                  4        F  p\        RV4       K  	  \        RVP                  4       4       \        VP	                  4       4       R# )z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)))N)r   Ú
fromstringr   ÚprintrY   r/   r+   r*   )
ÚlexprÚp1Úp2rK   ÚproverÚcdpr%   Úp3Úp4Úp5s
             r   Úclosed_domain_demorÑ   Y  så  € Ü×!Ñ!€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€AÜ˜A B¨BÐ3Ó4€FÜ	ˆ&�,‰,‹.ÔÜ
˜VÓ
$€CÜ	ˆ.ÔØ�_‰_ÖˆÜˆe�QŽñ ä	ˆ'�3—8‘8“:ÔÜ	ˆ#�)‰)‹+Ör   c                  óÞ  € \         P                  p V ! R 4      pV ! R4      pV ! R4      p\        W1V.4      p\        VP	                  4       4       \        V4      p\        R4       VP                  4        F  p\        RV4       K  	  \        RVP                  4       4       \        VP	                  4       4       V ! R4      pV ! R4      pV ! R4      pV ! R	4      p\        W1W'.4      p\        VP	                  4       4       \        V4      p\        R4       VP                  4        F  p\        RV4       K  	  \        RVP                  4       4       \        VP	                  4       4       R
# )rÁ   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)N)r   rÇ   r   rÈ   rY   rS   r+   r*   )rÉ   rÊ   rË   rK   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€BÙ	Ð Ó	!€BÙ	ˆÓ	€BÙÐÓ €AÜ˜A B˜|Ó,€FÜ	ˆ&�,‰,‹.ÔÜ
˜FÓ
#€CÜ	ˆ.ÔØ�_‰_ÖˆÜˆe�QŽñ ä	ˆ'�3—8‘8“:ÔÜ	ˆ#�)‰)‹+Ör   c                  óf  € \         P                  p V ! R 4      pV ! R4      pV ! R4      p\        W1V.4      p\        VP	                  4       4       \        V4      p\        R4       VP                  4        F  p\        RV4       K  	  \        RVP                  4       4       \        VP	                  4       4       V ! R4      pV ! R4      pV ! R4      pV ! R	4      pV ! R
4      p\        W1W'V.4      p\        VP	                  4       4       \        V4      p\        R4       VP                  4        F  p\        RV4       K  	  \        RVP                  4       4       \        VP	                  4       4       V ! R4      pV ! R4      pV ! R4      pV ! R4      pV ! R4      p\        W1W'V.4      p\        VP	                  4       4       \        V4      p\        R4       VP                  4        F  p\        RV4       K  	  \        RVP                  4       4       \        VP	                  4       4       R# )rÂ   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)N)r   rÇ   r   rÈ   rY   rk   r+   r*   )	rÉ   rÊ   rË   rK   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€FÜ	ˆ&�,‰,‹.ÔÜ
˜FÓ
#€CÜ	ˆ.ÔØ�_‰_ÖˆÜˆe�QŽñ ä	ˆ'�3—8‘8“:ÔÜ	ˆ#�)‰)‹+Ôá	Ð/Ó	0€BÙ	ˆÓ	€BÙ	ÐÓ	 €BÙ	ÐÓ	 €BÙˆmÓ€AÜ˜A B¨BÐ/Ó0€FÜ	ˆ&�,‰,‹.ÔÜ
˜FÓ
#€CÜ	ˆ.ÔØ�_‰_ÖˆÜˆe�QŽñ ä	ˆ'�3—8‘8“:ÔÜ	ˆ#�)‰)‹+Ör   c                  óR  € \         P                  p V ! R 4      pV ! R4      pV ! R4      p\        W1V.4      p\        VP	                  4       4       \        \        \        V4      4      4      pVP                  4        F  p\        V4       K  	  \        VP	                  4       4       R# )rÖ   r×   rØ   N)	r   rÇ   r   rÈ   rY   r/   rS   rk   r+   )rÉ   rÊ   rË   rK   rÌ   Úcommandr%   s          r   Úcombination_prover_demorÝ   ç  sˆ   € Ü×!Ñ!€Eá	Ð%Ó	&€BÙ	Ð!Ó	"€BÙÐ%Ó&€AÜ˜A B˜xÓ(€FÜ	ˆ&�,‰,‹.ÔÜ Ô!2Ô3DÀVÓ3LÓ!MÓN€GØ× Ñ Ö"ˆÜˆaŽñ #ä	ˆ'�-‰-‹/Ör   c                  óz  € \         P                  p . pVP                  V ! R 4      4       VP                  V ! R4      4       VP                  V ! R4      4       VP                  V ! R4      4       VP                  V ! R4      4       VP                  V ! R4      4       VP                  V ! R4      4       VP                  V ! R4      4       VP                  V ! R4      4       VP                  V ! R	4      4       VP                  V ! R
4      4       VP                  V ! R4      4       VP                  V ! R4      4       VP                  V ! R4      4       \        RV4      p\	        \        V4      4      pVP                  4        F  p\        V4       K  	  \        RV4       \        RV4       \        RV4       R# )z'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)Nz-fly(E)zfly(D)z-fly(O))	r   rÇ   rZ   r   rS   rk   r+   rÈ   Úprint_proof)rÉ   ÚpremisesrÌ   rÜ   r%   s        r   Údefault_reasoning_demorá   õ  sx  € Ü×!Ñ!€Eà€Hð ‡O�O‘EÐDÓEÔFØ‡O�O‘EÐDÓEÔFØ‡O�O‘EÐBÓCÔDØ‡O�O‘EÐBÓCÔDØ‡O�O‘EÐEÓFÔGð ‡O�OÙÐ:Ó;ôð ‡O�OÙÐ9Ó:ôð ‡O�OÙÐ:Ó;ôð
 ‡O�O‘EÐ@ÓAÔBØ‡O�O‘EÐ@ÓAÔBØ‡O�O‘EÐ@ÓAÔBð ‡O�O‘E˜.Ó)Ô*Ø‡O�O‘E˜*Ó%Ô&Ø‡O�O‘E˜-Ó(Ô)ô ˜D (Ó+€FÜÔ 1°&Ó 9Ó:€GØ× Ñ Ö"ˆÜˆaŽñ #ô �	˜8Ô$Ü�˜(Ô#Ü�	˜8Ö$r   c                 óÂ   € \         P                  p\        V! V 4      V4      p\        \	        V4      4      p\        WP                  4       VP                  4       4       R # r"   )r   rÇ   r   rS   rk   rÈ   rY   )r*   rà   rÉ   rÌ   rÜ   s   &&   r   rß   rß   !  sC   € Ü×!Ñ!€EÜ™E $›K¨Ó2€FÜÔ 1°&Ó 9Ó:€GÜ	ˆ$—‘“ §¡£Ö0r   c                  ój   € \        4        \        4        \        4        \        4        \	        4        R # r"   )rÑ   rÔ   rÚ   rÝ   rá   r   r   r   Údemorä   (  s    € ÜÔÜÔÜÔÜÔÜÖr   Ú__main__N)+rN   Ú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/   rS   rU   rV   rk   r•   rÑ   rÔ   rÚ   rÝ   rá   rß   rä   r   r   r   r   Ú<module>rë      s¼   ðñõ $Ý ç =ß :÷÷ ÷ ÷ ô$	�yô 	òQô2Ð/ô 2ôj(-Ð.ô (-ôV�ô ô(F>Ð.ô F>÷R'ñ 'òTBòJò:)òXò)%òX1òð ˆzÔÙ†Fñ r   