Require Import Spaces.Pos.Core Spaces.Int. Require Import Algebra.AbGroups.AbelianGroup. Local Set Universe Minimization ToSet. Local Open Scope int_scope. Local Open Scope mc_add_scope. (** * The group of integers *) (** See also Cyclic.v for a definition of the integers as the free group on one generator. *)AbGroupAbGroupType0MonUnit ?GInverse ?GSgOp ?GIsHSet ?GCommutative sg_opAssociative sg_opLeftIdentity sg_op 0LeftInverse sg_op inv 0exact Int.Type0exact 0%int.MonUnit Intexact int_neg.Inverse Intexact int_add.SgOp Intexact _.IsHSet Intexact int_add_comm.Commutative sg_opexact int_add_assoc.Associative sg_opexact int_add_0_l.LeftIdentity sg_op 0exact int_add_neg_l. Defined. (** For every group [G] and element [g : G], the map sending an integer to that power of [g] is a homomorphism. See [ab_mul] for the homomorphism [G -> G] when [G] is abelian. *)LeftInverse sg_op inv 0G: Group
g: GGroupHomomorphism abgroup_Z GG: Group
g: GGroupHomomorphism abgroup_Z GG: Group
g: Gabgroup_Z -> GG: Group
g: GIsSemiGroupPreserving ?grp_homo_mapintros m n; apply grp_pow_add. Defined. (** [ab_mul] (and [grp_pow]) give multiplication in [abgroup_Z]. *)G: Group
g: GIsSemiGroupPreserving (grp_pow g)z, z': Intab_mul z z' = z * z'z, z': Intab_mul z z' = z * z'z': Intab_mul 0 z' = 0 * z'n: nat
z': Int
IHz: ab_mul n z' = n * z'ab_mul n.+1 z' = n.+1 * z'n: nat
z': Int
IHz: ab_mul (- n)%int z' = (- n)%int * z'ab_mul (- n)%int.-1 z' = (- n)%int.-1 * z'reflexivity.z': Intab_mul 0 z' = 0 * z'n: nat
z': Int
IHz: ab_mul n z' = n * z'ab_mul n.+1 z' = n.+1 * z'n: nat
z': Int
IHz: ab_mul n z' = n * z'grp_pow z' n.+1 = n.+1 * z'n: nat
z': Int
IHz: ab_mul n z' = n * z'z' + grp_pow z' n = n.+1 * z'f_ap.n: nat
z': Int
IHz: ab_mul n z' = n * z'z' + grp_pow z' n = (z' + n * z')%intn: nat
z': Int
IHz: ab_mul (- n)%int z' = (- n)%int * z'ab_mul (- n)%int.-1 z' = (- n)%int.-1 * z'n: nat
z': Int
IHz: ab_mul (- n)%int z' = (- n)%int * z'grp_pow z' (- n)%int.-1 = (- n)%int.-1 * z'n: nat
z': Int
IHz: ab_mul (- n)%int z' = (- n)%int * z'- z' + grp_pow z' (- n)%int = (- n)%int.-1 * z'f_ap. Defined.n: nat
z': Int
IHz: ab_mul (- n)%int z' = (- n)%int * z'- z' + grp_pow z' (- n)%int = (- z' + - n * z')%int