File: Mathlib/RingTheory/PiTensorProduct.lean

full_name: PiTensorProduct.instOne
code: instance instOne : One (⨂[R] i, A i) 
goal: One (⨂[R] (i : ι), A i)

full_name: PiTensorProduct.one_def
code: lemma one_def : 1 = tprod R (1 : Π i, A i) 
goal: 1 = (PiTensorProduct.tprod R) 1

full_name: PiTensorProduct.instAddCommMonoidWithOne
code: instance instAddCommMonoidWithOne : AddCommMonoidWithOne (⨂[R] i, A i) 
goal: AddCommMonoidWithOne (⨂[R] (i : ι), A i)

full_name: PiTensorProduct.mul
code: /--
The multiplication in tensor product of rings is induced by `(xᵢ) * (yᵢ) = (xᵢ * yᵢ)`
-/
def mul : (⨂[R] i, A i) →ₗ[R] (⨂[R] i, A i) →ₗ[R] (⨂[R] i, A i) 
goal: (⨂[R] (i : ι), A i) →ₗ[R] (⨂[R] (i : ι), A i) →ₗ[R] ⨂[R] (i : ι), A i

full_name: PiTensorProduct.mul_tprod_tprod
code: @[simp] lemma mul_tprod_tprod (x y : (i : ι) → A i) :
    mul (tprod R x) (tprod R y) = tprod R (x * y) 
goal: (PiTensorProduct.mul ((PiTensorProduct.tprod R) x)) ((PiTensorProduct.tprod R) y) = (PiTensorProduct.tprod R) (x * y)

full_name: PiTensorProduct.instMul
code: instance instMul : Mul (⨂[R] i, A i) 
goal: Mul (⨂[R] (i : ι), A i)

full_name: PiTensorProduct.mul_def
code: lemma mul_def (x y : ⨂[R] i, A i) : x * y = mul x y 
goal: x * y = (PiTensorProduct.mul x) y

full_name: PiTensorProduct.tprod_mul_tprod
code: @[simp] lemma tprod_mul_tprod (x y : (i : ι) → A i) :
    tprod R x * tprod R y = tprod R (x * y) 
goal: (PiTensorProduct.tprod R) x * (PiTensorProduct.tprod R) y = (PiTensorProduct.tprod R) (x * y)

full_name: SemiconjBy.tprod
code: theorem _root_.SemiconjBy.tprod {a₁ a₂ a₃ : Π i, A i}
    (ha : SemiconjBy a₁ a₂ a₃) :
    SemiconjBy (tprod R a₁) (tprod R a₂) (tprod R a₃) 
goal: SemiconjBy ((PiTensorProduct.tprod R) a₁) ((PiTensorProduct.tprod R) a₂) ((PiTensorProduct.tprod R) a₃)

full_name: Commute.tprod
code: nonrec theorem _root_.Commute.tprod {a₁ a₂ : Π i, A i} (ha : Commute a₁ a₂) :
    Commute (tprod R a₁) (tprod R a₂) 
goal: Commute ((PiTensorProduct.tprod R) a₁) ((PiTensorProduct.tprod R) a₂)

full_name: PiTensorProduct.smul_tprod_mul_smul_tprod
code: lemma smul_tprod_mul_smul_tprod (r s : R) (x y : Π i, A i) :
    (r • tprod R x) * (s • tprod R y) = (r * s) • tprod R (x * y) 
goal: r • (PiTensorProduct.tprod R) x * s • (PiTensorProduct.tprod R) y = (r * s) • (PiTensorProduct.tprod R) (x * y)

full_name: PiTensorProduct.instNonUnitalNonAssocSemiring
code: instance instNonUnitalNonAssocSemiring : NonUnitalNonAssocSemiring (⨂[R] i, A i) 
goal: NonUnitalNonAssocSemiring (⨂[R] (i : ι), A i)

full_name: PiTensorProduct.one_mul
code: protected lemma one_mul (x : ⨂[R] i, A i) : mul (tprod R 1) x = x 
goal: (PiTensorProduct.mul ((PiTensorProduct.tprod R) 1)) x = x

