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) 2017 Mario Carneiro. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Mario Carneiro, Gabriel Ebner

! This file was ported from Lean 3 source module data.int.cast.basic
! leanprover-community/mathlib commit 70d50ecfd4900dd6d328da39ab7ebd516abe4025
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
import Mathlib.Data.Int.Cast.Defs
import Mathlib.Algebra.Group.Basic

/-!
# Cast of integers (additional theorems)

This file proves additional properties about the *canonical* homomorphism from
the integers into an additive group with a one (`Int.cast`).

There is also `Data.Int.Cast.Lemmas`,
which includes lemmas stated in terms of algebraic homomorphisms,
and results involving the order structure of `β„€`.

By contrast, this file's only import beyond `Data.Int.Cast.Defs` is `Algebra.Group.Basic`.
-/


universe u

namespace Nat

variable {
R: Type u
R
:
Type u: Type (u+1)
Type u
} [
AddGroupWithOne: Type ?u.4 β†’ Type ?u.4
AddGroupWithOne
R: Type u
R
] @[simp, norm_cast] theorem
cast_sub: βˆ€ {R : Type u} [inst : AddGroupWithOne R] {m n : β„•}, m ≀ n β†’ ↑(n - m) = ↑n - ↑m
cast_sub
{
m: ?m.12
m
n} (
h: m ≀ n
h
:
m: ?m.12
m
≀
n: ?m.15
n
) : ((
n: ?m.15
n
-
m: ?m.12
m
:
β„•: Type
β„•
) :
R: Type u
R
) =
n: ?m.15
n
-
m: ?m.12
m
:=
eq_sub_of_add_eq: βˆ€ {G : Type ?u.329} [inst : AddGroup G] {a b c : G}, a + c = b β†’ a = b - c
eq_sub_of_add_eq
<|

Goals accomplished! πŸ™
R: Type u

inst✝: AddGroupWithOne R

m, n: β„•

h: m ≀ n


↑(n - m) + ↑m = ↑n
R: Type u

inst✝: AddGroupWithOne R

m, n: β„•

h: m ≀ n


↑(n - m) + ↑m = ↑n
R: Type u

inst✝: AddGroupWithOne R

m, n: β„•

h: m ≀ n


↑(n - m + m) = ↑n
R: Type u

inst✝: AddGroupWithOne R

m, n: β„•

h: m ≀ n


↑(n - m) + ↑m = ↑n
R: Type u

inst✝: AddGroupWithOne R

m, n: β„•

h: m ≀ n


↑n = ↑n

Goals accomplished! πŸ™
#align nat.cast_sub
Nat.cast_subβ‚“: βˆ€ {R : Type u} [inst : AddGroupWithOne R] {m n : β„•}, m ≀ n β†’ ↑(n - m) = ↑n - ↑m
Nat.cast_subβ‚“
-- `HasLiftT` appeared in the type signature @[simp, norm_cast] theorem
cast_pred: βˆ€ {n : β„•}, 0 < n β†’ ↑(n - 1) = ↑n - 1
cast_pred
: βˆ€ {
n: ?m.552
n
},
0: ?m.558
0
<
n: ?m.552
n
β†’ ((
n: ?m.552
n
-
1: ?m.616
1
:
β„•: Type
β„•
) :
R: Type u
R
) =
n: ?m.552
n
-
1: ?m.730
1
| 0,
h: 0 < 0
h
=>

Goals accomplished! πŸ™
R: Type u

inst✝: AddGroupWithOne R

h: 0 < 0


↑(0 - 1) = ↑0 - 1

Goals accomplished! πŸ™
| n + 1, _ =>

Goals accomplished! πŸ™
R: Type u

inst✝: AddGroupWithOne R

n: β„•

x✝: 0 < n + 1


↑(n + 1 - 1) = ↑(n + 1) - 1
R: Type u

inst✝: AddGroupWithOne R

n: β„•

x✝: 0 < n + 1


↑(n + 1 - 1) = ↑(n + 1) - 1
R: Type u

inst✝: AddGroupWithOne R

n: β„•

x✝: 0 < n + 1


↑(n + 1 - 1) = ↑n + 1 - 1
R: Type u

inst✝: AddGroupWithOne R

n: β„•

x✝: 0 < n + 1


↑(n + 1 - 1) = ↑(n + 1) - 1
R: Type u

inst✝: AddGroupWithOne R

n: β„•

x✝: 0 < n + 1


↑(n + 1 - 1) = ↑n
R: Type u

inst✝: AddGroupWithOne R

n: β„•

x✝: 0 < n + 1


↑(n + 1 - 1) = ↑n
R: Type u

inst✝: AddGroupWithOne R

n: β„•

