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��]zinitdatastringdefstacticderive_inhabited��Texport_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_assocdeclbinder_infoinhabitedinhabitedbinder_infoinhabitedmkbinder_infodefault�PInfo~	prt~VMR~VMC~	decl~equations_eqn_1eq~eqrefl	�PInfo�	ATTR_refl_lemma���EqnL�SEqnL~ATTRinstance��~class~��decl}brackets_mainaprodstring�binder_infocases_on�id_rhsprodmk
Str(
Str)
Str{
Str}
Str{{
Str}}
Str[
Str]"�PInfo�VMR�VMC�R�
6D(charof_natstringemptystringstr)���{���}���{�{����}�}����[���]���(���)���decl�equations_eqn_1�!id_delta:�PInfo�ATTR����EqnL�decl�equations_eqn_289binder_infoimplicit'=?C�PInfo�ATTR����EqnL�decl�equations_eqn_389binder_infostrict_implicit-=?I�PInfo�ATTR����EqnL�decl�equations_eqn_489binder_infoinst_implicit3=?O�PInfo�ATTR����EqnL�decl�equations_eqn_589�aux_decl!=?U�PInfo�ATTR����EqnL�decl}brackets9�PInfo�VMR�VMC��doc�The brackets corresponding to a given binder_info.decl�equations_eqn_18�!�equations_eqn_1�PInfo�ATTR����EqnL�decl�equations_eqn_28ZB'�equations_eqn_2�PInfo�ATTR����EqnL�decl�equations_eqn_38ZH-�equations_eqn_3�PInfo�ATTR����EqnL�decl�equations_eqn_48ZN3�equations_eqn_4�PInfo�ATTR����EqnL�decl�equations_eqn_58ZT!�equations_eqn_5�PInfo�ATTR����EqnL�decl�_sunfold7�PInfo�declnamemap_prefix_main_meta_auxf�nameoptiono�oo�r�onamecases_on�ooo�anonymousa_aa_a_1oy�get_or_elseo�mk_string�
tRecFn�a_aunsigneda_a_1oy~�mk_numeral����PInfo�(VMR�VMC� (�o�rnamecases_onnameanonymous�namemk_string�optionget_or_else_main�namemk_numeral��decl�t�r�onamebrec_onv�o_F�belowv�o��u�o��o���z{a_aa_a_1o���y~���pprodfstv��recnopunita�oih�pprod�����������a_a�a_a_1o���y~��������PInfo�(VMR�VMC� (�o�r����������decl�equations_eqn_1�ro�zz�ro>o��PInfo�(ATTR����EqnL�decl�equations_eqn_2�rsn'o����~�����r��o����PInfo�(ATTR����EqnL�decl�equations_eqn_3�rd�n'o���~�����r���o����PInfo�(ATTR����EqnL�decl�map_prefixt�r��PInfo�(VMR�VMC�(�r�doc� Find the largest prefix `n` of a `name` such that `f n ≠ none`, then replace this prefix
with the value of `f n`.decl�equations_eqn_1�r��zz�r�equations_eqn_1�PInfo�(ATTR����EqnL�decl�equations_eqn_2�r��o��������r�equations_eqn_2�PInfo�(ATTR����EqnL�decl�equations_eqn_3�r���o����	��"�r�equations_eqn_3�PInfo�(ATTR����EqnL�decl�_sunfoldt�r�o|��oy������oy���8�PInfo�(decl�deinternalize_fields�o|a_aa_a_1oite�znamehas_decidable_eqzoy	istringiteratorstringmk_iterator��Gchar�currcharof_natbit1natnathas_onenathas_add�_�_�_�_bit0�Z�^has_oneone�Z�\chardecidable_eq�V�locoeocoe_to_liftocoe_baseostring_to_name�next_to_string�next���y�a_a�a_a_1oy��PInfo�	.	VMR�	VMC�	&.	�o�!��namehas_decidable_eq	�stringmk_iterator��P_�stringiteratorcurr�"	���stringiteratornextstringiteratornext_to_string��doc�	If `nm` is a simple name (having only one string component) starting with `_`, then `deinternalize_field nm` removes the underscore. Otherwise, it does nothing.decl�get_nth_prefix_main�o��Zo�o��Znatcases_on��Zoy�a_1�Zy
��RecFn�9nameget_prefix��PInfo�95	VMR�9VMC�9
5	��Z�onameget_prefix_main�9decl�get_nth_prefix���9	�PInfo�B5	VMR�BVMC�B5	�9doc�B`get_nth_prefix nm n` removes the last `n` components from `nm`decl_private�J!�spop_nth_prefix_aux_main�o��Zo�Z�o��Z�G��z�K�z����o�Zz�e_a����
��RecFn�F����G��prodcases_ono�Z��fstosnd�Z���Ghas_lele�Znathas_le�Ndecidable_le����has_addadd�Z�^�e��nameupdate_prefix������PInfo�F:prvpop_nth_prefix_aux_main�FVMR�FVMC�F :��Z�o��,	�A�Fnatdecidable_le	
nameupdate_prefix_mainnatadd��]�prv�U�Edecl�E���F	�PInfo�E:VMR�EVMC�E:�Fdoc�EAuxilliary definition for `pop_nth_prefix`decl�pop_nth_prefixnmon�Zo�_o�`�Zyprodfsto�Z�E�
�PInfo�^A	VMR�^VMC�^A	�`�Z�_o�F
doc�^Pops the top `n` prefixes from the given name.decl�pop_prefixnoo�doy�pop_nth_prefix�e�PInfo�cE	VMR�cVMC�cE	�do�^doc�cPop the prefix of a namedecl�C�����from_components_aux_main_meta_aux�o�listo�o���listcases_on���o��a_hda_tl��y
�RecFn�i��PInfo�iIprvfrom_components_aux_main�iVMR�iVMC�iI����olistcases_on��iprv�p�hdecl�h��o����jbrec_on���s���_F�jbelow��o�o����t������t�o��t��knilya_hda_tl���t��kcons�y����krecn����hdtl��ih����*����1�9������PInfo�hIVMR�hVMC�hI����o�r��iprv�pequations_eqn_1�hequations_eqn_1decl��no��h� ��o���X�PInfo��IATTR�����EqnL��prv�pequations_eqn_2�hequations_eqn_2decl��nosrest����V��(�V����o���������`�PInfo��IATTR�����EqnL��prv�o�gdecl�g��V�PInfo�gIVMR�gVMC�gI�hdoc�gAuxilliary definition for `from_components`decl�gequations_eqn_1��o��g� �hequations_eqn_1�PInfo��IATTR�����EqnL��decl�gequations_eqn_2��o��������n��(�n�b�hequations_eqn_2�PInfo��IATTR�����EqnL��decl�g_sunfold��o�����m�n��y�n�	�PInfo��Idecl�from_components��nz�PInfo��OVMR��VMC��O��hdoc��Build a name from components. For example `from_components ["foo","bar"]` becomes
 ```lean `foo.bar```decl��equations_eqn_1���������PInfo��OATTR�����EqnL��SEqnL��decl�sanitize_name_mains�o|a_aa_a_1oy�
sRecFn��a_a�a_a_1oy�has_appendappendstringhas_append��
Strnto_string�unsignedhas_to_string�
Str���PInfo��U	VMR��VMC��U	�o�
�������natreprn���stringappend���decl�sanitize_names���PInfo��U	VMR��VMC��U	��doc��`name`s can contain numeral pieces, which are not legal names
 when typed/passed directly to the parser. We turn an arbitrary
 name into a legal identifier name by turning the numbers to strings.decl�append_suffix_main�o�o�o�w�{a_aa_a_1oy��������PInfo��[VMR��VMC��[��o������decl��equations_eqn_1_x���zz�������PInfo��[ATTR�����EqnL��decl��equations_eqn_2snos'�������������o�������PInfo��[ATTR�����EqnL��decl��equations_eqn_3���o����������o�������PInfo��[ATTR�����EqnL��decl�append_suffix�����PInfo��[VMR��VMC��[��doc��Append a string to the last component of a namedecl��equations_eqn_1�����zz��equations_eqn_1�PInfo��[ATTR�����EqnL��decl��equations_eqn_2����o����������equations_eqn_2�PInfo��[ATTR�����EqnL��decl��equations_eqn_3���o���������equations_eqn_3�PInfo��[ATTR�����EqnL��decl��_sunfold�����PInfo��[decl�head_main�o�ou�o
Str[anonymous]a_aa_a_1o�N�����
��RecFn��a_a�a_a_1o��PInfo��`	VMR��VMC��L`	�o�>Hn�_c_1o�_c_2]�s�u�m�y�a�[���������������,	BE��F��decl�head�����PInfo��`	VMR��VMC��`	��doc��The first component of a name, turning a number to a stringdecl�is_privatenobool��o�decidableto_boolnamehead
Str_privatestringhas_decidable_eq��	�PInfo��g	VMR��VMC��/g	��oe�t�a�v�i�r�p�_������������stringhas_decidable_eqdecidableto_booldoc��Tests whether the first component of a name is `"_private"`decl�last���o��a_aa_a_1o�a_a�a_a_1o��repr�unsignedhas_repr�
�PInfo��k	VMR��VMC��Ek	�o�>An�_c_1o�_c_2]�s�u�m�y�a�[���������������doc��Get the last component of a name, and convert it to a string.decl�length_main�o�Z�ou�o�Z�Zstringlength��a_aa_a_1o�N�Z�0�1��0�����6�e
�,RecFn��a_a�a_a_1o�0�=�PInfo��r	VMR��VMC��Sr	�o�?On�_c_1o�_c_2]�s�u�m�y�a�[�������������stringlength��,	CK�����]�]M����decl�length�,��	�PInfo��r	VMR��VMC��r	��doc��Returns the number of characters used to print all the string components of a name,
 including periods between name segments. Ignores numerical parts of a name.decl�has_prefix_main_meta_auxP�o��J���J�ou�o��a_aa_a_1o��orcoe_sort�coe_sort_bool��V
�KRecFn��ordecidable�W�\booldecidable_eq�booltt�b�[�da_a�a_a_1o���R�V��\�_�o�\�b��d�h�PInfo��yVMR��VMC��2y�o���J����_main	���	����	#-���	)+,.��decl���K���J�o��L�o_F��L�o���u�o��������z�Pa_aa_a_1o�������R�V��V��L����o�������������������_�����b��d�b���da_a�a_a_1o�������R�V����_�����b��d����PInfo��yVMR��VMC��2y�o���J���	���	����	#-���	)+,.��decl��equations_eqn_1���J���z�O���J�>����PInfo�
yATTR����
EqnL�
decl��equations_eqn_2���Jsnmo��������R�V��V���_�����b��d�b���d���J�
�o�������PInfo�yATTR����EqnL�decl��equations_eqn_3���Js�nmo�������R�V����_�����b��d�����J���o�������PInfo�yATTR����EqnL�decl�has_prefix�K���J���PInfo�yVMR�VMC�y���J��doc�Checks whether `nm` has a prefix (including itself) such that P is truedecl�equations_eqn_1���J���z�O���J��equations_eqn_1�PInfo�yATTR����EqnL�decl�equations_eqn_2���J�
�o���������V�������b��d���J��equations_eqn_2�PInfo�yATTR����EqnL�decl�equations_eqn_3���J���o�����������������J��equations_eqn_3�PInfo�yATTR����EqnL�decl�_sunfold�K���J�o�Q����o���X�V��`�9�e�b�8�d���o���p�9�s�9�v�?�PInfo� ydecl�add_primes�oxy�
Strx'za_aa_a_1oy���
Str'a_a�a_a_1oy�S��PInfo�!	VMR�!VMC�!-	�o��'�x�����'�������'�x�����doc�!Appends `'` to the end of a name.decl�last_string_main_meta_aux���o�!a_a�a_a_1o��
��RecFn�(�PInfo�(�VMR�(VMC�(E��o�>An�_c_1o�_c_2]�s�u�m�y�a�[��������������(decl�'���o����o_F����o�-�ou�o�-�o��-�nz��a_aa_a_1o�-�n����a_a�a_a_1o�-�n������~���o�����~��������������PInfo�'�VMR�'VMC�'E��o�>An��+o��,]�s�u�m�y�a�[��������������(decl�'equations_eqn_1��'z��>���PInfo�3�ATTR����3EqnL�3decl�'equations_eqn_2s_xo������6�7o�������PInfo�5�ATTR����5EqnL�5decl�'equations_eqn_3_x�no�������:��;o�������PInfo�9�ATTR����9EqnL�9decl�last_string�����PInfo�<�VMR�<VMC�<��'decl�<equations_eqn_1��<z���'equations_eqn_1�PInfo�>�ATTR����>EqnL�>decl�<equations_eqn_2�6�7o������'equations_eqn_2�PInfo�B�ATTR����BEqnL�Bdecl�<equations_eqn_3�:��;o�������'equations_eqn_3�PInfo�F�ATTR����FEqnL�Fdecl�<_sunfold���o�!�)��*o�����PInfo�I�decllevelnonzero_main�level����levelcases_on�����P�����da_a��a_a_1���bor
��RecFn�L���a_a��a_a_1������o�P���PInfo�L�	VMR�LVMC�L�	���levelcases_on�L	
�L	
�Ldecl�Jnonzero���L�PInfo�W�	VMR�WVMC�W�	�Ldoc�WTests whether a universe level is non-zero for all assignments of its variablesPInfobinder�indlCn�X�Ye_1nameoinfotypeexpr�d�Xmk���[����X��a�]o�^�_�����Z���\���]o�^�_�����nspace�Xprt�Xrecgind�X�adecl�Xnamec��o�d��
Proj�X�a�co�Xrec�d��o�]o�^�_����PInfo�c�ATTRreducibility���cproj�c�adecl�Xinfo�d���d��
Proj�X�a�g��d���]o�^�_����PInfo�g�ATTR�f���gproj�g�adecl�Xtype�d�����d��
Proj�X�a�h����d�����]o�^�_���PInfo�h�ATTR�f���hproj�h�adecl�Xrec_on�Y�Z���[���\�]o�^�_���������Z���[���\�-�Xrec�Y���PInfo�i�ATTR�f���iauxrec�iprt�iauxrec�Xrec_ondecl�Xcases_on�Y�1�8�PInfo�l�ATTR�f���lauxrec�ldoc�XThe type of binders containing a name, the binding info and the binding typedecl�Xno_confusion_type�YP��v1��v2�����n���o���p���l�Y�o������]o�^�_���>�]o�^�_���name_eq��@�info_eq�@�type_eq���@�	�PInfo�m�ATTR�f���mprt�mdecl�Xno_confusion�Y�n���o���p��h12����m�Y���n���o���p���u�\eqrec
���a��h1a�Z�]�@���h11�Z���l
�o���j�]o�^�_����q����r�C���s�F��
�������PInfo�t�ATTR�f���tno_conf�tprt�tdecl�ainj�]o�^�_���]o�^�_����Z���@����and����E�F����]o�^�_���]o�^�_������Xno_confusion�������@�������q���r�C���s�F��andintro��M�����C��@�F�����������PInfo�{�decl�ainj_arrowl�]o�^�_���]o�^�_�����P�����������C���������]o�^�_���]o�^�_������������andelim_left���@�������ainj������@���������andelim_right��������������PInfo���decl�ainj_eq�]o�^�_���]o�^�_�������B���C����F�]o�^�_��name_1oinfo_1type_1��propext���iffintro���h�������@����a�anddcases_on���������Z�������@�����a_left��a_right�����H�1���������Z���M�����a_right_left��a_right_right���]o�]oe_1���^�^e_2�C��_���_��e_3�F�congr��������@�4�����P��S�4�@��congr_argo���������~���M�����@�PInfo���ATTRderive���X�%pexpr
Quotedecidable_eq���decl�Xdecidable_eqdecidable_eq��id��_v���l����b��decidable�\�]o�^�_��w�����������Z�:w_nameow_infow_type��decidableby_cases������Z����ao��o����������wo����o���Z�S���������������7�4������tacticbinder_infohas_decidable_eq�����������������F�C��������������������exprhas_decidable_eq���������������������Z���~�M�����is_true�F�E���E��not����is_false�F�D������a_1���ainj_arrow�~�M��~�M��falseh_1��~�~h_2�C�~�~h_3�F�~��absurd�F�I���
�������������S������*a_1�*��M����M���
h_1���Mh_2�C�M�@h_3�F�M�@��C�I���
������������7�������Pa_1�P����������
h_1����h_2����h_3�F������I���
����PInfo���VMR��VMC������������,	
��	exprhas_decidable_eq	ATTR����Xdecidable_eqclass������ATTR�����X��
Quoteinhabited��decl�Xinhabited������defaultonameinhabited��	����exprinhabited�PInfo�ǛVMR��VMC����levelzeroexprsortATTR����Xinhabitedclassinhabited����declbinderto_stringb������_aZbinderinfo�������J�K����������nameto_string��name
Str : �`to_string�d��type���PInfo�Ԣprt��VMR��VMC��%�����
� �_c_1
exprto_string:�����
nameto_string��������doc��Turn a binder into a string. Uses expr.to_string for the type.decl��has_to_stringhas_to_string����has_to_stringmk��binderto_string�PInfo��prt��VMR��VMC�����ATTR�����class������decl��has_to_formathas_to_format����has_to_formatmk��b���uformat�x���{��string_to_format���PInfo��prt��VMR��VMC���������formatof_stringATTR�����class������decl��has_to_tactic_formathas_to_tactic_format����has_to_tactic_formatmk��b��_a����tactic���J�K��functormap��applicativeto_functor��monadto_applicative��interaction_monadmonadtactic_state����e������formathas_append������������������������tacticpp��exprhas_to_tactic_format�����PInfo��prt��VMR��VMC��5�a������
�
��	.�� �:� �������
������formatcompose���3ATTR�����class������declnatmk_numeraltype��has_zero��has_one��has_add����Z��������������n�Z��Z��	z��exprsubst�d��treflected_x_1�_x_2has_zero�����has_zerozero����w����z���exprhas_coe��
Quote��	o�����t�_x_1�_x_2has_one���� �0�c����w�8���z�8���#�2�7
Quote�7���natbinary_rec��b�n�Ze���G�Z���Znathas_zero�Ndecidable_eq��Q���G�V��b��d�������t�_x_1�_x_2�0_x_3has_add�_x_4��*��+�0�,�a�.��Y�����w�o���z�o���#�e�n
Quote�n����@����t�_x_1�_x_2�`_x_3���/��0���1��`�����w�����z�����#����
Quote����@�PInfo�
�	VMR�
_lambda_1VMR�
VMC�2#��&���%�Z�$�_fresh
�A����3_fresh
�A����3_fresh
�A����3_fresh
�A���natdecidable_eq	!�	��exprsubst�C�C�n�C�C�C�CVMC�
�	��������������C�C����7�C�C����2natbinary_rec_maindoc�
`nat.mk_numeral n` embeds `n` as a numeral expression inside a type with 0, 1, and +.
`type`: an expression representing the target type. This must live in Type 0.
`has_zero`, `has_one`, `has_add`: expressions of the type `has_zero %%type`, etc.declintmk_numeraltype��has_zero��has_one��has_add��has_neg���int���I���J���K���L���M������Ncases_on�������Z��natmk_numeral���@����Z��	ne����������t�_x_1�_x_2has_neg���S��T��_x_3�has_negneg�����w�����z�����#����
Quote�����PInfo�H�	VMR�HVMC�H!�	����M���L���K���J���I��intcases_on�
�]�
�R�����C�C�Cdoc�H`int.mk_numeral z` embeds `z` as a numeral expression inside a type with 0, 1, +, and -.
`type`: an expression representing the target type. This must live in Type 0.
`has_zero`, `has_one`, `has_add`, `has_neg`: expressions of the type `has_zero %%type`, etc.declexprto_pos_nat_main���p�Z���exprcases_on�d�������Z���Z�����a_aoa_a_1������a_aoa_a_1oa_a_2����a_aoa_a_1oa_a_2a_a_3����a_a��a_a_1�����i������i�Z���i����a_a_aoa_a_a_1�	��a_a_aoa_a_a_1oa_a_a_2����a_a_aoa_a_a_1oa_a_a_2a_a_a_3����a_a_a��a_a_a_1�����t������t�Z���t����a_a_a_aoa_a_a_a_1�	�G���
Strone�
Strhas_onez���	-�����Z�e��a_a_a_aoa_a_a_a_1oa_a_a_a_2����a_a_a_aoa_a_a_a_1oa_a_a_a_2a_a_a_a_3����a_a_a_a��a_a_a_a_1������������Z�������a_a_a_a_aoa_a_a_a_a_1�	�G���
Strbit0z���	N������p��p��p�monad�Z�Z�b
��RecFn�]����a_a_a_a_aoa_a_a_a_a_1oa_a_a_a_a_2����a_a_a_a_aoa_a_a_a_a_1oa_a_a_a_a_2a_a_a_a_a_3����a_a_a_a_a��a_a_a_a_a_1��������������Z��������a_a_a_a_a_aoa_a_a_a_a_a_1�	�G���
Strbit1z���	y�����	\�_�	^���a_a_a_a_a_aoa_a_a_a_a_a_1oa_a_a_a_a_a_2����a_a_a_a_a_aoa_a_a_a_a_a_1oa_a_a_a_a_a_2a_a_a_a_a_a_3����a_a_a_a_a_a��a_a_a_a_a_a_1����a_a_a_a_a_aoa_a_a_a_a_a_1a_a_a_a_a_a_2���	��	�a_a_a_a_a_aoa_a_a_a_a_a_1���	�a_a_a_a_a_amacro_defa_a_a_a_a_a_1������a_a_a_a_aoa_a_a_a_a_1a_a_a_a_a_2���	k�	�a_a_a_a_aoa_a_a_a_a_1���	�a_a_a_a_a�	�a_a_a_a_a_1�	���a_a_a_aoa_a_a_a_1a_a_a_a_2���	@�	�a_a_a_aoa_a_a_a_1���	�a_a_a_a�	�a_a_a_a_1�	���a_a_aoa_a_a_1a_a_a_2���	�	�a_a_aoa_a_a_1���	�a_a_a�	�a_a_a_1�	���a_aoa_a_1a_a_2���		�	�a_aoa_a_1���	�a_a�	�a_a_1�	����PInfo�]�VMR�]VMC�]�����exprcases_on
������
"���	��������
$'*jmp��������e�n�o�_�s�a�h����������e�n�o�������,	dfh�����
rux����������0�t�i�b��������,	����]�bit0�map�����
�������������1�t�i�b�������	�,	����]��bit1���������������������decl�[to_pos_nat���]�PInfo���prt��VMR��VMC����]doc��Turns an expression into a positive natural number, assuming it is only built up from
 `has_one.one`, `bit0` and `bit1`.decl�[to_nat���������Z��exprto_pos_nat�^var�d������	��^sort�da_aoa_a_1�	���	��^const�d�a_aoa_a_1oa_a_2�����	��^mvar�d��a_aoa_a_1oa_a_2a_a_3�����	��^local_const�d��a_a��a_a_1���	���Z���	��^app�d�	���������	��
�	��a_a_aoa_a_a_1�	���	��
�	��a_a_aoa_a_a_1oa_a_a_2�����	��
�	�a_a_aoa_a_a_1oa_a_a_2a_a_a_3�����	��
�
��a_a_a��a_a_a_1���	#���Z���	��
�
�������	��
�
a_a_a_aoa_a_a_a_1�	�G���
Strzero�
Strhas_zeroz���
B�����	4�Q���	��
�
��a_a_a_aoa_a_a_a_1oa_a_a_a_2�����	��
�
!�@a_a_a_aoa_a_a_a_1oa_a_a_a_2a_a_a_a_3�����	��
�
)��a_a_a_a��a_a_a_a_1�����	��
�
�
����a_a_a_aoa_a_a_a_1a_a_a_a_2��a_a_a_a_3�����	��
�
�^lam�d������a_a_a_aoa_a_a_a_1a_a_a_a_2��a_a_a_a_3�����	��
�
�^pi�d������a_a_a_aoa_a_a_a_1��a_a_a_a_2��a_a_a_a_3�����	��
�
�^elet�d������a_a_a_a�	�a_a_a_a_1�	����	��
�
�^macro�d����a_a_aoa_a_a_1a_a_a_2��a_a_a_3�����	��
va_a_aoa_a_a_1a_a_a_2��a_a_a_3�����	��
�a_a_aoa_a_a_1��a_a_a_2��a_a_a_3�����	��
�a_a_a�	�a_a_a_1�	����	��
�a_aoa_a_1a_a_2��a_a_3�����	��
ta_aoa_a_1a_a_2��a_a_3�����	��
�a_aoa_a_1��a_a_2��a_a_3�����	��
�a_a�	�a_a_1�	����	��
��PInfo���prt��VMR��VMC���������
&�]�f�o�xexprvar�]���]exprconst�]exprmvar�]exprlocal_const�]��
(1:DO[�.�:�F�R�exprapp�]�[���#�]�[��#�]�[��#�]�[�!�#�]�[��
]iu������� ��#�#�]�,���#�#�]�,�o�r�e�z�_�s�a�h�����������o�r�e�z��������,	����#�#�]��,��#�#�]�,�!�#�#�]�,�#�#�#�]�,exprlam�#�#�]�,exprpi�#�#�]�,exprelet�#�#�]�,exprmacro�#�#�]�[�%�#�]�[�'�#�]�[�)�#�]�[�+�#�]�%�]�'�]�)�]�+�]doc��Turns an expression into a natural number, assuming it is only built up from
 `has_one.one`, `bit0`, `bit1` and `has_zero.zero`.decl�[to_int���p�����������
���Z�
��	[���t�Z���w�Z���z�Z��inthas_coeexprto_nat�	�����
��
��
��	�a_aoa_a_1�	�
��
��
��	�a_aoa_a_1oa_a_2���
��
��
��	�a_aoa_a_1oa_a_2a_a_3���
��
��
��
a_a��a_a_1�����:���
���:�Z�
��
��
��
�:���
��
��
��
a_a_aoa_a_a_1�	�
��
��
��
a_a_aoa_a_a_1oa_a_a_2���
��
��
��
!a_a_aoa_a_a_1oa_a_a_2a_a_a_3���
��
��
��
)a_a_a��a_a_a_1�����E���
���E�Z�
��
��
��
2�E���
��
��
��
8a_a_a_aoa_a_a_a_1�	�
��
��
��
La_a_a_aoa_a_a_a_1oa_a_a_a_2���
��
��
��
Ta_a_a_aoa_a_a_a_1oa_a_a_a_2a_a_a_a_3���
��
��
��
\a_a_a_a��a_a_a_a_1�����P���
���P�Z�
��
��
��
�
2�@�P���
��
��
��
�
8�@a_a_a_a_aoa_a_a_a_a_1�	�G���
Strneg�
Strhas_negz���v�
��
� p��to_has_bindp�	W�Z���
���n�Z�	3������inthas_neg�
��
��
��
��
�
L��a_a_a_a_aoa_a_a_a_a_1oa_a_a_a_a_2���
��
��
��
�
T��a_a_a_a_aoa_a_a_a_a_1oa_a_a_a_a_2a_a_a_a_a_3���
��
��
��
�
\�a_a_a_a_a��a_a_a_a_a_1���
��
��
��
�
i��a_a_a_a_aoa_a_a_a_a_1a_a_a_a_a_2��a_a_a_a_a_3���
��
��
��
�
x�a_a_a_a_aoa_a_a_a_a_1a_a_a_a_a_2��a_a_a_a_a_3���
��
��
��
�
��a_a_a_a_aoa_a_a_a_a_1��a_a_a_a_a_2��a_a_a_a_a_3���
��
��
��
�
��a_a_a_a_a�	�a_a_a_a_a_1�	��
��
��
��
�
���a_a_a_aoa_a_a_a_1a_a_a_a_2��a_a_a_a_3���
��
��
��
xa_a_a_aoa_a_a_a_1a_a_a_a_2��a_a_a_a_3���
��
��
��
�a_a_a_aoa_a_a_a_1��a_a_a_a_2��a_a_a_a_3���
��
��
��
�a_a_a_a�	�a_a_a_a_1�	��
��
��
��
�a_a_aoa_a_a_1a_a_a_2��a_a_a_3���
��
��
��
va_a_aoa_a_a_1a_a_a_2��a_a_a_3���
��
��
��
�a_a_aoa_a_a_1��a_a_a_2��a_a_a_3���
��
��
��
�a_a_a�	�a_a_a_1�	��
��
��
��
�a_aoa_a_1a_a_2��a_a_3���
��
��
��
ta_aoa_a_1a_a_2��a_a_3���
��
��
��
�a_aoa_a_1��a_a_2��a_a_3���
��
��
��
�a_a�	�a_a_1�	��
��
��
��
�	�PInfo�,�prt�,VMR�,_lambda_1VMR�,VMC���a�Zintof_natVMC�,��������
!-:�|������������������������������������!��������
<IVds��=�M�]�m��#�������z���#�������z��#�������z��#�������z�!�#�������z��
�����������+��#�#�������;���#�#�������;��#�#�������;��#�#�������;�!�#�#�������;��
����\�q������������#�#�#�����������#�#�#���������g�e�n�_�s�a�h����������g�e�n�������,	�=�P��#�#�#�������Z��	�S�U�Z	��intneg��	��#�#�#��������
	�!�#�#�#���������#�#�#�#��������
	�%�#�#�#��������
	�'�#�#�#��������
	�)�#�#�#���������+�#�#�#�������;�%�#�#�������;�'�#�#�������;�)�#�#�������;�+�#�#�������z�%�#�������z�'�#�������z�)�#�������z�+�#�������%�������'�������)�������+������doc�,Turns an expression into a integer, assuming it is only built up from
 `has_one.one`, `bit0`, `bit1`, `has_zero.zero` and a optionally a single `has_neg.neg` as head.decl�[is_num_eq_main��������������������a_1�Z�Pa_1���Pa_aoa_a_1�	�Pa_aoa_a_1oa_a_2���Pa_aoa_a_1oa_a_2a_a_3���Pa_a��a_a_1�������������Z�P�����Pa_a_aoa_a_a_1�	�Pa_a_aoa_a_a_1oa_a_a_2���Pa_a_aoa_a_a_1oa_a_a_2a_a_a_3���Pa_a_a��a_a_a_1�������������Z�P�����Pa_a_a_aoa_a_a_a_1�	�
F��B����Z�P����Pa_aoa_a_2�	�Pa_aoa_a_2o�Oa_aoa_a_2oa_a_3a_a_4���Pa_a��a_a_2���Za_a_aoa_a_a_2�	�Pa_a_aoa_a_a_2o�ba_a_aoa_a_a_2oa_a_a_3a_a_a_4���Pa_a_a��a_a_a_2���ma_a_a_a_2oa_a_a_a_3�	�n���Pa_a_a_a_2oa_a_a_a_3oa_a_a_a_4���Pa_a_a_a_2oa_a_a_a_3oa_a_a_a_4a_a_a_a_5���Pa_a_a_a_2��a_a_a_a_3���Pa_a_a_a_2oa_a_a_a_3a_a_a_a_4������a_a_a_a_2oa_a_a_a_3����a_a_a_a_2�	�a_a_a_a_3�	��Pa_a_aoa_a_a_2a_a_a_3������a_a_aoa_a_a_2����a_a_a�	�a_a_a_2�	��Pa_aoa_a_2a_a_3���z��a_aoa_a_2����a_a�	�a_a_2�	��P�	1��~a_a��a_a_2����a_a_a��a_a_a_2���ma_a_a_a_2oa_a_a_a_3�	�����P�������������������������������Pa_a_a_aoa_a_a_a_1oa_a_a_a_2���Pa_a_a_aoa_a_a_a_1oa_a_a_a_2��a_a_a_a��a_a_a_a_1�������������Z�P�����Pa_a_a_a_aoa_a_a_a_a_1�	�	R��B��p�r�u�x�}a_a��a_a_2����a_a_a��a_a_a_2���ma_a_a_aoa_a_a_a_2�	�Pa_a_a_aoa_a_a_a_2o��a_a_a_aoa_a_a_a_2oa_a_a_a_3��a_a_a_a��a_a_a_a_2����a_a_a_a_a_2oa_a_a_a_a_3�	���
�@RecFn�����Pa_a_a_a_a_2oa_a_a_a_a_3oa_a_a_a_a_4���Pa_a_a_a_a_2oa_a_a_a_a_3oa_a_a_a_a_4a_a_a_a_a_5���Pa_a_a_a_a_2��a_a_a_a_a_3���Pa_a_a_a_a_2oa_a_a_a_a_3a_a_a_a_a_4���
�
a_a_a_a_a_2oa_a_a_a_a_3���
a_a_a_a_a_2�	�a_a_a_a_a_3�	��Pa_a_a_aoa_a_a_a_2a_a_a_a_3�����
*a_a_a_aoa_a_a_a_2���
(a_a_a_a�	�a_a_a_a_2�	��P�����������������z���a_a��a_a_2����a_a_a��a_a_a_2���
a_a_a_a��a_a_a_a_2����a_a_a_a_a_2oa_a_a_a_a_3�	�
B�
�P�
�
�
�
�
�
 �
#�
*�
*�
.�
1�����������������Pa_a_a_a_aoa_a_a_a_a_1oa_a_a_a_a_2���Pa_a_a_a_aoa_a_a_a_a_1oa_a_a_a_a_2�
a_a_a_a_a��a_a_a_a_a_1�����3�����3�Z�P�3���Pa_a_a_a_a_aoa_a_a_a_a_a_1�	�	}��B�~�p�r�u�x�}a_a��a_a_2����a_a_a��a_a_a_2���
a_a_a_a��a_a_a_a_2����a_a_a_a_aoa_a_a_a_a_2�	�Pa_a_a_a_aoa_a_a_a_a_2o�
a_a_a_a_aoa_a_a_a_a_2oa_a_a_a_a_3�
a_a_a_a_a��a_a_a_a_a_2���
xa_a_a_a_a_a_2oa_a_a_a_a_a_3�	�
y��
��Pa_a_a_a_a_a_2oa_a_a_a_a_a_3oa_a_a_a_a_a_4���Pa_a_a_a_a_a_2oa_a_a_a_a_a_3oa_a_a_a_a_a_4a_a_a_a_a_a_5���Pa_a_a_a_a_a_2��a_a_a_a_a_a_3���Pa_a_a_a_a_a_2oa_a_a_a_a_a_3a_a_a_a_a_a_4���
��
�a_a_a_a_a_a_2oa_a_a_a_a_a_3���
�a_a_a_a_a_a_2�	�a_a_a_a_a_a_3�	��Pa_a_a_a_aoa_a_a_a_a_2a_a_a_a_a_3���
�
�a_a_a_a_aoa_a_a_a_a_2���
�a_a_a_a_a�	�a_a_a_a_a_2�	��P�
*�
*�
.�
1�����������������G���
Strdiv�
Strhas_divz���
���
a_a��a_a_2����a_a_a��a_a_a_2���
a_a_a_a��a_a_a_a_2���
�a_a_a_a_a��a_a_a_a_a_2���
xa_a_a_a_a_a_2oa_a_a_a_a_a_3�	�
���
���P�
��
��
��
��
��
��
��
��
��
��
��
*�
*�
.�
1�����������������Pa_a_a_a_a_aoa_a_a_a_a_a_1oa_a_a_a_a_a_2���Pa_a_a_a_a_aoa_a_a_a_a_a_1oa_a_a_a_a_a_2�
�a_a_a_a_a_a��a_a_a_a_a_a_1���Pa_a_a_a_a_aoa_a_a_a_a_a_1�
��a_a_a_a_a_aoa_a_a_a_a_a_1���
�a_a_a_a_a_a�	�a_a_a_a_a_a_1�	��Pa_a_a_a_aoa_a_a_a_a_1�
�$a_a_a_a_aoa_a_a_a_a_1���
a_a_a_a_a�	�a_a_a_a_a_1�	��Pa_a_a_aoa_a_a_a_1���1a_a_a_aoa_a_a_a_1����a_a_a_a�	�a_a_a_a_1�	��Pa_a_aoa_a_a_1a_a_a_2���b�?a_a_aoa_a_a_1���=a_a_a�	�a_a_a_1�	��Pa_aoa_a_1a_a_2���O�Ma_aoa_a_1���Ka_a�	�a_a_1�	��P�PInfo���	VMR��VMC�����	��������
����������
"��������������������
$'*�������������������o�r�e�z�_�s�a�h�����������o�r�e�z��������,	n�B�e�n�o�_�s�a�h����������e�n�o�������,	���A��
�������6�9�<�?�A�A�A�A�A��
�������)�,�/�2�4�4�4�4�4
��
���������"�%�'�'�e�n�o�_�s�a�h����������e�n�o�������,	����'�'�'�'�'�'�'�4�4�4�4�A�A�A�A����
�D�G�J�M�P�S��������������������
�U�X�[�^�a�d������������������
��
�f�i�l�������������������o�r�e�z�_�s�a�h�����������o�r�e�z��������,	��������������������������������������������
�������������������������0�t�i�b��������,	�
��g�e�n�_�s�a�h����������g�e�n�������,	�G�I���
�K�N�Q�T�W�Z�������������
��
�\�_�b�e�h�k��������������������
�m�p�s�v�y�|��������������������
�~�����������������������g�e�n�_�s�a�h����������g�e�n�������,	����������������������������������������������
���	���������������������
��
����� �#��������������������
�%�(�+�.�1�4�s�v�y�|�~�~�~�~�~��
�6�9�<�]�`�c�f�i�l�o�q�q�0�t�i�b��������,	�V�X�[���q�q�q�q�q�q�q�~�~�~�~������������������������
�������������������������1�t�i�b�������
�,	�����v�i�d�_�s�a�h����������v�i�d������
�,	��������
����	����������������������
������ ��������������������
�"�%�(�+�.�1��������������������
�3�6�9�<�?�B��������������������
�D�G�J�������������������v�i�d�_�s�a�h����������v�i�d�������,	����������������������������������������������������������
�������������~������������������
�������������q�t�w�z�|�|�|�|�|��
����������d�g�j�m�o�o�o�o�o��
�	������W�Z�]�`�b�b�b�b�b��
��� �A�D�G�J�M�P�S�U�U�1�t�i�b��������,	�:�<�?
���U�U�U�U�U�U�U�b�b�b�b�o�o�o�o�|�|�|�|����������������������������������������������decl�[is_num_eq�@���PInfo���	VMR��VMC���	��doc��is_num_eq n1 n2 returns true if n1 and n2 are both numerals with the same numeral structure,
ignoring differences in type and type class arguments.declexprreplace_withe��s��s'������������������exprreplace�c��d�Z�G�N��p���	3��exprlift_vars��Q�����PInfo���	VMR��_lambda_1VMR��VMC������Z�����3_fresh
������3_fresh
�������	exprlift_varsVMC���	��������������exprreplacedoc��`replace_with e s s'` replaces ocurrences of `s` with `s'` in `e`.decl��apply_replacement_funfse������s�������\e��d�Z_a���������ba�Z�b�k�����{��oa_1�	�z�d�	������oa_1oa_2���{��oa_1oa_2a_3���{����a_1���{��oa_1a_2��������oa_1�������	�a_1�	��{��PInfo����prt��VMR��_rec_1VMR��_lambda_1VMR��VMC��&��n���3_fresh
���s��
 #�VMC������Z�����3_fresh
���s��VMC����������s����doc��Apply a function to each constant (inductive type, defined function etc) in an expression.decl��is_mvar�?����B�p�r�Ia_aoa_a_1oa_a_2�����Ra_a��a_a_1���P�M�M�Q�T�PInfo���	VMR��VMC�� �	�����
doc��Tests whether an expression is a meta-variable.decl��is_sort�?��������I�M�R���M�M�Q�T�PInfo���	VMR��VMC�� �	�����
doc��Tests whether an expression is a sort.decl��to_implicit_local_const�����������������Z���	�������	�a_aoa_a_1�	���	�a_aoa_a_1oa_a_2�����	�a_aoa_a_1oa_a_2a_a_3�����
Ba_a��a_a_1�����
ea_aoa_a_1a_a_2��a_a_3�����
ta_aoa_a_1a_a_2��a_a_3�����
�a_aoa_a_1��a_a_2��a_a_3�����
�a_a�	�a_a_1�	����
��PInfo���	VMR��VMC��E�	�����
!'/7?������!�#�%�'�)�+doc��If `e` is a local constant, `to_implicit_local_const e` changes the binder info of `e` to
`implicit`. See also `to_implicit_binder`, which also changes lambdas and pis.decl��to_implicit_binder�������a_aoa_a_1a_a_2��a_a_3�����
qB�a_aoa_a_1a_a_2��a_a_3�����
�B������PInfo���	VMR��VMC��E�	�����
!'/7?������!�#�%�'�)�+doc�� If `e` is a local constant, lamda, or pi expression, `to_implicit_binder e` changes the binder
info of `e` to `implicit`. See also `to_implicit_local_const`, which only changes local constants.decl��list_local_constse���	������	�exprfold�	����e'��_x�Zes�	��G�V�^is_local_constant��b��d�	�insert���	�listhas_insert�����	�PInfo��� 	VMR��_lambda_1VMR��VMC��
�!���	����Z����expris_local_constant�	����insertVMC��� 	������exprfolddoc��Returns a list of all local constants in an expression (without duplicates).decl��list_constante��name_set�����-��-mk_name_sete'��_x�Zes�-�G�V�^is_constant�d��b�6�d�-�insert�^const_name�d��PInfo���$	VMR��_lambda_1VMR��VMC��%��-��Z�����is_constant�	��const_namename_setinsertVMC���$	�����mk_name_set��doc��Returns a name_set of all constants in an expression.decl��list_meta_vars�
e����e'��_x�Zes�	��G�V�^is_mvar��b�L�d�	��$	�PInfo��(	VMR�_lambda_1VMR�VMC�
�)��	���Z������	����VMC��(	������doc�Returns a list of all meta-variables in an expression (without duplicates).decl��list_names_with_prefixpreo�.�oe���/�3e'��_x�Zl�-_a��������-���Z�/������_��oa_1�	�/�G������K�����-�=���oa_1oa_2���/����oa_1oa_2a_3���/�@����a_1���/��oa_1a_2���y����oa_1�������	�a_1�	��~��PInfo��,	VMR�_rec_1VMR�_lambda_1VMR�VMC�')�,	�����3_fresh
����-�3_fresh
���o��
 #&�A�,	
�VMC�(�-��-��Z����3_fresh
���o�'VMC��,	����o�(�
��doc�Returns a name_set of all constants in an expression starting with a certain prefix.decl��contains_constante��p�o�_inst_1decidable_predo��3���4���5�������Oe'��_x�Zb��G���A�A��d�PInfo�2�5	VMR�2_lambda_1VMR�2VMC�:
�6�9��8�Z�7���3_fresh
����
	VMC�2�5	�5�4���3���:��doc�2Returns true if `e` contains a name `n` where `p n` is true.
 Returns `true` if `p name.anonymous` is truedecl��simpt��cfgopt_paramtacticsimp_config�Cmksimpdefault_max_steps�O�d�d�O�d�d�d�d�d�d�O�d�O�d�ddischarger����unit?failed��no_defaults����Oattr_names����o�ohs����tacticsimp_arg_type����������?���@���G���J���K���L�����|���~����simp_lemmas�����Mmk_simp_set��_p��_a���������R�����J���K�����Bsimplify��M��
Streqz���PInfo�>�;	VMR�>VMC�>$�;	s���L���K���J���G���@���?���P	�q�e�����
	tacticsimplify	doc�>Simplifies the expression `t` with the specified options.
 The result is `(new_e, pr)` with the new expression `new_e` and a proof
 `pr : e = new_e`.decl��dsimpt��cfg��tacticdsimp_config�[mktactictransparencyreducible���d�O�d�d�d�d�d�d�O�dno_defaults��attr_names��hs�������X���Y��`���a���b���������_p��_a�����d����J���K���#�Odsimplify�����PInfo�W�D	VMR�WVMC�W�D	�T���b���a���`���Y��X���P		simp_lemmasdsimplifydoc�WDefinitionally simplifies the expression `t` with the specified options.
 The result is the simplified expression.decl��pi_arity_aux_main��Z����Z��Z���������Za_1�Z�0�a_1���Aa_aoa_a_1�	�0a_aoa_a_1oa_a_2���0��a_aoa_a_1oa_a_2a_a_3���0�@a_a��a_a_1���Fa_aoa_a_1a_a_2���Pa_aoa_a_1a_a_2��a_a_3���0
