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".
License: APACHE
oleanfile3.4.2, commit cbd2b6686ddb��3cinitdatanatsqrtdatanatgcddatalistbasicdatalistpermalgebragroup_powertacticwlog�;�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_assocexport_decltraversabletraverse}traversedeclnatprimepnat�andhas_lelenathas_lebit0nathas_addhas_oneonenathas_onemHhas_dvddvdcomm_semiring_has_dvdnatcomm_semiringoreq"�PInfo�$VMR�VMC��doc�`prime p` means that `p` is a prime number, that is, a natural number at least 2 whose only divisors are `p` and `1`.decl�equations_eqn_1� �*�eqrefl.�PInfo�$ATTR_refl_lemma���EqnL�SEqnL�decl�primetwo_lepa.�andleft)�PInfo�&nspace�decl�primeone_ltp�.has_ltlt�has_lt��primetwo_le�PInfo�(decl�primene_onephp.ne��.nesymmne_of_ltpartial_orderto_preorderordered_comm_monoidto_partial_orderordered_cancel_comm_monoidto_ordered_comm_monoidordered_semiringto_ordered_cancel_comm_monoid�ordered_semiring�primeone_lt�PInfo�*decl�prime_def_ltpiff.mH@�%!%�and_congr_right)up2forall_congr��%$"��m%�o�rm�intro��h�l@�d%�resolve_right!��%a��h�d�orimp_left>preorderto_has_lt`%�rq�l��decidablelt_or_eq_of_le_ab�decidable_le%��le_of_dvd%��le_of_succ_le�succhas_zerozeronathas_zero���PInfo�-decl�prime_def_lt'plm���%not����trans.v��prime_def_ltzu�p2~�������m���h�m26l@%�d��not_lt_of_ge`�%eqsubst_x���symm��of_as_true��decidable_lttrivialh�l�d�natcases_on�����������!�����zero�@�+��+���/��1���mul_zero_classto_has_zerosemiringto_mul_zero_classcomm_semiringto_semiring!�+forall_prop_decidable�?��?�A��>h�?�decidable_eq�+�eqmp� �?eqrec� _a, 3�R�>eq_zero_of_zero_dvd� ������@����%� ��r��u�����o��q��t��z��|!�������+�@�� ����y������2��m����n�@��p�y���s�{�������elim��� !��%�������%%�PInfo�3decl�prime_def_le_sqrtplm���sqrt%�������prime_def_lt'z���p2���� ��������a��mm2l������%lt_of_le_of_lt`%�����sqrt_lt_self��a�� thismk����A%I�.has_mulmul�has_mul�% mm2l��_x��._a��Existsdcases_onc!�X��to_has_mul�<��"�� falsewh�id_rhs_x_1preorderto_has_leUlinear_orderto_partial_order�linear_order�.�+�.�le_total�'�.ordcases_on�-�0�2�7mk�-� �%�.km�0� %�lt_of_mul_lt_mul_rightdecidable_linear_ordered_semiringto_linear_ordered_semiring�decidable_linear_ordered_semiring%�eqmpr>�Uordered_cancel_comm_monoidto_partial_order[linear_ordered_semiringto_ordered_semiring�N���8�to_semiring�X��c%��]��hid,�i�l�V�semigroupto_has_mulmonoidto_semigroup�monoid �Dto_has_one�v�_a,�]�d� �c�� �]��3�i�one_mul�v��S�l�k�y�n,�l���V��scomm_semigroupto_semigroup�comm_semigroup%�_a,�]� ����3�l�y��y���Q!�y��%�����V���%_a,!�{�� ���3����mul_comm���%��zero_le���AnnotcheckpointAnnothavemkmk��m1�e!�.����mpr���������le_sqrt���_x�����������mul_le_mul_left���%�#intro�%!� ���PInfo�=decl�decidable_prime_1pdecidable.�^decidable_of_iff'.���anddecidable��natdecidable_lo_hi��anotdecidable�decidable_dvd�PInfo�]TVMR�]_lambda_1VMR�]VMC�iT�e_fresh5����h VMC�]T�^natdecidable_lt �i�d decidable_of_decidable_of_iffdoc�]This instance is slower than the instance `decidable_prime` defined below, but has the advantage that it works in the kernel. If you need to prove that a particular number is prime, in any case you should not use `dec_trivial`, but rather `by norm_num`, which is much faster.decl�]equations_eqn_1�^ �'�]�A�^2�'�E�PInfo�rTATTR����rEqnL�rSEqnL�]decl�primene_zeronh.J��u�v.hn"� h2�-� �_x.��%Annot�QAnnot�R��Q�8�P�D���PInfo�tXdecl�primeposppp.@��|�}.�lt_of_succ_lt�f�PInfo�{]decl�not_prime_zero�Q�a�PInfo�`decl�not_prime_one�-��q�8�p�D��PInfo��bdecl�prime_two-��x�D��PInfo��ddecl�prime_three-bit1 ����D����PInfo��fdecl�primepred_posppp.�f�pred����.����@��lt_pred_iff�f�PInfo��hdecl�succ_pred_primeppp.!�������.�succ_pred_eq_of_pos�primepos�PInfo��kdecl�dvd_primepmpp-kp'���������p'dp�right����$"�%h'�elimrq��er�_x����one_dvd�e���������dvd_refl��PInfo��ndecl�dvd_prime_two_lepmpp��H6k�������������6��r�����dvd_prime�%or_iff_right_of_impr����r��ne_of_gt`%�PInfo��qdecl�primenot_dvd_oneppp.�o����.a��"�not_le_of_gt`%d%��gt?�����PInfo��tdecl�not_prime_mulaba1Bb1B�-�������B��Bh�"a���natmul_lt_mul_of_pos_left���k�%�S!�(�!���n,�5�8a��e_1"��e_2�=congr!��7%congr_arg���!��(�mul_one�v�������mp���8�dvd_prime_two_le��%dvd_mul_right���PInfo��wprvmin_fac_lemma_private����min_fac_lemmadecl��nkh���@has_subsub�has_sub����has_addadd ���������}����@����natsub_lt_sub_right_iff���������%��%le_of_not_gt�'��%natlt_add_of_pos_right��������PInfo��|decl�min_fac_aux_aux_meta_1well_founded_tactics��mk_xexprbooltt_xlist��has_bindsequnit��tacticmonadto_has_bind��interaction_monadmonadtactic_statetacticsave_infoposmk������������step����interactiveexact Quote _�_�measure_wf�����k��� ��Annotfrozen_name ��Annot��sqrt�����n����� Prenum2Annotanonymous_constructorwell_founded_tacticsdefault_dec_tac�PInfo�ρVMR��_lambda_1VMR��_lambda_2VMR��_lambda_3VMR��VMC���αVMC���s��t₂t₁βα�� VMC�������������tacticinteractiveexactFstep� Fsave_info����has_bindseqVMC�����well_founded_tacticsdefault_dec_tacdecl�min_fac_aux_main_meta_auxn����*dite�|��{h�|%��}itep�:% ��� �RecFn����%Annot�QAnnot�R��%�PInfo��VMR�VMC����natmul�o �h natadd�declmin_fac_aux_main_pack_wf_rec_mk_dec_tactic_aux_1�k�@���������%has_well_foundedrhas_well_foundedmkmeasure�����������8������-�n�C�n�9�A�S@���A�����n,�M��chas_lt����e_2�=����e_3�=�@>�.��U�%�K�U�?�K��eqtrans�������@���l�o���succ_sub_succ_eq_sub�l�o�w�����������PInfo��decl� _pack�_x�*��*well_foundedfix���/�1�3�����<��has_well_foundedwf��_x�_F_y��/�1�3���������<���0���@������������������:%�% �@����%��% %������Annot�QAnnot�R��%�PInfo�)�VMR�)_lambda_1VMR�)_lambda_2VMR�)VMC�2�a�4VMC�3��0�/�j_fresh)�����o �h �VMC�) ��*��3�2well_foundedfixdecl�)equations_eqn_1�� ���)��|���< ����Annot�Q��well_foundedfix_eq���������PInfo�;�EqnL�;decl� ������PInfo� �VMR� VMC� �����o �h ��decl� equations_eqn_1��!� ���� ����Annot�Q���;�PInfo�?�decl�min_fac_aux�����PInfo�@�VMR�@VMC�@��� decl�@equations_eqn_1��!�@���� ���Annot�Q�� equations_eqn_1�PInfo�B�EqnL�Bdecl�min_fac_main�������� �����:������PInfo�F�VMR�FVMC�F���h ��)decl�Fequations_eqn_1!�F���id_delta�7�PInfo�H�ATTR����HEqnL�Hdecl�Fequations_eqn_2!�6���;�>�PInfo�K�ATTR����KEqnL�Kdecl�Fequations_eqn_3n!�6���/�N���;�C�PInfo�M�ATTR����MEqnL�Mdecl�min_fac���6�PInfo�O�VMR�OVMC�O��Fdoc�OReturns the smallest prime factor of `n ≠ 1`.decl�Oequations_eqn_1!�O��Fequations_eqn_1�PInfo�Q�ATTR����QEqnL�Qdecl�Oequations_eqn_2!�J�Fequations_eqn_2�PInfo�U�ATTR����UEqnL�Udecl�Oequations_eqn_3�N!�J���/�Fequations_eqn_3�PInfo�Y�ATTR����YEqnL�Ydecl�O_sunfold���5�PInfo�\�decl�min_fac_zero�Mrfl�K�PInfo�]�ATTR����]ATTRsimp���]decl�min_fac_one�Q�Y�O�PInfo�`�ATTR����`ATTR�_���`decl�min_fac_eqn!�J�,����b��b�a�"�L�K�Z�b��b!�J�n��%�n�(�n��n���"�P��%�(����S��!���n,�����U�O�`�����k�����p�y��{��y!��cdvd_oneiff_false_intro�� �I����decidable���J�Annotshow����if_simp_congr�y��{������������if_false�����S�����A������������:���� �����Annot�Q�n,�����V��_a����3�����B�����b�"�T��%���(���. �k��& �S!�J�A��%�A�(�A��A��!��%�(���������n,��*�U� � �Y��)������������c�je_1,h�&%�l�Fα��t�ne_4 %e��p�e_5 ��j�.��y� �.�%�����y�j�&� ���X�.��T��.��j�je_1�E�l�F�m���n�ne_4�I�p��p�e_5�Leqdrec���j�r,�y � ��{�X� ����V�{�Y�X� �.��h�.��n�.�s ��.�s�n�w�{3�{� ���%�p�.�t����s���2�.�T�V���Y���3���.�%���X� �y���X� �.���%congr_fun�.�p�.��`�e���n�.�p�� �_�d�w���m���n�p%�^�c���&���m�����T�T�]���l�����Tsubsingletonelim��decidablesubsingleton���]��.���3���%�����?Annot�QAnnot�Riffsymm�&�natdvd_add_iff_left���PInfo�a� prvmin_fac_prop���� 3min_fac_propdecl��nk����m����%�PInfo���VMR��VMC������prv��equations_eqn_1��equations_eqn_1decl������,���.����3�3�PInfo���ATTR�����EqnL��SEqnL��decl�min_fac_aux_has_propnn2nd2��ki�"������m��o��%�1�.��.��������;�������;���������;_x�,��ie�@�����o� �C�1����������_x�"_F_y��/�1�3k�������.�<�i���q�?�����o���.%�1�X��X������q�����o�X�t�1� �� ����������qa���S�����@� ���� ��� ���:�� � �����Annot�Q�n,�����V��_a,�x�y��x3������� �dite������h���S�x�@�X����X���X���X�:��X� �y���Annot�Q�x�X�n,��������e_1�=����e_2�=�@�1��1�%�G�%���1��X�X���X���X�k���true��������iff_true_intro���X�����X���������X���X����������if_true���X��andintro�Y�X�X����o�y�{%� � � � "���Xmm2d� le_of_eq`�{%�%�{�c��{q�{�g�{%��-�{�{� ���������prime_def_le_sqrt�{� � 9� C�ymm2l� =d� ?����lt_of_lt_of_le`� M�{���@� M�{@� L��{�{�sqrt_lt� L�{�� �%��������x���n��� ������������������X����� ����X���X��� ���� ��� ��X��������� dk���S�1����.���:�.���.������.� ��.�n,� �� ������������ ��.�k� ������ ���� ���� ��.� ��.��� ���� ��.� ��.� �� ����.��� �� � ��.� �� �.� �����o�{�X%�V���<���k������o���)���@�{��%������� ����<���%���@�y����<���� ����<�.���� ��.��.� ��%� � �� �%������ �� �� ��n� �� &� �� �� ���� ��� ���� ��.� �� �� ��� ��.� ��.� �� .� �� ���� /�.� � �@�������.����� G�. �.��������y����S!� Q���<� X�����n,� ^���j� ^����� e!����� � k� f�U� Q� k�k� Q��� j��add_semigroupto_has_addadd_comm_semigroupto_add_semigroup�add_comm_semigroup� jchas_add����e_2�=����e_3�=�?���.�� ��%�G����� �� �� j�k�� � }��� �add_comm� z� ����� �� j� ]� k�k� ]� �� i� � ~� �� ���� ���� �� �� [� ��k�distribto_has_mul�distrib����to_has_add� ��� � ~� � �� �� ��� �� �left_distrib� ��� �� �� ��� � ��Z� ���������� �� ���add_left_comm� z��� propext!��� wadd_right_cancel_semigroupto_add_semigroupordered_cancel_comm_monoidto_add_right_cancel_semigroup]� j�� fadd_right_inj�� j� �� f��eq_self_iff_true�mm2d� ��:!��%@��%_x�!�$���y�nateq_or_lt_of_le��%�.%me�!�V�y������o��� ;%���y���{� Labsurd���7��������%ml�$orresolve_left!��y�@�Y��.�Y��n��[me�[�n������<����� L����<����� L�D�%�7�dvd_of_mul_right_dvd�)�7� >�Q��{� L�k�V�{_a,����7�n�73���h�X�Q�� L���V�_a,���7�73��������%Annot�QAnnot�R����.�%%�PInfo��� decl�min_fac_has_propnn1I�2�J���������O�����n0�O�S�1%�J%�n,����� d�������������%�����o�� ������1�����%����k���K��e_1�=�G%�J%��]���a��e_1�Eb��e_2�E�>��%�F���������3������� d���������4����� ��%�>��α��_inst_1�a��%%�%�5%�7%�9%dvd_zero%����� dx����x������forall_congr_eq�e�i��� d���6��imp_congr_eq��63� d�y���6h'��6trueintro�v�x��� ��>���_�}� ���������� ���forall_prop_of_true������� ��s��imp_self� �a����forall_const���inhabited� ��=��and_self��� �����and_true��le_refl`����O������%%�(%�%���n�����%��%�����min_fac_eq%��������d2���S�1���%��(��������n,��������������k������������������������������� ������� � ��� ��������o�� ���� ��� #kk2d� ������������n��� 3���������������������� �������� ;��� ��� <���min_fac_aux_has_prop�������!���K� �������@���I�+�,�D� _��� _� b���+��� _�D� a��� a�,� h�� a��+���������!�n���I�p�s����!�����I�����D� ���� �� �������� ��D� ���� ���� ��� �����������!�����I�����D� ���� �� �������� ��D� ���� �� ������� �����%����Y��mm2d� �X��%@%�.%mt� ��%�.e� ��_x� �����PInfo�ֶ decl�min_fac_dvdn�\����� V�J� �n1� ��_x� ����O�:�O���� �9��������J�%����� ��min_fac_has_prop�PInfo��� decl�min_fac_primenn1��-������_a����dcases_on����%����o��J�%���-�J�left�$right�2������ �J�.%�#������o�.�J�%� �B�J-�*right_left�Bright_right�����A�J� %�"-�:���X�:�����R���J�X���:� �[�c�mm2l�]d�_� �J�����%dvd_trans��k�����PInfo�� decl�min_fac_le_of_dvdnm��p�2%�� ���n1� �mm2d��_x�\����le_trans`�O%��$`�O��O������ ���PInfo�� decl�min_fac_posn�f�\�� ���n1� ��_x��� ���f�O��O��������min_fac_prime�PInfo�� decl�min_fac_lenH�f��� �!������min_fac_dvd�PInfo�� decl�prime_def_min_facpl�]�$�.��pp.� 6!��E_a���1�&��!�2���$� �@�K� �M!�*�right_left�Bright_right�W�"!�:�.�X�����c�:�.�������.�:����:����f_x��_a6���#� �!��%�*� ��-��� �� ���"�R��S���������PInfo�#� decl�decidable_prime�(p�*���prime_def_min_fac�.���0�J�\�PInfo�+�prt�+VMR�+VMC�+��,�o �Fnatdecidable_eq �pdoc�+This instance is faster in the virtual machine than `decidable_prime_1`, but slower in the kernel. If you need to prove that a particular number is prime, in any case you should not use `dec_trivial`, but rather `by norm_num`, which is much faster.decl�+equations_eqn_1�,�C�+�C�,�I�F�PInfo�1�ATTR����1EqnL�1SEqnL�+ATTRinstance���+classdecidable�+��decl�not_prime_iff_min_fac_ltnn2k���@���5�6��L����Onot_congr�����������;and_iff_right6������I����g�����j�jlt_iff_le_and_ne_���_�n�j�min_fac_le��PInfo�4� decl�min_fac_le_divnpos��np�L��has_divdivnathas_div%���<�=���>�L_a�'��%�7���C�8� �����(�)����(�)����:�F����E�)�A��*�+�"�;���.�:�D�f�.����S�����f����n,�����V�._a,��f����3�����S����f��6�8�semiring�n,�����V�����:��_a,��f��E���3����mul_zero���:����8�������(�)�����n��(�)���R�n�^���X�^�)!������"�S��� �R�S��O���O�n,���W_a,�������\3�le_antisymm_� �le_of_lt_succ� �Q��R>��)� �U��+� _a,��Y3�%�*� ��/�*not_le�'� �Q�%��%�,�D_a,�1�3�D�%� ��D�%or_false�%�Q�C����D�,�X_a,�H�X�H3�Y�� ��X�not_true�Q�C��� �Y�,�l_a,�H���X�H�3�n��� ��l���� �Q�C�!�R� �n�V�R_a,�H�!�^�X�H�� V�X3��� �� �R�Q�����R�V�y�R�}_a,���^�3���R�Z�R�Q��R�����,��_a,��Y��3����� �����not_and_distrib�R���� �Q�-� ���,��_a,�-�X�v3����� ������;� �.�succ_le_of_lt�� ��S���n,����V�O_a���3����S�����n,��� �V��_a���3��natdiv_one���(�)������"���S���������A�^�n��*α��chas_le����%e_3 �������e_4 �.�>���.��9�%�F�������9��^�^���^���)α��chas_div����%e_3�2������e_4�5�6�����.��]�%�@a�� ���]����X�'�k�X�'�'�V�X_a� ���'�n!�'�'���'�^�^�U�S�*���A�n,�*���V����^�A�^_a,�k����k��k��3�*�Anatmul_div_cancel_left�A�^�min_fac_pos�X�min_fac_le_of_dvd�X�A��A��A���%� ���^�S���A�^����^�A�n,�����V���A�^_a,� ���k�|3�������A�^��%�PInfo�;�decl�exists_dvd_of_not_primenn2np�LExistsm�������o�p�q�L������ �'I���%��� ������d����%��a��%�c�-%@��%�not_prime_iff_min_fac_lt%�PInfo�n��decl�exists_dvd_of_not_prime2nn2np�L��m��m��v�w�x�L��-����$���� �$�E����"�PInfo�u�decl�exists_prime_and_dvdnn2��p.�{�|��E��� � � ������PInfo�z� decl�exists_infinite_primesn��p��.� p�J���fact f1I���Y pp�� np�) ����B.�� ����"Annot�QAnnot�Rle_of_not_ge�'�%hge�*�% h₁��Y� h₂� �primenot_dvd_one��Annot�QAnnot�R���~����Y�natdvd_add_iff_right�������Annot�QAnnot�R�dvd_fact�������|Annot�QAnnot�R�����Y%Annot�QAnnot�R���`�succ_lt_succ��^�fact_pos�PInfo�~�doc�~ Euclid's theorem. There exist infinitely many prime numbers. Here given in the form: for every `n`, there exists a prime number `p ≥ n`.decl�primeeq_two_or_oddphp."!has_modmod�Ahas_mod����.���������natmod_two_eq_zero_or_oneh��orinlq!��%� �%�X��� ���� �����$"��dvd_of_mod_eq_zero%�������orinr�����PInfo���decl�factors_lemmak@�����S�����div_lt_self���S���������d�S�����I��������PInfo���decl�factors_main_meta_aux���������listnil���� m�S �@���A�A listcons �RecFn�����Annot�QAnnot�R�factors_lemma�PInfo���!VMR��VMC���!��_c_1�F��natdiv��declfactors_main_pack_wf_rec_mk_dec_tactic_aux_1k����/has_well_founded_of_has_sizeofnathas_sizeof�� �� Annotinnaccessible Annot���>�@�> Annot��������n�J�nsizeof_measure�9�<�I�n@sizeof�9�<�V�I�S@natsizeof�<�\�I@�<�? �C �E�n,�`�i�g�]�<��equations_eqn_1�<�_�h�p�h�S�i�b�d�n,�i�{�g�<�<���<�h�zadd_zero�add_monoid�z�PInfo���!decl��_pack_x����������;���:_x���_F_y��;������������������n�����������p����������������������������I������ ��� �@�&� �$%�������Annot�QAnnot�R�-%�PInfo���!VMR��_lambda_1VMR��_lambda_2VMR��VMC���!�4�4VMC���!�����_c_1�F����VMC���!�������9decl��equations_eqn_1 ������������;������PInfo���!EqnL��decl��equations_eqn_2 ��������PInfo���!EqnL��decl��equations_eqn_3�� �������� ���S �#���Annot�Q�������PInfo���!EqnL��decl�������PInfo���!VMR��VMC���!�����F������decl��equations_eqn_1 ��������PInfo���!decl��equations_eqn_2��������PInfo���!decl��equations_eqn_3�������� ���S �����Annot�Q�����PInfo���!decl�factors����PInfo���!VMR��VMC���!��doc��`factors n` is the prime factorization of `n`, listed in increasing order.decl��equations_eqn_1��������equations_eqn_1�PInfo���!EqnL��decl��equations_eqn_2������equations_eqn_2�PInfo���!EqnL��decl��equations_eqn_3������� ���S ����Annot�Q��equations_eqn_3�PInfo���!EqnL��decl�mem_factorsnp�has_memmem�listhas_mem�����_x�S���,�;��_x���_F_y�������(�%���5�"��������5ph������=��falseelim.�������������5����(��s���"��������5�?���S�D���"��������5ph�(��A%�H�����Z�����^ m�J�� �@������ h₁��'������ orcases_on�7%�'����� �%-�h₂�q�T������� Q�I� Q��� Q���u���.�Annot�QAnnot�R�c�j�$�m�olistmem_cons_iff��m%Annot�QAnnot�R�-��PInfo���(decl�prod_factorsn���!listprod��)��_x�S����;��_x��_F_y�����g!���2%���"�������H2���!�������������lt_irrefl`���������������f�p!���J�s�"�������h�f!������������Y�����"�������h�f�I!���#�J���&��������� m�� �@���� �!���$��d�� h₁�f� �S!���#%��k%��!�y%���x�|����n,��!�V��_a,!���#���t�� �� V� �3��listprod_cons�v�%�S�!!�����n,�!�B�V���_a,!�y���*� �!�I� �3�!�������S�B!�����n,�B�b�V��J���k�g_a,!�I�)� ��03�B��natmul_div_cancel'���g��������Annot�QAnnot�Rnatpos_of_ne_zero�h!�� ��a��% �I� �������� ����Q!� ���������V�����_a,� Z���� Z3����zero_mul���Annot�QAnnot�R�c!�i��a���gnatdiv_eq_iff_eq_mul_left���g������yAnnot�fAnnot�QAnnot�R�-��PInfo���2decl�primecoprime_iff_not_dvdpnpp��k�coprime%������������co��d�%��%�dvd_of_dvd_mul_left���S�����n,����� d������chas_dvd����e_2�=��e_3�=�@�.����%�K������������Z�� ����������nd���coprime_of_dvd�%mm2Amp� �_x��.�.%� /�.�c�q�.�g�.%���PInfo��>decl�primedvd_iff_not_coprimepnpp��k������-�.�/�����H��iff_not_comm������natdecidable%�primecoprime_iff_not_dvd%�PInfo�,�Bdecl�primedvd_mulpmnpp�k��%����7�8�9�:���b�fH�b�����%a������or_iff_not_imp_left���o���h�r����������������X��%orrec���e��%h��dvd_mul_of_dvd_left��%h�edvd_mul_of_dvd_right�%��PInfo�6�Edecl�primenot_dvd_mulpmnpp�Hm���Hn��o�����G�H�I�J��K���L��� ������s�c�����primedvd_mul���%�S������n,����� d������a�Oe_1�E�&%����� d���������e_1�E����e_2�E���%�*����� ���������s�� ��s����s� ����or_self�� �����not_false_iff��PInfo�F�Jdecl�primedvd_of_dvd_powpmnpp�h�has_powpow�has_pow%���W�X�Y�Z��[��rec�Y�[����� ���[����+��������%nIH�(�[� ����p����pow�.%�9�.�?�c�9��<�.�=�?����<�.��n�?%�PInfo�V�Ndecl�primemul_eq_prime_pow_two_iffxyphp.hxI�hy�_k!����+�A��7��e�f�g�h.�i�_�j�_��c�hh�c pdvdxy���.� �fcase� �� � ��drec�9�X�9�m�z�|�iI���j�_�k!� [�����l�y����!� ;�{���{�m�z�e�f�m���iI%�j���k!�����l� ;�`��%��� L�m� >�.�� L��� L�aha����#"�7��7��7�c�8$�����7� L��%!����Q!��s�semigroup��7!�7���,��_a,!��%� ��3����� �����eq_comm���7�Q!���7����7�7���,!������_a,!�����������3����� �����natmul_left_inj�7���7���7� L�Q!���7������V�����_a,!����%� ��� V��3���mul_assoc���7��Q� ��7��V�,_a,�����3�-��natpow_two�7�Q!�� ��,�-�W_a,!��X� �2!�z� �23�C� �_x#�S���������n,�a��� d�a�=���4�^��� d�^�������U�X���n�^�Q���^�p�X������k����chas_mul����e_2�=����e_3�=� ���.����%� �������������%�Z��������� ��m������`��� d�`�m���U� ���n�`�Q�I�`� d�I!��� ���`�U�G������X����� � ��� �2���<��� ����`����� �������7������������_x��falserec�a�����������������!�������������k�G���� ����� �����n�����t���x������� � ���%����� �2����� �������������� �����natmul_right_eq_self_iff��� ��� ������������%�m�|�i���j�_�k���l��of_eq_true��� d��a��jI� >�k!�@� L�� ;�l���F�7� � L��� L���D��I� ;�k!��� >���l���H�� >��� >�V�D��!�r� ;��{�l�E�\�� ;!� L� ;�f�D���B�i���!� >���u�D�����~�D��������is_commutativecommlatticehas_infinf��semilattice_infto_has_inflatticesemilattice_inf_botto_semilattice_inf��semilattice_inf_bot_of_bounded_lattice��bounded_lattice_Prop��inf_is_commutative������� d������������������3���������������� d������������and_eq_of_eq_true_right����eq_true_of_and_eq_true_right�������V�����f�V���u�f���~�u���~��imp_eq_of_eq_true_left�x��� d�x�B�� ;�.��eq_of_heq�x����a'e_0�=�V%��heq� L���heqrefl��%�i������i�k�����i������i������comm_semigroup_to_is_commutative���.� ;eq_true_intro�����u�l�x�}���m����m�k�i���l�����f�k�m�t���Z�� d�Z������n,�Z�3�Znot_eq_of_eq_false�eq_false_intro�����V�j�Z�e���E�1� d�E������n,�E�73�E�%�6�'�6%���i�E�U�e�f�m���i���j���k���,�l���`��%���m�.��O���O��o�p�R��"��_��_�co�_$�`���_�O��%!����Q���_!�_���,�u�r,���o3�u�x� ��u�x���_�Q!���_����_�_�u�,!�������t,!���o����o�o3���u� ����u���_���_���_�O�Q!���_������V������w,!���o%� ��� V��3�����%�_��Q����_���V���y,����o��3�����<�_�Q�B�����W�|,�H���L��3������}#�S��o��o���n,����� d���=���4����� d���p�o���p�o�n���Q������w���o�k�����o���o�o���o%�Z�o�o�o�� ������o����� d��������o�n���Q����� d��!��� �������6���o� � � �������<�o� ��8�����o� �o���o�_��o�o��)������`�����3��5����5�7�o���5!���6���f���i������ ����� �����n����o��w� �v��o� � ���%�o�o� �����D� ��k�f�I�6�o�M� ��f���!�o� �M�,��.� ;�������� d������������1����I�1�����I�����I�����E�,��3��� d�������������������������������������-�F���.�c���[�.������.����.��%Annot�QAnnot�R�S�t��$�n,�t��V�s_a,���3�t��S����n,���� d�����������<�� ��������������F��b%����%�����7��9�%dvd_mul_left�%���_x�h_a����A��#��������k�m�B��.��k� ��.�"_x!�z�X�� �X��}��X��X��_x!�@�{�� �������[��<��PInfo�d�Sdecl�primedvd_factnphp.ko����%������.�brec_on����%��_F�below������.������.����%�������k��^��������+�"k��Y��(�iff_of_false������%not_le_of_lt`�����%�������n�"k��Y�o���o�S��k���p�^���n,�����V�Y�p_a,k���Y��B��k�"��3�����fact_succ�S��k��p�����n,����,��_a,k����s����k��3���� ��������p�^��S�k������n,��%�,��_a,k���s������k�,��3���� �����pprodfst��natadd�+�rec n��punit ��ih��pprod �� ���F�@�� �I�A�R�F����#��h�#���+�C�����s�succ_pos%�le_succ_of_le�%h���������A���,�Clt_or_eq_of_le_���functioncomp�t�C�x���+�C�"�%h�v��� ����s��S�������n,������_a,�9����3���������%�PInfo���ddecl�primecoprime_pow_of_not_dvdpmapp�h��e���$���������������1coprimepow_right�%��symm%������%���X�%�PInfo���mdecl�coprime_primespqpp��pq��k���%�^%��������������������X�%�W���%�g%�E��PInfo���pdecl�coprime_pow_primespqnmpp�"pq�"hI�����q��6������������"���"����coprimepow�.��������.����coprime_primes�.�%�PInfo���sdecl�coprime_or_dvd_of_primeppp.i�������.���S�-�+��*�n,�-�3�,�,_a,���e�:3�-�2� ��,�2�primedvd_iff_not_coprime%decidableem�*�T�PInfo���wdecl�dvd_prime_powppp.mik�+��k�r��%H�Zq�6����.�����#����k�\�����[���Zq�����Sk�$�+�����Y���+���vq�q���n,�~��� d�~k� �� ���a��e_1�Eb��e_2�E�k�k�%�*k��t� �� d�t� �����s�k�s�$�chas_pow����e_2�=����e_3�=� ���.����%� ���������+��nat_zero_eq_zeronatpow_zero�� ���� ����}� �� d�}a"�6�� �������� W����p�H��He_1 �H�F�H%���|��funextxx�wh�v�y������ d���v����� �����exists_prop�v���4�v� W� d�v���� W�]�.����e_2�=����e_3�=�@�.���%�K�����+���� ��� W�le_zero_iff����3��� ���������q�q��exists_eq_left����U������� �����iff_self� ��mIH�p�����w� �k�q�s�����Y�������`q�zh�w��%q����|k��z�������Y�������r�7��ae�k�V��X��k����.�����Y��������q�k�Sk���X�q�����Y��������!��y���yk�������X���n,�����V��_a,k���%������������!��{���k����3�����pow_succ�X��S��k�����X�����n,�����V�����X_a,k������.������3���������X�S��ko�����n,�����,�F�F��_a,k�������������3����� �����natmul_dvd_mul_iff_left�X�����X� �S��k�����Y���.��� ������n,��� �,��_a,k�������3��� � ���� ��� ��h� ����Y������ 5�7������ :�����Y���� ��� >!������kh_h� 9�$��� ��� M�A��%��Y� M� Q�����Y�������� V!�� >��� >h� Me� P����Y���Y��� e!��� �� L���\��� U��� s� Z� [���succ_le_succ����S!�� ;�.�J��!���.� ;� ��n,� �� ��V��� ;�._a,� v� V� u3� �� ���� ;�.�S� �!���J�� ;� ��n,� �� ���_a,!��� >� u!��� >� u3� �� ���� ���������������Y��� ��� ��A� C�h_h��� L��� =��� �� B� O� �Y� �� ������Y������� ��� \�� ��� ����� e�� k�����Y��� ;��� �����U���+� U�� Z� [�+���������Y������� �� �1�� L� >�S� ���� g�n,� ��!�V_a,�7�!3� �� g�� g�Q� h� i�+� h�U� g� g��� g�!�k�!� i���� L� L��� L�+������ L�o� L� k��n�Y�� h� i�p�� �%� q%�����!A� �1��le_of_succ_le_succ%���Q!���7��+%�7��!N�,!�M�!P_a,!������!C��3�!Q�!S� ��!V�!Snatmul_right_inj�7�X�!N��Q�!M�+�s�!Q�V�!n_a,�!Y�1���!Y3�!o�!P���7%�Q!� �X�!n�!o�V���7�X_a,!����!s� V�!s3�!��!L���7�X�������w�o���������Y�������!����d�!��S�y�����s���r���t�n,�y�!���_a,�����������A������������q��3�y�coprimeeq_one_of_dvd%�n�primecoprime_pow_of_not_dvd� ��%���!��� q������!�����������Y�)�!���x�)�y���kd_h�w� L�������"�A��%�0�Y�"�" ������l�"e�"�S� ��k� =�k��"�n,�"�"��_a,�9����X�"3�"�"�pow_dvd_pow�{�� =�PInfo���zdecl�mem_list_primes_of_dvd_prodphp.l��pH�(�������s%�6�7.�6�7.�8�listbrec_on�8���"F���"G�'�%�8�_F�;below�8���"F����"G�'�.%�8��=�"Z�8���"F��9�"G�'� %listcases_on�8��=�"Z�8���"F�� �"G�'��%��9�:�(%���� ��%�"n��=�"Z�8���"F�� �"G�'�X%��"h₁�9�:�(��>��h₂�"����"��"��"��A�"��B�"��D� �"��"���X� l_hdl_tl��=�"Z�8���"F����"G�'�y%�$�"h₁�9�:�(�"�>�%��h₂�����"��"��"����E�"��F�"� h₃������� hq-� �p�E�.�E����'���"��.��c�E�r�"��"��"������.�"��{h�"��_x�'� >���� ;��Q������"��,�"�_a,���{� 3�"��"�� ��"��"�not_not�"��J� ;��Q��Y��"��,�"�_a,��F� �v3�"��"�nedef� ;��Q���� ;��"��,�#_a,���� >� �v3�# �"�� ��#�"��� ;����Q����# �,�# _a,��� 3�# �# � ��# �# �F� ;���listmem_cons_self� ;�.h�"� hlpH�(��� ���"��#� ��"��"����� >� ����"��#H�=�8���"F��!�"G�'��%��?recn����Fhdtl�ih���H�I�8���"F��O�"G�'�_%�F��T�I�#W�#n�F�.Annot�QAnnot�Rphlp�#@�.���'�#�X� "�X�#~� ���X� ���#��#�Annot�QAnnot�R%��#:��Annot�QAnnot�R�_x�B��#���y����9���PInfo�5��decl�mem_factors_iff_dvdnphn�ghp��k�'%����a�b�c�g�d����#��h�#��_x�������prod_factors�%listdvd_prod��#�h��mem_list_primes_of_dvd_prod��#��mem_factors��#���#���#���#��PInfo�`��decl�perm_of_prod_eq_prodl₁�l₂��!�"G���pH�(�����$listperm���n��o���#���$��$�"P�n��$��n�_F�"Z�$ �o��!�"x�#���p�q�(�����$�n��o���#���$��$�t�$ ��"l�n��!�#��"���"w�t�$ %�$�� ��!��������p�q�(����t�$ ��"l�o���"F��$!�"G�$�%���$&��$!�$ �"�$)��rpermnill₂_hdl₂_tl��pH�(�����$!���$9�"�$�"��"� ha� �D�~�$?�"���%��#:��Annot�QAnnot�R�#����}listprod_nil�v�#����(%�$ ��$ �$X�#��I�%��$W��$b�$`�9%��o��$_�%l₁_hdl₁_tl��!���"����.��p�q�(�$W���t�$ �$W�"l�o���"F�!���#�.��"G�$�#��.%�X��$&�!���#���$ �"�$�"��"� ha� � �D�9�$�"���.�"������#:��.Annot�QAnnot�R�_x�9�$P�}�$U�$��$��$ �$��y�.����$���$��$��9��.�o�.�$�l₂_hdl₂_tl���$<�!���$��$=�"�$�"�� ��"� hl₁'pH�(� �� hl₂'pH�(�?erase���$����� ha�"n�$� hb�$�$��#�y�$��$��y hl!���y���$��$��{ �utrans�"����{�#���$��#D���$��uskip���{�$��=�$ �{�#]�Z�[��\���H�I�$ �F�{�T�I�$��%�F�X�$����ssymm�#D�$�Annot�QAnnot�R�c!� [�$�� [�$��$����{�$��$����{�X�{�#:�{�y�S�%!!��#�{�y�% �n,�%!�%4�V�y�{��y_a,!�����{�����$�� V�%A3�%!�%2��%2�%;�9�y�{�S�%4�%3��%0�$��n,�%4�%V�V�%9��$�_a,!��$��{�%A�%`3�%4�%U��%U�%\�9�$��{�S�%V�%3���s�ucomm_monoidto_monoid�comm_monoid�{�%v�$��n,�%V�%}�V�%{�%T_a,�%`��$��%c3�%V�%|��%|�%��rprod_eq_of_perm�%u�$��%T�Annot�QAnnot�R�rperm_erase���y�$�Annot�QAnnot�R�#�������#:���X�$���_x�����#���X�$�%�S���%����y����X�n,�%��%��V��%�_a,�����$����%�3�%��%��9�X���o���%�Annot�QAnnot�Rphp�$�� .�|mem_of_mem_erase���y�$�Annot�QAnnot�Rphp�$���Rmem_cons_of_mem���X�.%�%��%��%�PInfo�m��decl�factors_uniquenl�h₁�$h₂�"w�$%�#���������&&���"w hn�f� �perm_of_prod_eq_prod��#��S!�"��#��&1��n,�&2�&4�V�#�_a,!�$"�����&:3�&2��#�%�#�Annot�QAnnot�R���h��listrec������"F���#������$&���$!��D�&Z����&Z���$ ��al�hi�&W���$���!�$X�natmul_ne_zero��"�O��a�������$I%php�$��%��.��Q!���#��!�#���V�#�_a,�$��� W3�&��#��#���Q�&4�&1���_a,�&:��&?3�&4�%�PInfo����decl�succ_dvd_or_succ_dvd_of_succ_sum_dvd_mulpp_prime.mnklhpm�\�hpn�x�hpmn������%�`�z���.�z�������.�����������&����&����&� hpd��z���� �s hpd2� �������� hpd3�����A����� hpd4������������. hpd5�B�����k� �B���k� �����X���y���� �������E���y�&��E�&��&��&���&�����J��� ;�{��J�X� ;�y�mul_dvd_of_dvd_div� ;�{�'� ��'���' �'�'�y�'�Annot�fAnnot�QAnnot�R�c�B��&��&��&����{�&��&��yAnnot�QAnnot�R�S�&������G��&��&��n,�&��'<��y�y���y�&��';natdiv_mul_div�X�&�� �&���Annot�QAnnot�R�Q���&���� ���&������� ��'X�&��b�Ya��e_2�=����e_3�=� ����.��'b�%� ��'b����A�A���A�'W�&�natpow_add���.�Annot�QAnnot�R�dvd_div_of_mul_dvd�&��X�Annot�QAnnot�R�PInfo����decl�primes��subtypep.�PInfo����VMR��VMC��doc��The type of prime numbersdecl��equations_eqn_1eq�����'������'��PInfo����ATTR�����EqnL��SEqnL��nspace�primesdecl��has_reprhas_repr�'�has_reprmk�'�p�'�reprnathas_repr��val�'��PInfo���� prt��VMR��VMC���� ���'�natreprdecl��equations_eqn_1 �'����'�2�'��'��PInfo���� ATTR�����EqnL��SEqnL��ATTR�2����class������decl��inhabitedinhabited�'�inhabitedmk�'�subtypemk�'��prime_two �PInfo���� prt��VMR��VMC���� decl��equations_eqn_1 �'����'�2�'��'��PInfo���� ATTR�����EqnL��SEqnL��ATTR�2����class������decl��coe_nathas_coe�'�has_coemk�'��'� �PInfo���� prt��VMR��VMC���� c�'�decl��equations_eqn_1 �'����'�2�'��'��PInfo���� ATTR�����EqnL��SEqnL��ATTR�2����class������decl��coe_nat_injp�'�q�'��!coe�'�coe_to_lift�'�coe_base�'��'��'� �'�%���'����'�h�'�subtypeeqx.%�PInfo����decl�monoidprime_powu_1α��_inst_1monoidhas_pow�'����'����'���mk�'�xp�'��]�monoidhas_pow�%�'� �PInfo���� prt��nspace��VMR��VMC���� ��'������monoidpow_maindecl��equations_eqn_1�����'����'����'������(���'����'���'��(�PInfo��� ATTR����EqnL�SEqnL��ATTR�2����class�����EndFile