x✝: 0 < n + 1


↑(n + 1 - 1) = ↑n
R: Type u

inst✝: AddGroupWithOne R

n: β„•

x✝: 0 < n + 1


↑(n + 1 - 1) = ↑(n + 1) - 1

Goals accomplished! πŸ™
#align nat.cast_pred
Nat.cast_pred: βˆ€ {R : Type u} [inst : AddGroupWithOne R] {n : β„•}, 0 < n β†’ ↑(n - 1) = ↑n - 1
Nat.cast_pred
end Nat open Nat namespace Int variable {
R: Type u
R
:
Type u: Type (u+1)
Type u
} [
AddGroupWithOne: Type ?u.4816 β†’ Type ?u.4816
AddGroupWithOne
R: Type u
R
] @[simp, norm_cast] theorem
cast_negSucc: βˆ€ (n : β„•), ↑-[n+1] = -↑(n + 1)
cast_negSucc
(n :
β„•: Type
β„•
) : (-[n+1] :
R: Type u
R
) = -(n +
1: ?m.1588
1
:
β„•: Type
β„•
) :=
AddGroupWithOne.intCast_negSucc: βˆ€ {R : Type ?u.1738} [self : AddGroupWithOne R] (n : β„•), IntCast.intCast -[n+1] = -↑(n + 1)
AddGroupWithOne.intCast_negSucc
n #align int.cast_neg_succ_of_nat
Int.cast_negSuccβ‚“: βˆ€ {R : Type u} [inst : AddGroupWithOne R] (n : β„•), ↑-[n+1] = -↑(n + 1)
Int.cast_negSuccβ‚“
-- expected `n` to be implicit, and `HasLiftT` @[simp, norm_cast] theorem
cast_zero: βˆ€ {R : Type u} [inst : AddGroupWithOne R], ↑0 = 0
cast_zero
: ((
0: ?m.1828
0
:
β„€: Type
β„€
) :
R: Type u
R
) =
0: ?m.1883
0
:= (
AddGroupWithOne.intCast_ofNat: βˆ€ {R : Type ?u.1954} [self : AddGroupWithOne R] (n : β„•), IntCast.intCast ↑n = ↑n
AddGroupWithOne.intCast_ofNat
0: ?m.1958
0
).
trans: βˆ€ {Ξ± : Sort ?u.1967} {a b c : Ξ±}, a = b β†’ b = c β†’ a = c
trans
Nat.cast_zero: βˆ€ {R : Type ?u.1990} [inst : AddMonoidWithOne R], ↑0 = 0
Nat.cast_zero
#align int.cast_zero
Int.cast_zeroβ‚“: βˆ€ {R : Type u} [inst : AddGroupWithOne R], ↑0 = 0
Int.cast_zeroβ‚“
-- type had `HasLiftT` @[simp high, nolint simpNF, norm_cast] -- this lemma competes with `Int.ofNat_eq_cast` to come later theorem
cast_ofNat: βˆ€ {R : Type u} [inst : AddGroupWithOne R] (n : β„•), ↑↑n = ↑n
cast_ofNat
(n :
β„•: Type
β„•
) : ((n :
β„€: Type
β„€
) :
R: Type u
R
) = n :=
AddGroupWithOne.intCast_ofNat: βˆ€ {R : Type ?u.2236} [self : AddGroupWithOne R] (n : β„•), IntCast.intCast ↑n = ↑n
AddGroupWithOne.intCast_ofNat
_ #align int.cast_coe_nat
Int.cast_ofNatβ‚“: βˆ€ {R : Type u} [inst : AddGroupWithOne R] (n : β„•), ↑↑n = ↑n
Int.cast_ofNatβ‚“
-- expected `n` to be implicit, and `HasLiftT` #align int.cast_of_nat
Int.cast_ofNatβ‚“: βˆ€ {R : Type u} [inst : AddGroupWithOne R] (n : β„•), ↑↑n = ↑n
Int.cast_ofNatβ‚“
@[simp, norm_cast] theorem
int_cast_ofNat: βˆ€ {R : Type u} [inst : AddGroupWithOne R] (n : β„•) [inst_1 : AtLeastTwo n], ↑(OfNat.ofNat n) = OfNat.ofNat n
int_cast_ofNat
(n :
β„•: Type
β„•
) [n.
AtLeastTwo: β„• β†’ Prop
AtLeastTwo
] : ((
OfNat.ofNat: {Ξ± : Type ?u.2325} β†’ (x : β„•) β†’ [self : OfNat Ξ± x] β†’ Ξ±
OfNat.ofNat
n :
β„€: Type
β„€
) :
R: Type u
R
) =
OfNat.ofNat: {Ξ± : Type ?u.2379} β†’ (x : β„•) β†’ [self : OfNat Ξ± x] β†’ Ξ±
OfNat.ofNat
n :=

