§
    'ê[fÐf  ã                   ób  — d Z ddlmZ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  e¦   «         Z G d„ de¦  «        Z G d„ de¦  «        Z G d	„ d
e¦  «        Z G d„ d¦  «        Z G d„ d¦  «        Z G d„ d¦  «        Zd„ Zd„ Z dd„Z!d„ Z"e#dk    r e"¦   «          dS dS )z8
Module for a tableau-based First Order theorem prover.
é    )ÚBaseProverCommandÚProver)ÚCounter)ÚAbstractVariableExpressionÚAllExpressionÚAndExpressionÚApplicationExpressionÚEqualityExpressionÚExistsExpressionÚ
ExpressionÚFunctionVariableExpressionÚIffExpressionÚImpExpressionÚLambdaExpressionÚNegatedExpressionÚOrExpressionÚVariableÚVariableExpressionÚunique_variablec                   ó   — e Zd ZdS )ÚProverParseErrorN)Ú__name__Ú
__module__Ú__qualname__© ó    úJ/var/www/piapp/venv/lib/python3.11/site-packages/nltk/inference/tableau.pyr   r   %   s   € € € € € Ø€Dr   r   c                   ó´   — e Zd ZdZdd„Zd„ Zd„ Zd„ Zd„ Zd„ Z	d	„ Z
d
„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zed„ ¦   «         ZdS )ÚTableauProverFNc                 óì  — |sg }d }	 t          ¦   «         }|r|                     | ¦  «         |                     |¦  «         t          |¦  «        }|                      |t          ¦   «         t          ¦   «         |¦  «        }nW# t          $ rJ}| j        r%t          |¦  «         	                    d¦  «        rd}n|rt          |¦  «         n|‚Y d }~nd }~ww xY w|d                     |j        ¦  «        fS )Nz maximum recursion depth exceededFÚ
)ÚAgendaÚputÚput_allÚDebugÚ_attempt_proofÚsetÚRuntimeErrorÚ_assume_falseÚstrÚ
startswithÚprintÚjoinÚlines)ÚselfÚgoalÚassumptionsÚverboseÚresultÚagendaÚdebuggerÚes           r   Ú_provezTableauProver._prove,   s  € Øð 	ØˆKàˆð	Ý‘X”XˆFØð "Ø—
’
˜D˜5Ñ!Ô!Ð!Ø�NŠN˜;Ñ'Ô'Ð'Ý˜W‘~”~ˆHØ×(Ò(¨µ±´½¹¼¸xÑHÔHˆFˆFøÝð 		ð 		ð 		ØÔ!ð ¥c¨!¡f¤f×&7Ò&7Ø2ñ'ô 'ð ð ��àð Ý˜!‘H”H�H�Hà�Gøøøøøøøøøð		øøøð ˜Ÿ	š	 (¤.Ñ1Ô1Ð2Ð2s   ˆA:B Â
CÂA CÃCc           	      ó¶  — |                      ¦   «         \  \  }}}|s|                     d¦  «         dS i t          j        | j        “t          j        | j        “t          j        | j        “t          j	        | j
        “t          j        | j        “t          j        | j        “t          j        | j        “t          j        | j        “t          j        | j        “t          j        | j        “t          j        | j        “t          j        | j        “t          j        | j        “t          j        | j        “t          j        | j         “t          j!        | j"        “t          j#        | j$        “t          j%        | j&        t          j'        | j(        t          j)        | j*        t          j+        | j,        i¥|         }|                     ||f¦  «          |||||||¦  «        S )NzAGENDA EMPTYF)-Ú	pop_firstÚlineÚ
CategoriesÚATOMÚ_attempt_proof_atomÚPROPÚ_attempt_proof_propÚN_ATOMÚ_attempt_proof_n_atomÚN_PROPÚ_attempt_proof_n_propÚAPPÚ_attempt_proof_appÚN_APPÚ_attempt_proof_n_appÚN_EQÚ_attempt_proof_n_eqÚD_NEGÚ_attempt_proof_d_negÚN_ALLÚ_attempt_proof_n_allÚN_EXISTSÚ_attempt_proof_n_someÚANDÚ_attempt_proof_andÚN_ORÚ_attempt_proof_n_orÚN_IMPÚ_attempt_proof_n_impÚORÚ_attempt_proof_orÚIMPÚ_attempt_proof_impÚN_ANDÚ_attempt_proof_n_andÚIFFÚ_attempt_proof_iffÚN_IFFÚ_attempt_proof_n_iffÚEQÚ_attempt_proof_eqÚEXISTSÚ_attempt_proof_someÚALLÚ_attempt_proof_all)	r/   r4   Úaccessible_varsÚatomsÚdebugÚcurrentÚcontextÚcategoryÚproof_methods	            r   r&   zTableauProver._attempt_proofD   sÝ  € Ø'-×'7Ò'7Ñ'9Ô'9Ñ$Ñˆ�'˜Hð ð 	Ø�JŠJ�~Ñ&Ô&Ð&Ø�5ð
ÝŒO˜TÔ5ð
åŒO˜TÔ5ð
õ Ô˜tÔ9ð
õ Ô˜tÔ9ð	
õ
 ŒN˜DÔ3ð
õ Ô˜dÔ7ð
õ ŒO˜TÔ5ð
õ Ô˜dÔ7ð
õ Ô˜dÔ7ð
õ Ô Ô!;ð
õ ŒN˜DÔ3ð
õ ŒO˜TÔ5ð
õ Ô˜dÔ7ð
õ ŒM˜4Ô1ð
õ ŒN˜DÔ3ð
õ  Ô˜dÔ7ð!
õ" ŒN˜DÔ3ð#
õ$ Ô˜dÔ7ÝŒM˜4Ô1ÝÔ˜tÔ7ÝŒN˜DÔ3ð+
ð 
ð, ô-ˆð0 	�
Š
�G˜WÐ%Ñ&Ô&Ð&Øˆ|˜G W¨f°oÀuÈeÑTÔTÐTr   c                 óÈ  — |df|v r|                      dd¦  «         dS |ryt          |j        t          ¦  «        r|                     ¦   «         }|                      ||¦  «                             ¦   «         ¦  «         |                      ||||dz   ¦  «        S |                     ¦   «          |                      ||t          |j
        ¦  «        z  ||dfhz  |dz   ¦  «        S ©NTÚCLOSEDé   F)r:   Ú
