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��۝
initlogicbasicdataoptiondefs��export_decloptionnonenonesomesomeexport_declboolffffttttexport_declhas_andthenandthenandthenexport_declhas_powpowpowexport_declhas_appendappendappendexport_decldecidableis_trueis_trueis_falseis_falseto_boolto_boolexport_declhas_purepurepureexport_declhas_bindbindbindexport_declhas_monad_lift_tmonad_lift!monad_liftexport_declmonad_functor_tmonad_map$monad_mapexport_declmonad_runrun'runexport_decllistmmap*mmapmmap'*mmap'mfilter*mfiltermfoldl*mfoldlexport_declnativenat_map3rb_mapmkexport_declname_mapnativerb_mapmkexport_declexpr_mapnativerb_mapmkexport_decltacticinteraction_monadfailedfailexport_decltactic_resultinteraction_monadresultexport_decltacticFtransparencyreducibleGreduciblesemireducibleGsemireducibleexport_decltacticmk_simp_attrLmk_simp_attrexport_declmonad_exceptthrowOthrowcatchOcatchexport_declmonad_except_adapteradapt_exceptTadapt_exceptexport_declmonad_state_adapteradapt_stateWadapt_stateexport_declmonad_readerreadZreadexport_declmonad_reader_adapteradapt_reader]adapt_readerexport_declis_lawful_functormap_const_eq`map_const_eqid_map`id_mapcomp_map`comp_mapexport_declis_lawful_applicativeseq_left_eqgseq_left_eqseq_right_eqgseq_right_eqpure_seq_eq_mapgpure_seq_eq_mapmap_puregmap_pureseq_puregseq_pureseq_assocgseq_assocexport_declis_lawful_monadbind_pure_comp_eq_maptbind_pure_comp_eq_mapbind_map_eq_seqtbind_map_eq_seqpure_bindtpure_bindbind_assoctbind_assocdeclfunctionhfunextuvαα'βa�β'faf'hαeqhaa'�heq�
�a���������"eqrecu�������
��
	#�@:�����8��C�:�@@:G�v�:�i��@8��;�
�nmAGthisam;LP#�nm:�n
��:C��@�;�mm;_;G��;@��heq_of_eq�m{Cfunextmxm{Cameq_of_heq{LP8funext:�:a:type_eq_of_heq�Pa@heqrefl;�:8�@
�PInfo~decl}funext_iffu_1αβ��f₁x8f₂�iff�
�Pa�
P8�������iffintro��h�a
eqsubst
�(_x��rfl
�Pfunext
�P��8�PInfo�decl}comp_apply�wαβφ�f�g�a
�
functioncomp

8����$��%��&�
rfl
�/�PInfo�"ATTR_refl_lemma���decl}injectiveeq_iff��βf�%I}injectiveab
��
GP�����%��E��
��I�Ncongr_arg
�PInfo�%nspace�ATTRsimp���decl}injectivene�����%hf�Ea₁a₂
�ne�
����%��E��
mt�I�Nh�I�PInfo�)decl}injectivedecidable_eq_main�����%_inst_1decidable_eqI�Bdecidable_eq
����%������a
bid_rhsdecidable�Kdecidable_of_iff���F�}injectiveeq_iff
��PInfo�,VMR�VMC�,�������decidable_of_decidable_of_iffdecl�equations_eqn_1�����%������a
beq����
������%�������
�eqrefl��id_delta�����PInfo�,ATTR����EqnL�decl}injectivedecidable_eq�������%��������
�PInfo�,VMR�VMC�,������decl�equations_eqn_1�����%�������
�����
������%�������equations_eqn_1
�PInfo�,ATTR����EqnL�decl�_sunfold������PInfo�,decl}injectiveof_comp������%γ�$g�
I}injective
�

}injective
����%��$�����xyh�KGP�|
this�F�n�[�nAnnotshow�PInfo�/decl}surjectiveof_comp������%γ�$g��S}surjective
�}surjective
����%��$������+y
_aExists
a�F��
Existsdcases_on