Goals accomplished! πŸ™
R: Type u

inst✝¹: AddGroupWithOne R

n: β„•

inst✝: AtLeastTwo n



Goals accomplished! πŸ™
@[simp, norm_cast] theorem
cast_one: ↑1 = 1
cast_one
: ((
1: ?m.2622
1
:
β„€: Type
β„€
) :
R: Type u
R
) =
1: ?m.2677
1
:=

Goals accomplished! πŸ™
R: Type u

inst✝: AddGroupWithOne R


↑1 = 1
R: Type u

inst✝: AddGroupWithOne R


↑1 = 1
R: Type u

inst✝: AddGroupWithOne R


↑1 = 1
R: Type u

inst✝: AddGroupWithOne R


↑1 = 1
R: Type u

inst✝: AddGroupWithOne R


1 = 1

Goals accomplished! πŸ™
#align int.cast_one
Int.cast_oneβ‚“: βˆ€ {R : Type u} [inst : AddGroupWithOne R], ↑1 = 1
Int.cast_oneβ‚“
-- type had `HasLiftT` @[simp, norm_cast] theorem
cast_neg: βˆ€ (n : β„€), ↑(-n) = -↑n
cast_neg
: βˆ€
n: ?m.2856
n
, ((-
n: ?m.2856
n
:
β„€: Type
β„€
) :
R: Type u
R
) = -
n: ?m.2856
n
| (0 : β„•) =>

Goals accomplished! πŸ™
R: Type u

inst✝: AddGroupWithOne R


↑(-↑0) = -↑↑0
R: Type u

inst✝: AddGroupWithOne R


↑(-↑0) = -↑↑0
R: Type u

inst✝: AddGroupWithOne R


0 = -0
R: Type u

inst✝: AddGroupWithOne R


↑(-↑0) = -↑↑0
R: Type u

inst✝: AddGroupWithOne R


0 = 0

Goals accomplished! πŸ™
| (n + 1 : β„•) =>

Goals accomplished! πŸ™
R: Type u

inst✝: AddGroupWithOne R

n: β„•


↑(-↑(n + 1)) = -↑↑(n + 1)
R: Type u

inst✝: AddGroupWithOne R

n: β„•


↑(-↑(n + 1)) = -↑↑(n + 1)
R: Type u

inst✝: AddGroupWithOne R

n: β„•


↑(-↑(n + 1)) = -↑(n + 1)
R: Type u

inst✝: AddGroupWithOne R

n: β„•


↑(-↑(n + 1)) = -↑↑(n + 1)
R: Type u

inst✝: AddGroupWithOne R

n: β„•


-↑(Nat.add n 0 + 1) = -↑(n + 1)

Goals accomplished! πŸ™
| -[n+1] =>

Goals accomplished! πŸ™
R: Type u

inst✝: AddGroupWithOne R

n: β„•


↑(- -[n+1]) = -↑-[n+1]
R: Type u

inst✝: AddGroupWithOne R

n: β„•


↑(- -[n+1]) = -↑-[n+1]
R: Type u

inst✝: AddGroupWithOne R

n: β„•


↑(succ n) = -↑-[n+1]
R: Type u

inst✝: AddGroupWithOne R

n: β„•


↑(- -[n+1]) = -↑-[n+1]
R: Type u

inst✝: AddGroupWithOne R

n: β„•


↑(succ n) = - -↑(n + 1)
R: Type u

inst✝: AddGroupWithOne R

n: β„•


↑(- -[n+1]) = -↑-[n+1]
R: Type u

inst✝: AddGroupWithOne R

n: β„•


↑(succ n) = ↑(n + 1)

Goals accomplished! πŸ™
#align int.cast_neg
Int.cast_negβ‚“: βˆ€ {R : Type u} [inst : AddGroupWithOne R] (n : β„€), ↑(-n) = -↑n
Int.cast_negβ‚“
-- type had `HasLiftT` @[simp, norm_cast] theorem
cast_subNatNat: βˆ€ {R : Type u} [inst : AddGroupWithOne R] (m n : β„•), ↑(subNatNat m n) = ↑m - ↑n
cast_subNatNat
(
m: ?m.3783
m
n: ?m.3786
n
) : ((
Int.subNatNat: β„• β†’ β„• β†’ β„€
Int.subNatNat
m: ?m.3783
m
n: ?m.3786
n
:
β„€: Type
β„€
) :
R: Type u
R
) =
m: ?m.3783
m
-
n: ?m.3786
n
:=

Goals accomplished! πŸ™
R: Type u