isinstanceÚtermr   Únegater#   Úsimplifyr&   Úmark_alls_freshr'   Úargs©r/   ri   rj   r4   rf   rg   rh   s          r   r=   z!TableauProver._attempt_proof_atomg   sö   € ð �Tˆ?˜eÐ#Ð#Ø�JŠJ�x Ñ#Ô#Ð#Ø�4àð 	Ý˜'œ,Õ(9Ñ:Ô:ð +Ø!Ÿ.š.Ñ*Ô*�Ø�JŠJ�w�w˜wÑ'Ô'×0Ò0Ñ2Ô2Ñ3Ô3Ð3Ø×&Ò& v¨ÀÀuÈqÁyÑQÔQÐQð ×"Ò"Ñ$Ô$Ð$Ø×&Ò&ØØ¥# g¤lÑ"3Ô"3Ñ3Ø˜' 5Ð)Ð*Ñ*Ø˜‘	ñ	ô ð r   c                 óæ  — |j         df|v r|                     dd¦  «         dS |ryt          |j         t          ¦  «        r|                     ¦   «         }|                      ||¦  «                             ¦   «         ¦  «         |                      ||||dz   ¦  «        S |                     ¦   «          |                      ||t          |j         j
        ¦  «        z  ||j         dfhz  |dz   ¦  «        S ©NFro   rp   T)rr   r:   rq   r   rs   r#   rt   r&   ru   r'   rv   rw   s          r   rA   z#TableauProver._attempt_proof_n_atom~   sþ   € ð ŒL˜%Ð  EÐ)Ð)Ø�JŠJ�x Ñ#Ô#Ð#Ø�4àð 	Ý˜'œ,Õ(9Ñ:Ô:ð +Ø!Ÿ.š.Ñ*Ô*�Ø�JŠJ�w�w˜wÑ'Ô'×0Ò0Ñ2Ô2Ñ3Ô3Ð3Ø×&Ò& v¨ÀÀuÈqÁyÑQÔQÐQð ×"Ò"Ñ$Ô$Ð$Ø×&Ò&ØØ¥# g¤lÔ&7Ñ"8Ô"8Ñ8Ø˜'œ,¨Ð-Ð.Ñ.Ø˜‘	ñ	ô ð r   c                 ó¨   — |df|v r|                      dd¦  «         dS |                     ¦   «          |                      ||||dfhz  |dz   ¦  «        S rn   )r:   ru   r&   rw   s          r   r?   z!TableauProver._attempt_proof_prop•   sr   € ð �Tˆ?˜eÐ#Ð#Ø�JŠJ�x Ñ#Ô#Ð#Ø�4ð 	×ÒÑ Ô Ð Ø×"Ò"Ø�O U¨w¸Ð.>Ð-?Ñ%?ÀÈÁñ
ô 
ð 	
r   c                 ó¼   — |j         df|v r|                     dd¦  «         dS |                     ¦   «          |                      ||||j         dfhz  |dz   ¦  «        S ry   )rr   r:   ru   r&   rw   s          r   rC   z#TableauProver._attempt_proof_n_prop£   sw   € ð ŒL˜%Ð  EÐ)Ð)Ø�JŠJ�x Ñ#Ô#Ð#Ø�4ð 	×ÒÑ Ô Ð Ø×"Ò"Ø�O U¨w¬|¸TÐ.BÐ-CÑ%CÀUÈQÁYñ
ô 
ð 	
r   c                 óB  — |                      ¦   «         \  }}t          |¦  «        D ]ê\  }	}
t                               |
¦  «        sË|}t	          dt
                               ¦   «         z  ¦  «        }t          |¦  «        D ].\  }}|	|k    r |t          |¦  «        ¦  «        n
 ||¦  «        }Œ/|r ||¦  «                             ¦   «         }t          ||¦  «        }| 
                    |
|¦  «         |                      ||||dz   ¦  «        c S Œët          d¦  «        ‚©NzX%srp   z=If this method is called, there must be a non-atomic argument)ÚuncurryÚ	enumerater   Úis_atomr   Ú_counterÚgetr   rt   r   r#   r&   Ú	Exception©r/   ri   rj   r4   rf   rg   rh   Úfrv   ÚiÚargÚctxÚnvÚjÚas                  r   rE   z TableauProver._attempt_proof_app±   s2  € ð —/’/Ñ#Ô#‰ˆˆ4Ý ‘o”oð 
	Vð 
	V‰FˆAˆsÝ ×(Ò(¨Ñ-Ô-ð 	VØ�Ý˜e¥h§l¢l¡n¤nÑ4Ñ5Ô5�Ý% d™OœOð Lð L‘D�A�qØ9:¸aº¸˜#˜#Õ0°Ñ4Ô4Ñ5Ô5Ð5ÀSÀSÈÁVÄV�C�CØð 2Ø!˜' #™,œ,×/Ò/Ñ1Ô1�CÝ& r¨3Ñ/Ô/�Ø—
’
˜3 Ñ$Ô$Ð$Ø×*Ò*¨6°?ÀEÈ5ÐSTÉ9ÑUÔUÐUÐUÐUð	Võ ÐWÑXÔXÐXr   c                 óP  — |j                              ¦   «         \  }}t          |¦  «        D ]ì\  }	}
t                               |
¦  «        sÍ|}t          dt                               ¦   «         z  ¦  «        }t          |¦  «        D ].\  }}|	|k    r |t          |¦  «        ¦  «        n
 ||¦  «        }Œ/|r ||¦  «         	                    ¦   «         }t          || ¦  «        }|                     |
 |¦  «         |                      ||||dz   ¦  «        c S Œít          d¦  «        ‚r}   )rr   r~   r   r   r€   r   r�   r‚   r   rt   r   r#   r&   rƒ   r„   s                  r   rG   z"TableauProver._attempt_proof_n_appÂ   s:  € ð ”,×&Ò&Ñ(Ô(‰ˆˆ4Ý ‘o”oð 	Vð 	V‰FˆAˆsÝ ×(Ò(¨Ñ-Ô-ð 