full_name: PiTensorProduct.mul_one
code: protected lemma mul_one (x : ⨂[R] i, A i) : mul x (tprod R 1) = x 
goal: (PiTensorProduct.mul x) ((PiTensorProduct.tprod R) 1) = x

full_name: PiTensorProduct.instNonAssocSemiring
code: instance instNonAssocSemiring : NonAssocSemiring (⨂[R] i, A i) 
goal: NonAssocSemiring (⨂[R] (i : ι), A i)

full_name: PiTensorProduct.tprodMonoidHom_apply
code: /-- `PiTensorProduct.tprod` as a `MonoidHom`. -/
@[simps]
def tprodMonoidHom : (Π i, A i) →* ⨂[R] i, A i 
goal: (PiTensorProduct.tprodMonoidHom R) a = (PiTensorProduct.tprod R) a

full_name: PiTensorProduct.tprodMonoidHom
code: /-- `PiTensorProduct.tprod` as a `MonoidHom`. -/
@[simps]
def tprodMonoidHom : (Π i, A i) →* ⨂[R] i, A i 
goal: ((i : ι) → A i) →* ⨂[R] (i : ι), A i

full_name: PiTensorProduct.mul_assoc
code: protected lemma mul_assoc (x y z : ⨂[R] i, A i) : mul (mul x y) z = mul x (mul y z) 
goal: (PiTensorProduct.mul ((PiTensorProduct.mul x) y)) z = (PiTensorProduct.mul x) ((PiTensorProduct.mul y) z)

full_name: PiTensorProduct.instNonUnitalSemiring
code: instance instNonUnitalSemiring : NonUnitalSemiring (⨂[R] i, A i) 
goal: NonUnitalSemiring (⨂[R] (i : ι), A i)

full_name: PiTensorProduct.instSemiring
code: instance instSemiring : Semiring (⨂[R] i, A i) 
goal: Semiring (⨂[R] (i : ι), A i)

full_name: PiTensorProduct.instAlgebra
code: instance instAlgebra : Algebra R' (⨂[R] i, A i) 
goal: Algebra R' (⨂[R] (i : ι), A i)

full_name: PiTensorProduct.algebraMap_apply
code: lemma algebraMap_apply (r : R') (i : ι) [DecidableEq ι] :
    algebraMap R' (⨂[R] i, A i) r = tprod R (Pi.mulSingle i (algebraMap R' (A i) r)) 
goal: (algebraMap R' (⨂[R] (i : ι), A i)) r = (PiTensorProduct.tprod R) (Pi.mulSingle i ((algebraMap R' (A i)) r))

full_name: PiTensorProduct.singleAlgHom
code: /--
The map `Aᵢ ⟶ ⨂ᵢ Aᵢ` given by `a ↦ 1 ⊗ ... ⊗ a ⊗ 1 ⊗ ...`
-/
@[simps]
def singleAlgHom [DecidableEq ι] (i : ι) : A i →ₐ[R] ⨂[R] i, A i 
goal: A i →ₐ[R] ⨂[R] (i : ι), A i

full_name: PiTensorProduct.singleAlgHom_apply
code: /--
The map `Aᵢ ⟶ ⨂ᵢ Aᵢ` given by `a ↦ 1 ⊗ ... ⊗ a ⊗ 1 ⊗ ...`
-/
@[simps]
def singleAlgHom [DecidableEq ι] (i : ι) : A i →ₐ[R] ⨂[R] i, A i 
goal: (PiTensorProduct.singleAlgHom i) a = (PiTensorProduct.tprod R) ((MonoidHom.mulSingle A i) a)

full_name: PiTensorProduct.liftAlgHom
code: /--
Lifting a multilinear map to an algebra homomorphism from tensor product
-/
@[simps!]
def liftAlgHom {S : Type*} [Semiring S] [Algebra R S]
    (f : MultilinearMap R A S)
    (one : f 1 = 1) (mul : ∀ x y, f (x * y) = f x * f y) : (⨂[R] i, A i) →ₐ[R] S 
goal: (⨂[R] (i : ι), A i) →ₐ[R] S

