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��finittacticcore��3export_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_assocTK#lint�NOTA#lint#lint��TK#lint_mathlib�NOTA#lint_mathlib#lint_mathlib��TK#lint_all�NOTA#lint_all#lint_all��TK#list_linters�NOTA#list_linters#list_linters��declnolint_attruser_attributeunitid_rhsuser_attributemkcoestringnamecoe_to_lift
coe_base
string_to_name
Strnolint
StrDo not report this declaration in any of the tests of `#lint`optionnonedecl
prionatpersistentbooltacticdecl
#user_attribute_cache_cfgmk_xlist
has_purepure!applicativeto_has_pure!alternativeto_applicative!tacticalternativeunitstarlistnil
apunitreflect/leanparser1G3Gleanparseralternative:
�PInfo�D	VMR�_lambda_1VMR�_lambda_2VMR�VMC�D	stactic_state�.VMC�D	�leanparser_stateVMC��\D	nameanonymoustcharof_natn�i�l�o�n�stringemptystringstr�����namemk_string`�t�n�i�l�#�`� �f�o� �s�t�s�e�t� �e�h�t� �f�o� �y�n�a� �n�i� �n�o�i�t�a�r�a�l�c�e�d� �s�i�h�t� �t�r�o�p�e�r� �t�o�n� �o�D������������������������������������������������������������������doc�Defines the user attribute `nolint` for skipping `#lint`ATTRuser_attribute���USR_ATTR�ATTRnolint��imp_intro:ATTR���classicaldec:ATTR���classicaldec_pred:ATTR���classicaldec_rel:ATTR���classicaldec_eq:ATTR���pempty:PInfolinterWindlCn��e_1testadeclaration!optionno_errors_founderrors_foundis_fast �mkC�UaC���\��� U�W�j�\��� ]_acC�nspace�prt�recgind��decl�testcU\�U
CProj���\�rec�U\�\��� _C�PInfo�WATTRreducibility���proj��decl�no_errors_found�U�U
CProj����U�\��� aC�PInfo�WATTR����proj��decl�errors_found��U
CProj�����\��� cC�PInfo�WATTR����proj��decl�is_fast�U �U
CProj��� �U �\��� CC�PInfo�WATTR����proj��decl�is_fast_default id 
�PInfo�WATTR����decl�rec_on��W�U��\��� eac�W�U���rec�aCc�PInfo�WATTR����auxrec�prt�auxrec�rec_ondecl�cases_on����PInfo�WATTR����auxrec�doc�A linting test for the `#lint` command.

`test` defines a test to perform on every declaration. It should never fail. Returning `none`
signifies a passing test. Returning `some msg` reports a failing test with error `msg`.

`no_errors_found` is the message printed when all tests are negative, and `errors_found` is printed
when at least one test is positive.

If `is_fast` is false, this test will be omitted from `#lint-`.decl�no_confusion_type�PVv1Uv2UV�V�U�U���UVc�\��� �]�\��� �test_eqeq\_no_errors_found_eq��_errors_found_eq�is_fast_eq� �_�PInfo�WATTR����prt�decl�no_confusion��V�U�Uh12�UcC��_ac�V�U�U��eqrecUaaUh1a�_C��]ch11�aa��U�CC_�\��� ���__��__����__Ceqrefl\]�
_�a�
 ccCC�PInfo�WATTR����no_conf�prt�decl�inj�\��� �\��� ��^��]eand�]�/��/��)a��c�\��� �\��� ��.�no_confusion�<^�0��)�^]_acC��2���0]��T���0]andintro���0�/����/�
�)�	�_�W�\�ea�W�`�dcC�PInfo�Wdecl�inj_arrowl�\��� �\��� ��.PV����b����b������d]c�\��� �\��� ��.�V���Candelim_left��^�)�/���/�T��inj�^�b�0��)�]_a������andelim_right���������T������������T����PInfo�Wdecl�inj_eq�\��� �\��� ��.�/��7�/��c�]C�\��� test_1\no_errors_found_1errors_found_1is_fast_1 propext�.��iffintro�.��h�.���0��)�]_acCa��anddcases_on�2�;��<�^�b�0��)^�]_aCa_left�2a_right���4��)a����������^��^�b�0�,Ca_right_left��a_right_right���V���`�d��e�^
���^��Ca_right_right_left�`a_right_right_right��^�)�\�\e_1�cC��e_2�cC��e_3�� � e_4�cCcongr U��0�^�^�]ac�p�"�&�]�+q��%�0�congr_arg\r��^^�b�)_C��^��
�b_��0c��C�PInfo�	Wdeclget_lintersl.!-U�".�plistmmap!interaction_monadmonadS
Un
has_orelseorelse!alternativeto_has_orelse!5U !monadto_has_bind!�vexpr�UFmk_constCFeval_exprU
QuoteU?failUformatformathas_to_formathas_appendappend��formathas_append��to_fmtstringhas_to_format
Strinvalid linter: ��
namehas_to_formatC��
StrC�PInfo�!_	VMR�!_lambda_1VMR�!_lambda_2VMR�!_lambda_3VMR�!VMC�>_	αVMC�?_	sS_fresh
�؝
�/	Utacticeval_exprVMC�@l`�'
i�_c_1n�_c_2l�_c_3 �_c_4�stringhas_to_formatto_fmt�=�O:�r�e�t�d�a�v�������������������N�Oformatcompose�Q�4�1�?interaction_monad_orelseVMC�!	_	�".�@�&�>listmmap_maindoc�! Takes a list of names that resolve to declarations of type `linter`,
and produces a list of linters.decllinter_attr	
Strlinter
StrUse this declaration as a linting test in #lint%nm
_x_x ��������aFinfer_types��Funify
reflectedoU����������exprhas_coe
oU
QuoteUCFtransparencysemireducibleboolff)@EP
�PInfo�Vh	VMR�V_lambda_1VMR�V_lambda_2VMR�V_lambda_3VMR�VVMC�dk�BS�Y �X�W
�/		tacticinfer_type	UtacticunifyVMC�eh	�S�.VMC�fh	�TVMC�V�h	�r�e�t�n�i�l���������t�n�i�l�#� �n�i� �t�s�e�t� �g�n�i�t�n�i�l� �a� �s�a� �n�o�i�t�a�r�a�l�c�e�d� �s�i�h�t� �e�s�U��������������������������������������������������d�e��fdoc�V Defines the user attribute `linter` for adding a linter to the default set.
Linters should be defined in the `linter` namespace.
A linter `linter.my_new_linter` is referred to as `my_new_linter` (without the `linter` namespace)
when used in `#lint`.ATTR����VUSR_ATTR�Vdeclfold_over_with_condαol-Xtac�X!Ya!-prodXa�lo�m���n����listmmap_filter!�vX��dXfunctormap!applicativeto_functor!�,to_applicative!�vY_Y��_optionmap_�x_prodmkX]cCcCc�PInfo�kr	VMR�k_lambda_1VMR�k_lambda_2VMR�k_lambda_3VMR�kVMC�}r	�AVMC�~t!�z�C_fresh
���XVMC�tsS�rX�C_fresh
���	�~optionmapVMC�k
r	�n�m���lo��&�}listmmap_filter_maindoc�kFind all declarations in `l` where tac returns `some x` and list them.declfold_over_with_cond_sortedαol��tac��!-������o�����������environment�Fget_enve�#��-�-��(fold_over_with_cond_acds�(	ds₂nativerb_lmap��]��rb_lmapof_list�4stringhas_ltab��has_decidable_ltcC�pmap�4��4x�4�
���optionigetstringinhabited��decl_oleanadeclarationto_name�ofstX�CCCreturn!�v-�-�F3rb_mapto_list�_C�PInfo��w	VMR��_lambda_1VMR��_lambda_2VMR��VMC��{&���C_fresh���#
declarationto_nameenvironmentdecl_olean��optioniget_mainVMC��w	�S�C_fresh�
3rb_mapto_listVMC��*w	�BS��������o��	$�k	
��listmap_mainstringhas_decidable_lt����of_list_main	��	��"doc��Find all declarations in `l` where tac returns `some x` and sort the resulting list by file name.declprint_declsu_1�_inst_1has_to_formatCdslist�oXc�����q���s���x����foldl���vaf��x�v_������������c������string_to_format
Str
��
Str#print ���N�ofstX]C��
Str /- to_fmt]_�osndX]C��
Str -/formatnilC�PInfo�Ā	VMR��_lambda_1VMR��VMC��h��������C_fresh��; �_c_1��_c_2/�_c_3-�_c_4��formatof_string
�O�����
���=�Ot�n�i�r�p�#����������N�O
������Q�Q�Q�Q�Q�QVMC���	������formatnil����foldl_maindoc��Make the output of `fold_over_with_cond` printable, in the following form:
     `#print <name> <open multiline comment> <elt of α> <close multiline comment>`declprint_decls_sortedu_1α�q_inst_1�sds�t�u�x�����q���s�����|�~���t�f��x���t������������
Str

��
Str-- �����t�v]Cprint_decls��]_����C��C�PInfo��	VMR��_lambda_1VMR��VMC��2��������C_fresh
���
�_c_1-�_c_2
��
�N�O ������N�O������Q�Q�Q�QVMC���	������������doc��Make the output of `fold_over_with_cond_sorted` printable, with the file path + name inserted.declprint_decls_sorted_mathlibu_1α�q_inst_1�snds�t�������q���s�������|�~��f��x����������stringpopn���t�v�C_���]����C��C�PInfo���	VMR��_lambda_1VMR��VMC��4��������C_fresh� �C_fresh�
�_c_1-�_c_2
��
stringpopn�N�O ������N�O������Q�Q�Q�QVMC��	�	��������������doc��Same as `print_decls_sorted`, but removing the first `n` characters from the string.
 Useful for omitting the mathlib directory from the output.declprint_argumentsu_1α�q_inst_1has_to_tactic_format�Cl�t�uc!��q���
����-��listmmap!�v�a��_x�_a�_prodcases_on]��]!��Cfstsnd�������s����������
Strargument ��nathas_to_formathas_addaddnathas_addahas_oneonenathas_one��
Str: Ctacticpp�)�CCCfs��^listto_string_aux��formathas_to_string�C	�PInfo��	VMR�_lambda_1VMR�_lambda_2VMR�VMC�%�	�AVMC�&Z�aS�
�C_fresh�"�	S �:������natadd��O �t�n�e�m�u�g�r�a������������N�O�Q�Q�QXVMC��	�BS�
���&�&�%�U	�$listto_string_aux_maindoc�Pretty prints a list of arguments of a declaration. Assumes `l` is a list of argument positions
 and binders (or any other element that can be pretty printed).
 `l` can be obtained e.g. by applying `list.indexes_values` to a list obtained by
 `get_pi_binders`.declcheck_unused_arguments_aux_main�-������X��X������Xitegtnathas_ltac�4decidable_ltca�X_�^�/notcoe_sort coe_sort_boolexpris_lambdaC�l�p�:is_piCanddecidable�t�ynedecidable �� �� booldecidable_eqcC�r����w��X_	b��exprbinding_bodyC	l'�X�^�pexprhas_var_idxChas_zerozeronathas_zero������X]listcons_]
�\RecFn�1C�*]�/_c�PInfo�1�	VMR�1VMC�1@�	�������Xnatdecidable_lt	>�;�B_main			
	#�<�Q			 "#	$<�:binding_body�C��exprhas_var_idx�Q	-12�F�X�,�1decl�0�\�1	�PInfo�0�	VMR�0VMC�0�	�1doc�0Auxilliary definition for `check_unused_arguments`declcheck_unused_argumentsdXY�X�VX��	l�Xcheck_unused_arguments_aux>�/exprpi_aritydeclarationtypeC�[valueC�^��XC����decidable_eq�����4decidable_eqcCC�����X	l2�X������c��
�X���X��coe_option�Xlistreverselistfilternhas_memmem�X��has_memCca��decidable_mem��Ccc
�PInfo�U�	VMR�U_lambda_1VMR�UVMC�l�	�j�C_fresh
�1S�Xnatdecidable_eq��decidable_mem_mainVMC�U,�	�VX��type_c_2��valueexprpi_arity�1�W�X�q�^	)_c_1�x�1�`�X�l��filter_main��reverse*doc�UCheck which arguments of a declaration are not used.
 Prints a list of natural numbers corresponding to which arguments are not used (e.g.
   this outputs [1, 4] if the first and fourth arguments are unused).
 Checks both the type and the value of `d` for whether the argument is used
 (in rare cases an argument is used in the type but not in the value).
 We return [] if the declaration was automatically generated.
 We print arguments that are larger than the arity of the type of the declaration
 (without unfolding definitions).declunused_argumentsdX[�~X[	ns��check_unused_argumentsC�^�l�poptionis_some�XC����[�^Z	ns�X�H�X�binhabitedC����-binder��Ztacticget_pi_binders��a_p�_a��������[C������	ns-����A�(n�
�C�H�binderinhabitedlistnth�ahas_subsub�4has_subC�/]	ns�)���(x�(�?��exprget_app_fn���type�snd�C�Gconst�namemk_string
Strparse�P
Strinteractivenameanonymous>level�j�(�����������exprhas_decidable_eqcC�L�[C�^��)C>�(���(���(���(proddecidable_eq�����������decidable_eqcCcCC�m[��
Z�w�����binderhas_to_tactic_format_ds'����w�(��_x�(_a�(�!����(�C����� s���������#�&a�5C�^ge�4has_le��countp�b'�����Fa�FC�j��`�����bbit0�)�/�f�/������
Str (duplicate)������CCcns�����PC�PInfo�}�	VMR�}_lambda_1VMR�}_lambda_2VMR�}_lambda_3VMR�}_lambda_4VMR�}_lambda_5VMR�}_lambda_6VMR�}_lambda_7VMR�}_lambda_8VMR�}VMC������C_fresh
�O��natsub��nth_main��inhabited��VMC��g�	�j�(�e�v�i�t�c�a�r�e�t�n�i��������������e�s�r�a�p��������exprconst

�:get_app_fn_mainexprhas_decidable_eq	_a	ceVMC���	�AVMC���	�j��C_fresh
�O��

��VMC�����'S���(������	�����countp_main�P	���R)�e�t�a�c�i�l�p�u�d�(� ���������������� �:��������O �t�n�e�m�u�g�r�a������������N�O�Q�Q�Q�Q�VMC��@�	�'S�C_fresh
�O��)�����decidable_eq�q��_main�^	<����&���U	6���&���U	%/�$�/4VMC��"�	�BS�C_fresh
�O��X�C_fresh
�O�X�t��	�������)���{	���)	��VMC���	�'S�C_fresh
�O�����X��is_some_main�Q	
	

	�������X��VMC�}�	�~X�U�����doc�}Check for unused arguments, and print them with their position, variable name, type and whether
 the argument is a duplicate.
 See also `check_unused_arguments`.
 This tactic additionally filters out all unused arguments of type `parse _`decllinterunused_argumentsUU^unused_arguments