VØ�Ý˜e¥h§l¢l¡n¤nÑ4Ñ5Ô5�Ý% d™OœOð Lð L‘D�A�qØ9:¸aº¸˜#˜#Õ0°Ñ4Ô4Ñ5Ô5Ð5ÀSÀSÈÁVÄV�C�CØð 2à!˜' #™,œ,×/Ò/Ñ1Ô1�CÝ& r¨C¨4Ñ0Ô0�Ø—
’
˜C˜4 Ñ%Ô%Ð%Ø×*Ò*¨6°?ÀEÈ5ÐSTÉ9ÑUÔUÐUÐUÐUð
Võ ÐWÑXÔXÐXr   c                 ó*  — |j         j        |j         j        k    r|                     dd¦  «         dS |t          j                                      ||f¦  «         d|_        |                      |||j         j        |j         j        hz  ||dz   ¦  «        S )Nro   rp   T)	rr   ÚfirstÚsecondr:   r;   rH   ÚaddÚ
_exhaustedr&   rw   s          r   rI   z!TableauProver._attempt_proof_n_eqÔ   s–   € ð Œ<Ô ¤Ô!4Ò4Ð4Ø�JŠJ�x Ñ#Ô#Ð#Ø�4à�zŒÔ×#Ò# W¨gÐ$6Ñ7Ô7Ð7Ø!ˆÔØ×"Ò"ØØ˜wœ|Ô1°7´<Ô3FÐGÑGØØ�A‰Iñ	
ô 
ð 	
r   c                 óx   — |                      |j        j        |¦  «         |                      ||||dz   ¦  «        S ©Nrp   )r#   rr   r&   rw   s          r   rK   z"TableauProver._attempt_proof_d_negç   s;   € ð 	�
Š
�7”<Ô$ gÑ.Ô.Ð.Ø×"Ò" 6¨?¸EÀ5È1Á9ÑMÔMÐMr   c                 óÌ   — |t           j                                      t          |j        j        |j        j         ¦  «        |f¦  «         |                      ||||dz   ¦  «        S r“   )r;   rb   r�   r   rr   Úvariabler&   rw   s          r   rM   z"TableauProver._attempt_proof_n_allí   sc   € ð 	�zÔ Ô!×%Ò%Ý˜gœlÔ3°g´lÔ6GÐ5GÑHÔHÈ'ÐRñ	
ô 	
ð 	
ð ×"Ò" 6¨?¸EÀ5È1Á9ÑMÔMÐMr   c                 óÌ   — |t           j                                      t          |j        j        |j        j         ¦  «        |f¦  «         |                      ||||dz   ¦  «        S r“   )r;   rd   r�   r   rr   r•   r&   rw   s          r   rO   z#TableauProver._attempt_proof_n_someõ   sb   € ð 	�zŒ~Ô×"Ò"Ý˜7œ<Ô0°7´<Ô3DÐ2DÑEÔEÀwÐOñ	
ô 	
ð 	
ð ×"Ò" 6¨?¸EÀ5È1Á9ÑMÔMÐMr   c                 ó¤   — |                      |j        |¦  «         |                      |j        |¦  «         |                      ||||dz   ¦  «        S r“   )r#   rŽ   r�   r&   rw   s          r   rQ   z TableauProver._attempt_proof_andý   sN   € ð 	�
Š
�7”= 'Ñ*Ô*Ð*Ø�
Š
�7”> 7Ñ+Ô+Ð+Ø×"Ò" 6¨?¸EÀ5È1Á9ÑMÔMÐMr   c                 ó¼   — |                      |j        j         |¦  «         |                      |j        j         |¦  «         |                      ||||dz   ¦  «        S r“   ©r#   rr   rŽ   r�   r&   rw   s          r   rS   z!TableauProver._attempt_proof_n_or  sZ   € ð 	�
Š
�G”LÔ&Ð&¨Ñ0Ô0Ð0Ø�
Š
�G”LÔ'Ð'¨Ñ1Ô1Ð1Ø×"Ò" 6¨?¸EÀ5È1Á9ÑMÔMÐMr   c                 óº   — |                      |j        j        |¦  «         |                      |j        j         |¦  «         |                      ||||dz   ¦  «        S r“   r™   rw   s          r   rU   z"TableauProver._attempt_proof_n_imp  sW   € ð 	�
Š
�7”<Ô% wÑ/Ô/Ð/Ø�
Š
�G”LÔ'Ð'¨Ñ1Ô1Ð1Ø×"Ò" 6¨?¸EÀ5È1Á9ÑMÔMÐMr   c                 ó  — |                      ¦   «         }|                     |j        |¦  «         |                     |j        |¦  «         |                      ||||dz   ¦  «        o|                      ||||dz   ¦  «        S r“   ©Úcloner#   rŽ   r�   r&   ©r/   ri   rj   r4   rf   rg   rh   Ú
new_agendas           r   rW   zTableauProver._attempt_proof_or  s„   € ð —\’\‘^”^ˆ
Ø�
Š
�7”= 'Ñ*Ô*Ð*Ø�Š�w”~ wÑ/Ô/Ð/Ø×"Ò"Ø�O U¨E°A©Iñ
ô 
ð Qà×!Ò! *¨o¸uÀeÈaÁiÑPÔPð	Qr   c                 ó  — |                      ¦   «         }|                     |j         |¦  «         |                     |j        |¦  «         |                      ||||dz   ¦  «        o|                      ||||dz   ¦  «        S r“   rœ   rž   s           r   rY   z TableauProver._attempt_proof_imp  s†   € ð —\’\‘^”^ˆ
Ø�
Š
�G”M�> 7Ñ+Ô+Ð+Ø�Š�w”~ wÑ/Ô/Ð/Ø×"Ò"Ø�O U¨E°A©Iñ
ô 
ð Qà×!Ò! *¨o¸uÀeÈaÁiÑPÔPð	Qr   c                 ó  — |                      ¦   «         }|                     |j        j         |¦  «         |                     |j        j         |¦  «         |                      ||||dz   ¦  «        o|                      ||||dz   ¦  «        S r“   ©r�   r#   rr   rŽ   r�   r&   rž   s           r   r[   z"TableauProver._attempt_proof_n_and&  s�   € ð —\’\‘^”^ˆ
Ø�
Š
�G”LÔ&Ð&¨Ñ0Ô0Ð0Ø�Š˜œÔ+Ð+¨WÑ5Ô5Ð5Ø×"Ò"Ø�O U¨E°A©Iñ
ô 
ð Qà×!Ò! *¨o¸uÀeÈaÁiÑPÔPð	Qr   c                 ór  — |                      ¦   «         }|                     |j        |¦  «         |                     |j        |¦  «         |                     |j         |¦  «         |                     |j         |¦  «         |                      ||||dz   ¦  «        o|                      ||||dz   ¦  «        S r“   rœ   rž   s           r   r]   z TableauProver._attempt_proof_iff0  s´   € ð —\’\‘^”^ˆ
Ø�
Š
�7”= 'Ñ*Ô*Ð*Ø�
Š
�7”> 7Ñ+Ô+Ð+Ø�Š˜œ�~ wÑ/Ô/Ð/Ø�Š˜œ�¨Ñ0Ô0Ð0Ø×"Ò"Ø�O U¨E°A©Iñ
ô 
ð Qà×!Ò! *¨o¸uÀeÈaÁiÑPÔPð	Qr   c                 óš  — |                      ¦   «         }|                     |j        j        |¦  «         |                     |j        j         |¦  «         |                     |j        j         |¦  «         |                     |j        j        |¦  «         |                      ||||dz   ¦  «        o|                      ||||dz   ¦  «        S r“   r¢   rž   s           r   r_   z"TableauProver._attempt_proof_n_iff<  sÂ   € ð —\’\‘^”^ˆ
Ø�
Š
�7”<Ô% wÑ/Ô/Ð/Ø�
Š
�G”LÔ'Ð'¨Ñ1Ô1Ð1Ø�Š˜œÔ*Ð*¨GÑ4Ô4Ð4Ø�Š�w”|Ô*¨GÑ4Ô4Ð4Ø×"Ò"Ø�O U¨E°A©Iñ
ô 
ð Qà×!Ò! *¨o¸uÀeÈaÁiÑPÔPð	Qr   c                 ó  — |                      |¦  «         |                     |j        |j        ¦  «         |                     |j        ¦  «         |                     ¦   «          |                      ||t          ¦   «         |dz   ¦  «        S r“   )Ú	put_atomsÚreplace_allrŽ   r�   ÚdiscardÚmark_neqs_freshr&   r'   rw   s          r   ra   zTableauProver._attempt_proof_eqH  s|   € ð 	×Ò˜ÑÔÐØ×Ò˜7œ=¨'¬.Ñ9Ô9Ð9Ø×Ò ¤Ñ.Ô.Ð.Ø×ÒÑ Ô Ð Ø×"Ò" 6¨?½C¹E¼EÀ5È1Á9ÑMÔMÐMr   c                 ó  — t          t          ¦   «         ¦  «        }|                     |j                             |j        |¦  «        |¦  «         |                     ¦   «          |                      |||hz  ||dz   ¦  «        S r“   )r   r   r#   rr   Úreplacer•   ru   r&   )r/   ri   rj   r4   rf   rg   rh   Únew_unique_variables           r   rc   z!TableauProver._attempt_proof_someU  sƒ   € õ 1µÑ1BÔ1BÑCÔCÐØ�
Š
�7”<×'Ò'¨Ô(8Ð:MÑNÔNÐPWÑXÔXÐXØ×ÒÑ Ô Ð Ø×"Ò"Ø�OÐ':Ð&;Ñ;¸UÀEÈAÁIñ
ô 
ð 	
r   c                 óF  — 	 |j          n## t          $ r t          ¦   «         |_         Y nw xY w|�r ||j         z
  }|rµt          |¦  «        d         }|                     d|z  d¦  «         |xj         |hz  c_         |                     |j                             |j        |¦  «        |¦  «         |t          j
                                      ||f¦  «         |                      ||||dz   ¦  «        S |                     dd¦  «         d|_        |t          j
                                      ||f¦  «         |                      ||||dz   ¦  «        S t          t          ¦   «         ¦  «        }	|                     d|	z  d¦  «         |xj         |	hz  c_         |                     |j                             |j        |	¦  «        |¦  «         |t          j
                                      ||f¦  «         |                     ¦   «          |                      |||	hz  ||dz   ¦  «        S )Nr   z--> Using '%s'é   rp   z--> Variables ExhaustedT)Ú
