Built with doc-gen4, running Lean4. Bubbles () indicate interactive fragments: hover for details, tap to reveal contents. Use Ctrl+↑Ctrl+↓to navigate, Ctrl+πŸ–±οΈto focus. On Mac, use Cmdinstead of Ctrl.
/-
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 {
M: Type ?u.86057
M
N: Type ?u.33229
N
P: Type ?u.48758
P
:
Type _: Type (?u.48755+1)
Type _
} [
MulOneClass: Type ?u.34652 β†’ Type ?u.34652
MulOneClass
M: Type ?u.29
M
] [
MulOneClass: Type ?u.123590 β†’ Type ?u.123590
MulOneClass
N: Type ?u.5
N
] [
MulOneClass: Type ?u.15878 β†’ Type ?u.15878
MulOneClass
P: Type ?u.35
P
] (S :
Submonoid: (M : Type ?u.181499) β†’ [inst : MulOneClass M] β†’ Type ?u.181499
Submonoid
M: Type ?u.2
M
) /-! ### Conversion to/from `Additive`/`Multiplicative` -/ section /-- Submonoids of monoid `M` are isomorphic to additive submonoids of `Additive M`. -/ @[
simps: βˆ€ {M : Type u_1} [inst : MulOneClass M] (S : Submonoid M), ↑(↑toAddSubmonoid S) = ↑Additive.toMul ⁻¹' ↑S
simps
] def
Submonoid.toAddSubmonoid: {M : Type u_1} β†’ [inst : MulOneClass M] β†’ Submonoid M ≃o AddSubmonoid (Additive M)
Submonoid.toAddSubmonoid
:
Submonoid: (M : Type ?u.58) β†’ [inst : MulOneClass M] β†’ Type ?u.58
Submonoid
M: Type ?u.29
M
≃o
AddSubmonoid: (M : Type ?u.65) β†’ [inst : AddZeroClass M] β†’ Type ?u.65
AddSubmonoid
(
Additive: Type ?u.66 β†’ Type ?u.66
Additive
M: Type ?u.29
M
) where toFun
S: ?m.183
S
:= { carrier :=
Additive.toMul: {Ξ± : Type ?u.281} β†’ Additive Ξ± ≃ Ξ±
Additive.toMul
⁻¹'
S: ?m.183
S
zero_mem' :=
S: ?m.183
S
.
one_mem': βˆ€ {M : Type ?u.552} [inst : MulOneClass M] (self : Submonoid M), 1 ∈ self.carrier
one_mem'
add_mem' := fun
ha: ?m.452
ha
hb: ?m.455
hb
=>
S: ?m.183
S
.
mul_mem': βˆ€ {M : Type ?u.462} [inst : Mul M] (self : Subsemigroup M) {a b : M}, a ∈ self.carrier β†’ b ∈ self.carrier β†’ a * b ∈ self.carrier
mul_mem'
ha: ?m.452
ha
hb: ?m.455
hb
} invFun
S: ?m.560
S
:= { carrier :=
Additive.ofMul: {Ξ± : Type ?u.573} β†’ Ξ± ≃ Additive Ξ±
Additive.ofMul
⁻¹'
S: ?m.560
S
one_mem' :=
S: ?m.560
S
.
zero_mem': βˆ€ {M : Type ?u.756} [inst : AddZeroClass M] (self : AddSubmonoid M), 0 ∈ self.carrier
zero_mem'
mul_mem' := fun
ha: ?m.719
ha
hb: ?m.722
hb
=>
S: ?m.560
S
.
add_mem': βˆ€ {M : Type ?u.727} [inst : Add M] (self : AddSubsemigroup M) {a b : M}, a ∈ self.carrier β†’ b ∈ self.carrier β†’ a + b ∈ self.carrier
add_mem'
ha: ?m.719
ha
hb: ?m.722
hb
} left_inv
x: ?m.764
x
:=

Goals 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) = x
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: 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) = x

Goals accomplished! πŸ™
right_inv
x: ?m.770
x
:=

Goals 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) = x
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

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) = x