�=RecFn�i���@�ea_aoa_a_1���Xa_a�	�a_a_1�	��F�PInfo�i�L	VMR�iVMC�i$�L	�����Z��
!�]�idecl��pi_arity_aux�=�i�PInfo���L	VMR��VMC���L	�idoc��Auxilliary definition for `expr.pi_arity`decl��pi_arity�<�<��pi_arity_aux�Q�PInfo���R	VMR��VMC���R	�idoc��The arity of a pi-type. Does not perform any reduction of the expression.
 In one application this was ~30 times quicker than `tactic.get_pi_arity`.decl��binding_names_main�����������������Z��������ya_aoa_a_1�	�ya_aoa_a_1oa_a_2���ya_aoa_a_1oa_a_2a_a_3���ya_a��a_a_1���ya_aoa_a_1a_a_2��a_a_3���x�%o
�tRecFn����a_aoa_a_1��a_a_2����a_a�	�a_a_1�	��y�PInfo���V	VMR��VMC��&�V	�����
 #����decl��binding_names�t���PInfo���V	VMR��VMC���V	��doc��Get the names of the bound variables by a sequence of pis or lambdas.decl��reduce_let�������a_aoa_a_1oa_a_2a_a_3�����
������a_aoa_a_1��a_a_2��a_a_3�����^instantiate_var����PInfo���\	VMR��VMC��B�\	�����
!'/7<������!�#�%�'exprinstantiate_var�+doc��head-reduce a single let expressiondecl��reduce_lets_main�������a_aoa_a_1��a_a_2��a_a_3����
��RecFn�������PInfo���a	VMR��VMC��C�a	�����
!'/7=������!�#�%�'�����+decl��reduce_lets�����PInfo���a	VMR��VMC���a	��doc��head-reduce all let expressionsdecl��instantiate_lambdas_main��	�����	���������	������a_hd��a_tl�	����������������a_aoa_a_1a_a_2��a_a_3����
��RecFn�������@�������PInfo���f	VMR��VMC��I�f	�����	��r��
%+2:B�G��G�G�G�!G�#G����G�'G�)G�+decl��instantiate_lambdas�����PInfo���f	VMR��VMC���f	��doc��Instantiate lambdas in the second argument by expressions from the first.decl��instantiate_lambdas_or_apps_main����	����������Z����mk_app�	����������	��a_aoa_a_1�	�����	��a_aoa_a_1oa_a_2�������	��a_aoa_a_1oa_a_2a_a_3�������
�a_a��a_a_1�������
e�a_aoa_a_1a_a_2��a_a_3�������
t�a_aoa_a_1a_a_2��a_a_3�������
��a_aoa_a_1��a_a_2��a_a_3����
��RecFn�����a_a�	�a_a_1�	������
��a_hd��a_tl�	�����Z�����%������������*a_aoa_a_1�	�����(�a_aoa_a_1oa_a_2�������(��a_aoa_a_1oa_a_2a_a_3�������(�@��a_a��a_a_1������4a_aoa_a_1a_a_2��a_a_3���������a_aoa_a_1a_a_2��a_a_3������Ca_aoa_a_1��a_a_2��a_a_3������C��a_a�	�a_a_1�	����!�4�PInfo���n	VMR��VMC����n	�����	��rX��
#-5?IP���mk_app_main�����������!���#���%���'�������+����
Zclv������������������������!����#���������'���������+��decl��instantiate_lambdas_or_apps�����PInfo���n	VMR��VMC���n	��doc�� `instantiate_lambdas_or_apps es e` instantiates lambdas in `e` by expressions from `es`.
If the length of `es` is larger than the number of lambdas in `e`,
then the term is applied to the remaining terms.
Also reduces head let-expressions in `e`, including those after instantiating all lambdas.decllibrary_note_1979561018
Stropen expressions
StrSome declarations work with open expressions, i.e. an expr that has free variables.
Terms will free variables are not well-typed, and one should not use them in tactics like
`infer_type` or `unify`. You can still do syntactic analysis/manipulation on them.
The reason for working with open types is for performance: instantiating variables requires
iterating through the expression. In one performance test `pi_binders` was more than 6x
quicker than `mk_local_pis` (when applied to the type of all imported declarations 100x).�VMR��VMC���
�s�n�o�i�s�s�e�r�p�x�e� �n�e�p�o������������������.�)�x�0�0�1� �s�n�o�i�t�a�r�a�l�c�e�d� �d�e�t�r�o�p�m�i� �l�l�a� �f�o� �e�p�y�t� �e�h�t� �o�t� �d�e�i�l�p�p�a� �n�e�h�w�(� �`�s�i�p�_�l�a�c�o�l�_�k�m�`� �n�a�h�t� �r�e�k�c�i�u�q�
�x�6� �n�a�h�t� �e�r�o�m� �s�a�w� �`�s�r�e�d�n�i�b�_�i�p�`� �t�s�e�t� �e�c�n�a�m�r�o�f�r�e�p� �e�n�o� �n�I� �.�n�o�i�s�s�e�r�p�x�e� �e�h�t� �h�g�u�o�r�h�t� �g�n�i�t�a�r�e�t�i�
�s�e�r�i�u�q�e�r� �s�e�l�b�a�i�r�a�v� �g�n�i�t�a�i�t�n�a�t�s�n�i� �:�e�c�n�a�m�r�o�f�r�e�p� �r�o�f� �s�i� �s�e�p�y�t� �n�e�p�o� �h�t�i�w� �g�n�i�k�r�o�w� �r�o�f� �n�o�s�a�e�r� �e�h�T�
�.�m�e�h�t� �n�o� �n�o�i�t�a�l�u�p�i�n�a�m�/�s�i�s�y�l�a�n�a� �c�i�t�c�a�t�n�y�s� �o�d� �l�l�i�t�s� �n�a�c� �u�o�Y� �.�`�y�f�i�n�u�`� �r�o� �`�e�p�y�t�_�r�e�f�n�i�`�
�e�k�i�l� �s�c�i�t�c�a�t� �n�i� �m�e�h�t� �e�s�u� �t�o�n� �d�l�u�o�h�s� �e�n�o� �d�n�a� �,�d�e�p�y�t�-�l�l�e�w� �t�o�n� �e�r�a� �s�e�l�b�a�i�r�a�v� �e�e�r�f� �l�l�i�w� �s�m�r�e�T�
�.�s�e�l�b�a�i�r�a�v� �e�e�r�f� �s�a�h� �t�a�h�t� �r�p�x�e� �n�a� �.�e�.�i� �,�s�n�o�i�s�s�e�r�p�x�e� �n�e�p�o� �h�t�i�w� �k�r�o�w� �s�n�o�i�t�a�r�a�l�c�e�d� �e�m�o�S������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ATTRlibrary_note����unitstardecl��pi_codomain_main�������a_aoa_a_1a_a_2��a_a_3����
��RecFn�������PInfo���~	VMR��VMC��A�~	�����
!'/3;������!�#�%���)�+decl��pi_codomain�����PInfo���~	VMR��VMC���~	��doc��Get the codomain/target of a pi-type.
 This definition doesn't instantiate bound variables, and therefore produces a term that is open.
 See note [open expressions].decl��lambda_body_main�������a_aoa_a_1a_a_2��a_a_3����
��RecFn���������PInfo����	VMR��VMC��A��	�����
!'+3;������!�#���'�)�+decl��lambda_body�����PInfo���	VMR�VMC���	��doc�Get the body/value of a lambda-expression.
 This definition doesn't instantiate bound variables, and therefore produces a term that is open.
 See note [open expressions].decl��pi_binders_aux_main�������������������������a_1�Z��������	�a_1�������	�a_aoa_a_1�	�����	�a_aoa_a_1oa_a_2���������	�a_aoa_a_1oa_a_2a_a_3�������@�
a_a��a_a_1�������
ea_aoa_a_1a_a_2��a_a_3�������
ta_aoa_a_1a_a_2��a_a_3����
��RecFn��%�����@a_aoa_a_1��a_a_2��a_a_3�������
�a_a�	�a_a_1�	������
��PInfo���	VMR�VMC�Y��	��������
	!+3=GQ������!�#�%��)�+decl��pi_binders_aux����PInfo�"��	VMR�"VMC�"��	�doc�"Auxilliary defintion for `pi_binders`.
 See note [open expressions].decl��pi_binderse�����$��_a������pi_binders_aux����%�����������J���K������listreverse������PInfo�#��	VMR�#VMC�#��	�$�����reversedoc�#Get the binders and codomain of a pi-type.
 This definition doesn't instantiate bound variables, and therefore produces a term that is open.
 The.tactic `get_pi_binders` in `tactic.core` does the same, but also instantiates the
 free variables.
 See note [open expressions].decl��get_app_fn_args_aux_main��	�������	���	�����������a_1�Z�����	��	��a_1������	��a_aoa_a_1�	����	�a_aoa_a_1oa_a_2������	���a_aoa_a_1oa_a_2a_a_3������
�@a_a��a_a_1����
��RecFn�+�(�a_aoa_a_1a_a_2��a_a_3������
t�@a_aoa_a_1a_a_2��a_a_3������
��@a_aoa_a_1��a_a_2��a_a_3������
��@a_a�	�a_a_1�	�����
��PInfo�+��	VMR�+VMC�+X��	�����	���
	!+2<FP������!�+�%�'�)�+decl��get_app_fn_args_aux���+�PInfo�G��	VMR�GVMC�G��	�+doc�GAuxilliary defintion for `get_app_fn_args`.decl��get_app_fn_args������get_app_fn_args_aux��PInfo�H��	VMR�HVMC�H��	�+doc�HA combination of `get_app_fn` and `get_app_args`: lists both the
 function and its arguments of an applicationdecl��drop_pis_main��	�������	��������	����#return������a_hd��a_tl�	����������Z�#��������_a_aoa_a_1�	�_a_aoa_a_1oa_a_2���_a_aoa_a_1oa_a_2a_a_3���_a_a��a_a_1���_a_aoa_a_1a_a_2���ka_aoa_a_1a_a_2��a_a_3���#������Finfer_type�@t��������guard��tacticalternative��expralpha_eqv��d�b���d_x��
�PRecFn�K�������a_aoa_a_1���sa_a�	�a_a_1�	��_�PInfo�K��	VMR�KVMC�Ki��	�	�������	��r��
 &,2\b�Ig�Ig�Ig�Ig�Ig�Ig�Igtacticinfer_type	6U	expralpha_eqv�	<B
interaction_monadfailedE
	FN���KS
Z	
g�Ig�Idecl��drop_pis�P�K�PInfo�s��	VMR�sVMC�s��	�Kdoc�s`drop_pis es e` instantiates the pis in `e` with the expressions from `es`.decl��mk_op_lst_mainop��empty����	����v���w����	������a_hd��a_tl�	����y�	�����a_tl_hd��a_tl_tl�	���coe_fn��exprhas_coe_to_fun�d����
��RecFn�u���@�(��PInfo�u��	VMR�uVMC�u��	��	��w���v���r�r�u�#�#decl��mk_op_lst���v���w���u��PInfo���	VMR�VMC���	�w���v���udoc�`mk_op_lst op empty [x1, x2, ...]` is defined as `op x1 (op x2 ...)`.
 Returns `empty` if the list is empty.decl��mk_and_lst������mk_op_lst�t�a�b�������w�����z���������
Quote���t���true���w�����z���������
Quote���PInfo����	VMR��VMC����	�����udoc��`mk_and_lst [x1, x2, ...]` is defined as `x1 ∧ (x2 ∧ ...)`, or `true` if the list is empty.decl��mk_or_lst�������t���R���w�����z�������R
Quote�R�t���
���w����z������

Quote�
�PInfo����	VMR��VMC����	�
�R�udoc��`mk_or_lst [x1, x2, ...]` is defined as `x1 ∨ (x2 ∨ ...)`, or `false` if the list is empty.decl��local_binding_info�������������Z����a_aoa_a_1�	�a_aoa_a_1oa_a_2���a_aoa_a_1oa_a_2a_a_3����a_a��a_a_1���a_aoa_a_1a_a_2��a_a_3����1a_aoa_a_1���/a_a�	�a_a_1�	���PInfo����	VMR��VMC�� ��	�����
doc�� `local_binding_info e` returns the binding info of `e` if `e` is a local constant.
Otherwise returns `binder_info.default`.decl��is_default_local�?������Ma_aoa_a_1oa_a_2a_a_3���������P�P�P�P���M�M�Q�T�PInfo����	VMR��VMC��*��	�����
!$'
doc�� `is_default_local e` tests whether `e` is a local constant with binder info
`binder_info.default`decl��has_local_constante��l������������exprhas_local_in��=�2��local_uniq_name�PInfo����	VMR��VMC����	����������local_uniq_name�
�exprhas_local_indoc��`has_local_constant e l` checks whether local constant `l` occurs in expression `e`decl��to_binder�����������������Z������������ca_aoa_a_1�	�ca_aoa_a_1oa_a_2���ca_aoa_a_1oa_a_2a_a_3���_��a_a��a_a_1���ca_aoa_a_1a_a_2��a_a_3���c�{a_aoa_a_1���ya_a�	�a_a_1�	��c�PInfo����	VMR��VMC��P��	�����

"(08@H���������������������������������������������doc��Turns a local constant into a binderdeclenvironmentin_current_file'envenvironment�����no�band��in_current_file����has_memmemo����has_memo���
Strquotz���
Strmk�����
Strlift�����
Strind������decidable����decidable_memo�����PInfo����	VMR��VMC�����	��o����environmentin_current_file	�t�o�u�q��������t�o�u�q�������k�m������t�o�u�q�������t�f�i�l��������t�o�u�q�������d�n�i�������,��decidable_mem_main	�����	��doc��Tests whether a name is declared in the current file. Fixes an error in `in_current_file`
 which returns `tt` for the four names `quot, quot.mk, quot.lift, quot.ind`decl��is_structure��env��no�optionis_some��environmentstructure_fields��PInfo����	VMR��VMC����	��o����environmentstructure_fields�is_some_maindoc��Tests whether `n` is a structure.decl��structure_fields_fullenv��nop��������o����map����listmapoon'o��onamehas_append����PInfo����	VMR��VMC����	��o������nameappend��map_main��doc��Get the full names of all projections of the structure `n`. Returns `none` if `n` is not a
 structure.decl��is_ginductive'e��nmo�������o�����Venvironmentis_ginductive����V��is_inductive�anddecidable�����b���dnedecidable��������b����d�PInfo����	VMR��VMC����	��o����environmentis_ginductive�	environmentis_inductive�			��doc��Tests whether `nm` is a generalized inductive type that is not a normal inductive type.
 Note that `is_ginductive` returns `tt` even on regular inductive types.
 This returns `tt` if `nm` is (part of a) mutually defined inductive type or a nested inductive
 type.decl��decl_filter_mapα�e��f�declarationp�����������������environmentfold�����d��l��_ap��optioncases_on�@��p�@�������@�val�@�
�%����.�PInfo����	VMR��_lambda_1VMR��VMC�����������3_fresh
��v	VMC����	�����������environmentfolddoc��For all declarations `d` where `f d = some x` this adds `x` to the returned list.decl��decl_mapα�e��f�������������"��environmentdecl_filter_map��d���	3��PInfo���	VMR�_lambda_1VMR�VMC�������3_fresh
���VMC���	���������doc�Maps `f` to all declarations in the environment.decl��get_declse����������2environmentdecl_map�������PInfo���	VMR�_lambda_1VMR�VMC���
a��VMC���	�����doc�Lists all declarations in the environmentdecl��get_trusted_decls�3e���4�&��d���G�V��is_trusted�b�?�dp���	3�������PInfo���	VMR�_lambda_1VMR�VMC�
�����declarationis_trusted�	VMC���	������doc�Lists all trusted (non-meta) declarations in the environmentdecl��get_decl_namese��������x�5odeclarationto_name�PInfo���	VMR�VMC���	����to_name�doc�Lists the name of all declarations in the environmentdecl��mfoldα�m���_inst_1monade��xfn�����@�@�����@�#��$�W�%�Y�'���(�)�\�]��]��T���@�d��t�Z�|���~���@�����.�PInfo�"��	VMR�"_lambda_1VMR�"VMC�,
��+�*���3_fresh
����3_fresh
����3_fresh
����W
VMC�"��	�)�(�'���%�$�W�#��,

�doc�"Fold a monad over all declarations in the environment.decl��mfiltere��test���������2�7���8���environmentmfold�2��������d��ds�2����2�.b��V�2�G�V�b�d�2�%������PInfo�6�	VMR�6_lambda_1VMR�6_lambda_2VMR�6VMC�>�	αVMC�?�
�T���<�2�;���3_fresh
��\�	�	
VMC�6
�	�8��7���?��>�"doc�6Filters all declarations in the environment.decl��is_prefix_of_filee��s��E���Fno�stringis_prefix_of�}environmentdecl_olean����PInfo�D�		VMR�DVMC�D	�		�Go�F�E���environmentdecl_olean�stringis_prefix_ofdoc�DChecks whether `s` is a prefix of the file where `n` is declared.
 This is used to check whether `n` is declared in mathlib, where `s` is the mathlib directory.declexpris_eta_expansion_ofargs�	�univs�	l��������R�	��S�	�T���listall��_x��_a�������X����Jo�K�����F���	��@�������PInfo�Q�	VMR�Q_lambda_1VMR�QVMC�Y� 	�W���3_fresh
��B�	�3_fresh
��A�	��������VMC�Q�	�T���S�	�R�	��Y��alldoc�Q`is_eta_expansion_of args univs l` checks whether for all elements `(nm, pr)` in `l` we have
 `pr = nm.{univs} args`.
 Used in `is_eta_expansion`, where `l` consists of the projections and the fields of the value we
 want to eta-reduce.decl�Pis_eta_expansion_test����b����������b�{a_hd��a_tl�����b���b�a_hd_fstoa_hd_snd���wexprget_app_fn�d_a�����oa_1�	�z�G���������b	args�	��fget_app_args	e��listilast�����G�V�Pis_eta_expansion_of�����b���d�b�d�k�k�����������������PInfo�a�&	VMR�a_rec_1VMR�aVMC�p:�&	�����3_fresh
��i���3_fresh
��ho�3_fresh
��g����
%(+.147�,	#��get_app_args�j�	�����ilast_main�l���Q�	 "VMC�a�&	����r��get_app_fn_main�pdoc�a`is_eta_expansion_test l` checks whether there is a list of expresions `args` such that for all
 elements `(nm, pr)` in `l` we have `pr = nm args`. If so, returns the last element of `args`.
 Used in `is_eta_expansion`, where `l` consists of the projections and the fields of the value we
 want to eta-reduce.decl�Pis_eta_expansion_auxval��l�����b��������������blistmfilter������_x��_a���������~�Jo�K���~����bnotFis_proofl'��_a�b������b���V�b�kval_1�����p���b������_x���tactictry_core��Funify��Ftransparencysemireducible�O�Pis_eta_expansion_test�PInfo��9	VMR�_lambda_1VMR�_lambda_2VMR�_lambda_3VMR�VMC���9	�@VMC���:�	��������		
VMC���<�����3_fresh
��J��VMC�2�9	�T���������������listmfilter_main	
,�a	
*tacticunify��	$����)doc�`is_eta_expansion_aux val l` checks whether `val` can be eta-reduced to an expression `e`.
 Here `l` is intended to consists of the projections and the fields of `val`.
 This tactic calls `is_eta_expansion_test l`, but first removes all proofs from the list `l` and
 afterward checks whether the retulting expression `e` unifies with `val`.
 This last check is necessary, because `val` and `e` might have different types.decl�Pis_eta_expansionval�������������bFget_enve���w�b�y�type�������b�t�������w���b�z���b��opt_to_tac��environmentstructure_fields_full��@��projs��	args�	��mdrop���mlength��������Pis_eta_expansion_aux��listzipo����PInfo���J	VMR��VMC��?�J	�T��������	9�n	2�~�
����returnopt	+�z�z��length_main��drop_main	���	�	��zip�07doc��`is_eta_expansion val` checks whether there is an expression `e` such that `val` is the
 eta-expansion of `e`.
 With eta-expansion we here mean the eta-expansion of a structure, not of a function.
 For example, the eta-expansion of `x : α × β` is `⟨x.1, x.2⟩`.
 This assumes that `val` is a fully-applied application of the constructor of a structure.

 This is useful to reduce expressions generated by the notation
   `{ field_1 := _, ..other_structure }`
 If `other_structure` is itself a field of the structure, then the elaborator will insert an
 eta-expanded version of `other_structure`.decldeclarationupdate_with_funfstgtodecl������s��o������	decl��declarationupdate_name�	decl��declarationupdate_typeexprapply_replacement_fun��type��update_value������value�PInfo���Xprt��VMR��VMC���X������o��s�update_name�����type���update_type�����value���update_valuedecl��in_current_filed���~������X��Ze���V���in_current_file'�S��PInfo���a	VMR��VMC���a	�T��������	�!��doc��Checks whether the declaration is declared in the current file.
 This is a simple wrapper around `environment.in_current_file'`
 Use `environment.in_current_file'` instead if performance matters.decl��is_theorem���������cases_on����a_aoa_a_1��a_a_2��a_a_3��a_a_4reducibility_hintsa_a_5��Pa_aoa_a_1��a_a_2��a_a_3task����a_aoa_a_1��a_a_2��a_a_3��Pa_aoa_a_1���K�PInfo���e	VMR��VMC���e	���declarationcases_ondoc��Checks whether a declaration is a theoremdecl��is_constant�������a_aoa_a_1��a_a_2��a_a_3���Pa_aoa_a_1��a_a_2��a_a_3������PInfo���j	VMR��VMC���j	�����doc��Checks whether a declaration is a constantdecl��is_axiom���������a_aoa_a_1�����PInfo���o	VMR��VMC���o	�����doc��Checks whether a declaration is a axiomdecl��is_auto_generatede��d��������������R�Venvironmentis_constructor��S�R�V����projection_info��is_projection����R���V������������namelast���&
Strinj�&
Strinj_eq�&
Strsizeof_spec�&
Strinj_arrow� �R���V�������&
Strbelow�&
Strbinduction_on�&
Strbrec_on�&
Strcases_on�&
Strdcases_on�&
Strdrec_on�&
Strdrec�&
Strrec�&
Strrec_on�&
Strno_confusion�&
Strno_confusion_type�&
Strsizeof�&
Stribelow�&
Strhas_sizeof_inst� �V�nmo��is_ginductive'����_���F�b���d�_���E�b���d�_��D�����
�b���d�����������	�_�;�C����:�b�
�d�`�9�b�B�d�PInfo���w	VMR��VMC���a�w	���������!environmentis_constructor�	�]�!environmentis_projection���	�W�!�A���	�j�n�i�����q�e�_�j�n�i��������c�e�p�s�_�f�o�e�z�i�s�������������w�o�r�r�a�_�j�n�i������������!������	���	��Q�!�A���	���>w�o�l�e�b�������n�o�_�n�o�i�t�c�u�d�n�i�b���������������n�o�_�c�e�r�b���������n�o�_�s�e�s�a�c����������n�o�_�s�e�s�a�c�d�����������n�o�_�c�e�r�d���������c�e�r�d������c�e�r�����n�o�_�c�e�r��������n�o�i�s�u�f�n�o�c�_�o�n��������������e�p�y�t�_�n�o�i�s�u�f�n�o�c�_�o�n�������������������f�o�e�z�i�s��������w�o�l�e�b�i��������t�s�n�i�_�f�o�e�z�i�s�_�s�a�h������������������!������	�;�=�>	�?�K�!�����	�G�I�J�L	�M�O�P�R	�S�U�V�X	�Y�[�\�^��doc��Checks whether a declaration is automatically generated in the environment.
 There is no cheap way to check whether a declaration in the namespace of a generalized
 inductive type is automatically generated, so for now we say that all of them are automatically
 generated.decl��univ_levelsd���	�����	����levelparamdeclarationuniv_params�PInfo����	VMR��_lambda_1VMR��VMC�	��	aolevelparamVMC����	�����univ_params�	��doc��Returns the list of universe levels of a declaration.EndFile