StrNo unused arguments
StrUNUSED ARGUMENTS��PInfo���"VMR��VMC����"�}s�t�n�e�m�u�g�r�a� �d�e�s�u�n�u� �o�N���������������������S�T�N�E�M�U�G�R�A� �D�E�S�U�N�U������������������doc��A linter object for checking for unused arguments. This is in the default linter set.ATTRlinter����:declincorrect_def_lemma�dX��^or�pdeclarationis_constantC�p��is_axiomCordecidable��������������[��� Z��is_instance�NCis_instance_d �^�pC��C�[���Z����_p��_a���Gcases_on�����[Ca�
match_failedZ!interaction_monadmonad_failSAnnotdo_failure_eq���Y���^iff�p��is_theorem]��YClevelzeroiffdecidable�&�+���%�levelhas_decidable_eqC�*Z��^�p��is_definition]���<�ZZZ��
Stris a def, should be a lemma/theorem�G
Stris a lemma/theorem, should be a def��
a_1-�Y� ��
a_1
a_2��� ��
a_1
a_2binder_infoa_3��� ����a_1��� ��
a_1�[a_2���\�f��
a_1���d��macro_defa_1-��� C�PInfo���	VMR��_lambda_1VMR��_rec_1VMR��VMC��	�AVMC����	�'Sn���C_fresh
�d�Xexprcases_on
�������������������match_faileddeclarationis_theorem�Q	levelzerolevelhas_decidable_eq	��		 ����is_definition�Q	%�f�e�d� �a� �e�b� �d�l�u�o�h�s� �,�m�e�r�o�e�h�t�/�a�m�m�e�l� �a� �s�i���������������������������������������m�e�r�o�e�h�t�/�a�m�m�e�l� �a� �e�b� �d�l�u�o�h�s� �,�f�e�d� �a� �s�i�����������������������������������������������������������������������VMC��;�	�'S��X�is_constant�Q	�is_axiom�Q	

	7����	1�Q	,�t�h	 &�+/doc��Checks whether the correct declaration constructor (definition or theorem) by comparing it
 to its sort. Instances will not be printed.decllinterdef_lemmaU��^incorrect_def_lemma
StrAll declarations correctly marked as def/lemma
StrINCORRECT DEF/LEMMA�	�PInfo��"VMR�VMC��K�"��a�m�m�e�l�/�f�e�d� �s�a� �d�e�k�r�a�m� �y�l�t�c�e�r�r�o�c� �s�n�o�i�t�a�r�a�l�c�e�d� �l�l�A������������������������������������������������A�M�M�E�L�/�F�E�D� �T�C�E�R�R�O�C�N�I���������������������doc� A linter for checking whether the correct declaration constructor (definition or theorem)
has been used.ATTR�����:decldup_namespace�dX��	is_inst �	nm.namecomponents�Nc�^��listchain'
�B
C�pc��������decidable_chain'
����
��
�
��
��
namehas_decidable_eqcCcCC���Z�	snameto_string�H
nameinhabited�"find
n
���"count
��Cc���j
����C����stringhas_append��
StrThe namespace `C
Str` is duplicated in the name�PInfo��	VMR�_lambda_1VMR�_lambda_2VMR�_lambda_3VMR�VMC�1�	baVMC�2�	��
��
namehas_decidable_eq		
VMC�3	�	�j
�C_fresh�}�.�7��count�PVMC��
�	�BS�X����	���namecomponents�.�2�1�$	�Q		��3��find_main�+��nameto_string�'e�m�a�n� �e�h�t� �n�i� �d�e�t�a�c�i�l�p�u�d� �s�i� �`�����������������������������`� �e�c�a�p�s�e�m�a�n� �e�h�T�����������������stringappend�C�doc�Checks whether a declaration has a namespace twice consecutively in its namedecllinterdup_namespaceU��^dup_namespace
StrNo declarations have a duplicate namespace
StrDUPLICATED NAMESPACES IN NAME��PInfo�E�"VMR�EVMC�E�i�"�e�c�a�p�s�e�m�a�n� �e�t�a�c�i�l�p�u�d� �a� �e�v�a�h� �s�n�o�i�t�a�r�a�l�c�e�d� �o�N��������������������������������������������E�M�A�N� �N�I� �S�E�C�A�P�S�E�M�A�N� �D�E�T�A�C�I�L�P�U�D�������������������������������doc�EA linter for checking whether a declaration has a namespace twice consecutively in its name.ATTR�����E:declge_or_gt_in_statement�dX��	illegal.��
�P
Strgt�U���P
Strge�U?�^�pexprcontains_constant�Ypi_codomain��n
��
.��
Cc�j
��
��Cc�����Z��
Strthe type contains ≥/>. Use ≤/< instead.��PInfo�G�	VMR�G_lambda_1VMR�GVMC�N�	�j
�C_fresh���.�7�sVMC�G��	�S�HX�t�g������e�g������I.�N�t�wpi_codomain_main�wcontains_constant�Q	(*�.�d�a�e�t�s�n�i� �<�/��"d� �e�s�U� �.�>�/��"e� �s�n�i�a�t�n�o�c� �e�p�y�t� �e�h�t�����������������������������������������doc�GChecks whether a `>`/`≥` is used in the statement of `d`.
 Currently it checks only the conclusion of the declaration, to eliminate false positive from
 binders such as `∀ ε > 0, ...`decllinterge_or_gtU��^ge_or_gt_in_statement
StrNot using ≥/> in declarations
StrUSING ≥/> IN DECLARATIONS���PInfo�V�"VMR�VVMC�V��"�Gs�n�o�i�t�a�r�a�l�c�e�d� �n�i� �>�/��"e� �g�n�i�s�u� �t�o�N�������������������������������S�N�O�I�T�A�R�A�L�C�E�D� �N�I� �>�/��"e� �G�N�I�S�U���������������������������doc�VA linter for checking whether illegal constants (≥, >) appear in a declaration's type.ATTR�����V:decllibrary_note_1831596196��E
Strnolint_ge
StrCurrently, the linter forbids the use of `>` and `≥` in definitions and
statements, as they cause problems in rewrites. However, we still allow them in some contexts,
for instance when expressing properties of the operator (as in `cobounded (≥)`), or in quantifiers
such as `∀ ε > 0`. Such statements should be marked with the attribute `nolint` to avoid linter
failures.�VMR�YVMC�Y�pe�g�_�t�n�i�l�o�n�����������.�s�e�r�u�l�i�a�f�
�r�e�t�n�i�l� �d�i�o�v�a� �o�t� �`�t�n�i�l�o�n�`� �e�t�u�b�i�r�t�t�a� �e�h�t� �h�t�i�w� �d�e�k�r�a�m� �e�b� �d�l�u�o�h�s� �s�t�n�e�m�e�t�a�t�s� �h�c�u�S� �.�`�0� �>� ���� ��"�`� �s�a� �h�c�u�s�
�s�r�e�i�f�i�t�n�a�u�q� �n�i� �r�o� �,�)�`�)��"e�(� �d�e�d�n�u�o�b�o�c�`� �n�i� �s�a�(� �r�o�t�a�r�e�p�o� �e�h�t� �f�o� �s�e�i�t�r�e�p�o�r�p� �g�n�i�s�s�e�r�p�x�e� �n�e�h�w� �e�c�n�a�t�s�n�i� �r�o�f�
�,�s�t�x�e�t�n�o�c� �e�m�o�s� �n�i� �m�e�h�t� �w�o�l�l�a� �l�l�i�t�s� �e�w� �,�r�e�v�e�w�o�H� �.�s�e�t�i�r�w�e�r� �n�i� �s�m�e�l�b�o�r�p� �e�s�u�a�c� �y�e�h�t� �s�a� �,�s�t�n�e�m�e�t�a�t�s�
�d�n�a� �s�n�o�i�t�i�n�i�f�e�d� �n�i� �`��"e�`� �d�n�a� �`�>�`� �f�o� �e�s�u� �e�h�t� �s�d�i�b�r�o�f� �r�e�t�n�i�l� �e�h�t� �,�y�l�t�n�e�r�r�u�C�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ATTRlibrary_note���Y:declinstance_priority�dX�	nm
���Cb �^�l�
��C�[���ZFhas_attribute�P
Strinstance�Ucprio�^has_ltlt�aC������bit1�.�)���(�(�(�(�/�fC�1[�_a�����m�!���m�d�:[C�����m���XZFget_declexprconst_name�cclsX_a��&��������Zguard!5�listlength��]�N�c���P�S_x	relevant_args�mlistfilter_map�9���_x�[_a�[�;��r�[Y��C�������cases_on���_Csnd_name
snd_info�[snd_type���_�^����[cbinder_infoinst_implicit�p�Gis_constant_of��EC�P
Strout_param�U���k�utacticbinder_infohas_decidable_eqc�j���t��_������]C�kzip����a	always_applies�/�plistall��Cexpris_var�nodup��C�^C�|�p��c����c�������nodup_decidable���dc[���
Strset priority below 1000��Ypi_binders���Jget_app_fn_args����_
�PInfo�[�	VMR�[_lambda_1VMR�[_lambda_2VMR�[_lambda_3VMR�[VMC��L�"8�q�[�|	D�m�a�r�a�p�_�t�u�o���������������:is_constant_of�Q	@BCE	FIJVMC����	�'S�C_fresh�{
�m�:is_var��all�Q		����		0�0�0�1� �w�o�l�e�b� �y�t�i�r�o�i�r�p� �t�e�s�������������������������VMC����	�BS�C_fresh�z�
�C_fresh�z�X��	��Q	
		��e�c�n�a�t�s�n�i�����������tactichas_attribute	A����P	E��t�S�wget_app_fn_args�:const_name�e	Q�	�t�wpi_binders��length_main���q	]c
interaction_monadfailedf
	gz��zip����filter_map_main�n�m��
�	
���VMC�[�	�\X���]
��doc�[checks whether an instance that always applies has priority ≥ 1000.decllibrary_note_248280357�	�

Strlower instance priority
StrCertain instances always apply during type-class resolution. For example, the instance
`add_comm_group.to_add_group {α} [add_comm_group α] : add_group α` applies to all type-class
resolution problems of the form `add_group _`, and type-class inference will then do an
exhaustive search to find a commutative group. These instances take a long time to fail.
Other instances will only apply if the goal has a certain shape. For example
`int.add_group : add_group ℤ` or
`add_group.prod {α β} [add_group α] [add_group β] : add_group (α × β)`. Usually these instances
will fail quickly, and when they apply, they are almost the desired instance.
For this reason, we want the instances of the second type (that only apply in specific cases) to
always have higher priority than the instances of the first type (that always apply).
See also #1561.

Therefore, if we create an instance that always applies, we set the priority of these instances to
100 (or something similar, which is below the default value of 1000).�VMR��VMC���,y�t�i�r�o�i�r�p� �e�c�n�a�t�s�n�i� �r�e�w�o�l�������������������������.�)�0�0�0�1� �f�o� �e�u�l�a�v� �t�l�u�a�f�e�d� �e�h�t� �w�o�l�e�b� �s�i� �h�c�i�h�w� �,�r�a�l�i�m�i�s� �g�n�i�h�t�e�m�o�s� �r�o�(� �0�0�1�
�o�t� �s�e�c�n�a�t�s�n�i� �e�s�e�h�t� �f�o� �y�t�i�r�o�i�r�p� �e�h�t� �t�e�s� �e�w� �,�s�e�i�l�p�p�a� �s�y�a�w�l�a� �t�a�h�t� �e�c�n�a�t�s�n�i� �n�a� �e�t�a�e�r�c� �e�w� �f�i� �,�e�r�o�f�e�r�e�h�T�
�
�.�1�6�5�1�#� �o�s�l�a� �e�e�S�
�.�)�y�l�p�p�a� �s�y�a�w�l�a� �t�a�h�t�(� �e�p�y�t� �t�s�r�i�f� �e�h�t� �f�o� �s�e�c�n�a�t�s�n�i� �e�h�t� �n�a�h�t� �y�t�i�r�o�i�r�p� �r�e�h�g�i�h� �e�v�a�h� �s�y�a�w�l�a�
�o�t� �)�s�e�s�a�c� �c�i�f�i�c�e�p�s� �n�i� �y�l�p�p�a� �y�l�n�o� �t�a�h�t�(� �e�p�y�t� �d�n�o�c�e�s� �e�h�t� �f�o� �s�e�c�n�a�t�s�n�i� �e�h�t� �t�n�a�w� �e�w� �,�n�o�s�a�e�r� �s�i�h�t� �r�o�F�
�.�e�c�n�a�t�s�n�i� �d�e�r�i�s�e�d� �e�h�t� �t�s�o�m�l�a� �e�r�a� �y�e�h�t� �,�y�l�p�p�a� �y�e�h�t� �n�e�h�w� �d�n�a� �,�y�l�k�c�i�u�q� �l�i�a�f� �l�l�i�w�
�s�e�c�n�a�t�s�n�i� �e�s�e�h�t� �y�l�l�a�u�s�U� �.�`�)���� ��� ����(� �p�u�o�r�g�_�d�d�a� �:� �]���� �p�u�o�r�g�_�d�d�a�[� �]���� �p�u�o�r�g�_�d�d�a�[� �}���� ����{� �d�o�r�p�.�p�u�o�r�g�_�d�d�a�`�
�r�o� �`��!$� �p�u�o�r�g�_�d�d�a� �:� �p�u�o�r�g�_�d�d�a�.�t�n�i�`�
�e�l�p�m�a�x�e� �r�o�F� �.�e�p�a�h�s� �n�i�a�t�r�e�c� �a� �s�a�h� �l�a�o�g� �e�h�t� �f�i� �y�l�p�p�a� �y�l�n�o� �l�l�i�w� �s�e�c�n�a�t�s�n�i� �r�e�h�t�O�
�.�l�i�a�f� �o�t� �e�m�i�t� �g�n�o�l� �a� �e�k�a�t� �s�e�c�n�a�t�s�n�i� �e�s�e�h�T� �.�p�u�o�r�g� �e�v�i�t�a�t�u�m�m�o�c� �a� �d�n�i�f� �o�t� �h�c�r�a�e�s� �e�v�i�t�s�u�a�h�x�e�
�n�a� �o�d� �n�e�h�t� �l�l�i�w� �e�c�n�e�r�e�f�n�i� �s�s�a�l�c�-�e�p�y�t� �d�n�a� �,�`�_� �p�u�o�r�g�_�d�d�a�`� �m�r�o�f� �e�h�t� �f�o� �s�m�e�l�b�o�r�p� �n�o�i�t�u�l�o�s�e�r�
�s�s�a�l�c�-�e�p�y�t� �l�l�a� �o�t� �s�e�i�l�p�p�a� �`���� �p�u�o�r�g�_�d�d�a� �:� �]���� �p�u�o�r�g�_�m�m�o�c�_�d�d�a�[� �}����{� �p�u�o�r�g�_�d�d�a�_�o�t�.�p�u�o�r�g�_�m�m�o�c�_�d�d�a�`�
�e�c�n�a�t�s�n�i� �e�h�t� �,�e�l�p�m�a�x�e� �r�o�F� �.�n�o�i�t�u�l�o�s�e�r� �s�s�a�l�c�-�e�p�y�t� �g�n�i�r�u�d� �y�l�p�p�a� �s�y�a�w�l�a� �s�e�c�n�a�t�s�n�i� �n�i�a�t�r�e�C���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ATTR�Z����:decllibrary_note_2780167212�	�

Strdefault priority
StrInstances that always apply should be applied after instances that only apply in specific cases,
see note [lower instance priority] above.

Classes that use the `extends` keyword automatically generate instances that always apply.
Therefore, we set the priority of these instances to 100 (or something similar, which is below the
default value of 1000) using `set_option default_priority 100`.
We have to put this option inside a section, so that the default priority is the default
1000 outside the section.�VMR��VMC���
@y�t�i�r�o�i�r�p� �t�l�u�a�f�e�d������������������.�n�o�i�t�c�e�s� �e�h�t� �e�d�i�s�t�u�o� �0�0�0�1�
�t�l�u�a�f�e�d� �e�h�t� �s�i� �y�t�i�r�o�i�r�p� �t�l�u�a�f�e�d� �e�h�t� �t�a�h�t� �o�s� �,�n�o�i�t�c�e�s� �a� �e�d�i�s�n�i� �n�o�i�t�p�o� �s�i�h�t� �t�u�p� �o�t� �e�v�a�h� �e�W�
�.�`�0�0�1� �y�t�i�r�o�i�r�p�_�t�l�u�a�f�e�d� �n�o�i�t�p�o�_�t�e�s�`� �g�n�i�s�u� �)�0�0�0�1� �f�o� �e�u�l�a�v� �t�l�u�a�f�e�d�
�e�h�t� �w�o�l�e�b� �s�i� �h�c�i�h�w� �,�r�a�l�i�m�i�s� �g�n�i�h�t�e�m�o�s� �r�o�(� �0�0�1� �o�t� �s�e�c�n�a�t�s�n�i� �e�s�e�h�t� �f�o� �y�t�i�r�o�i�r�p� �e�h�t� �t�e�s� �e�w� �,�e�r�o�f�e�r�e�h�T�
�.�y�l�p�p�a� �s�y�a�w�l�a� �t�a�h�t� �s�e�c�n�a�t�s�n�i� �e�t�a�r�e�n�e�g� �y�l�l�a�c�i�t�a�m�o�t�u�a� �d�r�o�w�y�e�k� �`�s�d�n�e�t�x�e�`� �e�h�t� �e�s�u� �t�a�h�t� �s�e�s�s�a�l�C�
�
�.�e�v�o�b�a� �]�y�t�i�r�o�i�r�p� �e�c�n�a�t�s�n�i� �r�e�w�o�l�[� �e�t�o�n� �e�e�s�
�,�s�e�s�a�c� �c�i�f�i�c�e�p�s� �n�i� �y�l�p�p�a� �y�l�n�o� �t�a�h�t� �s�e�c�n�a�t�s�n�i� �r�e�t�f�a� �d�e�i�l�p�p�a� �e�b� �d�l�u�o�h�s� �y�l�p�p�a� �s�y�a�w�l�a� �t�a�h�t� �s�e�c�n�a�t�s�n�I������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ATTR�Z����:decllinterinstance_priorityU��^instance_priority
StrAll instance priorities are good
StrDANGEROUS INSTANCE PRIORITIES.
The following instances always apply, and therefore should have a priority < 1000.
If you don't know what priority to choose, use priority 100.��PInfo���D"VMR��VMC����D"�[d�o�o�g� �e�r�a� �s�e�i�t�i�r�o�i�r�p� �e�c�n�a�t�s�n�i� �l�l�A����������������������������������.�0�0�1� �y�t�i�r�o�i�r�p� �e�s�u� �,�e�s�o�o�h�c� �o�t� �y�t�i�r�o�i�r�p� �t�a�h�w� �w�o�n�k� �t�'�n�o�d� �u�o�y� �f�I�
�.�0�0�0�1� �<� �y�t�i�r�o�i�r�p� �a� �e�v�a�h� �d�l�u�o�h�s� �e�r�o�f�e�r�e�h�t� �d�n�a� �,�y�l�p�p�a� �s�y�a�w�l�a� �s�e�c�n�a�t�s�n�i� �g�n�i�w�o�l�l�o�f� �e�h�T�
�.�S�E�I�T�I�R�O�I�R�P� �E�C�N�A�T�S�N�I� �S�U�O�R�E�G�N�A�D��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doc��A linter object for checking instance priorities of instances that always apply.
 This is in the default linter set.ATTR������:decldoc_blame_report_defn\�Xdeclarationcases_on�X[Ca_a
a_a_1.a_a_2��a_a_3��a_a_4reducibility_hintsa_a_5 ��Zhas_bindand_thenZ!��Fdoc_string����G
Strdef missing doc stringa_a
a_a_1.a_a_2��a_a_3task����a_a
a_a_1.a_a_2��a_a_3 �������_���G
Strconstant missing doc stringa_a
a_a_1.a_a_2���
�PInfo���J	VMR��_lambda_1VMR��_lambda_2VMR��_lambda_3VMR��_lambda_4VMR��VMC���J	�BS�C_fresh���
tacticdoc_string		VMC��s�J	�Sg�n�i�r�t�s� �c�o�d� �g�n�i�s�s�i�m� �f�e�d������������������������VMC���J	�BS�C_fresh��
��		VMC����J	�Sg�n�i�r�t�s� �c�o�d� �g�n�i�s�s�i�m� �t�n�a�t�s�n�o�c�����������������������������VMC���J	�'S�Xdeclarationcases_on�����R�����Rdoc��Reports definitions and constants that are missing doc stringsdecldoc_blame_report_thm\�X��a_a
a_a_1.a_a_2��a_a_3��a_a_4��a_a_5 �
a_a
a_a_1.a_a_2��a_a_3�	����G
Strtheorem missing doc stringa_a
a_a_1.a_a_2��a_a_3 �
� �PInfo���P	VMR��_lambda_1VMR��_lambda_2VMR��VMC���P	�BS�C_fresh���
��		VMC����P	�Sg�n�i�r�t�s� �c�o�d� �g�n�i�s�s�i�m� �m�e�r�o�e�h�t����������������������������VMC���P	�'S�X�������Rdoc��Reports definitions and constants that are missing doc stringsdecllinterdoc_blameU��^dXmcond!�vZ�  bnot��has_attribute'��doc_blame_report_defnC�
StrNo definitions are missing documentation.
StrDEFINITIONS ARE MISSING DOCUMENTATION STRINGS��PInfo���U"VMR��_lambda_1VMR��_lambda_2VMR��_lambda_3VMR��_lambda_4VMR��VMC���U"�AVMC��@�U"��S�C_fresh���X���e�c�n�a�t�s�n�i�������������	1:	356VMC���U"�SVMC���V
��X�������&��mcondVMC�����U"��.�n�o�i�t�a�t�n�e�m�u�c�o�d� �g�n�i�s�s�i�m� �e�r�a� �s�n�o�i�t�i�n�i�f�e�d� �o�N�������������������������������������������S�G�N�I�R�T�S� �N�O�I�T�A�T�N�E�M�U�C�O�D� �G�N�I�S�S�I�M� �E�R�A� �S�N�O�I�T�I�N�I�F�E�D�����������������������������������������������doc��A linter for checking definition doc stringsATTR������:decllinterdoc_blame_thmU��^doc_blame_report_thm
StrNo theorems are missing documentation.
StrTHEOREMS ARE MISSING DOCUMENTATION STRINGS���PInfo���[	VMR��VMC�����[	��.�n�o�i�t�a�t�n�e�m�u�c�o�d� �g�n�i�s�s�i�m� �e�r�a� �s�m�e�r�o�e�h�t� �o�N����������������������������������������S�G�N�I�R�T�S� �N�O�I�T�A�T�N�E�M�U�C�O�D� �G�N�I�S�S�I�M� �E�R�A� �S�M�E�R�O�E�H�T��������������������������������������������doc��A linter for checking theorem doc strings. This is not in the default linter set.declhas_inhabited_instance�dX��02�� declarationis_trustedC_p _a boolcases_on�� [C��]Z����C�P
Strreducible�U�Na_p _a �f���C�P
Strclass�U�N]_p _a �f������m��ZFmk_local_pis���)_p�z_a�z�!�m����z[C��m�����FwhnfC���ty���^��C
��������������
Quote�`C��[�h��_p��_a������i���Y���.Zattributeget_instances�insts.���mZ�x��i
��������X�����BCCinsts_tys�m	inhabited_insts�m����i�����
�D�Japp_fnC�P
Strinhabited�U���P
Strunique�U�j������������������C	inhabited_tys.�A��
i���D�E�Japp_argCC�^���NC����C[�h�g�G
Strinhabited instance missing��
a_1�S�i��
a_1
a_2���i��
a_1
a_2�[a_3���i����a_1���i��
a_1�[a_2�����	��
a_1���	���la_1�m�iCC�iC�iCC�PInfo���b	VMR��_lambda_1VMR��_lambda_2VMR��_lambda_3VMR��_lambda_4VMR��_lambda_5VMR��VMC��b	�AVMC� �k��S�
�e	
�t	�SVMC�!c�b	�j���d�e�t�i�b�a�h�n�i�������������:app_fn���7	6a�e�u�q�i�n�u����������$���7	]_VMC�"�n*����:app_arg����VMC�#��b	�'S�C_fresh
�c.�C_fresh
�b�X���7�s	�g�n�i�s�s�i�m� �e�c�n�a�t�s�n�i� �d�e�t�i�b�a�h�n�i����������������������������VMC���3�b	�BS��X��is_trusted	���e�l�b�i�c�u�d�e�r��������������	=�-	?�(���s�s�a�l�c����������	a�"	c��tFmk_local_pis_main	h�	tacticwhnf	p�
��	t�
�0	z��
|����������
�
�e�c�n�a�t�s�n�i�����������attributeget_instances	��� �&��U	���!�{��m�"���.�#���
�
�
�
�
�
�
�
�

��
�� �'�+doc��Reports declarations of types that do not have an associated `inhabited` instance.decllinterhas_inhabited_instanceU��^has_inhabited_instance
StrNo types have missing inhabited instances.
StrTYPES ARE MISSING INHABITED INSTANCES��	�PInfo�4�v	VMR�4VMC�4���v	��.�s�e�c�n�a�t�s�n�i� �d�e�t�i�b�a�h�n�i� �g�n�i�s�s�i�m� �e�v�a�h� �s�e�p�y�t� �o�N��������������������������������������������S�E�C�N�A�T�S�N�I� �D�E�T�I�B�A�H�N�I� �G�N�I�S�S�I�M� �E�R�A� �S�E�P�Y�T���������������������������������������doc�4A linter for missing `inhabited` instances.ATTR�����4:declimpossible_instance�dX��	_p _a �f�
������)��Z��get_pi_binders_dep�_p�	<_a�	<�!�)���<�	<[C��)����	bad_arguments�)�Anb�(�B�[binderinfo�J�j�j�(��[���[���[�{C�	I�jc���)Z�^�)C_p�)_a�)listcases_on�(�B�)[C�
hd�(tl�)��Zs����
StrImpossible to infer Cprint_arguments���]CCC�PInfo�6�}	VMR�6_lambda_1VMR�6_lambda_2VMR�6VMC�I�}	�j�(

�|		
VMC�J�}	�BS�C_fresh����)listcases_on���	x �r�e�f�n�i� �o�t� �e�l�b�i�s�s�o�p�m�I�����������������������C}VMC�60�}	�BS�7X����	*		
(�t�:	#�I�{	�=�)	�J(doc�6Checks whether an instance can never be applied.decllinterimpossible_instanceU��^impossible_instance
StrAll instances are applicable
StrIMPOSSIBLE INSTANCES FOUND.
These instances have an argument that cannot be found during type-class resolution, and therefore can never succeed. Either mark the arguments with square brackets (if it is a class), or don't make it an instance��PInfo�Q��"VMR�QVMC�Q�B��"�6e�l�b�a�c�i�l�p�p�a� �e�r�a� �s�e�c�n�a�t�s�n�i� �l�l�A������������������������������e�c�n�a�t�s�n�i� �n�a� �t�i� �e�k�a�m� �t�'�n�o�d� �r�o� �,�)�s�s�a�l�c� �a� �s�i� �t�i� �f�i�(� �s�t�e�k�c�a�r�b� �e�r�a�u�q�s� �h�t�i�w� �s�t�n�e�m�u�g�r�a� �e�h�t� �k�r�a�m� �r�e�h�t�i�E� �.�d�e�e�c�c�u�s� �r�e�v�e�n� �n�a�c� �e�r�o�f�e�r�e�h�t� �d�n�a� �,�n�o�i�t�u�l�o�s�e�r� �s�s�a�l�c�-�e�p�y�t� �g�n�i�r�u�d� �d�n�u�o�f� �e�b� �t�o�n�n�a�c� �t�a�h�t� �t�n�e�m�u�g�r�a� �n�a� �e�v�a�h� �s�e�c�n�a�t�s�n�i� �e�s�e�h�T�
�.�D�N�U�O�F� �S�E�C�N�A�T�S�N�I� �E�L�B�I�S�S�O�P�M�I��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doc�QA linter object for `impossible_instance`.ATTR�����Q:declunfolds_to_class_main�
! �
�	��^��C�P
Strhas_reflect�U��C�	��	��^ �succeeds!5���tC�@��dX�
�	�RecFn�T�D�E���Ylambda_body��_p _a �c�Y !C�	�
�!�Annot���	��^��C�PInfo�T��	VMR�T_lambda_1VMR�T_lambda_2VMR�TVMC�Z��	�AVMC�[+��	�BS�C_fresh���
�e	%�v�wlambda_body_main�S�����T		���Z�#VMC�Tm��	�'S�
�t�c�e�l�f�e�r�_�s�a�h���������������7	=is�_c_1�[�a�l�c�����������Rtacticalternative�Zsucceedsdecl�S�	��T	�PInfo�S��	VMR�SVMC�S��	�Tdoc�SChecks whether the definition `nm` unfolds to a class.declincorrect_type_class_argument�dX�����_p�_a��&������	instance_arguments�)��indexes_values�cb�decidableto_bool�h�	HC�j�z�	��j�	Ylistmfilter!�v�(_x�(_a�(���q�(�	�C����	�	head���E����erase_annotations����^�p�Gis_local_constantC���	���	��	����Bunfolds_to_class�DCCCbad_arguments�)�	\_p�)_a�)�	b�E�(�F�)��	ds����
StrThese are not classes. C�	nCC�PInfo�e��	VMR�e_rec_1VMR�e_lambda_1VMR�e_lambda_2VMR�e_lambda_3VMR�e_lambda_4VMR�e_lambda_5VMR�eVMC�z���	�'Sn�)�C_fresh��{�)�O���	� �.�s�e�s�s�a�l�c� �t�o�n� �e�r�a� �e�s�e�h�T��������������������������C�VMC�{���k�
�|decidableto_boolVMC�|��	�AVMC�}��	�'S�C_fresh�����:is_local_constant�Q	���T		
VMC�~���'S�p�(
exprerase_annotations_main�S���r���}VMC���	�BS�C_fresh����)�~�&�|listmfilter_main	
�zVMC�e��	�BS�fX�t��	�{��indexes_values�i�)�doc�eChecks whether an instance can never be applied.decllinterincorrect_type_class_argumentU��^incorrect_type_class_argument
StrAll declarations have correct type-class arguments
StrINCORRECT TYPE-CLASS ARGUMENTS.
Some declarations have non-classes between [square brackets]��PInfo����"VMR��VMC������"�es�t�n�e�m�u�g�r�a� �s�s�a�l�c�-�e�p�y�t� �t�c�e�r�r�o�c� �e�v�a�h� �s�n�o�i�t�a�r�a�l�c�e�d� �l�l�A����������������������������������������������������]�s�t�e�k�c�a�r�b� �e�r�a�u�q�s�[� �n�e�e�w�t�e�b� �s�e�s�s�a�l�c�-�n�o�n� �e�v�a�h� �s�n�o�i�t�a�r�a�l�c�e�d� �e�m�o�S�
�.�S�T�N�E�M�U�G�R�A� �S�S�A�L�C�-�E�P�Y�T� �T�C�E�R�R�O�C�N�I����������������������������������������������������������������������������������������������doc��A linter object for `impossible_instance`.ATTR������:decldangerous_instance�dX��	_p _a �	:��|�}�_p�z_a�z����m����	instance_arguments-�'���	���ce���	��hexprlocal_binding_infoC�j�z�
/�j	bad_arguments�
+�
,ax��band�
9�A�.has_local_constantaC�	��	G�
/�j�	R�
/�j�nany�
*cnb�
*�
:�.local_type��H��Cc	bad_arguments�)�A�
*�(_x�
*_a�
*�������
*�(C�����(�-c�.to_binderCCC�	\_p�)_a�)�	b�E�(�F�)��	ds����
StrThe following arguments become metavariables. C�	nCCC�PInfo����	VMR��_lambda_1VMR��_lambda_2VMR��_lambda_3VMR��_lambda_4VMR��_lambda_5VMR��VMC���������wlocal_binding_info�|��VMC�������
*�C_fresh����
�:local_type�whas_local_constantVMC��)��8�����C_fresh���
+�C_fresh������		
���|		��		����any	%'VMC����A���
*�wto_binderVMC�����	�BS�C_fresh���)�O���	� �.�s�e�l�b�a�i�r�a�v�a�t�e�m� �e�m�o�c�e�b� �s�t�n�e�m�u�g�r�a� �g�n�i�w�o�l�l�o�f� �e�h�T�������������������������������������������������C��VMC��:��	�BS��X����	4		
2�t�.	-����	���
+	����
���
+
�������)��2doc��Checks whether an instance is dangerous: it creates a new type-class problem with metavariable arguments.decllinterdangerous_instanceU��^dangerous_instance
StrNo dangerous instances
StrDANGEROUS INSTANCES FOUND.
These instances are recursive, and create a new type-class problem which will have metavariables. Currently this linter does not check whether the metavariables only occur in arguments marked with `out_param`, in which case this linter gives a false positive.��PInfo����"VMR��VMC���
��"��s�e�c�n�a�t�s�n�i� �s�u�o�r�e�g�n�a�d� �o�N������������������������.�e�v�i�t�i�s�o�p� �e�s�l�a�f� �a� �s�e�v�i�g� �r�e�t�n�i�l� �s�i�h�t� �e�s�a�c� �h�c�i�h�w� �n�i� �,�`�m�a�r�a�p�_�t�u�o�`� �h�t�i�w� �d�e�k�r�a�m� �s�t�n�e�m�u�g�r�a� �n�i� �r�u�c�c�o� �y�l�n�o� �s�e�l�b�a�i�r�a�v�a�t�e�m� �e�h�t� �r�e�h�t�e�h�w� �k�c�e�h�c� �t�o�n� �s�e�o�d� �r�e�t�n�i�l� �s�i�h�t� �y�l�t�n�e�r�r�u�C� �.�s�e�l�b�a�i�r�a�v�a�t�e�m� �e�v�a�h� �l�l�i�w� �h�c�i�h�w� �m�e�l�b�o�r�p� �s�s�a�l�c�-�e�p�y�t� �w�e�n� �a� �e�t�a�e�r�c� �d�n�a� �,�e�v�i�s�r�u�c�e�r� �e�r�a� �s�e�c�n�a�t�s�n�i� �e�s�e�h�T�
�.�D�N�U�O�F� �S�E�C�N�A�T�S�N�I� �S�U�O�R�E�G�N�A�D������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doc��A linter object for `dangerous_instance`.ATTR������:declget_checksslow extra.use_only �p�� ��.�� �r���o�o��p�^�o>U���o���P���Uget_lintersdefault�o	default�o�^�p_��_��oC��UlU�plinteris_fastC�jU���
��C��o�olistappendUC�
�_�PInfo����	VMR��_lambda_1VMR��_lambda_2VMR��VMC����	�jU
�QVMC����	��S�C_fresh�5�o�C_fresh�&.�!	
��append_mainVMC��R��	�BS�� ��.�� �Q	4�r�e�t�n�i�l����������2	(.�!37	8L�Q	=C���{D���o��doc�� `get_checks slow extra use_only` produces a list of linters.
`extras` is a list of names that should resolve to declarations with type `linter`.
If `use_only` is true, it only uses the linters in `extra`.
Otherwise, it uses all linters in the environment tagged with `@[linter]`.
If `slow` is false, it only uses the fast default tests.prvappend_when_private�~�}1append_whendecl��verbose old��new������ ���������|cond��a��Cc�PInfo����VMR��VMC�������������� 	�Qdoc��If `verbose` is true, return `old ++ new`, else return `old`.prvcheck_fold����t�Ccheck_folddecl��printer�\!��name_set��verbose ��
��U�
����
��� ��
��U�!�
�����
��
�ca_fst�
�a_snd����U�
�aa_test\a_no_errors_founda_errors_founda_is_fast �
����
��
��b__p�
�_a�
��
����
��
�C��
�����
��^�pformatis_nilC���
���
��^�
��
�
����b����0������
Str/- OK: ���)������
Str. -/formatline���
��
�name_setunion�bc�������0������
Str/- �����
Str: -/C��C�PInfo����VMR��VMC������'S�U��
��� ���
�	
�formatis_nil�Q	Z
name_setunion
�
������/�-� �:�������N�O	�N�O �-�/������N�O�Q�Q�Q�Q�Q���N�Oformatline/�-� �.�������N�O�Q�Q�N�O �:�K�O� �-�/����������N�O�Q�Q���
decllint_auxl��printer�
�where_descslow verbose checks�o�
������
��� � ��o�
�	s���
�c����
Str/- Note: This command is still in development. -/
	s���
�aC������
Str/- Checking �&�NX�)������
Str declarations ��]�������������������
�listmfoldl!�v�
�U���)_�
�mk_name_setCa_p�
�_a�
��
���
�����
��
��
�c�^�p�0���0���C�
��C��
Str/- (slow tests skipped) -/
C�PInfo���	VMR�_lambda_1VMR�_lambda_2VMR�VMC���	�AVMC����	�BS�C_fresh�����C_fresh���o�C_fresh�� �C_fresh�� �C_fresh���
�mk_name_set���&�listmfoldl_main	��Q	�/�_c_1-�_c_2 �
_c_3s�_c_4t�_c_5e�_c_6p�_c_7
�
)�d�i�k�

w�o�l�(�
������������������������������	���	VMC�����	��o� � ���
����/�_c_8-�_c_9 �_c_10����	_c_11o�
_c_12t�_c_13e�_c_14h�
_c_15i�_c_16s�_c_17c�_c_18m�_c_19a�_c_20n�_c_21d�_c_22l�_c_23
�.�p�
v�

T�:�
N�	����������������������������������������������������������_c_24��N�O_c_25���Q�Q�����N�O�Q�Q�N�O
r���������������N�O�Q�Q����Og�k�
C�	����������N�O�Q�Q������doc�The common denominator of `#lint[|mathlib|all]`.
 The different commands have different configurations for `l`, `printer` and `where_desc`.
 If `slow` is false, doesn't do the checks that take a lot of time.
 If `verbose` is false, it will suppress messages from passing checks.
 By setting `checks` you can customize which checks are performed.

 Returns a `name_set` containing the names of all declarations that fail any check in `check`,
 and a `format` object describing the failures.decllintslowopt_param �verbose��extra��.?use_only�����
��=���?���@���A���
��
��
�get_checks_cCchecks�o�$�
��&e�#�����
���mfilterCdX�^�/�p��in_current_file'c��/�l�p� is_internal��l�pdeclarationis_auto_generatedcC�|����������|���������������	��B�C�P�U��	�l��lint_auxCt\��-���
��-cClst���
��
�name_setof_list�A��
functioncomp��X
�N�PCprint_decls��C
Strin the current file�)�a�PInfo�<��	VMR�<_lambda_1VMR�<_lambda_2VMR�<_lambda_3VMR�<VMC�Ti���'S�FX�C_fresh�/��#��environmentin_current_file'�Q		.��nameis_internal�Q			*�is_auto_generated�Q	!&	#%&	')*	+-.	/3���t�n�i�l�o�n�����������	Zc	\^_VMC�U��Fx��
��VMC�V���BS�M\�C_fresh�/����k	�U��name_setof_list�N��VMC�<���	�BS�A���@���?���=����	���		��T�Zmfilter	i�_c_1n�_c_2 �
_c_3t�_c_4e�_c_5r�_c_6
l�f�
u�c�
h�
��������������������	�V	��	
�	doc�<Return the message printed by `#lint` and a `name_set` containing all declarations that fail.prvname_list_of_decl_lists���)d��name_list_of_decl_listsdecl�nl-����
��o��
���listjoin
�A�._x�_a��!���s�.C����.��CC�PInfo�n��VMR�n_lambda_1VMR�n_lambda_2VMR�nVMC�t��O�_��
��VMC�u	��)�r��t��VMC�n	���o��u����join_main�ddecllint_mathlib��slow��verbose��extra��use_only���
���checks�o��e�#���
���get_mathlib_dirml����cdX�^�/�p��is_prefix_of_fileac����l�p��aC�|�+�1���*����0�����.��	����	�l��	ml'stringlengthc��ct\����
�fold_over_with_cond_sortedaClst��
��
��nCprint_decls_sorted_mathlib��aC
Strin mathlib (only in imported files)�0�]�PInfo�x��	VMR�x_lambda_1VMR�x_lambda_2VMR�xVMC��j���'S��X�C_fresh�D	�C_fresh�D�#���Zis_prefix_of_file�Q	
/���]�Q			+�^�Q	 "'	$&'	(*+	,./	04���t�n�i�l�o�n�����������	[d	]_`VMC����BS��\�C_fresh�D$�C_fresh�D"����	�n�N��VMC�x���	�BS�|���{���z���y����	���		��	�
	���e	�	stringlength��i�_c_1n�_c_2 �_c_3m�_c_4t�_c_5l�_c_6o�_c_7e�_c_8)�s�f�d�r�p�y�(�b�h�a����������������������������������������	�
�	
�	doc�xReturn the message printed by `#lint_mathlib` and a `name_set` containing all declarations that fail.decllint_all��slow��verbose��extra��use_only���
���checks�o��e�#����dX�^�����	����	�l����t\�J�LcClst��
��Rprint_decls_sorted��C
Strin all imported files (including this one)�)�a�PInfo���	VMR��_lambda_1VMR��_lambda_2VMR��VMC��\�
�'S��X�C_fresh�S��#���]�Q	
	

	!�^�Q			 !	"&���t�n�i�l�o�n�����������	MV	OQRVMC����BS��\�C_fresh�S�����	�n�N��VMC����	�BS������������������	���		����e	�i�_c_1n�_c_2 �
_c_3l�_c_4o�_c_5t�_c_6e�_c_7d�_c_8s�_c_9
)�
h�
g�u�c�(�
f�
r�p�m�
a�
�������������������������������������������	��	��	
�	doc��Return the message printed by `#lint_all` and a `name_set` containing all declarations that fail.prvparse_lint_additions���<���parse_lint_additionsdecl��G�� .��has_seqseqG�uto_has_seqG��G�uT.����G��G�� a.���
 .interactivetypesonly_flag��..�A

nameappend�
��parsermanyG��K
��ident_�PInfo���VMR��_lambda_1VMR��_lambda_2VMR��VMC����.�C_fresh
��� VMC���αVMC��^��BT��	
��	X����alternative�&����many_main	D�r�e�t�n�i�l���������nameappend��I	JQVdoc�� Parses an optional `only`, followed by a sequence of zero or more identifiers.
Prepends `linter.` to each of these identifiers.prvlint_cmd_aux����v�Alint_cmd_auxdecl��scope� � �.� �
�G��������G��G��YoptionalGK��tk
Str-silent��������
Str*fast_only�����^�p�c�����G���\G����c��silent��������_p��_a���! .������C� �.�����
�
�
�G�
��
����
���leanparserhas_coe'�
��optionis_none��
]Cc_p�
�_a�
��
����
���C��
������whenG���l�
����
����
"��"��"���
Ftrace��has_to_format_to_has_to_tactic_format����C_x�
�p���b���
0��
&����
StrLinting did not succeedCC�PInfo���VMR��_lambda_1VMR��_lambda_2VMR��_lambda_3VMR��_lambda_4VMR��_lambda_5VMR��VMC�����T-���leanparsertk		VMC����TVMC�����T*�����		VMC�����VMC�����BT�C_fresh�g����C_fresh�g����4������of_tactic'	
�i�_c_1n�_c_2t�_c_3 �_c_4d�	_c_5c�
_c_6e�_c_7	

u�s�o�		g�L��������������������������N�1�����Q�&��when	VMC��n��BT����������parser_orelse	h�����	a���Q	�����	Z��	S	
��is_none_main�
��	2L
�����Q	=?D	ACD�&���Q
X	
_fdoc��The common denominator of `lint_cmd`, `lint_mathlib_cmd`, `lint_all_cmd`decllint_cmd_x��parseE��
Str#lint����
]����lint�PInfo��%VMR�VMC��%��
]�<��doc� The command `#lint` at the bottom of a file will warn you about some common mistakes
in that file. Usage: `#lint`, `#lint linter_1 linter_2`, `#lint only linter_1 linter_2`.
`#lint-` will suppress the output of passing checks.
Use the command `#list_linters` to see all available linters.ATTRuser_command���USR_CMD�decllint_mathlib_cmd_x�
Z��
Str#lint_mathlib����
f���
_lint_mathlib�PInfo��,VMR�VMC��,��
f�x��doc� The command `#lint_mathlib` checks all of mathlib for certain mistakes.
Usage: `#lint_mathlib`, `#lint_mathlib linter_1 linter_2`, `#lint_mathlib only linter_1 linter_2`.
`#lint_mathlib-` will suppress the output of passing checks.
Use the command `#list_linters` to see all available linters.ATTR����USR_CMD�decllint_all_cmd_x�
Z��
Str#lint_all����
n���
_lint_all�PInfo��3VMR�VMC��3��
n����doc� The command `#lint_all` checks all imported files for certain mistakes.
Usage: `#lint_all`, `#lint_all linter_1 linter_2`, `#lint_all only linter_1 linter_2`.
`#lint_all-` will suppress the output of passing checks.
Use the command `#list_linters` to see all available linters.ATTR����USR_CMD�decllist_linters_x�
Z��
Str#list_linters����
v�����#
!�#G�#�
z�
|�
z�
|�
�#�&env�#	ns.��decl_filter_map
CdclX�^�p�
9�	���� get_prefix��
����
��
��	�������
QuoteU�`���
����
��Y
��
�
�
�
&�
'�
)��
StrAvailable linters:
  linters marked with (*) are in the default lint set
_xlistmmap'G��
n
�� 
�	�G �	��
��	��
��
 �C�
�Cb �
&�
������ pop_prefixc�
Str (*)��c�PInfo��7VMR�_lambda_1VMR�_lambda_2VMR�_lambda_3VMR�_lambda_4VMR�VMC�#=�9 �X�r�e�t�n�i�l�����������nameget_prefix_main�7��	)+5U�t����	245�Q	79��VMC�$�7��VMC�%W�<�BT� 
�r�e�t�n�i�l�������������	'Q�Q	,.�C)�*�(� ������namepop_prefix�A�C�N������VMC�&���7�BT�C_fresh�r�.
�t�e�s� �t�n�i�l� �t�l�u�a�f�e�d� �e�h�t� �n�i� �e�r�a� �)�*�(� �h�t�i�w� �d�e�k�r�a�m� �s�r�e�t�n�i�l� � �
�:�s�r�e�t�n�i�l� �e�l�b�a�l�i�a�v�A����������������������������������������������������������������������������N������	�w���%�&�$listmmap'_mainVMC��7�BT��
v����	�#�Zdecl_filter_map�.�&doc�The command `#list_linters` prints a list of all available linters.ATTR����USR_CMD�decllint_hole_cmdhole_command�
�hole_commandmk
StrLint
StrLint: Find common mistakes in current file.es-pexpr�
�-�	�
`��?��_p�
�_a�
��
��:�
�!�
�C��
�����
��^�
����	�
formatto_stringCoptionsmk��>�	C�PInfo�3�BVMR�3_lambda_1VMR�3VMC�?�E�BS�7�
��<	optionsmkformatto_string�VMC�3��Bt�n�i�L������.�e�l�i�f� �t�n�e�r�r�u�c� �n�i� �s�e�k�a�t�s�i�m� �n�o�m�m�o�c� �d�n�i�F� �:�t�n�i�L����������������������������������������������?doc�3Use `lint` as a hole command. Note: In a large file, there might be some delay between
 choosing the option and the information appearingATTRhole_command���3HOLE_CMD�3declapply_nolint_tacdecls."�F."�
�!�v
d
tactictry�set
Quotenolint_attrC:�C�PInfo�E�I	VMR�E_lambda_1VMR�E_lambda_2VMR�EVMC�L�I	�AVMC�M�J
�G
�user_attributeset�IVMC�E	�I	�F.�M�&�L�1doc�E Tries to apply the `nolint` attribute to a list of declarations. Always succeeds, even if some
of the declarations don't exist.declapply_nolint_cmd_x�
Z��
Strapply_nolint���Q�(����.��
�a.��lift_base��.lift_fn_range."���
%apply_nolint_tac�PInfo�P�NVMR�P_lambda_1VMR�PVMC�V�N��VMC�P�N�BT�Q�(�����&�V��	
�E��doc�P `apply_nolint id1 id2 ...` tries to apply the `nolint` attribute to `id1`, `id2`, ...
It will always succeed, even if some of the declarations do not exist.ATTR����PUSR_CMD�PEndFile