inst✝: AddGroupWithOne R

m, n: β„•


↑(subNatNat m n) = ↑m - ↑n
R: Type u

inst✝: AddGroupWithOne R

m, n: β„•


↑(match n - m with | 0 => ofNat (m - n) | succ k => -[k+1]) = ↑m - ↑n
R: Type u

inst✝: AddGroupWithOne R

m, n: β„•


↑(subNatNat m n) = ↑m - ↑n
R: Type u

inst✝: AddGroupWithOne R

m, n: β„•

e: n - m = zero


zero
↑(match zero with | 0 => ofNat (m - n) | succ k => -[k+1]) = ↑m - ↑n
R: Type u

inst✝: AddGroupWithOne R

m, n, n✝: β„•

e: n - m = succ n✝


succ
↑(match succ n✝ with | 0 => ofNat (m - n) | succ k => -[k+1]) = ↑m - ↑n
R: Type u

inst✝: AddGroupWithOne R

m, n: β„•


↑(subNatNat m n) = ↑m - ↑n
R: Type u

inst✝: AddGroupWithOne R

m, n: β„•

e: n - m = zero


zero
↑(match zero with | 0 => ofNat (m - n) | succ k => -[k+1]) = ↑m - ↑n
R: Type u

inst✝: AddGroupWithOne R

m, n: β„•

e: n - m = zero


zero
↑(match zero with | 0 => ofNat (m - n) | succ k => -[k+1]) = ↑m - ↑n
R: Type u

inst✝: AddGroupWithOne R

m, n, n✝: β„•

e: n - m = succ n✝


succ
↑(match succ n✝ with | 0 => ofNat (m - n) | succ k => -[k+1]) = ↑m - ↑n
R: Type u

inst✝: AddGroupWithOne R

m, n: β„•

e: n - m = zero


zero
↑↑(m - n) = ↑m - ↑n
R: Type u

inst✝: AddGroupWithOne R

m, n: β„•

e: n - m = zero


zero
↑(match zero with | 0 => ofNat (m - n) | succ k => -[k+1]) = ↑m - ↑n

Goals accomplished! πŸ™
R: Type u

inst✝: AddGroupWithOne R

m, n: β„•


↑(subNatNat m n) = ↑m - ↑n
R: Type u

inst✝: AddGroupWithOne R

m, n, n✝: β„•

e: n - m = succ n✝


succ
↑(match succ n✝ with | 0 => ofNat (m - n) | succ k => -[k+1]) = ↑m - ↑n
R: Type u

inst✝: AddGroupWithOne R

m, n, n✝: β„•

e: n - m = succ n✝


succ
↑(match succ n✝ with | 0 => ofNat (m - n) | succ k => -[k+1]) = ↑m - ↑n
R: Type u

inst✝: AddGroupWithOne R

m, n, n✝: β„•

e: n - m = succ n✝


succ
↑(match succ n✝ with | 0 => ofNat (m - n) | succ k => -[k+1]) = ↑m - ↑n
R: Type u

inst✝: AddGroupWithOne R

m, n, n✝: β„•

e: n - m = succ n✝


succ
-↑(n✝ + 1) = ↑m - ↑n
R: Type u

inst✝: AddGroupWithOne R

m, n, n✝: β„•

e: n - m = succ n✝


succ
↑(match succ n✝ with | 0 => ofNat (m - n) | succ k => -[k+1]) = ↑m - ↑n
R: Type u

inst✝: AddGroupWithOne R

m, n, n✝: β„•

e: n - m = succ n✝


succ
-↑(succ n✝) = ↑m - ↑n
R: Type u

inst✝: AddGroupWithOne R

m, n, n✝: β„•

e: n - m = succ n✝


succ
↑(match succ n✝ with | 0 => ofNat (m - n) | succ k => -[k+1]) = ↑m - ↑n
R: Type u

inst✝: AddGroupWithOne R

m, n, n✝: β„•

e: n - m = succ n✝


succ
-↑(n - m) = ↑m - ↑n
R: Type u

inst✝: AddGroupWithOne R

m, n, n✝: β„•

e: n - m = succ n✝


succ
↑(match succ n✝ with | 0 => ofNat (m - n) | succ k => -[k+1]) = ↑m - ↑n
R: Type u

inst✝: AddGroupWithOne R

m, n, n✝: β„•

e: n - m = succ n✝


succ
-(↑n - ↑m) = ↑m - ↑n
R: Type u

inst✝: AddGroupWithOne R

m, n, n✝: β„•

e: n - m = succ n✝


succ
↑(match succ n✝ with | 0 => ofNat (m - n) | succ k => -[k+1]) = ↑m - ↑n
R: Type u

inst✝: AddGroupWithOne R