Goals accomplished! πŸ™
map_rel_iff' :=
Iff.rfl: βˆ€ {a : Prop}, a ↔ a
Iff.rfl
#align submonoid.to_add_submonoid
Submonoid.toAddSubmonoid: {M : Type u_1} β†’ [inst : MulOneClass M] β†’ Submonoid M ≃o AddSubmonoid (Additive M)
Submonoid.toAddSubmonoid
#align submonoid.to_add_submonoid_symm_apply_coe
Submonoid.toAddSubmonoid_symm_apply_coe: βˆ€ {M : Type u_1} [inst : MulOneClass M] (S : AddSubmonoid (Additive M)), ↑(↑(RelIso.symm Submonoid.toAddSubmonoid) S) = ↑Additive.ofMul ⁻¹' ↑S
Submonoid.toAddSubmonoid_symm_apply_coe
#align submonoid.to_add_submonoid_apply_coe
Submonoid.toAddSubmonoid_apply_coe: βˆ€ {M : Type u_1} [inst : MulOneClass M] (S : Submonoid M), ↑(↑Submonoid.toAddSubmonoid S) = ↑Additive.toMul ⁻¹' ↑S
Submonoid.toAddSubmonoid_apply_coe
/-- Additive submonoids of an additive monoid `Additive M` are isomorphic to submonoids of `M`. -/ abbrev
AddSubmonoid.toSubmonoid': {M : Type u_1} β†’ [inst : MulOneClass M] β†’ AddSubmonoid (Additive M) ≃o Submonoid M
AddSubmonoid.toSubmonoid'
:
AddSubmonoid: (M : Type ?u.1222) β†’ [inst : AddZeroClass M] β†’ Type ?u.1222
AddSubmonoid
(
Additive: Type ?u.1223 β†’ Type ?u.1223
Additive
M: Type ?u.1193
M
) ≃o
Submonoid: (M : Type ?u.1238) β†’ [inst : MulOneClass M] β†’ Type ?u.1238
Submonoid
M: Type ?u.1193
M
:=
Submonoid.toAddSubmonoid: {M : Type ?u.1318} β†’ [inst : MulOneClass M] β†’ Submonoid M ≃o AddSubmonoid (Additive M)
Submonoid.toAddSubmonoid
.
symm: {Ξ± : Type ?u.1334} β†’ {Ξ² : Type ?u.1333} β†’ [inst : LE Ξ±] β†’ [inst_1 : LE Ξ²] β†’ Ξ± ≃o Ξ² β†’ Ξ² ≃o Ξ±
symm
#align add_submonoid.to_submonoid'
AddSubmonoid.toSubmonoid': {M : Type u_1} β†’ [inst : MulOneClass M] β†’ AddSubmonoid (Additive M) ≃o Submonoid M
AddSubmonoid.toSubmonoid'
theorem
Submonoid.toAddSubmonoid_closure: βˆ€ (S : Set M), ↑toAddSubmonoid (closure S) = AddSubmonoid.closure (↑Additive.toMul ⁻¹' S)
Submonoid.toAddSubmonoid_closure
(
S: Set M
S
:
Set: Type ?u.1532 β†’ Type ?u.1532
Set
M: Type ?u.1505
M
) :
Submonoid.toAddSubmonoid: {M : Type ?u.1536} β†’ [inst : MulOneClass M] β†’ Submonoid M ≃o AddSubmonoid (Additive M)
Submonoid.toAddSubmonoid
(
Submonoid.closure: {M : Type ?u.1611} β†’ [inst : MulOneClass M] β†’ Set M β†’ Submonoid M
Submonoid.closure
S: Set M
S
) =
AddSubmonoid.closure: {M : Type ?u.1639} β†’ [inst : AddZeroClass M] β†’ Set M β†’ AddSubmonoid M
AddSubmonoid.closure
(
Additive.toMul: {Ξ± : Type ?u.1648} β†’ Additive Ξ± ≃ Ξ±
Additive.toMul
⁻¹'
S: Set M
S
) :=
le_antisymm: βˆ€ {Ξ± : Type ?u.1747} [inst : PartialOrder Ξ±] {a b : Ξ±}, a ≀ b β†’ b ≀ a β†’ a = b
le_antisymm
(
Submonoid.toAddSubmonoid: {M : Type ?u.1780} β†’ [inst : MulOneClass M] β†’ Submonoid M ≃o AddSubmonoid (Additive M)
Submonoid.toAddSubmonoid
.
le_symm_apply: βˆ€ {Ξ± : Type ?u.1795} {Ξ² : Type ?u.1796} [inst : LE Ξ±] [inst_1 : LE Ξ²] (e : Ξ± ≃o Ξ²) {x : Ξ±} {y : Ξ²}, x ≀ ↑(OrderIso.symm e) y ↔ ↑e x ≀ y
le_symm_apply
.
1: βˆ€ {a b : Prop}, (a ↔ b) β†’ a β†’ b
1
<|
Submonoid.closure_le: βˆ€ {M : Type ?u.1967} [inst : MulOneClass M] {s : Set M} {S : Submonoid M}, closure s ≀ S ↔ s βŠ† ↑S
Submonoid.closure_le
.
2: βˆ€ {a b : Prop}, (a ↔ b) β†’ b β†’ a
2
(
AddSubmonoid.subset_closure: βˆ€ {M : Type ?u.1999} [inst : AddZeroClass M] {s : Set M}, s βŠ† ↑(AddSubmonoid.closure s)
AddSubmonoid.subset_closure
(M :=
Additive: Type ?u.2000 β†’ Type ?u.2000
Additive
M: Type ?u.1505
M
))) (
AddSubmonoid.closure_le: βˆ€ {M : Type ?u.2058} [inst : AddZeroClass M] {s : Set M} {S : AddSubmonoid M}, AddSubmonoid.closure s ≀ S ↔ s βŠ† ↑S
AddSubmonoid.closure_le
.
2: βˆ€ {a b : Prop}, (a ↔ b) β†’ b β†’ a
2
<|
Submonoid.subset_closure: βˆ€ {M : Type ?u.2090} [inst : MulOneClass M] {s : Set M}, s βŠ† ↑(closure s)
Submonoid.subset_closure
(M :=
M: Type ?u.1505
M
)) #align submonoid.to_add_submonoid_closure
Submonoid.toAddSubmonoid_closure: βˆ€ {M : Type u_1} [inst : MulOneClass M] (S : Set M), ↑Submonoid.toAddSubmonoid (Submonoid.closure S) = AddSubmonoid.closure (↑Additive.toMul ⁻¹' S)
Submonoid.toAddSubmonoid_closure
theorem
AddSubmonoid.toSubmonoid'_closure: βˆ€ {M : Type u_1} [inst : MulOneClass M] (S : Set (Additive M)), ↑toSubmonoid' (closure S) = Submonoid.closure (↑Multiplicative.ofAdd ⁻¹' S)
AddSubmonoid.toSubmonoid'_closure
(
S: Set (Additive M)
S
:
Set: Type ?u.2156 β†’ Type ?u.2156
Set
(
Additive: Type ?u.2157 β†’ Type ?u.2157
Additive
M: Type ?u.2129
M
)) :
AddSubmonoid.toSubmonoid': {M : Type ?u.2161} β†’ [inst : MulOneClass M] β†’ AddSubmonoid (Additive M) ≃o Submonoid M
AddSubmonoid.toSubmonoid'
(
AddSubmonoid.closure: {M : Type ?u.2236} β†’ [inst : AddZeroClass M] β†’ Set M β†’ AddSubmonoid M
AddSubmonoid.closure
S: Set (Additive M)
S
) =
Submonoid.closure: {M : Type ?u.2278} β†’ [inst : MulOneClass M] β†’ Set M β†’ Submonoid M
Submonoid.closure
(
Multiplicative.ofAdd: {Ξ± : Type ?u.2287} β†’ Ξ± ≃ Multiplicative Ξ±
Multiplicative.ofAdd
⁻¹'
S: Set (Additive M)
S
) :=
le_antisymm: βˆ€ {Ξ± : Type ?u.2375} [inst : PartialOrder Ξ±] {a b : Ξ±}, a ≀ b β†’ b ≀ a β†’ a = b
le_antisymm
(
AddSubmonoid.toSubmonoid': {M : Type ?u.2408} β†’ [inst : MulOneClass M] β†’ AddSubmonoid (Additive M) ≃o Submonoid M
AddSubmonoid.toSubmonoid'
.
le_symm_apply: βˆ€ {Ξ± : Type ?u.2423} {Ξ² : Type ?u.2424} [inst : LE Ξ±] [inst_1 : LE Ξ²] (e : Ξ± ≃o Ξ²) {x : Ξ±} {y : Ξ²}, x ≀ ↑(OrderIso.symm e) y ↔ ↑e x ≀ y
le_symm_apply
.
1: βˆ€ {a b : Prop}, (a ↔ b) β†’ a β†’ b
1
<|
AddSubmonoid.closure_le: βˆ€ {M : Type ?u.2594} [inst : AddZeroClass M] {s : Set M} {S : AddSubmonoid M}, closure s ≀ S ↔ s βŠ† ↑S
AddSubmonoid.closure_le
.
2: βˆ€ {a b : Prop}, (a ↔ b) β†’ b β†’ a
2
(
Submonoid.subset_closure: βˆ€ {M : Type ?u.2628} [inst : MulOneClass M] {s : Set M}, s βŠ† ↑(Submonoid.closure s)
Submonoid.subset_closure
(M :=
M: Type ?u.2129
M
))) (
Submonoid.closure_le: βˆ€ {M : Type ?u.2680} [inst : MulOneClass M] {s : Set M} {S : Submonoid M}, Submonoid.closure s ≀ S ↔ s βŠ† ↑S
Submonoid.closure_le
.
2: βˆ€ {a b : Prop}, (a ↔ b) β†’ b β†’ a
2
<|
AddSubmonoid.subset_closure: βˆ€ {M : Type ?u.2711} [inst : AddZeroClass M] {s : Set M}, s βŠ† ↑(closure s)
AddSubmonoid.subset_closure
(M :=
Additive: Type ?u.2712 β†’ Type ?u.2712
Additive
M: Type ?u.2129
M
)) #align add_submonoid.to_submonoid'_closure
AddSubmonoid.toSubmonoid'_closure: βˆ€ {M : Type u_1} [inst : MulOneClass M] (S : Set (Additive M)), ↑AddSubmonoid.toSubmonoid' (AddSubmonoid.closure S) = Submonoid.closure (↑Multiplicative.ofAdd ⁻¹' S)
AddSubmonoid.toSubmonoid'_closure
end section variable {
A: Type ?u.2784
A
:
Type _: Type (?u.2784+1)
Type _
} [
AddZeroClass: Type ?u.4122 β†’ Type ?u.4122
AddZeroClass
A: Type ?u.2784
A
] /-- Additive submonoids of an additive monoid `A` are isomorphic to multiplicative submonoids of `Multiplicative A`. -/ @[
simps: βˆ€ {A : Type u_1} [inst : AddZeroClass A] (S : Submonoid (Multiplicative A)), ↑(↑(RelIso.symm toSubmonoid) S) = ↑Multiplicative.ofAdd ⁻¹' ↑S
simps
] def
AddSubmonoid.toSubmonoid: {A : Type u_1} β†’ [inst : AddZeroClass A] β†’ AddSubmonoid A ≃o Submonoid (Multiplicative A)
AddSubmonoid.toSubmonoid
:
AddSubmonoid: (M : Type ?u.2825) β†’ [inst : AddZeroClass M] β†’ Type ?u.2825
AddSubmonoid
A: Type ?u.2817
A
≃o
Submonoid: (M : Type ?u.2831) β†’ [inst : MulOneClass M] β†’ Type ?u.2831
Submonoid
(
Multiplicative: Type ?u.2832 β†’ Type ?u.2832
Multiplicative
A: Type ?u.2817
A
) where toFun
S: ?m.2949
S
:= { carrier :=
Multiplicative.toAdd: {Ξ± : Type ?u.2989} β†’ Multiplicative Ξ± ≃ Ξ±
Multiplicative.toAdd
⁻¹'
S: ?m.2949
S
one_mem' :=
S: ?m.2949
S
.
zero_mem': βˆ€ {M : Type ?u.3217} [inst : AddZeroClass M] (self : AddSubmonoid M), 0 ∈ self.carrier
zero_mem'
mul_mem' := fun
ha: ?m.3160
ha
hb: ?m.3163
hb
=>
S: ?m.2949
S
.
add_mem': βˆ€ {M : Type ?u.3170} [inst : Add M] (self : AddSubsemigroup M) {a b : M}, a ∈ self.carrier β†’ b ∈ self.carrier β†’ a + b ∈ self.carrier
add_mem'
ha: ?m.3160
ha
hb: ?m.3163
hb
} invFun
S: ?m.3225
S
:= { carrier :=
Multiplicative.ofAdd: {Ξ± : Type ?u.3238} β†’ Ξ± ≃ Multiplicative Ξ±
Multiplicative.ofAdd
⁻¹'
S: ?m.3225
S
zero_mem' :=
S: ?m.3225
S
.
one_mem': βˆ€ {M : Type ?u.3421} [inst : MulOneClass M] (self : Submonoid M), 1 ∈ self.carrier
one_mem'
add_mem' := fun
ha: ?m.3384
ha
hb: ?m.3387
hb
=>
S: ?m.3225
S
.
mul_mem': βˆ€ {M : Type ?u.3392} [inst : Mul M] (self : Subsemigroup M) {a b : M}, a ∈ self.carrier β†’ b ∈ self.carrier β†’ a * b ∈ self.carrier
mul_mem'
ha: ?m.3384
ha
hb: ?m.3387
hb
} left_inv
x: ?m.3429
x
:=

Goals 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) = x
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

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) = x

Goals accomplished! πŸ™
right_inv
x: ?m.3435
x
:=

Goals 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) = x
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

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) = x

