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���evinitdataintbasictacticlinarithtacticabel�K\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}traversePInfofloor_ring'indlu_2α�_inst_1linear_ordered_ringCn���e_1flooraintle_floorzxiffhas_leleinthas_le
�preorderto_has_lepartial_orderto_preorderordered_comm_monoidto_partial_orderordered_cancel_comm_monoidto_ordered_comm_monoidordered_semiringto_ordered_cancel_comm_monoidordered_ringto_ordered_semiringlinear_ordered_ringto_ordered_ring
coecoe_to_liftcoe_baseintcast_coeadd_groupto_has_negadd_comm_groupto_add_groupringto_add_comm_groupdomainto_ringlinear_ordered_ringto_domain
no_zero_divisorsto_has_zero�to_no_zero_divisorsEzero_ne_one_classto_has_one�to_zero_ne_one_classEdistribto_has_add�to_distribF
�mk
�k
������������k



 
"
$
&
k1
4
7
9
;
=
?
A
C
kK
M
�R
T
�Y
[
�s���	�q��k������ �"�$�&�1�4�7�9�;�=�?�A�C�K�M��R�T��Y�[��
�nspace�prt�recdecl�sizeof���xnat���rec�x��{��has_addadd�nathas_add�has_oneone�nathas_onesizeof�default_has_sizeof����
ke���PInfo�'ATTRreducibility���prt�decl�has_sizeof_inst���has_sizeof��has_sizeofmk��PInfo�'ATTRinstance���class����prt�decl�sizeof_spec����{��eq��*k
ik
����{��eqrefl
��8�PInfo�'ATTR_refl_lemma���EqnL�prt�gind��decl�floor���c���
Proj�����rec�
�
���h�PInfo�'ATTR����proj��decl�le_floor������k�
k
����
Proj�����a�
��M��
�X

e��h�PInfo�'ATTR����proj��decl�rec_on�����	��M�����ki
����	��M����rec��
k
�PInfo�'ATTR����auxrec�prt�auxrec�rec_ondecl�cases_on�������PInfo�'ATTR����auxrec�doc�A `floor_ring` is a linear ordered ring over `α` with a function
`floor : α → ℤ` satisfying `∀ (z : ℤ) (x : α), z ≤ floor x ↔ (z : α) ≤ x)`.decl�no_confusion_type����Pv1�Mv2s�����M�s���
k�
k��
���������� ��"��$��&���1��4��7��9��;��=��?��A��C���K��M����R��T����Y��[���������
������	������ ��"��$��&����1��4��7��9��;��=��?��A��C����K��M����R��T����Y��[�����floor_eq����k�����PInfo�'ATTR����prt�decl�no_confusion�������M�sh12������
k
�����M�s��.eqrec

a�=h1a�+��k�/���
h11�+�=

������Ek��������������
�PInfo�'ATTR����no_conf�prt�decl�inj����{��������K�|k
�~���

���{��������p�no_confusion��si�
k��
��s�PInfo�'decl�inj_arrowl����{��������pP������k���{��������p�����inj������
k
�PInfo�'ATTRclass���class�decl�floor_ring_proof_1_x_xid�������linear_ordered_comm_ringto_linear_ordered_ringdecidable_linear_ordered_comm_ringto_linear_ordered_comm_ring�decidable_linear_ordered_comm_ringcoecoe_to_lift�����������������������eqmpr�	����id�0�	����������inthas_neg�has_zero�has_one�has_add_a�
�����
�*���?��	intcast_idiffrefl���PInfo�+	decl�floor_ring���������PInfo�+	prt�VMR�VMC�+	adecl�equations_eqn_1�0�F��L�?�F�N�PInfo�
+	ATTR����
EqnL�
SEqnL�ATTR����class�
���declflooru_1α�_inst_1linear_ordered_ring_inst_2floor_ring��S��U��Xfloor_ringfloor
�PInfo�0VMR�VMC�0����doc�`floor x` is the greatest integer `z` such that `z ≤ x`decl�equations_eqn_1���S��U��X���
�_��S��U��X��h�PInfo�0ATTR����EqnL�SEqnL�TK⌊�TK⌋NOTAfloor⌊⌊⌋⌋��declle_floor���S��U��Xzxk�e
k
�
�
�
�
�
�
�
�
k�
�
�
�
�
�
�
�
�
k�
�
���
�
���
�
����S��U��Xfloor_ringle_floor
�PInfo�4declfloor_lt���S��U��Xx
zhas_ltlt�has_lt�x�'
�to_has_lt
������S��U��X�$
�%lt_iff_lt_of_le_iff_le
�to_linear_order���+
k����le_floor
k
�PInfo�#7declfloor_le���S��U��Xx
�|k�~k��k��k��k��k��k��k
��k��k��k��k��k��k��k��k��k
��k��k�"��k��k�"��k��k�#�ek
��S��U��X�.
�mp�=�=�@��k
�=le_refl���=�PInfo�-:declfloor_nonneg���S��U��Xx
has_zerozero��=��4k�+��S��U��X�2
��d��9�[�c���d�n���]_a���\�����_
���z�6�d�lpropext�]�l�L�[�?�l�PInfo�1=decllt_succ_floor���S��U��Xx
��k��k��9�succ�=��S��U��X�8
�E���=����floor_ltk
��intlt_succ_self�=�PInfo�7@decllt_floor_add_one���S��U��Xx
��has_addaddk�5�>�k�0��S��U��X�>
eqmp������add_semigroupto_has_addkadd_monoidto_add_semigroupk�to_add_monoidk�%�>��chas_ltka
�Je_2���J���J��e_3����congr
��������

congr_arg���J���
��k���k����eqtransk��������'�Eto_has_zerok���0���=�
������9�� �=��_inst_1has_lift_tka�Te_2�0�N��
����k�8����succequations_eqn_1�=intcast_addk�%�0�=�chas_addk�J
�Je_2���J���J��e_3���M����������B

�N ���J��
�Bk����>���>���intcast_onek���0�&lt_succ_floork
�PInfo�=Cdeclsub_one_lt_floor���S��U��Xx
��has_subsubkadd_group_has_subk�%���>��S��U��X�c
�mpr�������
ordered_comm_groupto_ordered_cancel_comm_monoidkordered_ringto_ordered_comm_groupk��v�x�ordered_comm_groupto_add_comm_groupk�����>�������������>��sub_lt_iff_lt_addk���>��lt_floor_add_onek
�PInfo�bFdeclfloor_coe���S��U��Xz��<�9��S��U��X�qeq_of_forall_le_iff����a��0�x���1�������1�������s��_a����e
k������������������
������������������
�
�}���6�������������������1�����
�s��_a���|�~������������
���������6��������intcast_le
k�?��PInfo�pIATTRsimp���pdeclfloor_zero���S��U��X��h�_
��
��
��
�[��S��U��Xfloor_coe
�[�PInfo�yLATTR�x���ydeclfloor_one���S��U��X��h��
��
��
�G���S��U��X��a��h��
��
��
��
��
��
��
��
�G�
��
�p�]��
��
�u�����a���
�^_a
���<�����=��6�a��eqsymm!
���^�b
�u�]�q��������������h�f�g�h�r�I�]��
��
�n�_a���<�����6����T��?��PInfo�{NATTR�x���{declfloor_mono���S��U��Xa
bkh����
����S��U��X��
��k���������"������
k��le_trans� ��
floor_le
k
�PInfo��Qdeclfloor_add_int���S��U��Xx
z��x��
���������S��U��X��
�������a��0������
�#�0����"���
������s���_a����e�
���������������k����������������������*�������)�������)�,
���#k
�}�P�6���������
�������������u�w�����e��#
�����x�s�k��
�������p
�#_a���|��~��������������������G�I�P�S�6��v�~��v�����v��sub_le_iff_le_add�e�
�#��x�w��������ordered_comm_groupto_ordered_cancel_comm_monoid�k��has_subsub�f���m�������x���s����D�F�G����_a���������������������u��w��4��������Hk�P���6�x������������������������w�"����
������s����_a��������
�M���6�����������
���w�"�l�m������������������~��5�>
����E���>��inthas_sub_a������G�k����k�6��Bintcast_sub�����?�v�PInfo��TATTR�x����declfloor_sub_int���S��U��Xx
z��x�u
�w
�����L����S��U��X��
��eqtrans�{�x����has_negneg������comm_ringto_ring�comm_ring�~��|���|�x��has_negneg
�����������
��
������
��
����������
�����_a
�����3
�#�������������6����intcast_neg
�������{floor_add_int
k
���PInfo��Xdeclabs_sub_lt_one_of_floor_eq_flooru_1α�S_inst_3decidable_linear_ordered_comm_ring��_inst_4�W�"�"x
ykh��v��
��
k
����������������
abs"�to_decidable_linear_ordered_comm_group"
�l�m����������
�������	
���S����������
��k�������������decidable_linear_ordered_cancel_comm_monoidto_ordered_cancel_comm_monoid"decidable_linear_ordered_comm_groupdecidable_linear_ordered_cancel_comm_monoid"�	�		�l�m��decidable_linear_ordered_comm_groupto_add_comm_group"�	
�	and�	)�	1�	�	)�	/
�	abs_sub_lt_iff"�	
�	andintro�	8�	=lt_of_not_ge"�����	1�	�notge"��linear_orderto_partial_order"�	M�	1�	�J�	[lt_irrefl"��������������������_��:�;�(�	c����������ordered_cancel_comm_monoidto_partial_order"��	f�$������add_comm_monoidto_add_monoid"���to_add_comm_monoid"��	f�	��$�%semiringto_distrib"��to_semiring"��	e�����4�����	dk�$�%�&�'�	l�/�0�1�2�3�4�5�	��	n�?�@�	l�	��!�	c
k����	������	��	��	��	�
�	��	�
�	��	������4�	*��	�k
�	k���	��	x�	o�	�����	��	��	��	��	��	��	�_a���������������	s������������������������������������	{���	}���	��	��	������	����	����	��u���w���������������	�
�	��	��������������	��%�����������������	������
���������
���������
�
	�e���	�
�����
�	��	��
�
&�
!�
$k�
�
1k�
�
)�	��	��	��	*���	���
k�_������	��	��
I�6�	��	onorm_numsubst_into_sum"��	��	��	�tacticringhorner"�nonzero_comm_semiringto_comm_semiring"�nonzero_comm_ringto_nonzero_comm_semiring"�integral_domainto_nonzero_comm_ring"�linear_ordered_comm_ringto_integral_domain"��	b�	�k��
g����	��	�
��
m�
nk��
h
��	��	o�
V�	��	��
j�
n�	���
m�
h�	���
p�	o�
r�
V�	��	��
j�
n�	���
m�
h�	���
�	o�
�tacticringunfold_sub"��	�k�	��
��
Vk�
l�	��
j�	o�
��
�tacticringhorner_atom"��
fknorm_numsubst_into_neg"��	��	��
��	��
��
V�	��	��
��	o�	��
��
��	�����	�tacticringhorner_add_const"��
f�	��	���	o�	��	��
V�	o�	��	o�	��	��
��	o�
�norm_numbin_zero_add"�����	��	�tacticringhorner_neg"�nonzero_comm_ringto_comm_ring"��
d�	��	���	��
m�
mnorm_nummk_cong"��
l�	��	��
��
��
�k��	o�
��
�zero_add"��
��
��
��	��	��
��
��
l�	��
��
��
��
��
��	��
��	o�
��
��	��
��	���	o�
m�	o�
�norm_numneg_zero_helper"��	��	o�
��
��
��
��
��
��
��
��
��
�tacticringhorner_add_horner_eq"��
f�
m�	���
m�	��
��	o�
��
��
V�
m�	��
m�	��	o�
��
�norm_numneg_add_pos_helper2"��	��	��	��	o�
V�	��	o�	��	o�	��
��
�norm_numbin_add_zero"��
��	�tacticringconst_add_horner"��
f�
m�
m�	���	o�
m�+�	o�
m�	o�
m�
��
�norm_numneg_add_pos_helper1"��	��	��	o�	��
�tacticringzero_horner"��
f�	���
��
��	�
�
��
V�	��
l
��
��
���
�
�
w�	o�
��
�
�
�
��	o�
m�	o�
���
��	���	o�
��
��
��
��
��
��
��
q�"�	���
m�	��
��	o�
q�
q�E�K
��	o�
m�]�b�	���
q�
��	��	��
y�8�
l�	��	��
u�u�
y�
��
��	��
j�
����
�
���
��n�
��
����
����
��
��
����
�k��
��
m�u�
��
��
m
��	o�	��	onorm_numneg_neg_helper"��	��
m�	��
���I�	��
mk��u�
x���	�
��	o�	��C�!�	�k��
q�
m�
x�	o�	o�	o�8�
m�	��
m�	o�
��
�norm_numpos_add_neg_helper"��	��	��
m�	o�D�"
��
m�	��	��	o�	o�	o�E�E�b
��	o�bk��	oadd_neg_of_neg_of_nonpos"��	f�	��	���	��	�linarithlt_of_lt_of_eq"��	e�	��	�sub_neg_of_lt"��	�k�	�����	c
k�����	��	k�	��
����	��	�sub_eq_zero"��	��	��	������/�0�1�	��/�	��	y�	z�
��	��C�	���	��	�intcast_inj"��	��	�linear_ordered_semiringto_char_zero"�linear_ordered_ringto_linear_ordered_semiring"��	c�	��	����������������	��	��	k�	��
��	��c�	�
sub_nonpos"��	��	�
����	c

���c�	��g�c�	��	��o�	��	��	N�	;�	��	Q�	Y�	;�	�J���	p���	x�	��	��	��	�
�	��	��	��
l�	��	��	�k�	��	�
k�	��	��	��	��	��	���������_a���	��	��	��	��
k�

�
1�
)�����
�
2�
�
&
�
9�
@k
�
I�
M�6���	o�
V�����
w�
u�
m�
p�
j�	��	o�
V�����
w�
��
��
u�	o���
V�����
w�
��
��
��	o���
�
�����
V
�
l���u�
����x�
����
��	��
��m�	���	�����
����	��	��
���	��
m�
m�
��
��
�
��	o�
��
��
��
��
��	��
�
����
��
�
��
�
���I�
��
m�	���	o�
�add_zero"��
��
����	���
��	������
��	o�
m�	o�
���
�
����
������	o�
��
��E�K�	���	o�
m�]���
��
�k���
��
lk�
������
��
�k�
����
����	o�
m�	o�
���
������
����
�
������&���	o�����E�Kk��	o�
m�]�d���������8�
l���	��
p�
����
��
����
w���
s��k�
x���
C�u���
x�x�
R�
�����
V�{���
m�
��
���k��	o�	��	o�����
��
�����k��	o�	��C��
����
m���	o�	o�	o���"k��
m�	��	��	o�	o�	o�E�E��
����������� �����%
���*
�������0�1neg_eq_zero"��	��	��[���c���g�c�	�k�o�	�k�uk���c���g�}�������PInfo��[declfloor_eq_iff���S��U��Xr
z����	6����������
����S��U��X�
����
��	6����������s�
�_a������	6�$
����� 
��#�	����	6��6��	���	�
����	�
�����
��
���
��������8���
�_a
���	6�����?���6��4��
�4�
��b
��������8�
��
���������8�^���������4_a
���?���>���?��6�8�[�M�[�e�4
�������^�
��
���Z���^���s�����Z_a����?��>����?�6�^����������������
k
�Z����
��
���������s��_a����?���������6��������intlt_add_one_iff������	6�����0�����������s�
�_a����?���}���6�������
���le_antisymm_iff��������	6�������������s��_a���	6������������6����������andcomm�����?���PInfo�fdeclfloor_ring_uniqueu_1α�S_inst_3�Uinst1�Xinst2�V
�c��<�;�#�S�$�U�%�X�&�funext�"kxk�<�vk���y�w�	6�����)�����,�
����*�4�s�*_a�������
�6�*�4���*�4floor_eq_iff#
k
�)�	G�.�3��
k��
k�PInfo�!kdeclfract���S��U��Xr
k��S��U��X�-
�{�>	�PInfo�,tVMR�,VMC�,+t�-����_c_1�_c_2��_c_3��������cast_mainalgebrasubdoc�,The fractional part fract r of r is just r - ⌊r⌋decl�,equations_eqn_1���S��U��X�-
��k�,�k
�h��S��U��X�-
���r�PInfo�6tATTR����6EqnL�6SEqnL�,declfloor_add_fract���S��U��Xr
�m���r��S��U��X�8
����m���h������ak�9
e_1���J��J��e_2�������������

�����J���
��k�~���Z�5�>�>�^�r�h�6k
�����true������������m���������������k�&�>���h��sub_eq_add_neg"k�%�>add_add_neg_cancel'_right"k�$�>��������eq_self_iff_true"ktrivial�PInfo�7xATTR�x���7declfract_add_floor���S��U��Xr
�m���r�>��S��U��X�B
sub_add_cancelk�%�>�PInfo�AzATTR�x���Adeclfract_nonneg���S��U��Xr
�b�r��S��U��X�E
���	�
���`������>��>sub_nonnegk���>��k
�PInfo�D|declfract_lt_one���S��U��Xr
���r����S��U��X�H
�E�������sub_ltk�����>sub_one_lt_floork
�PInfo�Gdeclfract_zero���S��U��X��
�n
�J�J��S��U��X��J�D�u
�w
�p�J���K�J���J�W�9
�9ke_1��
�J�J�e_2�������������

�����J���
��k�H�U��
�J�J�J��
�J��W�����W�����W�D�J�J���x�U�J��
�U��
�|�J�J�J������
�q�J�����S�J��chas_sub
�Jk�J
e_2���J��J��e_3���>�����u�����

�I���J����
��k�Q�J�J���T�J���T���[�J�R�
�T�Te_2��!�
�/k���K�[�y
�cast_zero
�q�I�]����
�p�J�J�[�<
�Jk�J
e_2���J��J��e_3�����������

����k�|�J�J�����Jneg_zero
�p�

�u�J�J�J����������
�J���PInfo�K�ATTR�x���Kdeclfract_coe���S��U��Xz�m�q���a��S��U��X�X��%�m�z���9���a���%�/���#�-�����a�a���a��/�m�+���a���/�A���_a��\�x�������x�\�G���x�6�/�Qk
sub_selfk�%���PInfo�W�ATTR�x���Wdeclfract_floor���S��U��Xr
�m�q�>�a��S��U��X�\
fract_coek
�=�PInfo�[�ATTR�x���[declfloor_fract���S��U��Xr
��<�r�[��S��U��X�_
��y�	6�k�r�)���j�����y���s�y_a����x�n
k
�[�6�y�����y���Gk
�r�[�	G���fract_nonnegk
����)���a����������k�j_ak����������[�
������
��6���a��k�&�+�0�5����*�����*�����`���_ak������x�
����6�����
�k����fract_lt_onek
�PInfo�^�ATTR�x���^declfract_eq_iff���S��U��Xr
sk�\���	6�y�	6�0�
�Existsz�������S��U��X�f
�gk�intro���h����	6�"�_���	6�����i�������7k
�G�	6��n
k
�	6��#����i����n�
k�����3�J_a��	6���	k�=
�	6�	q�	r��
�	��B���i�_�	��	��	��
�
�
�
k�%�
�
�

�
�F�
�
�C�
�
�C�	��
�D�	6�:�	6�>�@���i�_�I�Z�6��#���#�	G�$�2��
k
�	G�'�1��
k
Existsintro�0��sub_sub_cancel��
��h�����#�s������������
�:��
�������s��_a����
��G�M�6����������eq_sub_iff_add_eq��
��������
�~add_comm_semigroupto_add_semigroupadd_comm_monoidto_add_comm_semigroup�to_add_comm_monoid���
�������J����_a����$�	y�	z�
��7
��k��k�6����add_comm��������������������s������
_a�����$�	y�������������
k�6��������������������
��dcases_on���p������hge�h_right�^��	��	��	����������	��	��	��k�
(�R���i���u���w��������������������
���������������������:���������7���������7���������8�}�	6�/�\���X�e������>hlt�/h_right_right���i�����w������������������������������������������r���������o���������o���������p�mdcases_on�i�����u���w�������������������������������������������������������������������������������������e����������zhz������K���K���K���K���K���K���K���K���K���K�����K���K�����K���K�����K���K���e�K�������u�K�w�K������������������K��_a�K�������������������������������K����������������������e��K�����u��w�������/�6�������������D�s������������K���K�������K���K�K���V_a���/�)
�6��D���Z�D�L�K�����P�K�R�K������D�	6�|�K�~�K���K���K���K���K���K���K���������K���K�������K�������K�����D���s�D_a����-
�6�D�����D���G�K����������	6�����������������������_a�K��	6�|��~��������������������K�\����������������%�\���� �	6�����������6�������K�����	G����le_of_not_gt�K���K��������	Qgt�K���x�	T�K�������J��	^����_�����������	s������������	{��	}�������
������������0�1����5�������*������ �%_a����
���4���4�	s�4���4���4���4����4���4���4�	{�4�	}�4�>���4���4���4���4���4�<���u�4�w�4�T���Y�Z�O���4���4���4������_�4��4�I�B�o�6�+����2������{�����{���(��������J��J�4e_1���J�Je_2�����������

�����J���
��k�2������2�1�����[�<��J�4�J��e_2�����J���J��e_3���>���������

�I���J��
��k�%� � ���� �%�����%���������������������������� �����$�����N����J�4�J��e_2���J���J��e_3�����u�����

����k�"���������5��������������������
����������� ����� ������neg_add_rev����� �����neg_neg�����!��������������add_left_neg������������������������add_neg_of_nonpos_of_neg���� �%����������������� ��(����c�g��neg_nonpos������#�����5�	J�K��������	Q�	R�K�w�������J���	�����#�����#���5�����*�.�0������_a���B�L�\�����4���4���4�a�\�C���4���4�b�h�����o�s�6�������������������������������������������������������������������� ����������� ��������������������������������������!�����#�������������������������� �������������5��������������������add_left_comm�������� �����
������	����neg_add_cancel_left������������ ������������������ �����	��� �$����add_right_neg�������I�������O������������u����
���c���g�c�����m�������PInfo�e�declfract_eq_fract���S��U��Xr
sk�������S��U��X��
��k�	���h������L��������������3�>���>���������J�>��_a���G�L�M�#
��6�����b����������3���������������J��_a����/�0�1�9�	����B���M���������6�����E�����3������sub_eq_sub_iff_sub_eq_sub��
���������"���9�9�e_1�a�J���J��e_2�����K�����

���K�J�K�
��k�#����
k
���������h����������,�+
zhz���_�n���
�%k�	6�|���~���*�
F�O�(�	6�,�(�.���i���=�n�����
�Y���)�@�s�)_a�����8�9�6�)�@���)�@fract_eq_iff���
�(�	G�1�?�����k�	G�4�>�����k���=���
"�k��_�I�(�Y�n��s�_�H�	��	��	������F�Yk�(�r���s������
_a����;�X�
�b
���<�9���6�s�}eq_add_of_sub_eq���F
�{k������z�%�
�
�M�
G�w�R�y���m�����������n_a������<�����������������:�X

�9�����6�����4���F�R�m����_�~�Hk�Y�m���������9���9�������J���J�K������4����4��

���4�J�4�
��k����N�����J���J��e_2���J�K�J�e_3���>�����u����

�I���J����
�k�G�}�}�����}�(�������k��������������������������1�_�{�{�2�1�_�|���9�6�����9�������z���Lk�zk�9�9�A�	��	��������������(�C�Q�E�{���G�A�z�S�D���V�A�Y�B�E�B���[�A�H�S�_�a��S�����N�{k���_�����Fk���q�S�_�[�<���J���J��e_2���J�K�J�e_3����������|

��|k�y�S�S��S�`�Z�@�`�z���C�R�����z�B�^�C���%���Fk�^�������-���F���C�C��C�j���C����N�S�C�����C�C���U�F�@�U�Qk�Q���{�F�����S���j�S������k�{��kk�k���9���{�"���Fk�9���9��9���_�	��	�add_right_cancel_semigroupto_add_semigroup����to_add_right_cancel_semigroup���'�{�����6add_right_inj�������{�{���_�����2�L���F�R�P���R������2���?���PInfo���declfract_fract���S��U��Xr
�m�q�r�r��S��U��X��
��2��z�\�x�������2�=�s�2_a���\�������6�2�=���2�=fract_eq_fractk
�r���<���=��m�z�r�9�Z�m�z�h�_���`�e���]�c�N��k�J
�Je_2���J���J��e_3���@����m

�O�mk�y�r�h�����_�_���_��e�����e�����e���=�����m�>�>�����m���������c����c������k��k��k����������������������z������h������������k�������"k�%���_����k�%�0�=������neg_inj'k�%�>�>���m�����Lk�%�0�Pk�Rk
�=�=��������=���PInfo���ATTR�x����declfract_add���S��U��Xr
sk��z���3�3�"��#�����S��U��X��
��k���	�L��y�x����\�x�x�����������\�x�x�x�����y�����x���y�����-�9
�9e_1���J���J��e_2��������

����k��+�N��
�J�J�e_2�a�J���J��e_3���>�K�K����G

�I�K�J�K�
�Gk�w��&�^��"��
k
����%�e���*�e����
���-�����-�����-�
������~�\�$�$��~�\���$���)���!�����A�+����
�+������������������
��
��
�������������)�����������)�����c���������)�����x�������^�&�����&�������������������������$�����������$�����c���������$�����x�������^�"�����"�c����c�c����
����!add_assoc
�����%�����$�������[�<
�J�J�e_2�a�J���J��e_3���F�����

�R��k�������t���������������������$��c��������%
�������$�-
���$�����t����
���$���
�������$������/�������������$�����G�I���K�4���$�<�$����t�J���T���"
�����*�����)������������t���������������������)�~�c��������#������)�*�)�����t���4�)���<�����)��������������������)�������������4���)�<�)����t�������$���g���������c��������y���������ring�������������R�
�T�Te_2��!��
�@k�������������������������������add_semigroup�����y���=�����������y���z��������$�t�$���������c���y�������z�y�����)�t�)���������\������
��
���$���6����
�1���$�$���\������L
�����P
�R
k���������������PInfo���declfract_mul_nat���S��U��Xr
b���z���3has_mulmul�to_has_mul���#���������natcast_coe�������"�h
�x���S��U��X��
���natrec�����������c��e��<�,�j��l��n��p��=�B�,�+��k����������3�i�wnatzero�"�{����[��\�x�c
�e
�����j
�l
�n
�p
��������������������������������\�x�x���A���x�����c�x�x�x�������x�����x�x�x���^���x�������x�wmul_zero_classto_has_zero
��to_mul_zero_class
�	�
��chas_mul
�J�J�e_2�a�J���J��e_3���F�c�K���

�R��k�������t�����x�������Y�nathas_zero�x�R��
�T��T�e_2�1� ���
�j��k�����natnat_zero_eq_zero��cast_zero
������mul_zero
�������x�������x�x��V
k�-�-�e_2�a�I����
�7k
���x�������x����[���x�0�5�K
k
���x�x����x�x�t�x���x�
���

���x���x��
����������������
�x��c�hc�������_�H�c���e���N�&�j���l���n���p���O�R�U
�%��
���Z�������������<�c���e���I�F��l���n���p���J�O�T��succk�8�����Yzhz����������t�c���e�����n��������j���l���n���p����������
����������������t�����
�������������������_a�����������c���e�����n���������j���l���n���p����������������������������������6���k�natsucc_eq_add_onek����������t�����������������r������������5���7
�@������D�������M�����������������O���*_a������������������_����������������6�����Zk�Z�natcast_add�����Ok���M�������t�������to_has_mul�������A���C�H�����M���R�������S�F���T�x�z_a�������������A�������������������������������������������������6�M�����x���zmul_add���S�F�x�z�������������������A���C���������R����_a������������A���������������������������������6�������x���z���x�z����������t����������������� �������  �R�z_a��������������������� &������������������ (� &���6�������Onatcast_one�����O��  �������t����� �����  � S�R��semigroupto_has_mul��monoidto_semigroup���to_monoid���8�F� B��to_has_one��� ^_a����������������������� (� &� j������������� p���6�  �Fmul_one��� ^�F�� S������� N���������� S� ��R� a� f_a��������������� p��������� ��� (���6� S� ��������t�t��������
���� �����a_0��� �������� ��� (����fract_add���������kyhy� ����������������K���n�K�������j�K�l�K�n�K�p�K�L���R�� �� ���� ���� ������Lk�� ���� ��� �� �����������������k�!��� ��!�����!� �_a���� ����L

� ��6� ��!�_������k��!� ����������!$�!���!�!,�!��k_a���� ����V
�V
� ����!5�6�!�!)�����!)�!1
��!,� ��!*��������!'���!(����!,�!R�!��_a���� ��������e�K��� �� �� �� �� ��������� ��![���!c�!5� ��!j�6�!,�!P�!B�!P�!W����� �tacticabeltermg�������!����!����� ��_�����!Qtacticabelunfold_sub����� �� ��!��
T����� �������� ��!��!��!��!��!��!�����!��!��!��!�tacticabelterm_atomg�������!��tacticabelconst_add_termg�����!����!��!��
�����!��
������ ��!�� ��!��!��!�� �tacticabelterm_neg������ ��!��!��!��������������tacticabelterm_add_constg�������!��!��!��!����!��!��!��
������!��!B�!Q�!��!��!%�!��!L�!��!��!)�!P�!��!��!)�!��!P�!��!(�!��!��!��!��!(�!��!��!��!%�!(�!��!��!%�!��!(�!��!��!��!��!��!%�!��!(�!��!��"	�!��!(�!��!(�!��!��!��!��!��!��!��!��!(�!��!��!��!��!��!P�!���!��!��!L�!��!��!��!N��"+�!��!N�!���"*�"'�!��"+�!��!L�!(�"*�!��!L�"�")�"	�"*�!��!L�"�!��")�!��!(�!��")�!��")�!���!��"5�!��!���!��!��!��!��!��!��"*�!���!��"*�!��"*�!��!���"*��!�����!���!��"c�!(�")��!��"m�!��!L�!��!��!��!��!��!��!����!��!��!|���!��!��!��[�!(�!��!�tacticabelterm_add_termg�����!��!(�!���!��[�!���� �!���!���[�!����������[�"���[��[������[���add_monoid��!��!%�!��!��!��!��!�tacticabelzero_termg�����!(�!��PInfo�Ȭdeclceil���S��U��Xx
��S��U��X� 
���<��	�PInfo��VMR�VMC��� ���
intnegdoc�`ceil x` is the smallest integer `z` such that `x ≤ z`decl�equations_eqn_1���S��U��X� 
���k
�"���S��U��X� 
���"��PInfo�$�ATTR����$EqnL�$SEqnL�TK⌈�TK⌉NOTAceil⌈⌈⌉⌉��declceil_le���S��U��Xzxk�"�
k
������S��U��X�+�,k��#	���x���#���#	�#��#_a��"�
k
�"����
�##�6�#	�#�$
k
��#���������#�#���#�#>�s���#9�#_a����������
�##�}�##�6�#�#<���#E�#<neg_le���#��#>�����#:���#���#>�#h�s�#:�#_a�����#9
�#J�##�#Q�6�#>�#f���#n�#f��#:����#h���������#���#h�#�������_a
��"���#p�#I�##�"�#I�##�6�#h�#�����#��}���������
��
���#��#���#��#��s�#���������
�#��#��#�_a���"�#H�>
�#I�##�#Q�6�#��#����#��#�neg_le_neg_iff
�#��#��?�#��PInfo�*�decllt_ceil���S��U��Xx
z���#������S��U��X�5
�6���#���ceil_le
k
�PInfo�4�declceil_le_floor_add_one���S��U��Xx
�"����S��U��X�9
��$�����$�$	�s�$_a���#����6�$�$	���$�$	�#�k
���$	�$����$	�$%���
�_ak������$���6�$	��9��$%�$������$%�$:���_ak������4�����6�$%���fle_of_ltk��$9���PInfo�8�declle_ceil���S��U��Xx
�$�9�"���S��U��X�?
�E�$�"��$\�$�"��R�"��PInfo�>�declceil_coe���S��U��Xz��"�����S��U��X�A��$o����<�������$o�$y��$m_a���#�����6�$o�$w�#/k
����$y����<�
�����$y�$������
_ak�����x��������y�6�$y�$���k�$��$�����$���������$��$���<�9��_a�����x�#�����6�$����X����$������$��$������_a�����#��$��6�$�neg_neg�����PInfo�@�ATTR�x���@declceil_mono���S��U��Xa
bkh���#
�#��S��U��X�H
�Ik�J�����$��"
���#�#�
k�#
��
�$�le_ceil
k�PInfo�G�declceil_add_int���S��U��Xx
z��#����#���S��U��X�M
�N��%����x�����%���%�%(��%_a���#�
��$����%1�6�%�%&�#2����%(����x�x�����%���%(�%E��������_a
�������#H�
�%1������%1�6�%(�%Aneg_add'
������%E����L�x���%���%E�%k��%B_a�������3�#H
�#�%1�$��%1�6�%E�%hfloor_sub_int
k
����%k����%f�%���%k�%�������%f_a�����L���%q�%1�%4�6�%k�%�neg_sub���%f��%�������%f�%���%��%���%�_a�����%��%1�%4�6�%��%�sub_eq_neg_add���%f���%��PInfo�L�ATTR�x���Ldeclceil_sub_int���S��U��Xx
z��#�z�L�#���S��U��X�Y
�Z���%��#���%���%��%��%��#�����%��%���_a
���#���#���%��#���6�%��������%�ceil_add_int
k
���PInfo�X�declceil_lt_add_one���S��U��Xx
���$[������S��U��X�^
��&���"��"��&
���&�&�s�&_a�������#����
��6�&�&���&�&���&�&lt_ceilk
�&
�"���&�&�"�������&�&6����_ak����#��#�&�&<�#��6�&��$�����f��&6�&��"�����&6�&Q��"����9�_a��&<�#���4�&<�6�&6�&P�%�k
�lt_add_one�
���"��PInfo�]�declceil_pos���S��U��Xa
���[�"����a��S��U��X�e
�	�&|�&h�&|
this���%f�[
pos_of_neg_neg�e
�	K�	L
�#G���p
��4���E�	Q�\���&��	Q��&�not_iff_not_of_iff�&��&�floor_nonneg
k�&�not_le_of_gt���[�&�AnnotcheckpointAnnothaveneg_of_neg_pos���%fh�&
�g�����x
neg_pos_of_neg���%�lt_of_not_ge���%��Zadd_monoidto_has_zero�����	Q�\�%��	Q��%q�&��&��&��&��%qnot_le_of_gt� �
�%qAnnot�lAnnot�mneg_neg_of_pos
�#��PInfo�d�declceil_zero���S��U��X��"�
�J�[��S��U��X��&������&������&���[�[���9�9e_1��J�Je_2��M
���

�N
�J�
�k�&��[���&����[�Z�&����'���h���'�#/
�Jchas_neg�J�Je_2��'

��k��'!�[���'!�K�[���k�
e_2���N�
�"k���J�	���V���[�[�"����&�����[���PInfo�v�ATTR�x���vdeclceil_nonneg���S��U��X_inst_3decidable_rel
��
��
��
��
��
��
��
��
qkhq���\�#��S��U��X�~�'w��k����dite����

�
�'xh�'�le_of_lt���[�"��

���&{�'��>�9
ceil_pos�

���	Q�'���\�'��\�'��9���'��'��	�
_a���\�"����k�\�'��6�'��9le_antisymm��	T����
�9le_of_not_lt��'��9
��'��\�[���'��'���'�_a��\�'��/�\�6�'��[ceil_zero�
�R�[�PInfo�}�declnat_ceil���S��U��Xa
���S��U��X��
intto_nat�"�
�PInfo���VMR��VMC����������to_nat_maindoc��`nat_ceil x` is the smallest nonnegative integer `n` with `x ≤ n`.
It is the same as `⌈q⌉` when `q ≥ 0`, otherwise it is `0`.decl��equations_eqn_1���S��U��X��
�1���k
�'���S��U��X��
�@�'��PInfo���ATTR�����EqnL��SEqnL��declnat_ceil_le���S��U��Xa
n����has_le�'�
k
������S��U��X��
�����(�(�'��#��(���(�(!���(_a���(�'�
k
�$��x�(�(.�6�(�(��
k
��(!�$���������inthas_coe�(���(!�(Q�s�(_a���(�'��$��(.�}�(.�6�(!�(O���(�(Ointto_nat_le�#���(Q�����(N�(���(Q�(q�s�(O_a���$��(M�(.�(]�6�(Q�(o���(O�(o�#��(N�?�(o�PInfo���decllt_nat_ceil���S��U��Xa
n�_inst_3decidable���(�����has_lt�(*��x
��S��U��X��
������(��E�	Q�(��	Q�(��(�not_iff_not�(��(���decidable_lt�(*��(��(
������linear_orderto_partial_order�natlinear_order�(*�(����(��(��s�	Q�(�preorderto_has_lt��(��(*_a���	Q�(�
�'��
k�	Q�>��
k�}�(��6�(��(����(��(�not_lt��(��(*��(��(�����	U�&�
�x���(��(��s�	Q�����(��x
_a���(��(�
�(��)�6�(��(����(��(����&��x
��(��(.�(����(��)�s�(,_a���)�������'�k�(��}�)$�6�(��(.���(,�(.nat_ceil_le
k
�?�(.�PInfo���declle_nat_ceil���S��U��Xa
�$�jk�lk�nk�pk�+�0�5�'���S��U��X��
�E�(�'��'��)P�)0k
�'��P��(������������ordered_semiring�'��PInfo���declnat_ceil_mono���S��U��Xa₁
a₂kh���(+�()��S��U��X��
��k�������)p�$��w�)o�)4�)o�%	�)xle_nat_ceil
k�PInfo���declnat_ceil_coe���S��U��Xn��1�'��)N��S��U��X���
�g�1�'��"��9�(N��)��1�'��(N���)��)���)�_a��1�'��#���(w�1�'��6�)��(Nceil_coek
�(N�@�)�Annotshow�PInfo���ATTR�x����declnat_ceil_zero���S��U��X�1�'�
�J���S��U��Xnat_ceil_coe
��PInfo���ATTR�x����declnat_ceil_add_nat���S��U��Xa
a_nonneg�cn��1�()��w��(*��S��U��X��
���c�����)���1�'��#����(N��(W�1�'��%0�(N�)����)��)���)�_a��1�'��'��.�G�(w��'��'�k�)��)��6�)��)��%�
k
�(N���n���)��(Na_1����*�1�'���)��(w�)�inteq_coe_of_zero_le�$����#�
�$��\�$�chas_le�J�Je_2��J�Je_3��'��*%

�'�*%k�*�[�'�
k�$��$����$�ceil_mono
k�

w�ceil_a_eq�*��1�'���'�
�(M
��'��*M
�1�'���(w�*O��'��(w
���*V�*_��*M_a��1�'���"�������(Mk��'��*hk�1�'��Y�*j��)�k�6�*V�(w�@�*Z�PInfo���declnat_ceil_lt_add_one���S��U��Xa
a_nonneg�c_inst_3�(������(�&��w�(*����S��U��X��
���c���*��E�(��(*�()�*��*�lt_nat_ceil
k�*��(*��*��*��)�����*��*����*�_a���(��(��(��.�@�*��6�*��*�
�g�1�*��*����1�()��w��*��*��9��9�e_1��J��J�e_2��'���1�1

�'	��J��
�1k�*��*���V
�������e_2���'<���
�'�����kk�*��*��[�<�J��J��e_2���J���J��e_3���>������*�

�I��J��4
�*�k��

�
�*��� E�5���*��*��@�*�nat_ceil_add_nat
k
�Annot��natlt_succ_self�(*�PInfo���decllt_of_nat_ceil_lt���S��U��Xx
n�h�(��(��x��S��U��X��
������+9lt_of_le_of_lt� 
�*��x�)�
��*��x�*����+I�+K����������linear_ordered_semiringto_ordered_semiringu_1�R
�k�m�o�q�����	��+T� c��to_monoid)�+^���	��+^�(*�+n�+K��cast_lt)�+S�(*�PInfo���
declle_of_nat_ceil_le���S��U��Xx
n�h�(�(.��S��U��X��
������(�%�*��x�+G��"�*��x�(,���+��(,�����+X�+o�+q�(,��cast_le�+S�(*�PInfo���
EndFile