m, n, n✝: β„•

e: n - m = succ n✝


succ
↑m - ↑n = ↑m - ↑n

Goals accomplished! πŸ™
#align int.cast_sub_nat_nat
Int.cast_subNatNatβ‚“: βˆ€ {R : Type u} [inst : AddGroupWithOne R] (m n : β„•), ↑(subNatNat m n) = ↑m - ↑n
Int.cast_subNatNatβ‚“
-- type had `HasLiftT` #align int.neg_of_nat_eq
Int.negOfNat_eq: βˆ€ {n : β„•}, negOfNat n = -ofNat n
Int.negOfNat_eq
@[simp] theorem
cast_negOfNat: βˆ€ (n : β„•), ↑(negOfNat n) = -↑n
cast_negOfNat
(n :
β„•: Type
β„•
) : ((
negOfNat: β„• β†’ β„€
negOfNat
n :
β„€: Type
β„€
) :
R: Type u
R
) = -n :=

Goals accomplished! πŸ™
R: Type u

inst✝: AddGroupWithOne R

n: β„•


↑(negOfNat n) = -↑n

Goals accomplished! πŸ™
#align int.cast_neg_of_nat
Int.cast_negOfNat: βˆ€ {R : Type u} [inst : AddGroupWithOne R] (n : β„•), ↑(negOfNat n) = -↑n
Int.cast_negOfNat
@[simp, norm_cast] theorem
cast_add: βˆ€ {R : Type u} [inst : AddGroupWithOne R] (m n : β„€), ↑(m + n) = ↑m + ↑n
cast_add
: βˆ€
m: ?m.5923
m
n: ?m.5926
n
, ((
m: ?m.5923
m
+
n: ?m.5926
n
:
β„€: Type
β„€
) :
R: Type u
R
) =
m: ?m.5923
m
+
n: ?m.5926
n
| (m : β„•), (n : β„•) =>

Goals accomplished! πŸ™
R: Type u

inst✝: AddGroupWithOne R

m, n: β„•


↑(↑m + ↑n) = ↑↑m + ↑↑n

Goals accomplished! πŸ™
| (m : β„•), -[n+1] =>

Goals accomplished! πŸ™
R: Type u

inst✝: AddGroupWithOne R

m, n: β„•


↑(↑m + -[n+1]) = ↑↑m + ↑-[n+1]
R: Type u

inst✝: AddGroupWithOne R

m, n: β„•


↑(↑m + -[n+1]) = ↑↑m + ↑-[n+1]
R: Type u

inst✝: AddGroupWithOne R

m, n: β„•


↑m - ↑(succ n) = ↑↑m + ↑-[n+1]
R: Type u

inst✝: AddGroupWithOne R

m, n: β„•


↑(↑m + -[n+1]) = ↑↑m + ↑-[n+1]
R: Type u

inst✝: AddGroupWithOne R

m, n: β„•


↑m - ↑(succ n) = ↑m + ↑-[n+1]
R: Type u

inst✝: AddGroupWithOne R

m, n: β„•


↑(↑m + -[n+1]) = ↑↑m + ↑-[n+1]
R: Type u

inst✝: AddGroupWithOne R

m, n: β„•


↑m - ↑(succ n) = ↑m + -↑(n + 1)
R: Type u

inst✝: AddGroupWithOne R

m, n: β„•


↑(↑m + -[n+1]) = ↑↑m + ↑-[n+1]
R: Type u

inst✝: AddGroupWithOne R

m, n: β„•


↑m + -↑(succ n) = ↑m + -↑(n + 1)

Goals accomplished! πŸ™
| -[m+1], (n : β„•) =>

Goals accomplished! πŸ™
R: Type u

inst✝: AddGroupWithOne R

m, n: β„•


↑(-[m+1] + ↑n) = ↑-[m+1] + ↑↑n
R: Type u

inst✝: AddGroupWithOne R

m, n: β„•


↑(-[m+1] + ↑n) = ↑-[m+1] + ↑↑n
R: Type u

inst✝: AddGroupWithOne R

m, n: β„•


↑n - ↑(succ m) = ↑-[m+1] + ↑↑n
R: Type u

inst✝: AddGroupWithOne R

m, n: β„•


↑(-[m+1] + ↑n) = ↑-[m+1] + ↑↑n
R: Type u

inst✝: AddGroupWithOne R

m, n: β„•


↑n - ↑(succ m) = ↑-[m+1] + ↑n
R: Type u

inst✝: AddGroupWithOne R

m, n: β„•


↑(-[m+1] + ↑n) = ↑-[m+1] + ↑↑n
R: Type u

inst✝: AddGroupWithOne R

m, n: β„•