_used_varsÚAttributeErrorr'   Úlistr:   r#   rr   r«   r•   r;   rd   r�   r&   r‘   r   r   ru   )
r/   ri   rj   r4   rf   rg   rh   Úbv_availableÚvariable_to_user¬   s
             r   re   z TableauProver._attempt_proof_all_  sO  € ð	'ØÔÐÐøÝð 	'ð 	'ð 	'Ý!$¡¤ˆGÔÐÐð	'øøøð ñ  	à*¨WÔ-?Ñ?ˆLàð VÝ"& |Ñ"4Ô"4°QÔ"7�Ø—
’
Ð+¨oÑ=¸qÑAÔAÐAØÐ"Ô" Ð&7Ñ7Ð"Ô"Ø—
’
Ø”L×(Ò(¨Ô)9¸?ÑKÔKÈWñô ð ð •z”~Ô&×*Ò*¨G°WÐ+=Ñ>Ô>Ð>Ø×*Ò*¨6°?ÀEÈ5ÐSTÉ9ÑUÔUÐUð —
’
Ð4°aÑ8Ô8Ð8Ø%)�Ô"Ø•z”~Ô&×*Ò*¨G°WÐ+=Ñ>Ô>Ð>Ø×*Ò*¨6°?ÀEÈ5ÐSTÉ9ÑUÔUÐUõ #5µ_Ñ5FÔ5FÑ"GÔ"GÐØ�JŠJÐ'Ð*=Ñ=¸qÑAÔAÐAØÐÔÐ#6Ð"7Ñ7ÐÔØ�JŠJØ”×$Ò$ WÔ%5Ð7JÑKÔKÈWñô ð ð •:”>Ô"×&Ò&¨°Ð'9Ñ:Ô:Ð:Ø×"Ò"Ñ$Ô$Ð$Ø×&Ò&Ø˜Ð+>Ð*?Ñ?ÀÈÐPQÉ	ñô ð s   ‚
 Š*©*c                 ó  — t          | t          ¦  «        r| j        } t          | t          ¦  «        r)| j        D ]}t
                               |¦  «        s dS Œ dS t          | t          ¦  «        st          | t          ¦  «        rdS dS )NFT)	rq   r   rr   r	   rv   r   r€   r   r   )r6   r‡   s     r   r€   zTableauProver.is_atomŠ  s�   € å�aÕ*Ñ+Ô+ð 	Ø”ˆAå�aÕ.Ñ/Ô/ð 
	Ø”vð !ð !�Ý$×,Ò,¨SÑ1Ô1ð !Ø ˜5˜5ð!à�4Ý˜Õ5Ñ6Ô6ð 	½*ØÕñ;
