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�'�{inittacticrcases���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_assocPInfocan_liftindluvαβ�Cn}�~e_1coeacond� prfx�Existsyeq }mk � }������������ � � ����&�� �� ���5�5 �nspace}prt}recdecl}sizeof���xnat��}rec�xY�2�3�<has_addaddYnathas_addeehas_oneoneYnathas_onesizeof� default_has_sizeofl�E�E�� �)����PInfo�ATTRreducibility���prt�decl}has_sizeof_inst���has_sizeof ��has_sizeofmk ��PInfo�ATTRinstance���class����prt�decl�sizeof_spec����2�3�<eqY� i���2�3�<eqreflY��PInfo�ATTR_refl_lemma���EqnL�prt�gind}�decl}coe���c ��� Proj}��� }rec��D� ���PInfo�ATTR����proj��decl}cond����3��� Proj}���3���� ���PInfo�ATTR����proj��decl}prf������� � � ��� Proj}�������� �� 4� 6�5 � ���PInfo�ATTR����proj��decl}rec_on~��������D�E�N 5�������}rec~� �PInfo�ATTR����auxrec�prt�auxrec}rec_ondecl}cases_on~���#�PInfo�ATTR����auxrec�doc}A class specifying that you can lift elements from `α` to `β` assuming `cond` is true. Used by the tactic `lift`.decl}no_confusion_type~���Pv1�v2(������(�~� �>�l����5�� �)5�5 ��5G��G���1� ��B�coe_eq���1cond_eq�!��M�B�1�PInfo�ATTR����prt�decl}no_confusion~�������(h12�>�~� ������(��jeqrec'& a�yh1a�g5 �k5 h11�g�y�'()5��}�� ������G��1��1�M���L�G�B��R��B�1�)(�N �(#���PInfo�ATTR����no_conf�prt�decl�inj����2�3�<�l��/��8��g�<5 ��and�L��15 �R�A���2�3�<�l��/��8���}no_confusionG��G5 �� �����R��15 andintro�OG�� �PInfo�decl�inj_arrowl����2�3�<�l��/��8���P���� ������2�3�<�l��/��8������ andelim_left�����inj��B�1G5 andelim_right�����!�PInfo�ATTRclass��}class}declcan_lift_attruser_attributelistnameunitid_rhs�:user_attributemk�7�9coe11string�6coe_to_lift11�A�6coe_base11�A�6string_to_name Str_can_lift Strinternal attribute used by the lift tacticoptionnonedecl�6prioYpersistentbooltactic�9�Sdecl�6�Wuser_attribute_cache_cfgmk�7_x�7 �Umonadto_has_bind�Uinteraction_monadmonadtactic_state�7�7attributeget_instancesnamemk_string Strinstancenameanonymousls�7listmfilter�U�g�6l�6�iprod�5exprbooltt�{�T�i�{�~���{Fmk_constFinfer_typeFmk_local_pis_p�~_a�~prodcases_on1�|�{��~�U�Tfst�|snd�{�;��return�U�g�T�is_app_of�m Strcan_lift�plistcons�6�qlistnil�6a�9punitreflecthas_purepureleanparserapplicativeto_has_pure��alternativeto_applicative��leanparseralternative�9unitstar �PInfo� VMR�_lambda_1VMR�_lambda_2VMR�_lambda_3VMR�_lambda_4VMR�VMC� αVMC�S#s�f��6� tacticinfer_type Fmk_local_pis_main Mnameanonymoustcharof_natf�%i�%l�%_�%n�%a�%c�%stringemptystringstr�)�)�)�)�)�)�)namemk_stringexpris_app_ofVMC�?!��f��7�#e�%c�%n�%a�%t�%s�%n�%i�%�'�)�)�)�)�)�)�)�)�+attributeget_instances .9���listmfilter_mainVMC� sleanparser_stateVMC��8 �#t�%f�%i�%l�%_�%n�%a�%c�%_�%�'�)�)�)�)�)�)�)�)�)�+c�%i�%t�%c�%a�%t�% �%t�%f�%i�%l�% �%e�%h�%t�% �%y�%b�% �%d�%e�%s�%u�% �%e�%t�%u�%b�%i�%r�%t�%t�%a�% �%l�%a�%n�%r�%e�%t�%n�%i�%�'�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)��#e�%c�%n�%a�%t�%s�%n�%i�%�'�)�)�)�)�)�)�)�)�+� �ATTRuser_attribute���USR_ATTR�declnatcan_lift_proof_1ninthnhas_lele��inthas_lehas_zerozero��inthas_zeroExistsY�Y����@Y���DY���GY��inthas_coe�:���<���Eintro2Y���;nat_absintnat_abs_of_nonneg�PInfo�9( decl�8can_lift��Y���Y��n�����9�PInfo�8( prt�8VMR�8VMC�8( aYintof_natdecl�8equations_eqn_1����8������PInfo�R( ATTR����REqnL�RSEqnL�8ATTR����8class�L�8��declpican_lift_proof_1�wιαiβi�V_inst_1ican_lift3)fi hfi can_liftcond3�)�E3i���g�`55i5can_liftcoe3�}�W�X��Z� �\��_��a��H6��%iclassicalsome4x�5��3 can_liftprf3}�)funextx}�f�}��Ficlassicalsome_spec3�>�E�PInfo�U, decl�T��V�W�X��Z� �\�can_lift5��e )�W�X��Z� �\��;5��cf�c�f ��)f���U��V �PInfo�T, prt�TVMR�TVMC�T, �f�u�\�Z�X�Wdoc�TEnable automatic handling of pi types in `can_lift`.decl�Tequations_eqn_1��V�W�X��Z� �\���?�V�d�T?@B �z�W�X��Z� �\��E�d���PInfo�x, ATTR����xEqnL�xSEqnL�TATTR����Tclass�t�T��decltacticget_lift_prfhoptionpexprold_tp�{new_tp�{inst�{e�{ssimp_lemmasto_unfold�7�U�{�{���~�{��{���{���{�������7�;��ditecoe_sortFF�Tcoe_sort_bool�|is_some��5booldecidable_eq���z��h_some�����yi_to_exproptionget��prf�{����prf_ty�{���ymk_app�m Strcond�����{G����5�����{Ftransparencysemireducibleexpected_prf_ty�{�i�9�{has_orelseorelse�Ualternativeto_has_orelse�Utacticalternative�9�yunify���ff���9��dsimplify tacticdsimp_configmktactictransparencyreduciblesimpdefault_max_steps�z���z�z�z�z�z�z���zexpected_prf_ty2�{�iformat�9has_appendappendtacticpformat��has_append����to_pfmt�Ahas_to_format_to_has_to_tactic_format�Astringhas_to_format Strlift tactic failed. The type of��pformatmkformatline����� Str ���{exprhas_to_tactic_format ����� Str������ Stris����������� Strbut it is expected to be�������yfail�9��formathas_to_format_x�9���{ ��not���i�6�{�yget_unused_name�m Str_x�p�SYprf_nm�6�������������� �����yassertprf�{���ydsimp_target�@��opt_paramF�����S���D���dcoe_option�� ��_x�9���yswap_x�9�:�PInfo�z? VMR�z_lambda_1VMR�zVMC����? ��f_fresh ���{��_fresh ���{��_fresh ���{��_fresh ���7��_fresh ������simp_lemmasdsimplify ��f�%o�% �%e�%p�%y�%t�% �%e�%h�%T�% �%.�%d�%e�%l�%i�%a�%f�% �%c�%i�%t�%c�%a�%t�% �%t�%f�%i�%l�%�'�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)stringhas_to_format����to_pfmt ��formatcompose � �� formatline��pformatmk �� � � ���� � ��� �% �%�'�)�)������ �� ��� ������ � � � � �!�' ���, �-���'������ �6�<�� �A �B�T ���� �F�M�R�Y �Z�`�� �e �f�� s�%i�%�'�)�)������ �y����� �������� �������� �������� ���� �% �%�'�)�)������ �������� �������� �������� �������� ���r�'������ ������� ������ ���� ��"���' �(�^e�%b�% �%o�%t�% �%d�%e�%t�%c�%e�%p�%x�%e�% �%s�%i�% �%t�%i�% �%t�%u�%b�%�'�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)������ �������� �������� �������� �������� ���J �% �%�'�)�)������ �������� ��� ���� ����� ����� ��6�'������ �(�/�4�; �<�C�H�O �P�W�\�c �d�k�p�w �x����� �������� ���� �� �� ���� �� �� ���� ��?fail�� VMC�z�1? a�f���7�������{���{��{�~�{�{��optionis_some_main��_main ��#x�%_�%�'�)�)�+tacticget_unused_name � �#t�%f�%i�%l�%_�%n�%a�%c�%�'�)�)�)�)�)�)�)�)�+d�%n�%o�%c�%�'�)�)�)�)�+tacticmk_app ek Fassertp q���tacticdsimp_target �� Fswap �� �� � ��get_maintactici_to_expr ��+ � ��$�#t�%f�%i�%l�%_�%n�%a�%c�%�'�)�)�)�)�)�)�)�)�+d�%n�%o�%c�%�'�)�)�)�)�+�� �� �� tacticunifyinteraction_monad_orelse ����" �) decl�yliftp��t��h��n�7�V���������������7�;�V���9���ypropositional_goal�1�A�� Strlift tactic failed. Tactic is only applicable when the target is a proposition._x�9���� e�{����old_tp�{����new_tp�{��������������inst_type�{�����{�ymk_instance���{����� StrFailed to find a lift from ������ Str to ������ Str. Provide an instance of��'�0�{���3inst�{�i�5���9�j���get_cache�7�9can_lift_attrl�7�mmap�U�g�6���yresolve_namecan_lift_instances���i�x���7�9�ymk_simp_set�z��listmap����simp_arg_type�ysimp_arg_typeexpr_p��_a�������7����V�����7�����yget_lift_prf�DG�1prf_cond�{ prf_nm���6iteF��expris_local_constant�����z���6�local_pp_name�z�S�6���ymk_mapp�m Strprf�������{�@�{��D�{��h�{�B���1�����M�����prf_ex0�{ prf_ex�{coe_fnFF�{exprhas_coe_to_fun�z�H�9��neF�7���decidableF�7a�7b�7listdecidable_eq�6�!�6�"�6namehas_decidable_eq�.���U�6���6listhead�6nameinhabited�.������ ���O�z�D�F��N�Pnew_nm�6�+��has_ltltYnathas_lti�'length�6natdecidable_lti�d�Dhn�e�F�'nth_le�6i�3�F�e�������.���v�z�D�F�m Strrfl�p�J�m Strh�p�Oeq_nm�6�+�Ptemp_nm�6���ynote�S�{ temp_e�{���ydsimp_hyp�k�1G��_x�9���yrcases�pexprof_expr��tacticlist_Pi�>rcases_patt�����yrcases_pattone ���� ��������_x�9��when�U�g�F�����2�T�!�T�"�T�����z���yget_local e�{�yinteractiverw��interactiverw_rules_tmk���Irw_rule�Lmkposmk��Ynathas_zero���z�������Sposinteractivelocwildcardtacticrewrite_cfgmktacticapply_cfgmk���z�Ynew_goalsnon_dep_first�z�z�z�z��occurrencesall_x�9���������6�1�,���'nth�6bit0Ydi�1anddecidable���������z�2���!���"��optiondecidable_eq�6�:���1�Vh_prf_nm��������6�Bandleft�����B�������B�yclear�g�F��yskip�PInfo��P VMR��_lambda_1VMR��_lambda_2VMR��_lambda_3VMR��_lambda_4VMR��_lambda_5VMR��_lambda_6 VMR��VMC�l�rP ��f��_fresh �H��{��_fresh �H��{��_fresh �H��{ �%m�%o�%r�%f�% �%t�%f�%i�%l�% �%a�% �%d�%n�%i�%f�% �%o�%t�% �%d�%e�%l�%i�%a�%F�%�'�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)������ ����� ������ ���� ����� ��] �%o�%t�% �%�'�)�)�)�)������ ����� ������ �� �� � �� ��� ��If�%o�% �%e�%c�%n�%a�%t�%s�%n�%i�% �%n�%a�% �%e�%d�%i�%v�%o�%r�%P�% �%.�%�'�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)������ ������ �� ���� ���� ���� �� �� ������ �� ���5 �% �%�'�)�)������ ���� ���� �������� ���� �� �� ��� ��� � �!�'������ �� � �& �'�. �3 �: �;�B �G �N �O�V�[�b �c�l����VMC�mP �VMC�nP a��VMC�o&P ��f��_fresh �IO�6tacticget_local pexprof_expr�IrwVMC�p�P ��f��_fresh �I=�{��_fresh �I9����_fresh �I4�7��_fresh �I3����_fresh �H��{��_fresh �H��7namehas_decidable_eq�$ ,�,is_local_constant�� &�#x�%_�%�'�)�)�+��+�,local_pp_name2�*�#head_main 3��#length_mainnatdecidable_lt 9_���� >J�#h�%�'�)�+��^�#l�%f�%r�%�'�)�)�)�+f�#nth_le_main g� �#x�%_�%�'�)�)�+�� x�Fnote ��� ��dsimp_hyp �� ���>rcases �� �o���� ��� �����mwhen ������ ����#nth_main���f_main ��� ��� ��� ��tacticskip����� ��tacticclear����� � � VMC�q dP ��f������_fresh �I5�{���7������_fresh �I&�{�w�{�z�{���{���7�#t�%f�%i�%l�%_�%n�%a�%c�%�'�)�)�)�)�)�)�)�)�+f�%r�%p�%�'�)�)�)�+tacticmk_mapp M^ exprapp ��{ �p VMC���jP ��f���7������������.�%n�%o�%i�%t�%i�%s�%o�%p�%o�%r�%p�% �%a�% �%s�%i�% �%t�%e�%g�%r�%a�%t�% �%e�%h�%t�% �%n�%e�%h�%w�% �%e�%l�%b�%a�%c�%i�%l�%p�%p�%a�% �%y�%l�%n�%o�% �%s�%i�% �%c�%i�%t�%c�%a�%T�% �%.�%d�%e�%l�%i�%a�%f�% �%c�%i�%t�%c�%a�%t�% �%t�%f�%i�%l�%�'�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)�)������propositional_goal�� ���d�� ���]� ���V �� ���O �#t�%f�%i�%l�%_�%n�%a�%c�%�'�)�)�)�)�)�)�)�)�+�� ���H �l tacticmk_instance�� ���A�user_attributeget_cache ����tacticresolve_name��mlistmmap_main�� ���:�n�#map_main��mk_simp_set ��3 �z ��,���� �������� �q �1�8�?�F�M �T �[ �b doc��Lift the expression `p` to the type `t`, with proof obligation given by `h`. The list `n` is used for the two newly generated names, and to specify whether `h` should remain in the local context. See the doc string of `tactic.interactive.lift` for more information.decl�yusing_texpr�����;�]optional������has_seq_rightseq_right��applicativeto_has_seq_right���to_applicative���e���9���4parsertk Strusinginteractivetypestexpr �PInfo�� VMR��_lambda_1VMR��_lambda_2VMR��_lambda_3VMR��VMC�� a��VMC��L s��g�%n�%i�%s�%u�%�'�)�)�)�)�)leanparsertk "��' (:�� ,38? @FVMC�� �3��VMC�� ������parser_orelseTKto�NOTAtoto��decl�yto_texpr�����;�w�n�o Strto�s�PInfo�ہ VMR��_lambda_1VMR��VMC��� ����VMC��1� ���o�%t�%�'�)�)�� �� +�� $)decl�yinteractiveliftp��parse�����exprreflect���st���yto_texprh�~�����optionhas_reflect���� Quote���yusing_texprn�~�7��7listreflect�6��6namereflect Quote�6��with_ident_list�V������������������tacticlift �PInfo�ޚ VMR��VMC��� ������������������doc��Lift an expression to another type. * Usage: `'lift' expr 'to' expr ('using' expr)? ('with' id (id id?)?)?`. * If `n : ℤ` and `hn : n ≥ 0` then the tactic `lift n to ℕ using hn` creates a new constant of type ℕ, also named `n` and replaces all occurrences of the old variable `(n : ℤ)` with `↑n` (where `n` in the new variable). It will remove `n` and `hn` from the context. * The argument `using hn` is optional, the tactic `lift n to ℕ` does the same, but also creates a new subgoal that `n ≥ 0` (where `n` is the old variable). * You can also use `lift n to ℕ using e` where `e` is any expression of type `n ≥ 0`. * Use `lift n to ℕ with k` to specify the name of the new variable. * Use `lift n to ℕ with k hk` to also specify the name of the equality `↑k = n`. In this case, `n` will remain in the context. You can use `rfl` for the name of `hk` to substitute it away. * You can also use `lift e to ℕ with k hk` where `e` is any expression of type `ℤ`. In this case, the `hk` will always stay in the context, but it will be used to rewrite `e` in all hypotheses and the target. * The tactic `lift n to ℕ using h` will remove `h` from the context. If you want to keep it, specify it again as the third argument to `with`, like this: `lift n to ℕ using h with n rfl h`. * More generally, this can lift an expression from `α` to `β` assuming that there is an instance of `can_lift α β`. In this case the proof obligation is specified by `can_lift.cond`. * Given an instance `can_lift β γ`, it can also lift `α → β` to `α → γ`, and similarly for general pi types, see `pi.can_lift`.EndFile