↑n - ↑(succ m) = -↑(m + 1) + ↑n
R: Type u

inst✝: AddGroupWithOne R

m, n: β„•


↑(-[m+1] + ↑n) = ↑-[m+1] + ↑↑n
R: Type u

inst✝: AddGroupWithOne R

m, n: β„•


↑n = -↑(m + 1) + ↑n + ↑(succ m)
R: Type u

inst✝: AddGroupWithOne R

m, n: β„•


↑(-[m+1] + ↑n) = ↑-[m+1] + ↑↑n
R: Type u

inst✝: AddGroupWithOne R

m, n: β„•


↑n = -↑(m + 1) + (↑n + ↑(succ m))
R: Type u

inst✝: AddGroupWithOne R

m, n: β„•


↑(-[m+1] + ↑n) = ↑-[m+1] + ↑↑n
R: Type u

inst✝: AddGroupWithOne R

m, n: β„•


↑(m + 1) + ↑n = ↑n + ↑(succ m)
R: Type u

inst✝: AddGroupWithOne R

m, n: β„•


↑(-[m+1] + ↑n) = ↑-[m+1] + ↑↑n
R: Type u

inst✝: AddGroupWithOne R

m, n: β„•


↑(m + 1 + n) = ↑n + ↑(succ m)
R: Type u

inst✝: AddGroupWithOne R

m, n: β„•


↑(-[m+1] + ↑n) = ↑-[m+1] + ↑↑n
R: Type u

inst✝: AddGroupWithOne R

m, n: β„•


↑(m + 1 + n) = ↑(n + succ m)
R: Type u

inst✝: AddGroupWithOne R

m, n: β„•


↑(-[m+1] + ↑n) = ↑-[m+1] + ↑↑n
R: Type u

inst✝: AddGroupWithOne R

m, n: β„•


↑(n + (m + 1)) = ↑(n + succ m)

Goals accomplished! πŸ™
| -[m+1], -[n+1] => show (-[m + n +
1: ?m.6446
1
+1] :
R: Type u
R
) =
_: ?m.6551
_
by
R: Type u

inst✝: AddGroupWithOne R

m, n: β„•


↑-[m + n + 1+1] = ↑-[m+1] + ↑-[n+1]
R: Type u

inst✝: AddGroupWithOne R

m, n: β„•


-↑(m + n + 1 + 1) = ↑-[m+1] + ↑-[n+1]
R: Type u

inst✝: AddGroupWithOne R

m, n: β„•


↑-[m + n + 1+1] = ↑-[m+1] + ↑-[n+1]
R: Type u

inst✝: AddGroupWithOne R

m, n: β„•


-↑(m + n + 1 + 1) = -↑(m + 1) + ↑-[n+1]
R: Type u

inst✝: AddGroupWithOne R

m, n: β„•


↑-[m + n + 1+1] = ↑-[m+1] + ↑-[n+1]
R: Type u

inst✝: AddGroupWithOne R

m, n: β„•


-↑(m + n + 1 + 1) = -↑(m + 1) + -↑(n + 1)
R: Type u

inst✝: AddGroupWithOne R

m, n: β„•


↑-[m + n + 1+1] = ↑-[m+1] + ↑-[n+1]
R: Type u

inst✝: AddGroupWithOne R

m, n: β„•


-↑(m + n + 1 + 1) = -(↑(n + 1) + ↑(m + 1))
R: Type u

inst✝: AddGroupWithOne R

m, n: β„•


↑-[m + n + 1+1] = ↑-[m+1] + ↑-[n+1]
R: Type u

inst✝: AddGroupWithOne R

m, n: β„•


-↑(m + n + 1 + 1) = -↑(n + 1 + (m + 1))
R: Type u

inst✝: AddGroupWithOne R

m, n: β„•


↑-[m + n + 1+1] = ↑-[m+1] + ↑-[n+1]
R: Type u

inst✝: AddGroupWithOne R

m, n: β„•


-↑(m + 1 + n + 1) = -↑(n + 1 + (m + 1))
R: Type u

inst✝: AddGroupWithOne R

m, n: β„•


↑-[m + n + 1+1] = ↑-[m+1] + ↑-[n+1]
R: Type u

inst✝: AddGroupWithOne R

m, n: β„•


-↑(m + 1 + (n + 1)) = -↑(n + 1 + (m + 1))
R: Type u

inst✝: AddGroupWithOne R

m, n: β„•


↑-[m + n + 1+1] = ↑-[m+1] + ↑-[n+1]
R: Type u

inst✝: AddGroupWithOne R

m, n: β„•


-↑(n + 1 + (m + 1)) = -↑(n + 1 + (m + 1))