�
���
��6
�M���F�w
h�L��QC�C�FC
�introC�a�8�PInfo�2nspace�decl}decidable_eq_pfun_main_aux_param_0p_inst_1���
_inst_2hpdecidable_eq8�zhp��v��w��y��|��}��
P�����������hp���8�symm������8���}funext_iff������forall_prop_decidable���
hP8�PInfo�5	VMR�_lambda_1VMR�VMC�5	�_fresh����_fresh����_fresh���VMC�
5	�������v���decl�_proof_1_aux_param_0��v���xf�8g�����P8�����8��v����'���(����������������PInfo�%5	decl�equations_eqn_1_aux_param_0��v��w��y��|�'�}�(��������+
���%����v��w��y��|�'�}�(�������������PInfo�*5	ATTR����*EqnL�*decl}decidable_eq_pfunu_1��v��w���-���8���}��v��w��������PInfo�,5	prt�,VMR�,VMC�,5	�����v�decl�,equations_eqn_1�-��v��w�������'�}�(������eq�-���,
������8�%����
����v��w�������equations_eqn_1�PInfo�/5	ATTR����/EqnL�/decl�,_sunfold�-����v��w��������}������	��������������������"�PInfo�35	ATTRinstance���,classdecidable�,��decl}cantor_surjectiveu_1α�f���vnotfunctionsurjective�7�J�8��9�Ka�P�[_a��eq��va�LPfalse�@�L��>�_���V�
�vP�@
�L��>�T�p�`�h_1�o�[�`�mp��L�y�`iff_not_self�yiff_of_eq�y�{congr_fun!x�vD�L(�d�PInfo�69decl}cantor_injectiveu_1�f���v�Lfunctioninjective�J$�J�K���L���=���w}cantor_surjective#abU�i���}surjective_of_has_right_inverse''��v���
)a��finv��functionright_inverse')�W�P�Q
�R��v��(��U��funext'(��v��apropext�P
�Q�R��v��$��G8���8h��rfl'�nh'8U'��e��(�)��v_x��


�PInfo�I=decl}is_partial_invu_1u_2α��β�df�%g�option�c�v�e���f��g�%�h�xy���+�*
G�PInfo�bFVMR�bVMC�b�h�g�f�edoc�b`g` is a partial inverse to `f` (an injective but not necessarily
 surjective function) if `g y = some x` implies `f x = y`, and `g y = none`
 implies that `y` is not in the range of `f`.decl�bequations_eqn_1�c�d�e���f��g�%�h����v�b�c�d��e���f��g�%�h����v�$�PInfo�mFATTR����mEqnL�mSEqnL�bdecl}is_partial_inv_leftu_1u_2α��β�f�%g�H�$x
�
P��q���r��s�%�t��u�$�v
�mpr�4�PP8Prfl�p
P�PInfo�nIdecl}injective_of_partial_invu_1u_2α��β�f�%g�H�$}injective�z�{
�|���}��~�%�����$a
bh��optionsomeinj/�0trans/��
��_�symm2�]�b�`�;��]�b�`���{��;�k�d�n��G��B��PInfo�yLdecl}injective_of_partial_inv_rightu_1u_2α��β�f�%g�H�$xy
bh₁has_memmem��3�]optionhas_mem3�nh₂������
����������%������$����
�����������0trans��
�symm4
�x��C
�C��

�x�������PInfo��Odecl}left_inversecomp_eq_id���f�%g�h}left_inverse�F�T
�
id�����%��������funext�
�����PInfo��Snspace��decl}right_inversecomp_eq_id���f�%g��h}right_inverse�K�T
�

id
�����%��������funext
�
���PInfo��Vnspace��decl}left_inversecomp�u_1��γ�f�g�
h�&i�hf��hh}left_inverse��}left_inverse5�5�5
��������������&���������$a
��
Peqmpr�D�?
Pid��D�J��A_a����S(�+�DP�1�F�J�?�L��J�f�5�H_a��S�S�+�J8eqrefl5Annot��PInfo��Ydecl}right_inversecomp�u_1��γ�f�g�h�&i�hf��hh}right_inverse��}right_inverse6�-�4��������������&�����������}left_inversecomp6
�PInfo��]ncomp}partial_invdecl��u_1u_2α��β�f�%b�����������%��dite��Exists8a�classicalprop_decidable���h���
classicalsome8
��
�=���L��7
�PInfo��edoc��We can use choice to construct explicitly a partial inverse for
 a given injective function `f`.decl��equations_eqn_1��������������%����������������������%���7����PInfo��eATTR�����EqnL��SEqnL��decl}partial_inv_of_injectiveu_1u_2α��β�f�%I�L�#������������%�����j�k�[��
��
������h������a�n(����U�nh'�inj_arrow�������$eqmp�j���������]�����������
���L����_�j�_��/�<�]�-_a�]���������$���;�����;����C��C�C�^���L�;��C� 
�9�O�+�0�2dif_pos=���]�(�,��j���/�0�7�f_a�]��9���O�S�+�h�-��<���n��h����6�%a�������E���A���9� ����classicalsome_spec=C�D
��P���O�6���M�����������C�D�����������:��:��:�:����L����:�������+�P���Z�;�=���H�L��q�P���o���������C
�����+�q�M�y���L�no_confusion<�����/�1�j���/�X��dif_neg=���]�(�,��e��>_x�j�e�/�n
h�a'���
�^���������������]���� �!���"���L��+�_���/�Z���]�"�%congr_arg<=�]�)�_
�x����AnnotcheckpointAnnothave�
=��B�n�PInfo��hdecl}partial_inv_leftu_1u_2α��β�f�%I��x��
��
���������%���}is_partial_inv_left������}partial_inv_of_injective@A�k�PInfo��rncomp}inv_fun_ondecl��α_inst_1inhabitedBβf�ssetb�	�x�
�z��
�{��}���B��aand���|sethas_mem�GP����h��classicalsomeB������|�������L��defaultB�PInfo�}doc�Construct the inverse for a function `f` on domain `s`.decl�equations_eqn_1��	�x�
�z��
�{��}�	��
���	�x�
�z��
�{��}��B���PInfo�}ATTR����EqnL�SEqnL�decl}inv_fun_on_pos��	�x�
�z�f�{s�}bh��a����H����������
�G���	�x�
�z���{��}�����F���������������������������|��
�8(��L�����G�	�L����4��_a�������
��
����+���	�
�F����������� �����!���8���x����v��x�6h���8_a�v���� �����!���
�+�<�?���F�?bex_def�$���$���G�c�L���j����?���?��_a��������H����v��v�������C�|C��C�$
��L�v����
�����+��cdif_posu�?�p�b��classicalsome_specG�>�b�PInfo��decl}inv_fun_on_mem��	�x�
�z���{��}�h�����	�x�
�z���{��}��.���left����a��G��}inv_fun_on_pos
���PInfo�-�decl}inv_fun_on_eq��	�x�
�z���{��}�h�����	�x�
�z���{��}��3���right�������PInfo�2�decl}inv_fun_on_eq'��	�x�
�z���{��}a
hxyH��H��
����	:
ha��	��n�	�x�
�z���{��}�6
�7���<��
��Ha'�IH���J��
���=$
��}inv_fun_on_mem�	
��}inv_fun_on_eq�	
��Annot��Annot���
�	�
���>�	2�8����rfl�n�PInfo�5�decl}inv_fun_on_neg��	�x�
�z���{��}�h�L��	�����	�x�
�z���{��}��C�	G�F�	J�	H�	���L��	J�	T�_a���������+�	J�	�1�F�	T�	H�����L��	T�	i�u_a�������	]�+�	T��dif_negH�?�p��L�<�L�?�G_a�v��L�O�L�+�	z�?�_�������PInfo�B�ncomp}inv_fundecl�H��	�x�
�z�f�{�
�	�x�
�z��I�{��setuniv�PInfo�H�doc�HThe inverse of a function (which is a left inverse if `f` is injective
 and a right inverse if `f` is surjective).decl�Hequations_eqn_1��	�x�
�z��I�{�B�	��H��	��	�x�
�z��I�{�B�	��	��PInfo�M�ATTR����MEqnL�MSEqnL�Hdecl}inv_fun_eq��	�x�
�z���{�h��
a
�F�	��	�
�	�x�
�z���{��O�	��	 
�	�_a���P���B�P���Q���	��Ha�����	�H�	��J�h_1�	��[���R�����	�C�S�	��S�	,�	��	0���	��S�	����trivial�PInfo�N�decl}inv_fun_neg��	�x�
�z���{�h�L�	����	���
�	�x�
�z���{��W�
}inv_fun_on_neg
�	��x��a�����	�H�
(���	�_x�
._a���Y�����	��Z�
2�7
�	��	��\�	��	�a���h_1�	�����	��Z�
C�S�^���
C�
G��:�]:�_h_1_w�
Ch_1_h�
F�[��@�]@�F:��	,@�
V�PInfo�V�decl}inv_fun_eq_of_injective_of_right_inverse��	�x�
�z���{g�	�hf}injectiveB
hg}right_inverseB�	��
�	�
�	�x�
�z���{�b�	��c�
s�e�
xfunextB
�
�
~b
�	�
P�F��
�
��H�
��L��
��
��P�H_a��8�	��n�
��+�
�8}inv_fun_eq
�	-�P��P8�PInfo�a�decl}right_inverse_inv_fun��	�x�
�z���{hf}surjectiveB�
t
�	�
�	�x�
�z���{�l�
�b�
�
8�PInfo�k�decl}left_inverse_inv_fun��	�x�
�z���{hf�
p}left_inverse
�
��	�x�
�z���{�p�
�b

��	��	�
�
~GAnnot��Annot���
��	,�P��G�	9�PInfo�o�decl}inv_fun_surjective��	�x�
�z���{hf�
�}surjective
�
��	�x�
�z���{�t�
�}surjective_of_has_right_inverseB
�
��
B�T
�U��WB�	�}left_inverse_inv_fun
�PInfo�s�decl}inv_fun_comp��	�x�
�z���{hf�
�	���B

�
�idB
�	�x�
�z���{�y�
�funextBB
��;�>�-�PInfo�x�decl}injectivehas_left_inverse��	�x�
�z���{hf�
�}has_left_inverseB
�	�x�
�z���{�~�
��
B�Tfinv�Z�
��
��-�PInfo�}�decl}injective_iff_has_left_inverse��	�x�
�z���{��
��P�	�x�
�z���{��
��l}injectivehas_left_inverse}injective_of_has_left_inverseB�PInfo���ncomp}surj_invdecl���αβf�%h�,b
�������%������classicalsome
�
��8�PInfo���doc��The inverse of a surjective function. (Unlike `inv_fun`, this does not require
 `α` to be inhabited.)decl��equations_eqn_1��������%�������K
���
���������%�������
���PInfo���ATTR�����EqnL��SEqnL��decl}surj_inv_eq�����f�%h��b�	����������%������classicalsome_spec
��8�PInfo���decl}right_inverse_surj_inv��������%hf��}right_inverse���������%����}surj_inv_eq�PInfo���decl}left_inverse_surj_inv��������%hf}bijective}left_inverse�������,�������%����}right_inverse_of_injective_of_left_inverse��������}right_inverse_surj_inv���PInfo���decl}surjectivehas_right_inverse��������%hf��}has_right_inverse�������%�����
��U���
�����PInfo���decl}surjective_iff_has_right_inverse��������%������������%����}surjectivehas_right_inverse}surjective_of_has_right_inverse�PInfo���decl}bijective_iff_has_inverse��������%�������g���������������%����1hf����������
���andintro������}left_inverse_surj_inv��_x�1_a�(��>�X��������
��
���(��^��
���	�]��dcases_on��
��
�	���l�q��h_left�lh_right���[���B�,�A����}injective_of_left_inverse���TC�U����C�PInfo���decl}injective_surj_inv��������%h��}injective���������%����}injective_of_has_left_inverse���
�&���&��
���
�PInfo���decl}update�αβ7_inst_1��faa'vPa(����7������������P�������(h��eqrec_x��symm���L���PInfo���VMR��VMC�����������������	
doc��Replacing the value of a function at a given point by a given value.decl��equations_eqn_1�����7������������P���F(���
������7������������P���(���PInfo���ATTR�����EqnL��SEqnL��decl}update_same�����7����avfa
��F�n����(�������7�����������
dif_pos�L�
rfl�n���
%������������L�
%�PInfo���ATTR�����decl}update_noteq�����7����aa'h�h
vfa$�F�����
1���	�
������7�����������
J�����
Kdif_neg�

�
Q
�����
c��
����C���
���L�
c�PInfo���ATTR�����decl}update_eq_self�����7����afQ��
��
a
��
��	����7��������Q�
�
�
�
�i
��LP�F�
��
��8h�
��F�F��$���
����X�F�
��
��
��L��
��
��_a��F�
1�
R

�{�F�
2�
�P�+�
��F�
�true�L��
��
�eqtransF�v�
��
��
��
��
�a�
����
1
e_1�F���^�=�
l�=��:Le_2�F��@�congrF��;{C�v�F�
��
�
congr_argF�
��=�
��v
�
��
��
����
��
��
��
��
��
���
����
��
�eq_self_iff_true�
��
��
���L�
��
��
��L�
��
��
��
��
��X�X�
����
����
�e_1�F�
��=�
l
�=�
�e_2�F�
��
��
��v�F�E�H
��E�=�E�v
�H�
��X���
��
��;�h�
��B�hA�v��h
iffrefl�h�
��
��h�L�`�
��w�L���xnedefa�v���ve_1���FF�v�v�L�{�`���{�`iff_false_intro�{���x�
�not_false_ifftrueintro�
��X�X�
��X���8�
��'�
��X�
�PInfo���ATTR�����decl}update_comp����α'�$����_inst_2decidable_eq
βf�
g�
hg�av
�
�T��C��C�C�C�:C
G}update
�T��C����
�����$��������������������������
funext
�����i��'C��8��C:��:�:�:�@:�n
��C�TC���
h���F���:@��@�@�@�;@����:�T:����,�7�L��9�>�
:_a:��S��@;��;�;C�;�m�����@�T@C�&�H
�S�T�_�+�9�F�>�
��L��>�
��
��>��
�����e_1�]�=:�=@e_2�F;�
�m�v�Fm��
�m�=m�v
���;���;�*���Vcomp_app
:@�*�@�!�&���=��
:�0��4���w�
��'�
��L���:�
��L�@�
��
��9�����
����-�����-�*������`@�!�&����;�h@����
��B��A�v��h;�����s���
��
����x�
����L�K@����x�@��������`�����`�ne
:���K;����}injectivene
@;
�;��
��B�A�v���@
�s��
��
���x�
���L�':�x��
:���"�`���"�`���"���������8�����0�/��:�X�:�@�N�4�4����
:�0��8�4�������
������
�PInfo���decl}uncurry_defu_1u_2u_3α��β�γ�
f����`b�Tprodc_}uncurryc_ap���fstc_
�sndc_
������������funextc_a���������_x��_a��
prodcases_onc_
���
eqj
��
����fstsnd�[����
�mkc_��rflj���PInfo�
�decl}uncurry'u_1u_2u_3α��β��γ�$f��p���%���&���'���(�����PInfo�!�VMR�!VMC�!��)�(�'�&�%

decl�!equations_eqn_1�"�#�$�%���&���'���(����"�#k���!�"�#�$���%���&���'���(���pk�����PInfo�+�ATTR����+EqnL�+SEqnL�!decl}curry_uncurry'u_1u_2u_3���f����-�.�/�T�&}curryvxz}uncurry'vx{�0���1���2���3��funextvxz��&�afunextxz���
�
8b�����
�
�PInfo�,�ATTR����,decl}uncurry'_curryu_1u_2u_3���f����������>���?���@���A�;���>�)���F����8�
��L��L�
��
��L�G88�
�����e_1���=�=e_2�����=F�v���_
����F�=�v
�_�J8����J�)���7�9
����
��
8�z��7
�9
�����(�
�

�(��e_1�����)���)��e_2��;�<��C������:C�:C��
��������:�::�)��C
���H��congr_fun���T���T�����f���7�9��functioncurryequations_eqn_1���
�����F�����)�������+���
��������e_1����������
��
����prodmketa��
88�$8���T�
����8�
�PInfo�:�ATTR����:decl}restrictu_1u_2α��β�f�%sset�Q�subtype��S���T��U�%�V�%x�(�Xval�
�PInfo�P�VMR�PVMC�P��Y�V�U�T�Sdecl�Pequations_eqn_1�Q�R�S���T��U�%�V�%���R�)�P�Q�R�3�S���T��U�%�V�%����)�>�PInfo�\�ATTR����\EqnL�\SEqnL�Pdecl}restrict_equ_1u_2α��β�f�%s�%�?��^��_�(�.�`���a��b�%�c�%rfl���)�>�PInfo�]�ATTR����]decl}bicomplu_1u_2u_3u_4u_5α��β��γ��δ�iε�jf��g�
h�bab�k���l���m���n�`�o�a�p���q�b�r�b�s�t
G�PInfo�e�VMR�e
VMC�e

�
�t�s�r�q�p�o�n�m�l�kdecl�eequations_eqn_1�f�g�h�i�j�k���l���m���n�`�o�a�p���q�b�r�b�s�t���e�f�g�h�i�jC
�n�k���l���m���n�`�o�a�p���q�b�r�b�s�t�����PInfo�v�ATTR����vEqnL�vSEqnL�edecl}bicompr�f�g�h�i�k���l���m���n�`f�%g��ab
�k���l���m���n�`�x�%�y���z�{�Y�PInfo�w�
VMR�wVMC�w�
�{�z�y�x�n�m�l�kdecl�wequations_eqn_1�f�g�h�i�k���l���m���n�`�x�%�y���z�{��
�w�f�g�h�i
���k���l���m���n�`�x�%�y���z�{��
���PInfo�}�
ATTR����}EqnL�}SEqnL�wdecl}uncurry_bicompr�f�g�h�i�k���l���m���n�`f��g���f�g��T��}uncurry���
��
����h�����
�k���l���m���n�`������funext������������_x��_a��������������
������
���[����C��C
��C�"rfl��"�PInfo�~�decl}uncurry'_bicompr�f�g�h�i�k���l���m���n�`f��g����)��}uncurry'���
�����+�k���l���m���n�`�������rfl����7�=�PInfo���ATTR�����decl}involutiveu_1α�f��v������Qx�8�PInfo���VMR��VMC������doc��A function is involutive, if `f ∘ f = id`.decl��equations_eqn_1��������Q������X������Q�+�]�PInfo���ATTR�����EqnL��SEqnL��decl}involutive_iff_iter_2_eq_idu_1α�f�Q��]�anatiterate��bit0natnathas_addhas_oneone�lnathas_oneid�������Q�������U����W}funext_iff�������PInfo���nspace}involutivedecl��left_inverseαf�Qh}involutive}left_inverse�����Q�����PInfo���!prt��decl��right_inverse�����Q����}right_inverse���PInfo���"prt��decl��injective�����Q����}injective�����Q����}injective_of_left_inverse��left_inverse�PInfo���$prt��decl��surjective�����Q����}surjective�����Q����x�d���P8�PInfo���%prt��decl��bijective�����Q����}bijective�����Q�����A������injective��surjective�PInfo���&prt��declsetpiecewise�α�xβ7s�|fig��P_inst_1j
�����|��i(���x��7����������������iite��
8(P�PInfo���-VMR��VMC���-��������������	doc��`s.piecewise f g` is the function equal to `f` on the set `s`, and to `g` on its complement.decl��equations_eqn_1����x��7����������������������
�����x��7���������������������
�PInfo���-ATTR�����EqnL��SEqnL��EndFile