full_name: PiTensorProduct.liftAlgHom_apply
code: /--
Lifting a multilinear map to an algebra homomorphism from tensor product
-/
@[simps!]
def liftAlgHom {S : Type*} [Semiring S] [Algebra R S]
    (f : MultilinearMap R A S)
    (one : f 1 = 1) (mul : ∀ x y, f (x * y) = f x * f y) : (⨂[R] i, A i) →ₐ[R] S 
goal: (PiTensorProduct.liftAlgHom f one mul) a = (PiTensorProduct.lift f) a

full_name: PiTensorProduct.tprod_noncommProd
code: @[simp] lemma tprod_noncommProd {κ : Type*} (s : Finset κ) (x : κ → Π i, A i) (hx) :
    tprod R (s.noncommProd x hx) = s.noncommProd (fun k => tprod R (x k))
      (hx.imp fun _ _ => Commute.tprod) 
goal: (PiTensorProduct.tprod R) (s.noncommProd x hx) = s.noncommProd (fun k => (PiTensorProduct.tprod R) (x k)) ⋯

full_name: PiTensorProduct.algHom_ext
code: /-- To show two algebra morphisms from finite tensor products are equal, it suffices to show that
they agree on elements of the form $1 ⊗ ⋯ ⊗ a ⊗ 1 ⊗ ⋯$. -/
@[ext high]
theorem algHom_ext {S : Type*} [Finite ι] [DecidableEq ι] [Semiring S] [Algebra R S]
    ⦃f g : (⨂[R] i, A i) →ₐ[R] S⦄ (h : ∀ i, f.comp (singleAlgHom i) = g.comp (singleAlgHom i)) :
    f = g 
goal: f = g

full_name: PiTensorProduct.instRing
code: instance instRing : Ring (⨂[R] i, A i) 
goal: Ring (⨂[R] (i : ι), A i)

full_name: PiTensorProduct.mul_comm
code: protected lemma mul_comm (x y : ⨂[R] i, A i) : mul x y = mul y x 
goal: (PiTensorProduct.mul x) y = (PiTensorProduct.mul y) x

full_name: PiTensorProduct.instCommSemiring
code: instance instCommSemiring : CommSemiring (⨂[R] i, A i) 
goal: CommSemiring (⨂[R] (i : ι), A i)

full_name: PiTensorProduct.tprod_prod
code: @[simp] lemma tprod_prod {κ : Type*} (s : Finset κ) (x : κ → Π i, A i) :
    tprod R (∏ k ∈ s, x k) = ∏ k ∈ s, tprod R (x k) 
goal: (PiTensorProduct.tprod R) (∏ k ∈ s, x k) = ∏ k ∈ s, (PiTensorProduct.tprod R) (x k)

full_name: PiTensorProduct.constantBaseRingEquiv
code: /--
The algebra equivalence from the tensor product of the constant family with
value `R` to `R`, given by multiplication of the entries.
-/
noncomputable def constantBaseRingEquiv : (⨂[R] _ : ι, R) ≃ₐ[R] R 
goal: (⨂[R] (x : ι), R) ≃ₐ[R] R

full_name: PiTensorProduct.constantBaseRingEquiv_tprod
code: @[simp]
theorem constantBaseRingEquiv_tprod (x : ι → R) :
    constantBaseRingEquiv ι R (tprod R x) = ∏ i, x i 
goal: (PiTensorProduct.constantBaseRingEquiv ι R) ((PiTensorProduct.tprod R) x) = ∏ i : ι, x i

full_name: PiTensorProduct.constantBaseRingEquiv_symm
code: @[simp]
theorem constantBaseRingEquiv_symm (r : R) :
    (constantBaseRingEquiv ι R).symm r = algebraMap _ _ r 
goal: (PiTensorProduct.constantBaseRingEquiv ι R).symm r = (algebraMap R (⨂[R] (x : ι), R)) r

full_name: PiTensorProduct.instCommRing
code: instance instCommRing : CommRing (⨂[R] i, A i) 
goal: CommRing (⨂[R] (i : ι), A i)