Goals accomplished! πŸ™
#align int.cast_add
Int.cast_addβ‚“: βˆ€ {R : Type u} [inst : AddGroupWithOne R] (m n : β„€), ↑(m + n) = ↑m + ↑n
Int.cast_addβ‚“
-- type had `HasLiftT` @[simp, norm_cast] theorem
cast_sub: βˆ€ (m n : β„€), ↑(m - n) = ↑m - ↑n
cast_sub
(m n) : ((
m: ?m.8442
m
-
n: ?m.8445
n
:
β„€: Type
β„€
) :
R: Type u
R
) =
m: ?m.8442
m
-
n: ?m.8445
n
:=

Goals accomplished! πŸ™
R: Type u

inst✝: AddGroupWithOne R

m, n: β„€


↑(m - n) = ↑m - ↑n

Goals accomplished! πŸ™
#align int.cast_sub
Int.cast_subβ‚“: βˆ€ {R : Type u} [inst : AddGroupWithOne R] (m n : β„€), ↑(m - n) = ↑m - ↑n
Int.cast_subβ‚“
-- type had `HasLiftT` section deprecated set_option linter.deprecated false @[norm_cast, deprecated] theorem
ofNat_bit0: βˆ€ (n : β„•), ↑(bit0 n) = bit0 ↑n
ofNat_bit0
(n :
β„•: Type
β„•
) : (↑(
bit0: {Ξ± : Type ?u.9688} β†’ [inst : Add Ξ±] β†’ Ξ± β†’ Ξ±
bit0
n) :
β„€: Type
β„€
) =
bit0: {Ξ± : Type ?u.9731} β†’ [inst : Add Ξ±] β†’ Ξ± β†’ Ξ±
bit0
↑n :=
rfl: βˆ€ {Ξ± : Sort ?u.9775} {a : Ξ±}, a = a
rfl
#align int.coe_nat_bit0
Int.ofNat_bit0: βˆ€ (n : β„•), ↑(bit0 n) = bit0 ↑n
Int.ofNat_bit0
@[norm_cast, deprecated] theorem
ofNat_bit1: βˆ€ (n : β„•), ↑(bit1 n) = bit1 ↑n
ofNat_bit1
(n :
β„•: Type
β„•
) : (↑(
bit1: {Ξ± : Type ?u.9849} β†’ [inst : One Ξ±] β†’ [inst : Add Ξ±] β†’ Ξ± β†’ Ξ±
bit1
n) :
β„€: Type
β„€
) =
bit1: {Ξ± : Type ?u.10040} β†’ [inst : One Ξ±] β†’ [inst : Add Ξ±] β†’ Ξ± β†’ Ξ±
bit1
↑n :=
rfl: βˆ€ {Ξ± : Sort ?u.10234} {a : Ξ±}, a = a
rfl
#align int.coe_nat_bit1
Int.ofNat_bit1: βˆ€ (n : β„•), ↑(bit1 n) = bit1 ↑n
Int.ofNat_bit1
@[norm_cast, deprecated] theorem
cast_bit0: βˆ€ {R : Type u} [inst : AddGroupWithOne R] (n : β„€), ↑(bit0 n) = bit0 ↑n
cast_bit0
(n :
β„€: Type
β„€
) : ((
bit0: {Ξ± : Type ?u.10325} β†’ [inst : Add Ξ±] β†’ Ξ± β†’ Ξ±
bit0
n :
β„€: Type
β„€
) :
R: Type u
R
) =
bit0: {Ξ± : Type ?u.10380} β†’ [inst : Add Ξ±] β†’ Ξ± β†’ Ξ±
bit0
(n :
R: Type u
R
) :=
Int.cast_add: βˆ€ {R : Type ?u.10447} [inst : AddGroupWithOne R] (m n : β„€), ↑(m + n) = ↑m + ↑n
Int.cast_add
_ _ #align int.cast_bit0
Int.cast_bit0: βˆ€ {R : Type u} [inst : AddGroupWithOne R] (n : β„€), ↑(bit0 n) = bit0 ↑n
Int.cast_bit0
@[norm_cast, deprecated] theorem
cast_bit1: βˆ€ (n : β„€), ↑(bit1 n) = bit1 ↑n
cast_bit1
(n :
β„€: Type
β„€
) : ((
bit1: {Ξ± : Type ?u.10540} β†’ [inst : One Ξ±] β†’ [inst : Add Ξ±] β†’ Ξ± β†’ Ξ±
bit1
n :
β„€: Type
β„€
) :
R: Type u
R
) =
bit1: {Ξ± : Type ?u.10765} β†’ [inst : One Ξ±] β†’ [inst : Add Ξ±] β†’ Ξ± β†’ Ξ±
bit1
(n :
R: Type u
R
) :=