ô ;
ð 	ð �4à�5r   )NNF)r   r   r   r)   r7   r&   r=   rA   r?   rC   rE   rG   rI   rK   rM   rO   rQ   rS   rU   rW   rY   r[   r]   r_   ra   rc   re   Ústaticmethodr€   r   r   r   r   r   )   sÁ  € € € € € Ø€Mð3ð 3ð 3ð 3ð0!Uð !Uð !UðFð ð ð.ð ð ð.
ð 
ð 
ð
ð 
ð 
ðYð Yð Yð"Yð Yð Yð$
ð 
ð 
ð&Nð Nð NðNð Nð NðNð Nð NðNð Nð NðNð Nð NðNð Nð NðQð Qð QðQð Qð QðQð Qð Qð
Qð 
Qð 
Qð
Qð 
Qð 
QðNð Nð Nð
ð 
ð 
ð)ð )ð )ðV ðð ñ „\ðð ð r   r   c                   ó   — e Zd Zdd„ZdS )ÚTableauProverCommandNc                 ó„   — |�t          |t          ¦  «        sJ ‚nt          ¦   «         }t          j        | |||¦  «         dS )zé
        :param goal: Input expression to prove
        :type goal: sem.Expression
        :param assumptions: Input expressions to use as assumptions in
            the proof.
        :type assumptions: list(sem.Expression)
        N)rq   r   r   Ú__init__)r/   r0   r1   Úprovers       r   r¹   zTableauProverCommand.__init__�  sI   € ð ÐÝ˜f¥mÑ4Ô4Ð4Ð4Ð4Ð4å"‘_”_ˆFåÔ" 4¨°°{ÑCÔCÐCÐCÐCr   )NNN)r   r   r   r¹   r   r   r   r·   r·   œ  s.   € € € € € ðDð Dð Dð Dð Dð Dr   r·   c                   óX   — e Zd Zd„ Zd„ Zd„ Zdd„Zd„ Zd„ Zd„ Z	d	„ Z
d
„ Zd„ Zd„ Zd„ ZdS )r"   c                 ó\   — t          d„ t          d¦  «        D ¦   «         ¦  «        | _        d S )Nc              3   ó2   K  — | ]}t          ¦   «         V — Œd S ©N)r'   )Ú.0r†   s     r   ú	<genexpr>z"Agenda.__init__.<locals>.<genexpr>¯  s&   è è € Ð3Ð3 A�#™%œ%Ð3Ð3Ð3Ð3Ð3Ð3r   é   )ÚtupleÚrangeÚsets)r/   s    r   r¹   zAgenda.__init__®  s*   € ÝÐ3Ð3­¨r©¬Ð3Ñ3Ô3Ñ3Ô3ˆŒ	ˆ	ˆ	r   c                 ó   — t          ¦   «         }d„ | j        D ¦   «         }t          ¦   «         }|t          j                 D ]q\  }}t          |j        |j        ¦  «        }	 d„ |j        D ¦   «         |_        n## t          $ r t          ¦   «         |_        Y nw xY w| 
                    |d f¦  «         Œr||t          j        <   d„ |t          j                 D ¦   «         |t          j        <   t          |¦  «        |_        |S )Nc                 ó6   — g | ]}|                      ¦   «         ‘ŒS r   )Úcopy)r¿   Úss     r   ú
<listcomp>z Agenda.clone.<locals>.<listcomp>³  s    € Ð0Ð0Ð0 �A—F’F‘H”HÐ0Ð0Ð0r   c                 ó   — h | ]}|’ŒS r   r   ©r¿   Úuseds     r   ú	<setcomp>zAgenda.clone.<locals>.<setcomp>¹  s   € Ð'JÐ'JÐ'J°¨Ð'JÐ'JÐ'Jr   c                 ó@   — h | ]\  }}t          |j        ¦  «        |f’ŒS r   )r   rr   )r¿   Ún_eqrˆ   s      r   rÍ   zAgenda.clone.<locals>.<setcomp>¿  s;   € ð %
ð %
ð %
á��sõ ˜tœyÑ)Ô)¨3Ð/ð%
ð %
ð %
r   )r"   rÄ   r'   r;   rd   r   r•   rr   r¯   r°   r�   rH   rÂ   )r/   rŸ   Úset_listÚ
new_allExsÚallExÚ_Ú	new_allExs          r   r�   zAgenda.clone±  s  € Ý‘X”Xˆ
Ø0Ð0 d¤iÐ0Ñ0Ô0ˆå‘U”Uˆ
Ø ¥¤Ô0ð 	.ð 	.‰HˆE�1Ý% e¤n°e´jÑAÔAˆIð-Ø'JÐ'J¸Ô9IÐ'JÑ'JÔ'J�	Ô$Ð$øÝ!ð -ð -ð -Ý'*¡u¤u�	Ô$Ð$Ð$ð-øøøà�NŠN˜I tÐ,Ñ-Ô-Ð-Ð-Ø#-ˆ•”Ñ ð%
ð %
à'­
¬Ô8ð%
ñ %
ô %
ˆ•”Ñ!õ
   ™/œ/ˆ
