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) 2022 Eric Wieser. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Eric Wieser
! This file was ported from Lean 3 source module algebra.star.prod
! leanprover-community/mathlib commit 9abfa6f0727d5adc99067e325e15d1a9de17fd8e
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
import Mathlib.Algebra.Star.Basic
import Mathlib.Algebra.Ring.Prod
import Mathlib.Algebra.Module.Prod
/-!
# `Star` on product types
We put a `Star` structure on product types that operates elementwise.
-/
universe u v w
variable {R : Type u} {S : Type v}
namespace Prod
instance [Star R] [Star S] : Star (R × S) where star x := (star: {R : Type ?u.34} → [self : Star R] → R → R
star x.1: {α : Type ?u.43} → {β : Type ?u.42} → α × β → α
1, star: {R : Type ?u.50} → [self : Star R] → R → R
star x.2: {α : Type ?u.59} → {β : Type ?u.58} → α × β → β
2)
@[simp]
theorem fst_star [Star R] [Star S] (x : R × S) : (star: {R : Type ?u.228} → [self : Star R] → R → R
star x).1: {α : Type ?u.254} → {β : Type ?u.253} → α × β → α
1 = star: {R : Type ?u.257} → [self : Star R] → R → R
star x.1: {α : Type ?u.261} → {β : Type ?u.260} → α × β → α
1 :=
rfl: ∀ {α : Sort ?u.271} {a : α}, a = a
rfl
#align prod.fst_star Prod.fst_star
@[simp]
theorem snd_star [Star R] [Star S] (x : R × S) : (star: {R : Type ?u.313} → [self : Star R] → R → R
star x).2: {α : Type ?u.339} → {β : Type ?u.338} → α × β → β
2 = star: {R : Type ?u.342} → [self : Star R] → R → R
star x.2: {α : Type ?u.346} → {β : Type ?u.345} → α × β → β
2 :=
rfl: ∀ {α : Sort ?u.356} {a : α}, a = a
rfl
#align prod.snd_star Prod.snd_star
theorem star_def [Star R] [Star S] (x : R × S) : star: {R : Type ?u.398} → [self : Star R] → R → R
star x = (star: {R : Type ?u.427} → [self : Star R] → R → R
star x.1: {α : Type ?u.438} → {β : Type ?u.437} → α × β → α
1, star: {R : Type ?u.443} → [self : Star R] → R → R
star x.2: {α : Type ?u.454} → {β : Type ?u.453} → α × β → β
2) :=
rfl: ∀ {α : Sort ?u.464} {a : α}, a = a
rfl
#align prod.star_def Prod.star_def
instance [Star R] [Star S] [TrivialStar R] [TrivialStar S] : TrivialStar (R × S)
where star_trivial _ := Prod.ext: ∀ {α : Type ?u.547} {β : Type ?u.548} {p q : α × β}, p.fst = q.fst → p.snd = q.snd → p = q
Prod.ext (star_trivial _) (star_trivial _)
instance [InvolutiveStar: Type ?u.667 → Type ?u.667
InvolutiveStar R] [InvolutiveStar: Type ?u.670 → Type ?u.670
InvolutiveStar S] : InvolutiveStar: Type ?u.673 → Type ?u.673
InvolutiveStar (R × S)
where star_involutive _ := Prod.ext: ∀ {α : Type ?u.715} {β : Type ?u.716} {p q : α × β}, p.fst = q.fst → p.snd = q.snd → p = q
Prod.ext (star_star _) (star_star _)
instance [Semigroup R] [Semigroup S] [StarSemigroup R] [StarSemigroup S] : StarSemigroup (R × S)
where star_mul _ _ := Prod.ext: ∀ {α : Type ?u.1972} {β : Type ?u.1973} {p q : α × β}, p.fst = q.fst → p.snd = q.snd → p = q
Prod.ext (star_mul _ _) (star_mul _ _)
instance [AddMonoid R] [AddMonoid S] [StarAddMonoid R] [StarAddMonoid S] : StarAddMonoid (R × S)
where star_add _ _ := Prod.ext: ∀ {α : Type ?u.2348} {β : Type ?u.2349} {p q : α × β}, p.fst = q.fst → p.snd = q.snd → p = q
Prod.ext (star_add _ _) (star_add _ _)
instance [NonUnitalSemiring: Type ?u.2593 → Type ?u.2593
NonUnitalSemiring R] [NonUnitalSemiring: Type ?u.2596 → Type ?u.2596
NonUnitalSemiring S] [StarRing R] [StarRing S] : StarRing (R × S) :=
{ inferInstanceAs (StarAddMonoid (R × S)),
inferInstanceAs (StarSemigroup (R × S)) with }: StarRing ?m.3757
{ inferInstanceAs: (α : Sort ?u.2652) → [i : α] → α
inferInstanceAs{ inferInstanceAs (StarAddMonoid (R × S)),
inferInstanceAs (StarSemigroup (R × S)) with }: StarRing ?m.3757
(StarAddMonoid{ inferInstanceAs (StarAddMonoid (R × S)),
inferInstanceAs (StarSemigroup (R × S)) with }: StarRing ?m.3757
(R{ inferInstanceAs (StarAddMonoid (R × S)),
inferInstanceAs (StarSemigroup (R × S)) with }: StarRing ?m.3757
× S{ inferInstanceAs (StarAddMonoid (R × S)),
inferInstanceAs (StarSemigroup (R × S)) with }: StarRing ?m.3757
)),
inferInstanceAs: (α : Sort ?u.3651) → [i : α] → α
inferInstanceAs{ inferInstanceAs (StarAddMonoid (R × S)),
inferInstanceAs (StarSemigroup (R × S)) with }: StarRing ?m.3757
(StarSemigroup{ inferInstanceAs (StarAddMonoid (R × S)),
inferInstanceAs (StarSemigroup (R × S)) with }: StarRing ?m.3757
(R{ inferInstanceAs (StarAddMonoid (R × S)),
inferInstanceAs (StarSemigroup (R × S)) with }: StarRing ?m.3757
× S{ inferInstanceAs (StarAddMonoid (R × S)),
inferInstanceAs (StarSemigroup (R × S)) with }: StarRing ?m.3757
)) { inferInstanceAs (StarAddMonoid (R × S)),
inferInstanceAs (StarSemigroup (R × S)) with }: StarRing ?m.3757
with{ inferInstanceAs (StarAddMonoid (R × S)),
inferInstanceAs (StarSemigroup (R × S)) with }: StarRing ?m.3757
}
instance {α : Type w} [SMul: Type ?u.4779 → Type ?u.4778 → Type (max?u.4779?u.4778)
SMul α R] [SMul: Type ?u.4783 → Type ?u.4782 → Type (max?u.4783?u.4782)
SMul α S] [Star α] [Star R] [Star S]
[StarModule α R] [StarModule α S] : StarModule α (R × S)
where star_smul _ _ := Prod.ext: ∀ {α : Type ?u.4969} {β : Type ?u.4970} {p q : α × β}, p.fst = q.fst → p.snd = q.snd → p = q
Prod.ext (star_smul _ _) (star_smul _ _)
end Prod
--Porting note: removing @[simp], `simp` simplifies LHS
theorem Units.embed_product_star [Monoid R] [StarSemigroup R] (u : Rˣ) :
Units.embedProduct R (star: {R : Type ?u.6176} → [self : Star R] → R → R
star u) = star: {R : Type ?u.6763} → [self : Star R] → R → R
star (Units.embedProduct R u) :=
rfl: ∀ {α : Sort ?u.7794} {a : α}, a = a
rfl
#align units.embed_product_star Units.embed_product_star