Goals accomplished! πŸ™
R: Type u

inst✝: AddGroupWithOne R

n: β„€


↑(bit1 n) = bit1 ↑n
R: Type u

inst✝: AddGroupWithOne R

n: β„€


↑(bit1 n) = bit1 ↑n
R: Type u

inst✝: AddGroupWithOne R

n: β„€


↑(bit0 n + 1) = bit1 ↑n
R: Type u

inst✝: AddGroupWithOne R

n: β„€


↑(bit1 n) = bit1 ↑n
R: Type u

inst✝: AddGroupWithOne R

n: β„€


↑(bit0 n) + ↑1 = bit1 ↑n
R: Type u

inst✝: AddGroupWithOne R

n: β„€


↑(bit1 n) = bit1 ↑n
R: Type u

inst✝: AddGroupWithOne R

n: β„€


↑(bit0 n) + 1 = bit1 ↑n
R: Type u

inst✝: AddGroupWithOne R

n: β„€


↑(bit1 n) = bit1 ↑n
R: Type u

inst✝: AddGroupWithOne R

n: β„€


bit0 ↑n + 1 = bit1 ↑n
R: Type u

inst✝: AddGroupWithOne R

n: β„€


bit0 ↑n + 1 = bit1 ↑n
R: Type u

inst✝: AddGroupWithOne R

n: β„€


bit0 ↑n + 1 = bit1 ↑n
R: Type u

inst✝: AddGroupWithOne R

n: β„€


↑(bit1 n) = bit1 ↑n

Goals accomplished! πŸ™
#align int.cast_bit1
Int.cast_bit1: βˆ€ {R : Type u} [inst : AddGroupWithOne R] (n : β„€), ↑(bit1 n) = bit1 ↑n
Int.cast_bit1
end deprecated theorem
cast_two: ↑2 = 2
cast_two
: ((
2: ?m.11242
2
:
β„€: Type
β„€
) :
R: Type u
R
) =
2: ?m.11296
2
:= show (((
2: ?m.11346
2
:
β„•: Type
β„•
) :
β„€: Type
β„€
) :
R: Type u
R
) = ((
2: ?m.11422
2
:
β„•: Type
β„•
) :
R: Type u
R
) by
R: Type u

inst✝: AddGroupWithOne R


↑↑2 = ↑2
R: Type u

inst✝: AddGroupWithOne R


↑2 = ↑2
R: Type u

inst✝: AddGroupWithOne R


↑↑2 = ↑2
R: Type u

inst✝: AddGroupWithOne R


2 = 2

Goals accomplished! πŸ™
#align int.cast_two
Int.cast_two: βˆ€ {R : Type u} [inst : AddGroupWithOne R], ↑2 = 2
Int.cast_two
theorem
cast_three: ↑3 = 3
cast_three
: ((
3: ?m.11556
3
:
β„€: Type
β„€
) :
R: Type u
R
) =
3: ?m.11610
3
:= show (((
3: ?m.11660
3
:
β„•: Type
β„•
) :
β„€: Type
β„€
) :
R: Type u
R
) = ((
3: ?m.11736
3
:
β„•: Type
β„•
) :
R: Type u
R
) by
R: Type u

inst✝: AddGroupWithOne R


↑↑3 = ↑3
R: Type u

inst✝: AddGroupWithOne R


↑3 = ↑3
R: Type u

inst✝: AddGroupWithOne R


↑↑3 = ↑3
R: Type u

inst✝: AddGroupWithOne R


3 = 3

Goals accomplished! πŸ™
#align int.cast_three
Int.cast_three: βˆ€ {R : Type u} [inst : AddGroupWithOne R], ↑3 = 3
Int.cast_three
theorem
cast_four: ↑4 = 4
cast_four
: ((
4: ?m.11870
4
:
β„€: Type
β„€
) :
R: Type u
R
) =
4: ?m.11924
4
:= show (((
4: ?m.11974
4
:
β„•: Type
β„•
) :
β„€: Type
β„€
) :
R: Type u
R
) = ((
4: ?m.12050
4
:
β„•: Type
β„•
) :
R: Type u
R
) by
R: Type u

inst✝: AddGroupWithOne R


↑↑4 = ↑4
R: Type u

inst✝: AddGroupWithOne R


↑4 = ↑4
R: Type u

inst✝: AddGroupWithOne R


↑↑4 = ↑4
R: Type u

inst✝: AddGroupWithOne R


4 = 4

Goals accomplished! πŸ™
#align int.cast_four
Int.cast_four: βˆ€ {R : Type u} [inst : AddGroupWithOne R], ↑4 = 4
Int.cast_four
end Int