CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutSign UpSign In

Real-time collaboration for Jupyter Notebooks, Linux Terminals, LaTeX, VS Code, R IDE, and more,
all in one place.

| Download

Try doing some basic maths questions in the Lean Theorem Prover. Functions, real numbers, equivalence relations and groups. Click on README.md and then on "Open in CoCalc with one click".

Project: Xena
Views: 18536
License: APACHE
oleanfile3.4.2, commit cbd2b6686ddb�R��initlogicbasictacticcore�#�export_decloptionnonenonesomesomeexport_declboolffffttttexport_declhas_andthenandthenandthenexport_declhas_powpowpowexport_declhas_appendappendappendexport_decldecidableis_trueis_trueis_falseis_falseto_boolto_boolexport_declhas_purepurepureexport_declhas_bindbindbindexport_declhas_monad_lift_tmonad_lift!monad_liftexport_declmonad_functor_tmonad_map$monad_mapexport_declmonad_runrun'runexport_decllistmmap*mmapmmap'*mmap'mfilter*mfiltermfoldl*mfoldlexport_declnativenat_map3rb_mapmkexport_declname_mapnativerb_mapmkexport_declexpr_mapnativerb_mapmkexport_decltacticinteraction_monadfailedfailexport_decltactic_resultinteraction_monadresultexport_decltacticFtransparencyreducibleGreduciblesemireducibleGsemireducibleexport_decltacticmk_simp_attrLmk_simp_attrexport_declmonad_exceptthrowOthrowcatchOcatchexport_declmonad_except_adapteradapt_exceptTadapt_exceptexport_declmonad_state_adapteradapt_stateWadapt_stateexport_declmonad_readerreadZreadexport_declmonad_reader_adapteradapt_reader]adapt_readerexport_declis_lawful_functormap_const_eq`map_const_eqid_map`id_mapcomp_map`comp_mapexport_declis_lawful_applicativeseq_left_eqgseq_left_eqseq_right_eqgseq_right_eqpure_seq_eq_mapgpure_seq_eq_mapmap_puregmap_pureseq_puregseq_pureseq_assocgseq_assocexport_declis_lawful_monadbind_pure_comp_eq_maptbind_pure_comp_eq_mapbind_map_eq_seqtbind_map_eq_seqpure_bindtpure_bindbind_assoctbind_assocdecl_traceautodonedecl_traceautofinishdecltacticassert_freshtexprbooltttactic�id_rhs monadto_has_bindinteraction_monadmonadtactic_statename�get_unused_namenamemk_string
Strhnameanonymousnatn�assert�PInfo�2	VMR�VMC�2	s
�nameanonymoushcharof_natstringemptystringstrnamemk_stringtacticget_unused_name	Fassertdecl�assertv_freshtv��h�assertv!#�PInfo�7	VMR�VMC�7	�
���h�����	Fassertvdecl�interactiverevert_all5tacticrevert_all�PInfo�=	VMR�VMC�=	Frevert_allnspaceautodecl�whnf_reduciblee�Fwhnf!I�PInfo�I	VMR�VMC�I	�tacticwhnfdecl�add_simps_mainasimp_lemmas�listA�A�Clistcases_on�CD!DreturnA#a_hda_tlCLAA�add_simp#s'A
FRecFn�!#�PInfo�L	VMR�VMC�L	a
�C�Alistcases_onsimp_lemmasadd_simp	�decl�add_simpsF��PInfo�L	VMR�VMC�L	�PInfo�auto_configT
indlCn��e_1use_simpboolclassicaljmax_ematch_roundsW�mk-#!�g-!���j�j�g�i�r�j�j�W-#!�nspace�prt�recdecl�sizeofxg�recxg�j�j�has_addaddnathas_add��has_oneonenathas_onesizeofjboolhas_sizeof-�#�nathas_sizeof!�PInfo�T
ATTRreducibility���prt�decl�has_sizeof_insthas_sizeofghas_sizeofmkg��PInfo�T
ATTRinstance���class����prt�decl�sizeof_spec�j�j�eq�n��j�j�eqrefl��PInfo�T
ATTR_refl_lemma���EqnL�prt�gind��decl�use_simpcgj�g
!Proj���j��gj�j�j�-!�PInfo�T
ATTR����proj��decl�classical��g
!Proj���j��j�j�#!�PInfo�T
ATTR����proj��decl�max_ematch_rounds�g�g
!Proj�����g�j�j�!!�PInfo�T
ATTR����proj��decl�use_simp_defaultjidj�PInfo�T
decl�equations_eqn_1�j���j��PInfo�T
ATTR����EqnL�SEqnL�ATTR����decl�classical_defaultj��PInfo�T
decl�equations_eqn_1������PInfo�T
ATTR����EqnL�SEqnL�ATTR����decl�max_ematch_rounds_default�bit0��bit1�����PInfo�T
decl�equations_eqn_1������PInfo�T
ATTR����EqnL�SEqnL�ATTR����decl�rec_on��i�g��j�j�n-#�i�g���rec�-!#�PInfo�T
ATTR����auxrec�prt�auxrec�rec_ondecl�cases_on�����PInfo�T
ATTR����auxrec�decl�no_confusion_type�Phv1gv2gh�h�g�	g���gh#�j�j��W�j�j��use_simp_eq�-classical_eq�
max_ematch_rounds_eq��-	�PInfo�T
ATTR����prt�decl�no_confusion��h�g�	gh12�g#!��W-#�h�g�	g�� eqrecg-agh1a�W!�!��#h11�--��g�.!!W�j�j���
�--��=��--
!�W�-�##!!�PInfo�
T
ATTR����
no_conf�
prt�
decl�inj�j�j��j�j���k��Wnand�W�]�
��#�j�j��j�j���\�no_confusion�fk�^��kW-#!�
�`��`���^Wandintro���^�]����-�{����#!�PInfo�T
decl�inj_arrowl�j�j��j�j���\Ph������������W#�j�j��j�j���\�h���!andelim_left���]���z�inj����^��W-�����zandelim_right�����������z���PInfo�T
decl�inj_eq�j�j��j�j���\�b�]��#�W!�j�j�use_simp_1jclassical_1jmax_ematch_rounds_1propext�\��iffintro�\��h�\���^��W-#!a��anddcases_on�`�e�)�f�k���^�k�W-!a_left�`a_right�a������z�-���k�����r!a_right_left��a_right_right���j�je_1�#!�j�je_2���e_3�#!congrgk�����-#�jx�����congr_argjy���k�^W!�@��W��^#��!�PInfo�!T
ATTRderive���listconspexpr
Quotedecidable_eqlistnil�Edecl�decidable_eqdecidable_eqg��N_vg��>gbgdecidable� !�j�j�wg�P�Ag�Q���!!w_use_simpjw_classicaljw_max_ematch_roundsdecidableby_cases�_-�Q��rnaj�?jbooldecidable_eq#!�^-�)�^�j���Bj�Q�����^k!W-�_�Q����-#�j�)�^�n�Cj�Q����!W�]�y-�Q�q�o-�G�?natdecidable_eq#!�^-�)���l���D�Q�k�@����!�@is_true�����g��W!�)not���@is_false����W�����a_1���inj_arrow�@���@��!falseh_1��@�@h_2��h_3��@�^absurd��
����!�W!�)���^���q�W-������a_1����������W!��h_1�|�h_2�|�h_3�������
����#�W!�)�������v������a_1��������^�W-!��h_1���h_2�h_3�����-��PInfo�<T
VMR�<VMC�<T
�?g�>g�I_main	
�^	natdecidable_eq	ATTR����decidable_eqclass�@�a��ATTR�5����F
Quoteinhabited�Kdecl�inhabitedinhabitedginhabitedmkgk��PInfo�cT
VMR�cVMC�cT
ATTR����inhabitedclass�d�g��decl�by_contradiction_trickp��hf����####�i���j�/!#��#�PInfo�h`decl�preprocess_goalcfggunit�mg�8�7�7Frepeathas_bindand_then�7Fintro1tacticskip_x�7�7�IFtarget�whnf_reducibletgtite��coe_sortjcoe_sort_boolexpris_false!nedecidablej�h�W�8�Q�U�auto_configclassical-�d�c�8�B�>Bprod�I�mFmk_mapp
Strby_contradiction
Strclassical�Doption!�J�|FtransparencysemireducibleeFapply!Fapply_cfgmk��Fnew_goalsnon_dep_first�C�Ehas_orelseorelsealternativeto_has_orelsetacticalternative�7�B�q�r�s�u
Strdecidable���}�������C�E�B�?�>�7Fapplyc
Strby_contradiction_trick
Strauto���C�C�E�E�PInfo�lc	VMR�l_lambda_1VMR�l_lambda_2VMR�l_lambda_3VMR�lVMC��c	�
�r	�tVMC���c	�
_fresh
���e�l�b�a�d�i�c�e�d������������n�o�i�t�c�i�d�a�r�t�n�o�c�_�y�b�������������������tacticmk_mapp	�����	���r�	���tVMC���c	�
�o�t�u�a�������k�c�i�r�t�_�n�o�i�t�c�i�d�a�r�t�n�o�c�_�y�b���������������������������	���r�	���r�	���tVMC�l�c	�
�mg���o	�tactictarget	
�	��}�^			 #�t�
�^	(0����interaction_monad_orelse��l�a�c�i�s�s�a�l�c������������n�o�i�t�c�i�d�a�r�t�n�o�c�_�y�b���������������������	�����	���r�	���t��decl�not_not_eqp��������!!��������!not_not!classicalprop_decidable!�PInfo���decl�not_and_eq����q�������]#!or��#����������������not_and_distrib#!��#�PInfo���decl�not_or_eq��������������#!�]������������������not_or_distrib#!�PInfo���decl�not_forall_equ�s�!������x##!Exists
#x#������	���
���
�not_forall
#��#����x#����PInfo���decl�not_exists_eq�����	���
������x#����	���
���&�(not_exists
#��PInfo���decl�not_implies_eq�������������-���������������4�6not_imp#!���PInfo���decl�classicalimplies_iff_not_or��������iff�-��!��������imp_iff_not_or#!���PInfo���nspace��decl�common_normalize_lemma_namesC�D
Strbex_def�O
Strforall_and_distrib�O
Strexists_imp_distrib�O
Strassoc
Stror�O
Strcomm�`�O
Strleft_comm�`�O�]
Strand�O�d�m�O�h�m�J�PInfo���VMR��VMC�����f�e�d�_�x�e�b�����������b�i�r�t�s�i�d�_�d�n�a�_�l�l�a�r�o�f����������������������b�i�r�t�s�i�d�_�p�m�i�_�s�t�s�i�x�e����������������������r�o�����c�o�s�s�a���������r�o�����m�m�o�c��������r�o�����m�m�o�c�_�t�f�e�l�������������d�n�a������c�o�s�s�a���������d�n�a������m�m�o�c��������d�n�a������m�m�o�c�_�t�f�e�l������������decl��equations_eqn_1�C���}�C��PInfo���ATTR�����EqnL��SEqnL��decl�classical_normalize_lemma_namesChas_appendappendClisthas_append��O
Strimplies_iff_not_or�w���t�PInfo���VMR��VMC�����o�t�u�a�������l�a�c�i�s�s�a�l�c������������r�o�_�t�o�n�_�f�f�i�_�s�e�i�l�p�m�i�������������������������append_maindecl��equations_eqn_1�~���������PInfo�ȏATTR�����EqnL��SEqnL��prvtransform_negation_step_private�_Fytransform_negation_stepdecl��cfgge�{�j��g�����I���N!e_aexprcases_on����!a��O������level����a_1B������a_1a_2����a_1a_2binder_infoa_3����a_1������#����a_aa_a_1���Q�#
Strnotnamehas_decidable_eq#���������N-ne_a����a_1��a_aa_a_1�������Q���U�b
�]��������Fmk_app
Strnot_not_eq���D-�J��pr���~��prodmkW!��a_aa_a_1a_a_2��a_aa_a_1a_a_2��a_a_3��a_aa_a_1������#����������a_a_aa_a_a_1���Q���m���m��������
Strnot_and_eq�����������pr������exprsubst�coereflected_x_1��_x_2��������������coe_to_lift�coe_base�exprhas_coe��
Quote�W�!�Q���`���`��������
Strnot_or_eq�����pr����������_x_1��_x_2����� �H�#�H�'�G
Quote�GW�!�Q��
StrExists���c��������
Strnot_exists_eq�����pr��Finfer_type!_p_a������
match_failed��interaction_monadmonad_fail
Annotdo_failure_eq�����z��a_1���z��a_1a_2�z��a_1a_2��a_3�z��a_1���{�}a_aa_a_1���za_aa_a_1a_a_2�za_aa_a_1a_a_2��a_a_3�za_aa_a_1���z����za_a_aa_a_a_1���za_a_aa_a_a_1a_a_a_2�za_a_aa_a_a_1a_a_a_2��a_a_a_3�za_a_aa_a_a_1���&��#�&�z�&���za_a_a_aa_a_a_a_1���Q��
Streq���������������^�@�za_a_a_aa_a_a_a_1a_a_a_a_2�za_a_a_aa_a_a_a_1a_a_a_a_2��a_a_a_a_3�za_a_a_aa_a_a_a_1�za_a_a_aa_a_a_a_1��a_a_a_a_2����a_a_a_aa_a_a_a_1��a_a_a_amacro_defa_a_a_a_1B�za_a_aa_a_a_1��a_a_a_2����a_a_aa_a_a_1��a_a_a��a_a_a_1���za_aa_a_1��a_a_2����a_aa_a_1��a_a��a_a_1���z��a_1��a_2������a_1������a_1���z!��a_a_aa_a_a_1a_a_a_2��a_a_aa_a_a_1a_a_a_2��a_a_a_3��a_a_aa_a_a_1��a_a_aa_a_a_1��a_a_a_2��!a_a_aa_a_a_1�a_a_a��a_a_a_1����a_aa_a_1��a_a_2���/a_aa_a_1�-a_a��a_a_1������a_1��a_2����a_1��a_2a_3�����Q�U��has_var!�d�@������
Strnot_forall_eq������lamW-#exprabstract_local!W�����	����
Strnot_implies_eq����#��!�����	��a_1�;����a_1����!������a_aa_a_1���/�/�3�6�=�=�p�s!�PInfo�̓VMR��_lambda_1VMR��_rec_9VMR��_rec_8VMR��_rec_7VMR��_rec_6VMR��_rec_5VMR��_rec_4VMR��_rec_3VMR��_rec_2VMR��_rec_1VMR��VMC�q�αVMC�rs��
n��_fresh
�T��_fresh
�Sexprcases_on
4=FOXaj�	�qmatch_failed�	�q���q�e�����namehas_decidable_eq	$,�	�q��2�	�q���	�q���	�q���	�q���	�q���	�q���	�q��VMC�sZ��
�|��_fresh
�(��_fresh
�'��
&/6?HQ�	�q���	�q���	�q���	�q���	�q���r�	�q���	�q���	�q���	�q��VMC�tZ��
�|��_fresh
�#��_fresh
�
���
&/6?HQ�	�q���	�q���	�q���	�q���	�q���s�	�q���	�q���	�q���	�q��VMC�uZ��
�|��_fresh
�
���
&/6?HQ�	�q���	�q���	�q���	�q���	�q���t�	�q���	�q���	�q���	�q��VMC�v����
�|��_fresh
�
���_fresh
�
���
���������������d�n�a��������	!�4�r�o�������	1��s�t�s�i�x�E�����������	UY��o�t�u�a�������q�e�_�s�t�s�i�x�e�_�t�o�n����������������tacticmk_app	��tacticinfer_type	��	�u�	
��3�o�t�u�a�������q�e�_�r�o�_�t�o�n��������������	� �.�Gexprsubst���3���o�t�u�a�������q�e�_�d�n�a�_�t�o�n���������������	�����������VMC�w���
�|��_fresh
�
���_fresh
�
tg��
��������t�o�n��������	!%�
�^	*,1	.01	2��o�t�u�a�������q�e�_�t�o�n�_�t�o�n���������������	�����vVMC�x�F��
�|��_fresh
�
[g��
"'�<�A�w
�^	,.3	023	4�7exprhas_var�^	9��o�t�u�a�������q�e�_�s�e�i�l�p�m�i�_�t�o�n�������������������	����	��
	�u�	
�	�6exprabstract_localexprlam�o�t�u�a�������q�e�_�l�l�a�r�o�f�_�t�o�n������������������	� �1��	�$�*
	�u�/	
�6	�:VMC�yZ��
�|��_fresh
�
W��_fresh
�
0g��
7<AFKPU�t�o�n��������	!%5�	*0�x5VMC�z6��
�|��_fresh
�
*g��
"',1�yVMC����
����g�	�zdecl�����Etransform_negation_maincfgg�����g��e������#!opr��_a��optioncases_on��������!��val��prodcases_on������!val_fstval_snd����
��RecFn���^#opr'��_a������������-������val_fstval_snd����Fmk_eq_trans�!pr''������-!!!�PInfo���prvtransform_negation_main��VMR��VMC��@��
����g��	:	8��	2		0
	tacticmk_eq_trans	"*
/
7	
prv����decl������g��!�PInfo���VMR��VMC�����g��decl�normalize_negationscfggh�8��g���:�J�qt�j�7���7tacticsimplify_top_down�7unitstar_x�7e�������!oepr��_a����������!���I��Fmk_eq_refl-prO�����7������������������!val_fstval_snd��������#!!!��simp_configmksimpdefault_max_stepsboolff���_p��_a�����7�������8!fst�7snd���������8!snd_fstsnd_snd�:�JFreplace_hyp��#!_x�E!�PInfo���	VMR��_lambda_1VMR��VMC��,��
�����7��_fresh���g��	&	tacticmk_eq_refl	$VMC��@�	�
����g��	:������	3
	��	(,�t1
8decl�normalize_hypcfggsimpsA����g��Ah�:���J��simp_hyp#�t!�"tacticfailed�7h�stry�7�normalize_negationsW!�P�Q-!	�PInfo���	VMR��_lambda_1VMR��VMC�'�	�
��_fresh
�(���_fresh
�(�A��_fresh
�(�g?failed����	!����VMC��
�	����A��g�������decl�normalize_hyps�9cfgg�:T�7�Q�U�b!�d�aD�add_simpssimp_lemmasmk���j�simpsA���7Flocal_contextmonadmapm'�7�normalize_hyp#!
�PInfo��	VMR�_lambda_1VMR�VMC��	�{VMC�-�	�
�
g
�^	
��simp_lemmasmk�����	'tacticlocal_context	 ����listmmap'_main%decl�eelim�8�:�sctx��Ffirst�7listmap�8h�J�K�q�Nt�<guard���U�|is_app_of!�c�d��_x�7�J�Ltgt�m�7�rFto_expr����
Quote_x_1_�d_x_2�,�e
existselimAnnot@_�`�4�a#!to_pexprexprhas_to_pexpr!��W��_x�m�qFintros_x��Fclear�!
�PInfo��	VMR�_lambda_1VMR�VMC�>���
�#��	
�	��s�t�s�i�x�E����������&�^	6<interaction_monadfailed?	@���	C~�9to_pexpr�9�A������tacticto_expr	Ub	��g	
	hw	Fintros_main	kptacticclearu
|	
��VMC��	�
�	
�>��map_mainFfirst_maindecl�eelims�8�:���7�eelim�=���PInfo�L�	VMR�LVMC�L�	�
�	��odecl�do_subst�8�:�sctx������h��t_a���R�8!���:�L��������a_1������a_1a_2����a_1a_2��a_3����a_1�����8#����a_aa_a_1����a_aa_a_1a_a_2��a_aa_a_1a_a_2��a_a_3��a_aa_a_1���c�8#�c���c����a_a_aa_a_a_1����a_a_aa_a_a_1a_a_a_2��a_a_aa_a_a_1a_a_a_2��a_a_a_3��a_a_aa_a_a_1���n�8#�n���n����a_a_a_aa_a_a_a_1�����8�:Fsubst�@��a_a_a_aa_a_a_a_1a_a_a_a_2��a_a_a_aa_a_a_a_1a_a_a_a_2��a_a_a_a_3��a_a_a_aa_a_a_a_1��a_a_a_aa_a_a_a_1��a_a_a_a_2�!�+a_a_a_aa_a_a_a_1�)a_a_a_a��a_a_a_a_1����a_a_aa_a_a_1��a_a_a_2��9a_a_aa_a_a_1�7a_a_a��a_a_a_1����a_aa_a_1��a_a_2���Ga_aa_a_1�Ea_a��a_a_1������a_1��a_2���U��a_1�S����a_1����!!�PInfo�N�	VMR�N_rec_4VMR�N_rec_3VMR�N_rec_2VMR�N_rec_1VMR�N_lambda_1VMR�NVMC��S�	�
�|��_fresh
�A���
)/5;AGM���q�e�������	#�'�r�������VMC��>�	�
�|��_fresh
�AW��
 &,28�����������VMC��>�	�
�|��_fresh
�A-��
 &,28�����������VMC��>�	�
�|��_fresh
�A#��
 &,28�����������VMC����
�P��	
�	��VMC�N�	�
�	
���I�Kdecl�do_substs�8�:���do_subst�=�i	�PInfo���	VMR��VMC���	�
�N	�N�odecl�add_conjuncts_main��jprt�n����	assert_consequenceset�8����mcond�7
�pRecFn��#!�E�B�!#�E�Ij�N#t'_a�����n!���nOj���������a_1���Q��
Strtrue�����n��������a_1a_2����a_1a_2��a_3����a_1�����n#����a_aa_a_1����a_aa_a_1a_a_2��a_aa_a_1a_a_2��a_a_3��a_aa_a_1�����n#����������a_a_aa_a_a_1����n������
Strleft�m���@����e₁�;j�!W_x�7����
Strright�m������e₂���
!��_x�7����a_a_aa_a_a_1a_a_a_2��a_a_aa_a_a_1a_a_a_2��a_a_a_3��a_a_aa_a_a_1��a_a_aa_a_a_1��a_a_a_2����a_a_aa_a_a_1��a_a_a��a_a_a_1����a_aa_a_1��a_a_2���	
a_aa_a_1�	a_a��a_a_1������a_1��a_2���	��a_1�	����a_1����!�PInfo���	VMR��_lambda_1VMR��_lambda_2VMR��_lambda_3VMR��_rec_3VMR��_rec_2VMR��_rec_1VMR��_lambda_4VMR��_lambda_5VMR��_lambda_6VMR��VMC���	�{VMC���	�
��_fresh��o��_fresh��f�		�tVMC���	�
��_fresh��z��_fresh��e�		�tVMC����	�
�|��_fresh��x��_fresh��Q��_fresh��P��
��������d�n�a��������	!%��d�n�a������t�f�e�l���������	T����t�����mcond	c�
�d�n�a������t�h�g�i�r����������	�����t������	���
�
�	
�	VMC��7�	�
�|��_fresh��L��_fresh��!��
#(-2��VMC��T�	�
�|��_fresh����
/49@EJO�e�u�r�t���������	&*-��VMC���	�
��_fresh�����_fresh����		�tVMC��
��������t������VMC���	�
��_fresh�����_fresh����	��VMC���	������decl�add_conjuncts�p��	�PInfo��	VMR�VMC��	��decl�split_hyph�n������qt�xj�add_conjuncts#!��j��#����
�PInfo��	VMR�_lambda_1VMR�_lambda_2VMR�_lambda_3VMR�VMC��	�{VMC��	�
��_fresh�ݔ�G		VMC� �	s
VMC��	�
���	� ������decl�split_hyps_aux_main����n���G����n!��a_hda_tl����jj�split_hyp#b₁j�	D
�	=RecFn�&#b₂j��bor#!�PInfo�&�	VMR�&VMC�&)�	�
�����	
"�&			 'decl�split_hyps_aux�	=�&�PInfo�-�	VMR�-VMC�-�	�&decl�split_hyps�8�:�	C�7�pj�r�split_hyps_auxguardb��
�PInfo�.�	VMR�.VMC�.!�	�
�	�&
		�@decl�preprocess_hyps�9cfgg�:�H_x�7�<�preprocess_goal#_x�7�<�normalize_hyps-_x�7�=���do_substs���split_hyps���PInfo�1�$	VMR�1_lambda_1VMR�1VMC�:�$	�
�r	�tVMC�1-�$	�
�2g�:�o	'�l	 �	��.�������o%decl�mk_hinst_lemmas_main���smt_tactichinst_lemmas����	>����	{!�	{��	z�	{� �	��	{�#�	��	{smt_tactichas_coe�	zget_hinst_lemmas_for_attr
Strematcha_hda_tl���	��	y
�	ysmt_tacticmonad�	z�	z
�	|RecFn�<!his�	z�	��	z��	y� �	��#�	��	��p-t_a���H�	{!���	�M�	y�	��	zW�����	���a_1���	��	����a_1a_2�	��	����a_1a_2��a_3�	��	��^��a_1�	���a_1��a_2�	���a_1��a_2a_3�	��	��	��p�t'�Q�!���w��� �	��#�	���
w��
Quote��exprhas_decidable_eq!�	��	{���	y���	ysmt_tacticalternative�	z�	�hinst_lemma�	z��	��	y�	�� �	��	��#�	��	��	��	�hinst_lemmamk�new_lemma�	��	�hinst_lemmasadd�!�	����
��a_1�	�����a_1���	�!�PInfo�<�3	VMR�<_lambda_1VMR�<_lambda_2VMR�<_lambda_3VMR�<_lambda_4VMR�<_rec_1VMR�<_lambda_5VMR�<VMC�b�3	�$
ssmt_state��_fresh��F�	zVMC�c�3	�{VMC�d�3	�
s�
.�l�	z��_fresh��Ehinst_lemmamktactic_to_smt_tactic	hinst_lemmasaddVMC�e)�3	�
�m�
.��_fresh��G�l�	z�p���s	#��exprhas_decidable_eq	
�b!�b�d����cstate_torelseVMC�f,�3	�|��_fresh��-��_fresh��(�	z��_fresh��!��

$(�b�b�b�b�b�b�b�e�b�bVMC�g*�3	�
�m�
.��_fresh��}����_fresh��|�<	$���s		

�f"	
VMC�<,�3	����'�h�c�t�a�m�e���������get_hinst_lemmas_for_attr�s�gdecl�mk_hinst_lemmas�	|�<�PInfo���3	VMR��VMC���3	�<prvreport_invalid_em_lemma���u���report_invalid_em_lemmadecl��αwn�	y#��w���
0�#�
0� �
4�
0�#�
4�
0�	�#?fail#formatformathas_to_format���
Aformathas_append�
Gto_fmtstringstringhas_to_format
Strinvalid ematch lemma '�
Hnamehas_to_format!�
L
Str'�PInfo���BVMR��VMC����B����wi�_c_1a�_c_2l�_c_3 �_c_4e�_c_5m�_c_6'�_c_7��stringhas_to_formatto_fmt����h�c�t�d�v�n����������������������������formatcompose�������sprvadd_hinst_lemma_from_name������Cadd_hinst_lemma_from_namedecl��md��lhs_lemmajnhs�	zref�E�	{���
^��j�����	z���E�	��	��E�	z��E�	y�E� �
f�
h�#�
f�
h�	��EFresolve_name-p�E_a�E������E�	{!���	��	��	��	���-e�	��
hinst_lemmamk_core�!��h�	��	��7�	z��8�	y�7� �8�
��#�8�
��	��7�Ptacticsave_type_info�#�_x�7�	��

��#���	z������
���a_1���	��	��	��
hinst_lemmamk_from_decl_core�#��h�	��
��
�tacticsave_const_type_info-���
��	��	�smt_tacticmk_ematch_eqn_lemmas_for_core�#hs₁�	z�
�_x�7�	�hinst_lemmasmerge��#�
�#��a_1a_2��	��	��	��	�������	��
�
�@!����	��
��
��P�
������7�	��

�#�
�����a_1a_2��a_3�
��	��	��	��	�������	��
�
�
!�@���	��
��
��P�
�����7�	��

�@#�
�����
�a_1�
��	��	��	��	���W���	��
�
�!����	��
��
��P�
��^���7�	��
#�
��^��a_1��a_2�
���/��a_1�
��-����a_1B�
��)!�PInfo���EVMR��_lambda_1VMR��_lambda_2VMR��_lambda_3VMR��_lambda_4VMR��_rec_1VMR��VMC���E�{VMC��@�E�
�m�
.��_fresh����E��_fresh����E��_fresh����	z��_fresh���j��_fresh�ѿ�
^�C�s		:
	hinst_lemmamk_core�s	3	tacticsave_type_info���s	!,
�u18
	VMC��,�E�
�m�
.��_fresh������E���	z��j���
^hinst_lemmamk_from_decl_core�s		&
Fsave_const_type_info�s		�u$
	VMC��)�E�
�m�
.�����E���	z���
^smt_tacticmk_ematch_eqn_lemmas_for_core	#	���s	
hinst_lemmasmerge
!
VMC����E�|�
���_fresh��h�E��_fresh��b�E��_fresh��a�	z��_fresh��`��_fresh��_j��_fresh��^�
^��
&EWi{�������������|����������|�	_c_1������	���|����	���|����������|����������|����������|����������|����������|����������|����������|VMC���E�
�m�
.���E���	z����j���
^tacticresolve_name�s	
		��	prvadd_hinst_lemma_from_pexpr������7add_hinst_lemma_from_pexprdecl�md�
^lhs_lemmajhs�	z��E�	{�
�
^�j��	z��E�
v��E�	{!��	��	��	�����var�!new_e�	��
�
�!�h�	��	��

�!����	��	��	�����sort�!�\a_aa_a_1��G������	{!�	�����#Wexprconst�#�J��a_a_1_hd��a_a_1_tl���	��	��	����wW�D��#!��
���	��	��
�!a_aa_a_1a_a_2�
��	��	��	�����mvar�-#!��	��
�
��!�^��	��	��

�^!a_aa_a_1a_a_2��a_a_3�
��	��q���^W�exprlocal_const�W-#!a_a�
�a_a_1�
��	��	��	�����app�#!��	��
�
�^!���	��	��

�!a_aa_a_1��a_a_2�
�a_a_3�
��	��	��	����K�W-#!��a_aa_a_1��a_a_2�
�a_a_3�
��	��	��	�����pi�W-#!��a_aa_a_1�
�a_a_2�
�a_a_3�
��	��	��	�����elet�W-#!��a_a��a_a_1�5�	��	��	�����macro�#!���PInfo��SVMR�_lambda_1VMR�_lambda_2VMR�_lambda_3VMR�_lambda_4VMR�_lambda_5VMR�_lambda_6	VMR�_lambda_7	VMR�_lambda_8	VMR�_lambda_9VMR�VMC�8.�S�
�m�
.��_fresh�أ��_fresh�ء�	z��_fresh�ؠj��_fresh�؟�
^exprvar�C�s	(	���s	!
�u
&
VMC�9.�S�
�m�
.��_fresh�ش���F�	z�Ij�L�
^exprsort�C�s	(	���s	!
�u
&
VMC�:1�S�
�m�
.��_fresh�������_fresh�������_fresh����F�	z�Ij�L�
^exprconst�C�s	+	
���s	$�u
)
	
VMC�;0�S�
�m�
.��_fresh����
���_fresh�����_fresh����F�	z�Ij�L�
^exprmvar�C�s	
*	
���s	#�u
(
	
VMC�</�S�
�m�
.��_fresh����
���_fresh����
��F�	z�Ij�L�
^exprapp�C�s	)
	���s	"
�u'
	VMC�=	1�S	�
�m�
.��_fresh���
���_fresh���
���_fresh������_fresh���F�	z�Ij�L�
^���C�s	+	
���s	$
�u)
	
VMC�>	1�S	�
�m�
.��_fresh���
���_fresh���
���_fresh������_fresh���F�	z�Ij�L�
^exprpi�C�s	+	
���s	$
�u)
	
VMC�?	1�S	�
�m�
.��_fresh��-�
���_fresh��,�
���_fresh��+�
���_fresh��*�F�	z�Ij�L�
^exprelet�C�s	+	
���s	$
�u)
	
VMC�@/�S�
�m�
.��_fresh��?�5��_fresh��>���F�	z�Ij�L�
^exprmacro�C�s	)
	���s	"
�u'
	VMC�j�S��E��	z�j�
�
^��
	&/<DNXb�8�9��^��$�:�;exprlocal_const���<�=�>�?�@prvadd_hinst_lemmas_from_pexprs���5�!add_hinst_lemmas_from_pexprsdecl��md�
^lhs_lemmajpsB�Ehs�	z�	{���
^��j���!���	z�	�listmfoldl�	y�	��	z�E�W-!#�PInfo���ZVMR��_lambda_1VMR��VMC���ZαVMC���Z���	z���!��j���
^��E��listmfoldl_maindecl�doneps�!cfgopt_paramg�+�8���!���8�:�<Fwhen_tracing
Strdone����Ftrace�
Ihas_to_format_to_has_to_tactic_format�
I�
K
Strentering doneFtrace_state_x�7��tacticcontradictionFsolve1�77_xusing_smt�7�
��7smt_tacticintros_x�7�	����7����	y��� �Z�\�#�Z�\�	����rctx���	��7�mk_hinst_lemmas!hs�	z�h��<��^!hs'�	zsmt_tacticiterate_at_most�auto_configmax_ematch_rounds�^���	y�	�smt_tacticematch_using!smt_tactictry�7smt_tacticclosesmt_configmkcc_configmkCematch_configmk��������������smt_pre_configmk
Strpre_smt����������������������	��PInfo���c	VMR��_lambda_1VMR��_lambda_2VMR��_lambda_3VMR��_lambda_4VMR��VMC��S�c	�
e�n�o�d� �g�n�i�r�e�t�n�e���������������������	IM��VMC���c	�
�m�
.��_fresh���	zsmt_tacticematch_using	smt_tacticclosesmt_tactictryVMC��I�c	�
�m�
.��_fresh����7�*
CNatM20��_fresh����!smt_tacticintros	C��s	<	
�<	5
��	!.��
��iterate_at_most_main3:
A	
VMC��d�c	�
�������!�	^�'
�t�m�s�_�e�r�p�����������B@�h�c�t�a�m�e�����������using_smtVMC��C�c	�
�������!���o�t�u�a�������e�n�o�d���������	2=��������doc��`done` first attempts to close the goal using `contradiction`. If this fails, it creates an
SMT state and will repeatedly use `ematch` (using `ematch` lemmas in the environment,
universally quantified assumptions, and the supplied lemmas `ps`) and congruence closure.PInfo�case_option�s
indlCn��he_1!��forcee_2#��at_most_onee_3-��accept�����!��w����������������������������-����������������#����������������!�decl��rec_on������������#����-����W���W����������������������rec���-#!W�PInfo���s
ATTR�����auxrec��prt��decl��cases_on�������PInfo���s
ATTR�����auxrec��prt��decl��no_confusion_type��Phv1��v2��h��h�������������h#��!�-W--�
-�
-�
-�
�PInfo���s
ATTR�����prt��decl��no_confusion����h������h12���#!����W-#��h��������
�)��-a��h1a�
W!�
��#h11�
--������
!!W��!�
-�
-#!!�PInfo��s
ATTR����no_conf�prt�decl��inj��
����true��
;trueintro�PInfo��s
decl��inj_arrowl��
;Ph���
<##��
;�
h��
@!��inj-�PInfo��s
decl��inj_eq���
;�
<���
;�
<���
;�
<h�
;�
D!�)�
<������PInfo��s
decl��inj��
�����
<��
Y�
>�PInfo��s
decl��inj_arrowl��
Y�
B��
YPh��
@!��inj-�PInfo��s
decl��inj_eq���
Y�
<���
Y�
<���
Y�
<h�
Y�
]!�)�
<�
S���PInfo��s
decl��inj��
�����
<��
q�
>�PInfo��s
decl��inj_arrowl��
q�
B��
qPh��
@!��inj-�PInfo��s
decl��inj_eq���
q�
<���
q�
<���
q�
<h�
q�
u!�)�
<�
S���PInfo��s
decl��sizeofx����recx������PInfo��s
ATTR����prt�decl��has_sizeof_inst��������PInfo�#�s
ATTR����#class��#��prt�#decl��sizeof_spec��
������
��PInfo�$�s
ATTR����$EqnL�$prt�$decl��sizeof_spec��
������
��PInfo�%�s
ATTR����%EqnL�%prt�%decl��sizeof_spec��
������
��PInfo�&�s
ATTR����&EqnL�&prt�&gind��������prt��recnspace��ATTR�5�����F
Quote�G�Kdecl��decidable_eq�M����
�_v�����)���?���Q�
!w���
��*���Q�
:!!���
;�
T���
:��a�
���no_confusion������!���
:���+�
��
���!w���
��-���Q�
X!!���
X���+�
��
�����!���
Y�
l���
X���+�
��
���!w���
��.���Q�
p!!���
p���+�
��
�����!���
p���+�
��
���!���
q�
��PInfo�(�s
VMR�(VMC�(�s
�?���)��




ATTR�����decidable_eqclass�@�/��ATTR�5�����F
Quote�!�Kdecl��inhabited�%���'�����PInfo�0�s
VMR�0VMC�0�s
ATTR�����inhabitedclassinhabited�1��prvcase_cont���<Acase_contdecl�5s��cont����8�8�6���7�
�_a���8#�8���
��!�:�������:���y�	3�������E����Fswap�����:Ffocus�D�8#����J�8#	�PInfo�5�xVMR�5_lambda_1VMR�5_lambda_2VMR�5_lambda_3VMR�5VMC�;�x�{VMC�<�x�
��_fresh���
�	VMC�=�x�
�@�
��9	
	VMC�53�x�
�7�
��6��
'	�=�t�<��;����:decl�case_hyphs��cont�
��n�B�C���D�
������	�t_a����a_1����������a_1��a_aa_a_1��a_a_aa_a_a_1���=�n���	3�>C�7Fcases�@�t�����5�����������������	�	�	
�	
�	�	�	�	�	�	!
�PInfo�A��	VMR�A_rec_3VMR�A_rec_2VMR�A_rec_1VMR�AVMC�Nb��	�
�|��_fresh����
���_fresh�������_fresh�����
?DINSX]�r�o�������	 =�M	'-�52		38=	VMC�O7��	�
�|��_fresh���
���_fresh������_fresh����
#(-2�NVMC�P7��	�
�|��_fresh���
���_fresh������_fresh����
#(-2�OVMC�A��	�
�D�
��C���B��	�Pdecl�case_some_hyp_aux_mains��cont�
��	=�n���o�
�����	Ba_hda_tl�����	,�case_hyp#�W��
�fRecFn�m�W!�PInfo�m��	VMR�m_lambda_1VMR�m_lambda_2VMR�mVMC�s��	�{VMC�t��	�$
VMC�m��	�
����o�
��n����m�t�A��s�decl�case_some_hyp_aux�f�n���o�
��m#!�PInfo�u��	VMR�uVMC�u��	�o�
��n���mdecl�case_some_hyp�)s��cont�
����	[�case_some_hyp_aux#!
�PInfo�v��	VMR�vVMC�v��	�
�x�
��w���	
�mdecl�safe_core_mains�jACps�!cfgg�
��|���}�!�~gco���8���Ffocus1�7�<�;
Strfinish�����E
Strentering safe_core�I_x�7�<�Q�U�auto_configuse_simp-�d���8�<���E
Strsimplifying hypotheses_x�7�<��simp_allprodfstAC���sndAC�� ��L_x�7�����E
Strresult:�I�E_x�7��tacticdone�<���E
Strpreprocessing hypotheses_x�7�<�preprocess_hyps�_x�7�<��_x�7���done���^�y�case_some_hyp�
��RecFn�{����^�E_a����:������:�P������PInfo�{��	VMR�{_lambda_1VMR�{_lambda_2VMR�{_lambda_3VMR�{_lambda_4VMR�{_lambda_5VMR�{_lambda_6VMR�{VMC��l��	�
e�r�o�c�_�e�f�a�s� �g�n�i�r�e�t�n�e��������������������������	bf��VMC��5��	�
:�t�l�u�s�e�r���������������	+/��VMC����	�{VMC����	�
��_fresh�O����_fresh�Ng��_fresh�M�!
����������VMC���&��	�
������g���!��_fresh�L��s�e�s�e�h�t�o�p�y�h� �g�n�i�s�s�e�c�o�r�p�e�r�p���������������������������������o�t�u�a�������h�s�i�n�i�f�����������	�� �1	�����o�t�u�a�������h�s�i�n�i�f�����������	��
���t�{�v���������	
�	VMC���q��	�
������g���!�������o�t�u�a�������h�s�i�n�i�f�����������	<�k
�^	AD�t�Ws�e�s�e�h�t�o�p�y�h� �g�n�i�y�f�i�l�p�m�i�s�������������������������������o�t�u�a�������h�s�i�n�i�f�����������	��R���

��	�
�Ki�_c_1
���o�t�u�a�������h�s�n�f������������P	
�W		�X�d��Fdone���i	VMC�{��	����~g�}�!�|������decl�safe_core���|���}�!�~g�{-#!�PInfo����	VMR��VMC����	�~g�}�!�|���{doc��`safe_core s ps cfg opt` negates the goal, normalizes hypotheses
(by splitting conjunctions, eliminating existentials, pushing negations inwards,
and calling `simp` with the supplied lemmas `s`), and then tries `contradiction`.

If this fails, it will create an SMT state and repeatedly use `ematch`
(using `ematch` lemmas in the environment, universally quantified assumptions,
and the supplied lemmas `ps`) and congruence closure.

`safe_core` is complete for propositional logic. Depending on the form of `opt`
it will:

- (if `opt` is `case_option.force`) fail if it does not close the goal,
- (if `opt` is `case_option.at_most_one`) fail if it produces more than one goal, and
- (if `opt` is `case_option.accept`) ignore the number of goals it produces.decl�clarifys���:����ps�!cfg�8�:�safe_core-#!���PInfo����	VMR��VMC����	�������!�����{doc��`clarify` is `safe_core`, but with the `(opt : case_option)`
parameter fixed at `case_option.at_most_one`.decl�safe��s��ps�!cfg�8�:�����PInfo����	VMR��VMC����	�������!�����{doc��`safe` is `safe_core`, but with the `(opt : case_option)`
parameter fixed at `case_option.accept`.decl�finish��s��ps�!cfg�8�:�����PInfo����	VMR��VMC����	�������!�����{doc��`finish` is `safe_core`, but with the `(opt : case_option)`
parameter fixed at `case_option.force`.decl�iclarify��s��ps�!cfg�8�:�clarify-#k��!��s!�PInfo����	VMR��VMC��
��	�������!����

��doc��`iclarify` is like `clarify`, but in some places restricts to intuitionistic logic.
Classical logic still leaks, so this tactic is deprecated.decl�isafe��s��ps�!cfg�8�:�safe-#��PInfo����	VMR��VMC��
��	�������!����

��doc��`isafe` is like `safe`, but in some places restricts to intuitionistic logic.
Classical logic still leaks, so this tactic is deprecated.decl�ifinish��s��ps�!cfg�8�:�finish-#��PInfo����	VMR��VMC��
��	�������!����

��doc��`ifinish` is like `finish`, but in some places restricts to intuitionistic logic.
Classical logic still leaks, so this tactic is deprecated.decltacticinteractiveclarifyhsinteractiveparseBtacticsimp_arg_typea�.listreflect�-���-��has_reflect!
Quote�-!��simp_arg_listps�,�{�!���=optionhas_reflect�!���!�0�E���Eexprreflect�!
Quote�E!
Quote�!!optionalleanparserleanparseralternative�!has_seq_rightseq_right�Rapplicativeto_has_seq_right�R�to_applicative�R��parser_state�7�!��tk
Strusing��typespexpr_list_or_texpr�9���<���kcfg�8�:���7��mk_simp_set��t-s���!optionget_or_else�!-�K#�PInfo���	VMR��VMC���	�
�������k���<��mk_simp_set	optionget_or_else_main��doc��`clarify [h1,...,hn] using [e1,...,en]` negates the goal, normalizes hypotheses
(by splitting conjunctions, eliminating existentials, pushing negations inwards,
and calling `simp` with the supplied lemmas `h1,...,hn`), and then tries `contradiction`.

If this fails, it will create an SMT state and repeatedly use `ematch`
(using `ematch` lemmas in the environment, universally quantified assumptions,
and the supplied lemmas `e1,...,en`) and congruence closure.

`clarify` is complete for propositional logic.

Either of the supplied simp lemmas or the supplied ematch lemmas are optional.

`clarify` will fail if it produces more than one goal.decl��safehs�/���.�5
Quote�-!�;ps�>���=�@���!�F
Quote�E!
Quote�!!�j�9��������cfg�8�:�ts���!�y#�PInfo���	VMR��VMC���	�
��������������	����doc��`safe [h1,...,hn] using [e1,...,en]` negates the goal, normalizes hypotheses
(by splitting conjunctions, eliminating existentials, pushing negations inwards,
and calling `simp` with the supplied lemmas `h1,...,hn`), and then tries `contradiction`.

If this fails, it will create an SMT state and repeatedly use `ematch`
(using `ematch` lemmas in the environment, universally quantified assumptions,
and the supplied lemmas `e1,...,en`) and congruence closure.

`safe` is complete for propositional logic.

Either of the supplied simp lemmas or the supplied ematch lemmas are optional.

`safe` ignores the number of goals it produces, and should never fail.decl��finishhs�/���.�5
Quote�-!�;ps�>���=�@���!�F
Quote�E!
Quote�!!�j�9��������cfg�8�:�ts���$!�y#�PInfo���.	VMR��VMC���.	�
��������������	����doc��`finish [h1,...,hn] using [e1,...,en]` negates the goal, normalizes hypotheses
(by splitting conjunctions, eliminating existentials, pushing negations inwards,
and calling `simp` with the supplied lemmas `h1,...,hn`), and then tries `contradiction`.

If this fails, it will create an SMT state and repeatedly use `ematch`
(using `ematch` lemmas in the environment, universally quantified assumptions,
and the supplied lemmas `e1,...,en`) and congruence closure.

`finish` is complete for propositional logic.

Either of the supplied simp lemmas or the supplied ematch lemmas are optional.

`finish` will fail if it does not close the goal.decl��iclarifyhs�/���.�5
Quote�-!�;ps�>���=�@���!�F
Quote�E!
Quote�!!�j�9��������cfg�8�:�ts��autoiclarify!�y#�PInfo���6	VMR��VMC���6	�
��������������	����doc��`iclarify` is like `clarify`, but only uses intuitionistic logic.decl��isafehs�/���.�5
Quote�-!�;ps�>���=�@���!�F
Quote�E!
Quote�!!�j�9������cfg�8�:�ts��autoisafe!�y#�PInfo��>	VMR�VMC��>	�
�����������	����doc�`isafe` is like `safe`, but only uses intuitionistic logic.decl��ifinishhs�/���.�5
Quote�-!�;ps�>���=�@���!�F
Quote�E!
Quote�!!�j�9����	�cfg�8�:�ts��autoifinish!�y#�PInfo��F	VMR�VMC��F	�
�
���	������	����doc�`ifinish` is like `finish`, but only uses intuitionistic logic.EndFile