File: Mathlib/Algebra/Algebra/NonUnitalSubalgebra.lean

full_name: NonUnitalSubalgebraClass.subtype
code: /-- Embedding of a non-unital subalgebra into the non-unital algebra. -/
def subtype (s : S) : s →ₙₐ[R] A 
goal: ↥s →ₙₐ[R] A

full_name: NonUnitalSubalgebraClass.coeSubtype
code: @[simp]
theorem coeSubtype : (subtype s : s → A) = ((↑) : s → A) 
goal: ⇑(NonUnitalSubalgebraClass.subtype s) = Subtype.val

full_name: NonUnitalSubalgebra
code: /-- A non-unital subalgebra is a sub(semi)ring that is also a submodule. -/
structure NonUnitalSubalgebra (R : Type u) (A : Type v) [CommSemiring R]
    [NonUnitalNonAssocSemiring A] [Module R A]
    extends NonUnitalSubsemiring A, Submodule R A : Type v
goal: Type v

full_name: NonUnitalSubalgebra.instSetLike
code: instance : SetLike (NonUnitalSubalgebra R A) A 
goal: SetLike (NonUnitalSubalgebra R A) A

full_name: NonUnitalSubalgebra.instNonUnitalSubsemiringClass
code: instance instNonUnitalSubsemiringClass :
    NonUnitalSubsemiringClass (NonUnitalSubalgebra R A) A 
goal: NonUnitalSubsemiringClass (NonUnitalSubalgebra R A) A

full_name: NonUnitalSubalgebra.instSMulMemClass
code: instance instSMulMemClass : SMulMemClass (NonUnitalSubalgebra R A) R A 
goal: SMulMemClass (NonUnitalSubalgebra R A) R A

full_name: NonUnitalSubalgebra.mem_carrier
code: theorem mem_carrier {s : NonUnitalSubalgebra R A} {x : A} : x ∈ s.carrier ↔ x ∈ s 
goal: x ∈ s.carrier ↔ x ∈ s

full_name: NonUnitalSubalgebra.ext
code: @[ext]
theorem ext {S T : NonUnitalSubalgebra R A} (h : ∀ x : A, x ∈ S ↔ x ∈ T) : S = T 
goal: S = T

full_name: NonUnitalSubalgebra.mem_toNonUnitalSubsemiring
code: @[simp]
theorem mem_toNonUnitalSubsemiring {S : NonUnitalSubalgebra R A} {x} :
    x ∈ S.toNonUnitalSubsemiring ↔ x ∈ S 
goal: x ∈ S.toNonUnitalSubsemiring ↔ x ∈ S

full_name: NonUnitalSubalgebra.coe_toNonUnitalSubsemiring
code: @[simp]
theorem coe_toNonUnitalSubsemiring (S : NonUnitalSubalgebra R A) :
    (↑S.toNonUnitalSubsemiring : Set A) = S 
goal: ↑S.toNonUnitalSubsemiring = ↑S

full_name: NonUnitalSubalgebra.toNonUnitalSubsemiring_injective
code: theorem toNonUnitalSubsemiring_injective :
    Function.Injective
      (toNonUnitalSubsemiring : NonUnitalSubalgebra R A → NonUnitalSubsemiring A) 
goal: Function.Injective NonUnitalSubalgebra.toNonUnitalSubsemiring

full_name: NonUnitalSubalgebra.toNonUnitalSubsemiring_inj
code: theorem toNonUnitalSubsemiring_inj {S U : NonUnitalSubalgebra R A} :
    S.toNonUnitalSubsemiring = U.toNonUnitalSubsemiring ↔ S = U 
goal: S.toNonUnitalSubsemiring = U.toNonUnitalSubsemiring ↔ S = U

full_name: NonUnitalSubalgebra.mem_toSubmodule
code: theorem mem_toSubmodule (S : NonUnitalSubalgebra R A) {x} : x ∈ S.toSubmodule ↔ x ∈ S 
goal: x ∈ S.toSubmodule ↔ x ∈ S

full_name: NonUnitalSubalgebra.coe_toSubmodule
code: @[simp]
theorem coe_toSubmodule (S : NonUnitalSubalgebra R A) : (↑S.toSubmodule : Set A) = S 
goal: ↑S.toSubmodule = ↑S

full_name: NonUnitalSubalgebra.toSubmodule_injective
code: theorem toSubmodule_injective :
    Function.Injective (toSubmodule : NonUnitalSubalgebra R A → Submodule R A) 
goal: Function.Injective NonUnitalSubalgebra.toSubmodule

full_name: NonUnitalSubalgebra.toSubmodule_inj
code: theorem toSubmodule_inj {S U : NonUnitalSubalgebra R A} : S.toSubmodule = U.toSubmodule ↔ S = U 
goal: S.toSubmodule = U.toSubmodule ↔ S = U

full_name: NonUnitalSubalgebra.copy
code: /-- Copy of a non-unital subalgebra with a new `carrier` equal to the old one.
Useful to fix definitional equalities. -/
protected def copy (S : NonUnitalSubalgebra R A) (s : Set A) (hs : s = ↑S) :
    NonUnitalSubalgebra R A 
goal: NonUnitalSubalgebra R A

full_name: NonUnitalSubalgebra.coe_copy
code: @[simp]
theorem coe_copy (S : NonUnitalSubalgebra R A) (s : Set A) (hs : s = ↑S) :
    (S.copy s hs : Set A) = s 
goal: ↑(S.copy s hs) = s

full_name: NonUnitalSubalgebra.copy_eq
code: theorem copy_eq (S : NonUnitalSubalgebra R A) (s : Set A) (hs : s = ↑S) : S.copy s hs = S 
goal: S.copy s hs = S

full_name: NonUnitalSubalgebra.instInhabitedSubtypeMem
code: instance (S : NonUnitalSubalgebra R A) : Inhabited S 
goal: Inhabited ↥S

full_name: NonUnitalSubalgebra.instNonUnitalSubringClass
code: instance instNonUnitalSubringClass : NonUnitalSubringClass (NonUnitalSubalgebra R A) A 
goal: NonUnitalSubringClass (NonUnitalSubalgebra R A) A

full_name: NonUnitalSubalgebra.toNonUnitalSubring
code: /-- A non-unital subalgebra over a ring is also a `Subring`. -/
def toNonUnitalSubring (S : NonUnitalSubalgebra R A) : NonUnitalSubring A 
goal: NonUnitalSubring A

full_name: NonUnitalSubalgebra.mem_toNonUnitalSubring
code: @[simp]
theorem mem_toNonUnitalSubring {S : NonUnitalSubalgebra R A} {x} :
    x ∈ S.toNonUnitalSubring ↔ x ∈ S 
goal: x ∈ S.toNonUnitalSubring ↔ x ∈ S

full_name: NonUnitalSubalgebra.coe_toNonUnitalSubring
code: @[simp]
theorem coe_toNonUnitalSubring (S : NonUnitalSubalgebra R A) :
    (↑S.toNonUnitalSubring : Set A) = S 
goal: ↑S.toNonUnitalSubring = ↑S

full_name: NonUnitalSubalgebra.toNonUnitalSubring_injective
code: theorem toNonUnitalSubring_injective :
    Function.Injective (toNonUnitalSubring : NonUnitalSubalgebra R A → NonUnitalSubring A) 
goal: Function.Injective NonUnitalSubalgebra.toNonUnitalSubring

full_name: NonUnitalSubalgebra.toNonUnitalSubring_inj
code: theorem toNonUnitalSubring_inj {S U : NonUnitalSubalgebra R A} :
    S.toNonUnitalSubring = U.toNonUnitalSubring ↔ S = U 
goal: S.toNonUnitalSubring = U.toNonUnitalSubring ↔ S = U