ŒØÐs   Á A7Á7BÂBc                 ó   — | j         |         S r¾   )rÄ   )r/   Úindexs     r   Ú__getitem__zAgenda.__getitem__Ç  s   € ØŒy˜ÔÐr   Nc                 óH  — t          |t          ¦  «        rUt          |j        |j        ¦  «        }	 d„ |j        D ¦   «         |_        n%# t
          $ r t          ¦   «         |_        Y nw xY w|}| j        |                      |¦  «                  	                    ||f¦  «         d S )Nc                 ó   — h | ]}|’ŒS r   r   rË   s     r   rÍ   zAgenda.put.<locals>.<setcomp>Î  s   € Ð'OÐ'OÐ'O°¨Ð'OÐ'OÐ'Or   )
rq   r   r•   rr   r¯   r°   r'   rÄ   Ú_categorize_expressionr�   )r/   Ú
expressionrj   Ú	ex_to_adds       r   r#   z
Agenda.putÊ  s±   € Ý�j¥-Ñ0Ô0ð 	#Ý% jÔ&9¸:¼?ÑKÔKˆIð-Ø'OÐ'O¸Ô9NÐ'OÑ'OÔ'O�	Ô$Ð$øÝ!ð -ð -ð -Ý'*¡u¤u�	Ô$Ð$Ð$ð-øøøð #ˆIØŒ	�$×-Ò-¨iÑ8Ô8Ô9×=Ò=¸yÈ'Ð>RÑSÔSÐSÐSÐSs   ±A ÁA(Á'A(c                 ó:   — |D ]}|                       |¦  «         Œd S r¾   )r#   )r/   ÚexpressionsrÛ   s      r   r$   zAgenda.put_allÕ  s0   € Ø%ð 	!ð 	!ˆJØ�HŠH�ZÑ Ô Ð Ð ð	!ð 	!r   c                 óº   — |D ]W\  }}|r)| t           j                                      | d f¦  «         Œ0| t           j                                      |d f¦  «         ŒXd S r¾   )r;   r@   r�   r<   )r/   rg   ÚatomÚnegs       r   r¦   zAgenda.put_atomsÙ  sn   € Øð 	8ð 	8‰IˆD�#Øð 8Ø•ZÔ&Ô'×+Ò+¨d¨U°D¨MÑ:Ô:Ð:Ð:à•Z”_Ô%×)Ò)¨4°¨,Ñ7Ô7Ð7Ð7ð		8ð 	8r   c                 ó^  — t          | j        ¦  «        D ]—\  }}|r�|t          j        t          j        fv r^|D ]Z}	 |d         j        s|                     |¦  «         ||fc c S Œ.# t          $ r  |                     |¦  «         ||fcY c c S w xY wŒ|                     ¦   «         |fc S Œ˜dS )z3Pop the first expression that appears in the agendar   ))NNN)	r   rÄ   r;   rH   rd   r‘   Úremover°   Úpop)r/   r†   rÈ   Úexs       r   r9   zAgenda.pop_firstà  sð   € å˜dœiÑ(Ô(ð 	(ð 	(‰DˆAˆqØð (Ø�œ­*¬.Ð9Ð9Ð9Øð +ð +˜ð+Ø#% a¤5Ô#3ð /Ø !§¢¨¡¤ Ø(*¨A w     ð/øõ  .ð +ð +ð +ØŸHšH R™LœL˜LØ$&¨ 7˜N˜N˜N˜N˜N˜N˜Nð+øøøð+ð ŸEšE™GœG Q˜<Ð'Ð'Ð'ð(ð $Ð#s   »%A&Á&#BÂBc                 óš   — | j         D ]B}|D ]=\  }}|                     |j        |¦  «         |�|                     |j        |¦  «         Œ>ŒCd S r¾   )rÄ   r«   r•   )r/   ÚoldÚnewrÈ   rå   rˆ   s         r   r§   zAgenda.replace_allñ  sg   € Ø”ð 	3ð 	3ˆAØð 3ð 3‘��CØ—
’
˜3œ<¨Ñ-Ô-Ð-Ø�?Ø—K’K ¤¨cÑ2Ô2Ð2øð3ð	3ð 	3r   c                 óN   — | j         t          j                 D ]\  }}d|_        Œd S ©NF)rÄ   r;   rd   r‘   )r/   ÚurÓ   s      r   ru   zAgenda.mark_alls_freshø  s1   € Ø”I�jœnÔ-ð 	!ð 	!‰DˆAˆqØ ˆAŒLˆLð	!ð 	!r   c                 óN   — | j         t          j                 D ]\  }}d|_        Œd S rê   )rÄ   r;   rH   r‘   )r/   ÚneqrÓ   s      r   r©   zAgenda.mark_neqs_freshü  s1   € Ø”i¥
¤Ô0ð 	#ð 	#‰FˆC�Ø"ˆCŒNˆNð	#ð 	#r   c                 ó,  — t          |t          ¦  «        r|                      |¦  «        S t          |t          ¦  «        rt          j        S t                               |¦  «        rt          j        S t          |t          ¦  «        rt          j
        S t          |t          ¦  «        rt          j        S t          |t          ¦  «        rt          j        S t          |t          ¦  «        rt          j        S t          |t"          ¦  «        rt          j        S t          |t&          ¦  «        rt          j        S t          |t*          ¦  «        rt          j        S t          |t.          ¦  «        rt          j        S t3          d|j        j        z  ¦  «        ‚©Nzcannot categorize %s)rq   r   Ú_categorize_NegatedExpressionr   r;   r>   r   r€   r<   r   rd   r   rP   r   rV   r   rX   r   r\   r
   r`   r   rb   r	   rD   r   Ú	__class__r   )r/   ri   s     r   rÚ   zAgenda._categorize_expression   s[  € Ý�gÕ0Ñ1Ô1ð 	XØ×5Ò5°gÑ>Ô>Ð>Ý˜Õ!;Ñ<Ô<ð 	XÝ”?Ð"Ý×"Ò" 7Ñ+Ô+ð 	XÝ”?Ð"Ý˜¥Ñ/Ô/ð 	XÝ”>Ð!Ý˜¥Ñ/Ô/ð 	XÝ”>Ð!Ý˜¥Ñ.Ô.ð 	XÝ”=Ð Ý˜¥Ñ/Ô/ð 	XÝ”>Ð!Ý˜¥Ñ/Ô/ð 		XÝ”>Ð!Ý˜Õ!3Ñ4Ô4ð 	XÝ”=Ð Ý˜Õ!1Ñ2Ô2ð 	XÝÔ$Ð$Ý˜Õ!6Ñ7Ô7ð 	XÝ”>Ð!å"Ð#9¸GÔ<MÔ<VÑ#VÑWÔWÐWr   c                 ó(  — |j         }t          |t          ¦  «        rt          j        S t          |t
          ¦  «        rt          j        S t                               |¦  «        rt          j	        S t          |t          ¦  «        rt          j        S t          |t          ¦  «        rt          j        S t          |t          ¦  «        rt          j        S t          |t           ¦  «        rt          j        S t          |t$          ¦  «        rt          j        S t          |t(          ¦  «        rt          j        S t          |t,          ¦  «        rt          j        S t          |t0          ¦  «        rt          j        S t5          d|j        j        z  ¦  «        ‚rï   )rr   rq   r   r;   rJ   r   rB   r   r€   r@   r   rL   r   rZ   r   rR   r   rT   r   r^   r
   rH   r   rN   r	   rF   r   rñ   r   )r/   ri   Únegateds      r   rð   z$Agenda._categorize_NegatedExpression  s^  € Ø”,ˆå�gÕ0Ñ1Ô1ð 	XÝÔ#Ð#Ý˜Õ!;Ñ<Ô<ð 	XÝÔ$Ð$Ý×"Ò" 7Ñ+Ô+ð 	XÝÔ$Ð$Ý˜¥Ñ/Ô/ð 	XÝÔ#Ð#Ý˜¥Ñ/Ô/ð 	XÝÔ#Ð#Ý˜¥Ñ.Ô.ð 	XÝ”?Ð"Ý˜¥Ñ/Ô/ð 	XÝÔ#Ð#Ý˜¥Ñ/Ô/ð 		XÝÔ#Ð#Ý˜Õ!3Ñ4Ô4ð 	XÝ”?Ð"Ý˜Õ!1Ñ2Ô2ð 	XÝÔ&Ð&Ý˜Õ!6Ñ7Ô7ð 	XÝÔ#Ð#å"Ð#9¸GÔ<MÔ<VÑ#VÑWÔWÐWr   r¾   )r   r   r   r¹   r�   r×   r#   r$   r¦   r9   r§   ru   r©   rÚ   rð   r   r   r   r"   r"   ­  sÙ   € € € € € ð4ð 4ð 4ðð ð ð, ð  ð  ð	Tð 	Tð 	Tð 	Tð!ð !ð !ð8ð 8ð 8ð$ð $ð $ð"3ð 3ð 3ð!ð !ð !ð#ð #ð #ðXð Xð Xð4Xð Xð Xð Xð Xr   r"   c                   ó$   — e Zd Zdd„Zd„ Zdd„ZdS )r%   r   Nc                 ó8   — || _         || _        |sg }|| _        d S r¾   )r2   Úindentr.   )r/   r2   rö   r.   s       r   r¹   zDebug.__init__8  s(   € ØˆŒØˆŒàð 	ØˆEØˆŒ
ˆ
ˆ
r   c                 óH   — t          | j        | j        dz   | j        ¦  «        S r“   )r%   r2   rö   r.   )r/   Ú	increments     r   Ú__add__zDebug.__add__@  s   € Ý�T”\ 4¤;°¡?°D´JÑ?Ô?Ð?r   c                 ó´  — t          |t          ¦  «        ro|\  }}|r|› d|› �}nd|z  }t          |t          ¦  «        rF	 dd                     d„ |j        D ¦   «         ¦  «        z  }|d|z  z  }n# t
          $ r |dz  }Y nw xY wd                     d	| j        |z   z  |¦  «        }| j         	                    |¦  «         | j
        rt          |¦  «         d S d S )
Nú, ú%sz[%s]ú,c              3   ó4   K  — | ]}d |j         j        z  V — ŒdS )rü   N)r•   Úname)r¿   Úves     r   rÀ   zDebug.line.<locals>.<genexpr>N  s,   è è € Ð QÐ Q¸R ¨¬Ô(8Ñ!8Ð QÐ QÐ QÐ QÐ QÐ Qr   z:   %sz:   []z{}{}z   )rq   rÂ   r   r-   r¯   r°   Úformatrö   r.   Úappendr2   r,   )r/   Údatarö   rå   rˆ   Ú	used_varsÚnewlines          r   r:   z
Debug.lineC  s  € Ý�d�EÑ"Ô"ð 	%Ø‰GˆB�Øð !Ø�~�~ �~�~��à˜b‘y�å˜"�mÑ,Ô,ð %ð%Ø &ØŸšÐ QÐ QÀ2Ä=Ð QÑ QÔ QÑQÔQñ!�Ið ˜H yÑ0Ñ0�D�DøÝ%ð %ð %ð %Ø˜HÑ$�D�D�Dð%øøøð —-’- ¨¬°vÑ)=Ñ >ÀÑEÔEˆØŒ
×Ò˜'Ñ"Ô"Ð"àŒ<ð 	Ý�'‰NŒNˆNˆNˆNð	ð 	s   Á /A0 Á0BÂB)r   N)r   )r   r   r   r¹   rù   r:   r   r   r   r%   r%   7  sN   € € € € € ðð ð ð ð@ð @ð @ðð ð ð ð ð r   r%   c                   ób   — 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ZdZdZdZdZdS )r;   r   rp   r®   é   é   é   é   é   é   é	   é
   é   é   é   é   é   é   é   é   é   é   N)r   r   r   r<   r>   r@   rB   rD   rF   rH   rJ   rL   rN   rP   rR   rT   rV   rX   rZ   r\   r^   r`   rb   rd   r   r   r   r;   r;   [  sw   € € € € € Ø€DØ€DØ€FØ€FØ
€CØ€EØ€DØ€EØ€EØ€HØ
€CØ€DØ€EØ	€BØ
€CØ€EØ
€CØ€EØ	€BØ€FØ
€C€C€Cr   r;   c                  ó
  — t          d¦  «         t          d¦  «         t          dddg¦  «         t          d¦  «         t          d¦  «         t          d¦  «         t          d	¦  «         t          d
¦  «         t          d¦  «         t          d	¦  «         t          d
¦  «         t          d¦  «         t          d¦  «         t          d¦  «         t          d¦  «         t          d¦  «         t          d¦  «         d} d}d}t          || |g¦  «         d} d}d}t          || |g¦  «         d}d}t          ||g¦  «         d}d}t          ||g¦  «         d}d}t          ||g¦  «         d}t          |¦  «         d S )NzP | -PzP & -PÚQÚPz(P -> Q)zman(x)z(man(x) -> man(x))z(man(x) -> --man(x))z-(man(x) and -man(x))z(man(x) or -man(x))z(man(x) iff man(x))z-(man(x) iff -man(x))zall x.man(x)z all x.all y.((x = y) -> (y = x))z2all x.all y.all z.(((x = y) & (y = z)) -> (x = z))zall x.(man(x) -> mortal(x))zman(Socrates)zmortal(Socrates)zall x.(man(x) -> walks(x))z	man(John)zsome y.walks(y)z((x = y) & walks(y))zwalks(x)z((x = y) & ((y = z) & (z = w)))z(x = w)z5some e1.some e2.(believe(e1,john,e2) & walk(e2,mary))zsome e0.walk(e0,mary)z(exists x.exists z3.((x = Mary) & ((z3 = John) & sees(z3,x))) <-> exists x.exists z4.((x = John) & ((z4 = Mary) & sees(x,z4))))©Útableau_test)Úp1Úp2ÚcÚps       r   ÚtestTableauProverr"  s  s¶  € Ý�ÑÔÐÝ�ÑÔÐÝ��s˜JÐ'Ñ(Ô(Ð(Ý�ÑÔÐÝÐ%Ñ&Ô&Ð&ÝÐ'Ñ(Ô(Ð(ÝÐ(Ñ)Ô)Ð)ÝÐ&Ñ'Ô'Ð'ÝÐ%Ñ&Ô&Ð&ÝÐ(Ñ)Ô)Ð)ÝÐ&Ñ'Ô'Ð'ÝÐ%Ñ&Ô&Ð&ÝÐ&Ñ'Ô'Ð'ÝÐ(Ñ)Ô)Ð)Ý�Ñ Ô Ð ÝÐ3Ñ4Ô4Ð4ÝÐEÑFÔFÐFð 
'€BØ	€BØ€AÝ��R˜�HÑÔÐà	%€BØ	€BØ€AÝ��R˜�HÑÔÐà€AØ€AÝ��Q�CÑÔÐà)€AØ€AÝ��Q�CÑÔÐà?€AØ€AÝ��Q�CÑÔÐð 	J€AÝ��O„O€O€O€Or   c                  óô   — t          ddg¦  «         t          ddg¦  «         t          ddg¦  «         t          ddg¦  «         t          dd	g¦  «         t          d
dg¦  «         t          ddg¦  «         d S )Nzbelieve(j, -lie(b))zbelieve(j, -lie(b) & -cheat(b))zbelieve(j, lie(b) & cheat(b))zbelieve(j, lie(b))zlie(b)zbelieve(j, know(b, cheat(b)))z;believe(j, know(b, lie(b)) & know(b, steals(b) & cheat(b)))zP(Q(y), R(y) & R(z))zP(Q(x) & Q(y), R(y) & R(z))zbelieve(j, cheat(b) & lie(b))zbelieve(j, -cheat(b) & -lie(b))r  r   r   r   ÚtestHigherOrderTableauProverr$  §  s©   € ÝÐ&Ð)JÐ(KÑLÔLÐLÝÐ0Ð3GÐ2HÑIÔIÐIÝØ˜x˜jñô ð õ Ø'Ø	FÐGñô ð õ Ð'Ð*GÐ)HÑIÔIÐIåÐ0Ð3RÐ2SÑTÔTÐTÝÐ2Ð5VÐ4WÑXÔXÐXÐXÐXr   NFc                 óî   — t          j        | ¦  «        }|rd„ |D ¦   «         ng }|sg }t          d                     |¦  «        ›d|›dt	          ¦   «                              |||¬¦  «        ›�¦  «         d S )Nc                 ó6   — g | ]}t          j        |¦  «        ‘ŒS r   )r   Ú
fromstring)r¿   r!  s     r   rÉ   z tableau_test.<locals>.<listcomp>¹  s#   € Ð
0Ð
0Ð
0¨�:Ô  Ñ#Ô#Ð
0Ð
0Ð
0r   rû   z |- z: )r2   )r   r'  r,   r-   r   Úprove)r   Úpsr2   ÚpcÚppss        r   r  r  ·  s”   € Ý	Ô	˜qÑ	!Ô	!€BØ46Ð
>Ð
0Ð
0¨RÐ
0Ñ
0Ô
0Ð
0¸B€CØð ØˆÝ	à�9Š9�R‰=Œ=ˆ=ˆ=˜"˜"˜"�m™oœo×3Ò3°B¸ÀWÐ3ÑMÔMÐMð	Oñô ð ð ð r   c                  ó>   — t          ¦   «          t          ¦   «          d S r¾   )r"  r$  r   r   r   Údemor-  Â  s    € ÝÑÔÐÝ Ñ"Ô"Ð"Ð"Ð"r   Ú__main__rê   )$Ú__doc__Únltk.inference.apir   r   Únltk.internalsr   Ú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"  r$  r  r-  r   r   r   r   ú<module>r3     s  ððð ð 9Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ø "Ð "Ð "Ð "Ð "Ð "ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð& ˆ7‰9Œ9€ð	ð 	ð 	ð 	ð 	�yñ 	ô 	ð 	ðpð pð pð pð p�Fñ pô pð pðfDð Dð Dð Dð DÐ,ñ Dô Dð Dð"GXð GXð GXð GXð GXñ GXô GXð GXðT!ð !ð !ð !ð !ñ !ô !ð !ðHð ð ð ð ñ ô ð ð0,ð ,ð ,ðhYð Yð Yð ð ð ð ð#ð #ð #ð
 ˆzÒÐØ€D�F„F€F€F€Fð Ðr   