/- Copyright (c) 2017 Mario Carneiro. All rights reserved. Released under Apache 2.0 license as described in the file LICENSE. Authors: Mario Carneiro ! This file was ported from Lean 3 source module data.int.cast.prod ! leanprover-community/mathlib commit ee0c179cd3c8a45aa5bffbf1b41d8dbede452865 ! Please do not edit these lines, except to modify the commit id ! if you have ported upstream changes. -/ import Mathlib.Data.Int.Cast.Lemmas import Mathlib.Data.Nat.Cast.Prod /-! # The product of two `AddGroupWithOne`s. -/ namespace Prod variable {αα: Type ?u.2β :β: Type ?u.5Type _} [AddGroupWithOneType _: Type (?u.4076+1)α] [AddGroupWithOneα: Type ?u.14β]β: Type ?u.5instance : AddGroupWithOne (instance: {α : Type u_1} → {β : Type u_2} → [inst : AddGroupWithOne α] → [inst : AddGroupWithOne β] → AddGroupWithOne (α × β)α ×α: Type ?u.14β) := {β: Type ?u.17Prod.instAddMonoidWithOneProd, Prod.instAddGroupSum with intCast := funProd.instAddMonoidWithOneProd: {α : Type ?u.33} → {β : Type ?u.32} → [inst : AddMonoidWithOne α] → [inst : AddMonoidWithOne β] → AddMonoidWithOne (α × β)n => (n: ?m.163n,n: ?m.163n) intCast_ofNat := funn: ?m.163_ =>_: ?m.554Goals accomplished! 🐙α: Type ?u.14
β: Type ?u.17
inst✝¹: AddGroupWithOne α
inst✝: AddGroupWithOne β
src✝¹:= instAddMonoidWithOneProd: AddMonoidWithOne (α × β)
src✝:= instAddGroupSum: AddGroup (α × β)
x✝: ℕIntCast.intCast ↑x✝ = ↑x✝α: Type ?u.14
β: Type ?u.17
inst✝¹: AddGroupWithOne α
inst✝: AddGroupWithOne β
src✝¹:= instAddMonoidWithOneProd: AddMonoidWithOne (α × β)
src✝:= instAddGroupSum: AddGroup (α × β)
x✝: ℕ(↑x✝, ↑x✝) = ↑x✝α: Type ?u.14
β: Type ?u.17
inst✝¹: AddGroupWithOne α
inst✝: AddGroupWithOne β
src✝¹:= instAddMonoidWithOneProd: AddMonoidWithOne (α × β)
src✝:= instAddGroupSum: AddGroup (α × β)
x✝: ℕ(↑x✝, ↑x✝) = ↑x✝α: Type ?u.14
β: Type ?u.17
inst✝¹: AddGroupWithOne α
inst✝: AddGroupWithOne β
src✝¹:= instAddMonoidWithOneProd: AddMonoidWithOne (α × β)
src✝:= instAddGroupSum: AddGroup (α × β)
x✝: ℕIntCast.intCast ↑x✝ = ↑x✝intCast_negSucc := funGoals accomplished! 🐙_ =>_: ?m.561Goals accomplished! 🐙α: Type ?u.14
β: Type ?u.17
inst✝¹: AddGroupWithOne α
inst✝: AddGroupWithOne β
src✝¹:= instAddMonoidWithOneProd: AddMonoidWithOne (α × β)
src✝:= instAddGroupSum: AddGroup (α × β)
x✝: ℕIntCast.intCast (Int.negSucc x✝) = -↑(x✝ + 1)α: Type ?u.14
β: Type ?u.17
inst✝¹: AddGroupWithOne α
inst✝: AddGroupWithOne β
src✝¹:= instAddMonoidWithOneProd: AddMonoidWithOne (α × β)
src✝:= instAddGroupSum: AddGroup (α × β)
x✝: ℕIntCast.intCast (Int.negSucc x✝) = -↑(x✝ + 1)} @[simp] theoremGoals accomplished! 🐙fst_intCast (fst_intCast: ∀ {α : Type u_1} {β : Type u_2} [inst : AddGroupWithOne α] [inst_1 : AddGroupWithOne β] (n : ℤ), (↑n).fst = ↑nn :n: ℤℤ) : (ℤ: Typen :n: ℤα ×α: Type ?u.4076β).fst =β: Type ?u.4079n := rfl #align prod.fst_int_castn: ℤProd.fst_intCast @[simp] theoremProd.fst_intCast: ∀ {α : Type u_1} {β : Type u_2} [inst : AddGroupWithOne α] [inst_1 : AddGroupWithOne β] (n : ℤ), (↑n).fst = ↑nsnd_intCast (snd_intCast: ∀ {α : Type u_2} {β : Type u_1} [inst : AddGroupWithOne α] [inst_1 : AddGroupWithOne β] (n : ℤ), (↑n).snd = ↑nn :n: ℤℤ) : (ℤ: Typen :n: ℤα ×α: Type ?u.4460β).snd =β: Type ?u.4463n := rfl #align prod.snd_int_castn: ℤProd.snd_intCast end ProdProd.snd_intCast: ∀ {α : Type u_2} {β : Type u_1} [inst : AddGroupWithOne α] [inst_1 : AddGroupWithOne β] (n : ℤ), (↑n).snd = ↑n