full_name: NonUnitalSubalgebra.toNonUnitalNonAssocSemiring
code: instance toNonUnitalNonAssocSemiring [CommSemiring R] [NonUnitalNonAssocSemiring A] [Module R A]
    (S : NonUnitalSubalgebra R A) : NonUnitalNonAssocSemiring S 
goal: NonUnitalNonAssocSemiring ↥S

full_name: NonUnitalSubalgebra.toNonUnitalSemiring
code: instance toNonUnitalSemiring [CommSemiring R] [NonUnitalSemiring A] [Module R A]
    (S : NonUnitalSubalgebra R A) : NonUnitalSemiring S 
goal: NonUnitalSemiring ↥S

full_name: NonUnitalSubalgebra.toNonUnitalCommSemiring
code: instance toNonUnitalCommSemiring [CommSemiring R] [NonUnitalCommSemiring A] [Module R A]
    (S : NonUnitalSubalgebra R A) : NonUnitalCommSemiring S 
goal: NonUnitalCommSemiring ↥S

full_name: NonUnitalSubalgebra.toNonUnitalNonAssocRing
code: instance toNonUnitalNonAssocRing [CommRing R] [NonUnitalNonAssocRing A] [Module R A]
    (S : NonUnitalSubalgebra R A) : NonUnitalNonAssocRing S 
goal: NonUnitalNonAssocRing ↥S

full_name: NonUnitalSubalgebra.toNonUnitalRing
code: instance toNonUnitalRing [CommRing R] [NonUnitalRing A] [Module R A]
    (S : NonUnitalSubalgebra R A) : NonUnitalRing S 
goal: NonUnitalRing ↥S

full_name: NonUnitalSubalgebra.toNonUnitalCommRing
code: instance toNonUnitalCommRing [CommRing R] [NonUnitalCommRing A] [Module R A]
    (S : NonUnitalSubalgebra R A) : NonUnitalCommRing S 
goal: NonUnitalCommRing ↥S

full_name: NonUnitalSubalgebra.toSubmodule'
code: /-- The forgetful map from `NonUnitalSubalgebra` to `Submodule` as an `OrderEmbedding` -/
def toSubmodule' [CommSemiring R] [NonUnitalNonAssocSemiring A] [Module R A] :
    NonUnitalSubalgebra R A ↪o Submodule R A 
goal: NonUnitalSubalgebra R A ↪o Submodule R A

full_name: NonUnitalSubalgebra.toNonUnitalSubsemiring'
code: /-- The forgetful map from `NonUnitalSubalgebra` to `NonUnitalSubsemiring` as an
`OrderEmbedding` -/
def toNonUnitalSubsemiring' [CommSemiring R] [NonUnitalNonAssocSemiring A] [Module R A] :
    NonUnitalSubalgebra R A ↪o NonUnitalSubsemiring A 
goal: NonUnitalSubalgebra R A ↪o NonUnitalSubsemiring A

full_name: NonUnitalSubalgebra.toNonUnitalSubring'
code: /-- The forgetful map from `NonUnitalSubalgebra` to `NonUnitalSubsemiring` as an
`OrderEmbedding` -/
def toNonUnitalSubring' [CommRing R] [NonUnitalNonAssocRing A] [Module R A] :
    NonUnitalSubalgebra R A ↪o NonUnitalSubring A 
goal: NonUnitalSubalgebra R A ↪o NonUnitalSubring A

