ruc-ai4math/mathlib_handler_benchmark_410 huggingface dataset:
-- AddSubsemigroup.comap_injective_of_surjective
@[to_additive]
theorem comap_injective_of_surjective : Function.Injective (comap f) 
Arguments: {M : Type u_1} {N : Type u_2} [Add M] [Add N] {f : AddHom M N} (hf : Function.Surjective ⇑f)
Goal: Function.Injective (AddSubsemigroup.comap f)
-- Subsemigroup.comap_injective_of_surjective
@[to_additive]
theorem comap_injective_of_surjective : Function.Injective (comap f) 
Arguments: {M : Type u_1} {N : Type u_2} [Mul M] [Mul N] {f : M →ₙ* N} (hf : Function.Surjective ⇑f)
Goal: Function.Injective (Subsemigroup.comap f)
-- AddSubsemigroup.map_inf_comap_of_surjective
@[to_additive]
theorem map_inf_comap_of_surjective (S T : Subsemigroup N) :
    (S.comap f ⊓ T.comap f).map f = S ⊓ T 
Arguments: {M : Type u_1} {N : Type u_2} [Add M] [Add N] {f : AddHom M N} (hf : Function.Surjective ⇑f) (S T : AddSubsemigroup N)
Goal: AddSubsemigroup.map f (AddSubsemigroup.comap f S ⊓ AddSubsemigroup.comap f T) = S ⊓ T
-- Subsemigroup.map_inf_comap_of_surjective
@[to_additive]
theorem map_inf_comap_of_surjective (S T : Subsemigroup N) :
    (S.comap f ⊓ T.comap f).map f = S ⊓ T 
Arguments: {M : Type u_1} {N : Type u_2} [Mul M] [Mul N] {f : M →ₙ* N} (hf : Function.Surjective ⇑f) (S T : Subsemigroup N)
Goal: Subsemigroup.map f (Subsemigroup.comap f S ⊓ Subsemigroup.comap f T) = S ⊓ T
-- AddSubsemigroup.map_iInf_comap_of_surjective
@[to_additive]
theorem map_iInf_comap_of_surjective (S : ι → Subsemigroup N) :
    (⨅ i, (S i).comap f).map f = iInf S 
Arguments: {M : Type u_1} {N : Type u_2} [Add M] [Add N] {ι : Type u_5} {f : AddHom M N} (hf : Function.Surjective ⇑f) (S : ι → AddSubsemigroup N)
Goal: AddSubsemigroup.map f (⨅ i, AddSubsemigroup.comap f (S i)) = iInf S
-- Subsemigroup.map_iInf_comap_of_surjective
@[to_additive]
theorem map_iInf_comap_of_surjective (S : ι → Subsemigroup N) :
    (⨅ i, (S i).comap f).map f = iInf S 
Arguments: {M : Type u_1} {N : Type u_2} [Mul M] [Mul N] {ι : Type u_5} {f : M →ₙ* N} (hf : Function.Surjective ⇑f) (S : ι → Subsemigroup N)
Goal: Subsemigroup.map f (⨅ i, Subsemigroup.comap f (S i)) = iInf S
-- Subsemigroup.map_sup_comap_of_surjective
@[to_additive]
theorem map_sup_comap_of_surjective (S T : Subsemigroup N) :
    (S.comap f ⊔ T.comap f).map f = S ⊔ T 
Arguments: {M : Type u_1} {N : Type u_2} [Mul M] [Mul N] {f : M →ₙ* N} (hf : Function.Surjective ⇑f) (S T : Subsemigroup N)
Goal: Subsemigroup.map f (Subsemigroup.comap f S ⊔ Subsemigroup.comap f T) = S ⊔ T
-- AddSubsemigroup.map_sup_comap_of_surjective
@[to_additive]
theorem map_sup_comap_of_surjective (S T : Subsemigroup N) :
    (S.comap f ⊔ T.comap f).map f = S ⊔ T 
Arguments: {M : Type u_1} {N : Type u_2} [Add M] [Add N] {f : AddHom M N} (hf : Function.Surjective ⇑f) (S T : AddSubsemigroup N)
Goal: AddSubsemigroup.map f (AddSubsemigroup.comap f S ⊔ AddSubsemigroup.comap f T) = S ⊔ T
-- Subsemigroup.map_iSup_comap_of_surjective
@[to_additive]
theorem map_iSup_comap_of_surjective (S : ι → Subsemigroup N) :
    (⨆ i, (S i).comap f).map f = iSup S 