Goals accomplished! πŸ™
map_rel_iff' :=
Iff.rfl: βˆ€ {a : Prop}, a ↔ a
Iff.rfl
#align add_submonoid.to_submonoid
AddSubmonoid.toSubmonoid: {A : Type u_1} β†’ [inst : AddZeroClass A] β†’ AddSubmonoid A ≃o Submonoid (Multiplicative A)
AddSubmonoid.toSubmonoid
#align add_submonoid.to_submonoid_symm_apply_coe
AddSubmonoid.toSubmonoid_symm_apply_coe: βˆ€ {A : Type u_1} [inst : AddZeroClass A] (S : Submonoid (Multiplicative A)), ↑(↑(RelIso.symm AddSubmonoid.toSubmonoid) S) = ↑Multiplicative.ofAdd ⁻¹' ↑S
AddSubmonoid.toSubmonoid_symm_apply_coe
#align add_submonoid.to_submonoid_apply_coe
AddSubmonoid.toSubmonoid_apply_coe: βˆ€ {A : Type u_1} [inst : AddZeroClass A] (S : AddSubmonoid A), ↑(↑AddSubmonoid.toSubmonoid S) = ↑Multiplicative.toAdd ⁻¹' ↑S
AddSubmonoid.toSubmonoid_apply_coe
/-- Submonoids of a monoid `Multiplicative A` are isomorphic to additive submonoids of `A`. -/ abbrev
Submonoid.toAddSubmonoid': Submonoid (Multiplicative A) ≃o AddSubmonoid A
Submonoid.toAddSubmonoid'
:
Submonoid: (M : Type ?u.3839) β†’ [inst : MulOneClass M] β†’ Type ?u.3839
Submonoid
(
Multiplicative: Type ?u.3840 β†’ Type ?u.3840
Multiplicative
A: Type ?u.3831
A
) ≃o
AddSubmonoid: (M : Type ?u.3855) β†’ [inst : AddZeroClass M] β†’ Type ?u.3855
AddSubmonoid
A: Type ?u.3831
A
:=
AddSubmonoid.toSubmonoid: {A : Type ?u.3934} β†’ [inst : AddZeroClass A] β†’ AddSubmonoid A ≃o Submonoid (Multiplicative A)
AddSubmonoid.toSubmonoid
.
symm: {Ξ± : Type ?u.3949} β†’ {Ξ² : Type ?u.3948} β†’ [inst : LE Ξ±] β†’ [inst_1 : LE Ξ²] β†’ Ξ± ≃o Ξ² β†’ Ξ² ≃o Ξ±
symm
#align submonoid.to_add_submonoid'
Submonoid.toAddSubmonoid': {A : Type u_1} β†’ [inst : AddZeroClass A] β†’ Submonoid (Multiplicative A) ≃o AddSubmonoid A
Submonoid.toAddSubmonoid'
theorem
AddSubmonoid.toSubmonoid_closure: βˆ€ (S : Set A), ↑toSubmonoid (closure S) = Submonoid.closure (↑Multiplicative.toAdd ⁻¹' S)
AddSubmonoid.toSubmonoid_closure
(
S: Set A
S
:
Set: Type ?u.4125 β†’ Type ?u.4125
Set
A: Type ?u.4119
A
) : (
AddSubmonoid.toSubmonoid: {A : Type ?u.4129} β†’ [inst : AddZeroClass A] β†’ AddSubmonoid A ≃o Submonoid (Multiplicative A)
AddSubmonoid.toSubmonoid
) (
AddSubmonoid.closure: {M : Type ?u.4213} β†’ [inst : AddZeroClass M] β†’ Set M β†’ AddSubmonoid M
AddSubmonoid.closure
S: Set A
S
) =
Submonoid.closure: {M : Type ?u.4239} β†’ [inst : MulOneClass M] β†’ Set M β†’ Submonoid M
Submonoid.closure
(
Multiplicative.toAdd: {Ξ± : Type ?u.4248} β†’ Multiplicative Ξ± ≃ Ξ±
Multiplicative.toAdd
⁻¹'
S: Set A
S
) :=
le_antisymm: βˆ€ {Ξ± : Type ?u.4347} [inst : PartialOrder Ξ±] {a b : Ξ±}, a ≀ b β†’ b ≀ a β†’ a = b
le_antisymm
(
AddSubmonoid.toSubmonoid: {A : Type ?u.4380} β†’ [inst : AddZeroClass A] β†’ AddSubmonoid A ≃o Submonoid (Multiplicative A)
AddSubmonoid.toSubmonoid
.
to_galoisConnection: βˆ€ {Ξ± : Type ?u.4395} {Ξ² : Type ?u.4394} [inst : Preorder Ξ±] [inst_1 : Preorder Ξ²] (oi : Ξ± ≃o Ξ²), GaloisConnection ↑oi ↑(OrderIso.symm oi)
to_galoisConnection
.
l_le: βˆ€ {Ξ± : Type ?u.4480} {Ξ² : Type ?u.4479} [inst : Preorder Ξ±] [inst_1 : Preorder Ξ²] {l : Ξ± β†’ Ξ²} {u : Ξ² β†’ Ξ±}, GaloisConnection l u β†’ βˆ€ {a : Ξ±} {b : Ξ²}, a ≀ u b β†’ l a ≀ b
l_le
<|
AddSubmonoid.closure_le: βˆ€ {M : Type ?u.4586} [inst : AddZeroClass M] {s : Set M} {S : AddSubmonoid M}, closure s ≀ S ↔ s βŠ† ↑S
AddSubmonoid.closure_le
.
2: βˆ€ {a b : Prop}, (a ↔ b) β†’ b β†’ a
2
<|
Submonoid.subset_closure: βˆ€ {M : Type ?u.4619} [inst : MulOneClass M] {s : Set M}, s βŠ† ↑(Submonoid.closure s)
Submonoid.subset_closure
(M :=
Multiplicative: Type ?u.4620 β†’ Type ?u.4620
Multiplicative
A: Type ?u.4119
A
)) (
Submonoid.closure_le: βˆ€ {M : Type ?u.4678} [inst : MulOneClass M] {s : Set M} {S : Submonoid M}, Submonoid.closure s ≀ S ↔ s βŠ† ↑S
Submonoid.closure_le
.
2: βˆ€ {a b : Prop}, (a ↔ b) β†’ b β†’ a
2
<|
AddSubmonoid.subset_closure: βˆ€ {M : Type ?u.4709} [inst : AddZeroClass M] {s : Set M}, s βŠ† ↑(closure s)
AddSubmonoid.subset_closure
(M :=
A: Type ?u.4119
A
)) #align add_submonoid.to_submonoid_closure
AddSubmonoid.toSubmonoid_closure: βˆ€ {A : Type u_1} [inst : AddZeroClass A] (S : Set A), ↑AddSubmonoid.toSubmonoid (AddSubmonoid.closure S) = Submonoid.closure (↑Multiplicative.toAdd ⁻¹' S)
AddSubmonoid.toSubmonoid_closure
theorem
Submonoid.toAddSubmonoid'_closure: βˆ€ {A : Type u_1} [inst : AddZeroClass A] (S : Set (Multiplicative A)), ↑toAddSubmonoid' (closure S) = AddSubmonoid.closure (↑Additive.ofMul ⁻¹' S)
Submonoid.toAddSubmonoid'_closure
(S :
Set: Type ?u.4780 β†’ Type ?u.4780
Set
(
Multiplicative: Type ?u.4781 β†’ Type ?u.4781
Multiplicative
A: Type ?u.4774
A
)) :
Submonoid.toAddSubmonoid': {A : Type ?u.4785} β†’ [inst : AddZeroClass A] β†’ Submonoid (Multiplicative A) ≃o AddSubmonoid A
Submonoid.toAddSubmonoid'
(
Submonoid.closure: {M : Type ?u.4859} β†’ [inst : MulOneClass M] β†’ Set M β†’ Submonoid M
Submonoid.closure
S) =
AddSubmonoid.closure: {M : Type ?u.4899} β†’ [inst : AddZeroClass M] β†’ Set M β†’ AddSubmonoid M
AddSubmonoid.closure
(
Additive.ofMul: {Ξ± : Type ?u.4908} β†’ Ξ± ≃ Additive Ξ±
Additive.ofMul
⁻¹' S) :=
le_antisymm: βˆ€ {Ξ± : Type ?u.4996} [inst : PartialOrder Ξ±] {a b : Ξ±}, a ≀ b β†’ b ≀ a β†’ a = b
le_antisymm
(
Submonoid.toAddSubmonoid': {A : Type ?u.5029} β†’ [inst : AddZeroClass A] β†’ Submonoid (Multiplicative A) ≃o AddSubmonoid A
Submonoid.toAddSubmonoid'
.
to_galoisConnection: βˆ€ {Ξ± : Type ?u.5044} {Ξ² : Type ?u.5043} [inst : Preorder Ξ±] [inst_1 : Preorder Ξ²] (oi : Ξ± ≃o Ξ²), GaloisConnection ↑oi ↑(OrderIso.symm oi)
to_galoisConnection
.
l_le: βˆ€ {Ξ± : Type ?u.5129} {Ξ² : Type ?u.5128} [inst : Preorder Ξ±] [inst_1 : Preorder Ξ²] {l : Ξ± β†’ Ξ²} {u : Ξ² β†’ Ξ±}, GaloisConnection l u β†’ βˆ€ {a : Ξ±} {b : Ξ²}, a ≀ u b β†’ l a ≀ b
l_le
<|
Submonoid.closure_le: βˆ€ {M : Type ?u.5234} [inst : MulOneClass M] {s : Set M} {S : Submonoid M}, closure s ≀ S ↔ s βŠ† ↑S
Submonoid.closure_le
.
2: βˆ€ {a b : Prop}, (a ↔ b) β†’ b β†’ a
2
<|
AddSubmonoid.subset_closure: βˆ€ {M : Type ?u.5269} [inst : AddZeroClass M] {s : Set M}, s βŠ† ↑(AddSubmonoid.closure s)
AddSubmonoid.subset_closure
(M :=
A: Type ?u.4774
A
)) (
AddSubmonoid.closure_le: βˆ€ {M : Type ?u.5320} [inst : AddZeroClass M] {s : Set M} {S : AddSubmonoid M}, AddSubmonoid.closure s ≀ S ↔ s βŠ† ↑S
AddSubmonoid.closure_le
.
2: βˆ€ {a b : Prop}, (a ↔ b) β†’ b β†’ a
2
<|
Submonoid.subset_closure: βˆ€ {M : Type ?u.5350} [inst : MulOneClass M] {s : Set M}, s βŠ† ↑(closure s)
Submonoid.subset_closure
(M :=
Multiplicative: Type ?u.5351 β†’ Type ?u.5351
Multiplicative
A: Type ?u.4774
A
)) #align submonoid.to_add_submonoid'_closure
Submonoid.toAddSubmonoid'_closure: βˆ€ {A : Type u_1} [inst : AddZeroClass A] (S : Set (Multiplicative A)), ↑Submonoid.toAddSubmonoid' (Submonoid.closure S) = AddSubmonoid.closure (↑Additive.ofMul ⁻¹' S)
Submonoid.toAddSubmonoid'_closure
end namespace Submonoid variable {
F: Type ?u.5465
F
:
Type _: Type (?u.23621+1)
Type _
} [
mc: MonoidHomClass F M N
mc
:
MonoidHomClass: 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)
MonoidHomClass
F: Type ?u.22839
F
M: Type ?u.21960
M
N: Type ?u.5399
N
] open Set /-! ### `comap` and `map` -/ /-- The preimage of a submonoid along a monoid homomorphism is a submonoid. -/ @[
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 β†’ AddSubmonoid N β†’ AddSubmonoid M
to_additive
"The preimage of an `AddSubmonoid` along an `AddMonoid` homomorphism is an `AddSubmonoid`."] def
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 M
comap
(
f: F
f
:
F: Type ?u.5465
F
) (S :
Submonoid: (M : Type ?u.5482) β†’ [inst : MulOneClass M] β†’ Type ?u.5482
Submonoid
N: Type ?u.5441
N
) :
Submonoid: (M : Type ?u.5491) β†’ [inst : MulOneClass M] β†’ Type ?u.5491
Submonoid
M: Type ?u.5438
M
where carrier :=
f: F
f
⁻¹' S one_mem' := show
f: F
f
1: ?m.6442
1
∈ S by
M: 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 ∈ S
M: 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


1 ∈ S
M: 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


1 ∈ S
M: 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


1 ∈ S
M: 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 ∈ S

Goals accomplished! πŸ™
mul_mem'
ha: ?m.5861
ha
hb: ?m.5864
hb
:= show
f: F
f
(
_: ?m.6057
_
*
_: ?m.6060
_
) ∈ S by
M: 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


↑f (a✝ * b✝) ∈ S
M: 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


↑f a✝ * ↑f b✝ ∈ S
M: 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


↑f a✝ * ↑f b✝ ∈ S
M: 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


↑f a✝ * ↑f b✝ ∈ S
M: 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


↑f (a✝ * b✝) ∈ S

Goals accomplished! πŸ™
#align submonoid.comap
Submonoid.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 M
Submonoid.comap
#align add_submonoid.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 M
AddSubmonoid.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 ⁻¹' ↑S
to_additive
(attr := simp)] theorem
coe_comap: βˆ€ (S : Submonoid N) (f : F), ↑(comap f S) = ↑f ⁻¹' ↑S
coe_comap
(S :
Submonoid: (M : Type ?u.8191) β†’ [inst : MulOneClass M] β†’ Type ?u.8191
Submonoid
N: Type ?u.8152
N
) (
f: F
f
:
F: Type ?u.8176
F
) : (S.
comap: {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 M
comap
f: F
f
:
Set: Type ?u.8204 β†’ Type ?u.8204
Set
M: Type ?u.8149
M
) =
f: F
f
⁻¹' S :=
rfl: βˆ€ {Ξ± : Sort ?u.8679} {a : Ξ±}, a = a
rfl
#align submonoid.coe_comap
Submonoid.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 ⁻¹' ↑S
Submonoid.coe_comap
#align add_submonoid.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 ⁻¹' ↑S
AddSubmonoid.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} {x : M}, x ∈ AddSubmonoid.comap f S ↔ ↑f x ∈ S
to_additive
(attr := simp)] theorem
mem_comap: βˆ€ {S : Submonoid N} {f : F} {x : M}, x ∈ comap f S ↔ ↑f x ∈ S
mem_comap
{S :
Submonoid: (M : Type ?u.8832) β†’ [inst : MulOneClass M] β†’ Type ?u.8832
Submonoid
N: Type ?u.8793
N
} {
f: F
f
:
F: Type ?u.8817
F
} {
x: M
x
:
M: Type ?u.8790
M
} :
x: M
x
∈ S.
comap: {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 M
comap
f: F
f
↔
f: F
f
x: M
x
∈ S :=
Iff.rfl: βˆ€ {a : Prop}, a ↔ a
Iff.rfl
#align submonoid.mem_comap
Submonoid.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 ∈ S
Submonoid.mem_comap
#align add_submonoid.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 ∈ S
AddSubmonoid.mem_comap
@[
to_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) S
to_additive
] theorem
comap_comap: βˆ€ (S : Submonoid P) (g : N β†’* P) (f : M β†’* N), comap f (comap g S) = comap (MonoidHom.comp g f) S
comap_comap
(S :
Submonoid: (M : Type ?u.9377) β†’ [inst : MulOneClass M] β†’ Type ?u.9377
Submonoid
P: Type ?u.9341
P
) (
g: N β†’* P
g
:
N: Type ?u.9338
N
β†’*
P: Type ?u.9341
P
) (
f: M β†’* N
f
:
M: Type ?u.9335
M
β†’*
N: Type ?u.9338
N
) : (S.
comap: {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 M
comap
g: N β†’* P
g
).
comap: {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 M
comap
f: M β†’* N
f
= S.
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 M
comap
(
g: N β†’* P
g
.
comp: {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 β†’* P
comp
f: M β†’* N
f
) :=
rfl: βˆ€ {Ξ± : Sort ?u.9663} {a : Ξ±}, a = a
rfl
#align submonoid.comap_comap
Submonoid.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) S
Submonoid.comap_comap
#align add_submonoid.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) S
AddSubmonoid.comap_comap
@[
to_additive: βˆ€ {P : Type u_1} [inst : AddZeroClass P] (S : AddSubmonoid P), AddSubmonoid.comap (AddMonoidHom.id P) S = S
to_additive
(attr := simp)] theorem
comap_id: βˆ€ (S : Submonoid P), comap (MonoidHom.id P) S = S
comap_id
(S :
Submonoid: (M : Type ?u.9824) β†’ [inst : MulOneClass M] β†’ Type ?u.9824
Submonoid
P: Type ?u.9788
P
) : S.
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 M
comap
(
MonoidHom.id: (M : Type ?u.9851) β†’ [inst : MulOneClass M] β†’ M β†’* M
MonoidHom.id
P: Type ?u.9788
P
) = S :=
ext: βˆ€ {M : Type ?u.9911} [inst : MulOneClass M] {S T : Submonoid M}, (βˆ€ (x : M), x ∈ S ↔ x ∈ T) β†’ S = T
ext
(

Goals 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

Goals accomplished! πŸ™
) #align submonoid.comap_id
Submonoid.comap_id: βˆ€ {P : Type u_1} [inst : MulOneClass P] (S : Submonoid P), comap (MonoidHom.id P) S = S
Submonoid.comap_id
#align add_submonoid.comap_id
AddSubmonoid.comap_id: βˆ€ {P : Type u_1} [inst : AddZeroClass P] (S : AddSubmonoid P), AddSubmonoid.comap (AddMonoidHom.id P) S = S
AddSubmonoid.comap_id
/-- The image of a submonoid along a monoid homomorphism is a submonoid. -/ @[
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 β†’ AddSubmonoid M β†’ AddSubmonoid N
to_additive
"The image of an `AddSubmonoid` along an `AddMonoid` homomorphism is an `AddSubmonoid`."] def
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 N
map
(
f: F
f
:
F: Type ?u.10959
F
) (S :
Submonoid: (M : Type ?u.10976) β†’ [inst : MulOneClass M] β†’ Type ?u.10976
Submonoid
M: Type ?u.10932
M
) :
Submonoid: (M : Type ?u.10985) β†’ [inst : MulOneClass M] β†’ Type ?u.10985
Submonoid
N: Type ?u.10935
N
where carrier :=
f: F
f
'' S one_mem' := ⟨
1: ?m.11366
1
, S.
one_mem: βˆ€ {M : Type ?u.11601} [inst : MulOneClass M] (S : Submonoid M), 1 ∈ S
one_mem
,
map_one: βˆ€ {M : Type ?u.11610} {N : Type ?u.11611} {F : Type ?u.11609} [inst : One M] [inst_1 : One N] [inst_2 : OneHomClass F M N] (f : F), ↑f 1 = 1
map_one
f: F
f
⟩ mul_mem' :=

Goals 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


βˆ€ {a b : N}, a ∈ ↑f '' ↑S β†’ b ∈ ↑f '' ↑S β†’ a * b ∈ ↑f '' ↑S
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 ∈ ↑S


intro.intro.intro.intro
↑f x * ↑f y ∈ ↑f '' ↑S
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 ∈ ↑S


intro.intro.intro.intro
↑f x * ↑f y ∈ ↑f '' ↑S
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


βˆ€ {a b : N}, a ∈ ↑f '' ↑S β†’ b ∈ ↑f '' ↑S β†’ a * b ∈ ↑f '' ↑S
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 ∈ ↑S


intro.intro.intro.intro
↑f x * ↑f y ∈ ↑f '' ↑S

Goals 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 ∈ ↑S


↑f (x * y) = ↑f x * ↑f y
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 ∈ ↑S


↑f (x * y) = ↑f x * ↑f y
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 ∈ ↑S


↑f x * ↑f y = ↑f x * ↑f y

Goals accomplished! πŸ™

Goals accomplished! πŸ™
#align submonoid.map
Submonoid.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 N
Submonoid.map
#align add_submonoid.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 N
AddSubmonoid.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 '' ↑S
to_additive
(attr := simp)] theorem
coe_map: βˆ€ (f : F) (S : Submonoid M), ↑(map f S) = ↑f '' ↑S
coe_map
(
f: F
f
:
F: Type ?u.13199
F
) (S :
Submonoid: (M : Type ?u.13216) β†’ [inst : MulOneClass M] β†’ Type ?u.13216
Submonoid
M: Type ?u.13172
M
) : (S.
map: {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 N
map
f: F
f
:
Set: Type ?u.13227 β†’ Type ?u.13227
Set
N: Type ?u.13175
N
) =
f: F
f
'' S :=
rfl: βˆ€ {Ξ± : Sort ?u.13702} {a : Ξ±}, a = a
rfl
#align submonoid.coe_map
Submonoid.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 '' ↑S
Submonoid.coe_map
#align add_submonoid.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 '' ↑S
AddSubmonoid.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} {y : N}, y ∈ AddSubmonoid.map f S ↔ βˆƒ x, x ∈ S ∧ ↑f x = y
to_additive
(attr := simp)] theorem
mem_map: βˆ€ {f : F} {S : Submonoid M} {y : N}, y ∈ map f S ↔ βˆƒ x, x ∈ S ∧ ↑f x = y
mem_map
{
f: F
f
:
F: Type ?u.13840
F
} {S :
Submonoid: (M : Type ?u.13857) β†’ [inst : MulOneClass M] β†’ Type ?u.13857
Submonoid
M: Type ?u.13813
M
} {
y: N
y
:
N: Type ?u.13816
N
} :
y: N
y
∈ S.
map: {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 N
map
f: F
f
↔ βˆƒ
x: ?m.14003
x
∈ S,
f: F
f
x: ?m.14003
x
=
y: N
y
:=

Goals 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: N


y ∈ map f S ↔ βˆƒ x, x ∈ S ∧ ↑f x = y
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: N


y ∈ map f S ↔ βˆƒ x, x ∈ S ∧ ↑f x = y
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: N


y ∈ map f S ↔ βˆƒ x x_1, ↑f x = y
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: N


y ∈ map f S ↔ βˆƒ x x_1, ↑f x = y
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: N


y ∈ map f S ↔ βˆƒ x, x ∈ S ∧ ↑f x = y

Goals accomplished! πŸ™
#align submonoid.mem_map
Submonoid.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 = y
Submonoid.mem_map
#align add_submonoid.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 = y
AddSubmonoid.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 : M}, x ∈ S β†’ ↑f x ∈ AddSubmonoid.map f S
to_additive
] theorem
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 S
mem_map_of_mem
(
f: F
f
:
F: Type ?u.14498
F
) {S :
Submonoid: (M : Type ?u.14515) β†’ [inst : MulOneClass M] β†’ Type ?u.14515
Submonoid
M: Type ?u.14471
M
} {
x: M
x
:
M: Type ?u.14471
M
} (
hx: x ∈ S
hx
:
x: M
x
∈ S) :
f: F
f
x: M
x
∈ S.
map: {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 N
map
f: F
f
:=
mem_image_of_mem: βˆ€ {Ξ± : Type ?u.14896} {Ξ² : Type ?u.14897} (f : Ξ± β†’ Ξ²) {x : Ξ±} {a : Set Ξ±}, x ∈ a β†’ f x ∈ f '' a
mem_image_of_mem
f: F
f
hx: x ∈ S
hx
#align submonoid.mem_map_of_mem
Submonoid.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 S
Submonoid.mem_map_of_mem
#align add_submonoid.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 S
AddSubmonoid.mem_map_of_mem
@[
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 S
to_additive
] theorem
apply_coe_mem_map: βˆ€ (f : F) (S : Submonoid M) (x : { x // x ∈ S }), ↑f ↑x ∈ map f S
apply_coe_mem_map
(
f: F
f
:
F: Type ?u.15208
F
) (S :
Submonoid: (M : Type ?u.15225) β†’ [inst : MulOneClass M] β†’ Type ?u.15225
Submonoid
M: Type ?u.15181
M
) (
x: { x // x ∈ S }
x
: S) :
f: F
f
x: { x // x ∈ S }
x
∈ S.
map: {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 N
map
f: F
f
:=
mem_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 S
mem_map_of_mem
f: F
f
x: { x // x ∈ S }
x
.
2: βˆ€ {Ξ± : Sort ?u.15789} {p : Ξ± β†’ Prop} (self : Subtype p), p ↑self
2
#align submonoid.apply_coe_mem_map
Submonoid.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 S
Submonoid.apply_coe_mem_map
#align add_submonoid.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 S
AddSubmonoid.apply_coe_mem_map
@[
to_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) S
to_additive
] theorem
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) S
map_map
(
g: N β†’* P
g
:
N: Type ?u.15866
N
β†’*
P: Type ?u.15869
P
) (
f: M β†’* N
f
:
M: Type ?u.15863
M
β†’*
N: Type ?u.15866
N
) : (S.
map: {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 N
map
f: M β†’* N
f
).
map: {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 N
map
g: N β†’* P
g
= S.
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 N
map
(
g: N β†’* P
g
.
comp: {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 β†’* P
comp
f: M β†’* N
f
) :=
SetLike.coe_injective: βˆ€ {A : Type ?u.16186} {B : Type ?u.16187} [i : SetLike A B], Function.Injective SetLike.coe
SetLike.coe_injective
<|
image_image: βˆ€ {Ξ± : Type ?u.16206} {Ξ² : Type ?u.16208} {Ξ³ : Type ?u.16207} (g : Ξ² β†’ Ξ³) (f : Ξ± β†’ Ξ²) (s : Set Ξ±), g '' (f '' s) = (fun x => g (f x)) '' s
image_image
_: ?m.16210 β†’ ?m.16211
_
_: ?m.16209 β†’ ?m.16210
_
_: Set ?m.16209
_
#align submonoid.map_map
Submonoid.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) S
Submonoid.map_map
#align add_submonoid.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) S
AddSubmonoid.map_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}, Function.Injective ↑f β†’ βˆ€ {S : AddSubmonoid M} {x : M}, ↑f x ∈ AddSubmonoid.map f S ↔ x ∈ S
to_additive
] theorem
mem_map_iff_mem: βˆ€ {f : F}, Function.Injective ↑f β†’ βˆ€ {S : Submonoid M} {x : M}, ↑f x ∈ map f S ↔ x ∈ S
mem_map_iff_mem
{
f: F
f
:
F: Type ?u.16377
F
} (
hf: Function.Injective ↑f
hf
:
Function.Injective: {Ξ± : Sort ?u.16395} β†’ {Ξ² : Sort ?u.16394} β†’ (Ξ± β†’ Ξ²) β†’ Prop
Function.Injective
f: F
f
) {S :
Submonoid: (M : Type ?u.16587) β†’ [inst : MulOneClass M] β†’ Type ?u.16587
Submonoid
M: Type ?u.16350
M
} {
x: M
x
:
M: Type ?u.16350
M
} :
f: F
f
x: M
x
∈ S.
map: {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 N
map
f: F
f
↔
x: M
x
∈ S :=
hf: Function.Injective ↑f
hf
.
mem_set_image: βˆ€ {Ξ± : Type ?u.16922} {Ξ² : Type ?u.16923} {f : Ξ± β†’ Ξ²}, Function.Injective f β†’ βˆ€ {s : Set Ξ±} {a : Ξ±}, f a ∈ f '' s ↔ a ∈ s
mem_set_image
#align submonoid.mem_map_iff_mem
Submonoid.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 ∈ S
Submonoid.mem_map_iff_mem
#align add_submonoid.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 ∈ S
AddSubmonoid.mem_map_iff_mem
@[
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} {T : AddSubmonoid N}, AddSubmonoid.map f S ≀ T ↔ S ≀ AddSubmonoid.comap f T
to_additive
] theorem
map_le_iff_le_comap: βˆ€ {f : F} {S : Submonoid M} {T : Submonoid N}, map f S ≀ T ↔ S ≀ comap f T
map_le_iff_le_comap
{
f: F
f
:
F: Type ?u.17062
F
} {S :
Submonoid: (M : Type ?u.17079) β†’ [inst : MulOneClass M] β†’ Type ?u.17079
Submonoid
M: Type ?u.17035
M
} {T :
Submonoid: (M : Type ?u.17088) β†’ [inst : MulOneClass M] β†’ Type ?u.17088
Submonoid
N: Type ?u.17038
N
} : S.
map: {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 N
map
f: F
f
≀ T ↔ S ≀ T.
comap: {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 M
comap
f: F
f
:=
image_subset_iff: βˆ€ {Ξ± : Type ?u.17300} {Ξ² : Type ?u.17301} {s : Set Ξ±} {t : Set Ξ²} {f : Ξ± β†’ Ξ²}, f '' s βŠ† t ↔ s βŠ† f ⁻¹' t
image_subset_iff
#align submonoid.map_le_iff_le_comap
Submonoid.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 T
Submonoid.map_le_iff_le_comap
#align add_submonoid.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 T
AddSubmonoid.map_le_iff_le_comap
@[
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), GaloisConnection (AddSubmonoid.map f) (AddSubmonoid.comap f)
to_additive
] theorem
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)
gc_map_comap
(
f: F
f
:
F: Type ?u.17445
F
) :
GaloisConnection: {Ξ± : Type ?u.17463} β†’ {Ξ² : Type ?u.17462} β†’ [inst : Preorder Ξ±] β†’ [inst : Preorder Ξ²] β†’ (Ξ± β†’ Ξ²) β†’ (Ξ² β†’ Ξ±) β†’ Prop
GaloisConnection
(
map: {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 N
map
f: F
f
) (
comap: {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 M
comap
f: F
f
) := fun
_: ?m.17768
_
_: ?m.17771
_
=>
map_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 T
map_le_iff_le_comap
#align submonoid.gc_map_comap
Submonoid.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)
Submonoid.gc_map_comap
#align add_submonoid.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)
AddSubmonoid.gc_map_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 ≀ T
to_additive
] theorem
map_le_of_le_comap: βˆ€ {T : Submonoid N} {f : F}, S ≀ comap f T β†’ map f S ≀ T
map_le_of_le_comap
{T :
Submonoid: (M : Type ?u.17971) β†’ [inst : MulOneClass M] β†’ Type ?u.17971
Submonoid
N: Type ?u.17932
N
} {
f: F
f
:
F: Type ?u.17956
F
} : S ≀ T.
comap: {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 M
comap
f: F
f
β†’ S.
map: {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 N
map
f: F
f
≀ T := (
gc_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)
gc_map_comap
f: F
f
).
l_le: βˆ€ {Ξ± : Type ?u.18258} {Ξ² : Type ?u.18257} [inst : Preorder Ξ±] [inst_1 : Preorder Ξ²] {l : Ξ± β†’ Ξ²} {u : Ξ² β†’ Ξ±}, GaloisConnection l u β†’ βˆ€ {a : Ξ±} {b : Ξ²}, a ≀ u b β†’ l a ≀ b
l_le
#align submonoid.map_le_of_le_comap
Submonoid.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 ≀ T
Submonoid.map_le_of_le_comap
#align add_submonoid.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 ≀ T
AddSubmonoid.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}, AddSubmonoid.map f S ≀ T β†’ S ≀ AddSubmonoid.comap f T
to_additive
] theorem
le_comap_of_map_le: βˆ€ {T : Submonoid N} {f : F}, map f S ≀ T β†’ S ≀ comap f T
le_comap_of_map_le
{T :
Submonoid: (M : Type ?u.18482) β†’ [inst : MulOneClass M] β†’ Type ?u.18482
Submonoid
N: Type ?u.18443
N
} {
f: F
f
:
F: Type ?u.18467
F
} : S.
map: {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 N
map
f: F
f
≀ T β†’ S ≀ T.
comap: {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 M
comap
f: F
f
:= (
gc_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)
gc_map_comap
f: F
f
).
le_u: βˆ€ {Ξ± : Type ?u.18769} {Ξ² : Type ?u.18768} [inst : Preorder Ξ±] [inst_1 : Preorder Ξ²] {l : Ξ± β†’ Ξ²} {u : Ξ² β†’ Ξ±}, GaloisConnection l u β†’ βˆ€ {a : Ξ±} {b : Ξ²}, l a ≀ b β†’ a ≀ u b
le_u
#align submonoid.le_comap_of_map_le
Submonoid.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 T
Submonoid.le_comap_of_map_le
#align add_submonoid.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 T
AddSubmonoid.le_comap_of_map_le
@[
to_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)
to_additive
] theorem
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)
le_comap_map
{
f: F
f
:
F: Type ?u.18978
F
} : S ≀ (S.
map: {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 N
map
f: F
f
).
comap: {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 M
comap
f: F
f
:= (
gc_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)
gc_map_comap
f: F
f
).
le_u_l: βˆ€ {Ξ± : Type ?u.19226} {Ξ² : Type ?u.19225} [inst : Preorder Ξ±] [inst_1 : Preorder Ξ²] {l : Ξ± β†’ Ξ²} {u : Ξ² β†’ Ξ±}, GaloisConnection l u β†’ βˆ€ (a : Ξ±), a ≀ u (l a)
le_u_l
_: ?m.19235
_
#align submonoid.le_comap_map
Submonoid.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)
Submonoid.le_comap_map
#align add_submonoid.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)
AddSubmonoid.le_comap_map
@[
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) ≀ S
to_additive
] theorem
map_comap_le: βˆ€ {S : Submonoid N} {f : F}, map f (comap f S) ≀ S
map_comap_le
{S :
Submonoid: (M : Type ?u.19433) β†’ [inst : MulOneClass M] β†’ Type ?u.19433
Submonoid
N: Type ?u.19394
N
} {
f: F
f
:
F: Type ?u.19418
F
} : (S.
comap: {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 M
comap
f: F
f
).
map: {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 N
map
f: F
f
≀ S := (
gc_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)
gc_map_comap
f: F
f
).
l_u_le: βˆ€ {Ξ± : Type ?u.19672} {Ξ² : Type ?u.19671} [inst : Preorder Ξ±] [inst_1 : Preorder Ξ²] {l : Ξ± β†’ Ξ²} {u : Ξ² β†’ Ξ±}, GaloisConnection l u β†’ βˆ€ (a : Ξ²), l (u a) ≀ a
l_u_le
_: ?m.19682
_
#align submonoid.map_comap_le
Submonoid.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) ≀ S
Submonoid.map_comap_le
#align add_submonoid.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) ≀ S
AddSubmonoid.map_comap_le
@[
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)
to_additive
] theorem
monotone_map: βˆ€ {f : F}, Monotone (map f)
monotone_map
{
f: F
f
:
F: Type ?u.19870
F
} :
Monotone: {Ξ± : Type ?u.19888} β†’ {Ξ² : Type ?u.19887} β†’ [inst : Preorder Ξ±] β†’ [inst : Preorder Ξ²] β†’ (Ξ± β†’ Ξ²) β†’ Prop
Monotone
(
map: {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 N
map
f: F
f
) := (
gc_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)
gc_map_comap
f: F
f
).
monotone_l: βˆ€ {Ξ± : Type ?u.20183} {Ξ² : Type ?u.20182} [inst : Preorder Ξ±] [inst_1 : Preorder Ξ²] {l : Ξ± β†’ Ξ²} {u : Ξ² β†’ Ξ±}, GaloisConnection l u β†’ Monotone l
monotone_l
#align submonoid.monotone_map
Submonoid.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)
Submonoid.monotone_map
#align add_submonoid.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)
AddSubmonoid.monotone_map
@[
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] {f : F}, Monotone (AddSubmonoid.comap f)
to_additive
] theorem
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)
monotone_comap
{
f: F
f
:
F: Type ?u.20368
F
} :
Monotone: {Ξ± : Type ?u.20386} β†’ {Ξ² : Type ?u.20385} β†’ [inst : Preorder Ξ±] β†’ [inst : Preorder Ξ²] β†’ (Ξ± β†’ Ξ²) β†’ Prop
Monotone
(
comap: {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 M
comap
f: F
f
) := (
gc_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)
gc_map_comap
f: F
f
).
monotone_u: βˆ€ {Ξ± : Type ?u.20681} {Ξ² : Type ?u.20680} [inst : Preorder Ξ±] [inst_1 : Preorder Ξ²] {l : Ξ± β†’ Ξ²} {u : Ξ² β†’ Ξ±}, GaloisConnection l u β†’ Monotone u
monotone_u
#align submonoid.monotone_comap
Submonoid.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)
Submonoid.monotone_comap
#align add_submonoid.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)
AddSubmonoid.monotone_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] {f : F}, AddSubmonoid.map f (AddSubmonoid.comap f (AddSubmonoid.map f S)) = AddSubmonoid.map f S
to_additive
(attr := simp)] theorem
map_comap_map: βˆ€ {f : F}, map f (comap f (map f S)) = map f S
map_comap_map
{
f: F
f
:
F: Type ?u.20866
F
} : ((S.
map: {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 N
map
f: F
f
).
comap: {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 M
comap
f: F
f
).
map: {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 N
map
f: F
f
= S.
map: {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 N
map
f: F
f
:= (
gc_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)
gc_map_comap
f: F
f
).
l_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
l_u_l_eq_l
_: ?m.21179
_
#align submonoid.map_comap_map
Submonoid.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 S
Submonoid.map_comap_map
#align add_submonoid.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 S
AddSubmonoid.map_comap_map
@[
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 (AddSubmonoid.map f (AddSubmonoid.comap f S)) = AddSubmonoid.comap f S
to_additive
(attr := simp)] theorem
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 S
comap_map_comap
{S :
Submonoid: (M : Type ?u.21440) β†’ [inst : MulOneClass M] β†’ Type ?u.21440
Submonoid
N: Type ?u.21401
N
} {
f: F
f
:
F: Type ?u.21425
F
} : ((S.
comap: {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 M
comap
f: F
f
).
map: {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 N
map
f: F
f
).
comap: {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 M
comap
f: F
f
= S.
comap: {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 M
comap
f: F
f
:= (
gc_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)
gc_map_comap
f: F
f
).
u_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
u_l_u_eq_u
_: ?m.21744
_
#align submonoid.comap_map_comap
Submonoid.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 S
Submonoid.comap_map_comap
#align add_submonoid.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 S
AddSubmonoid.comap_map_comap
@[
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] (S T : AddSubmonoid M) (f : F), AddSubmonoid.map f (S βŠ” T) = AddSubmonoid.map f S βŠ” AddSubmonoid.map f T
to_additive
] theorem
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 T
map_sup
(S T :
Submonoid: (M : Type ?u.22011) β†’ [inst : MulOneClass M] β†’ Type ?u.22011
Submonoid
M: Type ?u.21960
M
) (
f: F
f
:
F: Type ?u.21987
F
) : (S βŠ” T).
map: {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 N
map
f: F
f
= S.
map: {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 N
map
f: F
f
βŠ” T.
map: {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 N
map
f: F
f
:= (
gc_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)
gc_map_comap
f: F
f
:
GaloisConnection: {Ξ± : Type ?u.22325} β†’ {Ξ² : Type ?u.22324} β†’ [inst : Preorder Ξ±] β†’ [inst : Preorder Ξ²] β†’ (Ξ± β†’ Ξ²) β†’ (Ξ² β†’ Ξ±) β†’ Prop
GaloisConnection
(
map: {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 N
map
f: F
f
) (
comap: {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 M
comap
f: F
f
)).
l_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β‚‚
l_sup
#align submonoid.map_sup
Submonoid.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 T
Submonoid.map_sup
#align add_submonoid.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 T
AddSubmonoid.map_sup
@[
to_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)
to_additive
] theorem
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)
map_iSup
{
ΞΉ: Sort u_1
ΞΉ
:
Sort _: Type ?u.22854
Sort
Sort _: Type ?u.22854
_
} (
f: F
f
:
F: Type ?u.22839
F
) (
s: ΞΉ β†’ Submonoid M
s
:
ΞΉ: Sort ?u.22854
ΞΉ
β†’
Submonoid: (M : Type ?u.22861) β†’ [inst : MulOneClass M] β†’ Type ?u.22861
Submonoid
M: Type ?u.22812
M
) : (
iSup: {Ξ± : Type ?u.22872} β†’ [inst : SupSet Ξ±] β†’ {ΞΉ : Sort ?u.22871} β†’ (ΞΉ β†’ Ξ±) β†’ Ξ±
iSup
s: ΞΉ β†’ Submonoid M
s
).
map: {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 N
map
f: F
f
= ⨆
i: ?m.22968
i
, (
s: ΞΉ β†’ Submonoid M
s
i: ?m.22968
i
).
map: {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 N
map
f: F
f
:= (
gc_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)
gc_map_comap
f: F
f
:
GaloisConnection: {Ξ± : Type ?u.23096} β†’ {Ξ² : Type ?u.23095} β†’ [inst : Preorder Ξ±] β†’ [inst : Preorder Ξ²] β†’ (Ξ± β†’ Ξ²) β†’ (Ξ² β†’ Ξ±) β†’ Prop
GaloisConnection
(
map: {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 N
map
f: F
f
) (
comap: {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 M
comap
f: F
f
)).
l_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)
l_iSup
#align submonoid.map_supr
Submonoid.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)
Submonoid.map_iSup
#align add_submonoid.map_supr
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)
AddSubmonoid.map_iSup
@[
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 T
to_additive
] theorem
comap_inf: βˆ€ (S T : Submonoid N) (f : F), comap f (S βŠ“ T) = comap f S βŠ“ comap f T
comap_inf
(S T :
Submonoid: (M : Type ?u.23645) β†’ [inst : MulOneClass M] β†’ Type ?u.23645
Submonoid
N: Type ?u.23597
N
) (
f: F
f
:
F: Type ?u.23621
F
) : (S βŠ“ T).
comap: {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 M
comap
f: F
f
= S.
comap: {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 M
comap
f: F
f
βŠ“ T.
comap: {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 M
comap
f: F
f
:= (
gc_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)
gc_map_comap
f: F
f
:
GaloisConnection: {Ξ± : Type ?u.23919} β†’ {Ξ² : Type ?u.23918} β†’ [inst : Preorder Ξ±] β†’ [inst : Preorder Ξ²] β†’ (Ξ± β†’ Ξ²) β†’ (Ξ² β†’ Ξ±) β†’ Prop
GaloisConnection
(
map: {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 N
map
f: F
f
) (
comap: {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 M
comap
f: F
f
)).
u_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β‚‚
u_inf
#align submonoid.comap_inf
Submonoid.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 T
Submonoid.comap_inf
#align add_submonoid.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 T
AddSubmonoid.comap_inf
@[
to_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)
to_additive
] theorem
comap_iInf: βˆ€ {ΞΉ : Sort u_1} (f : F) (s : ΞΉ β†’ Submonoid N), comap f (iInf s) = β¨… i, comap f (s i)
comap_iInf
{
ΞΉ: Sort u_1
ΞΉ
:
Sort _: Type ?u.24454
Sort
Sort _: Type ?u.24454
_
} (
f: F
f
:
F: Type ?u.24439
F
) (
s: ΞΉ β†’ Submonoid N
s
:
ΞΉ: Sort ?u.24454
ΞΉ
β†’
Submonoid: (M : Type ?u.24461) β†’ [inst : MulOneClass M] β†’ Type ?u.24461
Submonoid
N: Type ?u.24415
N
) : (
iInf: {Ξ± : Type ?u.24472} β†’ [inst : InfSet Ξ±] β†’ {ΞΉ : Sort ?u.24471} β†’ (ΞΉ β†’ Ξ±) β†’ Ξ±
iInf
s: ΞΉ β†’ Submonoid N
s
).
comap: {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 M
comap
f: F
f
= β¨…
i: ?m.24559
i
, (
s: ΞΉ β†’ Submonoid N
s
i: ?m.24559
i
).
comap: {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 M
comap
f: F
f
:= (
gc_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)
gc_map_comap
f: F
f
:
GaloisConnection: {Ξ± : Type ?u.24678} β†’ {Ξ² : Type ?u.24677} β†’ [inst : Preorder Ξ±] β†’ [inst : Preorder Ξ²] β†’ (Ξ± β†’ Ξ²) β†’ (Ξ² β†’ Ξ±) β†’ Prop
GaloisConnection
(
map: {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 N
map
f: F
f
) (
comap: {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 M
comap
f: F
f
)).
u_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)
u_iInf
#align submonoid.comap_infi
Submonoid.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)
Submonoid.comap_iInf
#align add_submonoid.comap_infi
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)
AddSubmonoid.comap_iInf
@[
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] (f : F), AddSubmonoid.map f βŠ₯ = βŠ₯
to_additive
(attr := simp)] theorem
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 βŠ₯ = βŠ₯
map_bot
(
f: F
f
:
F: Type ?u.25213
F
) : (
βŠ₯: ?m.25240
βŠ₯
:
Submonoid: (M : Type ?u.25232) β†’ [inst : MulOneClass M] β†’ Type ?u.25232
Submonoid
M: Type ?u.25186
M
).
map: {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 N
map
f: F
f
=
βŠ₯: ?m.25340
βŠ₯
:= (
gc_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)
gc_map_comap
f: F
f
).
l_bot: βˆ€ {Ξ± : Type ?u.25463} {Ξ² : Type ?u.25462} [inst : Preorder Ξ±] [inst_1 : PartialOrder Ξ²] [inst_2 : OrderBot Ξ²] [inst_3 : OrderBot Ξ±] {l : Ξ± β†’ Ξ²} {u : Ξ² β†’ Ξ±}, GaloisConnection l u β†’ l βŠ₯ = βŠ₯
l_bot
#align submonoid.map_bot
Submonoid.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 βŠ₯ = βŠ₯
Submonoid.map_bot
#align add_submonoid.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 βŠ₯ = βŠ₯
AddSubmonoid.map_bot
@[
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 ⊀ = ⊀
to_additive
(attr := simp)] theorem
comap_top: βˆ€ (f : F), comap f ⊀ = ⊀
comap_top
(
f: F
f
:
F: Type ?u.25773
F
) : (
⊀: ?m.25800
⊀
:
Submonoid: (M : Type ?u.25792) β†’ [inst : MulOneClass M] β†’ Type ?u.25792
Submonoid
N: Type ?u.25749
N
).
comap: {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 M
comap
f: F
f
=
⊀: ?m.25899
⊀
:= (
gc_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)
gc_map_comap
f: F
f
).
u_top: βˆ€ {Ξ± : Type ?u.26020} {Ξ² : Type ?u.26019} [inst : PartialOrder Ξ±] [inst_1 : Preorder Ξ²] [inst_2 : OrderTop Ξ±] [inst_3 : OrderTop Ξ²] {l : Ξ± β†’ Ξ²} {u : Ξ² β†’ Ξ±}, GaloisConnection l u β†’ u ⊀ = ⊀
u_top
#align submonoid.comap_top
Submonoid.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 ⊀ = ⊀
Submonoid.comap_top
#align add_submonoid.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 ⊀ = ⊀
AddSubmonoid.comap_top
@[
to_additive: βˆ€ {M : Type u_1} [inst : AddZeroClass M] (S : AddSubmonoid M), AddSubmonoid.map (AddMonoidHom.id M) S = S
to_additive
(attr := simp)] theorem
map_id: βˆ€ {M : Type u_1} [inst : MulOneClass M] (S : Submonoid M), map (MonoidHom.id M) S = S
map_id
(S :
Submonoid: (M : Type ?u.26345) β†’ [inst : MulOneClass M] β†’ Type ?u.26345
Submonoid
M: Type ?u.26303
M
) : S.
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 N
map
(
MonoidHom.id: (M : Type ?u.26372) β†’ [inst : MulOneClass M] β†’ M β†’* M
MonoidHom.id
M: Type ?u.26303
M
) = S :=
ext: βˆ€ {M : Type ?u.26432} [inst : MulOneClass M] {S T : Submonoid M}, (βˆ€ (x : M), x ∈ S ↔ x ∈ T) β†’ S = T
ext
fun
_: ?m.26456
_
=> ⟨fun ⟨
_: ?m.26456
_
,
h: x✝¹ ∈ ↑S
h
,
rfl: βˆ€ {Ξ± : Sort ?u.26470} {a : Ξ±}, a = a
rfl
⟩ =>
h: x✝¹ ∈ ↑S
h
, fun
h: ?m.26771
h
=> ⟨
_: ?m.26778
_
,
h: ?m.26771
h
,
rfl: βˆ€ {Ξ± : Sort ?u.26803} {a : Ξ±}, a = a
rfl
⟩⟩ #align submonoid.map_id
Submonoid.map_id: βˆ€ {M : Type u_1} [inst : MulOneClass M] (S : Submonoid M), map (MonoidHom.id M) S = S
Submonoid.map_id
#align add_submonoid.map_id
AddSubmonoid.map_id: βˆ€ {M : Type u_1} [inst : AddZeroClass M] (S : AddSubmonoid M), AddSubmonoid.map (AddMonoidHom.id M) S = S
AddSubmonoid.map_id
section GaloisCoinsertion variable {
ΞΉ: Type ?u.29867
ΞΉ
:
Type _: Type (?u.27001+1)
Type _
} {
f: F
f
:
F: Type ?u.30432
F
} (
hf: Function.Injective ↑f
hf
:
Function.Injective: {Ξ± : Sort ?u.31031} β†’ {Ξ² : Sort ?u.31030} β†’ (Ξ± β†’ Ξ²) β†’ Prop
Function.Injective
f: F
f
) /-- `map f` and `comap f` form a `GaloisCoinsertion` when `f` is 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 β†’ GaloisCoinsertion (AddSubmonoid.map f) (AddSubmonoid.comap f)
to_additive
" `map f` and `comap f` form a `GaloisCoinsertion` when `f` is injective. "] def
gciMapComap: GaloisCoinsertion (map f) (comap f)
gciMapComap
:
GaloisCoinsertion: {Ξ± : Type ?u.27436} β†’ {Ξ² : Type ?u.27435} β†’ [inst : Preorder Ξ±] β†’ [inst : Preorder Ξ²] β†’ (Ξ± β†’ Ξ²) β†’ (Ξ² β†’ Ξ±) β†’ Type (max?u.27436?u.27435)
GaloisCoinsertion
(
map: {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 N
map
f: F
f
) (
comap: {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 M
comap
f: F
f
) := (
gc_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)
gc_map_comap
f: F
f
).
toGaloisCoinsertion: {Ξ± : Type ?u.27795} β†’ {Ξ² : Type ?u.27794} β†’ [inst : Preorder Ξ±] β†’ [inst_1 : Preorder Ξ²] β†’ {l : Ξ± β†’ Ξ²} β†’ {u : Ξ² β†’ Ξ±} β†’ GaloisConnection l u β†’ (βˆ€ (a : Ξ±), u (l a) ≀ a) β†’ GaloisCoinsertion l u
toGaloisCoinsertion
fun
S: ?m.27830
S
x: ?m.27833
x
=>

Goals 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


x ∈ comap f (map f S) β†’ x ∈ S

Goals accomplished! πŸ™
#align submonoid.gci_map_comap
Submonoid.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)
Submonoid.gciMapComap
#align add_submonoid.gci_map_comap
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)
AddSubmonoid.gciMapComap
@[
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) = S
to_additive
] theorem
comap_map_eq_of_injective: βˆ€ (S : Submonoid M), comap f (map f S) = S
comap_map_eq_of_injective
(S :
Submonoid: (M : Type ?u.29462) β†’ [inst : MulOneClass M] β†’ Type ?u.29462
Submonoid
M: Type ?u.29224
M
) : (S.
map: {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 N
map
f: F
f
).
comap: {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 M
comap
f: F
f
= S := (
gciMapComap: {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)
gciMapComap
hf: Function.Injective ↑f
hf
).
u_l_eq: βˆ€ {Ξ± : Type ?u.29657} {Ξ² : Type ?u.29656} {l : Ξ± β†’ Ξ²} {u : Ξ² β†’ Ξ±} [inst : PartialOrder Ξ±] [inst_1 : Preorder Ξ²], GaloisCoinsertion l u β†’ βˆ€ (a : Ξ±), u (l a) = a
u_l_eq
_: ?m.29666
_
#align submonoid.comap_map_eq_of_injective
Submonoid.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) = S
Submonoid.comap_map_eq_of_injective
#align add_submonoid.comap_map_eq_of_injective
AddSubmonoid.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 (