full_name: NonUnitalSubalgebra.instModule'
code: instance instModule' [Semiring R'] [SMul R' R] [Module R' A] [IsScalarTower R' R A] : Module R' S 
goal: Module R' ↥S

full_name: NonUnitalSubalgebra.instModule
code: instance instModule : Module R S 
goal: Module R ↥S

full_name: NonUnitalSubalgebra.instIsScalarTower'
code: instance instIsScalarTower' [Semiring R'] [SMul R' R] [Module R' A] [IsScalarTower R' R A] :
    IsScalarTower R' R S 
goal: IsScalarTower R' R ↥S

full_name: NonUnitalSubalgebra.instIsScalarTowerSubtypeMem
code: instance [IsScalarTower R A A] : IsScalarTower R S S 
goal: IsScalarTower R ↥S ↥S

full_name: NonUnitalSubalgebra.instSMulCommClass'
code: instance instSMulCommClass' [Semiring R'] [SMul R' R] [Module R' A] [IsScalarTower R' R A]
    [SMulCommClass R' R A] : SMulCommClass R' R S 
goal: SMulCommClass R' R ↥S

full_name: NonUnitalSubalgebra.instSMulCommClass
code: instance instSMulCommClass [SMulCommClass R A A] : SMulCommClass R S S 
goal: SMulCommClass R ↥S ↥S

full_name: NonUnitalSubalgebra.noZeroSMulDivisors_bot
code: instance noZeroSMulDivisors_bot [NoZeroSMulDivisors R A] : NoZeroSMulDivisors R S 
goal: NoZeroSMulDivisors R ↥S

full_name: NonUnitalSubalgebra.coe_add
code: protected theorem coe_add (x y : S) : (↑(x + y) : A) = ↑x + ↑y 
goal: ↑(x + y) = ↑x + ↑y

full_name: NonUnitalSubalgebra.coe_mul
code: protected theorem coe_mul (x y : S) : (↑(x * y) : A) = ↑x * ↑y 
goal: ↑(x * y) = ↑x * ↑y

full_name: NonUnitalSubalgebra.coe_zero
code: protected theorem coe_zero : ((0 : S) : A) = 0 
goal: ↑0 = 0

full_name: NonUnitalSubalgebra.coe_neg
code: protected theorem coe_neg {R : Type u} {A : Type v} [CommRing R] [Ring A] [Algebra R A]
    {S : NonUnitalSubalgebra R A} (x : S) : (↑(-x) : A) = -↑x 
goal: ↑(-x) = -↑x

full_name: NonUnitalSubalgebra.coe_sub
code: protected theorem coe_sub {R : Type u} {A : Type v} [CommRing R] [Ring A] [Algebra R A]
    {S : NonUnitalSubalgebra R A} (x y : S) : (↑(x - y) : A) = ↑x - ↑y 
goal: ↑(x - y) = ↑x - ↑y

full_name: NonUnitalSubalgebra.coe_smul
code: @[simp, norm_cast]
theorem coe_smul [Semiring R'] [SMul R' R] [Module R' A] [IsScalarTower R' R A] (r : R') (x : S) :
    ↑(r • x) = r • (x : A) 
goal: ↑(r • x) = r • ↑x

full_name: NonUnitalSubalgebra.coe_eq_zero
code: protected theorem coe_eq_zero {x : S} : (x : A) = 0 ↔ x = 0 
goal: ↑x = 0 ↔ x = 0

full_name: NonUnitalSubalgebra.toNonUnitalSubsemiring_subtype
code: @[simp]
theorem toNonUnitalSubsemiring_subtype :
    NonUnitalSubsemiringClass.subtype S = NonUnitalSubalgebraClass.subtype (R := R) S 
goal: NonUnitalSubsemiringClass.subtype S = ↑(NonUnitalSubalgebraClass.subtype S)

full_name: NonUnitalSubalgebra.toSubring_subtype
code: @[simp]
theorem toSubring_subtype {R A : Type*} [CommRing R] [Ring A] [Algebra R A]
    (S : NonUnitalSubalgebra R A) :
    NonUnitalSubringClass.subtype S = NonUnitalSubalgebraClass.subtype (R := R) S 
goal: NonUnitalSubringClass.subtype S = ↑(NonUnitalSubalgebraClass.subtype S)

full_name: NonUnitalSubalgebra.toSubmoduleEquiv
code: /-- Linear equivalence between `S : Submodule R A` and `S`. Though these types are equal,
we define it as a `LinearEquiv` to avoid type equalities. -/
def toSubmoduleEquiv (S : NonUnitalSubalgebra R A) : S.toSubmodule ≃ₗ[R] S 
goal: ↥S.toSubmodule ≃ₗ[R] ↥S

full_name: NonUnitalSubalgebra.map
code: /-- Transport a non-unital subalgebra via an algebra homomorphism. -/
def map (f : F) (S : NonUnitalSubalgebra R A) : NonUnitalSubalgebra R B 
goal: NonUnitalSubalgebra R B

full_name: NonUnitalSubalgebra.map_mono
code: theorem map_mono {S₁ S₂ : NonUnitalSubalgebra R A} {f : F} :
    S₁ ≤ S₂ → (map f S₁ : NonUnitalSubalgebra R B) ≤ map f S₂ 
goal: S₁ ≤ S₂ → NonUnitalSubalgebra.map f S₁ ≤ NonUnitalSubalgebra.map f S₂

full_name: NonUnitalSubalgebra.map_injective
code: theorem map_injective {f : F} (hf : Function.Injective f) :
    Function.Injective (map f : NonUnitalSubalgebra R A → NonUnitalSubalgebra R B) 
goal: Function.Injective (NonUnitalSubalgebra.map f)

full_name: NonUnitalSubalgebra.map_id
code: @[simp]
theorem map_id (S : NonUnitalSubalgebra R A) : map (NonUnitalAlgHom.id R A) S = S 
goal: NonUnitalSubalgebra.map (NonUnitalAlgHom.id R A) S = S

full_name: NonUnitalSubalgebra.map_map
code: theorem map_map (S : NonUnitalSubalgebra R A) (g : B →ₙₐ[R] C) (f : A →ₙₐ[R] B) :
    (S.map f).map g = S.map (g.comp f) 
goal: NonUnitalSubalgebra.map g (NonUnitalSubalgebra.map f S) = NonUnitalSubalgebra.map (g.comp f) S

full_name: NonUnitalSubalgebra.mem_map
code: @[simp]
theorem mem_map {S : NonUnitalSubalgebra R A} {f : F} {y : B} : y ∈ map f S ↔ ∃ x ∈ S, f x = y 
goal: y ∈ NonUnitalSubalgebra.map f S ↔ ∃ x ∈ S, f x = y

full_name: NonUnitalSubalgebra.map_toSubmodule
code: theorem map_toSubmodule {S : NonUnitalSubalgebra R A} {f : F} :
    -- TODO: introduce a better coercion from `NonUnitalAlgHomClass` to `LinearMap`
    (map f S).toSubmodule = Submodule.map (LinearMapClass.linearMap f) S.toSubmodule 
goal: (NonUnitalSubalgebra.map f S).toSubmodule = Submodule.map (LinearMapClass.linearMap f) S.toSubmodule

full_name: NonUnitalSubalgebra.map_toNonUnitalSubsemiring
code: theorem map_toNonUnitalSubsemiring {S : NonUnitalSubalgebra R A} {f : F} :
    (map f S).toNonUnitalSubsemiring = S.toNonUnitalSubsemiring.map (f : A →ₙ+* B) 
goal: (NonUnitalSubalgebra.map f S).toNonUnitalSubsemiring = NonUnitalSubsemiring.map (↑f) S.toNonUnitalSubsemiring

full_name: NonUnitalSubalgebra.coe_map
code: @[simp]
theorem coe_map (S : NonUnitalSubalgebra R A) (f : F) : (map f S : Set B) = f '' S 
goal: ↑(NonUnitalSubalgebra.map f S) = ⇑f '' ↑S

full_name: NonUnitalSubalgebra.comap
code: /-- Preimage of a non-unital subalgebra under an algebra homomorphism. -/
def comap (f : F) (S : NonUnitalSubalgebra R B) : NonUnitalSubalgebra R A 
goal: NonUnitalSubalgebra R A

full_name: NonUnitalSubalgebra.map_le
code: theorem map_le {S : NonUnitalSubalgebra R A} {f : F} {U : NonUnitalSubalgebra R B} :
    map f S ≤ U ↔ S ≤ comap f U 
goal: NonUnitalSubalgebra.map f S ≤ U ↔ S ≤ NonUnitalSubalgebra.comap f U

full_name: NonUnitalSubalgebra.gc_map_comap
code: theorem gc_map_comap (f : F) :
    GaloisConnection (map f : NonUnitalSubalgebra R A → NonUnitalSubalgebra R B) (comap f) 
goal: GaloisConnection (NonUnitalSubalgebra.map f) (NonUnitalSubalgebra.comap f)

full_name: NonUnitalSubalgebra.mem_comap
code: @[simp]
theorem mem_comap (S : NonUnitalSubalgebra R B) (f : F) (x : A) : x ∈ comap f S ↔ f x ∈ S 
goal: x ∈ NonUnitalSubalgebra.comap f S ↔ f x ∈ S

full_name: NonUnitalSubalgebra.coe_comap
code: @[simp, norm_cast]
theorem coe_comap (S : NonUnitalSubalgebra R B) (f : F) : (comap f S : Set A) = f ⁻¹' (S : Set B) 
goal: ↑(NonUnitalSubalgebra.comap f S) = ⇑f ⁻¹' ↑S

full_name: NonUnitalSubalgebra.noZeroDivisors
code: instance noZeroDivisors {R A : Type*} [CommSemiring R] [NonUnitalSemiring A] [NoZeroDivisors A]
    [Module R A] (S : NonUnitalSubalgebra R A) : NoZeroDivisors S 
goal: NoZeroDivisors ↥S

full_name: Submodule.toNonUnitalSubalgebra
code: /-- A submodule closed under multiplication is a non-unital subalgebra. -/
def toNonUnitalSubalgebra (p : Submodule R A) (h_mul : ∀ x y, x ∈ p → y ∈ p → x * y ∈ p) :
    NonUnitalSubalgebra R A 
goal: NonUnitalSubalgebra R A

full_name: Submodule.mem_toNonUnitalSubalgebra
code: @[simp]
theorem mem_toNonUnitalSubalgebra {p : Submodule R A} {h_mul} {x} :
    x ∈ p.toNonUnitalSubalgebra h_mul ↔ x ∈ p 
goal: x ∈ p.toNonUnitalSubalgebra h_mul ↔ x ∈ p

full_name: Submodule.coe_toNonUnitalSubalgebra
code: @[simp]
theorem coe_toNonUnitalSubalgebra (p : Submodule R A) (h_mul) :
    (p.toNonUnitalSubalgebra h_mul : Set A) = p 
goal: ↑(p.toNonUnitalSubalgebra h_mul) = ↑p

full_name: Submodule.toNonUnitalSubalgebra_mk
code: theorem toNonUnitalSubalgebra_mk (p : Submodule R A) hmul :
    p.toNonUnitalSubalgebra hmul =
      NonUnitalSubalgebra.mk ⟨⟨⟨p, p.add_mem⟩, p.zero_mem⟩, hmul _ _⟩ p.smul_mem' 
goal: p.toNonUnitalSubalgebra hmul = { carrier := ↑p, add_mem' := ⋯, zero_mem' := ⋯, mul_mem' := ⋯, smul_mem' := ⋯ }

full_name: Submodule.toNonUnitalSubalgebra_toSubmodule
code: @[simp]
theorem toNonUnitalSubalgebra_toSubmodule (p : Submodule R A) (h_mul) :
    (p.toNonUnitalSubalgebra h_mul).toSubmodule = p 
goal: (p.toNonUnitalSubalgebra h_mul).toSubmodule = p

full_name: NonUnitalSubalgebra.toSubmodule_toNonUnitalSubalgebra
code: @[simp]
theorem _root_.NonUnitalSubalgebra.toSubmodule_toNonUnitalSubalgebra (S : NonUnitalSubalgebra R A) :
    (S.toSubmodule.toNonUnitalSubalgebra fun _ _ => mul_mem (s := S)) = S 
goal: S.toSubmodule.toNonUnitalSubalgebra ⋯ = S

full_name: NonUnitalAlgHom.range
code: /-- Range of an `NonUnitalAlgHom` as a non-unital subalgebra. -/
protected def range (φ : F) : NonUnitalSubalgebra R B 
goal: NonUnitalSubalgebra R B

full_name: NonUnitalAlgHom.mem_range
code: @[simp]
theorem mem_range (φ : F) {y : B} :
    y ∈ (NonUnitalAlgHom.range φ : NonUnitalSubalgebra R B) ↔ ∃ x : A, φ x = y 
goal: y ∈ NonUnitalAlgHom.range φ ↔ ∃ x, φ x = y

full_name: NonUnitalAlgHom.mem_range_self
code: theorem mem_range_self (φ : F) (x : A) :
    φ x ∈ (NonUnitalAlgHom.range φ : NonUnitalSubalgebra R B) 
goal: φ x ∈ NonUnitalAlgHom.range φ

full_name: NonUnitalAlgHom.coe_range
code: @[simp]
theorem coe_range (φ : F) :
    ((NonUnitalAlgHom.range φ : NonUnitalSubalgebra R B) : Set B) = Set.range (φ : A → B) 
goal: ↑(NonUnitalAlgHom.range φ) = Set.range ⇑φ

full_name: NonUnitalAlgHom.range_comp
code: theorem range_comp (f : A →ₙₐ[R] B) (g : B →ₙₐ[R] C) :
    NonUnitalAlgHom.range (g.comp f) = (NonUnitalAlgHom.range f).map g 
goal: NonUnitalAlgHom.range (g.comp f) = NonUnitalSubalgebra.map g (NonUnitalAlgHom.range f)

full_name: NonUnitalAlgHom.range_comp_le_range
code: theorem range_comp_le_range (f : A →ₙₐ[R] B) (g : B →ₙₐ[R] C) :
    NonUnitalAlgHom.range (g.comp f) ≤ NonUnitalAlgHom.range g 
goal: NonUnitalAlgHom.range (g.comp f) ≤ NonUnitalAlgHom.range g

full_name: NonUnitalAlgHom.codRestrict
code: /-- Restrict the codomain of a non-unital algebra homomorphism. -/
def codRestrict (f : F) (S : NonUnitalSubalgebra R B) (hf : ∀ x, f x ∈ S) : A →ₙₐ[R] S 
goal: A →ₙₐ[R] ↥S

full_name: NonUnitalAlgHom.subtype_comp_codRestrict
code: @[simp]
theorem subtype_comp_codRestrict (f : F) (S : NonUnitalSubalgebra R B) (hf : ∀ x : A, f x ∈ S) :
    (NonUnitalSubalgebraClass.subtype S).comp (NonUnitalAlgHom.codRestrict f S hf) = f 
goal: (NonUnitalSubalgebraClass.subtype S).comp (NonUnitalAlgHom.codRestrict f S hf) =
  NonUnitalAlgHomClass.toNonUnitalAlgHom f

full_name: NonUnitalAlgHom.coe_codRestrict
code: @[simp]
theorem coe_codRestrict (f : F) (S : NonUnitalSubalgebra R B) (hf : ∀ x, f x ∈ S) (x : A) :
    ↑(NonUnitalAlgHom.codRestrict f S hf x) = f x 
goal: ↑((NonUnitalAlgHom.codRestrict f S hf) x) = f x

full_name: NonUnitalAlgHom.injective_codRestrict
code: theorem injective_codRestrict (f : F) (S : NonUnitalSubalgebra R B) (hf : ∀ x : A, f x ∈ S) :
    Function.Injective (NonUnitalAlgHom.codRestrict f S hf) ↔ Function.Injective f 
goal: Function.Injective ⇑(NonUnitalAlgHom.codRestrict f S hf) ↔ Function.Injective ⇑f

full_name: NonUnitalAlgHom.rangeRestrict
code: /-- Restrict the codomain of an `NonUnitalAlgHom` `f` to `f.range`.

This is the bundled version of `Set.rangeFactorization`. -/
abbrev rangeRestrict (f : F) : A →ₙₐ[R] (NonUnitalAlgHom.range f : NonUnitalSubalgebra R B) 
goal: A →ₙₐ[R] ↥(NonUnitalAlgHom.range f)

full_name: NonUnitalAlgHom.equalizer
code: /-- The equalizer of two non-unital `R`-algebra homomorphisms -/
def equalizer (ϕ ψ : F) : NonUnitalSubalgebra R A 
goal: NonUnitalSubalgebra R A

full_name: NonUnitalAlgHom.mem_equalizer
code: @[simp]
theorem mem_equalizer (φ ψ : F) (x : A) :
    x ∈ NonUnitalAlgHom.equalizer φ ψ ↔ φ x = ψ x 
goal: x ∈ NonUnitalAlgHom.equalizer φ ψ ↔ φ x = ψ x

full_name: NonUnitalAlgHom.fintypeRange
code: /-- The range of a morphism of algebras is a fintype, if the domain is a fintype.

Note that this instance can cause a diamond with `Subtype.fintype` if `B` is also a fintype. -/
instance fintypeRange [Fintype A] [DecidableEq B] (φ : F) :
    Fintype (NonUnitalAlgHom.range φ) 
goal: Fintype ↥(NonUnitalAlgHom.range φ)

full_name: NonUnitalAlgebra.adjoin
code: /-- The minimal non-unital subalgebra that includes `s`. -/
def adjoin (s : Set A) : NonUnitalSubalgebra R A 
goal: NonUnitalSubalgebra R A

full_name: NonUnitalAlgebra.adjoin_toSubmodule
code: theorem adjoin_toSubmodule (s : Set A) :
    (adjoin R s).toSubmodule = Submodule.span R (NonUnitalSubsemiring.closure s : Set A) 
goal: (NonUnitalAlgebra.adjoin R s).toSubmodule = Submodule.span R ↑(NonUnitalSubsemiring.closure s)

full_name: NonUnitalAlgebra.subset_adjoin
code: @[aesop safe 20 apply (rule_sets := [SetLike])]
theorem subset_adjoin {s : Set A} : s ⊆ adjoin R s 
goal: s ⊆ ↑(NonUnitalAlgebra.adjoin R s)

full_name: NonUnitalAlgebra.self_mem_adjoin_singleton
code: theorem self_mem_adjoin_singleton (x : A) : x ∈ adjoin R ({x} : Set A) 
goal: x ∈ NonUnitalAlgebra.adjoin R {x}

full_name: NonUnitalAlgebra.adjoin_induction
code: /-- If some predicate holds for all `x ∈ (s : Set A)` and this predicate is closed under the
`algebraMap`, addition, multiplication and star operations, then it holds for `a ∈ adjoin R s`. -/
@[elab_as_elim]
theorem adjoin_induction {s : Set A} {p : A → Prop} {a : A} (h : a ∈ adjoin R s)
    (mem : ∀ x ∈ s, p x) (add : ∀ x y, p x → p y → p (x + y)) (zero : p 0)
    (mul : ∀ x y, p x → p y → p (x * y)) (smul : ∀ (r : R) x, p x → p (r • x)) : p a 
goal: p a

full_name: NonUnitalAlgebra.adjoin_induction₂
code: @[elab_as_elim]
theorem adjoin_induction₂ {s : Set A} {p : A → A → Prop} {a b : A} (ha : a ∈ adjoin R s)
    (hb : b ∈ adjoin R s) (Hs : ∀ x ∈ s, ∀ y ∈ s, p x y) (H0_left : ∀ y, p 0 y)
    (H0_right : ∀ x, p x 0) (Hadd_left : ∀ x₁ x₂ y, p x₁ y → p x₂ y → p (x₁ + x₂) y)
    (Hadd_right : ∀ x y₁ y₂, p x y₁ → p x y₂ → p x (y₁ + y₂))
    (Hmul_left : ∀ x₁ x₂ y, p x₁ y → p x₂ y → p (x₁ * x₂) y)
    (Hmul_right : ∀ x y₁ y₂, p x y₁ → p x y₂ → p x (y₁ * y₂))
    (Hsmul_left : ∀ (r : R) x y, p x y → p (r • x) y)
    (Hsmul_right : ∀ (r : R) x y, p x y → p x (r • y)) : p a b 
goal: p a b

full_name: NonUnitalAlgebra.adjoin_induction_subtype
code: /-- The difference with `NonUnitalAlgebra.adjoin_induction` is that this acts on the subtype. -/
@[elab_as_elim]
lemma adjoin_induction_subtype {s : Set A} {p : adjoin R s → Prop} (a : adjoin R s)
    (mem : ∀ x (h : x ∈ s), p ⟨x, subset_adjoin R h⟩)
    (add : ∀ x y, p x → p y → p (x + y)) (zero : p 0)
    (mul : ∀ x y, p x → p y → p (x * y)) (smul : ∀ (r : R) x, p x → p (r • x)) : p a 
goal: p a

full_name: NonUnitalAlgebra.adjoin_induction'
code: /-- A dependent version of `NonUnitalAlgebra.adjoin_induction`. -/
theorem adjoin_induction' {s : Set A} {p : ∀ x, x ∈ adjoin R s → Prop}
    (mem : ∀ (x) (h : x ∈ s), p x (subset_adjoin R h))
    (add : ∀ x hx y hy, p x hx → p y hy → p (x + y) (add_mem ‹_› ‹_›))
    (zero : p 0 (zero_mem _))
    (mul : ∀ x hx y hy, p x hx → p y hy → p (x * y) (mul_mem ‹_› ‹_›))
    (smul : ∀ (r : R) (x hx), p x hx → p (r • x) (SMulMemClass.smul_mem _ ‹_›))
    {a} (ha : a ∈ adjoin R s) : p a ha 
goal: p a ha

full_name: NonUnitalAlgebra.gc
code: protected theorem gc : GaloisConnection (adjoin R : Set A → NonUnitalSubalgebra R A) (↑) 
goal: GaloisConnection (NonUnitalAlgebra.adjoin R) SetLike.coe

full_name: NonUnitalAlgebra.gi
code: /-- Galois insertion between `adjoin` and `Subtype.val`. -/
protected def gi : GaloisInsertion (adjoin R : Set A → NonUnitalSubalgebra R A) (↑) 
goal: GaloisInsertion (NonUnitalAlgebra.adjoin R) SetLike.coe

full_name: NonUnitalAlgebra.instCompleteLatticeNonUnitalSubalgebra
code: instance : CompleteLattice (NonUnitalSubalgebra R A) 
goal: CompleteLattice (NonUnitalSubalgebra R A)

full_name: NonUnitalAlgebra.adjoin_le
code: theorem adjoin_le {S : NonUnitalSubalgebra R A} {s : Set A} (hs : s ⊆ S) : adjoin R s ≤ S 
goal: NonUnitalAlgebra.adjoin R s ≤ S

full_name: NonUnitalAlgebra.adjoin_le_iff
code: theorem adjoin_le_iff {S : NonUnitalSubalgebra R A} {s : Set A} : adjoin R s ≤ S ↔ s ⊆ S 
goal: NonUnitalAlgebra.adjoin R s ≤ S ↔ s ⊆ ↑S

full_name: NonUnitalAlgebra.adjoin_union
code: theorem adjoin_union (s t : Set A) : adjoin R (s ∪ t) = adjoin R s ⊔ adjoin R t 
goal: NonUnitalAlgebra.adjoin R (s ∪ t) = NonUnitalAlgebra.adjoin R s ⊔ NonUnitalAlgebra.adjoin R t

full_name: NonUnitalAlgebra.adjoin_eq
code: lemma adjoin_eq (s : NonUnitalSubalgebra R A) : adjoin R (s : Set A) = s 
goal: NonUnitalAlgebra.adjoin R ↑s = s

full_name: NonUnitalAlgebra.adjoin_eq_span
code: lemma adjoin_eq_span (s : Set A) : (adjoin R s).toSubmodule = span R (Subsemigroup.closure s) 
goal: (NonUnitalAlgebra.adjoin R s).toSubmodule = Submodule.span R ↑(Subsemigroup.closure s)

full_name: NonUnitalAlgebra.span_eq_toSubmodule
code: @[simp]
lemma span_eq_toSubmodule (s : NonUnitalSubalgebra R A) :
    Submodule.span R (s : Set A) = s.toSubmodule 
goal: Submodule.span R ↑s = s.toSubmodule

full_name: NonUnitalAlgebra.adjoin_empty
code: @[simp]
theorem adjoin_empty : adjoin R (∅ : Set A) = ⊥ 
goal: NonUnitalAlgebra.adjoin R ∅ = ⊥

full_name: NonUnitalAlgebra.adjoin_univ
code: @[simp]
theorem adjoin_univ : adjoin R (Set.univ : Set A) = ⊤ 
goal: NonUnitalAlgebra.adjoin R Set.univ = ⊤

full_name: NonUnitalAlgHom.map_adjoin
code: lemma _root_.NonUnitalAlgHom.map_adjoin (f : F) (s : Set A) :
    map f (adjoin R s) = adjoin R (f '' s) 
goal: NonUnitalSubalgebra.map f (NonUnitalAlgebra.adjoin R s) = NonUnitalAlgebra.adjoin R (⇑f '' s)

full_name: NonUnitalAlgHom.map_adjoin_singleton
code: @[simp]
lemma _root_.NonUnitalAlgHom.map_adjoin_singleton (f : F) (x : A) :
    map f (adjoin R {x}) = adjoin R {f x} 
goal: NonUnitalSubalgebra.map f (NonUnitalAlgebra.adjoin R {x}) = NonUnitalAlgebra.adjoin R {f x}

full_name: NonUnitalAlgebra.coe_top
code: @[simp]
theorem coe_top : (↑(⊤ : NonUnitalSubalgebra R A) : Set A) = Set.univ 
goal: ↑⊤ = Set.univ

full_name: NonUnitalAlgebra.mem_top
code: @[simp]
theorem mem_top {x : A} : x ∈ (⊤ : NonUnitalSubalgebra R A) 
goal: x ∈ ⊤

full_name: NonUnitalAlgebra.top_toSubmodule
code: @[simp]
theorem top_toSubmodule : (⊤ : NonUnitalSubalgebra R A).toSubmodule = ⊤ 
goal: ⊤.toSubmodule = ⊤

full_name: NonUnitalAlgebra.top_toNonUnitalSubsemiring
code: @[simp]
theorem top_toNonUnitalSubsemiring : (⊤ : NonUnitalSubalgebra R A).toNonUnitalSubsemiring = ⊤ 
goal: ⊤.toNonUnitalSubsemiring = ⊤

full_name: NonUnitalAlgebra.top_toSubring
code: @[simp]
theorem top_toSubring {R A : Type*} [CommRing R] [NonUnitalNonAssocRing A] [Module R A]
    [IsScalarTower R A A] [SMulCommClass R A A] :
    (⊤ : NonUnitalSubalgebra R A).toNonUnitalSubring = ⊤ 
goal: ⊤.toNonUnitalSubring = ⊤

full_name: NonUnitalAlgebra.toSubmodule_eq_top
code: @[simp]
theorem toSubmodule_eq_top {S : NonUnitalSubalgebra R A} : S.toSubmodule = ⊤ ↔ S = ⊤ 
goal: S.toSubmodule = ⊤ ↔ S = ⊤

full_name: NonUnitalAlgebra.toNonUnitalSubsemiring_eq_top
code: @[simp]
theorem toNonUnitalSubsemiring_eq_top {S : NonUnitalSubalgebra R A} :
    S.toNonUnitalSubsemiring = ⊤ ↔ S = ⊤ 
goal: S.toNonUnitalSubsemiring = ⊤ ↔ S = ⊤

full_name: NonUnitalAlgebra.to_subring_eq_top
code: @[simp]
theorem to_subring_eq_top {R A : Type*} [CommRing R] [Ring A] [Algebra R A]
    {S : NonUnitalSubalgebra R A} : S.toNonUnitalSubring = ⊤ ↔ S = ⊤ 
goal: S.toNonUnitalSubring = ⊤ ↔ S = ⊤

full_name: NonUnitalAlgebra.mem_sup_left
code: theorem mem_sup_left {S T : NonUnitalSubalgebra R A} : ∀ {x : A}, x ∈ S → x ∈ S ⊔ T 
goal: x ∈ S → x ∈ S ⊔ T

full_name: NonUnitalAlgebra.mem_sup_right
code: theorem mem_sup_right {S T : NonUnitalSubalgebra R A} : ∀ {x : A}, x ∈ T → x ∈ S ⊔ T 
goal: x ∈ T → x ∈ S ⊔ T

full_name: NonUnitalAlgebra.mul_mem_sup
code: theorem mul_mem_sup {S T : NonUnitalSubalgebra R A} {x y : A} (hx : x ∈ S) (hy : y ∈ T) :
    x * y ∈ S ⊔ T 
goal: x * y ∈ S ⊔ T

full_name: NonUnitalAlgebra.map_sup
code: theorem map_sup (f : F) (S T : NonUnitalSubalgebra R A) :
    ((S ⊔ T).map f : NonUnitalSubalgebra R B) = S.map f ⊔ T.map f 
goal: NonUnitalSubalgebra.map f (S ⊔ T) = NonUnitalSubalgebra.map f S ⊔ NonUnitalSubalgebra.map f T

full_name: NonUnitalAlgebra.coe_inf
code: @[simp, norm_cast]
theorem coe_inf (S T : NonUnitalSubalgebra R A) : (↑(S ⊓ T) : Set A) = (S : Set A) ∩ T 
goal: ↑(S ⊓ T) = ↑S ∩ ↑T

full_name: NonUnitalAlgebra.mem_inf
code: @[simp]
theorem mem_inf {S T : NonUnitalSubalgebra R A} {x : A} : x ∈ S ⊓ T ↔ x ∈ S ∧ x ∈ T 
goal: x ∈ S ⊓ T ↔ x ∈ S ∧ x ∈ T

full_name: NonUnitalAlgebra.inf_toSubmodule
code: @[simp]
theorem inf_toSubmodule (S T : NonUnitalSubalgebra R A) :
    (S ⊓ T).toSubmodule = S.toSubmodule ⊓ T.toSubmodule 
goal: (S ⊓ T).toSubmodule = S.toSubmodule ⊓ T.toSubmodule

full_name: NonUnitalAlgebra.inf_toNonUnitalSubsemiring
code: @[simp]
theorem inf_toNonUnitalSubsemiring (S T : NonUnitalSubalgebra R A) :
    (S ⊓ T).toNonUnitalSubsemiring = S.toNonUnitalSubsemiring ⊓ T.toNonUnitalSubsemiring 
goal: (S ⊓ T).toNonUnitalSubsemiring = S.toNonUnitalSubsemiring ⊓ T.toNonUnitalSubsemiring

full_name: NonUnitalAlgebra.coe_sInf
code: @[simp, norm_cast]
theorem coe_sInf (S : Set (NonUnitalSubalgebra R A)) : (↑(sInf S) : Set A) = ⋂ s ∈ S, ↑s 
goal: ↑(sInf S) = ⋂ s ∈ S, ↑s

full_name: NonUnitalAlgebra.mem_sInf
code: theorem mem_sInf {S : Set (NonUnitalSubalgebra R A)} {x : A} : x ∈ sInf S ↔ ∀ p ∈ S, x ∈ p 
goal: x ∈ sInf S ↔ ∀ p ∈ S, x ∈ p

full_name: NonUnitalAlgebra.sInf_toSubmodule
code: @[simp]
theorem sInf_toSubmodule (S : Set (NonUnitalSubalgebra R A)) :
    (sInf S).toSubmodule = sInf (NonUnitalSubalgebra.toSubmodule '' S) 
goal: (sInf S).toSubmodule = sInf (NonUnitalSubalgebra.toSubmodule '' S)

full_name: NonUnitalAlgebra.sInf_toNonUnitalSubsemiring
code: @[simp]
theorem sInf_toNonUnitalSubsemiring (S : Set (NonUnitalSubalgebra R A)) :
    (sInf S).toNonUnitalSubsemiring = sInf (NonUnitalSubalgebra.toNonUnitalSubsemiring '' S) 
goal: (sInf S).toNonUnitalSubsemiring = sInf (NonUnitalSubalgebra.toNonUnitalSubsemiring '' S)

full_name: NonUnitalAlgebra.coe_iInf
code: @[simp, norm_cast]
theorem coe_iInf {ι : Sort*} {S : ι → NonUnitalSubalgebra R A} :
    (↑(⨅ i, S i) : Set A) = ⋂ i, S i 
goal: ↑(⨅ i, S i) = ⋂ i, ↑(S i)

full_name: NonUnitalAlgebra.mem_iInf
code: theorem mem_iInf {ι : Sort*} {S : ι → NonUnitalSubalgebra R A} {x : A} :
    (x ∈ ⨅ i, S i) ↔ ∀ i, x ∈ S i 
goal: x ∈ ⨅ i, S i ↔ ∀ (i : ι), x ∈ S i

full_name: NonUnitalAlgebra.iInf_toSubmodule
code: @[simp]
theorem iInf_toSubmodule {ι : Sort*} (S : ι → NonUnitalSubalgebra R A) :
    (⨅ i, S i).toSubmodule = ⨅ i, (S i).toSubmodule 
goal: (⨅ i, S i).toSubmodule = ⨅ i, (S i).toSubmodule

full_name: NonUnitalAlgebra.instInhabitedNonUnitalSubalgebra
code: instance : Inhabited (NonUnitalSubalgebra R A) 
goal: Inhabited (NonUnitalSubalgebra R A)

full_name: NonUnitalAlgebra.mem_bot
code: theorem mem_bot {x : A} : x ∈ (⊥ : NonUnitalSubalgebra R A) ↔ x = 0 
goal: x ∈ ⊥ ↔ x = 0

full_name: NonUnitalAlgebra.toSubmodule_bot
code: theorem toSubmodule_bot : (⊥ : NonUnitalSubalgebra R A).toSubmodule = ⊥ 
goal: ⊥.toSubmodule = ⊥

full_name: NonUnitalAlgebra.coe_bot
code: @[simp]
theorem coe_bot : ((⊥ : NonUnitalSubalgebra R A) : Set A) = {0} 
goal: ↑⊥ = {0}

full_name: NonUnitalAlgebra.eq_top_iff
code: theorem eq_top_iff {S : NonUnitalSubalgebra R A} : S = ⊤ ↔ ∀ x : A, x ∈ S 
goal: S = ⊤ ↔ ∀ (x : A), x ∈ S

full_name: NonUnitalAlgebra.range_top_iff_surjective
code: theorem range_top_iff_surjective (f : A →ₙₐ[R] B) :
    NonUnitalAlgHom.range f = (⊤ : NonUnitalSubalgebra R B) ↔ Function.Surjective f 
goal: NonUnitalAlgHom.range f = ⊤ ↔ Function.Surjective ⇑f

full_name: NonUnitalAlgebra.range_id
code: @[simp]
theorem range_id : NonUnitalAlgHom.range (NonUnitalAlgHom.id R A) = ⊤ 
goal: NonUnitalAlgHom.range (NonUnitalAlgHom.id R A) = ⊤

full_name: NonUnitalAlgebra.map_top
code: @[simp]
theorem map_top (f : A →ₙₐ[R] B) : (⊤ : NonUnitalSubalgebra R A).map f = NonUnitalAlgHom.range f 
goal: NonUnitalSubalgebra.map f ⊤ = NonUnitalAlgHom.range f

full_name: NonUnitalAlgebra.map_bot
code: @[simp]
theorem map_bot (f : A →ₙₐ[R] B) : (⊥ : NonUnitalSubalgebra R A).map f = ⊥ 
goal: NonUnitalSubalgebra.map f ⊥ = ⊥

full_name: NonUnitalAlgebra.comap_top
code: @[simp]
theorem comap_top (f : A →ₙₐ[R] B) : (⊤ : NonUnitalSubalgebra R B).comap f = ⊤ 
goal: NonUnitalSubalgebra.comap f ⊤ = ⊤

full_name: NonUnitalAlgebra.toTop
code: /-- `NonUnitalAlgHom` to `⊤ : NonUnitalSubalgebra R A`. -/
def toTop : A →ₙₐ[R] (⊤ : NonUnitalSubalgebra R A) 
goal: A →ₙₐ[R] ↥⊤

full_name: NonUnitalSubalgebra.subsingleton_of_subsingleton
code: instance subsingleton_of_subsingleton [Subsingleton A] : Subsingleton (NonUnitalSubalgebra R A) 
goal: Subsingleton (NonUnitalSubalgebra R A)

full_name: NonUnitalAlgHom.subsingleton
code: instance _root_.NonUnitalAlgHom.subsingleton [Subsingleton (NonUnitalSubalgebra R A)] :
    Subsingleton (A →ₙₐ[R] B) 
goal: Subsingleton (A →ₙₐ[R] B)

full_name: NonUnitalSubalgebra.range_val
code: theorem range_val : NonUnitalAlgHom.range (NonUnitalSubalgebraClass.subtype S) = S 
goal: NonUnitalAlgHom.range (NonUnitalSubalgebraClass.subtype S) = S

full_name: NonUnitalSubalgebra.inclusion
code: /-- The map `S → T` when `S` is a non-unital subalgebra contained in the non-unital subalgebra `T`.

This is the non-unital subalgebra version of `Submodule.inclusion`, or `Subring.inclusion`  -/
def inclusion {S T : NonUnitalSubalgebra R A} (h : S ≤ T) : S →ₙₐ[R] T 
goal: ↥S →ₙₐ[R] ↥T

full_name: NonUnitalSubalgebra.inclusion_injective
code: theorem inclusion_injective {S T : NonUnitalSubalgebra R A} (h : S ≤ T) :
    Function.Injective (inclusion h) 
goal: Function.Injective ⇑(NonUnitalSubalgebra.inclusion h)

full_name: NonUnitalSubalgebra.inclusion_self
code: @[simp]
theorem inclusion_self {S : NonUnitalSubalgebra R A} :
    inclusion (le_refl S) = NonUnitalAlgHom.id R S 
goal: NonUnitalSubalgebra.inclusion ⋯ = NonUnitalAlgHom.id R ↥S

full_name: NonUnitalSubalgebra.inclusion_mk
code: @[simp]
theorem inclusion_mk {S T : NonUnitalSubalgebra R A} (h : S ≤ T) (x : A) (hx : x ∈ S) :
    inclusion h ⟨x, hx⟩ = ⟨x, h hx⟩ 
goal: (NonUnitalSubalgebra.inclusion h) ⟨x, hx⟩ = ⟨x, ⋯⟩

full_name: NonUnitalSubalgebra.inclusion_right
code: theorem inclusion_right {S T : NonUnitalSubalgebra R A} (h : S ≤ T) (x : T) (m : (x : A) ∈ S) :
    inclusion h ⟨x, m⟩ = x 
goal: (NonUnitalSubalgebra.inclusion h) ⟨↑x, m⟩ = x

full_name: NonUnitalSubalgebra.inclusion_inclusion
code: @[simp]
theorem inclusion_inclusion {S T U : NonUnitalSubalgebra R A} (hst : S ≤ T) (htu : T ≤ U) (x : S) :
    inclusion htu (inclusion hst x) = inclusion (le_trans hst htu) x 
goal: (NonUnitalSubalgebra.inclusion htu) ((NonUnitalSubalgebra.inclusion hst) x) = (NonUnitalSubalgebra.inclusion ⋯) x

full_name: NonUnitalSubalgebra.coe_inclusion
code: @[simp]
theorem coe_inclusion {S T : NonUnitalSubalgebra R A} (h : S ≤ T) (s : S) :
    (inclusion h s : A) = s 
goal: ↑((NonUnitalSubalgebra.inclusion h) s) = ↑s

full_name: NonUnitalSubalgebra.prod
code: /-- The product of two non-unital subalgebras is a non-unital subalgebra. -/
def prod : NonUnitalSubalgebra R (A × B) 
goal: NonUnitalSubalgebra R (A × B)

full_name: NonUnitalSubalgebra.coe_prod
code: @[simp]
theorem coe_prod : (prod S S₁ : Set (A × B)) = (S : Set A) ×ˢ S₁ 
goal: ↑(S.prod S₁) = ↑S ×ˢ ↑S₁

full_name: NonUnitalSubalgebra.prod_toSubmodule
code: theorem prod_toSubmodule : (S.prod S₁).toSubmodule = S.toSubmodule.prod S₁.toSubmodule 
goal: (S.prod S₁).toSubmodule = S.toSubmodule.prod S₁.toSubmodule

full_name: NonUnitalSubalgebra.mem_prod
code: @[simp]
theorem mem_prod {S : NonUnitalSubalgebra R A} {S₁ : NonUnitalSubalgebra R B} {x : A × B} :
    x ∈ prod S S₁ ↔ x.1 ∈ S ∧ x.2 ∈ S₁ 
goal: x ∈ S.prod S₁ ↔ x.1 ∈ S ∧ x.2 ∈ S₁

full_name: NonUnitalSubalgebra.prod_top
code: @[simp]
theorem prod_top : (prod ⊤ ⊤ : NonUnitalSubalgebra R (A × B)) = ⊤ 
goal: ⊤.prod ⊤ = ⊤

full_name: NonUnitalSubalgebra.prod_mono
code: theorem prod_mono {S T : NonUnitalSubalgebra R A} {S₁ T₁ : NonUnitalSubalgebra R B} :
    S ≤ T → S₁ ≤ T₁ → prod S S₁ ≤ prod T T₁ 
goal: S ≤ T → S₁ ≤ T₁ → S.prod S₁ ≤ T.prod T₁

full_name: NonUnitalSubalgebra.prod_inf_prod
code: @[simp]
theorem prod_inf_prod {S T : NonUnitalSubalgebra R A} {S₁ T₁ : NonUnitalSubalgebra R B} :
    S.prod S₁ ⊓ T.prod T₁ = (S ⊓ T).prod (S₁ ⊓ T₁) 
goal: S.prod S₁ ⊓ T.prod T₁ = (S ⊓ T).prod (S₁ ⊓ T₁)

full_name: NonUnitalSubalgebra.coe_iSup_of_directed
code: theorem coe_iSup_of_directed [Nonempty ι] {S : ι → NonUnitalSubalgebra R A}
    (dir : Directed (· ≤ ·) S) : ↑(iSup S) = ⋃ i, (S i : Set A) 
goal: ↑(iSup S) = ⋃ i, ↑(S i)

full_name: NonUnitalSubalgebra.iSupLift
code: /-- Define an algebra homomorphism on a directed supremum of non-unital subalgebras by defining
it on each non-unital subalgebra, and proving that it agrees on the intersection of
non-unital subalgebras. -/
noncomputable def iSupLift [Nonempty ι] (K : ι → NonUnitalSubalgebra R A) (dir : Directed (· ≤ ·) K)
    (f : ∀ i, K i →ₙₐ[R] B) (hf : ∀ (i j : ι) (h : K i ≤ K j), f i = (f j).comp (inclusion h))
    (T : NonUnitalSubalgebra R A) (hT : T = iSup K) : ↥T →ₙₐ[R] B 
goal: ↥T →ₙₐ[R] B

full_name: NonUnitalSubalgebra.iSupLift_inclusion
code: @[simp]
theorem iSupLift_inclusion {i : ι} (x : K i) (h : K i ≤ T) :
    iSupLift K dir f hf T hT (inclusion h x) = f i x 
goal: (NonUnitalSubalgebra.iSupLift K dir f hf T hT) ((NonUnitalSubalgebra.inclusion h) x) = (f i) x

full_name: NonUnitalSubalgebra.iSupLift_comp_inclusion
code: @[simp]
theorem iSupLift_comp_inclusion {i : ι} (h : K i ≤ T) :
    (iSupLift K dir f hf T hT).comp (inclusion h) = f i 
goal: (NonUnitalSubalgebra.iSupLift K dir f hf T hT).comp (NonUnitalSubalgebra.inclusion h) = f i

full_name: NonUnitalSubalgebra.iSupLift_mk
code: @[simp]
theorem iSupLift_mk {i : ι} (x : K i) (hx : (x : A) ∈ T) :
    iSupLift K dir f hf T hT ⟨x, hx⟩ = f i x 
goal: (NonUnitalSubalgebra.iSupLift K dir f hf T hT) ⟨↑x, hx⟩ = (f i) x

full_name: NonUnitalSubalgebra.iSupLift_of_mem
code: theorem iSupLift_of_mem {i : ι} (x : T) (hx : (x : A) ∈ K i) :
    iSupLift K dir f hf T hT x = f i ⟨x, hx⟩ 
goal: (NonUnitalSubalgebra.iSupLift K dir f hf T hT) x = (f i) ⟨↑x, hx⟩

full_name: Set.smul_mem_center
code: theorem _root_.Set.smul_mem_center (r : R) {a : A} (ha : a ∈ Set.center A) :
    r • a ∈ Set.center A 
goal: r • a ∈ Set.center A

full_name: NonUnitalSubalgebra.center
code: /-- The center of a non-unital algebra is the set of elements which commute with every element.
They form a non-unital subalgebra. -/
def center : NonUnitalSubalgebra R A 
goal: NonUnitalSubalgebra R A

full_name: NonUnitalSubalgebra.coe_center
code: theorem coe_center : (center R A : Set A) = Set.center A 
goal: ↑(NonUnitalSubalgebra.center R A) = Set.center A

full_name: NonUnitalSubalgebra.center.instNonUnitalCommSemiring
code: /-- The center of a non-unital algebra is commutative and associative -/
instance center.instNonUnitalCommSemiring : NonUnitalCommSemiring (center R A) 
goal: NonUnitalCommSemiring ↥(NonUnitalSubalgebra.center R A)

full_name: NonUnitalSubalgebra.center.instNonUnitalCommRing
code: instance center.instNonUnitalCommRing {A : Type*} [NonUnitalNonAssocRing A] [Module R A]
    [IsScalarTower R A A] [SMulCommClass R A A] : NonUnitalCommRing (center R A) 
goal: NonUnitalCommRing ↥(NonUnitalSubalgebra.center R A)

full_name: NonUnitalSubalgebra.center_toNonUnitalSubsemiring
code: @[simp]
theorem center_toNonUnitalSubsemiring :
    (center R A).toNonUnitalSubsemiring = NonUnitalSubsemiring.center A 
goal: (NonUnitalSubalgebra.center R A).toNonUnitalSubsemiring = NonUnitalSubsemiring.center A

full_name: NonUnitalSubalgebra.center_toNonUnitalSubring
code: @[simp] lemma center_toNonUnitalSubring (R A : Type*) [CommRing R] [NonUnitalRing A]
    [Module R A] [IsScalarTower R A A] [SMulCommClass R A A] :
    (center R A).toNonUnitalSubring = NonUnitalSubring.center A 
goal: (NonUnitalSubalgebra.center R A).toNonUnitalSubring = NonUnitalSubring.center A

full_name: NonUnitalSubalgebra.center_eq_top
code: @[simp]
theorem center_eq_top (A : Type*) [NonUnitalCommSemiring A] [Module R A] [IsScalarTower R A A]
    [SMulCommClass R A A] : center R A = ⊤ 
goal: NonUnitalSubalgebra.center R A = ⊤

full_name: NonUnitalSubalgebra.mem_center_iff
code: theorem mem_center_iff {a : A} : a ∈ center R A ↔ ∀ b : A, b * a = a * b 
goal: a ∈ NonUnitalSubalgebra.center R A ↔ ∀ (b : A), b * a = a * b

full_name: Set.smul_mem_centralizer
code: @[simp]
theorem _root_.Set.smul_mem_centralizer {s : Set A} (r : R) {a : A} (ha : a ∈ s.centralizer) :
    r • a ∈ s.centralizer 
goal: r • a ∈ s.centralizer

full_name: NonUnitalSubalgebra.centralizer
code: /-- The centralizer of a set as a non-unital subalgebra. -/
def centralizer (s : Set A) : NonUnitalSubalgebra R A 
goal: NonUnitalSubalgebra R A

full_name: NonUnitalSubalgebra.coe_centralizer
code: @[simp, norm_cast]
theorem coe_centralizer (s : Set A) : (centralizer R s : Set A) = s.centralizer 
goal: ↑(NonUnitalSubalgebra.centralizer R s) = s.centralizer

full_name: NonUnitalSubalgebra.mem_centralizer_iff
code: theorem mem_centralizer_iff {s : Set A} {z : A} : z ∈ centralizer R s ↔ ∀ g ∈ s, g * z = z * g 
goal: z ∈ NonUnitalSubalgebra.centralizer R s ↔ ∀ g ∈ s, g * z = z * g

full_name: NonUnitalSubalgebra.centralizer_le
code: theorem centralizer_le (s t : Set A) (h : s ⊆ t) : centralizer R t ≤ centralizer R s 
goal: NonUnitalSubalgebra.centralizer R t ≤ NonUnitalSubalgebra.centralizer R s

full_name: NonUnitalSubalgebra.centralizer_univ
code: @[simp]
theorem centralizer_univ : centralizer R Set.univ = center R A 
goal: NonUnitalSubalgebra.centralizer R Set.univ = NonUnitalSubalgebra.center R A

full_name: nonUnitalSubalgebraOfNonUnitalSubsemiring
code: /-- A non-unital subsemiring is a non-unital `ℕ`-subalgebra. -/
def nonUnitalSubalgebraOfNonUnitalSubsemiring (S : NonUnitalSubsemiring R) :
    NonUnitalSubalgebra ℕ R 
goal: NonUnitalSubalgebra ℕ R

full_name: mem_nonUnitalSubalgebraOfNonUnitalSubsemiring
code: @[simp]
theorem mem_nonUnitalSubalgebraOfNonUnitalSubsemiring {x : R} {S : NonUnitalSubsemiring R} :
    x ∈ nonUnitalSubalgebraOfNonUnitalSubsemiring S ↔ x ∈ S 
goal: x ∈ nonUnitalSubalgebraOfNonUnitalSubsemiring S ↔ x ∈ S

full_name: nonUnitalSubalgebraOfNonUnitalSubring
code: /-- A non-unital subring is a non-unital `ℤ`-subalgebra. -/
def nonUnitalSubalgebraOfNonUnitalSubring (S : NonUnitalSubring R) : NonUnitalSubalgebra ℤ R 
goal: NonUnitalSubalgebra ℤ R

full_name: mem_nonUnitalSubalgebraOfNonUnitalSubring
code: @[simp]
theorem mem_nonUnitalSubalgebraOfNonUnitalSubring {x : R} {S : NonUnitalSubring R} :
    x ∈ nonUnitalSubalgebraOfNonUnitalSubring S ↔ x ∈ S 
goal: x ∈ nonUnitalSubalgebraOfNonUnitalSubring S ↔ x ∈ S