Arguments: {M : Type u_1} {N : Type u_2} [Mul M] [Mul N] {ι : Type u_5} {f : M →ₙ* N} (hf : Function.Surjective ⇑f) (S : ι → Subsemigroup N)
Goal: Subsemigroup.map f (⨆ i, Subsemigroup.comap f (S i)) = iSup S
-- AddSubsemigroup.map_iSup_comap_of_surjective
@[to_additive]
theorem map_iSup_comap_of_surjective (S : ι → Subsemigroup N) :
    (⨆ i, (S i).comap f).map f = iSup S 
Arguments: {M : Type u_1} {N : Type u_2} [Add M] [Add N] {ι : Type u_5} {f : AddHom M N} (hf : Function.Surjective ⇑f) (S : ι → AddSubsemigroup N)
Goal: AddSubsemigroup.map f (⨆ i, AddSubsemigroup.comap f (S i)) = iSup S
-- Subsemigroup.comap_le_comap_iff_of_surjective
@[to_additive]
theorem comap_le_comap_iff_of_surjective {S T : Subsemigroup N} : S.comap f ≤ T.comap f ↔ S ≤ T 
Arguments: {M : Type u_1} {N : Type u_2} [Mul M] [Mul N] {f : M →ₙ* N} (hf : Function.Surjective ⇑f) {S T : Subsemigroup N}
Goal: Subsemigroup.comap f S ≤ Subsemigroup.comap f T ↔ S ≤ T
-- AddSubsemigroup.comap_le_comap_iff_of_surjective
@[to_additive]
theorem comap_le_comap_iff_of_surjective {S T : Subsemigroup N} : S.comap f ≤ T.comap f ↔ S ≤ T 
Arguments: {M : Type u_1} {N : Type u_2} [Add M] [Add N] {f : AddHom M N} (hf : Function.Surjective ⇑f) {S T : AddSubsemigroup N}
Goal: AddSubsemigroup.comap f S ≤ AddSubsemigroup.comap f T ↔ S ≤ T
-- AddSubsemigroup.comap_strictMono_of_surjective
@[to_additive]
theorem comap_strictMono_of_surjective : StrictMono (comap f) 
Arguments: {M : Type u_1} {N : Type u_2} [Add M] [Add N] {f : AddHom M N} (hf : Function.Surjective ⇑f)
Goal: StrictMono (AddSubsemigroup.comap f)
-- Subsemigroup.comap_strictMono_of_surjective
@[to_additive]
theorem comap_strictMono_of_surjective : StrictMono (comap f) 
Arguments: {M : Type u_1} {N : Type u_2} [Mul M] [Mul N] {f : M →ₙ* N} (hf : Function.Surjective ⇑f)
Goal: StrictMono (Subsemigroup.comap f)
-- MulMemClass.coe_mul
@[to_additive (attr := simp low, norm_cast)]
theorem coe_mul (x y : S') : (↑(x * y) : M) = ↑x * ↑y 
Arguments: {M : Type u_1} {A : Type u_5} [Mul M] [SetLike A M] [hA : MulMemClass A M] (S' : A) (x y : ↥S')
Goal: ↑(x * y) = ↑x * ↑y
-- AddMemClass.coe_add
@[to_additive (attr := simp low, norm_cast)]
theorem coe_mul (x y : S') : (↑(x * y) : M) = ↑x * ↑y 
Arguments: {M : Type u_1} {A : Type u_5} [Add M] [SetLike A M] [hA : AddMemClass A M] (S' : A) (x y : ↥S')
Goal: ↑(x + y) = ↑x + ↑y
-- AddMemClass.mk_add_mk
@[to_additive (attr := simp low)]
theorem mk_mul_mk (x y : M) (hx : x ∈ S') (hy : y ∈ S') :
    (⟨x, hx⟩ : S') * ⟨y, hy⟩ = ⟨x * y, mul_mem hx hy⟩ 
Arguments: {M : Type u_1} {A : Type u_5} [Add M] [SetLike A M] [hA : AddMemClass A M] (S' : A) (x y : M) (hx : x ∈ S') (hy : y ∈ S')
Goal: ⟨x, hx⟩ + ⟨y, hy⟩ = ⟨x + y, ⋯⟩
-- MulMemClass.mk_mul_mk
@[to_additive (attr := simp low)]
theorem mk_mul_mk (x y : M) (hx : x ∈ S') (hy : y ∈ S') :
    (⟨x, hx⟩ : S') * ⟨y, hy⟩ = ⟨x * y, mul_mem hx hy⟩ 
Arguments: {M : Type u_1} {A : Type u_5} [Mul M] [SetLike A M] [hA : MulMemClass A M] (S' : A) (x y : M) (hx : x ∈ S') (hy : y ∈ S')
Goal: ⟨x, hx⟩ * ⟨y, hy⟩ = ⟨x * y, ⋯⟩
-- AddMemClass.add_def
@[to_additive]
theorem mul_def (x y : S') : x * y = ⟨x * y, mul_mem x.2 y.2⟩ 
Arguments: {M : Type u_1} {A : Type u_5} [Add M] [SetLike A M] [hA : AddMemClass A M] (S' : A) (x y : ↥S')
Goal: x + y = ⟨↑x + ↑y, ⋯⟩
-- MulMemClass.mul_def
@[to_additive]
theorem mul_def (x y : S') : x * y = ⟨x * y, mul_mem x.2 y.2⟩ 
Arguments: {M : Type u_1} {A : Type u_5} [Mul M] [SetLike A M] [hA : MulMemClass A M] (S' : A) (x y : ↥S')
Goal: x * y = ⟨↑x * ↑y, ⋯⟩
-- MulMemClass.coe_subtype
@[to_additive (attr := simp)]
theorem coe_subtype : (MulMemClass.subtype S' : S' → M) = Subtype.val 
Arguments: {M : Type u_1} {A : Type u_5} [Mul M] [SetLike A M] [hA : MulMemClass A M] (S' : A)
Goal: ⇑(MulMemClass.subtype S') = Subtype.val
-- AddMemClass.coe_subtype
@[to_additive (attr := simp)]
theorem coe_subtype : (MulMemClass.subtype S' : S' → M) = Subtype.val 
Arguments: {M : Type u_1} {A : Type u_5} [Add M] [SetLike A M] [hA : AddMemClass A M] (S' : A)
Goal: ⇑(AddMemClass.subtype S') = Subtype.val
-- Subsemigroup.topEquiv_symm_apply_coe
@[to_additive (attr := simps)
  "The top additive subsemigroup is isomorphic to the additive semigroup."]
def topEquiv : (⊤ : Subsemigroup M) ≃* M 
Arguments: {M : Type u_1} [Mul M] (x : M)
Goal: ↑(Subsemigroup.topEquiv.symm x) = x
-- AddSubsemigroup.topEquiv_apply
@[to_additive (attr := simps)
  "The top additive subsemigroup is isomorphic to the additive semigroup."]
def topEquiv : (⊤ : Subsemigroup M) ≃* M 
Arguments: {M : Type u_1} [Add M] (x : ↥⊤)
Goal: AddSubsemigroup.topEquiv x = ↑x
-- Subsemigroup.topEquiv_apply
@[to_additive (attr := simps)
  "The top additive subsemigroup is isomorphic to the additive semigroup."]
def topEquiv : (⊤ : Subsemigroup M) ≃* M 
Arguments: {M : Type u_1} [Mul M] (x : ↥⊤)
Goal: Subsemigroup.topEquiv x = ↑x
-- AddSubsemigroup.topEquiv_symm_apply_coe
@[to_additive (attr := simps)
  "The top additive subsemigroup is isomorphic to the additive semigroup."]
def topEquiv : (⊤ : Subsemigroup M) ≃* M 
Arguments: {M : Type u_1} [Add M] (x : M)
Goal: ↑(AddSubsemigroup.topEquiv.symm x) = x
-- AddSubsemigroup.topEquiv_toAddHom
@[to_additive (attr := simp)]
theorem topEquiv_toMulHom :
    ((topEquiv : _ ≃* M) : _ →ₙ* M) = MulMemClass.subtype (⊤ : Subsemigroup M) 
Arguments: {M : Type u_1} [Add M]
Goal: ↑AddSubsemigroup.topEquiv = AddMemClass.subtype ⊤
-- Subsemigroup.topEquiv_toMulHom
@[to_additive (attr := simp)]
theorem topEquiv_toMulHom :
    ((topEquiv : _ ≃* M) : _ →ₙ* M) = MulMemClass.subtype (⊤ : Subsemigroup M) 
Arguments: {M : Type u_1} [Mul M]
Goal: ↑Subsemigroup.topEquiv = MulMemClass.subtype ⊤
-- AddSubsemigroup.coe_equivMapOfInjective_apply
@[to_additive (attr := simp)]
theorem coe_equivMapOfInjective_apply (f : M →ₙ* N) (hf : Function.Injective f) (x : S) :
    (equivMapOfInjective S f hf x : N) = f x 
Arguments: {M : Type u_1} {N : Type u_2} [Add M] [Add N] (S : AddSubsemigroup M) (f : AddHom M N) (hf : Function.Injective ⇑f) (x : ↥S)
Goal: ↑((S.equivMapOfInjective f hf) x) = f ↑x
-- Subsemigroup.coe_equivMapOfInjective_apply
@[to_additive (attr := simp)]
theorem coe_equivMapOfInjective_apply (f : M →ₙ* N) (hf : Function.Injective f) (x : S) :
    (equivMapOfInjective S f hf x : N) = f x 
Arguments: {M : Type u_1} {N : Type u_2} [Mul M] [Mul N] (S : Subsemigroup M) (f : M →ₙ* N) (hf : Function.Injective ⇑f) (x : ↥S)
Goal: ↑((S.equivMapOfInjective f hf) x) = f ↑x
-- Subsemigroup.closure_closure_coe_preimage
@[to_additive (attr := simp)]
theorem closure_closure_coe_preimage {s : Set M} :
    closure ((Subtype.val : closure s → M) ⁻¹' s) = ⊤ 
Arguments: {M : Type u_1} [Mul M] {s : Set M}
Goal: Subsemigroup.closure (Subtype.val ⁻¹' s) = ⊤
-- AddSubsemigroup.closure_closure_coe_preimage
@[to_additive (attr := simp)]
theorem closure_closure_coe_preimage {s : Set M} :
    closure ((Subtype.val : closure s → M) ⁻¹' s) = ⊤ 
Arguments: {M : Type u_1} [Add M] {s : Set M}
Goal: AddSubsemigroup.closure (Subtype.val ⁻¹' s) = ⊤
-- Subsemigroup.coe_prod
@[to_additive coe_prod]
theorem coe_prod (s : Subsemigroup M) (t : Subsemigroup N) :
    (s.prod t : Set (M × N)) = (s : Set M) ×ˢ (t : Set N) 
Arguments: {M : Type u_1} {N : Type u_2} [Mul M] [Mul N] (s : Subsemigroup M) (t : Subsemigroup N)
Goal: ↑(s.prod t) = ↑s ×ˢ ↑t
-- AddSubsemigroup.coe_prod
@[to_additive coe_prod]
theorem coe_prod (s : Subsemigroup M) (t : Subsemigroup N) :
    (s.prod t : Set (M × N)) = (s : Set M) ×ˢ (t : Set N) 
Arguments: {M : Type u_1} {N : Type u_2} [Add M] [Add N] (s : AddSubsemigroup M) (t : AddSubsemigroup N)
Goal: ↑(s.prod t) = ↑s ×ˢ ↑t
-- AddSubsemigroup.mem_prod
@[to_additive mem_prod]
theorem mem_prod {s : Subsemigroup M} {t : Subsemigroup N} {p : M × N} :
    p ∈ s.prod t ↔ p.1 ∈ s ∧ p.2 ∈ t 
Arguments: {M : Type u_1} {N : Type u_2} [Add M] [Add N] {s : AddSubsemigroup M} {t : AddSubsemigroup N} {p : M × N}
Goal: p ∈ s.prod t ↔ p.1 ∈ s ∧ p.2 ∈ t
-- Subsemigroup.mem_prod
@[to_additive mem_prod]
theorem mem_prod {s : Subsemigroup M} {t : Subsemigroup N} {p : M × N} :
    p ∈ s.prod t ↔ p.1 ∈ s ∧ p.2 ∈ t 
Arguments: {M : Type u_1} {N : Type u_2} [Mul M] [Mul N] {s : Subsemigroup M} {t : Subsemigroup N} {p : M × N}
Goal: p ∈ s.prod t ↔ p.1 ∈ s ∧ p.2 ∈ t
-- Subsemigroup.prod_mono
@[to_additive prod_mono]
theorem prod_mono {s₁ s₂ : Subsemigroup M} {t₁ t₂ : Subsemigroup N} (hs : s₁ ≤ s₂) (ht : t₁ ≤ t₂) :
    s₁.prod t₁ ≤ s₂.prod t₂ 
Arguments: {M : Type u_1} {N : Type u_2} [Mul M] [Mul N] {s₁ s₂ : Subsemigroup M} {t₁ t₂ : Subsemigroup N} (hs : s₁ ≤ s₂) (ht : t₁ ≤ t₂)
Goal: s₁.prod t₁ ≤ s₂.prod t₂
-- AddSubsemigroup.prod_mono
@[to_additive prod_mono]
theorem prod_mono {s₁ s₂ : Subsemigroup M} {t₁ t₂ : Subsemigroup N} (hs : s₁ ≤ s₂) (ht : t₁ ≤ t₂) :
    s₁.prod t₁ ≤ s₂.prod t₂ 
Arguments: {M : Type u_1} {N : Type u_2} [Add M] [Add N] {s₁ s₂ : AddSubsemigroup M} {t₁ t₂ : AddSubsemigroup N} (hs : s₁ ≤ s₂) (ht : t₁ ≤ t₂)
Goal: s₁.prod t₁ ≤ s₂.prod t₂
-- AddSubsemigroup.prod_top
@[to_additive prod_top]
theorem prod_top (s : Subsemigroup M) : s.prod (⊤ : Subsemigroup N) = s.comap (MulHom.fst M N) 
Arguments: {M : Type u_1} {N : Type u_2} [Add M] [Add N] (s : AddSubsemigroup M)
Goal: s.prod ⊤ = AddSubsemigroup.comap (AddHom.fst M N) s
-- Subsemigroup.prod_top
@[to_additive prod_top]
theorem prod_top (s : Subsemigroup M) : s.prod (⊤ : Subsemigroup N) = s.comap (MulHom.fst M N) 
Arguments: {M : Type u_1} {N : Type u_2} [Mul M] [Mul N] (s : Subsemigroup M)
Goal: s.prod ⊤ = Subsemigroup.comap (MulHom.fst M N) s
-- Subsemigroup.top_prod
@[to_additive top_prod]
theorem top_prod (s : Subsemigroup N) : (⊤ : Subsemigroup M).prod s = s.comap (MulHom.snd M N) 
Arguments: {M : Type u_1} {N : Type u_2} [Mul M] [Mul N] (s : Subsemigroup N)
Goal: ⊤.prod s = Subsemigroup.comap (MulHom.snd M N) s
-- AddSubsemigroup.top_prod
@[to_additive top_prod]
theorem top_prod (s : Subsemigroup N) : (⊤ : Subsemigroup M).prod s = s.comap (MulHom.snd M N) 
Arguments: {M : Type u_1} {N : Type u_2} [Add M] [Add N] (s : AddSubsemigroup N)
Goal: ⊤.prod s = AddSubsemigroup.comap (AddHom.snd M N) s
-- Subsemigroup.top_prod_top
@[to_additive (attr := simp) top_prod_top]
theorem top_prod_top : (⊤ : Subsemigroup M).prod (⊤ : Subsemigroup N) = ⊤ 
Arguments: {M : Type u_1} {N : Type u_2} [Mul M] [Mul N]
Goal: ⊤.prod ⊤ = ⊤
-- AddSubsemigroup.top_prod_top
@[to_additive (attr := simp) top_prod_top]
theorem top_prod_top : (⊤ : Subsemigroup M).prod (⊤ : Subsemigroup N) = ⊤ 
Arguments: {M : Type u_1} {N : Type u_2} [Add M] [Add N]
Goal: ⊤.prod ⊤ = ⊤
-- AddSubsemigroup.bot_prod_bot
@[to_additive bot_prod_bot]
theorem bot_prod_bot : (⊥ : Subsemigroup M).prod (⊥ : Subsemigroup N) = ⊥ 
Arguments: {M : Type u_1} {N : Type u_2} [Add M] [Add N]
Goal: ⊥.prod ⊥ = ⊥
-- Subsemigroup.bot_prod_bot
@[to_additive bot_prod_bot]
theorem bot_prod_bot : (⊥ : Subsemigroup M).prod (⊥ : Subsemigroup N) = ⊥ 
Arguments: {M : Type u_1} {N : Type u_2} [Mul M] [Mul N]
Goal: ⊥.prod ⊥ = ⊥
-- Subsemigroup.mem_map_equiv
@[to_additive]
theorem mem_map_equiv {f : M ≃* N} {K : Subsemigroup M} {x : N} :
    x ∈ K.map (f : M →ₙ* N) ↔ f.symm x ∈ K 
Arguments: {M : Type u_1} {N : Type u_2} [Mul M] [Mul N] {f : M ≃* N} {K : Subsemigroup M} {x : N}
Goal: x ∈ Subsemigroup.map (↑f) K ↔ f.symm x ∈ K
-- AddSubsemigroup.mem_map_equiv
@[to_additive]
theorem mem_map_equiv {f : M ≃* N} {K : Subsemigroup M} {x : N} :
    x ∈ K.map (f : M →ₙ* N) ↔ f.symm x ∈ K 
Arguments: {M : Type u_1} {N : Type u_2} [Add M] [Add N] {f : M ≃+ N} {K : AddSubsemigroup M} {x : N}
Goal: x ∈ AddSubsemigroup.map (↑f) K ↔ f.symm x ∈ K
-- AddSubsemigroup.map_equiv_eq_comap_symm
@[to_additive]
theorem map_equiv_eq_comap_symm (f : M ≃* N) (K : Subsemigroup M) :
    K.map (f : M →ₙ* N) = K.comap (f.symm : N →ₙ* M) 
Arguments: {M : Type u_1} {N : Type u_2} [Add M] [Add N] (f : M ≃+ N) (K : AddSubsemigroup M)
Goal: AddSubsemigroup.map (↑f) K = AddSubsemigroup.comap (↑f.symm) K
-- Subsemigroup.map_equiv_eq_comap_symm
@[to_additive]
theorem map_equiv_eq_comap_symm (f : M ≃* N) (K : Subsemigroup M) :
    K.map (f : M →ₙ* N) = K.comap (f.symm : N →ₙ* M) 
Arguments: {M : Type u_1} {N : Type u_2} [Mul M] [Mul N] (f : M ≃* N) (K : Subsemigroup M)
Goal: Subsemigroup.map (↑f) K = Subsemigroup.comap (↑f.symm) K
-- AddSubsemigroup.comap_equiv_eq_map_symm
@[to_additive]
theorem comap_equiv_eq_map_symm (f : N ≃* M) (K : Subsemigroup M) :
    K.comap (f : N →ₙ* M) = K.map (f.symm : M →ₙ* N) 
Arguments: {M : Type u_1} {N : Type u_2} [Add M] [Add N] (f : N ≃+ M) (K : AddSubsemigroup M)
Goal: AddSubsemigroup.comap (↑f) K = AddSubsemigroup.map (↑f.symm) K
-- Subsemigroup.comap_equiv_eq_map_symm
@[to_additive]
theorem comap_equiv_eq_map_symm (f : N ≃* M) (K : Subsemigroup M) :
    K.comap (f : N →ₙ* M) = K.map (f.symm : M →ₙ* N) 
Arguments: {M : Type u_1} {N : Type u_2} [Mul M] [Mul N] (f : N ≃* M) (K : Subsemigroup M)
Goal: Subsemigroup.comap (↑f) K = Subsemigroup.map (↑f.symm) K
-- AddSubsemigroup.map_equiv_top
@[to_additive (attr := simp)]
theorem map_equiv_top (f : M ≃* N) : (⊤ : Subsemigroup M).map (f : M →ₙ* N) = ⊤ 
Arguments: {M : Type u_1} {N : Type u_2} [Add M] [Add N] (f : M ≃+ N)
Goal: AddSubsemigroup.map ↑f ⊤ = ⊤
-- Subsemigroup.map_equiv_top
@[to_additive (attr := simp)]
theorem map_equiv_top (f : M ≃* N) : (⊤ : Subsemigroup M).map (f : M →ₙ* N) = ⊤ 
Arguments: {M : Type u_1} {N : Type u_2} [Mul M] [Mul N] (f : M ≃* N)
Goal: Subsemigroup.map ↑f ⊤ = ⊤
-- Subsemigroup.le_prod_iff
@[to_additive le_prod_iff]
theorem le_prod_iff {s : Subsemigroup M} {t : Subsemigroup N} {u : Subsemigroup (M × N)} :
    u ≤ s.prod t ↔ u.map (fst M N) ≤ s ∧ u.map (snd M N) ≤ t 
Arguments: {M : Type u_1} {N : Type u_2} [Mul M] [Mul N] {s : Subsemigroup M} {t : Subsemigroup N} {u : Subsemigroup (M × N)}
Goal: u ≤ s.prod t ↔ Subsemigroup.map (MulHom.fst M N) u ≤ s ∧ Subsemigroup.map (MulHom.snd M N) u ≤ t
-- AddSubsemigroup.le_prod_iff
@[to_additive le_prod_iff]
theorem le_prod_iff {s : Subsemigroup M} {t : Subsemigroup N} {u : Subsemigroup (M × N)} :
    u ≤ s.prod t ↔ u.map (fst M N) ≤ s ∧ u.map (snd M N) ≤ t 
Arguments: {M : Type u_1} {N : Type u_2} [Add M] [Add N] {s : AddSubsemigroup M} {t : AddSubsemigroup N} {u : AddSubsemigroup (M × N)}
Goal: u ≤ s.prod t ↔ AddSubsemigroup.map (AddHom.fst M N) u ≤ s ∧ AddSubsemigroup.map (AddHom.snd M N) u ≤ t
-- MulHom.coe_srange
@[to_additive (attr := simp)]
theorem coe_srange (f : M →ₙ* N) : (f.srange : Set N) = Set.range f 
Arguments: {M : Type u_1} {N : Type u_2} [Mul M] [Mul N] (f : M →ₙ* N)
Goal: ↑f.srange = Set.range ⇑f
-- AddHom.coe_srange
@[to_additive (attr := simp)]
theorem coe_srange (f : M →ₙ* N) : (f.srange : Set N) = Set.range f 
Arguments: {M : Type u_1} {N : Type u_2} [Add M] [Add N] (f : AddHom M N)
Goal: ↑f.srange = Set.range ⇑f
-- AddHom.mem_srange
@[to_additive (attr := simp)]
theorem mem_srange {f : M →ₙ* N} {y : N} : y ∈ f.srange ↔ ∃ x, f x = y 
Arguments: {M : Type u_1} {N : Type u_2} [Add M] [Add N] {f : AddHom M N} {y : N}
Goal: y ∈ f.srange ↔ ∃ x, f x = y
-- MulHom.mem_srange
@[to_additive (attr := simp)]
theorem mem_srange {f : M →ₙ* N} {y : N} : y ∈ f.srange ↔ ∃ x, f x = y 
Arguments: {M : Type u_1} {N : Type u_2} [Mul M] [Mul N] {f : M →ₙ* N} {y : N}
Goal: y ∈ f.srange ↔ ∃ x, f x = y
-- AddHom.srange_eq_map
@[to_additive]
theorem srange_eq_map (f : M →ₙ* N) : f.srange = (⊤ : Subsemigroup M).map f 
Arguments: {M : Type u_1} {N : Type u_2} [Add M] [Add N] (f : AddHom M N)
Goal: f.srange = AddSubsemigroup.map f ⊤
-- MulHom.srange_eq_map
@[to_additive]
theorem srange_eq_map (f : M →ₙ* N) : f.srange = (⊤ : Subsemigroup M).map f 
Arguments: {M : Type u_1} {N : Type u_2} [Mul M] [Mul N] (f : M →ₙ* N)
Goal: f.srange = Subsemigroup.map f ⊤
-- AddHom.map_srange
@[to_additive]
theorem map_srange (g : N →ₙ* P) (f : M →ₙ* N) : f.srange.map g = (g.comp f).srange 
Arguments: {M : Type u_1} {N : Type u_2} {P : Type u_3} [Add M] [Add N] [Add P] (g : AddHom N P) (f : AddHom M N)
Goal: AddSubsemigroup.map g f.srange = (g.comp f).srange
-- MulHom.map_srange
@[to_additive]
theorem map_srange (g : N →ₙ* P) (f : M →ₙ* N) : f.srange.map g = (g.comp f).srange 
Arguments: {M : Type u_1} {N : Type u_2} {P : Type u_3} [Mul M] [Mul N] [Mul P] (g : N →ₙ* P) (f : M →ₙ* N)
Goal: Subsemigroup.map g f.srange = (g.comp f).srange
-- AddHom.srange_top_iff_surjective
@[to_additive]
theorem srange_top_iff_surjective {N} [Mul N] {f : M →ₙ* N} :
    f.srange = (⊤ : Subsemigroup N) ↔ Function.Surjective f 
Arguments: {M : Type u_1} [Add M] {N : Type u_5} [Add N] {f : AddHom M N}
Goal: f.srange = ⊤ ↔ Function.Surjective ⇑f
-- MulHom.srange_top_iff_surjective
@[to_additive]
theorem srange_top_iff_surjective {N} [Mul N] {f : M →ₙ* N} :
    f.srange = (⊤ : Subsemigroup N) ↔ Function.Surjective f 
Arguments: {M : Type u_1} [Mul M] {N : Type u_5} [Mul N] {f : M →ₙ* N}
Goal: f.srange = ⊤ ↔ Function.Surjective ⇑f
-- MulHom.srange_top_of_surjective
@[to_additive (attr := simp)
  "The range of a surjective `AddSemigroup` hom is the whole of the codomain."]
theorem srange_top_of_surjective {N} [Mul N] (f : M →ₙ* N) (hf : Function.Surjective f) :
    f.srange = (⊤ : Subsemigroup N) 
Arguments: {M : Type u_1} [Mul M] {N : Type u_5} [Mul N] (f : M →ₙ* N) (hf : Function.Surjective ⇑f)
Goal: f.srange = ⊤
-- AddHom.srange_top_of_surjective
@[to_additive (attr := simp)
  "The range of a surjective `AddSemigroup` hom is the whole of the codomain."]
theorem srange_top_of_surjective {N} [Mul N] (f : M →ₙ* N) (hf : Function.Surjective f) :
    f.srange = (⊤ : Subsemigroup N) 
Arguments: {M : Type u_1} [Add M] {N : Type u_5} [Add N] (f : AddHom M N) (hf : Function.Surjective ⇑f)
Goal: f.srange = ⊤
-- AddHom.mclosure_preimage_le
@[to_additive]
theorem mclosure_preimage_le (f : M →ₙ* N) (s : Set N) : closure (f ⁻¹' s) ≤ (closure s).comap f 
Arguments: {M : Type u_1} {N : Type u_2} [Add M] [Add N] (f : AddHom M N) (s : Set N)
Goal: AddSubsemigroup.closure (⇑f ⁻¹' s) ≤ AddSubsemigroup.comap f (AddSubsemigroup.closure s)
-- MulHom.mclosure_preimage_le
@[to_additive]
theorem mclosure_preimage_le (f : M →ₙ* N) (s : Set N) : closure (f ⁻¹' s) ≤ (closure s).comap f 
Arguments: {M : Type u_1} {N : Type u_2} [Mul M] [Mul N] (f : M →ₙ* N) (s : Set N)
Goal: Subsemigroup.closure (⇑f ⁻¹' s) ≤ Subsemigroup.comap f (Subsemigroup.closure s)
-- MulHom.map_mclosure
@[to_additive
      "The image under an `AddSemigroup` hom of the `AddSubsemigroup` generated by a set
      equals the `AddSubsemigroup` generated by the image of the set."]
theorem map_mclosure (f : M →ₙ* N) (s : Set M) : (closure s).map f = closure (f '' s) 
Arguments: {M : Type u_1} {N : Type u_2} [Mul M] [Mul N] (f : M →ₙ* N) (s : Set M)
Goal: Subsemigroup.map f (Subsemigroup.closure s) = Subsemigroup.closure (⇑f '' s)
-- AddHom.map_mclosure
@[to_additive
      "The image under an `AddSemigroup` hom of the `AddSubsemigroup` generated by a set
      equals the `AddSubsemigroup` generated by the image of the set."]
theorem map_mclosure (f : M →ₙ* N) (s : Set M) : (closure s).map f = closure (f '' s) 
Arguments: {M : Type u_1} {N : Type u_2} [Add M] [Add N] (f : AddHom M N) (s : Set M)
Goal: AddSubsemigroup.map f (AddSubsemigroup.closure s) = AddSubsemigroup.closure (⇑f '' s)
-- MulHom.restrict_apply
@[to_additive (attr := simp)]
theorem restrict_apply {N : Type*} [Mul N] [SetLike σ M] [MulMemClass σ M] (f : M →ₙ* N) {S : σ}
    (x : S) : f.restrict S x = f x 
Arguments: {M : Type u_1} {σ : Type u_4} [Mul M] {N : Type u_5} [Mul N] [SetLike σ M] [MulMemClass σ M] (f : M →ₙ* N) {S : σ} (x : ↥S)
Goal: (f.restrict S) x = f ↑x
-- AddHom.restrict_apply
@[to_additive (attr := simp)]
theorem restrict_apply {N : Type*} [Mul N] [SetLike σ M] [MulMemClass σ M] (f : M →ₙ* N) {S : σ}
    (x : S) : f.restrict S x = f x 
Arguments: {M : Type u_1} {σ : Type u_4} [Add M] {N : Type u_5} [Add N] [SetLike σ M] [AddMemClass σ M] (f : AddHom M N) {S : σ} (x : ↥S)
Goal: (f.restrict S) x = f ↑x
-- MulHom.codRestrict_apply_coe
@[to_additive (attr := simps)
  "Restriction of an `AddSemigroup` hom to an `AddSubsemigroup` of the codomain."]
def codRestrict [SetLike σ N] [MulMemClass σ N] (f : M →ₙ* N) (S : σ) (h : ∀ x, f x ∈ S) :
    M →ₙ* S 
Arguments: {M : Type u_1} {N : Type u_2} {σ : Type u_4} [Mul M] [Mul N] [SetLike σ N] [MulMemClass σ N] (f : M →ₙ* N) (S : σ) (h : ∀ (x : M), f x ∈ S) (n : M)
Goal: ↑((f.codRestrict S h) n) = f n
-- AddHom.codRestrict_apply_coe
@[to_additive (attr := simps)
  "Restriction of an `AddSemigroup` hom to an `AddSubsemigroup` of the codomain."]
def codRestrict [SetLike σ N] [MulMemClass σ N] (f : M →ₙ* N) (S : σ) (h : ∀ x, f x ∈ S) :
    M →ₙ* S 
Arguments: {M : Type u_1} {N : Type u_2} {σ : Type u_4} [Add M] [Add N] [SetLike σ N] [AddMemClass σ N] (f : AddHom M N) (S : σ) (h : ∀ (x : M), f x ∈ S) (n : M)
Goal: ↑((f.codRestrict S h) n) = f n
-- AddHom.coe_srangeRestrict
@[to_additive (attr := simp)]
theorem coe_srangeRestrict {N} [Mul N] (f : M →ₙ* N) (x : M) : (f.srangeRestrict x : N) = f x 
Arguments: {M : Type u_1} [Add M] {N : Type u_5} [Add N] (f : AddHom M N) (x : M)
Goal: ↑(f.srangeRestrict x) = f x
-- MulHom.coe_srangeRestrict
@[to_additive (attr := simp)]
theorem coe_srangeRestrict {N} [Mul N] (f : M →ₙ* N) (x : M) : (f.srangeRestrict x : N) = f x 
Arguments: {M : Type u_1} [Mul M] {N : Type u_5} [Mul N] (f : M →ₙ* N) (x : M)
Goal: ↑(f.srangeRestrict x) = f x