/- Copyright (c) 2018 Johannes HΓΆlzl. All rights reserved. Released under Apache 2.0 license as described in the file LICENSE. Authors: Johannes HΓΆlzl, Kenny Lau, Johan Commelin, Mario Carneiro, Kevin Buzzard, Amelia Livingston, Yury Kudryashov ! This file was ported from Lean 3 source module group_theory.submonoid.operations ! leanprover-community/mathlib commit cf8e77c636317b059a8ce20807a29cf3772a0640 ! Please do not edit these lines, except to modify the commit id ! if you have ported upstream changes. -/ import Mathlib.Algebra.Order.Monoid.Cancel.Basic import Mathlib.GroupTheory.GroupAction.Defs import Mathlib.GroupTheory.Submonoid.Basic import Mathlib.GroupTheory.Subsemigroup.Operations /-! # Operations on `Submonoid`s In this file we define various operations on `Submonoid`s and `MonoidHom`s. ## Main definitions ### Conversion between multiplicative and additive definitions * `Submonoid.toAddSubmonoid`, `Submonoid.toAddSubmonoid'`, `AddSubmonoid.toSubmonoid`, `AddSubmonoid.toSubmonoid'`: convert between multiplicative and additive submonoids of `M`, `Multiplicative M`, and `Additive M`. These are stated as `OrderIso`s. ### (Commutative) monoid structure on a submonoid * `Submonoid.toMonoid`, `Submonoid.toCommMonoid`: a submonoid inherits a (commutative) monoid structure. ### Group actions by submonoids * `Submonoid.MulAction`, `Submonoid.DistribMulAction`: a submonoid inherits (distributive) multiplicative actions. ### Operations on submonoids * `Submonoid.comap`: preimage of a submonoid under a monoid homomorphism as a submonoid of the domain; * `Submonoid.map`: image of a submonoid under a monoid homomorphism as a submonoid of the codomain; * `Submonoid.prod`: product of two submonoids `s : Submonoid M` and `t : Submonoid N` as a submonoid of `M Γ N`; ### Monoid homomorphisms between submonoid * `Submonoid.subtype`: embedding of a submonoid into the ambient monoid. * `Submonoid.inclusion`: given two submonoids `S`, `T` such that `S β€ T`, `S.inclusion T` is the inclusion of `S` into `T` as a monoid homomorphism; * `MulEquiv.submonoidCongr`: converts a proof of `S = T` into a monoid isomorphism between `S` and `T`. * `Submonoid.prodEquiv`: monoid isomorphism between `s.prod t` and `s Γ t`; ### Operations on `MonoidHom`s * `MonoidHom.mrange`: range of a monoid homomorphism as a submonoid of the codomain; * `MonoidHom.mker`: kernel of a monoid homomorphism as a submonoid of the domain; * `MonoidHom.restrict`: restrict a monoid homomorphism to a submonoid; * `MonoidHom.codRestrict`: restrict the codomain of a monoid homomorphism to a submonoid; * `MonoidHom.mrangeRestrict`: restrict a monoid homomorphism to its range; ## Tags submonoid, range, product, map, comap -/ variable {MM: Type ?u.86057NN: Type ?u.33229P :P: Type ?u.48758Type _} [MulOneClassType _: Type (?u.48755+1)M] [MulOneClassM: Type ?u.29N] [MulOneClassN: Type ?u.5P] (P: Type ?u.35S :S: Submonoid MSubmonoidSubmonoid: (M : Type ?u.181499) β [inst : MulOneClass M] β Type ?u.181499M) /-! ### Conversion to/from `Additive`/`Multiplicative` -/ section /-- Submonoids of monoid `M` are isomorphic to additive submonoids of `Additive M`. -/ @[M: Type ?u.2simps] defsimps: β {M : Type u_1} [inst : MulOneClass M] (S : Submonoid M), β(βtoAddSubmonoid S) = βAdditive.toMul β»ΒΉ' βSSubmonoid.toAddSubmonoid :Submonoid.toAddSubmonoid: {M : Type u_1} β [inst : MulOneClass M] β Submonoid M βo AddSubmonoid (Additive M)SubmonoidSubmonoid: (M : Type ?u.58) β [inst : MulOneClass M] β Type ?u.58M βoM: Type ?u.29AddSubmonoid (AdditiveAddSubmonoid: (M : Type ?u.65) β [inst : AddZeroClass M] β Type ?u.65M) where toFunM: Type ?u.29S := { carrier := Additive.toMul β»ΒΉ'S: ?m.183S zero_mem' :=S: ?m.183S.S: ?m.183one_mem' add_mem' := funone_mem': β {M : Type ?u.552} [inst : MulOneClass M] (self : Submonoid M), 1 β self.carrierhaha: ?m.452hb =>hb: ?m.455S.mul_mem'S: ?m.183haha: ?m.452hb } invFunhb: ?m.455S := { carrier := Additive.ofMul β»ΒΉ'S: ?m.560S one_mem' :=S: ?m.560S.S: ?m.560zero_mem' mul_mem' := funzero_mem': β {M : Type ?u.756} [inst : AddZeroClass M] (self : AddSubmonoid M), 0 β self.carrierhaha: ?m.719hb =>hb: ?m.722S.add_mem'S: ?m.560haha: ?m.719hb} left_invhb: ?m.722x :=x: ?m.764Goals accomplished! πM: Type ?u.29
N: Type ?u.32
P: Type ?u.35
instβΒ²: MulOneClass M
instβΒΉ: MulOneClass N
instβ: MulOneClass P
S, x: Submonoid M(fun S => { toSubsemigroup := { carrier := βAdditive.ofMul β»ΒΉ' βS, mul_mem' := (_ : β {a b : M}, a β βAdditive.ofMul β»ΒΉ' βS β b β βAdditive.ofMul β»ΒΉ' βS β a + b β S.carrier) }, one_mem' := (_ : 0 β S.carrier) }) ((fun S => { toAddSubsemigroup := { carrier := βAdditive.toMul β»ΒΉ' βS, add_mem' := (_ : β {a b : Additive M}, a β βAdditive.toMul β»ΒΉ' βS β b β βAdditive.toMul β»ΒΉ' βS β βAdditive.toMul a * βAdditive.toMul b β S.carrier) }, zero_mem' := (_ : 1 β S.carrier) }) x) = xM: Type ?u.29
N: Type ?u.32
P: Type ?u.35
instβΒ²: MulOneClass M
instβΒΉ: MulOneClass N
instβ: MulOneClass P
S: Submonoid M
toSubsemigroupβ: Subsemigroup M
one_mem'β: 1 β toSubsemigroupβ.carrier
mk(fun S => { toSubsemigroup := { carrier := βAdditive.ofMul β»ΒΉ' βS, mul_mem' := (_ : β {a b : M}, a β βAdditive.ofMul β»ΒΉ' βS β b β βAdditive.ofMul β»ΒΉ' βS β a + b β S.carrier) }, one_mem' := (_ : 0 β S.carrier) }) ((fun S => { toAddSubsemigroup := { carrier := βAdditive.toMul β»ΒΉ' βS, add_mem' := (_ : β {a b : Additive M}, a β βAdditive.toMul β»ΒΉ' βS β b β βAdditive.toMul β»ΒΉ' βS β βAdditive.toMul a * βAdditive.toMul b β S.carrier) }, zero_mem' := (_ : 1 β S.carrier) }) { toSubsemigroup := toSubsemigroupβ, one_mem' := one_mem'β }) = { toSubsemigroup := toSubsemigroupβ, one_mem' := one_mem'β }M: Type ?u.29
N: Type ?u.32
P: Type ?u.35
instβΒ²: MulOneClass M
instβΒΉ: MulOneClass N
instβ: MulOneClass P
S: Submonoid M
toSubsemigroupβ: Subsemigroup M
one_mem'β: 1 β toSubsemigroupβ.carrier
mk(fun S => { toSubsemigroup := { carrier := βAdditive.ofMul β»ΒΉ' βS, mul_mem' := (_ : β {a b : M}, a β βAdditive.ofMul β»ΒΉ' βS β b β βAdditive.ofMul β»ΒΉ' βS β a + b β S.carrier) }, one_mem' := (_ : 0 β S.carrier) }) ((fun S => { toAddSubsemigroup := { carrier := βAdditive.toMul β»ΒΉ' βS, add_mem' := (_ : β {a b : Additive M}, a β βAdditive.toMul β»ΒΉ' βS β b β βAdditive.toMul β»ΒΉ' βS β βAdditive.toMul a * βAdditive.toMul b β S.carrier) }, zero_mem' := (_ : 1 β S.carrier) }) { toSubsemigroup := toSubsemigroupβ, one_mem' := one_mem'β }) = { toSubsemigroup := toSubsemigroupβ, one_mem' := one_mem'β }M: Type ?u.29
N: Type ?u.32
P: Type ?u.35
instβΒ²: MulOneClass M
instβΒΉ: MulOneClass N
instβ: MulOneClass P
S, x: Submonoid M(fun S => { toSubsemigroup := { carrier := βAdditive.ofMul β»ΒΉ' βS, mul_mem' := (_ : β {a b : M}, a β βAdditive.ofMul β»ΒΉ' βS β b β βAdditive.ofMul β»ΒΉ' βS β a + b β S.carrier) }, one_mem' := (_ : 0 β S.carrier) }) ((fun S => { toAddSubsemigroup := { carrier := βAdditive.toMul β»ΒΉ' βS, add_mem' := (_ : β {a b : Additive M}, a β βAdditive.toMul β»ΒΉ' βS β b β βAdditive.toMul β»ΒΉ' βS β βAdditive.toMul a * βAdditive.toMul b β S.carrier) }, zero_mem' := (_ : 1 β S.carrier) }) x) = xright_invGoals accomplished! πx :=x: ?m.770Goals accomplished! πM: Type ?u.29
N: Type ?u.32
P: Type ?u.35
instβΒ²: MulOneClass M
instβΒΉ: MulOneClass N
instβ: MulOneClass P
S: Submonoid M
x: AddSubmonoid (Additive M)(fun S => { toAddSubsemigroup := { carrier := βAdditive.toMul β»ΒΉ' βS, add_mem' := (_ : β {a b : Additive M}, a β βAdditive.toMul β»ΒΉ' βS β b β βAdditive.toMul β»ΒΉ' βS β βAdditive.toMul a * βAdditive.toMul b β S.carrier) }, zero_mem' := (_ : 1 β S.carrier) }) ((fun S => { toSubsemigroup := { carrier := βAdditive.ofMul β»ΒΉ' βS, mul_mem' := (_ : β {a b : M}, a β βAdditive.ofMul β»ΒΉ' βS β b β βAdditive.ofMul β»ΒΉ' βS β a + b β S.carrier) }, one_mem' := (_ : 0 β S.carrier) }) x) = xM: Type ?u.29
N: Type ?u.32
P: Type ?u.35
instβΒ²: MulOneClass M
instβΒΉ: MulOneClass N
instβ: MulOneClass P
S: Submonoid M
toAddSubsemigroupβ: AddSubsemigroup (Additive M)
zero_mem'β: 0 β toAddSubsemigroupβ.carrier
mk(fun S => { toAddSubsemigroup := { carrier := βAdditive.toMul β»ΒΉ' βS, add_mem' := (_ : β {a b : Additive M}, a β βAdditive.toMul β»ΒΉ' βS β b β βAdditive.toMul β»ΒΉ' βS β βAdditive.toMul a * βAdditive.toMul b β S.carrier) }, zero_mem' := (_ : 1 β S.carrier) }) ((fun S => { toSubsemigroup := { carrier := βAdditive.ofMul β»ΒΉ' βS, mul_mem' := (_ : β {a b : M}, a β βAdditive.ofMul β»ΒΉ' βS β b β βAdditive.ofMul β»ΒΉ' βS β a + b β S.carrier) }, one_mem' := (_ : 0 β S.carrier) }) { toAddSubsemigroup := toAddSubsemigroupβ, zero_mem' := zero_mem'β }) = { toAddSubsemigroup := toAddSubsemigroupβ, zero_mem' := zero_mem'β }M: Type ?u.29
N: Type ?u.32
P: Type ?u.35
instβΒ²: MulOneClass M
instβΒΉ: MulOneClass N
instβ: MulOneClass P
S: Submonoid M
toAddSubsemigroupβ: AddSubsemigroup (Additive M)
zero_mem'β: 0 β toAddSubsemigroupβ.carrier
mk(fun S => { toAddSubsemigroup := { carrier := βAdditive.toMul β»ΒΉ' βS, add_mem' := (_ : β {a b : Additive M}, a β βAdditive.toMul β»ΒΉ' βS β b β βAdditive.toMul β»ΒΉ' βS β βAdditive.toMul a * βAdditive.toMul b β S.carrier) }, zero_mem' := (_ : 1 β S.carrier) }) ((fun S => { toSubsemigroup := { carrier := βAdditive.ofMul β»ΒΉ' βS, mul_mem' := (_ : β {a b : M}, a β βAdditive.ofMul β»ΒΉ' βS β b β βAdditive.ofMul β»ΒΉ' βS β a + b β S.carrier) }, one_mem' := (_ : 0 β S.carrier) }) { toAddSubsemigroup := toAddSubsemigroupβ, zero_mem' := zero_mem'β }) = { toAddSubsemigroup := toAddSubsemigroupβ, zero_mem' := zero_mem'β }M: Type ?u.29
N: Type ?u.32
P: Type ?u.35
instβΒ²: MulOneClass M
instβΒΉ: MulOneClass N
instβ: MulOneClass P
S: Submonoid M
x: AddSubmonoid (Additive M)(fun S => { toAddSubsemigroup := { carrier := βAdditive.toMul β»ΒΉ' βS, add_mem' := (_ : β {a b : Additive M}, a β βAdditive.toMul β»ΒΉ' βS β b β βAdditive.toMul β»ΒΉ' βS β βAdditive.toMul a * βAdditive.toMul b β S.carrier) }, zero_mem' := (_ : 1 β S.carrier) }) ((fun S => { toSubsemigroup := { carrier := βAdditive.ofMul β»ΒΉ' βS, mul_mem' := (_ : β {a b : M}, a β βAdditive.ofMul β»ΒΉ' βS β b β βAdditive.ofMul β»ΒΉ' βS β a + b β S.carrier) }, one_mem' := (_ : 0 β S.carrier) }) x) = xmap_rel_iff' := Iff.rfl #align submonoid.to_add_submonoidGoals accomplished! πSubmonoid.toAddSubmonoid #align submonoid.to_add_submonoid_symm_apply_coeSubmonoid.toAddSubmonoid: {M : Type u_1} β [inst : MulOneClass M] β Submonoid M βo AddSubmonoid (Additive M)Submonoid.toAddSubmonoid_symm_apply_coe #align submonoid.to_add_submonoid_apply_coeSubmonoid.toAddSubmonoid_symm_apply_coe: β {M : Type u_1} [inst : MulOneClass M] (S : AddSubmonoid (Additive M)), β(β(RelIso.symm Submonoid.toAddSubmonoid) S) = βAdditive.ofMul β»ΒΉ' βSSubmonoid.toAddSubmonoid_apply_coe /-- Additive submonoids of an additive monoid `Additive M` are isomorphic to submonoids of `M`. -/ abbrevSubmonoid.toAddSubmonoid_apply_coe: β {M : Type u_1} [inst : MulOneClass M] (S : Submonoid M), β(βSubmonoid.toAddSubmonoid S) = βAdditive.toMul β»ΒΉ' βSAddSubmonoid.toSubmonoid' :AddSubmonoid.toSubmonoid': {M : Type u_1} β [inst : MulOneClass M] β AddSubmonoid (Additive M) βo Submonoid MAddSubmonoid (AdditiveAddSubmonoid: (M : Type ?u.1222) β [inst : AddZeroClass M] β Type ?u.1222M) βoM: Type ?u.1193SubmonoidSubmonoid: (M : Type ?u.1238) β [inst : MulOneClass M] β Type ?u.1238M :=M: Type ?u.1193Submonoid.toAddSubmonoid.symm #align add_submonoid.to_submonoid'Submonoid.toAddSubmonoid: {M : Type ?u.1318} β [inst : MulOneClass M] β Submonoid M βo AddSubmonoid (Additive M)AddSubmonoid.toSubmonoid' theoremAddSubmonoid.toSubmonoid': {M : Type u_1} β [inst : MulOneClass M] β AddSubmonoid (Additive M) βo Submonoid MSubmonoid.toAddSubmonoid_closure (Submonoid.toAddSubmonoid_closure: β (S : Set M), βtoAddSubmonoid (closure S) = AddSubmonoid.closure (βAdditive.toMul β»ΒΉ' S)S : SetS: Set MM) :M: Type ?u.1505Submonoid.toAddSubmonoid (Submonoid.toAddSubmonoid: {M : Type ?u.1536} β [inst : MulOneClass M] β Submonoid M βo AddSubmonoid (Additive M)Submonoid.closureSubmonoid.closure: {M : Type ?u.1611} β [inst : MulOneClass M] β Set M β Submonoid MS) =S: Set MAddSubmonoid.closure (Additive.toMul β»ΒΉ'AddSubmonoid.closure: {M : Type ?u.1639} β [inst : AddZeroClass M] β Set M β AddSubmonoid MS) :=S: Set Mle_antisymm (le_antisymm: β {Ξ± : Type ?u.1747} [inst : PartialOrder Ξ±] {a b : Ξ±}, a β€ b β b β€ a β a = bSubmonoid.toAddSubmonoid.le_symm_apply.1 <| Submonoid.closure_le.2 (Submonoid.toAddSubmonoid: {M : Type ?u.1780} β [inst : MulOneClass M] β Submonoid M βo AddSubmonoid (Additive M)AddSubmonoid.subset_closure (M := AdditiveAddSubmonoid.subset_closure: β {M : Type ?u.1999} [inst : AddZeroClass M] {s : Set M}, s β β(AddSubmonoid.closure s)M))) (M: Type ?u.1505AddSubmonoid.closure_le.2 <|AddSubmonoid.closure_le: β {M : Type ?u.2058} [inst : AddZeroClass M] {s : Set M} {S : AddSubmonoid M}, AddSubmonoid.closure s β€ S β s β βSSubmonoid.subset_closure (M :=Submonoid.subset_closure: β {M : Type ?u.2090} [inst : MulOneClass M] {s : Set M}, s β β(closure s)M)) #align submonoid.to_add_submonoid_closureM: Type ?u.1505Submonoid.toAddSubmonoid_closure theoremSubmonoid.toAddSubmonoid_closure: β {M : Type u_1} [inst : MulOneClass M] (S : Set M), βSubmonoid.toAddSubmonoid (Submonoid.closure S) = AddSubmonoid.closure (βAdditive.toMul β»ΒΉ' S)AddSubmonoid.toSubmonoid'_closure (S : Set (AdditiveAddSubmonoid.toSubmonoid'_closure: β {M : Type u_1} [inst : MulOneClass M] (S : Set (Additive M)), βtoSubmonoid' (closure S) = Submonoid.closure (βMultiplicative.ofAdd β»ΒΉ' S)M)) :M: Type ?u.2129AddSubmonoid.toSubmonoid' (AddSubmonoid.toSubmonoid': {M : Type ?u.2161} β [inst : MulOneClass M] β AddSubmonoid (Additive M) βo Submonoid MAddSubmonoid.closure S) =AddSubmonoid.closure: {M : Type ?u.2236} β [inst : AddZeroClass M] β Set M β AddSubmonoid MSubmonoid.closure (Submonoid.closure: {M : Type ?u.2278} β [inst : MulOneClass M] β Set M β Submonoid MMultiplicative.ofAdd β»ΒΉ' S) :=Multiplicative.ofAdd: {Ξ± : Type ?u.2287} β Ξ± β Multiplicative Ξ±le_antisymm (le_antisymm: β {Ξ± : Type ?u.2375} [inst : PartialOrder Ξ±] {a b : Ξ±}, a β€ b β b β€ a β a = bAddSubmonoid.toSubmonoid'.le_symm_apply.1 <|AddSubmonoid.toSubmonoid': {M : Type ?u.2408} β [inst : MulOneClass M] β AddSubmonoid (Additive M) βo Submonoid MAddSubmonoid.closure_le.2 (AddSubmonoid.closure_le: β {M : Type ?u.2594} [inst : AddZeroClass M] {s : Set M} {S : AddSubmonoid M}, closure s β€ S β s β βSSubmonoid.subset_closure (M :=Submonoid.subset_closure: β {M : Type ?u.2628} [inst : MulOneClass M] {s : Set M}, s β β(Submonoid.closure s)M))) (M: Type ?u.2129Submonoid.closure_le.2 <|Submonoid.closure_le: β {M : Type ?u.2680} [inst : MulOneClass M] {s : Set M} {S : Submonoid M}, Submonoid.closure s β€ S β s β βSAddSubmonoid.subset_closure (M := AdditiveAddSubmonoid.subset_closure: β {M : Type ?u.2711} [inst : AddZeroClass M] {s : Set M}, s β β(closure s)M)) #align add_submonoid.to_submonoid'_closureM: Type ?u.2129AddSubmonoid.toSubmonoid'_closure end section variable {AddSubmonoid.toSubmonoid'_closure: β {M : Type u_1} [inst : MulOneClass M] (S : Set (Additive M)), βAddSubmonoid.toSubmonoid' (AddSubmonoid.closure S) = Submonoid.closure (βMultiplicative.ofAdd β»ΒΉ' S)A :A: Type ?u.2784Type _} [AddZeroClassType _: Type (?u.2784+1)A] /-- Additive submonoids of an additive monoid `A` are isomorphic to multiplicative submonoids of `Multiplicative A`. -/ @[A: Type ?u.2784simps] defsimps: β {A : Type u_1} [inst : AddZeroClass A] (S : Submonoid (Multiplicative A)), β(β(RelIso.symm toSubmonoid) S) = βMultiplicative.ofAdd β»ΒΉ' βSAddSubmonoid.toSubmonoid :AddSubmonoid.toSubmonoid: {A : Type u_1} β [inst : AddZeroClass A] β AddSubmonoid A βo Submonoid (Multiplicative A)AddSubmonoidAddSubmonoid: (M : Type ?u.2825) β [inst : AddZeroClass M] β Type ?u.2825A βoA: Type ?u.2817Submonoid (MultiplicativeSubmonoid: (M : Type ?u.2831) β [inst : MulOneClass M] β Type ?u.2831A) where toFunA: Type ?u.2817S := { carrier :=S: ?m.2949Multiplicative.toAdd β»ΒΉ'Multiplicative.toAdd: {Ξ± : Type ?u.2989} β Multiplicative Ξ± β Ξ±S one_mem' :=S: ?m.2949S.S: ?m.2949zero_mem' mul_mem' := funzero_mem': β {M : Type ?u.3217} [inst : AddZeroClass M] (self : AddSubmonoid M), 0 β self.carrierhaha: ?m.3160hb =>hb: ?m.3163S.add_mem'S: ?m.2949haha: ?m.3160hb } invFunhb: ?m.3163S := { carrier :=S: ?m.3225Multiplicative.ofAdd β»ΒΉ'Multiplicative.ofAdd: {Ξ± : Type ?u.3238} β Ξ± β Multiplicative Ξ±S zero_mem' :=S: ?m.3225S.S: ?m.3225one_mem' add_mem' := funone_mem': β {M : Type ?u.3421} [inst : MulOneClass M] (self : Submonoid M), 1 β self.carrierhaha: ?m.3384hb =>hb: ?m.3387S.mul_mem'S: ?m.3225haha: ?m.3384hb} left_invhb: ?m.3387x :=x: ?m.3429Goals accomplished! πM: Type ?u.2790
N: Type ?u.2793
P: Type ?u.2796
instβΒ³: MulOneClass M
instβΒ²: MulOneClass N
instβΒΉ: MulOneClass P
S: Submonoid M
A: Type ?u.2817
instβ: AddZeroClass A
x: AddSubmonoid A(fun S => { toAddSubsemigroup := { carrier := βMultiplicative.ofAdd β»ΒΉ' βS, add_mem' := (_ : β {a b : A}, a β βMultiplicative.ofAdd β»ΒΉ' βS β b β βMultiplicative.ofAdd β»ΒΉ' βS β a * b β S.carrier) }, zero_mem' := (_ : 1 β S.carrier) }) ((fun S => { toSubsemigroup := { carrier := βMultiplicative.toAdd β»ΒΉ' βS, mul_mem' := (_ : β {a b : Multiplicative A}, a β βMultiplicative.toAdd β»ΒΉ' βS β b β βMultiplicative.toAdd β»ΒΉ' βS β βMultiplicative.toAdd a + βMultiplicative.toAdd b β S.carrier) }, one_mem' := (_ : 0 β S.carrier) }) x) = xM: Type ?u.2790
N: Type ?u.2793
P: Type ?u.2796
instβΒ³: MulOneClass M
instβΒ²: MulOneClass N
instβΒΉ: MulOneClass P
S: Submonoid M
A: Type ?u.2817
instβ: AddZeroClass A
toAddSubsemigroupβ: AddSubsemigroup A
zero_mem'β: 0 β toAddSubsemigroupβ.carrier
mk(fun S => { toAddSubsemigroup := { carrier := βMultiplicative.ofAdd β»ΒΉ' βS, add_mem' := (_ : β {a b : A}, a β βMultiplicative.ofAdd β»ΒΉ' βS β b β βMultiplicative.ofAdd β»ΒΉ' βS β a * b β S.carrier) }, zero_mem' := (_ : 1 β S.carrier) }) ((fun S => { toSubsemigroup := { carrier := βMultiplicative.toAdd β»ΒΉ' βS, mul_mem' := (_ : β {a b : Multiplicative A}, a β βMultiplicative.toAdd β»ΒΉ' βS β b β βMultiplicative.toAdd β»ΒΉ' βS β βMultiplicative.toAdd a + βMultiplicative.toAdd b β S.carrier) }, one_mem' := (_ : 0 β S.carrier) }) { toAddSubsemigroup := toAddSubsemigroupβ, zero_mem' := zero_mem'β }) = { toAddSubsemigroup := toAddSubsemigroupβ, zero_mem' := zero_mem'β }M: Type ?u.2790
N: Type ?u.2793
P: Type ?u.2796
instβΒ³: MulOneClass M
instβΒ²: MulOneClass N
instβΒΉ: MulOneClass P
S: Submonoid M
A: Type ?u.2817
instβ: AddZeroClass A
toAddSubsemigroupβ: AddSubsemigroup A
zero_mem'β: 0 β toAddSubsemigroupβ.carrier
mk(fun S => { toAddSubsemigroup := { carrier := βMultiplicative.ofAdd β»ΒΉ' βS, add_mem' := (_ : β {a b : A}, a β βMultiplicative.ofAdd β»ΒΉ' βS β b β βMultiplicative.ofAdd β»ΒΉ' βS β a * b β S.carrier) }, zero_mem' := (_ : 1 β S.carrier) }) ((fun S => { toSubsemigroup := { carrier := βMultiplicative.toAdd β»ΒΉ' βS, mul_mem' := (_ : β {a b : Multiplicative A}, a β βMultiplicative.toAdd β»ΒΉ' βS β b β βMultiplicative.toAdd β»ΒΉ' βS β βMultiplicative.toAdd a + βMultiplicative.toAdd b β S.carrier) }, one_mem' := (_ : 0 β S.carrier) }) { toAddSubsemigroup := toAddSubsemigroupβ, zero_mem' := zero_mem'β }) = { toAddSubsemigroup := toAddSubsemigroupβ, zero_mem' := zero_mem'β }M: Type ?u.2790
N: Type ?u.2793
P: Type ?u.2796
instβΒ³: MulOneClass M
instβΒ²: MulOneClass N
instβΒΉ: MulOneClass P
S: Submonoid M
A: Type ?u.2817
instβ: AddZeroClass A
x: AddSubmonoid A(fun S => { toAddSubsemigroup := { carrier := βMultiplicative.ofAdd β»ΒΉ' βS, add_mem' := (_ : β {a b : A}, a β βMultiplicative.ofAdd β»ΒΉ' βS β b β βMultiplicative.ofAdd β»ΒΉ' βS β a * b β S.carrier) }, zero_mem' := (_ : 1 β S.carrier) }) ((fun S => { toSubsemigroup := { carrier := βMultiplicative.toAdd β»ΒΉ' βS, mul_mem' := (_ : β {a b : Multiplicative A}, a β βMultiplicative.toAdd β»ΒΉ' βS β b β βMultiplicative.toAdd β»ΒΉ' βS β βMultiplicative.toAdd a + βMultiplicative.toAdd b β S.carrier) }, one_mem' := (_ : 0 β S.carrier) }) x) = xright_invGoals accomplished! πx :=x: ?m.3435Goals accomplished! πM: Type ?u.2790
N: Type ?u.2793
P: Type ?u.2796
instβΒ³: MulOneClass M
instβΒ²: MulOneClass N
instβΒΉ: MulOneClass P
S: Submonoid M
A: Type ?u.2817
instβ: AddZeroClass A
x: Submonoid (Multiplicative A)(fun S => { toSubsemigroup := { carrier := βMultiplicative.toAdd β»ΒΉ' βS, mul_mem' := (_ : β {a b : Multiplicative A}, a β βMultiplicative.toAdd β»ΒΉ' βS β b β βMultiplicative.toAdd β»ΒΉ' βS β βMultiplicative.toAdd a + βMultiplicative.toAdd b β S.carrier) }, one_mem' := (_ : 0 β S.carrier) }) ((fun S => { toAddSubsemigroup := { carrier := βMultiplicative.ofAdd β»ΒΉ' βS, add_mem' := (_ : β {a b : A}, a β βMultiplicative.ofAdd β»ΒΉ' βS β b β βMultiplicative.ofAdd β»ΒΉ' βS β a * b β S.carrier) }, zero_mem' := (_ : 1 β S.carrier) }) x) = xM: Type ?u.2790
N: Type ?u.2793
P: Type ?u.2796
instβΒ³: MulOneClass M
instβΒ²: MulOneClass N
instβΒΉ: MulOneClass P
S: Submonoid M
A: Type ?u.2817
instβ: AddZeroClass A
toSubsemigroupβ: Subsemigroup (Multiplicative A)
one_mem'β: 1 β toSubsemigroupβ.carrier
mk(fun S => { toSubsemigroup := { carrier := βMultiplicative.toAdd β»ΒΉ' βS, mul_mem' := (_ : β {a b : Multiplicative A}, a β βMultiplicative.toAdd β»ΒΉ' βS β b β βMultiplicative.toAdd β»ΒΉ' βS β βMultiplicative.toAdd a + βMultiplicative.toAdd b β S.carrier) }, one_mem' := (_ : 0 β S.carrier) }) ((fun S => { toAddSubsemigroup := { carrier := βMultiplicative.ofAdd β»ΒΉ' βS, add_mem' := (_ : β {a b : A}, a β βMultiplicative.ofAdd β»ΒΉ' βS β b β βMultiplicative.ofAdd β»ΒΉ' βS β a * b β S.carrier) }, zero_mem' := (_ : 1 β S.carrier) }) { toSubsemigroup := toSubsemigroupβ, one_mem' := one_mem'β }) = { toSubsemigroup := toSubsemigroupβ, one_mem' := one_mem'β }M: Type ?u.2790
N: Type ?u.2793
P: Type ?u.2796
instβΒ³: MulOneClass M
instβΒ²: MulOneClass N
instβΒΉ: MulOneClass P
S: Submonoid M
A: Type ?u.2817
instβ: AddZeroClass A
toSubsemigroupβ: Subsemigroup (Multiplicative A)
one_mem'β: 1 β toSubsemigroupβ.carrier
mk(fun S => { toSubsemigroup := { carrier := βMultiplicative.toAdd β»ΒΉ' βS, mul_mem' := (_ : β {a b : Multiplicative A}, a β βMultiplicative.toAdd β»ΒΉ' βS β b β βMultiplicative.toAdd β»ΒΉ' βS β βMultiplicative.toAdd a + βMultiplicative.toAdd b β S.carrier) }, one_mem' := (_ : 0 β S.carrier) }) ((fun S => { toAddSubsemigroup := { carrier := βMultiplicative.ofAdd β»ΒΉ' βS, add_mem' := (_ : β {a b : A}, a β βMultiplicative.ofAdd β»ΒΉ' βS β b β βMultiplicative.ofAdd β»ΒΉ' βS β a * b β S.carrier) }, zero_mem' := (_ : 1 β S.carrier) }) { toSubsemigroup := toSubsemigroupβ, one_mem' := one_mem'β }) = { toSubsemigroup := toSubsemigroupβ, one_mem' := one_mem'β }M: Type ?u.2790
N: Type ?u.2793
P: Type ?u.2796
instβΒ³: MulOneClass M
instβΒ²: MulOneClass N
instβΒΉ: MulOneClass P
S: Submonoid M
A: Type ?u.2817
instβ: AddZeroClass A
x: Submonoid (Multiplicative A)(fun S => { toSubsemigroup := { carrier := βMultiplicative.toAdd β»ΒΉ' βS, mul_mem' := (_ : β {a b : Multiplicative A}, a β βMultiplicative.toAdd β»ΒΉ' βS β b β βMultiplicative.toAdd β»ΒΉ' βS β βMultiplicative.toAdd a + βMultiplicative.toAdd b β S.carrier) }, one_mem' := (_ : 0 β S.carrier) }) ((fun S => { toAddSubsemigroup := { carrier := βMultiplicative.ofAdd β»ΒΉ' βS, add_mem' := (_ : β {a b : A}, a β βMultiplicative.ofAdd β»ΒΉ' βS β b β βMultiplicative.ofAdd β»ΒΉ' βS β a * b β S.carrier) }, zero_mem' := (_ : 1 β S.carrier) }) x) = xmap_rel_iff' := Iff.rfl #align add_submonoid.to_submonoidGoals accomplished! πAddSubmonoid.toSubmonoid #align add_submonoid.to_submonoid_symm_apply_coeAddSubmonoid.toSubmonoid: {A : Type u_1} β [inst : AddZeroClass A] β AddSubmonoid A βo Submonoid (Multiplicative A)AddSubmonoid.toSubmonoid_symm_apply_coe #align add_submonoid.to_submonoid_apply_coeAddSubmonoid.toSubmonoid_symm_apply_coe: β {A : Type u_1} [inst : AddZeroClass A] (S : Submonoid (Multiplicative A)), β(β(RelIso.symm AddSubmonoid.toSubmonoid) S) = βMultiplicative.ofAdd β»ΒΉ' βSAddSubmonoid.toSubmonoid_apply_coe /-- Submonoids of a monoid `Multiplicative A` are isomorphic to additive submonoids of `A`. -/ abbrevAddSubmonoid.toSubmonoid_apply_coe: β {A : Type u_1} [inst : AddZeroClass A] (S : AddSubmonoid A), β(βAddSubmonoid.toSubmonoid S) = βMultiplicative.toAdd β»ΒΉ' βSSubmonoid.toAddSubmonoid' :Submonoid.toAddSubmonoid': Submonoid (Multiplicative A) βo AddSubmonoid ASubmonoid (MultiplicativeSubmonoid: (M : Type ?u.3839) β [inst : MulOneClass M] β Type ?u.3839A) βoA: Type ?u.3831AddSubmonoidAddSubmonoid: (M : Type ?u.3855) β [inst : AddZeroClass M] β Type ?u.3855A :=A: Type ?u.3831AddSubmonoid.toSubmonoid.symm #align submonoid.to_add_submonoid'AddSubmonoid.toSubmonoid: {A : Type ?u.3934} β [inst : AddZeroClass A] β AddSubmonoid A βo Submonoid (Multiplicative A)Submonoid.toAddSubmonoid' theoremSubmonoid.toAddSubmonoid': {A : Type u_1} β [inst : AddZeroClass A] β Submonoid (Multiplicative A) βo AddSubmonoid AAddSubmonoid.toSubmonoid_closure (AddSubmonoid.toSubmonoid_closure: β (S : Set A), βtoSubmonoid (closure S) = Submonoid.closure (βMultiplicative.toAdd β»ΒΉ' S)S : SetS: Set AA) : (A: Type ?u.4119AddSubmonoid.toSubmonoid) (AddSubmonoid.toSubmonoid: {A : Type ?u.4129} β [inst : AddZeroClass A] β AddSubmonoid A βo Submonoid (Multiplicative A)AddSubmonoid.closureAddSubmonoid.closure: {M : Type ?u.4213} β [inst : AddZeroClass M] β Set M β AddSubmonoid MS) =S: Set ASubmonoid.closure (Submonoid.closure: {M : Type ?u.4239} β [inst : MulOneClass M] β Set M β Submonoid MMultiplicative.toAdd β»ΒΉ'Multiplicative.toAdd: {Ξ± : Type ?u.4248} β Multiplicative Ξ± β Ξ±S) :=S: Set Ale_antisymm (le_antisymm: β {Ξ± : Type ?u.4347} [inst : PartialOrder Ξ±] {a b : Ξ±}, a β€ b β b β€ a β a = bAddSubmonoid.toSubmonoid.AddSubmonoid.toSubmonoid: {A : Type ?u.4380} β [inst : AddZeroClass A] β AddSubmonoid A βo Submonoid (Multiplicative A)to_galoisConnection.l_le <|to_galoisConnection: β {Ξ± : Type ?u.4395} {Ξ² : Type ?u.4394} [inst : Preorder Ξ±] [inst_1 : Preorder Ξ²] (oi : Ξ± βo Ξ²), GaloisConnection βoi β(OrderIso.symm oi)AddSubmonoid.closure_le.2 <|AddSubmonoid.closure_le: β {M : Type ?u.4586} [inst : AddZeroClass M] {s : Set M} {S : AddSubmonoid M}, closure s β€ S β s β βSSubmonoid.subset_closure (M := MultiplicativeSubmonoid.subset_closure: β {M : Type ?u.4619} [inst : MulOneClass M] {s : Set M}, s β β(Submonoid.closure s)A)) (A: Type ?u.4119Submonoid.closure_le.2 <|Submonoid.closure_le: β {M : Type ?u.4678} [inst : MulOneClass M] {s : Set M} {S : Submonoid M}, Submonoid.closure s β€ S β s β βSAddSubmonoid.subset_closure (M :=AddSubmonoid.subset_closure: β {M : Type ?u.4709} [inst : AddZeroClass M] {s : Set M}, s β β(closure s)A)) #align add_submonoid.to_submonoid_closureA: Type ?u.4119AddSubmonoid.toSubmonoid_closure theoremAddSubmonoid.toSubmonoid_closure: β {A : Type u_1} [inst : AddZeroClass A] (S : Set A), βAddSubmonoid.toSubmonoid (AddSubmonoid.closure S) = Submonoid.closure (βMultiplicative.toAdd β»ΒΉ' S)Submonoid.toAddSubmonoid'_closure (Submonoid.toAddSubmonoid'_closure: β {A : Type u_1} [inst : AddZeroClass A] (S : Set (Multiplicative A)), βtoAddSubmonoid' (closure S) = AddSubmonoid.closure (βAdditive.ofMul β»ΒΉ' S)S : Set (MultiplicativeS: Set (Multiplicative A)A)) :A: Type ?u.4774Submonoid.toAddSubmonoid' (Submonoid.toAddSubmonoid': {A : Type ?u.4785} β [inst : AddZeroClass A] β Submonoid (Multiplicative A) βo AddSubmonoid ASubmonoid.closureSubmonoid.closure: {M : Type ?u.4859} β [inst : MulOneClass M] β Set M β Submonoid MS) =S: Set (Multiplicative A)AddSubmonoid.closure (Additive.ofMul β»ΒΉ'AddSubmonoid.closure: {M : Type ?u.4899} β [inst : AddZeroClass M] β Set M β AddSubmonoid MS) :=S: Set (Multiplicative A)le_antisymm (le_antisymm: β {Ξ± : Type ?u.4996} [inst : PartialOrder Ξ±] {a b : Ξ±}, a β€ b β b β€ a β a = bSubmonoid.toAddSubmonoid'.Submonoid.toAddSubmonoid': {A : Type ?u.5029} β [inst : AddZeroClass A] β Submonoid (Multiplicative A) βo AddSubmonoid Ato_galoisConnection.l_le <| Submonoid.closure_le.2 <|to_galoisConnection: β {Ξ± : Type ?u.5044} {Ξ² : Type ?u.5043} [inst : Preorder Ξ±] [inst_1 : Preorder Ξ²] (oi : Ξ± βo Ξ²), GaloisConnection βoi β(OrderIso.symm oi)AddSubmonoid.subset_closure (M :=AddSubmonoid.subset_closure: β {M : Type ?u.5269} [inst : AddZeroClass M] {s : Set M}, s β β(AddSubmonoid.closure s)A)) (A: Type ?u.4774AddSubmonoid.closure_le.2 <|AddSubmonoid.closure_le: β {M : Type ?u.5320} [inst : AddZeroClass M] {s : Set M} {S : AddSubmonoid M}, AddSubmonoid.closure s β€ S β s β βSSubmonoid.subset_closure (M := MultiplicativeSubmonoid.subset_closure: β {M : Type ?u.5350} [inst : MulOneClass M] {s : Set M}, s β β(closure s)A)) #align submonoid.to_add_submonoid'_closureA: Type ?u.4774Submonoid.toAddSubmonoid'_closure end namespace Submonoid variable {Submonoid.toAddSubmonoid'_closure: β {A : Type u_1} [inst : AddZeroClass A] (S : Set (Multiplicative A)), βSubmonoid.toAddSubmonoid' (Submonoid.closure S) = AddSubmonoid.closure (βAdditive.ofMul β»ΒΉ' S)F :F: Type ?u.5465Type _} [Type _: Type (?u.23621+1)mc :mc: MonoidHomClass F M NMonoidHomClassMonoidHomClass: Type ?u.20871 β (M : outParam (Type ?u.20870)) β (N : outParam (Type ?u.20869)) β [inst : MulOneClass M] β [inst : MulOneClass N] β Type (max(max?u.20871?u.20870)?u.20869)FF: Type ?u.22839MM: Type ?u.21960N] open Set /-! ### `comap` and `map` -/ /-- The preimage of a submonoid along a monoid homomorphism is a submonoid. -/ @[N: Type ?u.5399to_additive "The preimage of an `AddSubmonoid` along an `AddMonoid` homomorphism is an `AddSubmonoid`."] defto_additive: {M : Type u_1} β {N : Type u_2} β [inst : AddZeroClass M] β [inst_1 : AddZeroClass N] β {F : Type u_3} β [mc : AddMonoidHomClass F M N] β F β AddSubmonoid N β AddSubmonoid Mcomap (comap: {M : Type u_1} β {N : Type u_2} β [inst : MulOneClass M] β [inst_1 : MulOneClass N] β {F : Type u_3} β [mc : MonoidHomClass F M N] β F β Submonoid N β Submonoid Mf :f: FF) (F: Type ?u.5465S :S: Submonoid NSubmonoidSubmonoid: (M : Type ?u.5482) β [inst : MulOneClass M] β Type ?u.5482N) :N: Type ?u.5441SubmonoidSubmonoid: (M : Type ?u.5491) β [inst : MulOneClass M] β Type ?u.5491M where carrier :=M: Type ?u.5438f β»ΒΉ'f: FS one_mem' := showS: Submonoid Nff: F1 β1: ?m.6442S byS: Submonoid NM: Type ?u.5438
N: Type ?u.5441
P: Type ?u.5444
instβΒ²: MulOneClass M
instβΒΉ: MulOneClass N
instβ: MulOneClass P
Sβ: Submonoid M
F: Type ?u.5465
mc: MonoidHomClass F M N
f: F
S: Submonoid Nβf 1 β SM: Type ?u.5438
N: Type ?u.5441
P: Type ?u.5444
instβΒ²: MulOneClass M
instβΒΉ: MulOneClass N
instβ: MulOneClass P
Sβ: Submonoid M
F: Type ?u.5465
mc: MonoidHomClass F M N
f: F
S: Submonoid N1 β SM: Type ?u.5438
N: Type ?u.5441
P: Type ?u.5444
instβΒ²: MulOneClass M
instβΒΉ: MulOneClass N
instβ: MulOneClass P
Sβ: Submonoid M
F: Type ?u.5465
mc: MonoidHomClass F M N
f: F
S: Submonoid N1 β SM: Type ?u.5438
N: Type ?u.5441
P: Type ?u.5444
instβΒ²: MulOneClass M
instβΒΉ: MulOneClass N
instβ: MulOneClass P
Sβ: Submonoid M
F: Type ?u.5465
mc: MonoidHomClass F M N
f: F
S: Submonoid N1 β SM: Type ?u.5438
N: Type ?u.5441
P: Type ?u.5444
instβΒ²: MulOneClass M
instβΒΉ: MulOneClass N
instβ: MulOneClass P
Sβ: Submonoid M
F: Type ?u.5465
mc: MonoidHomClass F M N
f: F
S: Submonoid Nβf 1 β Smul_mem'Goals accomplished! πhaha: ?m.5861hb := showhb: ?m.5864f (f: F_ *_: ?m.6057_) β_: ?m.6060S byS: Submonoid NM: Type ?u.5438
N: Type ?u.5441
P: Type ?u.5444
instβΒ²: MulOneClass M
instβΒΉ: MulOneClass N
instβ: MulOneClass P
Sβ: Submonoid M
F: Type ?u.5465
mc: MonoidHomClass F M N
f: F
S: Submonoid N
aβ, bβ: M
ha: aβ β βf β»ΒΉ' βS
hb: bβ β βf β»ΒΉ' βSM: Type ?u.5438
N: Type ?u.5441
P: Type ?u.5444
instβΒ²: MulOneClass M
instβΒΉ: MulOneClass N
instβ: MulOneClass P
Sβ: Submonoid M
F: Type ?u.5465
mc: MonoidHomClass F M N
f: F
S: Submonoid N
aβ, bβ: M
ha: aβ β βf β»ΒΉ' βS
hb: bβ β βf β»ΒΉ' βSM: Type ?u.5438
N: Type ?u.5441
P: Type ?u.5444
instβΒ²: MulOneClass M
instβΒΉ: MulOneClass N
instβ: MulOneClass P
Sβ: Submonoid M
F: Type ?u.5465
mc: MonoidHomClass F M N
f: F
S: Submonoid N
aβ, bβ: M
ha: aβ β βf β»ΒΉ' βS
hb: bβ β βf β»ΒΉ' βSM: Type ?u.5438
N: Type ?u.5441
P: Type ?u.5444
instβΒ²: MulOneClass M
instβΒΉ: MulOneClass N
instβ: MulOneClass P
Sβ: Submonoid M
F: Type ?u.5465
mc: MonoidHomClass F M N
f: F
S: Submonoid N
aβ, bβ: M
ha: aβ β βf β»ΒΉ' βS
hb: bβ β βf β»ΒΉ' βSM: Type ?u.5438
N: Type ?u.5441
P: Type ?u.5444
instβΒ²: MulOneClass M
instβΒΉ: MulOneClass N
instβ: MulOneClass P
Sβ: Submonoid M
F: Type ?u.5465
mc: MonoidHomClass F M N
f: F
S: Submonoid N
aβ, bβ: M
ha: aβ β βf β»ΒΉ' βS
hb: bβ β βf β»ΒΉ' βS#align submonoid.comapGoals accomplished! πSubmonoid.comap #align add_submonoid.comapSubmonoid.comap: {M : Type u_1} β {N : Type u_2} β [inst : MulOneClass M] β [inst_1 : MulOneClass N] β {F : Type u_3} β [mc : MonoidHomClass F M N] β F β Submonoid N β Submonoid MAddSubmonoid.comap @[AddSubmonoid.comap: {M : Type u_1} β {N : Type u_2} β [inst : AddZeroClass M] β [inst_1 : AddZeroClass N] β {F : Type u_3} β [mc : AddMonoidHomClass F M N] β F β AddSubmonoid N β AddSubmonoid Mto_additive (attr := simp)] theorem coe_comap (to_additive: β {M : Type u_2} {N : Type u_1} [inst : AddZeroClass M] [inst_1 : AddZeroClass N] {F : Type u_3} [mc : AddMonoidHomClass F M N] (S : AddSubmonoid N) (f : F), β(AddSubmonoid.comap f S) = βf β»ΒΉ' βSS :S: Submonoid NSubmonoidSubmonoid: (M : Type ?u.8191) β [inst : MulOneClass M] β Type ?u.8191N) (N: Type ?u.8152f :f: FF) : (F: Type ?u.8176S.S: Submonoid Ncomapcomap: {M : Type ?u.8207} β {N : Type ?u.8206} β [inst : MulOneClass M] β [inst_1 : MulOneClass N] β {F : Type ?u.8205} β [mc : MonoidHomClass F M N] β F β Submonoid N β Submonoid Mf : Setf: FM) =M: Type ?u.8149f β»ΒΉ'f: FS := rfl #align submonoid.coe_comapS: Submonoid NSubmonoid.coe_comap #align add_submonoid.coe_comapSubmonoid.coe_comap: β {M : Type u_2} {N : Type u_1} [inst : MulOneClass M] [inst_1 : MulOneClass N] {F : Type u_3} [mc : MonoidHomClass F M N] (S : Submonoid N) (f : F), β(comap f S) = βf β»ΒΉ' βSAddSubmonoid.coe_comap @[AddSubmonoid.coe_comap: β {M : Type u_2} {N : Type u_1} [inst : AddZeroClass M] [inst_1 : AddZeroClass N] {F : Type u_3} [mc : AddMonoidHomClass F M N] (S : AddSubmonoid N) (f : F), β(AddSubmonoid.comap f S) = βf β»ΒΉ' βSto_additive (attr := simp)] theorem mem_comap {to_additive: β {M : Type u_2} {N : Type u_1} [inst : AddZeroClass M] [inst_1 : AddZeroClass N] {F : Type u_3} [mc : AddMonoidHomClass F M N] {S : AddSubmonoid N} {f : F} {x : M}, x β AddSubmonoid.comap f S β βf x β SS :S: Submonoid NSubmonoidSubmonoid: (M : Type ?u.8832) β [inst : MulOneClass M] β Type ?u.8832N} {N: Type ?u.8793f :f: FF} {F: Type ?u.8817x :x: MM} :M: Type ?u.8790x βx: MS.S: Submonoid Ncomapcomap: {M : Type ?u.8852} β {N : Type ?u.8851} β [inst : MulOneClass M] β [inst_1 : MulOneClass N] β {F : Type ?u.8850} β [mc : MonoidHomClass F M N] β F β Submonoid N β Submonoid Mf βf: Fff: Fx βx: MS := Iff.rfl #align submonoid.mem_comapS: Submonoid NSubmonoid.mem_comap #align add_submonoid.mem_comapSubmonoid.mem_comap: β {M : Type u_2} {N : Type u_1} [inst : MulOneClass M] [inst_1 : MulOneClass N] {F : Type u_3} [mc : MonoidHomClass F M N] {S : Submonoid N} {f : F} {x : M}, x β comap f S β βf x β SAddSubmonoid.mem_comap @[AddSubmonoid.mem_comap: β {M : Type u_2} {N : Type u_1} [inst : AddZeroClass M] [inst_1 : AddZeroClass N] {F : Type u_3} [mc : AddMonoidHomClass F M N] {S : AddSubmonoid N} {f : F} {x : M}, x β AddSubmonoid.comap f S β βf x β Sto_additive] theoremto_additive: β {M : Type u_3} {N : Type u_2} {P : Type u_1} [inst : AddZeroClass M] [inst_1 : AddZeroClass N] [inst_2 : AddZeroClass P] (S : AddSubmonoid P) (g : N β+ P) (f : M β+ N), AddSubmonoid.comap f (AddSubmonoid.comap g S) = AddSubmonoid.comap (AddMonoidHom.comp g f) Scomap_comap (S :S: Submonoid PSubmonoidSubmonoid: (M : Type ?u.9377) β [inst : MulOneClass M] β Type ?u.9377P) (P: Type ?u.9341g :g: N β* PN β*N: Type ?u.9338P) (P: Type ?u.9341f :f: M β* NM β*M: Type ?u.9335N) : (N: Type ?u.9338S.S: Submonoid Pcomapcomap: {M : Type ?u.9411} β {N : Type ?u.9410} β [inst : MulOneClass M] β [inst_1 : MulOneClass N] β {F : Type ?u.9409} β [mc : MonoidHomClass F M N] β F β Submonoid N β Submonoid Mg).g: N β* Pcomapcomap: {M : Type ?u.9484} β {N : Type ?u.9483} β [inst : MulOneClass M] β [inst_1 : MulOneClass N] β {F : Type ?u.9482} β [mc : MonoidHomClass F M N] β F β Submonoid N β Submonoid Mf =f: M β* NS.S: Submonoid Pcomap (comap: {M : Type ?u.9556} β {N : Type ?u.9555} β [inst : MulOneClass M] β [inst_1 : MulOneClass N] β {F : Type ?u.9554} β [mc : MonoidHomClass F M N] β F β Submonoid N β Submonoid Mg.g: N β* Pcompcomp: {M : Type ?u.9573} β {N : Type ?u.9572} β {P : Type ?u.9571} β [inst : MulOneClass M] β [inst_1 : MulOneClass N] β [inst_2 : MulOneClass P] β (N β* P) β (M β* N) β M β* Pf) := rfl #align submonoid.comap_comapf: M β* NSubmonoid.comap_comap #align add_submonoid.comap_comapSubmonoid.comap_comap: β {M : Type u_3} {N : Type u_2} {P : Type u_1} [inst : MulOneClass M] [inst_1 : MulOneClass N] [inst_2 : MulOneClass P] (S : Submonoid P) (g : N β* P) (f : M β* N), comap f (comap g S) = comap (MonoidHom.comp g f) SAddSubmonoid.comap_comap @[AddSubmonoid.comap_comap: β {M : Type u_3} {N : Type u_2} {P : Type u_1} [inst : AddZeroClass M] [inst_1 : AddZeroClass N] [inst_2 : AddZeroClass P] (S : AddSubmonoid P) (g : N β+ P) (f : M β+ N), AddSubmonoid.comap f (AddSubmonoid.comap g S) = AddSubmonoid.comap (AddMonoidHom.comp g f) Sto_additive (attr := simp)] theoremto_additive: β {P : Type u_1} [inst : AddZeroClass P] (S : AddSubmonoid P), AddSubmonoid.comap (AddMonoidHom.id P) S = Scomap_id (comap_id: β (S : Submonoid P), comap (MonoidHom.id P) S = SS :S: Submonoid PSubmonoidSubmonoid: (M : Type ?u.9824) β [inst : MulOneClass M] β Type ?u.9824P) :P: Type ?u.9788S.S: Submonoid Pcomap (comap: {M : Type ?u.9836} β {N : Type ?u.9835} β [inst : MulOneClass M] β [inst_1 : MulOneClass N] β {F : Type ?u.9834} β [mc : MonoidHomClass F M N] β F β Submonoid N β Submonoid MMonoidHom.idMonoidHom.id: (M : Type ?u.9851) β [inst : MulOneClass M] β M β* MP) =P: Type ?u.9788S := ext (S: Submonoid PGoals accomplished! πM: Type ?u.9782
N: Type ?u.9785
P: Type u_1
instβΒ²: MulOneClass M
instβΒΉ: MulOneClass N
instβ: MulOneClass P
Sβ: Submonoid M
F: Type ?u.9809
mc: MonoidHomClass F M N
S: Submonoid Pβ (x : P), x β comap (MonoidHom.id P) S β x β S) #align submonoid.comap_idGoals accomplished! πSubmonoid.comap_id #align add_submonoid.comap_idSubmonoid.comap_id: β {P : Type u_1} [inst : MulOneClass P] (S : Submonoid P), comap (MonoidHom.id P) S = SAddSubmonoid.comap_id /-- The image of a submonoid along a monoid homomorphism is a submonoid. -/ @[AddSubmonoid.comap_id: β {P : Type u_1} [inst : AddZeroClass P] (S : AddSubmonoid P), AddSubmonoid.comap (AddMonoidHom.id P) S = Sto_additive "The image of an `AddSubmonoid` along an `AddMonoid` homomorphism is an `AddSubmonoid`."] defto_additive: {M : Type u_1} β {N : Type u_2} β [inst : AddZeroClass M] β [inst_1 : AddZeroClass N] β {F : Type u_3} β [mc : AddMonoidHomClass F M N] β F β AddSubmonoid M β AddSubmonoid Nmap (map: {M : Type u_1} β {N : Type u_2} β [inst : MulOneClass M] β [inst_1 : MulOneClass N] β {F : Type u_3} β [mc : MonoidHomClass F M N] β F β Submonoid M β Submonoid Nf :f: FF) (F: Type ?u.10959S :S: Submonoid MSubmonoidSubmonoid: (M : Type ?u.10976) β [inst : MulOneClass M] β Type ?u.10976M) :M: Type ?u.10932SubmonoidSubmonoid: (M : Type ?u.10985) β [inst : MulOneClass M] β Type ?u.10985N where carrier :=N: Type ?u.10935f ''f: FS one_mem' := β¨S: Submonoid M1,1: ?m.11366S.S: Submonoid Mone_mem, map_oneone_mem: β {M : Type ?u.11601} [inst : MulOneClass M] (S : Submonoid M), 1 β Sfβ© mul_mem' :=f: FGoals accomplished! πM: Type ?u.10932
N: Type ?u.10935
P: Type ?u.10938
instβΒ²: MulOneClass M
instβΒΉ: MulOneClass N
instβ: MulOneClass P
Sβ: Submonoid M
F: Type ?u.10959
mc: MonoidHomClass F M N
f: F
S: Submonoid MM: Type ?u.10932
N: Type ?u.10935
P: Type ?u.10938
instβΒ²: MulOneClass M
instβΒΉ: MulOneClass N
instβ: MulOneClass P
Sβ: Submonoid M
F: Type ?u.10959
mc: MonoidHomClass F M N
f: F
S: Submonoid M
x: M
hx: x β βS
y: M
hy: y β βS
intro.intro.intro.introM: Type ?u.10932
N: Type ?u.10935
P: Type ?u.10938
instβΒ²: MulOneClass M
instβΒΉ: MulOneClass N
instβ: MulOneClass P
Sβ: Submonoid M
F: Type ?u.10959
mc: MonoidHomClass F M N
f: F
S: Submonoid M
x: M
hx: x β βS
y: M
hy: y β βS
intro.intro.intro.introM: Type ?u.10932
N: Type ?u.10935
P: Type ?u.10938
instβΒ²: MulOneClass M
instβΒΉ: MulOneClass N
instβ: MulOneClass P
Sβ: Submonoid M
F: Type ?u.10959
mc: MonoidHomClass F M N
f: F
S: Submonoid MM: Type ?u.10932
N: Type ?u.10935
P: Type ?u.10938
instβΒ²: MulOneClass M
instβΒΉ: MulOneClass N
instβ: MulOneClass P
Sβ: Submonoid M
F: Type ?u.10959
mc: MonoidHomClass F M N
f: F
S: Submonoid M
x: M
hx: x β βS
y: M
hy: y β βS
intro.intro.intro.introGoals accomplished! πM: Type ?u.10932
N: Type ?u.10935
P: Type ?u.10938
instβΒ²: MulOneClass M
instβΒΉ: MulOneClass N
instβ: MulOneClass P
Sβ: Submonoid M
F: Type ?u.10959
mc: MonoidHomClass F M N
f: F
S: Submonoid M
x: M
hx: x β βS
y: M
hy: y β βSM: Type ?u.10932
N: Type ?u.10935
P: Type ?u.10938
instβΒ²: MulOneClass M
instβΒΉ: MulOneClass N
instβ: MulOneClass P
Sβ: Submonoid M
F: Type ?u.10959
mc: MonoidHomClass F M N
f: F
S: Submonoid M
x: M
hx: x β βS
y: M
hy: y β βSM: Type ?u.10932
N: Type ?u.10935
P: Type ?u.10938
instβΒ²: MulOneClass M
instβΒΉ: MulOneClass N
instβ: MulOneClass P
Sβ: Submonoid M
F: Type ?u.10959
mc: MonoidHomClass F M N
f: F
S: Submonoid M
x: M
hx: x β βS
y: M
hy: y β βSGoals accomplished! π#align submonoid.mapGoals accomplished! πSubmonoid.map #align add_submonoid.mapSubmonoid.map: {M : Type u_1} β {N : Type u_2} β [inst : MulOneClass M] β [inst_1 : MulOneClass N] β {F : Type u_3} β [mc : MonoidHomClass F M N] β F β Submonoid M β Submonoid NAddSubmonoid.map @[AddSubmonoid.map: {M : Type u_1} β {N : Type u_2} β [inst : AddZeroClass M] β [inst_1 : AddZeroClass N] β {F : Type u_3} β [mc : AddMonoidHomClass F M N] β F β AddSubmonoid M β AddSubmonoid Nto_additive (attr := simp)] theorem coe_map (to_additive: β {M : Type u_1} {N : Type u_2} [inst : AddZeroClass M] [inst_1 : AddZeroClass N] {F : Type u_3} [mc : AddMonoidHomClass F M N] (f : F) (S : AddSubmonoid M), β(AddSubmonoid.map f S) = βf '' βSf :f: FF) (F: Type ?u.13199S :S: Submonoid MSubmonoidSubmonoid: (M : Type ?u.13216) β [inst : MulOneClass M] β Type ?u.13216M) : (M: Type ?u.13172S.S: Submonoid Mmapmap: {M : Type ?u.13230} β {N : Type ?u.13229} β [inst : MulOneClass M] β [inst_1 : MulOneClass N] β {F : Type ?u.13228} β [mc : MonoidHomClass F M N] β F β Submonoid M β Submonoid Nf : Setf: FN) =N: Type ?u.13175f ''f: FS := rfl #align submonoid.coe_mapS: Submonoid MSubmonoid.coe_map #align add_submonoid.coe_mapSubmonoid.coe_map: β {M : Type u_1} {N : Type u_2} [inst : MulOneClass M] [inst_1 : MulOneClass N] {F : Type u_3} [mc : MonoidHomClass F M N] (f : F) (S : Submonoid M), β(map f S) = βf '' βSAddSubmonoid.coe_map @[AddSubmonoid.coe_map: β {M : Type u_1} {N : Type u_2} [inst : AddZeroClass M] [inst_1 : AddZeroClass N] {F : Type u_3} [mc : AddMonoidHomClass F M N] (f : F) (S : AddSubmonoid M), β(AddSubmonoid.map f S) = βf '' βSto_additive (attr := simp)] theorem mem_map {to_additive: β {M : Type u_1} {N : Type u_2} [inst : AddZeroClass M] [inst_1 : AddZeroClass N] {F : Type u_3} [mc : AddMonoidHomClass F M N] {f : F} {S : AddSubmonoid M} {y : N}, y β AddSubmonoid.map f S β β x, x β S β§ βf x = yf :f: FF} {F: Type ?u.13840S :S: Submonoid MSubmonoidSubmonoid: (M : Type ?u.13857) β [inst : MulOneClass M] β Type ?u.13857M} {M: Type ?u.13813y :y: NN} :N: Type ?u.13816y βy: NS.S: Submonoid Mmapmap: {M : Type ?u.13875} β {N : Type ?u.13874} β [inst : MulOneClass M] β [inst_1 : MulOneClass N] β {F : Type ?u.13873} β [mc : MonoidHomClass F M N] β F β Submonoid M β Submonoid Nf β βf: Fx βx: ?m.14003S,S: Submonoid Mff: Fx =x: ?m.14003y :=y: NGoals accomplished! πM: Type u_1
N: Type u_2
P: Type ?u.13819
instβΒ²: MulOneClass M
instβΒΉ: MulOneClass N
instβ: MulOneClass P
Sβ: Submonoid M
F: Type u_3
mc: MonoidHomClass F M N
f: F
S: Submonoid M
y: NM: Type u_1
N: Type u_2
P: Type ?u.13819
instβΒ²: MulOneClass M
instβΒΉ: MulOneClass N
instβ: MulOneClass P
Sβ: Submonoid M
F: Type u_3
mc: MonoidHomClass F M N
f: F
S: Submonoid M
y: NM: Type u_1
N: Type u_2
P: Type ?u.13819
instβΒ²: MulOneClass M
instβΒΉ: MulOneClass N
instβ: MulOneClass P
Sβ: Submonoid M
F: Type u_3
mc: MonoidHomClass F M N
f: F
S: Submonoid M
y: NM: Type u_1
N: Type u_2
P: Type ?u.13819
instβΒ²: MulOneClass M
instβΒΉ: MulOneClass N
instβ: MulOneClass P
Sβ: Submonoid M
F: Type u_3
mc: MonoidHomClass F M N
f: F
S: Submonoid M
y: NM: Type u_1
N: Type u_2
P: Type ?u.13819
instβΒ²: MulOneClass M
instβΒΉ: MulOneClass N
instβ: MulOneClass P
Sβ: Submonoid M
F: Type u_3
mc: MonoidHomClass F M N
f: F
S: Submonoid M
y: N#align submonoid.mem_mapGoals accomplished! πSubmonoid.mem_map #align add_submonoid.mem_mapSubmonoid.mem_map: β {M : Type u_1} {N : Type u_2} [inst : MulOneClass M] [inst_1 : MulOneClass N] {F : Type u_3} [mc : MonoidHomClass F M N] {f : F} {S : Submonoid M} {y : N}, y β map f S β β x, x β S β§ βf x = yAddSubmonoid.mem_map @[AddSubmonoid.mem_map: β {M : Type u_1} {N : Type u_2} [inst : AddZeroClass M] [inst_1 : AddZeroClass N] {F : Type u_3} [mc : AddMonoidHomClass F M N] {f : F} {S : AddSubmonoid M} {y : N}, y β AddSubmonoid.map f S β β x, x β S β§ βf x = yto_additive] theoremto_additive: β {M : Type u_1} {N : Type u_2} [inst : AddZeroClass M] [inst_1 : AddZeroClass N] {F : Type u_3} [mc : AddMonoidHomClass F M N] (f : F) {S : AddSubmonoid M} {x : M}, x β S β βf x β AddSubmonoid.map f Smem_map_of_mem (mem_map_of_mem: β {M : Type u_1} {N : Type u_2} [inst : MulOneClass M] [inst_1 : MulOneClass N] {F : Type u_3} [mc : MonoidHomClass F M N] (f : F) {S : Submonoid M} {x : M}, x β S β βf x β map f Sf :f: FF) {F: Type ?u.14498S :S: Submonoid MSubmonoidSubmonoid: (M : Type ?u.14515) β [inst : MulOneClass M] β Type ?u.14515M} {M: Type ?u.14471x :x: MM} (M: Type ?u.14471hx :hx: x β Sx βx: MS) :S: Submonoid Mff: Fx βx: MS.S: Submonoid Mmapmap: {M : Type ?u.14771} β {N : Type ?u.14770} β [inst : MulOneClass M] β [inst_1 : MulOneClass N] β {F : Type ?u.14769} β [mc : MonoidHomClass F M N] β F β Submonoid M β Submonoid Nf := mem_image_of_memf: Fff: Fhx #align submonoid.mem_map_of_memhx: x β SSubmonoid.mem_map_of_mem #align add_submonoid.mem_map_of_memSubmonoid.mem_map_of_mem: β {M : Type u_1} {N : Type u_2} [inst : MulOneClass M] [inst_1 : MulOneClass N] {F : Type u_3} [mc : MonoidHomClass F M N] (f : F) {S : Submonoid M} {x : M}, x β S β βf x β map f SAddSubmonoid.mem_map_of_mem @[AddSubmonoid.mem_map_of_mem: β {M : Type u_1} {N : Type u_2} [inst : AddZeroClass M] [inst_1 : AddZeroClass N] {F : Type u_3} [mc : AddMonoidHomClass F M N] (f : F) {S : AddSubmonoid M} {x : M}, x β S β βf x β AddSubmonoid.map f Sto_additive] theorem apply_coe_mem_map (to_additive: β {M : Type u_1} {N : Type u_2} [inst : AddZeroClass M] [inst_1 : AddZeroClass N] {F : Type u_3} [mc : AddMonoidHomClass F M N] (f : F) (S : AddSubmonoid M) (x : { x // x β S }), βf βx β AddSubmonoid.map f Sf :f: FF) (F: Type ?u.15208S :S: Submonoid MSubmonoidSubmonoid: (M : Type ?u.15225) β [inst : MulOneClass M] β Type ?u.15225M) (M: Type ?u.15181x :x: { x // x β S }S) :S: Submonoid Mff: Fx βx: { x // x β S }S.S: Submonoid Mmapmap: {M : Type ?u.15578} β {N : Type ?u.15577} β [inst : MulOneClass M] β [inst_1 : MulOneClass N] β {F : Type ?u.15576} β [mc : MonoidHomClass F M N] β F β Submonoid M β Submonoid Nf :=f: Fmem_map_of_memmem_map_of_mem: β {M : Type ?u.15703} {N : Type ?u.15704} [inst : MulOneClass M] [inst_1 : MulOneClass N] {F : Type ?u.15705} [mc : MonoidHomClass F M N] (f : F) {S : Submonoid M} {x : M}, x β S β βf x β map f Sff: Fx.2 #align submonoid.apply_coe_mem_mapx: { x // x β S }Submonoid.apply_coe_mem_map #align add_submonoid.apply_coe_mem_mapSubmonoid.apply_coe_mem_map: β {M : Type u_1} {N : Type u_2} [inst : MulOneClass M] [inst_1 : MulOneClass N] {F : Type u_3} [mc : MonoidHomClass F M N] (f : F) (S : Submonoid M) (x : { x // x β S }), βf βx β map f SAddSubmonoid.apply_coe_mem_map @[AddSubmonoid.apply_coe_mem_map: β {M : Type u_1} {N : Type u_2} [inst : AddZeroClass M] [inst_1 : AddZeroClass N] {F : Type u_3} [mc : AddMonoidHomClass F M N] (f : F) (S : AddSubmonoid M) (x : { x // x β S }), βf βx β AddSubmonoid.map f Sto_additive] theoremto_additive: β {M : Type u_3} {N : Type u_1} {P : Type u_2} [inst : AddZeroClass M] [inst_1 : AddZeroClass N] [inst_2 : AddZeroClass P] (S : AddSubmonoid M) (g : N β+ P) (f : M β+ N), AddSubmonoid.map g (AddSubmonoid.map f S) = AddSubmonoid.map (AddMonoidHom.comp g f) Smap_map (map_map: β {M : Type u_3} {N : Type u_1} {P : Type u_2} [inst : MulOneClass M] [inst_1 : MulOneClass N] [inst_2 : MulOneClass P] (S : Submonoid M) (g : N β* P) (f : M β* N), map g (map f S) = map (MonoidHom.comp g f) Sg :g: N β* PN β*N: Type ?u.15866P) (P: Type ?u.15869f :f: M β* NM β*M: Type ?u.15863N) : (N: Type ?u.15866S.S: Submonoid Mmapmap: {M : Type ?u.15935} β {N : Type ?u.15934} β [inst : MulOneClass M] β [inst_1 : MulOneClass N] β {F : Type ?u.15933} β [mc : MonoidHomClass F M N] β F β Submonoid M β Submonoid Nf).f: M β* Nmapmap: {M : Type ?u.16008} β {N : Type ?u.16007} β [inst : MulOneClass M] β [inst_1 : MulOneClass N] β {F : Type ?u.16006} β [mc : MonoidHomClass F M N] β F β Submonoid M β Submonoid Ng =g: N β* PS.S: Submonoid Mmap (map: {M : Type ?u.16080} β {N : Type ?u.16079} β [inst : MulOneClass M] β [inst_1 : MulOneClass N] β {F : Type ?u.16078} β [mc : MonoidHomClass F M N] β F β Submonoid M β Submonoid Ng.g: N β* Pcompcomp: {M : Type ?u.16097} β {N : Type ?u.16096} β {P : Type ?u.16095} β [inst : MulOneClass M] β [inst_1 : MulOneClass N] β [inst_2 : MulOneClass P] β (N β* P) β (M β* N) β M β* Pf) :=f: M β* NSetLike.coe_injective <| image_imageSetLike.coe_injective: β {A : Type ?u.16186} {B : Type ?u.16187} [i : SetLike A B], Function.Injective SetLike.coe__: ?m.16210 β ?m.16211__: ?m.16209 β ?m.16210_ #align submonoid.map_map_: Set ?m.16209Submonoid.map_map #align add_submonoid.map_mapSubmonoid.map_map: β {M : Type u_3} {N : Type u_1} {P : Type u_2} [inst : MulOneClass M] [inst_1 : MulOneClass N] [inst_2 : MulOneClass P] (S : Submonoid M) (g : N β* P) (f : M β* N), map g (map f S) = map (MonoidHom.comp g f) SAddSubmonoid.map_map @[AddSubmonoid.map_map: β {M : Type u_3} {N : Type u_1} {P : Type u_2} [inst : AddZeroClass M] [inst_1 : AddZeroClass N] [inst_2 : AddZeroClass P] (S : AddSubmonoid M) (g : N β+ P) (f : M β+ N), AddSubmonoid.map g (AddSubmonoid.map f S) = AddSubmonoid.map (AddMonoidHom.comp g f) Sto_additive] theoremto_additive: β {M : Type u_1} {N : Type u_2} [inst : AddZeroClass M] [inst_1 : AddZeroClass N] {F : Type u_3} [mc : AddMonoidHomClass F M N] {f : F}, Function.Injective βf β β {S : AddSubmonoid M} {x : M}, βf x β AddSubmonoid.map f S β x β Smem_map_iff_mem {f :f: FF} (F: Type ?u.16377hf : Function.Injectivehf: Function.Injective βff) {f: FS :S: Submonoid MSubmonoidSubmonoid: (M : Type ?u.16587) β [inst : MulOneClass M] β Type ?u.16587M} {M: Type ?u.16350x :x: MM} :M: Type ?u.16350ff: Fx βx: MS.S: Submonoid Mmapmap: {M : Type ?u.16774} β {N : Type ?u.16773} β [inst : MulOneClass M] β [inst_1 : MulOneClass N] β {F : Type ?u.16772} β [mc : MonoidHomClass F M N] β F β Submonoid M β Submonoid Nf βf: Fx βx: MS :=S: Submonoid Mhf.mem_set_image #align submonoid.mem_map_iff_memhf: Function.Injective βfSubmonoid.mem_map_iff_mem #align add_submonoid.mem_map_iff_memSubmonoid.mem_map_iff_mem: β {M : Type u_1} {N : Type u_2} [inst : MulOneClass M] [inst_1 : MulOneClass N] {F : Type u_3} [mc : MonoidHomClass F M N] {f : F}, Function.Injective βf β β {S : Submonoid M} {x : M}, βf x β map f S β x β SAddSubmonoid.mem_map_iff_mem @[AddSubmonoid.mem_map_iff_mem: β {M : Type u_1} {N : Type u_2} [inst : AddZeroClass M] [inst_1 : AddZeroClass N] {F : Type u_3} [mc : AddMonoidHomClass F M N] {f : F}, Function.Injective βf β β {S : AddSubmonoid M} {x : M}, βf x β AddSubmonoid.map f S β x β Sto_additive] theoremto_additive: β {M : Type u_1} {N : Type u_2} [inst : AddZeroClass M] [inst_1 : AddZeroClass N] {F : Type u_3} [mc : AddMonoidHomClass F M N] {f : F} {S : AddSubmonoid M} {T : AddSubmonoid N}, AddSubmonoid.map f S β€ T β S β€ AddSubmonoid.comap f Tmap_le_iff_le_comap {f :f: FF} {F: Type ?u.17062S :S: Submonoid MSubmonoidSubmonoid: (M : Type ?u.17079) β [inst : MulOneClass M] β Type ?u.17079M} {M: Type ?u.17035T :T: Submonoid NSubmonoidSubmonoid: (M : Type ?u.17088) β [inst : MulOneClass M] β Type ?u.17088N} :N: Type ?u.17038S.S: Submonoid Mmapmap: {M : Type ?u.17100} β {N : Type ?u.17099} β [inst : MulOneClass M] β [inst_1 : MulOneClass N] β {F : Type ?u.17098} β [mc : MonoidHomClass F M N] β F β Submonoid M β Submonoid Nf β€f: FT βT: Submonoid NS β€S: Submonoid MT.T: Submonoid Ncomapcomap: {M : Type ?u.17204} β {N : Type ?u.17203} β [inst : MulOneClass M] β [inst_1 : MulOneClass N] β {F : Type ?u.17202} β [mc : MonoidHomClass F M N] β F β Submonoid N β Submonoid Mf := image_subset_iff #align submonoid.map_le_iff_le_comapf: FSubmonoid.map_le_iff_le_comap #align add_submonoid.map_le_iff_le_comapSubmonoid.map_le_iff_le_comap: β {M : Type u_1} {N : Type u_2} [inst : MulOneClass M] [inst_1 : MulOneClass N] {F : Type u_3} [mc : MonoidHomClass F M N] {f : F} {S : Submonoid M} {T : Submonoid N}, map f S β€ T β S β€ comap f TAddSubmonoid.map_le_iff_le_comap @[AddSubmonoid.map_le_iff_le_comap: β {M : Type u_1} {N : Type u_2} [inst : AddZeroClass M] [inst_1 : AddZeroClass N] {F : Type u_3} [mc : AddMonoidHomClass F M N] {f : F} {S : AddSubmonoid M} {T : AddSubmonoid N}, AddSubmonoid.map f S β€ T β S β€ AddSubmonoid.comap f Tto_additive] theoremto_additive: β {M : Type u_1} {N : Type u_2} [inst : AddZeroClass M] [inst_1 : AddZeroClass N] {F : Type u_3} [mc : AddMonoidHomClass F M N] (f : F), GaloisConnection (AddSubmonoid.map f) (AddSubmonoid.comap f)gc_map_comap (gc_map_comap: β {M : Type u_1} {N : Type u_2} [inst : MulOneClass M] [inst_1 : MulOneClass N] {F : Type u_3} [mc : MonoidHomClass F M N] (f : F), GaloisConnection (map f) (comap f)f :f: FF) : GaloisConnection (F: Type ?u.17445mapmap: {M : Type ?u.17500} β {N : Type ?u.17499} β [inst : MulOneClass M] β [inst_1 : MulOneClass N] β {F : Type ?u.17498} β [mc : MonoidHomClass F M N] β F β Submonoid M β Submonoid Nf) (f: Fcomapcomap: {M : Type ?u.17619} β {N : Type ?u.17618} β [inst : MulOneClass M] β [inst_1 : MulOneClass N] β {F : Type ?u.17617} β [mc : MonoidHomClass F M N] β F β Submonoid N β Submonoid Mf) := funf: F__: ?m.17768_ =>_: ?m.17771map_le_iff_le_comap #align submonoid.gc_map_comapmap_le_iff_le_comap: β {M : Type ?u.17773} {N : Type ?u.17774} [inst : MulOneClass M] [inst_1 : MulOneClass N] {F : Type ?u.17775} [mc : MonoidHomClass F M N] {f : F} {S : Submonoid M} {T : Submonoid N}, map f S β€ T β S β€ comap f TSubmonoid.gc_map_comap #align add_submonoid.gc_map_comapSubmonoid.gc_map_comap: β {M : Type u_1} {N : Type u_2} [inst : MulOneClass M] [inst_1 : MulOneClass N] {F : Type u_3} [mc : MonoidHomClass F M N] (f : F), GaloisConnection (map f) (comap f)AddSubmonoid.gc_map_comap @[AddSubmonoid.gc_map_comap: β {M : Type u_1} {N : Type u_2} [inst : AddZeroClass M] [inst_1 : AddZeroClass N] {F : Type u_3} [mc : AddMonoidHomClass F M N] (f : F), GaloisConnection (AddSubmonoid.map f) (AddSubmonoid.comap f)to_additive] theorem map_le_of_le_comap {to_additive: β {M : Type u_2} {N : Type u_1} [inst : AddZeroClass M] [inst_1 : AddZeroClass N] (S : AddSubmonoid M) {F : Type u_3} [mc : AddMonoidHomClass F M N] {T : AddSubmonoid N} {f : F}, S β€ AddSubmonoid.comap f T β AddSubmonoid.map f S β€ TT :T: Submonoid NSubmonoidSubmonoid: (M : Type ?u.17971) β [inst : MulOneClass M] β Type ?u.17971N} {N: Type ?u.17932f :f: FF} :F: Type ?u.17956S β€S: Submonoid MT.T: Submonoid Ncomapcomap: {M : Type ?u.17986} β {N : Type ?u.17985} β [inst : MulOneClass M] β [inst_1 : MulOneClass N] β {F : Type ?u.17984} β [mc : MonoidHomClass F M N] β F β Submonoid N β Submonoid Mf βf: FS.S: Submonoid Mmapmap: {M : Type ?u.18096} β {N : Type ?u.18095} β [inst : MulOneClass M] β [inst_1 : MulOneClass N] β {F : Type ?u.18094} β [mc : MonoidHomClass F M N] β F β Submonoid M β Submonoid Nf β€f: FT := (T: Submonoid Ngc_map_comapgc_map_comap: β {M : Type ?u.18194} {N : Type ?u.18195} [inst : MulOneClass M] [inst_1 : MulOneClass N] {F : Type ?u.18196} [mc : MonoidHomClass F M N] (f : F), GaloisConnection (map f) (comap f)f).f: Fl_le #align submonoid.map_le_of_le_comapSubmonoid.map_le_of_le_comap #align add_submonoid.map_le_of_le_comapSubmonoid.map_le_of_le_comap: β {M : Type u_2} {N : Type u_1} [inst : MulOneClass M] [inst_1 : MulOneClass N] (S : Submonoid M) {F : Type u_3} [mc : MonoidHomClass F M N] {T : Submonoid N} {f : F}, S β€ comap f T β map f S β€ TAddSubmonoid.map_le_of_le_comap @[AddSubmonoid.map_le_of_le_comap: β {M : Type u_2} {N : Type u_1} [inst : AddZeroClass M] [inst_1 : AddZeroClass N] (S : AddSubmonoid M) {F : Type u_3} [mc : AddMonoidHomClass F M N] {T : AddSubmonoid N} {f : F}, S β€ AddSubmonoid.comap f T β AddSubmonoid.map f S β€ Tto_additive] theorem le_comap_of_map_le {to_additive: β {M : Type u_2} {N : Type u_1} [inst : AddZeroClass M] [inst_1 : AddZeroClass N] (S : AddSubmonoid M) {F : Type u_3} [mc : AddMonoidHomClass F M N] {T : AddSubmonoid N} {f : F}, AddSubmonoid.map f S β€ T β S β€ AddSubmonoid.comap f TT :T: Submonoid NSubmonoidSubmonoid: (M : Type ?u.18482) β [inst : MulOneClass M] β Type ?u.18482N} {N: Type ?u.18443f :f: FF} :F: Type ?u.18467S.S: Submonoid Mmapmap: {M : Type ?u.18497} β {N : Type ?u.18496} β [inst : MulOneClass M] β [inst_1 : MulOneClass N] β {F : Type ?u.18495} β [mc : MonoidHomClass F M N] β F β Submonoid M β Submonoid Nf β€f: FT βT: Submonoid NS β€S: Submonoid MT.T: Submonoid Ncomapcomap: {M : Type ?u.18607} β {N : Type ?u.18606} β [inst : MulOneClass M] β [inst_1 : MulOneClass N] β {F : Type ?u.18605} β [mc : MonoidHomClass F M N] β F β Submonoid N β Submonoid Mf := (f: Fgc_map_comapgc_map_comap: β {M : Type ?u.18705} {N : Type ?u.18706} [inst : MulOneClass M] [inst_1 : MulOneClass N] {F : Type ?u.18707} [mc : MonoidHomClass F M N] (f : F), GaloisConnection (map f) (comap f)f).f: Fle_u #align submonoid.le_comap_of_map_leSubmonoid.le_comap_of_map_le #align add_submonoid.le_comap_of_map_leSubmonoid.le_comap_of_map_le: β {M : Type u_2} {N : Type u_1} [inst : MulOneClass M] [inst_1 : MulOneClass N] (S : Submonoid M) {F : Type u_3} [mc : MonoidHomClass F M N] {T : Submonoid N} {f : F}, map f S β€ T β S β€ comap f TAddSubmonoid.le_comap_of_map_le @[AddSubmonoid.le_comap_of_map_le: β {M : Type u_2} {N : Type u_1} [inst : AddZeroClass M] [inst_1 : AddZeroClass N] (S : AddSubmonoid M) {F : Type u_3} [mc : AddMonoidHomClass F M N] {T : AddSubmonoid N} {f : F}, AddSubmonoid.map f S β€ T β S β€ AddSubmonoid.comap f Tto_additive] theoremto_additive: β {M : Type u_1} {N : Type u_2} [inst : AddZeroClass M] [inst_1 : AddZeroClass N] (S : AddSubmonoid M) {F : Type u_3} [mc : AddMonoidHomClass F M N] {f : F}, S β€ AddSubmonoid.comap f (AddSubmonoid.map f S)le_comap_map {le_comap_map: β {M : Type u_1} {N : Type u_2} [inst : MulOneClass M] [inst_1 : MulOneClass N] (S : Submonoid M) {F : Type u_3} [mc : MonoidHomClass F M N] {f : F}, S β€ comap f (map f S)f :f: FF} :F: Type ?u.18978S β€ (S: Submonoid MS.S: Submonoid Mmapmap: {M : Type ?u.18998} β {N : Type ?u.18997} β [inst : MulOneClass M] β [inst_1 : MulOneClass N] β {F : Type ?u.18996} β [mc : MonoidHomClass F M N] β F β Submonoid M β Submonoid Nf).f: Fcomapcomap: {M : Type ?u.19061} β {N : Type ?u.19060} β [inst : MulOneClass M] β [inst_1 : MulOneClass N] β {F : Type ?u.19059} β [mc : MonoidHomClass F M N] β F β Submonoid N β Submonoid Mf := (f: Fgc_map_comapgc_map_comap: β {M : Type ?u.19162} {N : Type ?u.19163} [inst : MulOneClass M] [inst_1 : MulOneClass N] {F : Type ?u.19164} [mc : MonoidHomClass F M N] (f : F), GaloisConnection (map f) (comap f)f).f: Fle_u_l_ #align submonoid.le_comap_map_: ?m.19235Submonoid.le_comap_map #align add_submonoid.le_comap_mapSubmonoid.le_comap_map: β {M : Type u_1} {N : Type u_2} [inst : MulOneClass M] [inst_1 : MulOneClass N] (S : Submonoid M) {F : Type u_3} [mc : MonoidHomClass F M N] {f : F}, S β€ comap f (map f S)AddSubmonoid.le_comap_map @[AddSubmonoid.le_comap_map: β {M : Type u_1} {N : Type u_2} [inst : AddZeroClass M] [inst_1 : AddZeroClass N] (S : AddSubmonoid M) {F : Type u_3} [mc : AddMonoidHomClass F M N] {f : F}, S β€ AddSubmonoid.comap f (AddSubmonoid.map f S)to_additive] theorem map_comap_le {to_additive: β {M : Type u_2} {N : Type u_1} [inst : AddZeroClass M] [inst_1 : AddZeroClass N] {F : Type u_3} [mc : AddMonoidHomClass F M N] {S : AddSubmonoid N} {f : F}, AddSubmonoid.map f (AddSubmonoid.comap f S) β€ SS :S: Submonoid NSubmonoidSubmonoid: (M : Type ?u.19433) β [inst : MulOneClass M] β Type ?u.19433N} {N: Type ?u.19394f :f: FF} : (F: Type ?u.19418S.S: Submonoid Ncomapcomap: {M : Type ?u.19447} β {N : Type ?u.19446} β [inst : MulOneClass M] β [inst_1 : MulOneClass N] β {F : Type ?u.19445} β [mc : MonoidHomClass F M N] β F β Submonoid N β Submonoid Mf).f: Fmapmap: {M : Type ?u.19505} β {N : Type ?u.19504} β [inst : MulOneClass M] β [inst_1 : MulOneClass N] β {F : Type ?u.19503} β [mc : MonoidHomClass F M N] β F β Submonoid M β Submonoid Nf β€f: FS := (S: Submonoid Ngc_map_comapgc_map_comap: β {M : Type ?u.19608} {N : Type ?u.19609} [inst : MulOneClass M] [inst_1 : MulOneClass N] {F : Type ?u.19610} [mc : MonoidHomClass F M N] (f : F), GaloisConnection (map f) (comap f)f).f: Fl_u_le_ #align submonoid.map_comap_le_: ?m.19682Submonoid.map_comap_le #align add_submonoid.map_comap_leSubmonoid.map_comap_le: β {M : Type u_2} {N : Type u_1} [inst : MulOneClass M] [inst_1 : MulOneClass N] {F : Type u_3} [mc : MonoidHomClass F M N] {S : Submonoid N} {f : F}, map f (comap f S) β€ SAddSubmonoid.map_comap_le @[AddSubmonoid.map_comap_le: β {M : Type u_2} {N : Type u_1} [inst : AddZeroClass M] [inst_1 : AddZeroClass N] {F : Type u_3} [mc : AddMonoidHomClass F M N] {S : AddSubmonoid N} {f : F}, AddSubmonoid.map f (AddSubmonoid.comap f S) β€ Sto_additive] theorem monotone_map {to_additive: β {M : Type u_1} {N : Type u_2} [inst : AddZeroClass M] [inst_1 : AddZeroClass N] {F : Type u_3} [mc : AddMonoidHomClass F M N] {f : F}, Monotone (AddSubmonoid.map f)f :f: FF} : Monotone (F: Type ?u.19870mapmap: {M : Type ?u.19925} β {N : Type ?u.19924} β [inst : MulOneClass M] β [inst_1 : MulOneClass N] β {F : Type ?u.19923} β [mc : MonoidHomClass F M N] β F β Submonoid M β Submonoid Nf) := (f: Fgc_map_comapgc_map_comap: β {M : Type ?u.20119} {N : Type ?u.20120} [inst : MulOneClass M] [inst_1 : MulOneClass N] {F : Type ?u.20121} [mc : MonoidHomClass F M N] (f : F), GaloisConnection (map f) (comap f)f).f: Fmonotone_l #align submonoid.monotone_mapSubmonoid.monotone_map #align add_submonoid.monotone_mapSubmonoid.monotone_map: β {M : Type u_1} {N : Type u_2} [inst : MulOneClass M] [inst_1 : MulOneClass N] {F : Type u_3} [mc : MonoidHomClass F M N] {f : F}, Monotone (map f)AddSubmonoid.monotone_map @[AddSubmonoid.monotone_map: β {M : Type u_1} {N : Type u_2} [inst : AddZeroClass M] [inst_1 : AddZeroClass N] {F : Type u_3} [mc : AddMonoidHomClass F M N] {f : F}, Monotone (AddSubmonoid.map f)to_additive] theoremto_additive: β {M : Type u_2} {N : Type u_1} [inst : AddZeroClass M] [inst_1 : AddZeroClass N] {F : Type u_3} [mc : AddMonoidHomClass F M N] {f : F}, Monotone (AddSubmonoid.comap f)monotone_comap {monotone_comap: β {M : Type u_2} {N : Type u_1} [inst : MulOneClass M] [inst_1 : MulOneClass N] {F : Type u_3} [mc : MonoidHomClass F M N] {f : F}, Monotone (comap f)f :f: FF} : Monotone (F: Type ?u.20368comapcomap: {M : Type ?u.20423} β {N : Type ?u.20422} β [inst : MulOneClass M] β [inst_1 : MulOneClass N] β {F : Type ?u.20421} β [mc : MonoidHomClass F M N] β F β Submonoid N β Submonoid Mf) := (f: Fgc_map_comapgc_map_comap: β {M : Type ?u.20617} {N : Type ?u.20618} [inst : MulOneClass M] [inst_1 : MulOneClass N] {F : Type ?u.20619} [mc : MonoidHomClass F M N] (f : F), GaloisConnection (map f) (comap f)f).f: Fmonotone_u #align submonoid.monotone_comapSubmonoid.monotone_comap #align add_submonoid.monotone_comapSubmonoid.monotone_comap: β {M : Type u_2} {N : Type u_1} [inst : MulOneClass M] [inst_1 : MulOneClass N] {F : Type u_3} [mc : MonoidHomClass F M N] {f : F}, Monotone (comap f)AddSubmonoid.monotone_comap @[AddSubmonoid.monotone_comap: β {M : Type u_2} {N : Type u_1} [inst : AddZeroClass M] [inst_1 : AddZeroClass N] {F : Type u_3} [mc : AddMonoidHomClass F M N] {f : F}, Monotone (AddSubmonoid.comap f)to_additive (attr := simp)] theorem map_comap_map {to_additive: β {M : Type u_2} {N : Type u_1} [inst : AddZeroClass M] [inst_1 : AddZeroClass N] (S : AddSubmonoid M) {F : Type u_3} [mc : AddMonoidHomClass F M N] {f : F}, AddSubmonoid.map f (AddSubmonoid.comap f (AddSubmonoid.map f S)) = AddSubmonoid.map f Sf :f: FF} : ((F: Type ?u.20866S.S: Submonoid Mmapmap: {M : Type ?u.20886} β {N : Type ?u.20885} β [inst : MulOneClass M] β [inst_1 : MulOneClass N] β {F : Type ?u.20884} β [mc : MonoidHomClass F M N] β F β Submonoid M β Submonoid Nf).f: Fcomapcomap: {M : Type ?u.20949} β {N : Type ?u.20948} β [inst : MulOneClass M] β [inst_1 : MulOneClass N] β {F : Type ?u.20947} β [mc : MonoidHomClass F M N] β F β Submonoid N β Submonoid Mf).f: Fmapmap: {M : Type ?u.21005} β {N : Type ?u.21004} β [inst : MulOneClass M] β [inst_1 : MulOneClass N] β {F : Type ?u.21003} β [mc : MonoidHomClass F M N] β F β Submonoid M β Submonoid Nf =f: FS.S: Submonoid Mmapmap: {M : Type ?u.21055} β {N : Type ?u.21054} β [inst : MulOneClass M] β [inst_1 : MulOneClass N] β {F : Type ?u.21053} β [mc : MonoidHomClass F M N] β F β Submonoid M β Submonoid Nf := (f: Fgc_map_comapgc_map_comap: β {M : Type ?u.21106} {N : Type ?u.21107} [inst : MulOneClass M] [inst_1 : MulOneClass N] {F : Type ?u.21108} [mc : MonoidHomClass F M N] (f : F), GaloisConnection (map f) (comap f)f).f: Fl_u_l_eq_ll_u_l_eq_l: β {Ξ± : Type ?u.21170} {Ξ² : Type ?u.21169} [inst : Preorder Ξ±] [inst_1 : PartialOrder Ξ²] {l : Ξ± β Ξ²} {u : Ξ² β Ξ±}, GaloisConnection l u β β (a : Ξ±), l (u (l a)) = l a_ #align submonoid.map_comap_map_: ?m.21179Submonoid.map_comap_map #align add_submonoid.map_comap_mapSubmonoid.map_comap_map: β {M : Type u_2} {N : Type u_1} [inst : MulOneClass M] [inst_1 : MulOneClass N] (S : Submonoid M) {F : Type u_3} [mc : MonoidHomClass F M N] {f : F}, map f (comap f (map f S)) = map f SAddSubmonoid.map_comap_map @[AddSubmonoid.map_comap_map: β {M : Type u_2} {N : Type u_1} [inst : AddZeroClass M] [inst_1 : AddZeroClass N] (S : AddSubmonoid M) {F : Type u_3} [mc : AddMonoidHomClass F M N] {f : F}, AddSubmonoid.map f (AddSubmonoid.comap f (AddSubmonoid.map f S)) = AddSubmonoid.map f Sto_additive (attr := simp)] theoremto_additive: β {M : Type u_2} {N : Type u_1} [inst : AddZeroClass M] [inst_1 : AddZeroClass N] {F : Type u_3} [mc : AddMonoidHomClass F M N] {S : AddSubmonoid N} {f : F}, AddSubmonoid.comap f (AddSubmonoid.map f (AddSubmonoid.comap f S)) = AddSubmonoid.comap f Scomap_map_comap {comap_map_comap: β {M : Type u_2} {N : Type u_1} [inst : MulOneClass M] [inst_1 : MulOneClass N] {F : Type u_3} [mc : MonoidHomClass F M N] {S : Submonoid N} {f : F}, comap f (map f (comap f S)) = comap f SS :S: Submonoid NSubmonoidSubmonoid: (M : Type ?u.21440) β [inst : MulOneClass M] β Type ?u.21440N} {N: Type ?u.21401f :f: FF} : ((F: Type ?u.21425S.S: Submonoid Ncomapcomap: {M : Type ?u.21454} β {N : Type ?u.21453} β [inst : MulOneClass M] β [inst_1 : MulOneClass N] β {F : Type ?u.21452} β [mc : MonoidHomClass F M N] β F β Submonoid N β Submonoid Mf).f: Fmapmap: {M : Type ?u.21512} β {N : Type ?u.21511} β [inst : MulOneClass M] β [inst_1 : MulOneClass N] β {F : Type ?u.21510} β [mc : MonoidHomClass F M N] β F β Submonoid M β Submonoid Nf).f: Fcomapcomap: {M : Type ?u.21568} β {N : Type ?u.21567} β [inst : MulOneClass M] β [inst_1 : MulOneClass N] β {F : Type ?u.21566} β [mc : MonoidHomClass F M N] β F β Submonoid N β Submonoid Mf =f: FS.S: Submonoid Ncomapcomap: {M : Type ?u.21618} β {N : Type ?u.21617} β [inst : MulOneClass M] β [inst_1 : MulOneClass N] β {F : Type ?u.21616} β [mc : MonoidHomClass F M N] β F β Submonoid N β Submonoid Mf := (f: Fgc_map_comapgc_map_comap: β {M : Type ?u.21670} {N : Type ?u.21671} [inst : MulOneClass M] [inst_1 : MulOneClass N] {F : Type ?u.21672} [mc : MonoidHomClass F M N] (f : F), GaloisConnection (map f) (comap f)f).f: Fu_l_u_eq_uu_l_u_eq_u: β {Ξ± : Type ?u.21734} {Ξ² : Type ?u.21733} [inst : PartialOrder Ξ±] [inst_1 : Preorder Ξ²] {l : Ξ± β Ξ²} {u : Ξ² β Ξ±}, GaloisConnection l u β β (b : Ξ²), u (l (u b)) = u b_ #align submonoid.comap_map_comap_: ?m.21744Submonoid.comap_map_comap #align add_submonoid.comap_map_comapSubmonoid.comap_map_comap: β {M : Type u_2} {N : Type u_1} [inst : MulOneClass M] [inst_1 : MulOneClass N] {F : Type u_3} [mc : MonoidHomClass F M N] {S : Submonoid N} {f : F}, comap f (map f (comap f S)) = comap f SAddSubmonoid.comap_map_comap @[AddSubmonoid.comap_map_comap: β {M : Type u_2} {N : Type u_1} [inst : AddZeroClass M] [inst_1 : AddZeroClass N] {F : Type u_3} [mc : AddMonoidHomClass F M N] {S : AddSubmonoid N} {f : F}, AddSubmonoid.comap f (AddSubmonoid.map f (AddSubmonoid.comap f S)) = AddSubmonoid.comap f Sto_additive] theoremto_additive: β {M : Type u_1} {N : Type u_2} [inst : AddZeroClass M] [inst_1 : AddZeroClass N] {F : Type u_3} [mc : AddMonoidHomClass F M N] (S T : AddSubmonoid M) (f : F), AddSubmonoid.map f (S β T) = AddSubmonoid.map f S β AddSubmonoid.map f Tmap_sup (map_sup: β {M : Type u_1} {N : Type u_2} [inst : MulOneClass M] [inst_1 : MulOneClass N] {F : Type u_3} [mc : MonoidHomClass F M N] (S T : Submonoid M) (f : F), map f (S β T) = map f S β map f TSS: Submonoid MT :T: Submonoid MSubmonoidSubmonoid: (M : Type ?u.22011) β [inst : MulOneClass M] β Type ?u.22011M) (M: Type ?u.21960f :f: FF) : (F: Type ?u.21987S βS: Submonoid MT).T: Submonoid Mmapmap: {M : Type ?u.22056} β {N : Type ?u.22055} β [inst : MulOneClass M] β [inst_1 : MulOneClass N] β {F : Type ?u.22054} β [mc : MonoidHomClass F M N] β F β Submonoid M β Submonoid Nf =f: FS.S: Submonoid Mmapmap: {M : Type ?u.22119} β {N : Type ?u.22118} β [inst : MulOneClass M] β [inst_1 : MulOneClass N] β {F : Type ?u.22117} β [mc : MonoidHomClass F M N] β F β Submonoid M β Submonoid Nf βf: FT.T: Submonoid Mmapmap: {M : Type ?u.22213} β {N : Type ?u.22212} β [inst : MulOneClass M] β [inst_1 : MulOneClass N] β {F : Type ?u.22211} β [mc : MonoidHomClass F M N] β F β Submonoid M β Submonoid Nf := (f: Fgc_map_comapgc_map_comap: β {M : Type ?u.22626} {N : Type ?u.22627} [inst : MulOneClass M] [inst_1 : MulOneClass N] {F : Type ?u.22628} [mc : MonoidHomClass F M N] (f : F), GaloisConnection (map f) (comap f)f : GaloisConnection (f: Fmapmap: {M : Type ?u.22362} β {N : Type ?u.22361} β [inst : MulOneClass M] β [inst_1 : MulOneClass N] β {F : Type ?u.22360} β [mc : MonoidHomClass F M N] β F β Submonoid M β Submonoid Nf) (f: Fcomapcomap: {M : Type ?u.22481} β {N : Type ?u.22480} β [inst : MulOneClass M] β [inst_1 : MulOneClass N] β {F : Type ?u.22479} β [mc : MonoidHomClass F M N] β F β Submonoid N β Submonoid Mf)).f: Fl_sup #align submonoid.map_supl_sup: β {Ξ± : Type ?u.22691} {Ξ² : Type ?u.22690} {aβ aβ : Ξ±} [inst : SemilatticeSup Ξ±] [inst_1 : SemilatticeSup Ξ²] {l : Ξ± β Ξ²} {u : Ξ² β Ξ±}, GaloisConnection l u β l (aβ β aβ) = l aβ β l aβSubmonoid.map_sup #align add_submonoid.map_supSubmonoid.map_sup: β {M : Type u_1} {N : Type u_2} [inst : MulOneClass M] [inst_1 : MulOneClass N] {F : Type u_3} [mc : MonoidHomClass F M N] (S T : Submonoid M) (f : F), map f (S β T) = map f S β map f TAddSubmonoid.map_sup @[AddSubmonoid.map_sup: β {M : Type u_1} {N : Type u_2} [inst : AddZeroClass M] [inst_1 : AddZeroClass N] {F : Type u_3} [mc : AddMonoidHomClass F M N] (S T : AddSubmonoid M) (f : F), AddSubmonoid.map f (S β T) = AddSubmonoid.map f S β AddSubmonoid.map f Tto_additive] theoremto_additive: β {M : Type u_2} {N : Type u_3} [inst : AddZeroClass M] [inst_1 : AddZeroClass N] {F : Type u_4} [mc : AddMonoidHomClass F M N] {ΞΉ : Sort u_1} (f : F) (s : ΞΉ β AddSubmonoid M), AddSubmonoid.map f (iSup s) = β¨ i, AddSubmonoid.map f (s i)map_iSup {map_iSup: β {M : Type u_2} {N : Type u_3} [inst : MulOneClass M] [inst_1 : MulOneClass N] {F : Type u_4} [mc : MonoidHomClass F M N] {ΞΉ : Sort u_1} (f : F) (s : ΞΉ β Submonoid M), map f (iSup s) = β¨ i, map f (s i)ΞΉ :ΞΉ: Sort u_1SortSort _: Type ?u.22854_} (Sort _: Type ?u.22854f :f: FF) (F: Type ?u.22839s :s: ΞΉ β Submonoid MΞΉ βΞΉ: Sort ?u.22854SubmonoidSubmonoid: (M : Type ?u.22861) β [inst : MulOneClass M] β Type ?u.22861M) : (iSupM: Type ?u.22812s).s: ΞΉ β Submonoid Mmapmap: {M : Type ?u.22904} β {N : Type ?u.22903} β [inst : MulOneClass M] β [inst_1 : MulOneClass N] β {F : Type ?u.22902} β [mc : MonoidHomClass F M N] β F β Submonoid M β Submonoid Nf = β¨f: Fi, (i: ?m.22968ss: ΞΉ β Submonoid Mi).i: ?m.22968mapmap: {M : Type ?u.22972} β {N : Type ?u.22971} β [inst : MulOneClass M] β [inst_1 : MulOneClass N] β {F : Type ?u.22970} β [mc : MonoidHomClass F M N] β F β Submonoid M β Submonoid Nf := (f: Fgc_map_comapgc_map_comap: β {M : Type ?u.23397} {N : Type ?u.23398} [inst : MulOneClass M] [inst_1 : MulOneClass N] {F : Type ?u.23399} [mc : MonoidHomClass F M N] (f : F), GaloisConnection (map f) (comap f)f : GaloisConnection (f: Fmapmap: {M : Type ?u.23133} β {N : Type ?u.23132} β [inst : MulOneClass M] β [inst_1 : MulOneClass N] β {F : Type ?u.23131} β [mc : MonoidHomClass F M N] β F β Submonoid M β Submonoid Nf) (f: Fcomapcomap: {M : Type ?u.23252} β {N : Type ?u.23251} β [inst : MulOneClass M] β [inst_1 : MulOneClass N] β {F : Type ?u.23250} β [mc : MonoidHomClass F M N] β F β Submonoid N β Submonoid Mf)).f: Fl_iSup #align submonoid.map_suprl_iSup: β {Ξ± : Type ?u.23463} {Ξ² : Type ?u.23462} {ΞΉ : Sort ?u.23461} [inst : CompleteLattice Ξ±] [inst_1 : CompleteLattice Ξ²] {l : Ξ± β Ξ²} {u : Ξ² β Ξ±}, GaloisConnection l u β β {f : ΞΉ β Ξ±}, l (iSup f) = β¨ i, l (f i)Submonoid.map_iSup #align add_submonoid.map_suprSubmonoid.map_iSup: β {M : Type u_2} {N : Type u_3} [inst : MulOneClass M] [inst_1 : MulOneClass N] {F : Type u_4} [mc : MonoidHomClass F M N] {ΞΉ : Sort u_1} (f : F) (s : ΞΉ β Submonoid M), map f (iSup s) = β¨ i, map f (s i)AddSubmonoid.map_iSup @[AddSubmonoid.map_iSup: β {M : Type u_2} {N : Type u_3} [inst : AddZeroClass M] [inst_1 : AddZeroClass N] {F : Type u_4} [mc : AddMonoidHomClass F M N] {ΞΉ : Sort u_1} (f : F) (s : ΞΉ β AddSubmonoid M), AddSubmonoid.map f (iSup s) = β¨ i, AddSubmonoid.map f (s i)to_additive] theorem comap_inf (to_additive: β {M : Type u_2} {N : Type u_1} [inst : AddZeroClass M] [inst_1 : AddZeroClass N] {F : Type u_3} [mc : AddMonoidHomClass F M N] (S T : AddSubmonoid N) (f : F), AddSubmonoid.comap f (S β T) = AddSubmonoid.comap f S β AddSubmonoid.comap f TSS: Submonoid NT :T: Submonoid NSubmonoidSubmonoid: (M : Type ?u.23645) β [inst : MulOneClass M] β Type ?u.23645N) (N: Type ?u.23597f :f: FF) : (F: Type ?u.23621S βS: Submonoid NT).T: Submonoid Ncomapcomap: {M : Type ?u.23670} β {N : Type ?u.23669} β [inst : MulOneClass M] β [inst_1 : MulOneClass N] β {F : Type ?u.23668} β [mc : MonoidHomClass F M N] β F β Submonoid N β Submonoid Mf =f: FS.S: Submonoid Ncomapcomap: {M : Type ?u.23733} β {N : Type ?u.23732} β [inst : MulOneClass M] β [inst_1 : MulOneClass N] β {F : Type ?u.23731} β [mc : MonoidHomClass F M N] β F β Submonoid N β Submonoid Mf βf: FT.T: Submonoid Ncomapcomap: {M : Type ?u.23827} β {N : Type ?u.23826} β [inst : MulOneClass M] β [inst_1 : MulOneClass N] β {F : Type ?u.23825} β [mc : MonoidHomClass F M N] β F β Submonoid N β Submonoid Mf := (f: Fgc_map_comapgc_map_comap: β {M : Type ?u.24220} {N : Type ?u.24221} [inst : MulOneClass M] [inst_1 : MulOneClass N] {F : Type ?u.24222} [mc : MonoidHomClass F M N] (f : F), GaloisConnection (map f) (comap f)f : GaloisConnection (f: Fmapmap: {M : Type ?u.23956} β {N : Type ?u.23955} β [inst : MulOneClass M] β [inst_1 : MulOneClass N] β {F : Type ?u.23954} β [mc : MonoidHomClass F M N] β F β Submonoid M β Submonoid Nf) (f: Fcomapcomap: {M : Type ?u.24075} β {N : Type ?u.24074} β [inst : MulOneClass M] β [inst_1 : MulOneClass N] β {F : Type ?u.24073} β [mc : MonoidHomClass F M N] β F β Submonoid N β Submonoid Mf)).f: Fu_inf #align submonoid.comap_infu_inf: β {Ξ± : Type ?u.24285} {Ξ² : Type ?u.24284} {bβ bβ : Ξ²} [inst : SemilatticeInf Ξ±] [inst_1 : SemilatticeInf Ξ²] {l : Ξ± β Ξ²} {u : Ξ² β Ξ±}, GaloisConnection l u β u (bβ β bβ) = u bβ β u bβSubmonoid.comap_inf #align add_submonoid.comap_infSubmonoid.comap_inf: β {M : Type u_2} {N : Type u_1} [inst : MulOneClass M] [inst_1 : MulOneClass N] {F : Type u_3} [mc : MonoidHomClass F M N] (S T : Submonoid N) (f : F), comap f (S β T) = comap f S β comap f TAddSubmonoid.comap_inf @[AddSubmonoid.comap_inf: β {M : Type u_2} {N : Type u_1} [inst : AddZeroClass M] [inst_1 : AddZeroClass N] {F : Type u_3} [mc : AddMonoidHomClass F M N] (S T : AddSubmonoid N) (f : F), AddSubmonoid.comap f (S β T) = AddSubmonoid.comap f S β AddSubmonoid.comap f Tto_additive] theoremto_additive: β {M : Type u_3} {N : Type u_2} [inst : AddZeroClass M] [inst_1 : AddZeroClass N] {F : Type u_4} [mc : AddMonoidHomClass F M N] {ΞΉ : Sort u_1} (f : F) (s : ΞΉ β AddSubmonoid N), AddSubmonoid.comap f (iInf s) = β¨ i, AddSubmonoid.comap f (s i)comap_iInf {ΞΉ :ΞΉ: Sort u_1SortSort _: Type ?u.24454_} (Sort _: Type ?u.24454f :f: FF) (F: Type ?u.24439s :s: ΞΉ β Submonoid NΞΉ βΞΉ: Sort ?u.24454SubmonoidSubmonoid: (M : Type ?u.24461) β [inst : MulOneClass M] β Type ?u.24461N) : (iInfN: Type ?u.24415s).s: ΞΉ β Submonoid Ncomapcomap: {M : Type ?u.24495} β {N : Type ?u.24494} β [inst : MulOneClass M] β [inst_1 : MulOneClass N] β {F : Type ?u.24493} β [mc : MonoidHomClass F M N] β F β Submonoid N β Submonoid Mf = β¨f: Fi, (i: ?m.24559ss: ΞΉ β Submonoid Ni).i: ?m.24559comapcomap: {M : Type ?u.24563} β {N : Type ?u.24562} β [inst : MulOneClass M] β [inst_1 : MulOneClass N] β {F : Type ?u.24561} β [mc : MonoidHomClass F M N] β F β Submonoid N β Submonoid Mf := (f: Fgc_map_comapgc_map_comap: β {M : Type ?u.24979} {N : Type ?u.24980} [inst : MulOneClass M] [inst_1 : MulOneClass N] {F : Type ?u.24981} [mc : MonoidHomClass F M N] (f : F), GaloisConnection (map f) (comap f)f : GaloisConnection (f: Fmapmap: {M : Type ?u.24715} β {N : Type ?u.24714} β [inst : MulOneClass M] β [inst_1 : MulOneClass N] β {F : Type ?u.24713} β [mc : MonoidHomClass F M N] β F β Submonoid M β Submonoid Nf) (f: Fcomapcomap: {M : Type ?u.24834} β {N : Type ?u.24833} β [inst : MulOneClass M] β [inst_1 : MulOneClass N] β {F : Type ?u.24832} β [mc : MonoidHomClass F M N] β F β Submonoid N β Submonoid Mf)).f: Fu_iInf #align submonoid.comap_infiu_iInf: β {Ξ± : Type ?u.25045} {Ξ² : Type ?u.25044} {ΞΉ : Sort ?u.25043} [inst : CompleteLattice Ξ±] [inst_1 : CompleteLattice Ξ²] {l : Ξ± β Ξ²} {u : Ξ² β Ξ±}, GaloisConnection l u β β {f : ΞΉ β Ξ²}, u (iInf f) = β¨ i, u (f i)Submonoid.comap_iInf #align add_submonoid.comap_infiSubmonoid.comap_iInf: β {M : Type u_3} {N : Type u_2} [inst : MulOneClass M] [inst_1 : MulOneClass N] {F : Type u_4} [mc : MonoidHomClass F M N] {ΞΉ : Sort u_1} (f : F) (s : ΞΉ β Submonoid N), comap f (iInf s) = β¨ i, comap f (s i)AddSubmonoid.comap_iInf @[AddSubmonoid.comap_iInf: β {M : Type u_3} {N : Type u_2} [inst : AddZeroClass M] [inst_1 : AddZeroClass N] {F : Type u_4} [mc : AddMonoidHomClass F M N] {ΞΉ : Sort u_1} (f : F) (s : ΞΉ β AddSubmonoid N), AddSubmonoid.comap f (iInf s) = β¨ i, AddSubmonoid.comap f (s i)to_additive (attr := simp)] theoremto_additive: β {M : Type u_2} {N : Type u_1} [inst : AddZeroClass M] [inst_1 : AddZeroClass N] {F : Type u_3} [mc : AddMonoidHomClass F M N] (f : F), AddSubmonoid.map f β₯ = β₯map_bot (map_bot: β {M : Type u_2} {N : Type u_1} [inst : MulOneClass M] [inst_1 : MulOneClass N] {F : Type u_3} [mc : MonoidHomClass F M N] (f : F), map f β₯ = β₯f :f: FF) : (F: Type ?u.25213β₯ :β₯: ?m.25240SubmonoidSubmonoid: (M : Type ?u.25232) β [inst : MulOneClass M] β Type ?u.25232M).M: Type ?u.25186mapmap: {M : Type ?u.25281} β {N : Type ?u.25280} β [inst : MulOneClass M] β [inst_1 : MulOneClass N] β {F : Type ?u.25279} β [mc : MonoidHomClass F M N] β F β Submonoid M β Submonoid Nf =f: Fβ₯ := (β₯: ?m.25340gc_map_comapgc_map_comap: β {M : Type ?u.25399} {N : Type ?u.25400} [inst : MulOneClass M] [inst_1 : MulOneClass N] {F : Type ?u.25401} [mc : MonoidHomClass F M N] (f : F), GaloisConnection (map f) (comap f)f).f: Fl_bot #align submonoid.map_botl_bot: β {Ξ± : Type ?u.25463} {Ξ² : Type ?u.25462} [inst : Preorder Ξ±] [inst_1 : PartialOrder Ξ²] [inst_2 : OrderBot Ξ²] [inst_3 : OrderBot Ξ±] {l : Ξ± β Ξ²} {u : Ξ² β Ξ±}, GaloisConnection l u β l β₯ = β₯Submonoid.map_bot #align add_submonoid.map_botSubmonoid.map_bot: β {M : Type u_2} {N : Type u_1} [inst : MulOneClass M] [inst_1 : MulOneClass N] {F : Type u_3} [mc : MonoidHomClass F M N] (f : F), map f β₯ = β₯AddSubmonoid.map_bot @[AddSubmonoid.map_bot: β {M : Type u_2} {N : Type u_1} [inst : AddZeroClass M] [inst_1 : AddZeroClass N] {F : Type u_3} [mc : AddMonoidHomClass F M N] (f : F), AddSubmonoid.map f β₯ = β₯to_additive (attr := simp)] theorem comap_top (to_additive: β {M : Type u_1} {N : Type u_2} [inst : AddZeroClass M] [inst_1 : AddZeroClass N] {F : Type u_3} [mc : AddMonoidHomClass F M N] (f : F), AddSubmonoid.comap f β€ = β€f :f: FF) : (F: Type ?u.25773β€ :β€: ?m.25800SubmonoidSubmonoid: (M : Type ?u.25792) β [inst : MulOneClass M] β Type ?u.25792N).N: Type ?u.25749comapcomap: {M : Type ?u.25840} β {N : Type ?u.25839} β [inst : MulOneClass M] β [inst_1 : MulOneClass N] β {F : Type ?u.25838} β [mc : MonoidHomClass F M N] β F β Submonoid N β Submonoid Mf =f: Fβ€ := (β€: ?m.25899gc_map_comapgc_map_comap: β {M : Type ?u.25956} {N : Type ?u.25957} [inst : MulOneClass M] [inst_1 : MulOneClass N] {F : Type ?u.25958} [mc : MonoidHomClass F M N] (f : F), GaloisConnection (map f) (comap f)f).f: Fu_top #align submonoid.comap_topu_top: β {Ξ± : Type ?u.26020} {Ξ² : Type ?u.26019} [inst : PartialOrder Ξ±] [inst_1 : Preorder Ξ²] [inst_2 : OrderTop Ξ±] [inst_3 : OrderTop Ξ²] {l : Ξ± β Ξ²} {u : Ξ² β Ξ±}, GaloisConnection l u β u β€ = β€Submonoid.comap_top #align add_submonoid.comap_topSubmonoid.comap_top: β {M : Type u_1} {N : Type u_2} [inst : MulOneClass M] [inst_1 : MulOneClass N] {F : Type u_3} [mc : MonoidHomClass F M N] (f : F), comap f β€ = β€AddSubmonoid.comap_top @[AddSubmonoid.comap_top: β {M : Type u_1} {N : Type u_2} [inst : AddZeroClass M] [inst_1 : AddZeroClass N] {F : Type u_3} [mc : AddMonoidHomClass F M N] (f : F), AddSubmonoid.comap f β€ = β€to_additive (attr := simp)] theoremto_additive: β {M : Type u_1} [inst : AddZeroClass M] (S : AddSubmonoid M), AddSubmonoid.map (AddMonoidHom.id M) S = Smap_id (map_id: β {M : Type u_1} [inst : MulOneClass M] (S : Submonoid M), map (MonoidHom.id M) S = SS :S: Submonoid MSubmonoidSubmonoid: (M : Type ?u.26345) β [inst : MulOneClass M] β Type ?u.26345M) :M: Type ?u.26303S.S: Submonoid Mmap (map: {M : Type ?u.26357} β {N : Type ?u.26356} β [inst : MulOneClass M] β [inst_1 : MulOneClass N] β {F : Type ?u.26355} β [mc : MonoidHomClass F M N] β F β Submonoid M β Submonoid NMonoidHom.idMonoidHom.id: (M : Type ?u.26372) β [inst : MulOneClass M] β M β* MM) =M: Type ?u.26303S := ext funS: Submonoid M_ => β¨fun β¨_: ?m.26456_,_: ?m.26456h, rflβ© =>h: xβΒΉ β βSh, funh: xβΒΉ β βSh => β¨h: ?m.26771_,_: ?m.26778h, rflβ©β© #align submonoid.map_idh: ?m.26771Submonoid.map_id #align add_submonoid.map_idSubmonoid.map_id: β {M : Type u_1} [inst : MulOneClass M] (S : Submonoid M), map (MonoidHom.id M) S = SAddSubmonoid.map_id section GaloisCoinsertion variable {AddSubmonoid.map_id: β {M : Type u_1} [inst : AddZeroClass M] (S : AddSubmonoid M), AddSubmonoid.map (AddMonoidHom.id M) S = SΞΉ :ΞΉ: Type ?u.29867Type _} {Type _: Type (?u.27001+1)f :f: FF} (F: Type ?u.30432hf : Function.Injectivehf: Function.Injective βff) /-- `map f` and `comap f` form a `GaloisCoinsertion` when `f` is injective. -/ @[f: Fto_additive " `map f` and `comap f` form a `GaloisCoinsertion` when `f` is injective. "] defto_additive: {M : Type u_1} β {N : Type u_2} β [inst : AddZeroClass M] β [inst_1 : AddZeroClass N] β {F : Type u_3} β [mc : AddMonoidHomClass F M N] β {f : F} β Function.Injective βf β GaloisCoinsertion (AddSubmonoid.map f) (AddSubmonoid.comap f)gciMapComap : GaloisCoinsertion (gciMapComap: GaloisCoinsertion (map f) (comap f)mapmap: {M : Type ?u.27473} β {N : Type ?u.27472} β [inst : MulOneClass M] β [inst_1 : MulOneClass N] β {F : Type ?u.27471} β [mc : MonoidHomClass F M N] β F β Submonoid M β Submonoid Nf) (f: Fcomapcomap: {M : Type ?u.27592} β {N : Type ?u.27591} β [inst : MulOneClass M] β [inst_1 : MulOneClass N] β {F : Type ?u.27590} β [mc : MonoidHomClass F M N] β F β Submonoid N β Submonoid Mf) := (f: Fgc_map_comapgc_map_comap: β {M : Type ?u.27738} {N : Type ?u.27739} [inst : MulOneClass M] [inst_1 : MulOneClass N] {F : Type ?u.27740} [mc : MonoidHomClass F M N] (f : F), GaloisConnection (map f) (comap f)f).f: FtoGaloisCoinsertion funtoGaloisCoinsertion: {Ξ± : Type ?u.27795} β {Ξ² : Type ?u.27794} β [inst : Preorder Ξ±] β [inst_1 : Preorder Ξ²] β {l : Ξ± β Ξ²} β {u : Ξ² β Ξ±} β GaloisConnection l u β (β (a : Ξ±), u (l a) β€ a) β GaloisCoinsertion l uSS: ?m.27830x =>x: ?m.27833Goals accomplished! πM: Type ?u.27197
N: Type ?u.27200
P: Type ?u.27203
instβΒ²: MulOneClass M
instβΒΉ: MulOneClass N
instβ: MulOneClass P
Sβ: Submonoid M
F: Type ?u.27224
mc: MonoidHomClass F M N
ΞΉ: Type ?u.27239
f: F
hf: Function.Injective βf
S: Submonoid M
x: M#align submonoid.gci_map_comapGoals accomplished! πSubmonoid.gciMapComap #align add_submonoid.gci_map_comapSubmonoid.gciMapComap: {M : Type u_1} β {N : Type u_2} β [inst : MulOneClass M] β [inst_1 : MulOneClass N] β {F : Type u_3} β [mc : MonoidHomClass F M N] β {f : F} β Function.Injective βf β GaloisCoinsertion (map f) (comap f)AddSubmonoid.gciMapComap @[AddSubmonoid.gciMapComap: {M : Type u_1} β {N : Type u_2} β [inst : AddZeroClass M] β [inst_1 : AddZeroClass N] β {F : Type u_3} β [mc : AddMonoidHomClass F M N] β {f : F} β Function.Injective βf β GaloisCoinsertion (AddSubmonoid.map f) (AddSubmonoid.comap f)to_additive] theorem comap_map_eq_of_injective (to_additive: β {M : Type u_1} {N : Type u_2} [inst : AddZeroClass M] [inst_1 : AddZeroClass N] {F : Type u_3} [mc : AddMonoidHomClass F M N] {f : F}, Function.Injective βf β β (S : AddSubmonoid M), AddSubmonoid.comap f (AddSubmonoid.map f S) = SS :S: Submonoid MSubmonoidSubmonoid: (M : Type ?u.29462) β [inst : MulOneClass M] β Type ?u.29462M) : (M: Type ?u.29224S.S: Submonoid Mmapmap: {M : Type ?u.29474} β {N : Type ?u.29473} β [inst : MulOneClass M] β [inst_1 : MulOneClass N] β {F : Type ?u.29472} β [mc : MonoidHomClass F M N] β F β Submonoid M β Submonoid Nf).f: Fcomapcomap: {M : Type ?u.29532} β {N : Type ?u.29531} β [inst : MulOneClass M] β [inst_1 : MulOneClass N] β {F : Type ?u.29530} β [mc : MonoidHomClass F M N] β F β Submonoid N β Submonoid Mf =f: FS := (S: Submonoid MgciMapComapgciMapComap: {M : Type ?u.29591} β {N : Type ?u.29590} β [inst : MulOneClass M] β [inst_1 : MulOneClass N] β {F : Type ?u.29589} β [mc : MonoidHomClass F M N] β {f : F} β Function.Injective βf β GaloisCoinsertion (map f) (comap f)hf).hf: Function.Injective βfu_l_equ_l_eq: β {Ξ± : Type ?u.29657} {Ξ² : Type ?u.29656} {l : Ξ± β Ξ²} {u : Ξ² β Ξ±} [inst : PartialOrder Ξ±] [inst_1 : Preorder Ξ²], GaloisCoinsertion l u β β (a : Ξ±), u (l a) = a_ #align submonoid.comap_map_eq_of_injective_: ?m.29666Submonoid.comap_map_eq_of_injective #align add_submonoid.comap_map_eq_of_injectiveSubmonoid.comap_map_eq_of_injective: β {M : Type u_1} {N : Type u_2} [inst : MulOneClass M] [inst_1 : MulOneClass N] {F : Type u_3} [mc : MonoidHomClass F M N] {f : F}, Function.Injective βf β β (S : Submonoid M), comap f (map f S) = SAddSubmonoid.comap_map_eq_of_injective: β {M : Type u_1} {N : Type u_2} [inst : AddZeroClass M] [inst_1 : AddZeroClass N] {F : Type u_3} [mc : AddMonoidHomClass F M N] {f : F}, Function.Injective βf β β (S : AddSubmonoid M), AddSubmonoid.comap f (