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�ONPkinitalgebragroupto_additivealgebragroupbasic�[�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}traversedecllibrary_note_3007270989prodstringprodmk
Strlow priority instance on morphisms
StrWe have instances stating that the composition or the product of two morphisms is again a morphism.
Type class inference will 'succeed' in applying these instances when they shouldn't apply (for
example when the goal is just `⊢ is_mul_hom f` the instances `is_mul_hom.comp` or `is_mul_hom.mul`
might still succeed). This can cause type class inference to loop.
To avoid this, we make the priority of these instances very low. We should think about not making
these declarations instances in the first place.�VMR�VMC��
�scharof_natm�s�i�h�p�r�o�m� �n�o� �e�c�n�a�t�s�n�i� �y�t�i�r�o�i�r�p� �w�o�l�stringemptystringstr���������������������������������.�e�c�a�l�p� �t�s�r�i�f� �e�h�t� �n�i� �s�e�c�n�a�t�s�n�i� �s�n�o�i�t�a�r�a�l�c�e�d� �e�s�e�h�t�
�g�n�i�k�a�m� �t�o�n� �t�u�o�b�a� �k�n�i�h�t� �d�l�u�o�h�s� �e�W� �.�w�o�l� �y�r�e�v� �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� �e�k�a�m� �e�w� �,�s�i�h�t� �d�i�o�v�a� �o�T�
�.�p�o�o�l� �o�t� �e�c�n�e�r�e�f�n�i� �s�s�a�l�c� �e�p�y�t� �e�s�u�a�c� �n�a�c� �s�i�h�T� �.�)�d�e�e�c�c�u�s� �l�l�i�t�s� �t�h�g�i�m�
�`�l�u�m�.�m�o�h�_�l�u�m�_�s�i�`� �r�o� �`�p�m�o�c�.�m�o�h�_�l�u�m�_�s�i�`� �s�e�c�n�a�t�s�n�i� �e�h�t� �`�f� �m�o�h�_�l�u�m�_�s�i� ��"��`� �t�s�u�j� �s�i� �l�a�o�g� �e�h�t� �n�e�h�w� �e�l�p�m�a�x�e�
�r�o�f�(� �y�l�p�p�a� �t�'�n�d�l�u�o�h�s� �y�e�h�t� �n�e�h�w� �s�e�c�n�a�t�s�n�i� �e�s�e�h�t� �g�n�i�y�l�p�p�a� �n�i� �'�d�e�e�c�c�u�s�'� �l�l�i�w� �e�c�n�e�r�e�f�n�i� �s�s�a�l�c� �e�p�y�T�
�.�m�s�i�h�p�r�o�m� �a� �n�i�a�g�a� �s�i� �s�m�s�i�h�p�r�o�m� �o�w�t� �f�o� �t�c�u�d�o�r�p� �e�h�t� �r�o� �n�o�i�t�i�s�o�p�m�o�c� �e�h�t� �t�a�h�t� �g�n�i�t�a�t�s� �s�e�c�n�a�t�s�n�i� �e�v�a�h� �e�W�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ATTRlibrary_note���unitstarPInfois_add_hom?indlu_1u_2α�β�_inst_1has_add_inst_2has_addfaC�e_1map_addxyeqhas_addadd�n���%4�����
����mk��
�����%�4%#44/%4��
�����.���%#%%�nspace�prt�recgind��decl�map_add����
���c/%4-��
����}
Proj�����-�rec��%4-�-�PInfo�?ATTRreducibility���proj��decl�rec_on�����
�����X��o44��
�����X���rec���%4�PInfo�?ATTR����auxrec�prt�auxrec�rec_ondecl�cases_on������PInfo�?ATTR����auxrec�decl�drec�����
����h}��-���%4�5O��
��������5��/%)���``	#`_/`%'�PInfo�?ATTR����auxrec�prt�decl�drec_on�����
������X��o4�%M��
������X�����_�M�PInfo�?ATTR����auxrec�prt�decl�dcases_on������PInfo�?ATTR����auxrec�prt�doc�Predicate for maps which preserve an addition.ATTRclass���class�PInfois_mul_homDindlu_1u_2αβ
_inst_1has_mul�_inst_2has_mul�fCe_1map_mulxyhas_mulmul�%')n���%44�����
��	��?�mk��
��	�����%�D4�%�MO�%4��
��	���������_%�`�ikp�nspace�prt�recgind��decl�map_mul����
��	���c�%4���
��	�����_
Proj�������rec��%4����PInfo�DATTR����proj��decl�rec_on�����
��	������?���R44��
��	������?��w�rec���%4�PInfo�DATTR����auxrec�prt�auxrec�rec_ondecl�cases_on�������PInfo�DATTR����auxrec�decl�drec�����
��	����h�_������%4��!O��
��	�����������!����%)���`����`��_�`%'�PInfo�DATTR����auxrec�prt�decl�drec_on�����
��	��������?���R4��%M��
��	��������?��������_��M�PInfo�DATTR����auxrec�prt�decl�dcases_on��������PInfo�DATTR����auxrec�prt�doc�Predicate for maps which preserve a multiplication.ATTR����class�ATTRto_additive���to_additivevalue_typemknameanonymousoptionnoneATTRto_additive_aux���namemk_string
Stris_add_hom��ATTR����map_mul��
Strmap_add��declis_mul_homiduα�_inst_1has_mulis_mul_homid���������_x_x4rfl���4�PInfo�L	prt�VMR�VMC���doc�The identity map preserves multiplication.decl�equations_eqn_1�������eq�����������eqrefl����PInfo�L	ATTR_refl_lemma���EqnL�SEqnL�ATTRinstance���class����ATTR�������some
StrThe identity map preserves additionATTR������
Strid��declis_add_homid�����has_add��������,�mk����4��has_addadd4�PInfo�L	VMR�VMC���ATTR����class����decl�equations_eqn_1������,��2��D�����,��2�J�PInfo�L	doc�The identity map preserves additiondecl�comp�vu_1���β�����_inst_2has_mulγ_inst_3�f�g�_inst_4is_mul_hom%hgis_mul_hom�%is_mul_hom �%functioncomp �`4�����S��T��V���W��X��Y��_�
�e� �%�px�y
eqmpr� �k��%�	����
��������%�%���id�>����a�`e_1���a�����e_2��congr $
>������%4congr_arg%%$�����>%������eqtrans#a��`����%���`������x������congr_fun#��������functioncompequations_eqn_1%����%��������e_1����%����4�����map_mul�����`�$ ��`%4������c��`��e_2����������e_3���%%���� %4�%#���%� ������������eqrefl#���PInfo�Q	prt�VMR�
VMC�

�
���������doc�The composition of maps which preserve multiplication, also preserves multiplication.decl�equations_eqn_1���������S��T��V���W��X��Y��_�
�e��q������`%4�K�����S��T��V���W��X��Y��_�
�e��q�a�PInfo�+Q	ATTR����+EqnL�+SEqnL�ATTR�
�class��
ATTR�
����$
StrThe composition of addition preserving maps also preserves additionATTR������
Strcomp��declis_add_homcomp���������S��+�has_add����X��Y��,%�
�, %�, �%�p�����S������������X��Y����
���,mk �%�p������������;���������������������������������������%has_addadd��`����������������������is_add_hommap_add�����`�3 ��`%4�������%�`���&��������'�����%4�-�������<�����@�F���PInfo�-Q	VMR�-
VMC�-

�
���������ATTR�
�-class�,�-
decl�-equations_eqn_1���������S������������X��Y����
������-()*�`%4�	�����S������������X��Y����
�������PInfo�5Q	doc�-The composition of addition preserving maps also preserves additiondecl�mulu_1u_2αβ
_inst_4semigroup�7_inst_5comm_semigroup�8fg�%%_inst_6�<semigroupto_has_mul+�C,%comm_semigroupto_semigroup,%4_inst_7��=%�A�C���=�A�C%a�L�A�Ck)�9�:
�;�9�=�;�?�@�<�A�H�F�Q���S�X�aab`������A`�C`���=�%�w�r�r�i�r�k��}���rik�����������`��e_1��������e_2���,$�>���%4�--$���>%���{���-`�{�}�����������}���������r�}�k�����������%�
`�����e_2��������e_3���--�)�)��)��%4�-,�)��)%���q�x���map_mul+,�`�t�q�z����%4mul_left_comm,`��ik��ii�-`i����mul_assoc,`�p��k��i���������������k�����������}�����(���k�*���~�k�������-�)�ik����������PInfo�6Xdoc�6 A product of maps which preserve multiplication,
preserves multiplication when the target is commutative.ATTR�
�6classis_mul_hom�6
ATTR�
�6��ATTR����6��
Stradd��declis_add_homadd�7�8�9�:
�;add_semigroup+�=add_comm_semigroup,�?�@�<�AUadd_semigroupto_has_add+�W,%add_comm_semigroupto_add_semigroup,%4�F1�[%�_�a��[�_�a%�Gg�_�ak)�9�:
�;�X�=�Z�?�@�<�A�f�F�o��q�v��H�I`�����_`�a`��[�%�������i���k�������ik�����������������������������������������������k�����������%`������L���������M����#�)��%4����������is_add_hommap_add+,�`����������%4add_left_comm,`��ik��ii�	����add_assoc,`����k��i��������������k���������������������k������k�����7����ik����������PInfo�SXATTR�
�Sclass�R�S
decl�invu_1u_2αβ
_inst_4�	_inst_5comm_group�`f_inst_6�]�Amonoidto_semigroup0groupto_monoid0comm_groupto_group0�=�B�?%�A%�C%4ahas_invinv0�jto_has_inv0�CO�a�b
�c�	�d�=�f�g�J��%�Q�\abeqsubst0_x_�S�U�C�L�Z�?�A�n�p%4�pi��U�?�A�C%')��symm1�������4mul_inv0%')�PInfo�^`doc�^ The inverse of a map which preserves multiplication,
preserves multiplication when the target is commutative.ATTR����^classis_mul_hom�^��ATTR����^��ATTR����^��
Strneg��declis_add_homneg�_�`�a�b
�c�dadd_comm_group0�f�g{�_add_monoidto_add_semigroup0add_groupto_add_monoid0add_comm_groupto_add_group0V�`��%��%��%4�nhas_negneg0add_groupto_has_neg0��O�a�b
�c�d���f�g���%�����r�s�j�v_������g�x���������y��i$�s������%')!��!������4neg_add0%')�PInfo�{`ATTR����{class�z�{��PInfois_add_monoid_homiindl����

��Annotas_isAnnot���

�SAnnot��Annot��_inst_1add_monoid_inst_2add_monoidfCe_1_to_is_add_hom��%add_semigroupto_has_addadd_monoidto_add_semigroup��%��%4map_zero��4has_zerozero��to_has_zero%����4n�����%44���������������?��mk����������������%� %�"%4�'�)����%�0�2�8%�:%4�F�����������������@����� �"%�'�)4�����0�2�8�:%M�nspace��prt��recgind����decl��to_is_add_hom���������������c�A%4�.����������������
Proj����������.��rec���%4�.���.���>�PInfo��iATTR�����proj����decl��map_zero��������������������k����������������
Proj����������k���k���.���>�PInfo��iATTR�����proj����decl��rec_on����������������������A%4���������4������������������������rec�����%4�PInfo��iATTR�����auxrec��prt��auxrec��rec_ondecl��cases_on����������PInfo��iATTR�����auxrec��decl��drec�������������������h�������.���>4�����%���FO�����������������������F�����A%)����� �"�'�)%����%�0`�2`�8�:_�A�`�y�PInfo��iATTR�����auxrec��prt��decl��drec_on������������������������������������`%M�����������������������4�����
���_�4�PInfo��iATTR�����auxrec��prt��decl��dcases_on������<�L�PInfo��iATTR�����auxrec��prt��ATTR�d��to_is_add_homclassis_add_hom��ddoc��Predicate for add_monoid homomorphisms (deprecated -- use the bundled `monoid_hom` version).ATTR�d��class��PInfois_monoid_homnindl�������_inst_1monoid_inst_2monoidfCe_1_to_is_mul_hom�Z%�C�i�C%�i%4map_one�/4has_oneone�hto_has_one%����4n�����%44������������N���P?��mk�������N���P�����Z%�S%�U%4�Z�\���`�b�d�j%�l%4�x�������N���P�������r���Z�S�U%�Z�\4�����b�d�j�l%���nspace��prt��recgind����decl��to_is_mul_hom����������N���P��c�s%4�a�������N���P������
Proj����������a��rec���%4�a���a���p�PInfo��nATTR�����proj����decl��map_one����������N���P���������������N���P������
Proj������������������a���p�PInfo��nATTR�����proj����decl��rec_on������������N���P�������s%4����������4�������N���P��������������rec�����%4�PInfo��nATTR�����auxrec��prt��auxrec��rec_ondecl��cases_on������	�	�PInfo��nATTR�����auxrec��decl��drec������������N���P����h�������a���p4�����%���xO�������N���P�����	���	���x�	���s%)���\�S�U�Z�\%���%�b`�d`�j�l_�s�`��PInfo��nATTR�����auxrec��prt��decl��drec_on������������N���P�����	���������������	`%M�������N���P�����	�������	a�	.���	9���	D_�	I�>�PInfo��nATTR�����auxrec��prt��decl��dcases_on������	i�	w�PInfo��nATTR�����auxrec��prt��ATTR�d��to_is_mul_homclassis_mul_hom��ddoc��Predicate for monoid homomorphisms (deprecated -- use the bundled `monoid_hom` version).ATTR�d��class��ATTR�d������
Stris_add_monoid_hom����ATTR������	zATTR�d��to_is_mul_hom��
Strto_is_add_hom�	zATTR�d��map_one��
Strmap_zero�	zdeclis_monoid_hommap_mul��������S_inst_1�N_inst_2�Pf_inst_3��xy���	�	2���	7')�����S���N���P�������������	2�	7��%4�PInfo��wdoc��A monoid homomorphism preserves multiplication.ATTR�������ATTR��������	zdeclis_add_monoid_hommap_add��������S�������������������;����')�����S��������������������is_add_monoid_homto_is_add_hom%4�PInfo��wdeclis_monoid_homof_mul��������S_inst_1�N_inst_2groupf_inst_3�������k���	�%4�����S���N���	������	��	%�	�iffmp�`��%�[�]�	��������������	�mul_self_iff_eq_one%4�����	��`�	�X�����������	��
eqrec%�	�_a%���/�������	��h�h�h�/�h�$>�	��
	eqsymm%�
	�	���%�X�	��������
���������
�
9��u�
_a���/4�	���g�g�h�/O�h�
$�
��one_mul���)%���PInfo��~doc��A map to a group preserving multiplication is a monoid homomorphism.ATTR�������ATTR�������
Strof_add�	zdeclis_add_monoid_homof_add��������S�����add_group�����Y�Z�[add_groupto_add_monoid���
j%4�����S������
i�����
p��%�
r�	��`��%�(�*�
r�e�e�e�f�g�h�
radd_self_iff_eq_zero%4�e���
��`�;�%�d�d�e�����
��
��
�
���%���/���z�{�
j�6�6�6�
�6�
$�
��
��
)�
��
���%�%�
��d�d���
��f�e�����
��
��
?�
������/4�;�x�5�5�6�
I�6�
$�
��dzero_add�d�
Y�e�PInfo��~declis_monoid_homid����_inst_1�Mis_monoid_hom��������
�������S�U����b�d�PInfo���	prt��VMR��VMC�����doc��The identity map is a monoid homomorphism.decl��equations_eqn_1�������
���
�����������
���
��
�PInfo���	ATTR�����EqnL��SEqnL��ATTR�����class������ATTR�������ATTR������)�	zdeclis_add_monoid_homid�������������������mk���I� �"�
����0�2�PInfo���	VMR��VMC�����ATTR�����class������decl��equations_eqn_1�����������G�/���������5�PInfo��	decl��comp���u_1�����S���N_inst_2�Pf_inst_3��γ_inst_4monoid�g�4_inst_5is_monoid_homH4is_monoid_homH�4�m�����S���N��P�������?�	�@�
�F��H�4�N�Y�S��U��Z`�\`�=�iH4�	��`%��H`4this���b��d���H��H4�������j`�l`�����������
`��_a`����%4�b���d��`��%��%��O���
$������map_one�`%��������������������H��_a����4�j��l��������
$�����H`4�E���PInfo��	prt�VMR�
VMC�

�
�	���������doc�The composite of two monoid homomorphisms is a monoid homomorphism.decl�equations_eqn_1���������S���N��P�������?�	�@�
�F��O������`%4�������S���N��P�������?�	�@�
�F��O��PInfo��	ATTR����EqnL�SEqnL�ATTR�
�class��
ATTR�
���ATTR�����~�	zdeclis_add_monoid_homcomp���������S�����������add_monoidH�	�@�
�H4�H�4�N�����S�������������	�@�
�!�mkH�4�N�� ��"��'`�)`�[add_monoidto_add_semigroupH4�	��`%is_add_monoid_homto_is_add_homH`4�
���0��2�has_zerozeroHadd_monoidto_has_zeroH4���h���8`�:`�g�����h�q���_�`����4�0���2��`�b%�d%�����
$�h�nis_add_monoid_hommap_zero�`%���q���g�g�����q�����o�����4�8��:��������
$�q�g� H`4���g�PInfo��	VMR�
VMC�

�
�	���������ATTR�
�class��
decl�equations_eqn_1���������S�������������	�@�
�!��'�JKL�`%4�������S�������������	�@�
�!��'���PInfo�"�	declis_add_monoid_homis_add_monoid_hom_mul_leftu_1γ_inst_1semiring�%xis_add_monoid_homMM44add_comm_monoidto_add_monoidM4semiringto_add_comm_monoidM4��y4�mul_zero_classto_has_mulM�-to_mul_zero_classM4�&�'���)��MM44�����
�MM44�[4�D4���
�
y4zmul_addM%�-to_distribM%4mul_zeroM4��4�PInfo�$�	prt�$VMR�$VMC�$�)�'�&doc�$Left multiplication in a ring is an additive monoid morphism.decl�$equations_eqn_1�%�&�'���)��
�$�%4�
(�&�'���)��
�
0�PInfo�9�	ATTR����9EqnL�9SEqnL�$ATTR����$class�*�$��decl�#is_add_monoid_hom_mul_rightu_1γ_inst_1��x��y4���<�=���>�
	�
=�
�
=y4zadd_mul�;%�
4zero_mulO4�
%�PInfo�:�	prt�:VMR�:VMC�:�>�=�<doc�:Right multiplication in a ring is an additive monoid morphism.decl�:equations_eqn_1�;�<�=���>��
>�:�;4�
R�<�=���>��
>�
Z�PInfo�E�	ATTR����EEqnL�ESEqnL�:ATTR����:classis_add_monoid_hom�:��PInfois_add_group_hom�indl�������_inst_1add_group_inst_2�
ifCe_1_to_is_add_hom��!�#add_groupto_add_monoid�
�n�G���%44�G��������I�
f�K�
i?�Gmk�����I�
f�K�
i�L�O�T�U�V�
g%4�
n�
p%4�����I�
f�K�
i�L�M�N�
o�O�t�u�v�
g%�
�4p�nspace�Gprt�Grecgind�G�Sdecl�Gto_is_add_hom��������I�
f�K�
i�Lc�
p%4�
n�����I�
f�K�
i�L�V�
�
Proj�G�S�U����
n�Grec���%4�
n�O�
n�PInfo�U�ATTR����Uproj�U�Sdecl�Grec_on�H��������I�
f�K�
i�L�M�R�
��N�O�
�44�����I�
f�K�
i�L�M�R�
��N�
��Grec�H���%4�PInfo�X�ATTR����Xauxrec�Xprt�Xauxrec�Grec_ondecl�Gcases_on�H����
��
��PInfo�[�ATTR����[auxrec�[decl�Gdrec�H��������I�
f�K�
i�L�Mh�
��N�O�
n�S���%4�R�
uO�����I�
f�K�
i�L�M�
��N�
��R�
u�
��]�
p%)�O�����
g���
j%_�
p`%'�PInfo�\�ATTR����\auxrec�\prt�\decl�Gdrec_on�H��������I�
f�K�
i�L�M�
��R�
��N�O�
�4�
�%M�����I�
f�K�
i�L�M�
��R�
��N��
��O�
�_�M�PInfo�_�ATTR����_auxrec�_prt�_decl�Gdcases_on�H�����+�PInfo�a�ATTR����aauxrec�aprt�aATTR�d�Gto_is_add_homclassis_add_hom�bddoc�GPredicate for additive group homomorphism (deprecated -- use bundled `monoid_hom`).ATTR�d�Gclass�GPInfois_group_hom�indl�������_inst_1group_inst_2�	�fCe_1_to_is_mul_hom�R�T�V�k�	�n�d���%44�d��������f�-�h�	�?�dmk�����f�-�h�	��i�l�������.%4�	��7%4�����f�-�h�	��i�j�k�6�l�������.%�
4p�nspace�dprt�drecgind�d�ndecl�dto_is_mul_hom��������f�-�h�	��ic�7%4�5�����f�-�h�	��i�q�n
Proj�d�n�p����5�drec���%4�5�l�5�PInfo�p�ATTR����pproj�p�ndecl�drec_on�e��������f�-�h�	��i�j�m�T�k�l�a44�����f�-�h�	��i�j�m�T�k���drec�e���%4�PInfo�s�ATTR����sauxrec�sprt�sauxrec�drec_ondecl�dcases_on�e��������PInfo�v�ATTR����vauxrec�vdecl�ddrec�e��������f�-�h�	��i�jh�n�k�l�5�n���%4�m�<O�����f�-�h�	��i�j���k���m�<���x�7%)�l�\�	/�	0�.�	4�	5�	�%_�7`%'�PInfo�w�ATTR����wauxrec�wprt�wdecl�ddrec_on�e��������f�-�h�	��i�j���m�T�k�l�a4��%M�����f�-�h�	��i�j���m�T�k�����l��_��M�PInfo�z�ATTR����zauxrec�zprt�zdecl�ddcases_on�e��������PInfo�|�ATTR����|auxrec�|prt�|ATTR�d�dto_is_mul_homclassis_mul_hom�}ddoc�dPredicate for group homomorphisms (deprecated -- use bundled `monoid_hom`).ATTR�d�dclass�dATTR�d�d����
Stris_add_group_hom����ATTR����d��ATTR�d�dto_is_mul_hom�	~��declis_group_hommk'��������S_inst_1�-_inst_2�	�fhfx%y�/4�
A�^�
MO�T�����S���-���	��������%4�%�2�	��PInfo���doc�� Construct `is_group_hom` from its only hypothesis. The default constructor tries to get
`is_mul_hom` from class instances, and this makes some proofs fail.ATTR�������ATTR�������
Strmk'��declis_add_group_hommk'��������S���
f���
i������%���/4�
��
��
�MO�
������S���
f���
i�����(�
�%4is_add_hommk%�
k�
��PInfo���declis_group_homto_is_monoid_hom��������S_inst_1�-_inst_2�	�f_inst_3�n���0�	������S���-���	������nis_monoid_homof_mul%�04�}%4�PInfo���	prt��VMR��VMC������������doc��A group homomorphism is a monoid homomorphism.decl��equations_eqn_1��������S���-���	������n��D�����%4�X�����S���-���	������n��D�f�PInfo���	ATTR�����EqnL��SEqnL��ATTR�d��classis_monoid_hom��dATTR�d������
Strto_is_add_monoid_hom����ATTR������x��declis_add_group_homto_is_add_monoid_hom��������S���
f���
i�����
����
i�
r�����S���
f���
i�����
�is_add_monoid_homof_add%�
i4is_add_group_homto_is_add_hom%4�PInfo���	VMR��VMC������������ATTR�d��classis_add_monoid_hom��ddecl��equations_eqn_1��������S���
f���
i�����
�����cd%4�������S���
f���
i�����
������PInfo���	decl��map_one��������S���-���	������n�`�����0�	������S���-���	������n��%�0�	��f�PInfo���doc��A group homomorphism sends 1 to 1.ATTR�������ATTR������	���declis_add_group_hommap_zero��������S���
f���
i�����
��`�a�b�
i�
������S���
f���
i�����
���%�
i�
r���PInfo���decl��map_inv��������S���-���	������na�/4�p�q%�p�qO�����S���-���	������n��eq_inv_of_mul_eq_one��O���/�
��O�k�m�
�/4�����������	�
��_a�����	�������'����������
$���
(������^�
4�Q%4�����	�/4�c�e�\������	�@�
>�_a�����	�������)��
$�	�=inv_mul_self%���@�/�������@�_��>_a�������������
$�@���map_one%4�
X��PInfo���doc��A group homomorphism sends inverses to inverses.ATTR�������ATTR�������
Strmap_neg��declis_add_group_hommap_neg��������S���
f���
i�����
����/4has_negnegadd_groupto_has_neg%����O�����S���
f���
i�����
���eq_neg_of_add_eq_zero��O���/�
���O�9�;�
��/4�����������������������	��
�����'�����
�����
$�����&�������
��
�4��%4�������/4�1�3�
������������E���������	��
������N���
$����neg_add_self%�����/�������������������������
������
$����is_add_group_hommap_zero%4�{���PInfo���decl��id�������,is_group_hom��������,�n����
��
��.�PInfo���	prt��VMR��VMC�����doc��The identity is a group homomorphism.decl��equations_eqn_1�������,��2����@������,��2�F�PInfo���	ATTR�����EqnL��SEqnL��ATTR�����class������ATTR�������ATTR������)��declis_add_group_homid�������
e����������P��mk���I�#�$�
g�PInfo���	VMR��VMC�����ATTR�����class������decl��equations_eqn_1�������P��V��e�d������P��V�j�PInfo���	decl��comp���u_1�����S���-���	������nγ_inst_4group��g�@_inst_5is_group_homf4is_group_homf�4�N�����S���-���	������n�����t���@���z�nf�4�N��f��.��kf4�N�����	�`�`�`%����f`4�PInfo���	prt��VMR��
VMC��

������������������doc��The composition of two group homomomorphisms is a group homomorphism.decl��equations_eqn_1����������S���-���	������n�����t���@���z�����������`%4�������S���-���	������n�����t���@���z������PInfo���	ATTR�����EqnL��SEqnL��ATTR�
��class����
ATTR�
����ATTR������~��declis_add_group_homcomp����������S���
f���
i�����
�����add_groupf���@����f4��f�4�N�����S���
f���
i�����
����������@������mkf�4�Nis_add_monoid_homto_is_add_homf��
g�add_groupto_add_monoidf4�N����
j`���`%�
is_add_group_homto_is_add_monoid_homf`4�PInfo���	VMR��
VMC��

������������������ATTR�
��class����
decl��equations_eqn_1����������S���
f���
i�����
����������@���������ghi�`%4�%�����S���
f���
i�����
����������@��������;�PInfo���	decl��injective_iff��������S���-���	�f_inst_4�nifffunctioninjective%a��
I���f�����S���-���	������n��intro�X�`h�X_x����O�[`�	:�	;�.`��N�g�q�����r�u�
�_a����i�	@�	A�	��[�4��������|���
$�r�g�
(�g��q%4p�fh�`xyhxy�|keqmp����������4�������e_1�[��������e_2�[��$�)>�[�)��%4�$�)��)>%����4inv_inv�4��inv_eq_of_mul_eq_one����	��`�a��������`��`�e�f���������������������_a`���������Z��\��	����������`4���������
$�����
(`�������`�����Q�`%����������`��`4��������4_a`�������������������
$�8������4��map_inv�`%4�����2�4��8��$>�`_a>�����?�A��
$�`�8propext�`�8inv_eq_iff_mul_eq_one`�4������3��`���3_a`�����@����
$�|�^��^�3inv_inv`�3�PInfo���doc��A group homomorphism is injective iff its kernel is trivial.ATTR�������ATTR�������
Strinjective_iff��declis_add_group_hominjective_iff��������S���
f���
i�����
��Y����
I���]������S���
f���
i�����
��i�����X��������l��
�
g`��N������������z��������|���
j���[�\�������
$���������%4p�������������������������4������4neg_neg�4��neg_eq_of_add_eq_zero����;��8�9���������`�=�>�����k�l����������`��������'��)��
j���������`��������(�
$��������`�����`%���������`��`�3������I��`������������@��(�����(�
$�M�	��	�Iis_add_group_hommap_neg�`%4�����H�I��M�d�t��>�����T�U��
$�t�M�p�t�Mneg_eq_iff_add_eq_zero`�I��}�t���r��r�3��`�3�PInfo���decl��mulu_1u_2αβ
_inst_4�s_inst_5�=fg�<_inst_6is_group_hom����%�N_inst_7��%�X����a�xk)����
�������=���<�������nkl�����6kl�l��comm_monoidto_comm_semigroupl�lto_comm_monoidl%�k�)�}kl���������PInfo���doc��The product of group homomorphisms is a group homomorphism if the target is commutative.ATTR�
��class���
ATTR�
����ATTR������U��declis_add_group_homadd��������
�����������<��	kl%�����%���������k)����
�����������<�������	mkkl���is_add_homaddkl�D�add_comm_monoidto_add_comm_semigroupladd_comm_groupto_add_comm_monoidl%����is_add_group_homto_is_add_homkl�����*���PInfo�
�ATTR�
�
class�	�

decl��invu_1u_2αβ
_inst_4��_inst_5�=f_inst_6��%4�E���\��
�����=���>��%�N�\�^��%�>�l��4aO��%�N�U�PInfo��doc�The inverse of a group homomorphism is a group homomorphism if the target is commutative.ATTR����classis_group_hom���ATTR������ATTR��������declis_add_group_homneg����
����������%4��������
���������j�%����is_add_homnegmn%�\�D�4�U�&%���U�PInfo� �ATTR���� class�� ��declinvis_group_hom����_inst_1comm_group�/�m������������%���7��������
��
��;������mul_inv�PInfo�$�nspace�#doc�$Inversion is a group homomorphism if the group is commutative.ATTR����$classis_group_hom�$��ATTR����$��ATTR����$����
Strinv��declinvis_add_group_hom�����%add_comm_group�Sadd_comm_groupto_add_group������������%���[�������7�#�$�_������neg_add�PInfo�*�ATTR����*classis_add_group_hom�*��declis_add_group_hommap_sub��������S_inst_1�
f_inst_2�
if_inst_3�
�ab��has_subsubadd_group_has_sub�9�:%')�����S�2�
f�3�
i�4�5�
��6�7eqtrans������'��������%)
�	��
��
���%4��Annotcalc
���������������������z��_a������'�)���y%��`��`�����i���)�
$����g%4�
X��Annot�=�PInfo�1�doc�1Additive group homomorphisms commute with subtraction.declis_add_group_homsubu_1u_2αβ
_inst_1��_inst_2��fg�<_inst_3��_inst_4���a�9�B�:o��k)�C�D
�E���F���G�H�<�I���J��is_add_group_homadd�Ao%a��)� po%���PInfo�@�doc�@ The difference of two additive group homomorphisms is an additive group
homomorphism if the target is commutative.ATTR����@classis_add_group_hom�@��PInfoadd_monoid_hom�
indlu_1u_2MN
_inst_1�_inst_2add_monoid�SCn�P�R�S4e_1to_fun�<map_zero'%�b�d��q%��q%4map_add'xy_a�[`�D`g�x��')�Pmkrs%4�Z�{%4O�P�R�S�T�U
�V�x�W�z�Rq�a�T�U
�V�x�W�z�\�]�~�4�����^�_�`�p�$�s��%')�{%�T�U
�V�x�W�z�Y���[���\�X�]D�b�d%�����^�_�``�����D������`')�>�nspace�Pprt�Precdecl�Psizeof�R�S�T�U
�V�x�W�zx�nat�T�U
�V�x�W�z�Prec$�R�S4x���\�]���^��has_addadd�nathas_add�����nathas_onesizeofuv�default_has_sizeofuv�4�nD4�����o�(�%�_�`_%����ik�*�6�PInfo�c�
ATTR����cprt�cdecl�Phas_sizeof_inst�R�S�T�U
�V�x�W�zhas_sizeofw��T�U
�V�x�W�zhas_sizeofmkw��cxy4�PInfo�p�
ATTR����pclass�q�p��prt�pdecl�asizeof_spec�R�S�T�U
�V�x�W�z�\�]���^������L%��%4��T�U
�V�x�W�z�\�]���^���
#��b�PInfo�t�
ATTR����tEqnL�tprt�tgind�P�adecl�Pto_fun�R�S�T�U
�V�x�W�zc��<�T�U
�V�x�W�z�v�
Proj�P�a�u�R�S�<�Precuv�R�S%4�v�{%4�X�\�<�]���^��4�PInfo�u�
ATTR����uproj�u�adecl�Pmap_zero'�R�S�T�U
�V�x�W�z�v����u}~%4�����T�U
�V�x�W�z�v�
Proj�P�a�x�R�S���w}~%4�v������%4�����\�<�]���^���PInfo�x�
ATTR����xproj�x�adecl�Pmap_add'�R�S�T�U
�V�x�W�z�v��_%�`D��%4E�g�D%K�j�������T�U
�V�x�W�z�v�
Proj�P�a�y�R�S�����v���_�`��%4���������\�<�]���^���PInfo�y�
ATTR����yproj�y�adecl�Prec_on�Q�R�S�T�U
�V�x�W�z�Y���Z���[�\�X�]���^��%��`4M�T�U
�V�x�W�z�Y���Z���[���Prec�Q�R�S%4�PInfo�z�
ATTR����zauxrec�zprt�zauxrec�Prec_ondecl�Pcases_on�Q�R�S���PInfo�}�
ATTR����}auxrec�}doc�PBundled add_monoid homomorphisms; use this for bundled add_group homomorphisms too.decl�Pno_confusion_type�Q�R�S�T�U
�V�x�W�zPv1��v2���T�U
�V�x�W�z����������}�Q�R�S%�����\��]�b�d����%�^�_`�`�����[���D��`#��_����')��`���{�`�\����]�+�b���d��`�������^�_���`�������[���D����#���_��������')�to_fun_eq�}~�����4���PInfo�~�
ATTR����~prt�~decl�Pno_confusion�Q�R�S�T�U
�V�x�W�z���������h12�n���~�Q�R�S%4�T�U
�V�x�W�z����������������}~�{%4a��h1a�n�{`���`%h11�n��44�}���`�������\�``�]��b��d���`��`�^�_���`�������[���D����#���_�������')����n�����44`����o�PInfo���
ATTR�����no_conf��prt��decl�ainj�R�S�T�U
�V�x�W�z�\�]���^���\��]�*�^�@��n�H���`%��4�n������T�U
�V�x�W�z�\�]���^���\��]�*�^�@���Pno_confusionrs���`������`%�4����PInfo���
decl�ainj_arrowl�R�S�T�U
�V�x�W�z�\�]���^���\��]�*�^�@��P����%�T�U
�V�x�W�z�\�]���^���\��]�*�^�@������6�ainj�R�S�������`%4�PInfo���
decl�ainj_eq�R�S�T�U
�V�x�W�z�\�]���^���\��]�*�^�@����n�L4�T�U
�V�x�W�z�\�]���^��to_fun_1�map_zero'_1�*map_add'_1�@�p��a�h��ah��D���`%4a�a�V����W�y���\�o�\�����e_3�n����]��4�b�)�d�)%�������]�)4�b���d�����)���)%�^�_�`���[���D��`#���_���������^�_���`�����[���D���#���_������`�����V����W�y���\����\���e_3�n����]��4�b�d��%���������^�_�`���[���D��#���_��������eqdrecuv�����%�\�����n������n�{��`�����`4���uv����\���b�d��������`��\��_��`�,4�[�.�D�.��#�,�_�,���,��MO4���{����������%���%�\�����b���d����������%����%�Y�\���_���`��4��[��D��#��_����`MO%�j4`%`4%�PInfo���
TK→+NOTAadd_monoid_hom→+ →+ ��PInfomonoid_hom�
indlu_1u_2MN
_inst_1�>_inst_2monoid��Cn������4e_1to_fun�<map_one'���������%���%4map_mul'xy_�F�=`�l`�L�Z�s')��mk��%4����%4O����������
����������������
������������������4�����������
�R����U��%')��%����
�������������������X��D����%����������`����s�l����n�?`')���nspace��prt��recdecl��sizeof��������
��������x�������
����������rec$����4x�������������$�%D4�$�*�*�T�%����_%����ik�*�a�PInfo���
ATTR�����prt��decl��has_sizeof_inst��������
���������D������
���������J������4�PInfo���
ATTR�����class�q����prt��decl��sizeof_spec��������
�����������������V�u%��%4�����
�����������������l���PInfo���
ATTR�����EqnL��prt��gind����decl��to_fun��������
��������c���<����
������������
Proj�����������<��rec�������%4����%4�X���<��������4�PInfo���
ATTR�����proj����decl��map_one'��������
������������������%4�������
������������
Proj����������������%4��������%4�������<���������PInfo���
ATTR�����proj����decl��map_mul'��������
��������������%��D��%4�.�I�l%�4�L�?��������
������������
Proj������������������������%4�������<���������PInfo���
ATTR�����proj����decl��rec_on����������
���������������������X���+���<%��`4M����
�������������������!��rec������%4�PInfo���
ATTR�����auxrec��prt��auxrec��rec_ondecl��cases_on�������(�7�PInfo���
ATTR�����auxrec��doc��Bundled monoid homomorphisms; use this for bundled group homomorphisms too.decl��no_confusion_type����������
��������Pv1��v2������
��������������������������%����������������%����`����+����=���l��`���A��?�')�?�`�����`���L���+��������`�����������������X����=���l��������A���?����')�t�PInfo���
ATTR�����prt��decl��no_confusion����������
������������������h12�n���������%4����
��������������������������%4a��h1a�n��`���`%h11�n��44�����`���������������������`��`����������������=���l��������A���?���')���PInfo���
ATTR�����no_conf��prt��decl��inj��������
����������������������Q���f��n�n���`%�
4�����
����������������������Q���f����no_confusion�����`������`%�*4�'�PInfo���
decl��inj_arrowl��������
����������������������Q���f���8����
����������������������Q���f��P��6��inj�����������`%4�PInfo���
decl��inj_eq��������
����������������������Q���f����a����
����������������to_fun_1�map_one'_1�Qmap_mul'_1�f�p��a�h��ah��K���`%4���a���>�����������o����e_3������4���)���)%����������4�����������)���)%����������������=���l��`����A���?����������������������=���l�������A���?��`�������>����������������e_3������4��������%������������������������=���l������A���?�������������n�����`�����`4��������������������`����������,�-4��.�=�.�l�.����,�A�,�?�,��MO4��������������%�Y����������������������%�j�Y������������4���=��l�����A��?�`MO%�j4`%`4%�PInfo���
ATTR���������
Stradd_monoid_hom����ATTR�������ATTR�����map_one'��
Strmap_zero'��ATTR�����map_mul'��
Strmap_add'��TK→*NOTAmonoid_hom→* →* ��decl��has_coe_to_funu_1u_2MN
mM��mN��has_coe_to_fun�����������
��������has_coe_to_funmk����x���<��4�PInfo���	prt��VMR��VMC���	�����������decl��equations_eqn_1��������
������������������4������
���������������PInfo���	ATTR�����EqnL��SEqnL��ATTR�����class������ATTR�������ATTR�������
Strhas_coe_to_fun��decladd_monoid_homhas_coe_to_fun��������
���x���z�������
���x���z�������<��4�PInfo���	VMR��VMC���	��v��������ATTR�����classhas_coe_to_fun����decl��equations_eqn_1��������
���x���z��������4������
���x���z�������PInfo���	declmonoid_homof_proof_1u_1u_2MN
mM��mN��fhis_monoid_hom����%4�����
����������������%�>�N�B�K4��to_is_mul_hom��%4�PInfo���decl����������
��������������������
����������������%4��map_one��%4������%4�PInfo���VMR��VMC���������������doc��Interpret a map `f : M → N` as a homomorphism `M →* N`.decl��equations_eqn_1��������
���������������n��������%4�#����
�������������������1�PInfo���ATTR�����EqnL��SEqnL��ATTR��������$
StrInterpret a map `f : M → N` as a homomorphism `M →+ N`.ATTR�������
Strof��decladd_monoid_homof_proof_1��������
���x���z����is_add_monoid_hom��%4������
���x���z�����M��%�\�z�`��4is_add_monoid_homto_is_add_hom��%4�PInfo���decl����������
���x���z�����M������
���x���z�����M��%4is_add_monoid_hommap_zero��%4��_proof_1��%4�PInfo���VMR��VMC���������������decl��equations_eqn_1��������
���x���z�����M�n������%4������
���x���z�����M�������PInfo��doc��Interpret a map `f : M → N` as a homomorphism `M →+ N`.decl��coe_of��������
��������f_inst_3���n��F��������%4�1coe_fn�������1����
������������rfl������PInfo��ATTR����ATTRsimp���ATTR������ATTR������
Strcoe_of��decladd_monoid_homcoe_of��������
���x���z���M�n������%4��������������
���x���z���M�������PInfo�
�ATTR����
decl��coe_inj��������
��������f��g��h�n��������4����
���������������������%����n������%��������4��4f_to_fun�f_map_one'�Qf_map_mul'�f��n���n���`����n� �� %�����`������`��n���������`�������`�������`%4��� !� &� .� 2�n������������������%g_to_fun�g_map_one'�������������������`g_map_mul'������������=��l�������A���?����')��n��������������������������������%��� k� p� x� |� u4eqdcases_on��������������������������������� �� �� �t_1� ���n�����)��������)��������)�����`��� �� �� �H_1�n�������)��������)��������)���%��� �� �� �H_2heq�n���������)��������)��������)����`��� �� �� �� �� �%� �4�n���������)���������)������ �� �� �4������)�)`��!�����������������������������������������')��n��� ����������)� ���� ��!)� ��!.� �4�� ��n�����������������������������������������!9�!>�!F�!J�!C4�!L�!K���!G�!K�n���������������������������!a%4���`�����������������������������=���l��������A���?���)������ �� �� ��� ��!0�!.� �4�!0�!/���!+�!/���!9�!F%����!%`4��� ��!�!heqrefl�n� �� ��!�PInfo��!ATTR������ATTR������
Strcoe_inj��decladd_monoid_homcoe_inj��������
���x���z�������n��������4����
���x���z�������!�� cases_on��%�����n������%�����!��!�4��4����*��@��n���H���`����H�!���"%�!����`��{���`��n���{�����`�������`�������`%4���"�"�" �"$�n�{����������������%������b���d�����������`��������������[��D���#���_��������')��n���{����������������������������%���"]�"b�"j�"n�"g4� ����{����������������������������"y�"~�"���"���n���{�)��������)��������)�����`���"��"��"���n���{���)��������)��������)���%���"��"��"��� ��n���{�����)��������)��������)����`���"��"��"��"��"�%�"�4�n�{�������)���������)������"��"��"�4��!�!��!�����������������������������������������')��n���"����������)�"����"��#�"��#�"�4�� ��n���{�������������������������������������#$�#)�#1�#5�#.4�#7�#6���#2�#6�n�{�������������������������#L%4���`����������������������!w�����[���D����#���_�������)�!��!���"��"��"��� ��#�#�"�4�#�#���#�#���#$�#1%�!�4���"�"��"��!��n�"��"��"��PInfo�!�!decl��ext��������
��������f��g��hxD�����%4�#�������
���������$���%���&�#���coe_inj��%4funext��x�#��#��PInfo�#�%ATTRext���#boollistext_param_type�#�name�#��#��#�boolff�#��#�listnil�#��#��#��#��#�listcons�#��#��#���
Strthunk����
Strfunext���#��#���
Strulift����
Strext�$�#��#���
Strarray���$�$
�#��#���
Strplift���$�$�#��#���
Strprod���$�$�#��#�namemk_numeralunsignedof_nat'�����
Strpropext���#��#��$ �$!has_zerozero�nathas_zero���#��#��#�ATTR�+���#�#��0tt�#��#��#��#���
Strmonoid_hom���#��$5ATTR����#��ATTR����#�$��decladd_monoid_homext��������
���x���z�$��%���&�'D������%4�$R�!�����
���x���z�$��%���&�$Yadd_monoid_homcoe_inj��%4�#��$S�$V�PInfo�@�%decl��ext_iff��������
��������f��g���T�*�#�����
���������D���E���h�$t�#�h�$tx�u����_x��_������`%�$�4rfl���h�#���ext��%4�PInfo�C�)ATTR����C��ATTR����C��
Strext_iff��decladd_monoid_homext_iff��������
���x���z�D��E���T���$Y����
���x���z�D��E���h�$��$Y�F�$��G�$���H��_������`%�$�4�$��!��J�$Yadd_monoid_homext��%4�PInfo�M�)decl��map_one��������
��������f����������%4�������
���������Q����map_one'��%4�PInfo�P�.doc�PIf f is a monoid homomorphism then f 1 = 1.ATTR����PATTR����P��ATTR����P�	���decladd_monoid_hommap_zero��������
���x���z�Q���������%4��������
���x���z�Q�add_monoid_hommap_zero'��%4�PInfo�T�.ATTR����Tdecl��map_mul��������
��������f��a%bD�#������#��#�����
���������X���Y%�Z��map_mul'��%4�PInfo�W�2doc�WIf f is a monoid homomorphism then f (a * b) = f a * f b.ATTR����WATTR����W��ATTR����W����decladd_monoid_hommap_add��������
���x���z�X��Y%�ZD�$S�����$S�$T����
���x���z�X��Y%�Zadd_monoid_hommap_add'��%4�PInfo�]�2ATTR����]decl��is_monoid_hom��������
��������f�����$�����
���������a������%4�$���%�=%�l%4�>�@�$���map_mul��%4��map_one��%4�PInfo�`�5	prt�`VMR�`VMC�`�a��������decl�`equations_eqn_1��������
���������a����%Q�`����%4�%v����
���������a����%Q�%��PInfo�e�5	ATTR����eEqnL�eSEqnL�`ATTR����`classis_monoid_hom�`��ATTR����`�	|ATTR����`�	y��decladd_monoid_homis_add_monoid_hom��������
���x���z�a��L�%����
���x���z�a�is_add_monoid_hommk��%4�%�%�[%�D%4�����%add_monoid_hommap_add��%4add_monoid_hommap_zero��%4�PInfo�h�5	VMR�hVMC�h�a��������ATTR����hclass�i�h��decl�hequations_eqn_1��������
���x���z�a���%��h��%4�%�����
���x���z�a���%��%��PInfo�p�5	decl��is_group_homu_4u_5G�rH�s_inst_1group�_inst_2comm_group�f����4�k��k�4�m�4is_group_hom��%4�%�coe_fn�����%�%�%�%4�%��%�����%�%��%��t�%��u�%��v�%��x�%��z�%��n��%4�%��%����%�C�%�i�%�%��C��i��%��%���map_mul��%�%��%��PInfo�q�<	prt�qVMR�qVMC�q�z�x�v�u�tdecl�qequations_eqn_1�r�s�t�%��u�%��v�%��x�%��z�%���%��q�r�s%4�&#�t�%��u�%��v�%��x�%��z�%���%��&/�PInfo��<	ATTR����EqnL�SEqnL�qATTR����qclass�{�q��ATTR����q��ATTR����q����decladd_monoid_homis_add_group_hom�r�s�t�%��u�%��vadd_group��xadd_comm_group��z����4add_groupto_add_monoid����4add_comm_groupto_add_group�4is_add_group_hom��%4�&L�%��&C%�&F%4�&J�&Vadd_monoid_homhas_coe_to_fun��%�&[�&^�t�%��u�%��v�&@�x�&B�z�&P��mk��%4�&V�&gis_add_hommk��%add_semigroupto_has_add�%add_monoidto_add_semigroup�%�&[�������&^�&gadd_monoid_hommap_add��%�&[�&^�PInfo���<	VMR��VMC���z�x�v�u�tATTR�����class������decl��equations_eqn_1�r�s�t�%��u�%��v�&@�x�&B�z�&P��&h����%4�&��t�%��u�%��v�&@�x�&B�z�&P��&h�&��PInfo���<	decl��id_proof_1u_1M_inst_3�?��id���hone��&������?rfl��&��PInfo���Adecl��_proof_2�������?_x_x4���&��hmul�4�&������?����4�&��&��PInfo���Adecl���������?���������?�����&����������PInfo���AVMR��VMC���Aa����doc��The identity map from a monoid to itself.decl��equations_eqn_1�������?���&������&������?�E�&��&��PInfo���AATTR�����EqnL��SEqnL��ATTR�������ATTR������)��decladd_monoid_homid_proof_2�����������4���&�add_monoidadd�4�&����������4�&��&��PInfo���Adecl��_proof_1��������&��&�add_monoidzero��'������&��'�PInfo���Adecl��������������������mk���&���_proof_1���_proof_2��PInfo���AVMR��VMC���A������decl��equations_eqn_1����������'����'������E�'�'%�PInfo���Adecl��comp_proof_1����u_3����
P�����>4����4mPmonoid�4hnp����%hmn�4�������|�����'34����4����%��%�G�H%������4����
���'.���'/���'0���'2���'7���'9���'`true�����'`�'j�$>�'`�';�'_�'_�'j��e_1�':�`��e_2�':����$��>�':���'%4���$�����>%�'�'X�'_���'X�'L�M�N�'_�'��'L�'T�'W�'��comp_app����'L�'T�'W����'��'��'L�%p%�P��4�'_�'_���'_�p�'s�'jeq_self_iff_true��'_trivial�PInfo���Jdecl��_proof_2����������
���'.���'/���'0���'2���'7���'9����`�'v�'<�`�'@�'3`%�'F`%���l� 
4���s�,���C��i�%�'��'�����
���'.���'/���'0���'2���'7���'9���(	�'j�����(	�'j�'px��`����':`�'<���`�'@�'3�`�'F�`%��� ������R�S�T�'�`�'�`�'�`�(0�(0x��`����'j�'jforall_congr_eq����(����`�'j���(N`��`�(��`�'j��`�'p�(�'v�(�'��'��'��'��(`�'j��`���':����������':���'|��>�':���(m%4�'�����%�(m�'��(`�'��'��'����n�4�([�(^�(`�(��'��'��'��(��'��`�'��'��'��'�`�(��(��'��%h�`4�W��`%�([�(^�(�(`�%has_mul�a`���e_2�'{������e_3�(m������'���(�%4�����*%�(��(�(�(\�(��(�(_�(��p�(b�'j�'��(`�paaa`��'j�'jforall_2_true_iff����`�'��PInfo���Jdecl������������
���'.���'/���'0���'2���'7���'9����%4����
���'.���'/���'0���'2���'7���'9����%4�'U��������%4��������%4�PInfo���JVMR��	VMC��	�J	�����������������doc��Composition of monoid morphisms is a monoid morphism.decl��equations_eqn_1����������
���'.���'/���'0���'2���'7���'9������)������%4�)&����
���'.���'/���'0���'2���'7���'9���)�)9�PInfo���JATTR�����EqnL��SEqnL��ATTR�������ATTR������~��decladd_monoid_homcomp_proof_2����������
���'.���4���y4��add_monoid�4������%����4����`�'v�'��'@�)T`%add_monoid_homhas_coe_to_fun��`%���F�!�4�����has_addadd�add_semigroupto_has_add�add_monoidto_add_semigroup�%�)o�)o����
���'.���)P���)Q���)S���)X���)Z���)��'j�����)��'j�'p����`����(�(�'@�)T�`�)`�`%���"
������,�-�.�)w`�)y`�){`�)��)��(K�'j�(O���)��(S���(U��`�)��(X��`�'p�)��'v�)�)f�)n�)f�)n�)��'j�(��)u�)��(��)u�)f������)��)��)��)��)f�)n�)t�)��(��)f�)n�)t�(��)��)��)f�%��`4add_monoid_hommap_add��`%�)��)��)��)��%has_add���`������'{���������(��(��)w��*%4�(��*�)~�)��)��)��)��)��)��p�)��'j�(��)��(��'��PInfo���Jdecl��_proof_1����������
���'.���)P���)Q���)S���)X���)Z�';�'?�'@�)T4�)`4����%�!�%� �!%has_zerozero�add_monoidto_has_zero�4����
���'.���)P���)Q���)S���)X���)Z���*T�'j�����*T�'j�'p�*T�';�*S�*S�'j�'��*L�*S�'��*L�*@�&�'�*S�*i�*@�*H�*K�*l�'��*@�*H�*K�'��*o�*k�*@�%�%add_monoid_hommap_zero��4�*S�*S�'��*S�p�*d�'j�'��*S�'��PInfo���Jdecl������������
���'.���)P���)Q���)S���)X���)Z����%4����
���'.���)P���)Q���)S���)X���)Z��mk��%4�*I��_proof_1���%4��_proof_2���%4�PInfo���JVMR��	VMC��	�J	�����������������decl��equations_eqn_1����������
���'.���)P���)Q���)S���)X���)Z�)/�*������%4�*�����
���'.���)P���)Q���)S���)X���)Z�)D�*��*��PInfo���Jdecl��comp_apply����������
���'.���'/���'0���'2g�'7f�'9x�':�|�����)`����`�)1`%4�'@�'3%�'F%4����%�$�%����
���'.���'/���'0���'2���'7���'9��rfl��+�PInfo���OATTR�����ATTR�����ATTR�������ATTR�������
Strcomp_apply��decladd_monoid_homcomp_apply����������
���'.���)P���)Q���)S���)X���)Z���*��*��*�`add_monoid_homhas_coe_to_fun��`�*�`%4�'@�)T%�)`%4����%�$�%����
���'.���)P���)Q���)S���)X���)Z���+#�+E�PInfo���OATTR�����decl��comp_assoc������u_4����
���'.���'/���'0���'2Q�%�_inst_3monoid��f�'Og�+h����%4���������%��comp������%��comp����`%4��comp�����`%�)1���`4����
���'.���'/���'0���'2���%����+p���'O���+���+urfl���+{�+��PInfo���Sdoc��Composition of monoid homomorphisms is associative.ATTR�����ATTR�������ATTR�������
Strcomp_assoc��decladd_monoid_homcomp_assoc������������
���'.���)P���)Q���)S���%���add_monoid����*C���+J������%4�+v������%add_monoid_homcomp������%�����`%4������`%�*����`4����
���'.���)P���)Q���)S���%����+����*C���+J���+��+��+��+��PInfo���Sdecl��one_proof_1����
���������,
��
���,�$��,
�PInfo��Zdecl�_proof_2��������
���,_x4_x����4��>�@4�,�,����
���,�4����,�,one_mul�4�,�PInfo��Zdecl���������
��������������
����������4_x����4�����4�PInfo��Zprt�VMR�VMC��Z�	��������
decl�equations_eqn_1��������
���������n�������4�,D����
�������������,N�PInfo��ZATTR����EqnL�SEqnL�ATTR������ATTR������
Strzero��decladd_monoid_homzero_proof_1����
���y�,	�����,b��
���,^�,�,b�PInfo��Zdecl�
_proof_2��������
���,^�4�������4#����4�,k�,k����
���,^�4��,%�,r�,kzero_add�4�,k�PInfo��Zdecl�
��������
���x���z�����
���x���z��4�	���
_proof_1�4�
_proof_2��4�PInfo�
�ZVMR�
VMC�
�Z�	��������
decl�
equations_eqn_1��������
���x���z�n��
���4�,�����
���x���z����,��PInfo��Zdecl��has_one��������
��������has_one��������
��������has_onemk����,N�PInfo��`	prt�VMR�VMC��`	���������decl�equations_eqn_1��������
�����������,������4�,�����
�����������,��,��PInfo��`	ATTR����EqnL�SEqnL�ATTR����class����ATTR������ATTR������
Strhas_zero��decladd_monoid_homhas_zero��������
���x���zhas_zero������
���x���z�mk���,��PInfo��`	VMR�VMC��`	���������
ATTR����class����decl�equations_eqn_1��������
���x���z�,��,����4�,�����
���x���z�,��,��,��PInfo� �`	decl��inhabited��������
��������inhabited��������
��������inhabitedmk����������,��PInfo�!�c	prt�!VMR�!VMC�!�c	���������decl�!equations_eqn_1��������
�����������,��!����4�,�����
����������	�,��-�PInfo�&�c	ATTR����&EqnL�&SEqnL�!ATTR����!class�"�!��ATTR����!��ATTR����!��
Strinhabited��decladd_monoid_hominhabited��������
���x���z�,������
���x���z�,��has_zerozero���,��PInfo�(�c	VMR�(VMC�(�c	���������
ATTR����(classinhabited�(��decl�(equations_eqn_1��������
���x���z�-�-�(�
�4�-!����
���x���z�-�-�-+�PInfo�-�c	decl��mul_proof_1u_1u_2MN
mM��_inst_3comm_monoid�1f���to_monoid�4g���-:���%�B�K�-:%4�����-C���-C���-J�������-C�2�3
�4���5�-9�7�-=�9�-@�
�-T���-T�'j�����-T�'j�'p�-T���-S�-S�'j�%�e_1��`e_2�+����>����%4�������>%���-P�-S��%�-P�-F�-S�-S�-S�%�
%����e_2_�`��e_3�����������-�%4���������%�-��-E�-L�-S�%p%�-C�-O�-S�-�mul_one�%�-C�-S�-S�-S�%�-S�p�-c�'j���%�-S�'��PInfo�/�idecl�._proof_2�0�1�2�3
�4���5�-9�7�-=�9�-@�����mul�%�����-:%���-��&��-�4�-��-��-��-��-��-��-��-��2�3
�4���5�-9�7�-=�9�-@�������-�����U���-��-���-���-��-��-��-��-��-��-��-��.�-��-��.�����.�.���
�-�_a��_�L�Z�s�-:�����.�$��.%��4�.�.�.�.�.4�."4�.�.�."_�.�.#�./�
$�.�.�%h�-����.�.	�-��-��-��.�����.�.K�.�-�_a��_�.�.'�.+�.#�./_�.R�./�
$�.�.H�.?4���.K�-��.	�-��-��.�����.K�.k�.�.I_a��_�.R�.�.(�.-�./_�./�
$�.K�.i���.i�.I�
�-��.�-��-����.k�.j�-��.�-��-������.k�.��.�._a��_�.�.R�.(�.-�./�.��
$�.k�.����.��.�.��.�-��-����.��-���U�V��%�.��-��-��-��-��.������.��.��.�.��.��-��-�_a���.��.�.*�.+�.-_�.2�.-�.��
$�.��.�mul_right_comm��.��-��-��-���.��PInfo�?�idecl�.�0�1�2�3
�4���5�-9�7�-=�9�-@�-G�2�3
�4���5�-9�7�-=�9�-@��-Cm�4�L���-:����.��#��.�4�.��/�0�1%4�?�0�1%4�PInfo�.�iprt�.VMR�.VMC�.�i�G�9�7�5�4�3�2
doc�.The product of two monoid morphisms is a monoid morphism if the target is commutative.decl�.equations_eqn_1�0�1�2�3
�4���5�-9�7�-=�9�-@�n�-G�.�0�1%4�/
�2�3
�4���5�-9�7�-=�9�-@���-G�/�PInfo�I�iATTR����IEqnL�ISEqnL�.ATTR����.��ATTR����.�U��decladd_monoid_homadd_proof_2�0�1�2�3
�4�x�5add_comm_monoid��7�~add_comm_monoidto_add_monoid�4�9���//����add_comm_monoidadd�%�����//%�!��/:�&��/>4�/C�/8�/8�/?�/F�/8�/?�/F�2�3
�4�x�5�/.�7�/2�9�/5�������/T��$�s���/:�/?���/F���/`�/`�/J�/L�/`�/O�/Q�/`�/f�/O�/c�/k�����/l�/r�.�/a�A��_g�x���//�����/y�$��/y%��4�/��/��/|�/|�/�4�/�4�/|�/��/�_�/|�/��/��
$�/l�/n�%��/:���/r�/o�/`�/L�/Q�/k�����/r�/��.�/c�B��_�/|�/��/��/��/�_�/��/��
$�/r�/��/�4���/��/`�/o�/L�/Q�/k�����/��/��.�/��C��_�/��/|�/��/��/��.w�/��
$�/��/����/��/����/^�/n�/L�/Q���/��/��/`�/h�/O�/Q�����/��/��.�/k�D��_�/|�/��/��/��/��/��
$�/��/����/��/k�/��/g�/O�/Q���/��/`$�s�t�%�0�/J�/L�/O�/Q�/������/��0�.�0�0�/O�/L�E���/��/|�/��/��/�_�/��/��0$�
$�/��0add_right_comm��0�/J�/O�/L�.��0�PInfo�L�idecl�K_proof_1�0�1�2�3
�4�x�5�/.�7�/2�9�/5��#%�`���//%4�����0J���0J���0Q�������0J�2�3
�4�x�5�/.�7�/2�9�/5�
�0[���0[�'j�����0[�'j�'p�0[���0Z�0Z�'j�-��0W�0Z�-��0W�0M�0Z�0Z�0Z�%%�����<�-��`���=���-����0u%4�-��0u�0L�0S�0Z�%�%�0J�0V�0Z�0�add_zero�%�0J�0Z�0Z�0Z�-��0Z�p�0j�'j�-��0Z�'��PInfo�S�idecl�K�0�1�2�3
�4�x�5�/.�7�/2�9�/5�0N�2�3
�4�x�5�/.�7�/2�9�/5�s�0J�GK�j���//�����0��$P�0�4�0��K_proof_1��%4�K_proof_2��%4�PInfo�K�iVMR�KVMC�K�i�G�9�7�5�4�3�2
decl�Kequations_eqn_1�0�1�2�3
�4�x�5�/.�7�/2�9�/5�n�0N�K��%4�0��2�3
�4�x�5�/.�7�/2�9�/5���0N�0��PInfo�X�idecl��has_mulu_1u_2MN
mM��_inst_3�-9has_mul�Z�[�-=�\�]
�^���_�-9��mk��-=�/4�PInfo�Y�p	prt�YVMR�YVMC�Y�p	�_�^�]�\�.decl�Yequations_eqn_1�Z�[�\�]
�^���_�-9�,��0��Y�Z�[4�1�\�]
�^���_�-9�,��0��1�PInfo�c�p	ATTR����cEqnL�cSEqnL�YATTR����Yclass�`�Y��ATTR����Y��ATTR����Y��
Strhas_add��decladd_monoid_homhas_add�Z�[�\�]
�^�x�_�/.has_add��/2�\�]
�^�x�_�/.�fmk��/2�0�4�PInfo�e�p	VMR�eVMC�e�p	�_�^�]�\�KATTR����eclass�f�e��decl�eequations_eqn_1�Z�[�\�]
�^�x�_�/.�,��1�e��4�1'�\�]
�^�x�_�/.�,��1�11�PInfo�i�p	decl��comm_monoid_proof_1u_1u_2MN
_inst_3��_inst_4�-9a�-=b�-@c�-G�n�.��/%�1B4�1C�1B�n�o
�p���q�-9�r�-=�s�-@�t�-G�$��.��1F�1J�'�.��-��-��-��PInfo�k�t	decl�j_proof_2�l�m�n�o
�p���q�-9a�-=�n�-@�/%4�,J%4�-?�n�o
�p���q�-9�v�-=�$�%4�-?�1n�'%�,(%�-C�-K�PInfo�u�t	decl�j_proof_3�l�m�n�o
�p���q�-9a�-=�1d�1h�1l�n�o
�p���q�-9�x�-=�1y�1��'%�-��1~�PInfo�w�t	decl�j_proof_4�l�m�n�o
�p���q�-9a�-=b�-@�/�/�n�o
�p���q�-9�z�-=�{�-@�$�%�-C�/�1��'mul_comm�m���.��.��PInfo�y�t	decl�j�l�m�n�o
�p���q�-9comm_monoid�l��-=�n�o
�p���q�-9�mk��-=���-=�1�k�l�m4�,��-=�,��-<�u�l�m4�w�l�m4�y�l�m4�PInfo�j�t	prt�jVMR�jVMC�j�t	�q�p�o�n�.�8�doc�j(M →* N) is a comm_monoid if N is commutative.decl�jequations_eqn_1�l�m�n�o
�p���q�-9�,��1��j�l�m4�1��n�o
�p���q�-9�,��1��1��PInfo���t	ATTR�����EqnL��SEqnL�jATTR����jclass�}�j��ATTR����j����
Stradd_comm_monoid����ATTR����j�1���decladd_monoid_homadd_comm_monoid_proof_4�l�m�n�o
�p�x�q�/.�z�/2�{�/5�0��0��n�o
�p�x�q�/.�z�/2�{�/5�$�%�0J�0��1��'add_comm���0��0��PInfo���t	decl��_proof_3�l�m�n�o
�p�x�q�/.�x�/2�n�/5�0�%4�,�%4�/4�n�o
�p�x�q�/.�x�/2�$�%4�/4�2$�'%�0��0R�PInfo���t	decl��_proof_1�l�m�n�o
�p�x�q�/.�r�/2�s�/5�t�0N�n�0��0�%�2?4�2@�2?�n�o
�p�x�q�/.�r�/2�s�/5�t�0N�$��0��2C�2G�'�/��/O�/Q�/>�PInfo���t	decl��_proof_2�l�m�n�o
�p�x�q�/.�v�/2�2�2�2#�n�o
�p�x�q�/.�v�/2�2/�2b�'%�,{%�0J�22�PInfo���t	decl���l�m�n�o
�p�x�q�/.add_comm_monoid��/2�n�o
�p�x�q�/.��mk��/2has_addadd��/2�11��_proof_1��4�-�/2�,��/1��_proof_2��4��_proof_3� �!4��_proof_4�"�#4�PInfo���t	VMR��VMC���t	�q�p�o�n�K�,�
ATTR�����class������decl��equations_eqn_1�l�m�n�o
�p�x�q�/.�,��2w���$�%4�2��n�o
�p�x�q�/.�,��2w�2��PInfo���t	decl��map_invu_1u_2GH
_inst_3��_inst_4group��f�����A4g%�������P�L4���P�2��p���q�'�S%�U%4�2�����
�������2����2���%eq_inv_of_mul_eq_one�&%4�2��2������-A�B�K�2��2��2������2����2���R�2��2������2��2��.%�2�_a%��D�4�L���A�����%�2��#��2��2�4�2��2�%�3�'�(�2�D�3�
$�2��2���%�2��2��%h%�P�2��2����2����2������P�2������2��3,���2�_a��D�3�.�I���2��3�3D�3�3�
$�2��3)inv_mul_self�'���3,���2��2������3,�3N�2��3*_a%��D�3�!�"�2��3�3�
$�3,�2��-��P�2��-��2��PInfo���~doc��Group homomorphisms preserve inverse.ATTR�����ATTR�������ATTR���������decladd_monoid_hommap_neg��������
������add_group�&���}�	��4��%�������|��4���|�3zhas_negneg�'add_groupto_has_neg�'��%��%4�3�����
�������3s���3x��%eq_neg_of_add_eq_zero�&%4�3��3������0H�`���3z�3��3������3z���3��~�3��3������3��3��2��3���%��DK�j���������%�3��$O�3��3�4�3��3�%�3������3��3�3��
$�3��3��3�3��3��%�%�|�3z�3����3����3������|�3������3��3��31�3�����D�3�E�g���3��3��3�D�3��3��
$�3��3�neg_add_self�'���3����3��3������3��4�2��3���%��D�3������3��3��3��
$�3��3��0��|�3z�-��3��PInfo���~ATTR�����decl��map_mul_invu_1u_2GH
_inst_3��_inst_4�2�f�2�g%hD�3�35�3�2��3
�T�V�3<����
�������2����2���%�����45D�40�3�4,�44�����45�4A�.�4._a����������%�����4I�
�R��4�2��2���U���4I�4O4�S�U%�4O�4f�
$�45�4?�%h�2��2�4�4,���4AD�44�44�����4A�4}�4F�4>_a���4_�4O�4W�4f�4_�4f�
$�4A�43��map_inv����%4��44�PInfo����doc��Group homomorphisms preserve division.ATTR�����ATTR�������ATTR�������
Strmap_add_neg��decladd_monoid_hommap_add_neg��������
�������3s���3x��%��D�3��3��3��3��3������3�����
�������3s���3x��%�����4�D�4��3��4��4������4��4��4F�4������������%�!���4��p�4�3��3�$�s���4��4�4����%�4��4i�4��
$�4��4��%��3��3�4�4����4�D�4��4������4��4��4F�4������4��4��4��4��4��4��
$�4��4�add_monoid_hommap_neg�(�)%4�4��4��PInfo����ATTR�����decl��injective_iffu_1u_2GH
_inst_3��_inst_4�2�f�2��Tfunctioninjective����%������%4�B�$��5%�5'a%����2��2����3U����
�������2����2��h�5.�56h�5._x����3>���G�H����3=�3V�5B�����5C�5F�4F�3_a����4d�M�N�4I��`4��`��`��`��5L�5X�
$�5C�3V���3V�3�%p�2��2�4p�3Uh�56xyhxy�5L�4O���5P�2�`�2�`�5y4�5Q�`��e_1�������e_2����>����5�%4�����%�5��5{4���(`4�E`inv_eq_of_mul_eq_one�*`�5z�F�����5U�5z��_�L�Z�s�t�����5U�5��$��5U�5�%�5z�5������5�_�5��5��5��.�5�_a������n�4�A`���l����5�� 
�5��5��2���2���5�4�����5���5��
$�5��5����5��5��%h`�5U�5�%�5z��_�5��k�l�5�4�5��5��5��5��6_a����5��S`�U`�5��5��5���5��5��5��
$�6�5��5��5��6�4�`%4��_�5��6�5��6�d�6*_a>����6�6
�5��
$�6*�6�p�6*�6inv_eq_iff_mul_eq_one�)�6�5���_�5��5��6*�5��5�_a����6�5��5��5��
$�6C�6(�5��6(�5�inv_inv�,�5��PInfo����doc��A group homomorphism is injective iff its kernel is trivial.ATTR�������ATTR���������decladd_monoid_hominjective_iff��������
�������3s���3x�T�5#�����%4���%�6m�6o��%����3��3��53�4����
�������3s���3x�h�6v�6|���6v������3��5?� �!���3��4�6������6��6��4F�3�������4��&�'�4��5Q�b`�d`�`��6��6��
$�6��4�5c�4�3��%��3��3�4p�4���6|�������6��4����5P�3�`�3�`�6�4�5�5��6�4neg_neg�(`4�5�neg_eq_of_add_eq_zero�*`�6�a�����6��6���_g�x���������6��6��$��6��6�%�6��6������6�_�6��6��6��5��6�������������`���F���6��!��6��6��3���3���74�����6��5��7�
$�6��6��5��6��6��%�`�6��6�%�6���_�6������6�4�6��6��6��5��7%������6���`��`�7�7�7��6��7�7�
$�7)�6��5��6��7%�5
`%4��_�7#�7%�6��7)�d�7O��>����70�72�7�
$�7O�7)�p�7O�7)neg_eq_iff_add_eq_zero�)�7%�6���_�7$�6��7O�5��7$������71�7�5��7�
$�7h�7M�5��7M�7$���,�7$�PInfo����decl��mk'_proof_1���r�����?�t�%��v�%�f�4map_mula%b��%4�.�I����%�&�&�%�MO�7�����%has_oneone�monoidto_has_one��%�4�����?�t�%��v�7����7����7��	��7��7��&
�&�7��7��7��7��7�mul_self_iff_eq_one�4�7����7��7��2��>�N%�7��7��7������7��7�����7�_a���7��7�4�!�"�7��7��7��7��
$�7��7�����7��7��7��7����7��7��7������7��7��31�7�_a���7�4�7��7��7��7��7�O�7��
$�7��7�mul_one�%�7��)��7��PInfo����decl�����r�����?�t�%��v�7����7����7��+w%�7������?�t�%��v�7����7����7�����%�7������r%4�PInfo����VMR��VMC���������v�t����doc��Makes a group homomomorphism from a proof that the map preserves multiplication.decl��equations_eqn_1���r�����?�t�%��v�7����7����7��+v�8�����r%4�84�����?�t�%��v�7����7����7�����8�8B�PInfo����ATTR�����EqnL��SEqnL��ATTR�������ATTR��������decladd_monoid_hommk'_proof_1���r������t�%��v�&?���7�����%���7�4E�g��has_addadd�%�&x�&z�&ZMO�7�����%has_zerozero�add_monoidto_has_zero��&G4������t�%��v�8U���7����8g�	��7��8]�&w�&y�8p�8j�8j�8j�8sadd_self_iff_eq_zero�4�8j���8��7��3��\�z%�8i�8i�8j�����8��8��7��8������7��8b4�����8��8��7��8��
$�8��8��7��8��8��8i�8i���8��8k�8j�����8��8��31�8������7�4�8X�8��8��8��8�8��
$�8��8iadd_zero�%�8i�8�8j�PInfo����decl�����r������t�%��v�8U���7����8g�+�%�8p������t�%��v�8U���7����8g��mk��%�8p��_proof_1�.�/%4�PInfo����VMR��VMC���������v�t����decl��equations_eqn_1���r������t�%��v�8U���7����8g�+v�8����0�1%4�8�������t�%��v�8U���7����8g�8K�8��8��PInfo����decl��inv_proof_1u_1u_2MG
mM��_inst_3�=f���2��C4a%bD�Z����2��X�#��94���4�L���9�Z�9�Z�9����
�����=��9�%����9"�9�Z�9�9�9�����9"�9.�4F�9!_a���4`�4a�������������	4���95�9:4�95�9:�9?�
$�9"�9-�5c�9-�9!���9�9���9.D�9-�9-�����9.�9[�4F�9_a���9?�95���9@�9C�95�9c�
$�9.�9,�4r%�94�4��9-�PInfo����decl����������
�����=��9���F����
�����=��9��mk'����%4�Eg%�2��2��N�����O���O������%4�PInfo����prt��VMR��_lambda_1VMR��VMC�	���_fresh��}�
_fresh��|
VMC������������	�m��doc��The inverse of a monoid homomorphism is a monoid homomorphism if the target is
   a commutative group.decl��equations_eqn_1��������
�����=��9�n�9�������%4�9�����
�����=��9���9��9��PInfo���ATTR����EqnL�SEqnL��ATTR�������ATTR���������decladd_monoid_homneg_proof_1��������
��x�����~�3v��4�%�D�������3����$P�9�4��K�j���9����9����9�����
��x�����9��%����9��9����9��9��9������9��9��4F�9�����4��4����������!�����4���9��9�4�9��9��9��
$�9��9��5c�9��9���9��9����9�D�9��9������9��:�4F�9�����9��9����9��9��9��:�
$�9��9��4�%�9�4�4��9��PInfo���decl���������
��x�����9���������
��x�����9�add_monoid_hommk'�5�6%4���%�3��3��������������_proof_1�7�8%4�PInfo���VMR�_lambda_1VMR�VMC�����
_fresh�ߢ�
_fresh�ߡ
VMC�����������add_comm_groupto_add_group��decl�equations_eqn_1��������
��x�����9��n�:.��9�:%4�:J����
��x�����9����:.�:V�PInfo�#��decl��has_invu_1u_2MG
_inst_3��_inst_4�=has_inv�%�&�9�'�(
�)���*�=has_invmk�=�9�9�4�PInfo�$��	prt�$VMR�$VMC�$��	�*�)�(�'��decl�$equations_eqn_1�%�&�'�(
�)���*�=�,��:f�$�%�&4�:q�'�(
�)���*�=�,��:f�:{�PInfo�/��	ATTR����/EqnL�/SEqnL�$ATTR����$class�+�$��ATTR����$��ATTR����$��
Strhas_neg��decladd_monoid_homhas_neg�%�&�'�(
�)�x�*��has_neg�=�9��'�(
�)�x�*���2mk�=�9��:Q4�PInfo�1��	VMR�1VMC�1��	�*�)�(�'�ATTR����1class�2�1��decl�1equations_eqn_1�%�&�'�(
�)�x�*���,��:��1�>�?4�:��'�(
�)�x�*���,��:��:��PInfo�5��	decl��comm_group_proof_1u_1u_2MG
_inst_3��_inst_4�=�r���-;��4�s���->���t���-B��%4�,���.����1��:��0��:��@�8�9�:��1�%�:��:�4�:��:��:�;
�<���=�=�}mul_assoc�B�:��1��:��PInfo�7��	decl�6_proof_2�8�9�:�;
�<���=�=�v�:��,��:��1��:��C�B�:��Bmk�B�:��:��:��1�%4�:��:��:��:��,��:��,��:��one�B�:��:��:�;
�<���=�=�}one_mul�B�:��:��PInfo�?��	decl�6_proof_3�8�9�:�;
�<���=�=�x�:��:��:��:��:�;
�<���=�=�}mul_one�B�:��:��PInfo�C��	decl�6_proof_4�8�9�:�;
�<���=�=a�9�n�:��:��1%4�:��9����B�9��hmk�B�9��; �1�%4�:��:��,�%4�:��1�%4�:��1�%4�:��:�;
�<���=�=�F�9�1x�:��;"�;>�'%mul_left_inv�A%�N�9��PInfo�E��	decl�6_proof_5�8�9�:�;
�<���=�=�z�:��{�:��,��:��1��:��:��:��:��:��:��:��1�%�:��:��:��;[�;b�:�;
�<���=�=�}mul_comm�B�:��:��PInfo�I��	decl�6�8�9�:�;
�<���=�=comm_group�B�9�:�;
�<���=�=�lmk�B�9�:��:��:��7�8�94�:��:��:��?�8�94�C�8�94has_invinv�B�9�:{�E�8�94�I�8�94�PInfo�6��	prt�6VMR�6VMC�6��	�=�<�;�:��.��8���doc�6(M →* G) is a comm_group if G is a comm_groupdecl�6equations_eqn_1�8�9�:�;
�<���=�=�,��;w�6�8�94�;��:�;
�<���=�=�,��;w�;��PInfo�P��	ATTR����PEqnL�PSEqnL�6ATTR����6class�K�6��ATTR����6����
Stradd_comm_group����ATTR����6�;���decladd_monoid_homadd_comm_group_proof_5�8�9�:�;
�<�x�=���z�~�/0�4�{���/3��,����0I�%4�2~�;�add_semigroupto_has_add�B�;�add_semigroupmk�B�;�add_comm_monoidadd�B�;��2�%�;�add_comm_monoidadd_assoc�B�;��;��;��:�;
�<�x�=��add_comm_monoidadd_comm�B�;��2��;��PInfo�S��	decl�R_proof_1�8�9�:�;
�<�x�=���r�;��s�;��t�;��,����0���2~�;��1!�;��;��;��2�%�;��<4�<�<�:�;
�<�x�=���;��;��;��PInfo�^��	decl�R_proof_3�8�9�:�;
�<�x�=���x�;��,��;��2~�;��;��;��;��;��;��;��2�%4�;��;��;��<#�-�;��,��;�add_comm_monoidzero�B�;��<#�:�;
�<�x�=��add_comm_monoidadd_zero�B�;��;��PInfo�_��	decl�R_proof_2�8�9�:�;
�<�x�=���v�;��<�<*�<2�:�;
�<�x�=��add_comm_monoidzero_add�B�;��;��PInfo�d��	decl�R_proof_4�8�9�:�;
�<�x�=���F�9��n�;��<�1-%4�;��:Vadd_monoidzero�B�:.add_monoidmk�B�:.�<W�2�%4�;��<,�,�%4�;��2�%4�;��2�%4�;��:�;
�<�x�=���F�9��2.�;��<Y�<u�'%add_left_neg�A%���:@�PInfo�g��	decl�R�8�9�:�;
�<�x�=��add_comm_group�B�9��:�;
�<�x�=���mmk�B�9��;��;��;��R_proof_1�C�D4�<.�;��;��R_proof_2�E�F4�R_proof_3�G�H4has_negneg�B�9��:��R_proof_4�I�J4�R_proof_5�K�L4�PInfo�R��	VMR�RVMC�R��	�=�<�;�:� to_add_comm_monoid�K�v�,�
�ATTR����Rclass�m�R��decl�Requations_eqn_1�8�9�:�;
�<�x�=���,��<��R�M�N4�<��:�;
�<�x�=���,��<��<��PInfo�x��	decladd_monoid_hommap_subu_1u_2GH
_inst_1��_inst_2�3sf�3xg%hD�3��9�{�:�O%�L�N�3��3��}�~
������3s���3x��%����map_add_neg�O�|%4�PInfo�z��doc�zAdditive group homomorphisms preserve subtraction.ATTR����zEndFile