ring_theory.int.basic
⟷
Mathlib.RingTheory.Int.Basic
The following section lists changes to this file in mathlib3 and mathlib4 that occured after the initial port. Most recent changes are shown first. Hovering over a commit will show all commits associated with the same mathlib3 commit.
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(last sync)
A property holds for all powers of g
if it is holds for 1
and is preserved under multiplication and division by g
.
Also rename subgroup.zpowers_subset
/add_subgroup.zmultiples_subset
to subgroup.zpowers_le_of_mem
/add_subgroup.zmultiples_le_of_mem
because there is no ⊆
in the statement.
The motivation is the Cauchy-Davenport theorem: https://github.com/leanprover-community/mathlib/blob/321b67021163ac504c6cfa35d5678a47b357869d/src/combinatorics/additive/cauchy_davenport.lean#L176-L181
@@ -358,8 +358,8 @@ namespace int
lemma zmultiples_nat_abs (a : ℤ) :
add_subgroup.zmultiples (a.nat_abs : ℤ) = add_subgroup.zmultiples a :=
le_antisymm
- (add_subgroup.zmultiples_subset (mem_zmultiples_iff.mpr (dvd_nat_abs.mpr (dvd_refl a))))
- (add_subgroup.zmultiples_subset (mem_zmultiples_iff.mpr (nat_abs_dvd.mpr (dvd_refl a))))
+ (add_subgroup.zmultiples_le_of_mem (mem_zmultiples_iff.mpr (dvd_nat_abs.mpr (dvd_refl a))))
+ (add_subgroup.zmultiples_le_of_mem (mem_zmultiples_iff.mpr (nat_abs_dvd.mpr (dvd_refl a))))
lemma span_nat_abs (a : ℤ) : ideal.span ({a.nat_abs} : set ℤ) = ideal.span {a} :=
by { rw ideal.span_singleton_eq_span_singleton, exact (associated_nat_abs _).symm }
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(first ported)
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -257,13 +257,11 @@ theorem gcd_eq_one_of_gcd_mul_right_eq_one_left {a : ℤ} {m n : ℕ} (h : a.gcd
#align int.gcd_eq_one_of_gcd_mul_right_eq_one_left Int.gcd_eq_one_of_gcd_mul_right_eq_one_left
-/
-#print Int.gcd_eq_one_of_gcd_mul_right_eq_one_right /-
/-- If `gcd a (m * n) = 1`, then `gcd a n = 1`. -/
-theorem gcd_eq_one_of_gcd_mul_right_eq_one_right {a : ℤ} {m n : ℕ} (h : a.gcd (m * n) = 1) :
+theorem gcd_eq_one_of_gcd_hMul_right_eq_one_right {a : ℤ} {m n : ℕ} (h : a.gcd (m * n) = 1) :
a.gcd n = 1 :=
Nat.dvd_one.mp <| trans_rel_left _ (gcd_dvd_gcd_mul_left_right a n m) h
-#align int.gcd_eq_one_of_gcd_mul_right_eq_one_right Int.gcd_eq_one_of_gcd_mul_right_eq_one_right
--/
+#align int.gcd_eq_one_of_gcd_mul_right_eq_one_right Int.gcd_eq_one_of_gcd_hMul_right_eq_one_right
#print Int.sq_of_gcd_eq_one /-
theorem sq_of_gcd_eq_one {a b c : ℤ} (h : Int.gcd a b = 1) (heq : a * b = c ^ 2) :
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -164,8 +164,8 @@ instance : GCDMonoid ℤ where
by
rw [← Int.ofNat_mul, gcd_mul_lcm, coe_nat_abs, abs_eq_normalize]
exact normalize_associated (a * b)
- lcm_zero_left a := coe_nat_eq_zero.2 <| Nat.lcm_zero_left _
- lcm_zero_right a := coe_nat_eq_zero.2 <| Nat.lcm_zero_right _
+ lcm_zero_left a := natCast_eq_zero.2 <| Nat.lcm_zero_left _
+ lcm_zero_right a := natCast_eq_zero.2 <| Nat.lcm_zero_right _
instance : NormalizedGCDMonoid ℤ :=
{ Int.normalizationMonoid,
@@ -287,7 +287,7 @@ theorem sq_of_coprime {a b c : ℤ} (h : IsCoprime a b) (heq : a * b = c ^ 2) :
#print Int.natAbs_euclideanDomain_gcd /-
theorem natAbs_euclideanDomain_gcd (a b : ℤ) : Int.natAbs (EuclideanDomain.gcd a b) = Int.gcd a b :=
by
- apply Nat.dvd_antisymm <;> rw [← Int.coe_nat_dvd]
+ apply Nat.dvd_antisymm <;> rw [← Int.natCast_dvd_natCast]
· rw [Int.natAbs_dvd]
exact Int.dvd_gcd (EuclideanDomain.gcd_dvd_left _ _) (EuclideanDomain.gcd_dvd_right _ _)
· rw [Int.dvd_natAbs]
@@ -306,7 +306,7 @@ def associatesIntEquivNat : Associates ℤ ≃ ℕ :=
Quotient.inductionOn' a fun a =>
Associates.mk_eq_mk_iff_associated.2 <| Associated.symm <| ⟨norm_unit a, _⟩
show normalize a = Int.natAbs (normalize a)
- rw [Int.coe_natAbs, Int.abs_eq_normalize, normalize_idem]
+ rw [Int.natCast_natAbs, Int.abs_eq_normalize, normalize_idem]
· intro n
dsimp
rw [← normalize_apply, ← Int.abs_eq_normalize, Int.natAbs_abs, Int.natAbs_ofNat]
@@ -327,7 +327,7 @@ theorem Int.Prime.dvd_mul {m n : ℤ} {p : ℕ} (hp : Nat.Prime p) (h : (p : ℤ
theorem Int.Prime.dvd_mul' {m n : ℤ} {p : ℕ} (hp : Nat.Prime p) (h : (p : ℤ) ∣ m * n) :
(p : ℤ) ∣ m ∨ (p : ℤ) ∣ n :=
by
- rw [Int.coe_nat_dvd_left, Int.coe_nat_dvd_left]
+ rw [Int.natCast_dvd, Int.natCast_dvd]
exact Int.Prime.dvd_mul hp h
#align int.prime.dvd_mul' Int.Prime.dvd_mul'
-/
@@ -344,7 +344,7 @@ theorem Int.Prime.dvd_pow {n : ℤ} {k p : ℕ} (hp : Nat.Prime p) (h : (p : ℤ
#print Int.Prime.dvd_pow' /-
theorem Int.Prime.dvd_pow' {n : ℤ} {k p : ℕ} (hp : Nat.Prime p) (h : (p : ℤ) ∣ n ^ k) :
(p : ℤ) ∣ n := by
- rw [Int.coe_nat_dvd_left]
+ rw [Int.natCast_dvd]
exact Int.Prime.dvd_pow hp h
#align int.prime.dvd_pow' Int.Prime.dvd_pow'
-/
@@ -445,7 +445,7 @@ theorem induction_on_primes {P : ℕ → Prop} (h₀ : P 0) (h₁ : P 1)
#print Int.associated_natAbs /-
theorem Int.associated_natAbs (k : ℤ) : Associated k k.natAbs :=
- associated_of_dvd_dvd (Int.coe_nat_dvd_right.mpr dvd_rfl) (Int.natAbs_dvd.mpr dvd_rfl)
+ associated_of_dvd_dvd (Int.dvd_natCast.mpr dvd_rfl) (Int.natAbs_dvd.mpr dvd_rfl)
#align int.associated_nat_abs Int.associated_natAbs
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -357,7 +357,7 @@ theorem prime_two_or_dvd_of_dvd_two_mul_pow_self_two {m : ℤ} {p : ℕ} (hp : N
· apply Or.intro_left
exact le_antisymm (Nat.le_of_dvd zero_lt_two hp2) (Nat.Prime.two_le hp)
· apply Or.intro_right
- rw [sq, Int.natAbs_mul] at hpp
+ rw [sq, Int.natAbs_mul] at hpp
exact (or_self_iff _).mp ((Nat.Prime.dvd_mul hp).mp hpp)
#align prime_two_or_dvd_of_dvd_two_mul_pow_self_two prime_two_or_dvd_of_dvd_two_mul_pow_self_two
-/
@@ -378,7 +378,7 @@ theorem Nat.factors_eq {n : ℕ} : normalizedFactors n = n.factors :=
cases n; · simp
rw [← Multiset.rel_eq, ← associated_eq_eq]
apply factors_unique irreducible_of_normalized_factor _
- · rw [Multiset.coe_prod, Nat.prod_factors n.succ_ne_zero]
+ · rw [Multiset.prod_coe, Nat.prod_factors n.succ_ne_zero]
apply normalized_factors_prod (Nat.succ_ne_zero _)
· infer_instance
· intro x hx
@@ -495,7 +495,7 @@ theorem eq_pow_of_mul_eq_pow_bit1_left {a b c : ℤ} (hab : IsCoprime a b) {k :
by
obtain ⟨d, hd⟩ := exists_associated_pow_of_mul_eq_pow' hab h
replace hd := hd.symm
- rw [associated_iff_nat_abs, nat_abs_eq_nat_abs_iff, ← neg_pow_bit1] at hd
+ rw [associated_iff_nat_abs, nat_abs_eq_nat_abs_iff, ← neg_pow_bit1] at hd
obtain rfl | rfl := hd <;> exact ⟨_, rfl⟩
#align int.eq_pow_of_mul_eq_pow_bit1_left Int.eq_pow_of_mul_eq_pow_bit1_left
-/
@@ -503,7 +503,7 @@ theorem eq_pow_of_mul_eq_pow_bit1_left {a b c : ℤ} (hab : IsCoprime a b) {k :
#print Int.eq_pow_of_mul_eq_pow_bit1_right /-
theorem eq_pow_of_mul_eq_pow_bit1_right {a b c : ℤ} (hab : IsCoprime a b) {k : ℕ}
(h : a * b = c ^ bit1 k) : ∃ d, b = d ^ bit1 k :=
- eq_pow_of_mul_eq_pow_bit1_left hab.symm (by rwa [mul_comm] at h )
+ eq_pow_of_mul_eq_pow_bit1_left hab.symm (by rwa [mul_comm] at h)
#align int.eq_pow_of_mul_eq_pow_bit1_right Int.eq_pow_of_mul_eq_pow_bit1_right
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -41,7 +41,7 @@ instance : WfDvdMonoid ℕ :=
refine'
RelHomClass.wellFounded
(⟨fun x : ℕ => if x = 0 then (⊤ : ℕ∞) else x, _⟩ : DvdNotUnit →r (· < ·))
- (WithTop.wellFounded_lt Nat.lt_wfRel)
+ (WithTop.instWellFoundedLT Nat.lt_wfRel)
intro a b h
cases a
· exfalso; revert h; simp [DvdNotUnit]
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce64cd319bb6b3e82f31c2d38e79080d377be451
@@ -3,10 +3,10 @@ Copyright (c) 2018 Johannes Hölzl. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Johannes Hölzl, Jens Wagemaker, Aaron Anderson
-/
-import Mathbin.Algebra.EuclideanDomain.Basic
-import Mathbin.Data.Nat.Factors
-import Mathbin.RingTheory.Coprime.Basic
-import Mathbin.RingTheory.PrincipalIdealDomain
+import Algebra.EuclideanDomain.Basic
+import Data.Nat.Factors
+import RingTheory.Coprime.Basic
+import RingTheory.PrincipalIdealDomain
#align_import ring_theory.int.basic from "leanprover-community/mathlib"@"e655e4ea5c6d02854696f97494997ba4c31be802"
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce64cd319bb6b3e82f31c2d38e79080d377be451
@@ -236,7 +236,7 @@ theorem gcd_eq_one_iff_coprime {a b : ℤ} : Int.gcd a b = 1 ↔ IsCoprime a b :
-/
#print Int.coprime_iff_nat_coprime /-
-theorem coprime_iff_nat_coprime {a b : ℤ} : IsCoprime a b ↔ Nat.coprime a.natAbs b.natAbs := by
+theorem coprime_iff_nat_coprime {a b : ℤ} : IsCoprime a b ↔ Nat.Coprime a.natAbs b.natAbs := by
rw [← gcd_eq_one_iff_coprime, Nat.coprime_iff_gcd_eq_one, gcd_eq_nat_abs]
#align int.coprime_iff_nat_coprime Int.coprime_iff_nat_coprime
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/32a7e535287f9c73f2e4d2aef306a39190f0b504
@@ -96,7 +96,7 @@ instance : NormalizationMonoid ℤ
where
normUnit := fun a : ℤ => if 0 ≤ a then 1 else -1
normUnit_zero := if_pos le_rfl
- normUnit_mul a b hna hnb := by
+ normUnit_hMul a b hna hnb := by
cases' hna.lt_or_lt with ha ha <;> cases' hnb.lt_or_lt with hb hb <;>
simp [mul_nonneg_iff, ha.le, ha.not_le, hb.le, hb.not_le]
normUnit_coe_units u :=
@@ -231,7 +231,7 @@ theorem gcd_eq_one_iff_coprime {a b : ℤ} : Int.gcd a b = 1 ↔ IsCoprime a b :
obtain ⟨p, ⟨hp, ha, hb⟩⟩ := nat.prime.not_coprime_iff_dvd.mp hg
apply Nat.Prime.not_dvd_one hp
rw [← coe_nat_dvd, Int.ofNat_one, ← h]
- exact dvd_add ((coe_nat_dvd_left.mpr ha).mul_left _) ((coe_nat_dvd_left.mpr hb).mul_left _)
+ exact dvd_add ((coe_nat_dvd_left.mpr ha).hMul_left _) ((coe_nat_dvd_left.mpr hb).hMul_left _)
#align int.gcd_eq_one_iff_coprime Int.gcd_eq_one_iff_coprime
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/63721b2c3eba6c325ecf8ae8cca27155a4f6306f
@@ -205,7 +205,7 @@ theorem exists_unit_of_abs (a : ℤ) : ∃ (u : ℤ) (h : IsUnit u), (Int.natAbs
by
cases' nat_abs_eq a with h
· use 1, isUnit_one; rw [← h, one_mul]
- · use -1, is_unit_one.neg; rw [← neg_eq_iff_eq_neg.mpr h]
+ · use-1, is_unit_one.neg; rw [← neg_eq_iff_eq_neg.mpr h]
simp only [neg_mul, one_mul]
#align int.exists_unit_of_abs Int.exists_unit_of_abs
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/8ea5598db6caeddde6cb734aa179cc2408dbd345
@@ -2,17 +2,14 @@
Copyright (c) 2018 Johannes Hölzl. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Johannes Hölzl, Jens Wagemaker, Aaron Anderson
-
-! This file was ported from Lean 3 source module ring_theory.int.basic
-! leanprover-community/mathlib commit e655e4ea5c6d02854696f97494997ba4c31be802
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathbin.Algebra.EuclideanDomain.Basic
import Mathbin.Data.Nat.Factors
import Mathbin.RingTheory.Coprime.Basic
import Mathbin.RingTheory.PrincipalIdealDomain
+#align_import ring_theory.int.basic from "leanprover-community/mathlib"@"e655e4ea5c6d02854696f97494997ba4c31be802"
+
/-!
# Divisibility over ℕ and ℤ
mathlib commit https://github.com/leanprover-community/mathlib/commit/9fb8964792b4237dac6200193a0d533f1b3f7423
@@ -79,13 +79,17 @@ instance : NormalizedGCDMonoid ℕ :=
normalize_gcd := fun a b => normalize_eq _
normalize_lcm := fun a b => normalize_eq _ }
+#print gcd_eq_nat_gcd /-
theorem gcd_eq_nat_gcd (m n : ℕ) : gcd m n = Nat.gcd m n :=
rfl
#align gcd_eq_nat_gcd gcd_eq_nat_gcd
+-/
+#print lcm_eq_nat_lcm /-
theorem lcm_eq_nat_lcm (m n : ℕ) : lcm m n = Nat.lcm m n :=
rfl
#align lcm_eq_nat_lcm lcm_eq_nat_lcm
+-/
namespace Int
@@ -102,10 +106,13 @@ instance : NormalizationMonoid ℤ
(units_eq_one_or u).elim (fun eq => Eq.symm ▸ if_pos zero_le_one) fun eq =>
Eq.symm ▸ if_neg (not_le_of_gt <| show (-1 : ℤ) < 0 by decide)
+#print Int.normalize_of_nonneg /-
theorem normalize_of_nonneg {z : ℤ} (h : 0 ≤ z) : normalize z = z :=
show z * ↑(ite _ _ _) = z by rw [if_pos h, Units.val_one, mul_one]
#align int.normalize_of_nonneg Int.normalize_of_nonneg
+-/
+#print Int.normalize_of_nonpos /-
theorem normalize_of_nonpos {z : ℤ} (h : z ≤ 0) : normalize z = -z :=
by
obtain rfl | h := h.eq_or_lt
@@ -113,27 +120,38 @@ theorem normalize_of_nonpos {z : ℤ} (h : z ≤ 0) : normalize z = -z :=
· change z * ↑(ite _ _ _) = -z
rw [if_neg (not_le_of_gt h), Units.val_neg, Units.val_one, mul_neg_one]
#align int.normalize_of_nonpos Int.normalize_of_nonpos
+-/
+#print Int.normalize_coe_nat /-
theorem normalize_coe_nat (n : ℕ) : normalize (n : ℤ) = n :=
normalize_of_nonneg (ofNat_le_ofNat_of_le <| Nat.zero_le n)
#align int.normalize_coe_nat Int.normalize_coe_nat
+-/
+#print Int.abs_eq_normalize /-
theorem abs_eq_normalize (z : ℤ) : |z| = normalize z := by
cases le_total 0 z <;> simp [normalize_of_nonneg, normalize_of_nonpos, *]
#align int.abs_eq_normalize Int.abs_eq_normalize
+-/
+#print Int.nonneg_of_normalize_eq_self /-
theorem nonneg_of_normalize_eq_self {z : ℤ} (hz : normalize z = z) : 0 ≤ z :=
abs_eq_self.1 <| by rw [abs_eq_normalize, hz]
#align int.nonneg_of_normalize_eq_self Int.nonneg_of_normalize_eq_self
+-/
+#print Int.nonneg_iff_normalize_eq_self /-
theorem nonneg_iff_normalize_eq_self (z : ℤ) : normalize z = z ↔ 0 ≤ z :=
⟨nonneg_of_normalize_eq_self, normalize_of_nonneg⟩
#align int.nonneg_iff_normalize_eq_self Int.nonneg_iff_normalize_eq_self
+-/
+#print Int.eq_of_associated_of_nonneg /-
theorem eq_of_associated_of_nonneg {a b : ℤ} (h : Associated a b) (ha : 0 ≤ a) (hb : 0 ≤ b) :
a = b :=
dvd_antisymm_of_normalize_eq (normalize_of_nonneg ha) (normalize_of_nonneg hb) h.Dvd h.symm.Dvd
#align int.eq_of_associated_of_nonneg Int.eq_of_associated_of_nonneg
+-/
end NormalizationMonoid
@@ -185,6 +203,7 @@ theorem natAbs_lcm (i j : ℤ) : natAbs (GCDMonoid.lcm i j) = Int.lcm i j :=
end GCDMonoid
+#print Int.exists_unit_of_abs /-
theorem exists_unit_of_abs (a : ℤ) : ∃ (u : ℤ) (h : IsUnit u), (Int.natAbs a : ℤ) = u * a :=
by
cases' nat_abs_eq a with h
@@ -192,6 +211,7 @@ theorem exists_unit_of_abs (a : ℤ) : ∃ (u : ℤ) (h : IsUnit u), (Int.natAbs
· use -1, is_unit_one.neg; rw [← neg_eq_iff_eq_neg.mpr h]
simp only [neg_mul, one_mul]
#align int.exists_unit_of_abs Int.exists_unit_of_abs
+-/
#print Int.gcd_eq_natAbs /-
theorem gcd_eq_natAbs {a b : ℤ} : Int.gcd a b = Nat.gcd a.natAbs b.natAbs :=
@@ -199,6 +219,7 @@ theorem gcd_eq_natAbs {a b : ℤ} : Int.gcd a b = Nat.gcd a.natAbs b.natAbs :=
#align int.gcd_eq_nat_abs Int.gcd_eq_natAbs
-/
+#print Int.gcd_eq_one_iff_coprime /-
theorem gcd_eq_one_iff_coprime {a b : ℤ} : Int.gcd a b = 1 ↔ IsCoprime a b :=
by
constructor
@@ -215,10 +236,13 @@ theorem gcd_eq_one_iff_coprime {a b : ℤ} : Int.gcd a b = 1 ↔ IsCoprime a b :
rw [← coe_nat_dvd, Int.ofNat_one, ← h]
exact dvd_add ((coe_nat_dvd_left.mpr ha).mul_left _) ((coe_nat_dvd_left.mpr hb).mul_left _)
#align int.gcd_eq_one_iff_coprime Int.gcd_eq_one_iff_coprime
+-/
+#print Int.coprime_iff_nat_coprime /-
theorem coprime_iff_nat_coprime {a b : ℤ} : IsCoprime a b ↔ Nat.coprime a.natAbs b.natAbs := by
rw [← gcd_eq_one_iff_coprime, Nat.coprime_iff_gcd_eq_one, gcd_eq_nat_abs]
#align int.coprime_iff_nat_coprime Int.coprime_iff_nat_coprime
+-/
#print Int.gcd_ne_one_iff_gcd_mul_right_ne_one /-
/-- If `gcd a (m * n) ≠ 1`, then `gcd a m ≠ 1` or `gcd a n ≠ 1`. -/
@@ -244,6 +268,7 @@ theorem gcd_eq_one_of_gcd_mul_right_eq_one_right {a : ℤ} {m n : ℕ} (h : a.gc
#align int.gcd_eq_one_of_gcd_mul_right_eq_one_right Int.gcd_eq_one_of_gcd_mul_right_eq_one_right
-/
+#print Int.sq_of_gcd_eq_one /-
theorem sq_of_gcd_eq_one {a b c : ℤ} (h : Int.gcd a b = 1) (heq : a * b = c ^ 2) :
∃ a0 : ℤ, a = a0 ^ 2 ∨ a = -a0 ^ 2 :=
by
@@ -253,12 +278,16 @@ theorem sq_of_gcd_eq_one {a b c : ℤ} (h : Int.gcd a b = 1) (heq : a * b = c ^
rw [← hu]
cases' Int.units_eq_one_or u with hu' hu' <;> · rw [hu']; simp
#align int.sq_of_gcd_eq_one Int.sq_of_gcd_eq_one
+-/
+#print Int.sq_of_coprime /-
theorem sq_of_coprime {a b c : ℤ} (h : IsCoprime a b) (heq : a * b = c ^ 2) :
∃ a0 : ℤ, a = a0 ^ 2 ∨ a = -a0 ^ 2 :=
sq_of_gcd_eq_one (gcd_eq_one_iff_coprime.mpr h) HEq
#align int.sq_of_coprime Int.sq_of_coprime
+-/
+#print Int.natAbs_euclideanDomain_gcd /-
theorem natAbs_euclideanDomain_gcd (a b : ℤ) : Int.natAbs (EuclideanDomain.gcd a b) = Int.gcd a b :=
by
apply Nat.dvd_antisymm <;> rw [← Int.coe_nat_dvd]
@@ -267,9 +296,11 @@ theorem natAbs_euclideanDomain_gcd (a b : ℤ) : Int.natAbs (EuclideanDomain.gcd
· rw [Int.dvd_natAbs]
exact EuclideanDomain.dvd_gcd (Int.gcd_dvd_left _ _) (Int.gcd_dvd_right _ _)
#align int.nat_abs_euclidean_domain_gcd Int.natAbs_euclideanDomain_gcd
+-/
end Int
+#print associatesIntEquivNat /-
/-- Maps an associate class of integers consisting of `-n, n` to `n : ℕ` -/
def associatesIntEquivNat : Associates ℤ ≃ ℕ :=
by
@@ -283,7 +314,9 @@ def associatesIntEquivNat : Associates ℤ ≃ ℕ :=
dsimp
rw [← normalize_apply, ← Int.abs_eq_normalize, Int.natAbs_abs, Int.natAbs_ofNat]
#align associates_int_equiv_nat associatesIntEquivNat
+-/
+#print Int.Prime.dvd_mul /-
theorem Int.Prime.dvd_mul {m n : ℤ} {p : ℕ} (hp : Nat.Prime p) (h : (p : ℤ) ∣ m * n) :
p ∣ m.natAbs ∨ p ∣ n.natAbs :=
by
@@ -291,27 +324,35 @@ theorem Int.Prime.dvd_mul {m n : ℤ} {p : ℕ} (hp : Nat.Prime p) (h : (p : ℤ
rw [← Int.natAbs_mul]
exact int.coe_nat_dvd_left.mp h
#align int.prime.dvd_mul Int.Prime.dvd_mul
+-/
+#print Int.Prime.dvd_mul' /-
theorem Int.Prime.dvd_mul' {m n : ℤ} {p : ℕ} (hp : Nat.Prime p) (h : (p : ℤ) ∣ m * n) :
(p : ℤ) ∣ m ∨ (p : ℤ) ∣ n :=
by
rw [Int.coe_nat_dvd_left, Int.coe_nat_dvd_left]
exact Int.Prime.dvd_mul hp h
#align int.prime.dvd_mul' Int.Prime.dvd_mul'
+-/
+#print Int.Prime.dvd_pow /-
theorem Int.Prime.dvd_pow {n : ℤ} {k p : ℕ} (hp : Nat.Prime p) (h : (p : ℤ) ∣ n ^ k) :
p ∣ n.natAbs := by
apply @Nat.Prime.dvd_of_dvd_pow _ _ k hp
rw [← Int.natAbs_pow]
exact int.coe_nat_dvd_left.mp h
#align int.prime.dvd_pow Int.Prime.dvd_pow
+-/
+#print Int.Prime.dvd_pow' /-
theorem Int.Prime.dvd_pow' {n : ℤ} {k p : ℕ} (hp : Nat.Prime p) (h : (p : ℤ) ∣ n ^ k) :
(p : ℤ) ∣ n := by
rw [Int.coe_nat_dvd_left]
exact Int.Prime.dvd_pow hp h
#align int.prime.dvd_pow' Int.Prime.dvd_pow'
+-/
+#print prime_two_or_dvd_of_dvd_two_mul_pow_self_two /-
theorem prime_two_or_dvd_of_dvd_two_mul_pow_self_two {m : ℤ} {p : ℕ} (hp : Nat.Prime p)
(h : (p : ℤ) ∣ 2 * m ^ 2) : p = 2 ∨ p ∣ Int.natAbs m :=
by
@@ -322,15 +363,19 @@ theorem prime_two_or_dvd_of_dvd_two_mul_pow_self_two {m : ℤ} {p : ℕ} (hp : N
rw [sq, Int.natAbs_mul] at hpp
exact (or_self_iff _).mp ((Nat.Prime.dvd_mul hp).mp hpp)
#align prime_two_or_dvd_of_dvd_two_mul_pow_self_two prime_two_or_dvd_of_dvd_two_mul_pow_self_two
+-/
+#print Int.exists_prime_and_dvd /-
theorem Int.exists_prime_and_dvd {n : ℤ} (hn : n.natAbs ≠ 1) : ∃ p, Prime p ∧ p ∣ n :=
by
obtain ⟨p, pp, pd⟩ := Nat.exists_prime_and_dvd hn
exact ⟨p, nat.prime_iff_prime_int.mp pp, int.coe_nat_dvd_left.mpr pd⟩
#align int.exists_prime_and_dvd Int.exists_prime_and_dvd
+-/
open UniqueFactorizationMonoid
+#print Nat.factors_eq /-
theorem Nat.factors_eq {n : ℕ} : normalizedFactors n = n.factors :=
by
cases n; · simp
@@ -343,7 +388,9 @@ theorem Nat.factors_eq {n : ℕ} : normalizedFactors n = n.factors :=
rw [Nat.irreducible_iff_prime, ← Nat.prime_iff]
exact Nat.prime_of_mem_factors hx
#align nat.factors_eq Nat.factors_eq
+-/
+#print Nat.factors_multiset_prod_of_irreducible /-
theorem Nat.factors_multiset_prod_of_irreducible {s : Multiset ℕ}
(h : ∀ x : ℕ, x ∈ s → Irreducible x) : normalizedFactors s.Prod = s :=
by
@@ -355,16 +402,21 @@ theorem Nat.factors_multiset_prod_of_irreducible {s : Multiset ℕ}
intro con
exact not_irreducible_zero (h 0 Con)
#align nat.factors_multiset_prod_of_irreducible Nat.factors_multiset_prod_of_irreducible
+-/
namespace multiplicity
+#print multiplicity.finite_int_iff_natAbs_finite /-
theorem finite_int_iff_natAbs_finite {a b : ℤ} : Finite a b ↔ Finite a.natAbs b.natAbs := by
simp only [finite_def, ← Int.natAbs_dvd_natAbs, Int.natAbs_pow]
#align multiplicity.finite_int_iff_nat_abs_finite multiplicity.finite_int_iff_natAbs_finite
+-/
+#print multiplicity.finite_int_iff /-
theorem finite_int_iff {a b : ℤ} : Finite a b ↔ a.natAbs ≠ 1 ∧ b ≠ 0 := by
rw [finite_int_iff_nat_abs_finite, finite_nat_iff, pos_iff_ne_zero, Int.natAbs_ne_zero]
#align multiplicity.finite_int_iff multiplicity.finite_int_iff
+-/
#print multiplicity.decidableNat /-
instance decidableNat : DecidableRel fun a b : ℕ => (multiplicity a b).Dom := fun a b =>
@@ -372,9 +424,11 @@ instance decidableNat : DecidableRel fun a b : ℕ => (multiplicity a b).Dom :=
#align multiplicity.decidable_nat multiplicity.decidableNat
-/
+#print multiplicity.decidableInt /-
instance decidableInt : DecidableRel fun a b : ℤ => (multiplicity a b).Dom := fun a b =>
decidable_of_iff _ finite_int_iff.symm
#align multiplicity.decidable_int multiplicity.decidableInt
+-/
end multiplicity
@@ -392,40 +446,53 @@ theorem induction_on_primes {P : ℕ → Prop} (h₀ : P 0) (h₁ : P 1)
#align induction_on_primes induction_on_primes
-/
+#print Int.associated_natAbs /-
theorem Int.associated_natAbs (k : ℤ) : Associated k k.natAbs :=
associated_of_dvd_dvd (Int.coe_nat_dvd_right.mpr dvd_rfl) (Int.natAbs_dvd.mpr dvd_rfl)
#align int.associated_nat_abs Int.associated_natAbs
+-/
+#print Int.prime_iff_natAbs_prime /-
theorem Int.prime_iff_natAbs_prime {k : ℤ} : Prime k ↔ Nat.Prime k.natAbs :=
(Int.associated_natAbs k).prime_iff.trans Nat.prime_iff_prime_int.symm
#align int.prime_iff_nat_abs_prime Int.prime_iff_natAbs_prime
+-/
+#print Int.associated_iff_natAbs /-
theorem Int.associated_iff_natAbs {a b : ℤ} : Associated a b ↔ a.natAbs = b.natAbs :=
by
rw [← dvd_dvd_iff_associated, ← Int.natAbs_dvd_natAbs, ← Int.natAbs_dvd_natAbs,
dvd_dvd_iff_associated]
exact associated_iff_eq
#align int.associated_iff_nat_abs Int.associated_iff_natAbs
+-/
+#print Int.associated_iff /-
theorem Int.associated_iff {a b : ℤ} : Associated a b ↔ a = b ∨ a = -b :=
by
rw [Int.associated_iff_natAbs]
exact Int.natAbs_eq_natAbs_iff
#align int.associated_iff Int.associated_iff
+-/
namespace Int
+#print Int.zmultiples_natAbs /-
theorem zmultiples_natAbs (a : ℤ) :
AddSubgroup.zmultiples (a.natAbs : ℤ) = AddSubgroup.zmultiples a :=
le_antisymm
(AddSubgroup.zmultiples_le_of_mem (mem_zmultiples_iff.mpr (dvd_natAbs.mpr (dvd_refl a))))
(AddSubgroup.zmultiples_le_of_mem (mem_zmultiples_iff.mpr (natAbs_dvd.mpr (dvd_refl a))))
#align int.zmultiples_nat_abs Int.zmultiples_natAbs
+-/
+#print Int.span_natAbs /-
theorem span_natAbs (a : ℤ) : Ideal.span ({a.natAbs} : Set ℤ) = Ideal.span {a} := by
rw [Ideal.span_singleton_eq_span_singleton]; exact (associated_nat_abs _).symm
#align int.span_nat_abs Int.span_natAbs
+-/
+#print Int.eq_pow_of_mul_eq_pow_bit1_left /-
theorem eq_pow_of_mul_eq_pow_bit1_left {a b c : ℤ} (hab : IsCoprime a b) {k : ℕ}
(h : a * b = c ^ bit1 k) : ∃ d, a = d ^ bit1 k :=
by
@@ -434,16 +501,21 @@ theorem eq_pow_of_mul_eq_pow_bit1_left {a b c : ℤ} (hab : IsCoprime a b) {k :
rw [associated_iff_nat_abs, nat_abs_eq_nat_abs_iff, ← neg_pow_bit1] at hd
obtain rfl | rfl := hd <;> exact ⟨_, rfl⟩
#align int.eq_pow_of_mul_eq_pow_bit1_left Int.eq_pow_of_mul_eq_pow_bit1_left
+-/
+#print Int.eq_pow_of_mul_eq_pow_bit1_right /-
theorem eq_pow_of_mul_eq_pow_bit1_right {a b c : ℤ} (hab : IsCoprime a b) {k : ℕ}
(h : a * b = c ^ bit1 k) : ∃ d, b = d ^ bit1 k :=
eq_pow_of_mul_eq_pow_bit1_left hab.symm (by rwa [mul_comm] at h )
#align int.eq_pow_of_mul_eq_pow_bit1_right Int.eq_pow_of_mul_eq_pow_bit1_right
+-/
+#print Int.eq_pow_of_mul_eq_pow_bit1 /-
theorem eq_pow_of_mul_eq_pow_bit1 {a b c : ℤ} (hab : IsCoprime a b) {k : ℕ}
(h : a * b = c ^ bit1 k) : (∃ d, a = d ^ bit1 k) ∧ ∃ e, b = e ^ bit1 k :=
⟨eq_pow_of_mul_eq_pow_bit1_left hab h, eq_pow_of_mul_eq_pow_bit1_right hab h⟩
#align int.eq_pow_of_mul_eq_pow_bit1 Int.eq_pow_of_mul_eq_pow_bit1
+-/
end Int
mathlib commit https://github.com/leanprover-community/mathlib/commit/cca40788df1b8755d5baf17ab2f27dacc2e17acb
@@ -185,7 +185,7 @@ theorem natAbs_lcm (i j : ℤ) : natAbs (GCDMonoid.lcm i j) = Int.lcm i j :=
end GCDMonoid
-theorem exists_unit_of_abs (a : ℤ) : ∃ (u : ℤ)(h : IsUnit u), (Int.natAbs a : ℤ) = u * a :=
+theorem exists_unit_of_abs (a : ℤ) : ∃ (u : ℤ) (h : IsUnit u), (Int.natAbs a : ℤ) = u * a :=
by
cases' nat_abs_eq a with h
· use 1, isUnit_one; rw [← h, one_mul]
@@ -319,7 +319,7 @@ theorem prime_two_or_dvd_of_dvd_two_mul_pow_self_two {m : ℤ} {p : ℕ} (hp : N
· apply Or.intro_left
exact le_antisymm (Nat.le_of_dvd zero_lt_two hp2) (Nat.Prime.two_le hp)
· apply Or.intro_right
- rw [sq, Int.natAbs_mul] at hpp
+ rw [sq, Int.natAbs_mul] at hpp
exact (or_self_iff _).mp ((Nat.Prime.dvd_mul hp).mp hpp)
#align prime_two_or_dvd_of_dvd_two_mul_pow_self_two prime_two_or_dvd_of_dvd_two_mul_pow_self_two
@@ -431,13 +431,13 @@ theorem eq_pow_of_mul_eq_pow_bit1_left {a b c : ℤ} (hab : IsCoprime a b) {k :
by
obtain ⟨d, hd⟩ := exists_associated_pow_of_mul_eq_pow' hab h
replace hd := hd.symm
- rw [associated_iff_nat_abs, nat_abs_eq_nat_abs_iff, ← neg_pow_bit1] at hd
+ rw [associated_iff_nat_abs, nat_abs_eq_nat_abs_iff, ← neg_pow_bit1] at hd
obtain rfl | rfl := hd <;> exact ⟨_, rfl⟩
#align int.eq_pow_of_mul_eq_pow_bit1_left Int.eq_pow_of_mul_eq_pow_bit1_left
theorem eq_pow_of_mul_eq_pow_bit1_right {a b c : ℤ} (hab : IsCoprime a b) {k : ℕ}
(h : a * b = c ^ bit1 k) : ∃ d, b = d ^ bit1 k :=
- eq_pow_of_mul_eq_pow_bit1_left hab.symm (by rwa [mul_comm] at h)
+ eq_pow_of_mul_eq_pow_bit1_left hab.symm (by rwa [mul_comm] at h )
#align int.eq_pow_of_mul_eq_pow_bit1_right Int.eq_pow_of_mul_eq_pow_bit1_right
theorem eq_pow_of_mul_eq_pow_bit1 {a b c : ℤ} (hab : IsCoprime a b) {k : ℕ}
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -79,22 +79,10 @@ instance : NormalizedGCDMonoid ℕ :=
normalize_gcd := fun a b => normalize_eq _
normalize_lcm := fun a b => normalize_eq _ }
-/- warning: gcd_eq_nat_gcd -> gcd_eq_nat_gcd is a dubious translation:
-lean 3 declaration is
- forall (m : Nat) (n : Nat), Eq.{1} Nat (GCDMonoid.gcd.{0} Nat Nat.cancelCommMonoidWithZero Nat.gcdMonoid m n) (Nat.gcd m n)
-but is expected to have type
- forall (m : Nat) (n : Nat), Eq.{1} Nat (GCDMonoid.gcd.{0} Nat Nat.cancelCommMonoidWithZero instGCDMonoidNatCancelCommMonoidWithZero m n) (Nat.gcd m n)
-Case conversion may be inaccurate. Consider using '#align gcd_eq_nat_gcd gcd_eq_nat_gcdₓ'. -/
theorem gcd_eq_nat_gcd (m n : ℕ) : gcd m n = Nat.gcd m n :=
rfl
#align gcd_eq_nat_gcd gcd_eq_nat_gcd
-/- warning: lcm_eq_nat_lcm -> lcm_eq_nat_lcm is a dubious translation:
-lean 3 declaration is
- forall (m : Nat) (n : Nat), Eq.{1} Nat (GCDMonoid.lcm.{0} Nat Nat.cancelCommMonoidWithZero Nat.gcdMonoid m n) (Nat.lcm m n)
-but is expected to have type
- forall (m : Nat) (n : Nat), Eq.{1} Nat (GCDMonoid.lcm.{0} Nat Nat.cancelCommMonoidWithZero instGCDMonoidNatCancelCommMonoidWithZero m n) (Nat.lcm m n)
-Case conversion may be inaccurate. Consider using '#align lcm_eq_nat_lcm lcm_eq_nat_lcmₓ'. -/
theorem lcm_eq_nat_lcm (m n : ℕ) : lcm m n = Nat.lcm m n :=
rfl
#align lcm_eq_nat_lcm lcm_eq_nat_lcm
@@ -114,22 +102,10 @@ instance : NormalizationMonoid ℤ
(units_eq_one_or u).elim (fun eq => Eq.symm ▸ if_pos zero_le_one) fun eq =>
Eq.symm ▸ if_neg (not_le_of_gt <| show (-1 : ℤ) < 0 by decide)
-/- warning: int.normalize_of_nonneg -> Int.normalize_of_nonneg is a dubious translation:
-lean 3 declaration is
- forall {z : Int}, (LE.le.{0} Int Int.hasLe (OfNat.ofNat.{0} Int 0 (OfNat.mk.{0} Int 0 (Zero.zero.{0} Int Int.hasZero))) z) -> (Eq.{1} Int (coeFn.{1, 1} (MonoidWithZeroHom.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.commSemiring (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.commSemiring (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) (fun (_x : MonoidWithZeroHom.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.commSemiring (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.commSemiring (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) => Int -> Int) (MonoidWithZeroHom.hasCoeToFun.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.commSemiring (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.commSemiring (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) (normalize.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.commSemiring (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))) Int.normalizationMonoid) z) z)
-but is expected to have type
- forall {z : Int}, (LE.le.{0} Int Int.instLEInt (OfNat.ofNat.{0} Int 0 (instOfNatInt 0)) z) -> (Eq.{1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : Int) => Int) z) (FunLike.coe.{1, 1, 1} (MonoidWithZeroHom.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) Int (fun (_x : Int) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : Int) => Int) _x) (MulHomClass.toFunLike.{0, 0, 0} (MonoidWithZeroHom.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) Int Int (MulOneClass.toMul.{0} Int (MulZeroOneClass.toMulOneClass.{0} Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))))) (MulOneClass.toMul.{0} Int (MulZeroOneClass.toMulOneClass.{0} Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))))) (MonoidHomClass.toMulHomClass.{0, 0, 0} (MonoidWithZeroHom.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) Int Int (MulZeroOneClass.toMulOneClass.{0} Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) (MulZeroOneClass.toMulOneClass.{0} Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) (MonoidWithZeroHomClass.toMonoidHomClass.{0, 0, 0} (MonoidWithZeroHom.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZeroHom.monoidWithZeroHomClass.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))))))) (normalize.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))) Int.normalizationMonoid) z) z)
-Case conversion may be inaccurate. Consider using '#align int.normalize_of_nonneg Int.normalize_of_nonnegₓ'. -/
theorem normalize_of_nonneg {z : ℤ} (h : 0 ≤ z) : normalize z = z :=
show z * ↑(ite _ _ _) = z by rw [if_pos h, Units.val_one, mul_one]
#align int.normalize_of_nonneg Int.normalize_of_nonneg
-/- warning: int.normalize_of_nonpos -> Int.normalize_of_nonpos is a dubious translation:
-lean 3 declaration is
- forall {z : Int}, (LE.le.{0} Int Int.hasLe z (OfNat.ofNat.{0} Int 0 (OfNat.mk.{0} Int 0 (Zero.zero.{0} Int Int.hasZero)))) -> (Eq.{1} Int (coeFn.{1, 1} (MonoidWithZeroHom.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.commSemiring (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.commSemiring (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) (fun (_x : MonoidWithZeroHom.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.commSemiring (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.commSemiring (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) => Int -> Int) (MonoidWithZeroHom.hasCoeToFun.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.commSemiring (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.commSemiring (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) (normalize.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.commSemiring (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))) Int.normalizationMonoid) z) (Neg.neg.{0} Int Int.hasNeg z))
-but is expected to have type
- forall {z : Int}, (LE.le.{0} Int Int.instLEInt z (OfNat.ofNat.{0} Int 0 (instOfNatInt 0))) -> (Eq.{1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : Int) => Int) z) (FunLike.coe.{1, 1, 1} (MonoidWithZeroHom.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) Int (fun (_x : Int) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : Int) => Int) _x) (MulHomClass.toFunLike.{0, 0, 0} (MonoidWithZeroHom.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) Int Int (MulOneClass.toMul.{0} Int (MulZeroOneClass.toMulOneClass.{0} Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))))) (MulOneClass.toMul.{0} Int (MulZeroOneClass.toMulOneClass.{0} Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))))) (MonoidHomClass.toMulHomClass.{0, 0, 0} (MonoidWithZeroHom.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) Int Int (MulZeroOneClass.toMulOneClass.{0} Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) (MulZeroOneClass.toMulOneClass.{0} Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) (MonoidWithZeroHomClass.toMonoidHomClass.{0, 0, 0} (MonoidWithZeroHom.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZeroHom.monoidWithZeroHomClass.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))))))) (normalize.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))) Int.normalizationMonoid) z) (Neg.neg.{0} Int Int.instNegInt z))
-Case conversion may be inaccurate. Consider using '#align int.normalize_of_nonpos Int.normalize_of_nonposₓ'. -/
theorem normalize_of_nonpos {z : ℤ} (h : z ≤ 0) : normalize z = -z :=
by
obtain rfl | h := h.eq_or_lt
@@ -138,52 +114,22 @@ theorem normalize_of_nonpos {z : ℤ} (h : z ≤ 0) : normalize z = -z :=
rw [if_neg (not_le_of_gt h), Units.val_neg, Units.val_one, mul_neg_one]
#align int.normalize_of_nonpos Int.normalize_of_nonpos
-/- warning: int.normalize_coe_nat -> Int.normalize_coe_nat is a dubious translation:
-lean 3 declaration is
- forall (n : Nat), Eq.{1} Int (coeFn.{1, 1} (MonoidWithZeroHom.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.commSemiring (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.commSemiring (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) (fun (_x : MonoidWithZeroHom.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.commSemiring (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.commSemiring (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) => Int -> Int) (MonoidWithZeroHom.hasCoeToFun.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.commSemiring (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.commSemiring (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) (normalize.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.commSemiring (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))) Int.normalizationMonoid) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Nat Int (HasLiftT.mk.{1, 1} Nat Int (CoeTCₓ.coe.{1, 1} Nat Int (coeBase.{1, 1} Nat Int Int.hasCoe))) n)) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Nat Int (HasLiftT.mk.{1, 1} Nat Int (CoeTCₓ.coe.{1, 1} Nat Int (coeBase.{1, 1} Nat Int Int.hasCoe))) n)
-but is expected to have type
- forall (n : Nat), Eq.{1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : Int) => Int) (Nat.cast.{0} Int instNatCastInt n)) (FunLike.coe.{1, 1, 1} (MonoidWithZeroHom.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) Int (fun (_x : Int) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : Int) => Int) _x) (MulHomClass.toFunLike.{0, 0, 0} (MonoidWithZeroHom.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) Int Int (MulOneClass.toMul.{0} Int (MulZeroOneClass.toMulOneClass.{0} Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))))) (MulOneClass.toMul.{0} Int (MulZeroOneClass.toMulOneClass.{0} Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))))) (MonoidHomClass.toMulHomClass.{0, 0, 0} (MonoidWithZeroHom.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) Int Int (MulZeroOneClass.toMulOneClass.{0} Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) (MulZeroOneClass.toMulOneClass.{0} Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) (MonoidWithZeroHomClass.toMonoidHomClass.{0, 0, 0} (MonoidWithZeroHom.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZeroHom.monoidWithZeroHomClass.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))))))) (normalize.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))) Int.normalizationMonoid) (Nat.cast.{0} Int instNatCastInt n)) (Nat.cast.{0} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : Int) => Int) (Nat.cast.{0} Int instNatCastInt n)) instNatCastInt n)
-Case conversion may be inaccurate. Consider using '#align int.normalize_coe_nat Int.normalize_coe_natₓ'. -/
theorem normalize_coe_nat (n : ℕ) : normalize (n : ℤ) = n :=
normalize_of_nonneg (ofNat_le_ofNat_of_le <| Nat.zero_le n)
#align int.normalize_coe_nat Int.normalize_coe_nat
-/- warning: int.abs_eq_normalize -> Int.abs_eq_normalize is a dubious translation:
-lean 3 declaration is
- forall (z : Int), Eq.{1} Int (Abs.abs.{0} Int (Neg.toHasAbs.{0} Int Int.hasNeg (SemilatticeSup.toHasSup.{0} Int (Lattice.toSemilatticeSup.{0} Int (LinearOrder.toLattice.{0} Int Int.linearOrder)))) z) (coeFn.{1, 1} (MonoidWithZeroHom.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.commSemiring (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.commSemiring (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) (fun (_x : MonoidWithZeroHom.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.commSemiring (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.commSemiring (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) => Int -> Int) (MonoidWithZeroHom.hasCoeToFun.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.commSemiring (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.commSemiring (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) (normalize.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.commSemiring (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))) Int.normalizationMonoid) z)
-but is expected to have type
- forall (z : Int), Eq.{1} Int (Abs.abs.{0} Int (Neg.toHasAbs.{0} Int Int.instNegInt (SemilatticeSup.toSup.{0} Int (Lattice.toSemilatticeSup.{0} Int (DistribLattice.toLattice.{0} Int (instDistribLattice.{0} Int Int.instLinearOrderInt))))) z) (FunLike.coe.{1, 1, 1} (MonoidWithZeroHom.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) Int (fun (_x : Int) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : Int) => Int) _x) (MulHomClass.toFunLike.{0, 0, 0} (MonoidWithZeroHom.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) Int Int (MulOneClass.toMul.{0} Int (MulZeroOneClass.toMulOneClass.{0} Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))))) (MulOneClass.toMul.{0} Int (MulZeroOneClass.toMulOneClass.{0} Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))))) (MonoidHomClass.toMulHomClass.{0, 0, 0} (MonoidWithZeroHom.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) Int Int (MulZeroOneClass.toMulOneClass.{0} Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) (MulZeroOneClass.toMulOneClass.{0} Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) (MonoidWithZeroHomClass.toMonoidHomClass.{0, 0, 0} (MonoidWithZeroHom.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZeroHom.monoidWithZeroHomClass.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))))))) (normalize.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))) Int.normalizationMonoid) z)
-Case conversion may be inaccurate. Consider using '#align int.abs_eq_normalize Int.abs_eq_normalizeₓ'. -/
theorem abs_eq_normalize (z : ℤ) : |z| = normalize z := by
cases le_total 0 z <;> simp [normalize_of_nonneg, normalize_of_nonpos, *]
#align int.abs_eq_normalize Int.abs_eq_normalize
-/- warning: int.nonneg_of_normalize_eq_self -> Int.nonneg_of_normalize_eq_self is a dubious translation:
-lean 3 declaration is
- forall {z : Int}, (Eq.{1} Int (coeFn.{1, 1} (MonoidWithZeroHom.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.commSemiring (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.commSemiring (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) (fun (_x : MonoidWithZeroHom.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.commSemiring (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.commSemiring (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) => Int -> Int) (MonoidWithZeroHom.hasCoeToFun.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.commSemiring (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.commSemiring (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) (normalize.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.commSemiring (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))) Int.normalizationMonoid) z) z) -> (LE.le.{0} Int Int.hasLe (OfNat.ofNat.{0} Int 0 (OfNat.mk.{0} Int 0 (Zero.zero.{0} Int Int.hasZero))) z)
-but is expected to have type
- forall {z : Int}, (Eq.{1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : Int) => Int) z) (FunLike.coe.{1, 1, 1} (MonoidWithZeroHom.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) Int (fun (_x : Int) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : Int) => Int) _x) (MulHomClass.toFunLike.{0, 0, 0} (MonoidWithZeroHom.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) Int Int (MulOneClass.toMul.{0} Int (MulZeroOneClass.toMulOneClass.{0} Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))))) (MulOneClass.toMul.{0} Int (MulZeroOneClass.toMulOneClass.{0} Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))))) (MonoidHomClass.toMulHomClass.{0, 0, 0} (MonoidWithZeroHom.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) Int Int (MulZeroOneClass.toMulOneClass.{0} Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) (MulZeroOneClass.toMulOneClass.{0} Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) (MonoidWithZeroHomClass.toMonoidHomClass.{0, 0, 0} (MonoidWithZeroHom.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZeroHom.monoidWithZeroHomClass.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))))))) (normalize.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))) Int.normalizationMonoid) z) z) -> (LE.le.{0} Int Int.instLEInt (OfNat.ofNat.{0} Int 0 (instOfNatInt 0)) z)
-Case conversion may be inaccurate. Consider using '#align int.nonneg_of_normalize_eq_self Int.nonneg_of_normalize_eq_selfₓ'. -/
theorem nonneg_of_normalize_eq_self {z : ℤ} (hz : normalize z = z) : 0 ≤ z :=
abs_eq_self.1 <| by rw [abs_eq_normalize, hz]
#align int.nonneg_of_normalize_eq_self Int.nonneg_of_normalize_eq_self
-/- warning: int.nonneg_iff_normalize_eq_self -> Int.nonneg_iff_normalize_eq_self is a dubious translation:
-lean 3 declaration is
- forall (z : Int), Iff (Eq.{1} Int (coeFn.{1, 1} (MonoidWithZeroHom.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.commSemiring (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.commSemiring (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) (fun (_x : MonoidWithZeroHom.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.commSemiring (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.commSemiring (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) => Int -> Int) (MonoidWithZeroHom.hasCoeToFun.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.commSemiring (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.commSemiring (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) (normalize.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.commSemiring (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))) Int.normalizationMonoid) z) z) (LE.le.{0} Int Int.hasLe (OfNat.ofNat.{0} Int 0 (OfNat.mk.{0} Int 0 (Zero.zero.{0} Int Int.hasZero))) z)
-but is expected to have type
- forall (z : Int), Iff (Eq.{1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : Int) => Int) z) (FunLike.coe.{1, 1, 1} (MonoidWithZeroHom.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) Int (fun (_x : Int) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : Int) => Int) _x) (MulHomClass.toFunLike.{0, 0, 0} (MonoidWithZeroHom.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) Int Int (MulOneClass.toMul.{0} Int (MulZeroOneClass.toMulOneClass.{0} Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))))) (MulOneClass.toMul.{0} Int (MulZeroOneClass.toMulOneClass.{0} Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))))) (MonoidHomClass.toMulHomClass.{0, 0, 0} (MonoidWithZeroHom.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) Int Int (MulZeroOneClass.toMulOneClass.{0} Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) (MulZeroOneClass.toMulOneClass.{0} Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) (MonoidWithZeroHomClass.toMonoidHomClass.{0, 0, 0} (MonoidWithZeroHom.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZeroHom.monoidWithZeroHomClass.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))))))) (normalize.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))) Int.normalizationMonoid) z) z) (LE.le.{0} Int Int.instLEInt (OfNat.ofNat.{0} Int 0 (instOfNatInt 0)) z)
-Case conversion may be inaccurate. Consider using '#align int.nonneg_iff_normalize_eq_self Int.nonneg_iff_normalize_eq_selfₓ'. -/
theorem nonneg_iff_normalize_eq_self (z : ℤ) : normalize z = z ↔ 0 ≤ z :=
⟨nonneg_of_normalize_eq_self, normalize_of_nonneg⟩
#align int.nonneg_iff_normalize_eq_self Int.nonneg_iff_normalize_eq_self
-/- warning: int.eq_of_associated_of_nonneg -> Int.eq_of_associated_of_nonneg is a dubious translation:
-lean 3 declaration is
- forall {a : Int} {b : Int}, (Associated.{0} Int Int.monoid a b) -> (LE.le.{0} Int Int.hasLe (OfNat.ofNat.{0} Int 0 (OfNat.mk.{0} Int 0 (Zero.zero.{0} Int Int.hasZero))) a) -> (LE.le.{0} Int Int.hasLe (OfNat.ofNat.{0} Int 0 (OfNat.mk.{0} Int 0 (Zero.zero.{0} Int Int.hasZero))) b) -> (Eq.{1} Int a b)
-but is expected to have type
- forall {a : Int} {b : Int}, (Associated.{0} Int Int.instMonoidInt a b) -> (LE.le.{0} Int Int.instLEInt (OfNat.ofNat.{0} Int 0 (instOfNatInt 0)) a) -> (LE.le.{0} Int Int.instLEInt (OfNat.ofNat.{0} Int 0 (instOfNatInt 0)) b) -> (Eq.{1} Int a b)
-Case conversion may be inaccurate. Consider using '#align int.eq_of_associated_of_nonneg Int.eq_of_associated_of_nonnegₓ'. -/
theorem eq_of_associated_of_nonneg {a b : ℤ} (h : Associated a b) (ha : 0 ≤ a) (hb : 0 ≤ b) :
a = b :=
dvd_antisymm_of_normalize_eq (normalize_of_nonneg ha) (normalize_of_nonneg hb) h.Dvd h.symm.Dvd
@@ -239,12 +185,6 @@ theorem natAbs_lcm (i j : ℤ) : natAbs (GCDMonoid.lcm i j) = Int.lcm i j :=
end GCDMonoid
-/- warning: int.exists_unit_of_abs -> Int.exists_unit_of_abs is a dubious translation:
-lean 3 declaration is
- forall (a : Int), Exists.{1} Int (fun (u : Int) => Exists.{0} (IsUnit.{0} Int Int.monoid u) (fun (h : IsUnit.{0} Int Int.monoid u) => Eq.{1} Int ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Nat Int (HasLiftT.mk.{1, 1} Nat Int (CoeTCₓ.coe.{1, 1} Nat Int (coeBase.{1, 1} Nat Int Int.hasCoe))) (Int.natAbs a)) (HMul.hMul.{0, 0, 0} Int Int Int (instHMul.{0} Int Int.hasMul) u a)))
-but is expected to have type
- forall (a : Int), Exists.{1} Int (fun (u : Int) => Exists.{0} (IsUnit.{0} Int Int.instMonoidInt u) (fun (h : IsUnit.{0} Int Int.instMonoidInt u) => Eq.{1} Int (Nat.cast.{0} Int instNatCastInt (Int.natAbs a)) (HMul.hMul.{0, 0, 0} Int Int Int (instHMul.{0} Int Int.instMulInt) u a)))
-Case conversion may be inaccurate. Consider using '#align int.exists_unit_of_abs Int.exists_unit_of_absₓ'. -/
theorem exists_unit_of_abs (a : ℤ) : ∃ (u : ℤ)(h : IsUnit u), (Int.natAbs a : ℤ) = u * a :=
by
cases' nat_abs_eq a with h
@@ -259,12 +199,6 @@ theorem gcd_eq_natAbs {a b : ℤ} : Int.gcd a b = Nat.gcd a.natAbs b.natAbs :=
#align int.gcd_eq_nat_abs Int.gcd_eq_natAbs
-/
-/- warning: int.gcd_eq_one_iff_coprime -> Int.gcd_eq_one_iff_coprime is a dubious translation:
-lean 3 declaration is
- forall {a : Int} {b : Int}, Iff (Eq.{1} Nat (Int.gcd a b) (OfNat.ofNat.{0} Nat 1 (OfNat.mk.{0} Nat 1 (One.one.{0} Nat Nat.hasOne)))) (IsCoprime.{0} Int Int.commSemiring a b)
-but is expected to have type
- forall {a : Int} {b : Int}, Iff (Eq.{1} Nat (Int.gcd a b) (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1))) (IsCoprime.{0} Int Int.instCommSemiringInt a b)
-Case conversion may be inaccurate. Consider using '#align int.gcd_eq_one_iff_coprime Int.gcd_eq_one_iff_coprimeₓ'. -/
theorem gcd_eq_one_iff_coprime {a b : ℤ} : Int.gcd a b = 1 ↔ IsCoprime a b :=
by
constructor
@@ -282,12 +216,6 @@ theorem gcd_eq_one_iff_coprime {a b : ℤ} : Int.gcd a b = 1 ↔ IsCoprime a b :
exact dvd_add ((coe_nat_dvd_left.mpr ha).mul_left _) ((coe_nat_dvd_left.mpr hb).mul_left _)
#align int.gcd_eq_one_iff_coprime Int.gcd_eq_one_iff_coprime
-/- warning: int.coprime_iff_nat_coprime -> Int.coprime_iff_nat_coprime is a dubious translation:
-lean 3 declaration is
- forall {a : Int} {b : Int}, Iff (IsCoprime.{0} Int Int.commSemiring a b) (Nat.coprime (Int.natAbs a) (Int.natAbs b))
-but is expected to have type
- forall {a : Int} {b : Int}, Iff (IsCoprime.{0} Int Int.instCommSemiringInt a b) (Nat.coprime (Int.natAbs a) (Int.natAbs b))
-Case conversion may be inaccurate. Consider using '#align int.coprime_iff_nat_coprime Int.coprime_iff_nat_coprimeₓ'. -/
theorem coprime_iff_nat_coprime {a b : ℤ} : IsCoprime a b ↔ Nat.coprime a.natAbs b.natAbs := by
rw [← gcd_eq_one_iff_coprime, Nat.coprime_iff_gcd_eq_one, gcd_eq_nat_abs]
#align int.coprime_iff_nat_coprime Int.coprime_iff_nat_coprime
@@ -316,12 +244,6 @@ theorem gcd_eq_one_of_gcd_mul_right_eq_one_right {a : ℤ} {m n : ℕ} (h : a.gc
#align int.gcd_eq_one_of_gcd_mul_right_eq_one_right Int.gcd_eq_one_of_gcd_mul_right_eq_one_right
-/
-/- warning: int.sq_of_gcd_eq_one -> Int.sq_of_gcd_eq_one is a dubious translation:
-lean 3 declaration is
- forall {a : Int} {b : Int} {c : Int}, (Eq.{1} Nat (Int.gcd a b) (OfNat.ofNat.{0} Nat 1 (OfNat.mk.{0} Nat 1 (One.one.{0} Nat Nat.hasOne)))) -> (Eq.{1} Int (HMul.hMul.{0, 0, 0} Int Int Int (instHMul.{0} Int Int.hasMul) a b) (HPow.hPow.{0, 0, 0} Int Nat Int (instHPow.{0, 0} Int Nat (Monoid.Pow.{0} Int Int.monoid)) c (OfNat.ofNat.{0} Nat 2 (OfNat.mk.{0} Nat 2 (bit0.{0} Nat Nat.hasAdd (One.one.{0} Nat Nat.hasOne)))))) -> (Exists.{1} Int (fun (a0 : Int) => Or (Eq.{1} Int a (HPow.hPow.{0, 0, 0} Int Nat Int (instHPow.{0, 0} Int Nat (Monoid.Pow.{0} Int Int.monoid)) a0 (OfNat.ofNat.{0} Nat 2 (OfNat.mk.{0} Nat 2 (bit0.{0} Nat Nat.hasAdd (One.one.{0} Nat Nat.hasOne)))))) (Eq.{1} Int a (Neg.neg.{0} Int Int.hasNeg (HPow.hPow.{0, 0, 0} Int Nat Int (instHPow.{0, 0} Int Nat (Monoid.Pow.{0} Int Int.monoid)) a0 (OfNat.ofNat.{0} Nat 2 (OfNat.mk.{0} Nat 2 (bit0.{0} Nat Nat.hasAdd (One.one.{0} Nat Nat.hasOne)))))))))
-but is expected to have type
- forall {a : Int} {b : Int} {c : Int}, (Eq.{1} Nat (Int.gcd a b) (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1))) -> (Eq.{1} Int (HMul.hMul.{0, 0, 0} Int Int Int (instHMul.{0} Int Int.instMulInt) a b) (HPow.hPow.{0, 0, 0} Int Nat Int (instHPow.{0, 0} Int Nat (Monoid.Pow.{0} Int Int.instMonoidInt)) c (OfNat.ofNat.{0} Nat 2 (instOfNatNat 2)))) -> (Exists.{1} Int (fun (a0 : Int) => Or (Eq.{1} Int a (HPow.hPow.{0, 0, 0} Int Nat Int (instHPow.{0, 0} Int Nat (Monoid.Pow.{0} Int Int.instMonoidInt)) a0 (OfNat.ofNat.{0} Nat 2 (instOfNatNat 2)))) (Eq.{1} Int a (Neg.neg.{0} Int Int.instNegInt (HPow.hPow.{0, 0, 0} Int Nat Int (instHPow.{0, 0} Int Nat (Monoid.Pow.{0} Int Int.instMonoidInt)) a0 (OfNat.ofNat.{0} Nat 2 (instOfNatNat 2)))))))
-Case conversion may be inaccurate. Consider using '#align int.sq_of_gcd_eq_one Int.sq_of_gcd_eq_oneₓ'. -/
theorem sq_of_gcd_eq_one {a b c : ℤ} (h : Int.gcd a b = 1) (heq : a * b = c ^ 2) :
∃ a0 : ℤ, a = a0 ^ 2 ∨ a = -a0 ^ 2 :=
by
@@ -332,23 +254,11 @@ theorem sq_of_gcd_eq_one {a b c : ℤ} (h : Int.gcd a b = 1) (heq : a * b = c ^
cases' Int.units_eq_one_or u with hu' hu' <;> · rw [hu']; simp
#align int.sq_of_gcd_eq_one Int.sq_of_gcd_eq_one
-/- warning: int.sq_of_coprime -> Int.sq_of_coprime is a dubious translation:
-lean 3 declaration is
- forall {a : Int} {b : Int} {c : Int}, (IsCoprime.{0} Int Int.commSemiring a b) -> (Eq.{1} Int (HMul.hMul.{0, 0, 0} Int Int Int (instHMul.{0} Int Int.hasMul) a b) (HPow.hPow.{0, 0, 0} Int Nat Int (instHPow.{0, 0} Int Nat (Monoid.Pow.{0} Int Int.monoid)) c (OfNat.ofNat.{0} Nat 2 (OfNat.mk.{0} Nat 2 (bit0.{0} Nat Nat.hasAdd (One.one.{0} Nat Nat.hasOne)))))) -> (Exists.{1} Int (fun (a0 : Int) => Or (Eq.{1} Int a (HPow.hPow.{0, 0, 0} Int Nat Int (instHPow.{0, 0} Int Nat (Monoid.Pow.{0} Int Int.monoid)) a0 (OfNat.ofNat.{0} Nat 2 (OfNat.mk.{0} Nat 2 (bit0.{0} Nat Nat.hasAdd (One.one.{0} Nat Nat.hasOne)))))) (Eq.{1} Int a (Neg.neg.{0} Int Int.hasNeg (HPow.hPow.{0, 0, 0} Int Nat Int (instHPow.{0, 0} Int Nat (Monoid.Pow.{0} Int Int.monoid)) a0 (OfNat.ofNat.{0} Nat 2 (OfNat.mk.{0} Nat 2 (bit0.{0} Nat Nat.hasAdd (One.one.{0} Nat Nat.hasOne)))))))))
-but is expected to have type
- forall {a : Int} {b : Int} {c : Int}, (IsCoprime.{0} Int Int.instCommSemiringInt a b) -> (Eq.{1} Int (HMul.hMul.{0, 0, 0} Int Int Int (instHMul.{0} Int Int.instMulInt) a b) (HPow.hPow.{0, 0, 0} Int Nat Int (instHPow.{0, 0} Int Nat (Monoid.Pow.{0} Int Int.instMonoidInt)) c (OfNat.ofNat.{0} Nat 2 (instOfNatNat 2)))) -> (Exists.{1} Int (fun (a0 : Int) => Or (Eq.{1} Int a (HPow.hPow.{0, 0, 0} Int Nat Int (instHPow.{0, 0} Int Nat (Monoid.Pow.{0} Int Int.instMonoidInt)) a0 (OfNat.ofNat.{0} Nat 2 (instOfNatNat 2)))) (Eq.{1} Int a (Neg.neg.{0} Int Int.instNegInt (HPow.hPow.{0, 0, 0} Int Nat Int (instHPow.{0, 0} Int Nat (Monoid.Pow.{0} Int Int.instMonoidInt)) a0 (OfNat.ofNat.{0} Nat 2 (instOfNatNat 2)))))))
-Case conversion may be inaccurate. Consider using '#align int.sq_of_coprime Int.sq_of_coprimeₓ'. -/
theorem sq_of_coprime {a b c : ℤ} (h : IsCoprime a b) (heq : a * b = c ^ 2) :
∃ a0 : ℤ, a = a0 ^ 2 ∨ a = -a0 ^ 2 :=
sq_of_gcd_eq_one (gcd_eq_one_iff_coprime.mpr h) HEq
#align int.sq_of_coprime Int.sq_of_coprime
-/- warning: int.nat_abs_euclidean_domain_gcd -> Int.natAbs_euclideanDomain_gcd is a dubious translation:
-lean 3 declaration is
- forall (a : Int) (b : Int), Eq.{1} Nat (Int.natAbs (EuclideanDomain.gcd.{0} Int Int.euclideanDomain (fun (a : Int) (b : Int) => Int.decidableEq a b) a b)) (Int.gcd a b)
-but is expected to have type
- forall (a : Int) (b : Int), Eq.{1} Nat (Int.natAbs (EuclideanDomain.gcd.{0} ([mdata borrowed:1 Int]) Int.euclideanDomain (fun (a : [mdata borrowed:1 Int]) (b : [mdata borrowed:1 Int]) => Int.instDecidableEqInt a b) a b)) (Int.gcd a b)
-Case conversion may be inaccurate. Consider using '#align int.nat_abs_euclidean_domain_gcd Int.natAbs_euclideanDomain_gcdₓ'. -/
theorem natAbs_euclideanDomain_gcd (a b : ℤ) : Int.natAbs (EuclideanDomain.gcd a b) = Int.gcd a b :=
by
apply Nat.dvd_antisymm <;> rw [← Int.coe_nat_dvd]
@@ -360,12 +270,6 @@ theorem natAbs_euclideanDomain_gcd (a b : ℤ) : Int.natAbs (EuclideanDomain.gcd
end Int
-/- warning: associates_int_equiv_nat -> associatesIntEquivNat is a dubious translation:
-lean 3 declaration is
- Equiv.{1, 1} (Associates.{0} Int Int.monoid) Nat
-but is expected to have type
- Equiv.{1, 1} (Associates.{0} Int Int.instMonoidInt) Nat
-Case conversion may be inaccurate. Consider using '#align associates_int_equiv_nat associatesIntEquivNatₓ'. -/
/-- Maps an associate class of integers consisting of `-n, n` to `n : ℕ` -/
def associatesIntEquivNat : Associates ℤ ≃ ℕ :=
by
@@ -380,12 +284,6 @@ def associatesIntEquivNat : Associates ℤ ≃ ℕ :=
rw [← normalize_apply, ← Int.abs_eq_normalize, Int.natAbs_abs, Int.natAbs_ofNat]
#align associates_int_equiv_nat associatesIntEquivNat
-/- warning: int.prime.dvd_mul -> Int.Prime.dvd_mul is a dubious translation:
-lean 3 declaration is
- forall {m : Int} {n : Int} {p : Nat}, (Nat.Prime p) -> (Dvd.Dvd.{0} Int (semigroupDvd.{0} Int Int.semigroup) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Nat Int (HasLiftT.mk.{1, 1} Nat Int (CoeTCₓ.coe.{1, 1} Nat Int (coeBase.{1, 1} Nat Int Int.hasCoe))) p) (HMul.hMul.{0, 0, 0} Int Int Int (instHMul.{0} Int Int.hasMul) m n)) -> (Or (Dvd.Dvd.{0} Nat Nat.hasDvd p (Int.natAbs m)) (Dvd.Dvd.{0} Nat Nat.hasDvd p (Int.natAbs n)))
-but is expected to have type
- forall {m : Int} {n : Int} {p : Nat}, (Nat.Prime p) -> (Dvd.dvd.{0} Int Int.instDvdInt (Nat.cast.{0} Int instNatCastInt p) (HMul.hMul.{0, 0, 0} Int Int Int (instHMul.{0} Int Int.instMulInt) m n)) -> (Or (Dvd.dvd.{0} Nat Nat.instDvdNat p (Int.natAbs m)) (Dvd.dvd.{0} Nat Nat.instDvdNat p (Int.natAbs n)))
-Case conversion may be inaccurate. Consider using '#align int.prime.dvd_mul Int.Prime.dvd_mulₓ'. -/
theorem Int.Prime.dvd_mul {m n : ℤ} {p : ℕ} (hp : Nat.Prime p) (h : (p : ℤ) ∣ m * n) :
p ∣ m.natAbs ∨ p ∣ n.natAbs :=
by
@@ -394,12 +292,6 @@ theorem Int.Prime.dvd_mul {m n : ℤ} {p : ℕ} (hp : Nat.Prime p) (h : (p : ℤ
exact int.coe_nat_dvd_left.mp h
#align int.prime.dvd_mul Int.Prime.dvd_mul
-/- warning: int.prime.dvd_mul' -> Int.Prime.dvd_mul' is a dubious translation:
-lean 3 declaration is
- forall {m : Int} {n : Int} {p : Nat}, (Nat.Prime p) -> (Dvd.Dvd.{0} Int (semigroupDvd.{0} Int Int.semigroup) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Nat Int (HasLiftT.mk.{1, 1} Nat Int (CoeTCₓ.coe.{1, 1} Nat Int (coeBase.{1, 1} Nat Int Int.hasCoe))) p) (HMul.hMul.{0, 0, 0} Int Int Int (instHMul.{0} Int Int.hasMul) m n)) -> (Or (Dvd.Dvd.{0} Int (semigroupDvd.{0} Int Int.semigroup) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Nat Int (HasLiftT.mk.{1, 1} Nat Int (CoeTCₓ.coe.{1, 1} Nat Int (coeBase.{1, 1} Nat Int Int.hasCoe))) p) m) (Dvd.Dvd.{0} Int (semigroupDvd.{0} Int Int.semigroup) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Nat Int (HasLiftT.mk.{1, 1} Nat Int (CoeTCₓ.coe.{1, 1} Nat Int (coeBase.{1, 1} Nat Int Int.hasCoe))) p) n))
-but is expected to have type
- forall {m : Int} {n : Int} {p : Nat}, (Nat.Prime p) -> (Dvd.dvd.{0} Int Int.instDvdInt (Nat.cast.{0} Int instNatCastInt p) (HMul.hMul.{0, 0, 0} Int Int Int (instHMul.{0} Int Int.instMulInt) m n)) -> (Or (Dvd.dvd.{0} Int Int.instDvdInt (Nat.cast.{0} Int instNatCastInt p) m) (Dvd.dvd.{0} Int Int.instDvdInt (Nat.cast.{0} Int instNatCastInt p) n))
-Case conversion may be inaccurate. Consider using '#align int.prime.dvd_mul' Int.Prime.dvd_mul'ₓ'. -/
theorem Int.Prime.dvd_mul' {m n : ℤ} {p : ℕ} (hp : Nat.Prime p) (h : (p : ℤ) ∣ m * n) :
(p : ℤ) ∣ m ∨ (p : ℤ) ∣ n :=
by
@@ -407,12 +299,6 @@ theorem Int.Prime.dvd_mul' {m n : ℤ} {p : ℕ} (hp : Nat.Prime p) (h : (p :
exact Int.Prime.dvd_mul hp h
#align int.prime.dvd_mul' Int.Prime.dvd_mul'
-/- warning: int.prime.dvd_pow -> Int.Prime.dvd_pow is a dubious translation:
-lean 3 declaration is
- forall {n : Int} {k : Nat} {p : Nat}, (Nat.Prime p) -> (Dvd.Dvd.{0} Int (semigroupDvd.{0} Int Int.semigroup) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Nat Int (HasLiftT.mk.{1, 1} Nat Int (CoeTCₓ.coe.{1, 1} Nat Int (coeBase.{1, 1} Nat Int Int.hasCoe))) p) (HPow.hPow.{0, 0, 0} Int Nat Int (instHPow.{0, 0} Int Nat (Monoid.Pow.{0} Int Int.monoid)) n k)) -> (Dvd.Dvd.{0} Nat Nat.hasDvd p (Int.natAbs n))
-but is expected to have type
- forall {n : Int} {k : Nat} {p : Nat}, (Nat.Prime p) -> (Dvd.dvd.{0} Int Int.instDvdInt (Nat.cast.{0} Int instNatCastInt p) (HPow.hPow.{0, 0, 0} Int Nat Int Int.instHPowIntNat n k)) -> (Dvd.dvd.{0} Nat Nat.instDvdNat p (Int.natAbs n))
-Case conversion may be inaccurate. Consider using '#align int.prime.dvd_pow Int.Prime.dvd_powₓ'. -/
theorem Int.Prime.dvd_pow {n : ℤ} {k p : ℕ} (hp : Nat.Prime p) (h : (p : ℤ) ∣ n ^ k) :
p ∣ n.natAbs := by
apply @Nat.Prime.dvd_of_dvd_pow _ _ k hp
@@ -420,24 +306,12 @@ theorem Int.Prime.dvd_pow {n : ℤ} {k p : ℕ} (hp : Nat.Prime p) (h : (p : ℤ
exact int.coe_nat_dvd_left.mp h
#align int.prime.dvd_pow Int.Prime.dvd_pow
-/- warning: int.prime.dvd_pow' -> Int.Prime.dvd_pow' is a dubious translation:
-lean 3 declaration is
- forall {n : Int} {k : Nat} {p : Nat}, (Nat.Prime p) -> (Dvd.Dvd.{0} Int (semigroupDvd.{0} Int Int.semigroup) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Nat Int (HasLiftT.mk.{1, 1} Nat Int (CoeTCₓ.coe.{1, 1} Nat Int (coeBase.{1, 1} Nat Int Int.hasCoe))) p) (HPow.hPow.{0, 0, 0} Int Nat Int (instHPow.{0, 0} Int Nat (Monoid.Pow.{0} Int Int.monoid)) n k)) -> (Dvd.Dvd.{0} Int (semigroupDvd.{0} Int Int.semigroup) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Nat Int (HasLiftT.mk.{1, 1} Nat Int (CoeTCₓ.coe.{1, 1} Nat Int (coeBase.{1, 1} Nat Int Int.hasCoe))) p) n)
-but is expected to have type
- forall {n : Int} {k : Nat} {p : Nat}, (Nat.Prime p) -> (Dvd.dvd.{0} Int Int.instDvdInt (Nat.cast.{0} Int instNatCastInt p) (HPow.hPow.{0, 0, 0} Int Nat Int Int.instHPowIntNat n k)) -> (Dvd.dvd.{0} Int Int.instDvdInt (Nat.cast.{0} Int instNatCastInt p) n)
-Case conversion may be inaccurate. Consider using '#align int.prime.dvd_pow' Int.Prime.dvd_pow'ₓ'. -/
theorem Int.Prime.dvd_pow' {n : ℤ} {k p : ℕ} (hp : Nat.Prime p) (h : (p : ℤ) ∣ n ^ k) :
(p : ℤ) ∣ n := by
rw [Int.coe_nat_dvd_left]
exact Int.Prime.dvd_pow hp h
#align int.prime.dvd_pow' Int.Prime.dvd_pow'
-/- warning: prime_two_or_dvd_of_dvd_two_mul_pow_self_two -> prime_two_or_dvd_of_dvd_two_mul_pow_self_two is a dubious translation:
-lean 3 declaration is
- forall {m : Int} {p : Nat}, (Nat.Prime p) -> (Dvd.Dvd.{0} Int (semigroupDvd.{0} Int Int.semigroup) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Nat Int (HasLiftT.mk.{1, 1} Nat Int (CoeTCₓ.coe.{1, 1} Nat Int (coeBase.{1, 1} Nat Int Int.hasCoe))) p) (HMul.hMul.{0, 0, 0} Int Int Int (instHMul.{0} Int Int.hasMul) (OfNat.ofNat.{0} Int 2 (OfNat.mk.{0} Int 2 (bit0.{0} Int Int.hasAdd (One.one.{0} Int Int.hasOne)))) (HPow.hPow.{0, 0, 0} Int Nat Int (instHPow.{0, 0} Int Nat (Monoid.Pow.{0} Int Int.monoid)) m (OfNat.ofNat.{0} Nat 2 (OfNat.mk.{0} Nat 2 (bit0.{0} Nat Nat.hasAdd (One.one.{0} Nat Nat.hasOne))))))) -> (Or (Eq.{1} Nat p (OfNat.ofNat.{0} Nat 2 (OfNat.mk.{0} Nat 2 (bit0.{0} Nat Nat.hasAdd (One.one.{0} Nat Nat.hasOne))))) (Dvd.Dvd.{0} Nat Nat.hasDvd p (Int.natAbs m)))
-but is expected to have type
- forall {m : Int} {p : Nat}, (Nat.Prime p) -> (Dvd.dvd.{0} Int Int.instDvdInt (Nat.cast.{0} Int instNatCastInt p) (HMul.hMul.{0, 0, 0} Int Int Int (instHMul.{0} Int Int.instMulInt) (OfNat.ofNat.{0} Int 2 (instOfNatInt 2)) (HPow.hPow.{0, 0, 0} Int Nat Int (instHPow.{0, 0} Int Nat (Monoid.Pow.{0} Int Int.instMonoidInt)) m (OfNat.ofNat.{0} Nat 2 (instOfNatNat 2))))) -> (Or (Eq.{1} Nat p (OfNat.ofNat.{0} Nat 2 (instOfNatNat 2))) (Dvd.dvd.{0} Nat Nat.instDvdNat p (Int.natAbs m)))
-Case conversion may be inaccurate. Consider using '#align prime_two_or_dvd_of_dvd_two_mul_pow_self_two prime_two_or_dvd_of_dvd_two_mul_pow_self_twoₓ'. -/
theorem prime_two_or_dvd_of_dvd_two_mul_pow_self_two {m : ℤ} {p : ℕ} (hp : Nat.Prime p)
(h : (p : ℤ) ∣ 2 * m ^ 2) : p = 2 ∨ p ∣ Int.natAbs m :=
by
@@ -449,12 +323,6 @@ theorem prime_two_or_dvd_of_dvd_two_mul_pow_self_two {m : ℤ} {p : ℕ} (hp : N
exact (or_self_iff _).mp ((Nat.Prime.dvd_mul hp).mp hpp)
#align prime_two_or_dvd_of_dvd_two_mul_pow_self_two prime_two_or_dvd_of_dvd_two_mul_pow_self_two
-/- warning: int.exists_prime_and_dvd -> Int.exists_prime_and_dvd is a dubious translation:
-lean 3 declaration is
- forall {n : Int}, (Ne.{1} Nat (Int.natAbs n) (OfNat.ofNat.{0} Nat 1 (OfNat.mk.{0} Nat 1 (One.one.{0} Nat Nat.hasOne)))) -> (Exists.{1} Int (fun (p : Int) => And (Prime.{0} Int (CommSemiring.toCommMonoidWithZero.{0} Int Int.commSemiring) p) (Dvd.Dvd.{0} Int (semigroupDvd.{0} Int Int.semigroup) p n)))
-but is expected to have type
- forall {n : Int}, (Ne.{1} Nat (Int.natAbs n) (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1))) -> (Exists.{1} Int (fun (p : Int) => And (Prime.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))) p) (Dvd.dvd.{0} Int Int.instDvdInt p n)))
-Case conversion may be inaccurate. Consider using '#align int.exists_prime_and_dvd Int.exists_prime_and_dvdₓ'. -/
theorem Int.exists_prime_and_dvd {n : ℤ} (hn : n.natAbs ≠ 1) : ∃ p, Prime p ∧ p ∣ n :=
by
obtain ⟨p, pp, pd⟩ := Nat.exists_prime_and_dvd hn
@@ -463,12 +331,6 @@ theorem Int.exists_prime_and_dvd {n : ℤ} (hn : n.natAbs ≠ 1) : ∃ p, Prime
open UniqueFactorizationMonoid
-/- warning: nat.factors_eq -> Nat.factors_eq is a dubious translation:
-lean 3 declaration is
- forall {n : Nat}, Eq.{1} (Multiset.{0} Nat) (UniqueFactorizationMonoid.normalizedFactors.{0} Nat Nat.cancelCommMonoidWithZero (fun (a : Nat) (b : Nat) => Nat.decidableEq a b) (normalizationMonoidOfUniqueUnits.{0} Nat Nat.cancelCommMonoidWithZero Nat.unique_units) Nat.uniqueFactorizationMonoid n) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) (List.{0} Nat) (Multiset.{0} Nat) (HasLiftT.mk.{1, 1} (List.{0} Nat) (Multiset.{0} Nat) (CoeTCₓ.coe.{1, 1} (List.{0} Nat) (Multiset.{0} Nat) (coeBase.{1, 1} (List.{0} Nat) (Multiset.{0} Nat) (Multiset.hasCoe.{0} Nat)))) (Nat.factors n))
-but is expected to have type
- forall {n : Nat}, Eq.{1} (Multiset.{0} Nat) (UniqueFactorizationMonoid.normalizedFactors.{0} Nat Nat.cancelCommMonoidWithZero (fun (a : Nat) (b : Nat) => instDecidableEqNat a b) (NormalizedGCDMonoid.toNormalizationMonoid.{0} Nat Nat.cancelCommMonoidWithZero instNormalizedGCDMonoidNatCancelCommMonoidWithZero) Nat.instUniqueFactorizationMonoidNatCancelCommMonoidWithZero n) (Multiset.ofList.{0} Nat (Nat.factors n))
-Case conversion may be inaccurate. Consider using '#align nat.factors_eq Nat.factors_eqₓ'. -/
theorem Nat.factors_eq {n : ℕ} : normalizedFactors n = n.factors :=
by
cases n; · simp
@@ -482,12 +344,6 @@ theorem Nat.factors_eq {n : ℕ} : normalizedFactors n = n.factors :=
exact Nat.prime_of_mem_factors hx
#align nat.factors_eq Nat.factors_eq
-/- warning: nat.factors_multiset_prod_of_irreducible -> Nat.factors_multiset_prod_of_irreducible is a dubious translation:
-lean 3 declaration is
- forall {s : Multiset.{0} Nat}, (forall (x : Nat), (Membership.Mem.{0, 0} Nat (Multiset.{0} Nat) (Multiset.hasMem.{0} Nat) x s) -> (Irreducible.{0} Nat Nat.monoid x)) -> (Eq.{1} (Multiset.{0} Nat) (UniqueFactorizationMonoid.normalizedFactors.{0} Nat Nat.cancelCommMonoidWithZero (fun (a : Nat) (b : Nat) => Nat.decidableEq a b) (normalizationMonoidOfUniqueUnits.{0} Nat Nat.cancelCommMonoidWithZero Nat.unique_units) Nat.uniqueFactorizationMonoid (Multiset.prod.{0} Nat Nat.commMonoid s)) s)
-but is expected to have type
- forall {s : Multiset.{0} Nat}, (forall (x : Nat), (Membership.mem.{0, 0} Nat (Multiset.{0} Nat) (Multiset.instMembershipMultiset.{0} Nat) x s) -> (Irreducible.{0} Nat Nat.monoid x)) -> (Eq.{1} (Multiset.{0} Nat) (UniqueFactorizationMonoid.normalizedFactors.{0} Nat Nat.cancelCommMonoidWithZero (fun (a : Nat) (b : Nat) => instDecidableEqNat a b) (NormalizedGCDMonoid.toNormalizationMonoid.{0} Nat Nat.cancelCommMonoidWithZero instNormalizedGCDMonoidNatCancelCommMonoidWithZero) Nat.instUniqueFactorizationMonoidNatCancelCommMonoidWithZero (Multiset.prod.{0} Nat Nat.commMonoid s)) s)
-Case conversion may be inaccurate. Consider using '#align nat.factors_multiset_prod_of_irreducible Nat.factors_multiset_prod_of_irreducibleₓ'. -/
theorem Nat.factors_multiset_prod_of_irreducible {s : Multiset ℕ}
(h : ∀ x : ℕ, x ∈ s → Irreducible x) : normalizedFactors s.Prod = s :=
by
@@ -502,22 +358,10 @@ theorem Nat.factors_multiset_prod_of_irreducible {s : Multiset ℕ}
namespace multiplicity
-/- warning: multiplicity.finite_int_iff_nat_abs_finite -> multiplicity.finite_int_iff_natAbs_finite is a dubious translation:
-lean 3 declaration is
- forall {a : Int} {b : Int}, Iff (multiplicity.Finite.{0} Int Int.monoid a b) (multiplicity.Finite.{0} Nat Nat.monoid (Int.natAbs a) (Int.natAbs b))
-but is expected to have type
- forall {a : Int} {b : Int}, Iff (multiplicity.Finite.{0} Int Int.instMonoidInt a b) (multiplicity.Finite.{0} Nat Nat.monoid (Int.natAbs a) (Int.natAbs b))
-Case conversion may be inaccurate. Consider using '#align multiplicity.finite_int_iff_nat_abs_finite multiplicity.finite_int_iff_natAbs_finiteₓ'. -/
theorem finite_int_iff_natAbs_finite {a b : ℤ} : Finite a b ↔ Finite a.natAbs b.natAbs := by
simp only [finite_def, ← Int.natAbs_dvd_natAbs, Int.natAbs_pow]
#align multiplicity.finite_int_iff_nat_abs_finite multiplicity.finite_int_iff_natAbs_finite
-/- warning: multiplicity.finite_int_iff -> multiplicity.finite_int_iff is a dubious translation:
-lean 3 declaration is
- forall {a : Int} {b : Int}, Iff (multiplicity.Finite.{0} Int Int.monoid a b) (And (Ne.{1} Nat (Int.natAbs a) (OfNat.ofNat.{0} Nat 1 (OfNat.mk.{0} Nat 1 (One.one.{0} Nat Nat.hasOne)))) (Ne.{1} Int b (OfNat.ofNat.{0} Int 0 (OfNat.mk.{0} Int 0 (Zero.zero.{0} Int Int.hasZero)))))
-but is expected to have type
- forall {a : Int} {b : Int}, Iff (multiplicity.Finite.{0} Int Int.instMonoidInt a b) (And (Ne.{1} Nat (Int.natAbs a) (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1))) (Ne.{1} Int b (OfNat.ofNat.{0} Int 0 (instOfNatInt 0))))
-Case conversion may be inaccurate. Consider using '#align multiplicity.finite_int_iff multiplicity.finite_int_iffₓ'. -/
theorem finite_int_iff {a b : ℤ} : Finite a b ↔ a.natAbs ≠ 1 ∧ b ≠ 0 := by
rw [finite_int_iff_nat_abs_finite, finite_nat_iff, pos_iff_ne_zero, Int.natAbs_ne_zero]
#align multiplicity.finite_int_iff multiplicity.finite_int_iff
@@ -528,12 +372,6 @@ instance decidableNat : DecidableRel fun a b : ℕ => (multiplicity a b).Dom :=
#align multiplicity.decidable_nat multiplicity.decidableNat
-/
-/- warning: multiplicity.decidable_int -> multiplicity.decidableInt is a dubious translation:
-lean 3 declaration is
- DecidableRel.{1} Int (fun (a : Int) (b : Int) => Part.Dom.{0} Nat (multiplicity.{0} Int Int.monoid (fun (a : Int) (b : Int) => Int.decidableDvd a b) a b))
-but is expected to have type
- DecidableRel.{1} Int (fun (a : Int) (b : Int) => Part.Dom.{0} Nat (multiplicity.{0} Int Int.instMonoidInt (fun (a : Int) (b : Int) => Int.decidableDvd a b) a b))
-Case conversion may be inaccurate. Consider using '#align multiplicity.decidable_int multiplicity.decidableIntₓ'. -/
instance decidableInt : DecidableRel fun a b : ℤ => (multiplicity a b).Dom := fun a b =>
decidable_of_iff _ finite_int_iff.symm
#align multiplicity.decidable_int multiplicity.decidableInt
@@ -554,32 +392,14 @@ theorem induction_on_primes {P : ℕ → Prop} (h₀ : P 0) (h₁ : P 1)
#align induction_on_primes induction_on_primes
-/
-/- warning: int.associated_nat_abs -> Int.associated_natAbs is a dubious translation:
-lean 3 declaration is
- forall (k : Int), Associated.{0} Int Int.monoid k ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Nat Int (HasLiftT.mk.{1, 1} Nat Int (CoeTCₓ.coe.{1, 1} Nat Int (coeBase.{1, 1} Nat Int Int.hasCoe))) (Int.natAbs k))
-but is expected to have type
- forall (k : Int), Associated.{0} Int Int.instMonoidInt k (Nat.cast.{0} Int instNatCastInt (Int.natAbs k))
-Case conversion may be inaccurate. Consider using '#align int.associated_nat_abs Int.associated_natAbsₓ'. -/
theorem Int.associated_natAbs (k : ℤ) : Associated k k.natAbs :=
associated_of_dvd_dvd (Int.coe_nat_dvd_right.mpr dvd_rfl) (Int.natAbs_dvd.mpr dvd_rfl)
#align int.associated_nat_abs Int.associated_natAbs
-/- warning: int.prime_iff_nat_abs_prime -> Int.prime_iff_natAbs_prime is a dubious translation:
-lean 3 declaration is
- forall {k : Int}, Iff (Prime.{0} Int (CommSemiring.toCommMonoidWithZero.{0} Int Int.commSemiring) k) (Nat.Prime (Int.natAbs k))
-but is expected to have type
- forall {k : Int}, Iff (Prime.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))) k) (Nat.Prime (Int.natAbs k))
-Case conversion may be inaccurate. Consider using '#align int.prime_iff_nat_abs_prime Int.prime_iff_natAbs_primeₓ'. -/
theorem Int.prime_iff_natAbs_prime {k : ℤ} : Prime k ↔ Nat.Prime k.natAbs :=
(Int.associated_natAbs k).prime_iff.trans Nat.prime_iff_prime_int.symm
#align int.prime_iff_nat_abs_prime Int.prime_iff_natAbs_prime
-/- warning: int.associated_iff_nat_abs -> Int.associated_iff_natAbs is a dubious translation:
-lean 3 declaration is
- forall {a : Int} {b : Int}, Iff (Associated.{0} Int Int.monoid a b) (Eq.{1} Nat (Int.natAbs a) (Int.natAbs b))
-but is expected to have type
- forall {a : Int} {b : Int}, Iff (Associated.{0} Int Int.instMonoidInt a b) (Eq.{1} Nat (Int.natAbs a) (Int.natAbs b))
-Case conversion may be inaccurate. Consider using '#align int.associated_iff_nat_abs Int.associated_iff_natAbsₓ'. -/
theorem Int.associated_iff_natAbs {a b : ℤ} : Associated a b ↔ a.natAbs = b.natAbs :=
by
rw [← dvd_dvd_iff_associated, ← Int.natAbs_dvd_natAbs, ← Int.natAbs_dvd_natAbs,
@@ -587,12 +407,6 @@ theorem Int.associated_iff_natAbs {a b : ℤ} : Associated a b ↔ a.natAbs = b.
exact associated_iff_eq
#align int.associated_iff_nat_abs Int.associated_iff_natAbs
-/- warning: int.associated_iff -> Int.associated_iff is a dubious translation:
-lean 3 declaration is
- forall {a : Int} {b : Int}, Iff (Associated.{0} Int Int.monoid a b) (Or (Eq.{1} Int a b) (Eq.{1} Int a (Neg.neg.{0} Int Int.hasNeg b)))
-but is expected to have type
- forall {a : Int} {b : Int}, Iff (Associated.{0} Int Int.instMonoidInt a b) (Or (Eq.{1} Int a b) (Eq.{1} Int a (Neg.neg.{0} Int Int.instNegInt b)))
-Case conversion may be inaccurate. Consider using '#align int.associated_iff Int.associated_iffₓ'. -/
theorem Int.associated_iff {a b : ℤ} : Associated a b ↔ a = b ∨ a = -b :=
by
rw [Int.associated_iff_natAbs]
@@ -601,12 +415,6 @@ theorem Int.associated_iff {a b : ℤ} : Associated a b ↔ a = b ∨ a = -b :=
namespace Int
-/- warning: int.zmultiples_nat_abs -> Int.zmultiples_natAbs is a dubious translation:
-lean 3 declaration is
- forall (a : Int), Eq.{1} (AddSubgroup.{0} Int Int.addGroup) (AddSubgroup.zmultiples.{0} Int Int.addGroup ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Nat Int (HasLiftT.mk.{1, 1} Nat Int (CoeTCₓ.coe.{1, 1} Nat Int (coeBase.{1, 1} Nat Int Int.hasCoe))) (Int.natAbs a))) (AddSubgroup.zmultiples.{0} Int Int.addGroup a)
-but is expected to have type
- forall (a : Int), Eq.{1} (AddSubgroup.{0} Int Int.instAddGroupInt) (AddSubgroup.zmultiples.{0} Int Int.instAddGroupInt (Nat.cast.{0} Int instNatCastInt (Int.natAbs a))) (AddSubgroup.zmultiples.{0} Int Int.instAddGroupInt a)
-Case conversion may be inaccurate. Consider using '#align int.zmultiples_nat_abs Int.zmultiples_natAbsₓ'. -/
theorem zmultiples_natAbs (a : ℤ) :
AddSubgroup.zmultiples (a.natAbs : ℤ) = AddSubgroup.zmultiples a :=
le_antisymm
@@ -614,22 +422,10 @@ theorem zmultiples_natAbs (a : ℤ) :
(AddSubgroup.zmultiples_le_of_mem (mem_zmultiples_iff.mpr (natAbs_dvd.mpr (dvd_refl a))))
#align int.zmultiples_nat_abs Int.zmultiples_natAbs
-/- warning: int.span_nat_abs -> Int.span_natAbs is a dubious translation:
-lean 3 declaration is
- forall (a : Int), Eq.{1} (Ideal.{0} Int Int.semiring) (Ideal.span.{0} Int Int.semiring (Singleton.singleton.{0, 0} Int (Set.{0} Int) (Set.hasSingleton.{0} Int) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Nat Int (HasLiftT.mk.{1, 1} Nat Int (CoeTCₓ.coe.{1, 1} Nat Int (coeBase.{1, 1} Nat Int Int.hasCoe))) (Int.natAbs a)))) (Ideal.span.{0} Int Int.semiring (Singleton.singleton.{0, 0} Int (Set.{0} Int) (Set.hasSingleton.{0} Int) a))
-but is expected to have type
- forall (a : Int), Eq.{1} (Ideal.{0} Int Int.instSemiringInt) (Ideal.span.{0} Int Int.instSemiringInt (Singleton.singleton.{0, 0} Int (Set.{0} Int) (Set.instSingletonSet.{0} Int) (Nat.cast.{0} Int instNatCastInt (Int.natAbs a)))) (Ideal.span.{0} Int Int.instSemiringInt (Singleton.singleton.{0, 0} Int (Set.{0} Int) (Set.instSingletonSet.{0} Int) a))
-Case conversion may be inaccurate. Consider using '#align int.span_nat_abs Int.span_natAbsₓ'. -/
theorem span_natAbs (a : ℤ) : Ideal.span ({a.natAbs} : Set ℤ) = Ideal.span {a} := by
rw [Ideal.span_singleton_eq_span_singleton]; exact (associated_nat_abs _).symm
#align int.span_nat_abs Int.span_natAbs
-/- warning: int.eq_pow_of_mul_eq_pow_bit1_left -> Int.eq_pow_of_mul_eq_pow_bit1_left is a dubious translation:
-lean 3 declaration is
- forall {a : Int} {b : Int} {c : Int}, (IsCoprime.{0} Int Int.commSemiring a b) -> (forall {k : Nat}, (Eq.{1} Int (HMul.hMul.{0, 0, 0} Int Int Int (instHMul.{0} Int Int.hasMul) a b) (HPow.hPow.{0, 0, 0} Int Nat Int (instHPow.{0, 0} Int Nat (Monoid.Pow.{0} Int Int.monoid)) c (bit1.{0} Nat Nat.hasOne Nat.hasAdd k))) -> (Exists.{1} Int (fun (d : Int) => Eq.{1} Int a (HPow.hPow.{0, 0, 0} Int Nat Int (instHPow.{0, 0} Int Nat (Monoid.Pow.{0} Int Int.monoid)) d (bit1.{0} Nat Nat.hasOne Nat.hasAdd k)))))
-but is expected to have type
- forall {a : Int} {b : Int} {c : Int}, (IsCoprime.{0} Int Int.instCommSemiringInt a b) -> (forall {k : Nat}, (Eq.{1} Int (HMul.hMul.{0, 0, 0} Int Int Int (instHMul.{0} Int Int.instMulInt) a b) (HPow.hPow.{0, 0, 0} Int Nat Int Int.instHPowIntNat c (bit1.{0} Nat (CanonicallyOrderedCommSemiring.toOne.{0} Nat Nat.canonicallyOrderedCommSemiring) instAddNat k))) -> (Exists.{1} Int (fun (d : Int) => Eq.{1} Int a (HPow.hPow.{0, 0, 0} Int Nat Int (instHPow.{0, 0} Int Nat (Monoid.Pow.{0} Int Int.instMonoidInt)) d (bit1.{0} Nat (CanonicallyOrderedCommSemiring.toOne.{0} Nat Nat.canonicallyOrderedCommSemiring) instAddNat k)))))
-Case conversion may be inaccurate. Consider using '#align int.eq_pow_of_mul_eq_pow_bit1_left Int.eq_pow_of_mul_eq_pow_bit1_leftₓ'. -/
theorem eq_pow_of_mul_eq_pow_bit1_left {a b c : ℤ} (hab : IsCoprime a b) {k : ℕ}
(h : a * b = c ^ bit1 k) : ∃ d, a = d ^ bit1 k :=
by
@@ -639,23 +435,11 @@ theorem eq_pow_of_mul_eq_pow_bit1_left {a b c : ℤ} (hab : IsCoprime a b) {k :
obtain rfl | rfl := hd <;> exact ⟨_, rfl⟩
#align int.eq_pow_of_mul_eq_pow_bit1_left Int.eq_pow_of_mul_eq_pow_bit1_left
-/- warning: int.eq_pow_of_mul_eq_pow_bit1_right -> Int.eq_pow_of_mul_eq_pow_bit1_right is a dubious translation:
-lean 3 declaration is
- forall {a : Int} {b : Int} {c : Int}, (IsCoprime.{0} Int Int.commSemiring a b) -> (forall {k : Nat}, (Eq.{1} Int (HMul.hMul.{0, 0, 0} Int Int Int (instHMul.{0} Int Int.hasMul) a b) (HPow.hPow.{0, 0, 0} Int Nat Int (instHPow.{0, 0} Int Nat (Monoid.Pow.{0} Int Int.monoid)) c (bit1.{0} Nat Nat.hasOne Nat.hasAdd k))) -> (Exists.{1} Int (fun (d : Int) => Eq.{1} Int b (HPow.hPow.{0, 0, 0} Int Nat Int (instHPow.{0, 0} Int Nat (Monoid.Pow.{0} Int Int.monoid)) d (bit1.{0} Nat Nat.hasOne Nat.hasAdd k)))))
-but is expected to have type
- forall {a : Int} {b : Int} {c : Int}, (IsCoprime.{0} Int Int.instCommSemiringInt a b) -> (forall {k : Nat}, (Eq.{1} Int (HMul.hMul.{0, 0, 0} Int Int Int (instHMul.{0} Int Int.instMulInt) a b) (HPow.hPow.{0, 0, 0} Int Nat Int Int.instHPowIntNat c (bit1.{0} Nat (CanonicallyOrderedCommSemiring.toOne.{0} Nat Nat.canonicallyOrderedCommSemiring) instAddNat k))) -> (Exists.{1} Int (fun (d : Int) => Eq.{1} Int b (HPow.hPow.{0, 0, 0} Int Nat Int (instHPow.{0, 0} Int Nat (Monoid.Pow.{0} Int Int.instMonoidInt)) d (bit1.{0} Nat (CanonicallyOrderedCommSemiring.toOne.{0} Nat Nat.canonicallyOrderedCommSemiring) instAddNat k)))))
-Case conversion may be inaccurate. Consider using '#align int.eq_pow_of_mul_eq_pow_bit1_right Int.eq_pow_of_mul_eq_pow_bit1_rightₓ'. -/
theorem eq_pow_of_mul_eq_pow_bit1_right {a b c : ℤ} (hab : IsCoprime a b) {k : ℕ}
(h : a * b = c ^ bit1 k) : ∃ d, b = d ^ bit1 k :=
eq_pow_of_mul_eq_pow_bit1_left hab.symm (by rwa [mul_comm] at h)
#align int.eq_pow_of_mul_eq_pow_bit1_right Int.eq_pow_of_mul_eq_pow_bit1_right
-/- warning: int.eq_pow_of_mul_eq_pow_bit1 -> Int.eq_pow_of_mul_eq_pow_bit1 is a dubious translation:
-lean 3 declaration is
- forall {a : Int} {b : Int} {c : Int}, (IsCoprime.{0} Int Int.commSemiring a b) -> (forall {k : Nat}, (Eq.{1} Int (HMul.hMul.{0, 0, 0} Int Int Int (instHMul.{0} Int Int.hasMul) a b) (HPow.hPow.{0, 0, 0} Int Nat Int (instHPow.{0, 0} Int Nat (Monoid.Pow.{0} Int Int.monoid)) c (bit1.{0} Nat Nat.hasOne Nat.hasAdd k))) -> (And (Exists.{1} Int (fun (d : Int) => Eq.{1} Int a (HPow.hPow.{0, 0, 0} Int Nat Int (instHPow.{0, 0} Int Nat (Monoid.Pow.{0} Int Int.monoid)) d (bit1.{0} Nat Nat.hasOne Nat.hasAdd k)))) (Exists.{1} Int (fun (e : Int) => Eq.{1} Int b (HPow.hPow.{0, 0, 0} Int Nat Int (instHPow.{0, 0} Int Nat (Monoid.Pow.{0} Int Int.monoid)) e (bit1.{0} Nat Nat.hasOne Nat.hasAdd k))))))
-but is expected to have type
- forall {a : Int} {b : Int} {c : Int}, (IsCoprime.{0} Int Int.instCommSemiringInt a b) -> (forall {k : Nat}, (Eq.{1} Int (HMul.hMul.{0, 0, 0} Int Int Int (instHMul.{0} Int Int.instMulInt) a b) (HPow.hPow.{0, 0, 0} Int Nat Int Int.instHPowIntNat c (bit1.{0} Nat (CanonicallyOrderedCommSemiring.toOne.{0} Nat Nat.canonicallyOrderedCommSemiring) instAddNat k))) -> (And (Exists.{1} Int (fun (d : Int) => Eq.{1} Int a (HPow.hPow.{0, 0, 0} Int Nat Int (instHPow.{0, 0} Int Nat (Monoid.Pow.{0} Int Int.instMonoidInt)) d (bit1.{0} Nat (CanonicallyOrderedCommSemiring.toOne.{0} Nat Nat.canonicallyOrderedCommSemiring) instAddNat k)))) (Exists.{1} Int (fun (e : Int) => Eq.{1} Int b (HPow.hPow.{0, 0, 0} Int Nat Int (instHPow.{0, 0} Int Nat (Monoid.Pow.{0} Int Int.instMonoidInt)) e (bit1.{0} Nat (CanonicallyOrderedCommSemiring.toOne.{0} Nat Nat.canonicallyOrderedCommSemiring) instAddNat k))))))
-Case conversion may be inaccurate. Consider using '#align int.eq_pow_of_mul_eq_pow_bit1 Int.eq_pow_of_mul_eq_pow_bit1ₓ'. -/
theorem eq_pow_of_mul_eq_pow_bit1 {a b c : ℤ} (hab : IsCoprime a b) {k : ℕ}
(h : a * b = c ^ bit1 k) : (∃ d, a = d ^ bit1 k) ∧ ∃ e, b = e ^ bit1 k :=
⟨eq_pow_of_mul_eq_pow_bit1_left hab h, eq_pow_of_mul_eq_pow_bit1_right hab h⟩
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -47,9 +47,7 @@ instance : WfDvdMonoid ℕ :=
(WithTop.wellFounded_lt Nat.lt_wfRel)
intro a b h
cases a
- · exfalso
- revert h
- simp [DvdNotUnit]
+ · exfalso; revert h; simp [DvdNotUnit]
cases b
· simpa [succ_ne_zero] using WithTop.coe_lt_top (a + 1)
cases' dvd_and_not_dvd_iff.2 h with h1 h2
@@ -250,10 +248,8 @@ Case conversion may be inaccurate. Consider using '#align int.exists_unit_of_abs
theorem exists_unit_of_abs (a : ℤ) : ∃ (u : ℤ)(h : IsUnit u), (Int.natAbs a : ℤ) = u * a :=
by
cases' nat_abs_eq a with h
- · use 1, isUnit_one
- rw [← h, one_mul]
- · use -1, is_unit_one.neg
- rw [← neg_eq_iff_eq_neg.mpr h]
+ · use 1, isUnit_one; rw [← h, one_mul]
+ · use -1, is_unit_one.neg; rw [← neg_eq_iff_eq_neg.mpr h]
simp only [neg_mul, one_mul]
#align int.exists_unit_of_abs Int.exists_unit_of_abs
@@ -329,16 +325,11 @@ Case conversion may be inaccurate. Consider using '#align int.sq_of_gcd_eq_one I
theorem sq_of_gcd_eq_one {a b c : ℤ} (h : Int.gcd a b = 1) (heq : a * b = c ^ 2) :
∃ a0 : ℤ, a = a0 ^ 2 ∨ a = -a0 ^ 2 :=
by
- have h' : IsUnit (GCDMonoid.gcd a b) :=
- by
- rw [← coe_gcd, h, Int.ofNat_one]
- exact isUnit_one
+ have h' : IsUnit (GCDMonoid.gcd a b) := by rw [← coe_gcd, h, Int.ofNat_one]; exact isUnit_one
obtain ⟨d, ⟨u, hu⟩⟩ := exists_associated_pow_of_mul_eq_pow h' HEq
use d
rw [← hu]
- cases' Int.units_eq_one_or u with hu' hu' <;>
- · rw [hu']
- simp
+ cases' Int.units_eq_one_or u with hu' hu' <;> · rw [hu']; simp
#align int.sq_of_gcd_eq_one Int.sq_of_gcd_eq_one
/- warning: int.sq_of_coprime -> Int.sq_of_coprime is a dubious translation:
@@ -629,10 +620,8 @@ lean 3 declaration is
but is expected to have type
forall (a : Int), Eq.{1} (Ideal.{0} Int Int.instSemiringInt) (Ideal.span.{0} Int Int.instSemiringInt (Singleton.singleton.{0, 0} Int (Set.{0} Int) (Set.instSingletonSet.{0} Int) (Nat.cast.{0} Int instNatCastInt (Int.natAbs a)))) (Ideal.span.{0} Int Int.instSemiringInt (Singleton.singleton.{0, 0} Int (Set.{0} Int) (Set.instSingletonSet.{0} Int) a))
Case conversion may be inaccurate. Consider using '#align int.span_nat_abs Int.span_natAbsₓ'. -/
-theorem span_natAbs (a : ℤ) : Ideal.span ({a.natAbs} : Set ℤ) = Ideal.span {a} :=
- by
- rw [Ideal.span_singleton_eq_span_singleton]
- exact (associated_nat_abs _).symm
+theorem span_natAbs (a : ℤ) : Ideal.span ({a.natAbs} : Set ℤ) = Ideal.span {a} := by
+ rw [Ideal.span_singleton_eq_span_singleton]; exact (associated_nat_abs _).symm
#align int.span_nat_abs Int.span_natAbs
/- warning: int.eq_pow_of_mul_eq_pow_bit1_left -> Int.eq_pow_of_mul_eq_pow_bit1_left is a dubious translation:
mathlib commit https://github.com/leanprover-community/mathlib/commit/95a87616d63b3cb49d3fe678d416fbe9c4217bf4
@@ -120,7 +120,7 @@ instance : NormalizationMonoid ℤ
lean 3 declaration is
forall {z : Int}, (LE.le.{0} Int Int.hasLe (OfNat.ofNat.{0} Int 0 (OfNat.mk.{0} Int 0 (Zero.zero.{0} Int Int.hasZero))) z) -> (Eq.{1} Int (coeFn.{1, 1} (MonoidWithZeroHom.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.commSemiring (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.commSemiring (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) (fun (_x : MonoidWithZeroHom.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.commSemiring (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.commSemiring (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) => Int -> Int) (MonoidWithZeroHom.hasCoeToFun.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.commSemiring (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.commSemiring (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) (normalize.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.commSemiring (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))) Int.normalizationMonoid) z) z)
but is expected to have type
- forall {z : Int}, (LE.le.{0} Int Int.instLEInt (OfNat.ofNat.{0} Int 0 (instOfNatInt 0)) z) -> (Eq.{1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : Int) => Int) z) (FunLike.coe.{1, 1, 1} (MonoidWithZeroHom.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) Int (fun (_x : Int) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : Int) => Int) _x) (MulHomClass.toFunLike.{0, 0, 0} (MonoidWithZeroHom.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) Int Int (MulOneClass.toMul.{0} Int (MulZeroOneClass.toMulOneClass.{0} Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))))) (MulOneClass.toMul.{0} Int (MulZeroOneClass.toMulOneClass.{0} Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))))) (MonoidHomClass.toMulHomClass.{0, 0, 0} (MonoidWithZeroHom.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) Int Int (MulZeroOneClass.toMulOneClass.{0} Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) (MulZeroOneClass.toMulOneClass.{0} Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) (MonoidWithZeroHomClass.toMonoidHomClass.{0, 0, 0} (MonoidWithZeroHom.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZeroHom.monoidWithZeroHomClass.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))))))) (normalize.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))) Int.normalizationMonoid) z) z)
+ forall {z : Int}, (LE.le.{0} Int Int.instLEInt (OfNat.ofNat.{0} Int 0 (instOfNatInt 0)) z) -> (Eq.{1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : Int) => Int) z) (FunLike.coe.{1, 1, 1} (MonoidWithZeroHom.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) Int (fun (_x : Int) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : Int) => Int) _x) (MulHomClass.toFunLike.{0, 0, 0} (MonoidWithZeroHom.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) Int Int (MulOneClass.toMul.{0} Int (MulZeroOneClass.toMulOneClass.{0} Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))))) (MulOneClass.toMul.{0} Int (MulZeroOneClass.toMulOneClass.{0} Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))))) (MonoidHomClass.toMulHomClass.{0, 0, 0} (MonoidWithZeroHom.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) Int Int (MulZeroOneClass.toMulOneClass.{0} Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) (MulZeroOneClass.toMulOneClass.{0} Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) (MonoidWithZeroHomClass.toMonoidHomClass.{0, 0, 0} (MonoidWithZeroHom.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZeroHom.monoidWithZeroHomClass.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))))))) (normalize.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))) Int.normalizationMonoid) z) z)
Case conversion may be inaccurate. Consider using '#align int.normalize_of_nonneg Int.normalize_of_nonnegₓ'. -/
theorem normalize_of_nonneg {z : ℤ} (h : 0 ≤ z) : normalize z = z :=
show z * ↑(ite _ _ _) = z by rw [if_pos h, Units.val_one, mul_one]
@@ -130,7 +130,7 @@ theorem normalize_of_nonneg {z : ℤ} (h : 0 ≤ z) : normalize z = z :=
lean 3 declaration is
forall {z : Int}, (LE.le.{0} Int Int.hasLe z (OfNat.ofNat.{0} Int 0 (OfNat.mk.{0} Int 0 (Zero.zero.{0} Int Int.hasZero)))) -> (Eq.{1} Int (coeFn.{1, 1} (MonoidWithZeroHom.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.commSemiring (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.commSemiring (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) (fun (_x : MonoidWithZeroHom.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.commSemiring (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.commSemiring (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) => Int -> Int) (MonoidWithZeroHom.hasCoeToFun.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.commSemiring (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.commSemiring (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) (normalize.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.commSemiring (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))) Int.normalizationMonoid) z) (Neg.neg.{0} Int Int.hasNeg z))
but is expected to have type
- forall {z : Int}, (LE.le.{0} Int Int.instLEInt z (OfNat.ofNat.{0} Int 0 (instOfNatInt 0))) -> (Eq.{1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : Int) => Int) z) (FunLike.coe.{1, 1, 1} (MonoidWithZeroHom.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) Int (fun (_x : Int) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : Int) => Int) _x) (MulHomClass.toFunLike.{0, 0, 0} (MonoidWithZeroHom.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) Int Int (MulOneClass.toMul.{0} Int (MulZeroOneClass.toMulOneClass.{0} Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))))) (MulOneClass.toMul.{0} Int (MulZeroOneClass.toMulOneClass.{0} Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))))) (MonoidHomClass.toMulHomClass.{0, 0, 0} (MonoidWithZeroHom.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) Int Int (MulZeroOneClass.toMulOneClass.{0} Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) (MulZeroOneClass.toMulOneClass.{0} Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) (MonoidWithZeroHomClass.toMonoidHomClass.{0, 0, 0} (MonoidWithZeroHom.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZeroHom.monoidWithZeroHomClass.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))))))) (normalize.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))) Int.normalizationMonoid) z) (Neg.neg.{0} Int Int.instNegInt z))
+ forall {z : Int}, (LE.le.{0} Int Int.instLEInt z (OfNat.ofNat.{0} Int 0 (instOfNatInt 0))) -> (Eq.{1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : Int) => Int) z) (FunLike.coe.{1, 1, 1} (MonoidWithZeroHom.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) Int (fun (_x : Int) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : Int) => Int) _x) (MulHomClass.toFunLike.{0, 0, 0} (MonoidWithZeroHom.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) Int Int (MulOneClass.toMul.{0} Int (MulZeroOneClass.toMulOneClass.{0} Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))))) (MulOneClass.toMul.{0} Int (MulZeroOneClass.toMulOneClass.{0} Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))))) (MonoidHomClass.toMulHomClass.{0, 0, 0} (MonoidWithZeroHom.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) Int Int (MulZeroOneClass.toMulOneClass.{0} Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) (MulZeroOneClass.toMulOneClass.{0} Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) (MonoidWithZeroHomClass.toMonoidHomClass.{0, 0, 0} (MonoidWithZeroHom.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZeroHom.monoidWithZeroHomClass.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))))))) (normalize.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))) Int.normalizationMonoid) z) (Neg.neg.{0} Int Int.instNegInt z))
Case conversion may be inaccurate. Consider using '#align int.normalize_of_nonpos Int.normalize_of_nonposₓ'. -/
theorem normalize_of_nonpos {z : ℤ} (h : z ≤ 0) : normalize z = -z :=
by
@@ -144,7 +144,7 @@ theorem normalize_of_nonpos {z : ℤ} (h : z ≤ 0) : normalize z = -z :=
lean 3 declaration is
forall (n : Nat), Eq.{1} Int (coeFn.{1, 1} (MonoidWithZeroHom.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.commSemiring (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.commSemiring (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) (fun (_x : MonoidWithZeroHom.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.commSemiring (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.commSemiring (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) => Int -> Int) (MonoidWithZeroHom.hasCoeToFun.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.commSemiring (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.commSemiring (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) (normalize.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.commSemiring (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))) Int.normalizationMonoid) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Nat Int (HasLiftT.mk.{1, 1} Nat Int (CoeTCₓ.coe.{1, 1} Nat Int (coeBase.{1, 1} Nat Int Int.hasCoe))) n)) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Nat Int (HasLiftT.mk.{1, 1} Nat Int (CoeTCₓ.coe.{1, 1} Nat Int (coeBase.{1, 1} Nat Int Int.hasCoe))) n)
but is expected to have type
- forall (n : Nat), Eq.{1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : Int) => Int) (Nat.cast.{0} Int instNatCastInt n)) (FunLike.coe.{1, 1, 1} (MonoidWithZeroHom.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) Int (fun (_x : Int) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : Int) => Int) _x) (MulHomClass.toFunLike.{0, 0, 0} (MonoidWithZeroHom.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) Int Int (MulOneClass.toMul.{0} Int (MulZeroOneClass.toMulOneClass.{0} Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))))) (MulOneClass.toMul.{0} Int (MulZeroOneClass.toMulOneClass.{0} Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))))) (MonoidHomClass.toMulHomClass.{0, 0, 0} (MonoidWithZeroHom.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) Int Int (MulZeroOneClass.toMulOneClass.{0} Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) (MulZeroOneClass.toMulOneClass.{0} Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) (MonoidWithZeroHomClass.toMonoidHomClass.{0, 0, 0} (MonoidWithZeroHom.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZeroHom.monoidWithZeroHomClass.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))))))) (normalize.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))) Int.normalizationMonoid) (Nat.cast.{0} Int instNatCastInt n)) (Nat.cast.{0} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : Int) => Int) (Nat.cast.{0} Int instNatCastInt n)) instNatCastInt n)
+ forall (n : Nat), Eq.{1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : Int) => Int) (Nat.cast.{0} Int instNatCastInt n)) (FunLike.coe.{1, 1, 1} (MonoidWithZeroHom.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) Int (fun (_x : Int) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : Int) => Int) _x) (MulHomClass.toFunLike.{0, 0, 0} (MonoidWithZeroHom.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) Int Int (MulOneClass.toMul.{0} Int (MulZeroOneClass.toMulOneClass.{0} Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))))) (MulOneClass.toMul.{0} Int (MulZeroOneClass.toMulOneClass.{0} Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))))) (MonoidHomClass.toMulHomClass.{0, 0, 0} (MonoidWithZeroHom.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) Int Int (MulZeroOneClass.toMulOneClass.{0} Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) (MulZeroOneClass.toMulOneClass.{0} Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) (MonoidWithZeroHomClass.toMonoidHomClass.{0, 0, 0} (MonoidWithZeroHom.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZeroHom.monoidWithZeroHomClass.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))))))) (normalize.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))) Int.normalizationMonoid) (Nat.cast.{0} Int instNatCastInt n)) (Nat.cast.{0} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : Int) => Int) (Nat.cast.{0} Int instNatCastInt n)) instNatCastInt n)
Case conversion may be inaccurate. Consider using '#align int.normalize_coe_nat Int.normalize_coe_natₓ'. -/
theorem normalize_coe_nat (n : ℕ) : normalize (n : ℤ) = n :=
normalize_of_nonneg (ofNat_le_ofNat_of_le <| Nat.zero_le n)
@@ -154,7 +154,7 @@ theorem normalize_coe_nat (n : ℕ) : normalize (n : ℤ) = n :=
lean 3 declaration is
forall (z : Int), Eq.{1} Int (Abs.abs.{0} Int (Neg.toHasAbs.{0} Int Int.hasNeg (SemilatticeSup.toHasSup.{0} Int (Lattice.toSemilatticeSup.{0} Int (LinearOrder.toLattice.{0} Int Int.linearOrder)))) z) (coeFn.{1, 1} (MonoidWithZeroHom.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.commSemiring (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.commSemiring (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) (fun (_x : MonoidWithZeroHom.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.commSemiring (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.commSemiring (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) => Int -> Int) (MonoidWithZeroHom.hasCoeToFun.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.commSemiring (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.commSemiring (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) (normalize.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.commSemiring (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))) Int.normalizationMonoid) z)
but is expected to have type
- forall (z : Int), Eq.{1} Int (Abs.abs.{0} Int (Neg.toHasAbs.{0} Int Int.instNegInt (SemilatticeSup.toSup.{0} Int (Lattice.toSemilatticeSup.{0} Int (DistribLattice.toLattice.{0} Int (instDistribLattice.{0} Int Int.instLinearOrderInt))))) z) (FunLike.coe.{1, 1, 1} (MonoidWithZeroHom.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) Int (fun (_x : Int) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : Int) => Int) _x) (MulHomClass.toFunLike.{0, 0, 0} (MonoidWithZeroHom.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) Int Int (MulOneClass.toMul.{0} Int (MulZeroOneClass.toMulOneClass.{0} Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))))) (MulOneClass.toMul.{0} Int (MulZeroOneClass.toMulOneClass.{0} Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))))) (MonoidHomClass.toMulHomClass.{0, 0, 0} (MonoidWithZeroHom.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) Int Int (MulZeroOneClass.toMulOneClass.{0} Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) (MulZeroOneClass.toMulOneClass.{0} Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) (MonoidWithZeroHomClass.toMonoidHomClass.{0, 0, 0} (MonoidWithZeroHom.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZeroHom.monoidWithZeroHomClass.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))))))) (normalize.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))) Int.normalizationMonoid) z)
+ forall (z : Int), Eq.{1} Int (Abs.abs.{0} Int (Neg.toHasAbs.{0} Int Int.instNegInt (SemilatticeSup.toSup.{0} Int (Lattice.toSemilatticeSup.{0} Int (DistribLattice.toLattice.{0} Int (instDistribLattice.{0} Int Int.instLinearOrderInt))))) z) (FunLike.coe.{1, 1, 1} (MonoidWithZeroHom.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) Int (fun (_x : Int) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : Int) => Int) _x) (MulHomClass.toFunLike.{0, 0, 0} (MonoidWithZeroHom.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) Int Int (MulOneClass.toMul.{0} Int (MulZeroOneClass.toMulOneClass.{0} Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))))) (MulOneClass.toMul.{0} Int (MulZeroOneClass.toMulOneClass.{0} Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))))) (MonoidHomClass.toMulHomClass.{0, 0, 0} (MonoidWithZeroHom.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) Int Int (MulZeroOneClass.toMulOneClass.{0} Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) (MulZeroOneClass.toMulOneClass.{0} Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) (MonoidWithZeroHomClass.toMonoidHomClass.{0, 0, 0} (MonoidWithZeroHom.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZeroHom.monoidWithZeroHomClass.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))))))) (normalize.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))) Int.normalizationMonoid) z)
Case conversion may be inaccurate. Consider using '#align int.abs_eq_normalize Int.abs_eq_normalizeₓ'. -/
theorem abs_eq_normalize (z : ℤ) : |z| = normalize z := by
cases le_total 0 z <;> simp [normalize_of_nonneg, normalize_of_nonpos, *]
@@ -164,7 +164,7 @@ theorem abs_eq_normalize (z : ℤ) : |z| = normalize z := by
lean 3 declaration is
forall {z : Int}, (Eq.{1} Int (coeFn.{1, 1} (MonoidWithZeroHom.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.commSemiring (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.commSemiring (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) (fun (_x : MonoidWithZeroHom.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.commSemiring (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.commSemiring (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) => Int -> Int) (MonoidWithZeroHom.hasCoeToFun.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.commSemiring (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.commSemiring (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) (normalize.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.commSemiring (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))) Int.normalizationMonoid) z) z) -> (LE.le.{0} Int Int.hasLe (OfNat.ofNat.{0} Int 0 (OfNat.mk.{0} Int 0 (Zero.zero.{0} Int Int.hasZero))) z)
but is expected to have type
- forall {z : Int}, (Eq.{1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : Int) => Int) z) (FunLike.coe.{1, 1, 1} (MonoidWithZeroHom.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) Int (fun (_x : Int) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : Int) => Int) _x) (MulHomClass.toFunLike.{0, 0, 0} (MonoidWithZeroHom.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) Int Int (MulOneClass.toMul.{0} Int (MulZeroOneClass.toMulOneClass.{0} Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))))) (MulOneClass.toMul.{0} Int (MulZeroOneClass.toMulOneClass.{0} Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))))) (MonoidHomClass.toMulHomClass.{0, 0, 0} (MonoidWithZeroHom.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) Int Int (MulZeroOneClass.toMulOneClass.{0} Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) (MulZeroOneClass.toMulOneClass.{0} Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) (MonoidWithZeroHomClass.toMonoidHomClass.{0, 0, 0} (MonoidWithZeroHom.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZeroHom.monoidWithZeroHomClass.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))))))) (normalize.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))) Int.normalizationMonoid) z) z) -> (LE.le.{0} Int Int.instLEInt (OfNat.ofNat.{0} Int 0 (instOfNatInt 0)) z)
+ forall {z : Int}, (Eq.{1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : Int) => Int) z) (FunLike.coe.{1, 1, 1} (MonoidWithZeroHom.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) Int (fun (_x : Int) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : Int) => Int) _x) (MulHomClass.toFunLike.{0, 0, 0} (MonoidWithZeroHom.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) Int Int (MulOneClass.toMul.{0} Int (MulZeroOneClass.toMulOneClass.{0} Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))))) (MulOneClass.toMul.{0} Int (MulZeroOneClass.toMulOneClass.{0} Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))))) (MonoidHomClass.toMulHomClass.{0, 0, 0} (MonoidWithZeroHom.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) Int Int (MulZeroOneClass.toMulOneClass.{0} Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) (MulZeroOneClass.toMulOneClass.{0} Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) (MonoidWithZeroHomClass.toMonoidHomClass.{0, 0, 0} (MonoidWithZeroHom.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZeroHom.monoidWithZeroHomClass.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))))))) (normalize.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))) Int.normalizationMonoid) z) z) -> (LE.le.{0} Int Int.instLEInt (OfNat.ofNat.{0} Int 0 (instOfNatInt 0)) z)
Case conversion may be inaccurate. Consider using '#align int.nonneg_of_normalize_eq_self Int.nonneg_of_normalize_eq_selfₓ'. -/
theorem nonneg_of_normalize_eq_self {z : ℤ} (hz : normalize z = z) : 0 ≤ z :=
abs_eq_self.1 <| by rw [abs_eq_normalize, hz]
@@ -174,7 +174,7 @@ theorem nonneg_of_normalize_eq_self {z : ℤ} (hz : normalize z = z) : 0 ≤ z :
lean 3 declaration is
forall (z : Int), Iff (Eq.{1} Int (coeFn.{1, 1} (MonoidWithZeroHom.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.commSemiring (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.commSemiring (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) (fun (_x : MonoidWithZeroHom.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.commSemiring (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.commSemiring (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) => Int -> Int) (MonoidWithZeroHom.hasCoeToFun.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.commSemiring (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.commSemiring (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) (normalize.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.commSemiring (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))) Int.normalizationMonoid) z) z) (LE.le.{0} Int Int.hasLe (OfNat.ofNat.{0} Int 0 (OfNat.mk.{0} Int 0 (Zero.zero.{0} Int Int.hasZero))) z)
but is expected to have type
- forall (z : Int), Iff (Eq.{1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : Int) => Int) z) (FunLike.coe.{1, 1, 1} (MonoidWithZeroHom.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) Int (fun (_x : Int) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : Int) => Int) _x) (MulHomClass.toFunLike.{0, 0, 0} (MonoidWithZeroHom.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) Int Int (MulOneClass.toMul.{0} Int (MulZeroOneClass.toMulOneClass.{0} Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))))) (MulOneClass.toMul.{0} Int (MulZeroOneClass.toMulOneClass.{0} Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))))) (MonoidHomClass.toMulHomClass.{0, 0, 0} (MonoidWithZeroHom.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) Int Int (MulZeroOneClass.toMulOneClass.{0} Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) (MulZeroOneClass.toMulOneClass.{0} Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) (MonoidWithZeroHomClass.toMonoidHomClass.{0, 0, 0} (MonoidWithZeroHom.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZeroHom.monoidWithZeroHomClass.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))))))) (normalize.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))) Int.normalizationMonoid) z) z) (LE.le.{0} Int Int.instLEInt (OfNat.ofNat.{0} Int 0 (instOfNatInt 0)) z)
+ forall (z : Int), Iff (Eq.{1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : Int) => Int) z) (FunLike.coe.{1, 1, 1} (MonoidWithZeroHom.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) Int (fun (_x : Int) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : Int) => Int) _x) (MulHomClass.toFunLike.{0, 0, 0} (MonoidWithZeroHom.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) Int Int (MulOneClass.toMul.{0} Int (MulZeroOneClass.toMulOneClass.{0} Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))))) (MulOneClass.toMul.{0} Int (MulZeroOneClass.toMulOneClass.{0} Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))))) (MonoidHomClass.toMulHomClass.{0, 0, 0} (MonoidWithZeroHom.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) Int Int (MulZeroOneClass.toMulOneClass.{0} Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) (MulZeroOneClass.toMulOneClass.{0} Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) (MonoidWithZeroHomClass.toMonoidHomClass.{0, 0, 0} (MonoidWithZeroHom.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZeroHom.monoidWithZeroHomClass.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))))))) (normalize.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))) Int.normalizationMonoid) z) z) (LE.le.{0} Int Int.instLEInt (OfNat.ofNat.{0} Int 0 (instOfNatInt 0)) z)
Case conversion may be inaccurate. Consider using '#align int.nonneg_iff_normalize_eq_self Int.nonneg_iff_normalize_eq_selfₓ'. -/
theorem nonneg_iff_normalize_eq_self (z : ℤ) : normalize z = z ↔ 0 ≤ z :=
⟨nonneg_of_normalize_eq_self, normalize_of_nonneg⟩
mathlib commit https://github.com/leanprover-community/mathlib/commit/1a4df69ca1a9a0e5e26bfe12e2b92814216016d0
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Johannes Hölzl, Jens Wagemaker, Aaron Anderson
! This file was ported from Lean 3 source module ring_theory.int.basic
-! leanprover-community/mathlib commit c085f3044fe585c575e322bfab45b3633c48d820
+! leanprover-community/mathlib commit e655e4ea5c6d02854696f97494997ba4c31be802
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -618,8 +618,9 @@ but is expected to have type
Case conversion may be inaccurate. Consider using '#align int.zmultiples_nat_abs Int.zmultiples_natAbsₓ'. -/
theorem zmultiples_natAbs (a : ℤ) :
AddSubgroup.zmultiples (a.natAbs : ℤ) = AddSubgroup.zmultiples a :=
- le_antisymm (AddSubgroup.zmultiples_subset (mem_zmultiples_iff.mpr (dvd_natAbs.mpr (dvd_refl a))))
- (AddSubgroup.zmultiples_subset (mem_zmultiples_iff.mpr (natAbs_dvd.mpr (dvd_refl a))))
+ le_antisymm
+ (AddSubgroup.zmultiples_le_of_mem (mem_zmultiples_iff.mpr (dvd_natAbs.mpr (dvd_refl a))))
+ (AddSubgroup.zmultiples_le_of_mem (mem_zmultiples_iff.mpr (natAbs_dvd.mpr (dvd_refl a))))
#align int.zmultiples_nat_abs Int.zmultiples_natAbs
/- warning: int.span_nat_abs -> Int.span_natAbs is a dubious translation:
mathlib commit https://github.com/leanprover-community/mathlib/commit/57e09a1296bfb4330ddf6624f1028ba186117d82
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Johannes Hölzl, Jens Wagemaker, Aaron Anderson
! This file was ported from Lean 3 source module ring_theory.int.basic
-! leanprover-community/mathlib commit 2196ab363eb097c008d4497125e0dde23fb36db2
+! leanprover-community/mathlib commit c085f3044fe585c575e322bfab45b3633c48d820
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -16,6 +16,9 @@ import Mathbin.RingTheory.PrincipalIdealDomain
/-!
# Divisibility over ℕ and ℤ
+> THIS FILE IS SYNCHRONIZED WITH MATHLIB4.
+> Any changes to this file require a corresponding PR to mathlib4.
+
This file collects results for the integers and natural numbers that use abstract algebra in
their proofs or cases of ℕ and ℤ being examples of structures in abstract algebra.
mathlib commit https://github.com/leanprover-community/mathlib/commit/290a7ba01fbcab1b64757bdaa270d28f4dcede35
@@ -78,10 +78,22 @@ instance : NormalizedGCDMonoid ℕ :=
normalize_gcd := fun a b => normalize_eq _
normalize_lcm := fun a b => normalize_eq _ }
+/- warning: gcd_eq_nat_gcd -> gcd_eq_nat_gcd is a dubious translation:
+lean 3 declaration is
+ forall (m : Nat) (n : Nat), Eq.{1} Nat (GCDMonoid.gcd.{0} Nat Nat.cancelCommMonoidWithZero Nat.gcdMonoid m n) (Nat.gcd m n)
+but is expected to have type
+ forall (m : Nat) (n : Nat), Eq.{1} Nat (GCDMonoid.gcd.{0} Nat Nat.cancelCommMonoidWithZero instGCDMonoidNatCancelCommMonoidWithZero m n) (Nat.gcd m n)
+Case conversion may be inaccurate. Consider using '#align gcd_eq_nat_gcd gcd_eq_nat_gcdₓ'. -/
theorem gcd_eq_nat_gcd (m n : ℕ) : gcd m n = Nat.gcd m n :=
rfl
#align gcd_eq_nat_gcd gcd_eq_nat_gcd
+/- warning: lcm_eq_nat_lcm -> lcm_eq_nat_lcm is a dubious translation:
+lean 3 declaration is
+ forall (m : Nat) (n : Nat), Eq.{1} Nat (GCDMonoid.lcm.{0} Nat Nat.cancelCommMonoidWithZero Nat.gcdMonoid m n) (Nat.lcm m n)
+but is expected to have type
+ forall (m : Nat) (n : Nat), Eq.{1} Nat (GCDMonoid.lcm.{0} Nat Nat.cancelCommMonoidWithZero instGCDMonoidNatCancelCommMonoidWithZero m n) (Nat.lcm m n)
+Case conversion may be inaccurate. Consider using '#align lcm_eq_nat_lcm lcm_eq_nat_lcmₓ'. -/
theorem lcm_eq_nat_lcm (m n : ℕ) : lcm m n = Nat.lcm m n :=
rfl
#align lcm_eq_nat_lcm lcm_eq_nat_lcm
@@ -101,10 +113,22 @@ instance : NormalizationMonoid ℤ
(units_eq_one_or u).elim (fun eq => Eq.symm ▸ if_pos zero_le_one) fun eq =>
Eq.symm ▸ if_neg (not_le_of_gt <| show (-1 : ℤ) < 0 by decide)
+/- warning: int.normalize_of_nonneg -> Int.normalize_of_nonneg is a dubious translation:
+lean 3 declaration is
+ forall {z : Int}, (LE.le.{0} Int Int.hasLe (OfNat.ofNat.{0} Int 0 (OfNat.mk.{0} Int 0 (Zero.zero.{0} Int Int.hasZero))) z) -> (Eq.{1} Int (coeFn.{1, 1} (MonoidWithZeroHom.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.commSemiring (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.commSemiring (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) (fun (_x : MonoidWithZeroHom.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.commSemiring (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.commSemiring (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) => Int -> Int) (MonoidWithZeroHom.hasCoeToFun.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.commSemiring (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.commSemiring (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) (normalize.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.commSemiring (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))) Int.normalizationMonoid) z) z)
+but is expected to have type
+ forall {z : Int}, (LE.le.{0} Int Int.instLEInt (OfNat.ofNat.{0} Int 0 (instOfNatInt 0)) z) -> (Eq.{1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : Int) => Int) z) (FunLike.coe.{1, 1, 1} (MonoidWithZeroHom.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) Int (fun (_x : Int) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : Int) => Int) _x) (MulHomClass.toFunLike.{0, 0, 0} (MonoidWithZeroHom.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) Int Int (MulOneClass.toMul.{0} Int (MulZeroOneClass.toMulOneClass.{0} Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))))) (MulOneClass.toMul.{0} Int (MulZeroOneClass.toMulOneClass.{0} Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))))) (MonoidHomClass.toMulHomClass.{0, 0, 0} (MonoidWithZeroHom.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) Int Int (MulZeroOneClass.toMulOneClass.{0} Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) (MulZeroOneClass.toMulOneClass.{0} Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) (MonoidWithZeroHomClass.toMonoidHomClass.{0, 0, 0} (MonoidWithZeroHom.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZeroHom.monoidWithZeroHomClass.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))))))) (normalize.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))) Int.normalizationMonoid) z) z)
+Case conversion may be inaccurate. Consider using '#align int.normalize_of_nonneg Int.normalize_of_nonnegₓ'. -/
theorem normalize_of_nonneg {z : ℤ} (h : 0 ≤ z) : normalize z = z :=
show z * ↑(ite _ _ _) = z by rw [if_pos h, Units.val_one, mul_one]
#align int.normalize_of_nonneg Int.normalize_of_nonneg
+/- warning: int.normalize_of_nonpos -> Int.normalize_of_nonpos is a dubious translation:
+lean 3 declaration is
+ forall {z : Int}, (LE.le.{0} Int Int.hasLe z (OfNat.ofNat.{0} Int 0 (OfNat.mk.{0} Int 0 (Zero.zero.{0} Int Int.hasZero)))) -> (Eq.{1} Int (coeFn.{1, 1} (MonoidWithZeroHom.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.commSemiring (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.commSemiring (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) (fun (_x : MonoidWithZeroHom.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.commSemiring (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.commSemiring (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) => Int -> Int) (MonoidWithZeroHom.hasCoeToFun.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.commSemiring (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.commSemiring (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) (normalize.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.commSemiring (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))) Int.normalizationMonoid) z) (Neg.neg.{0} Int Int.hasNeg z))
+but is expected to have type
+ forall {z : Int}, (LE.le.{0} Int Int.instLEInt z (OfNat.ofNat.{0} Int 0 (instOfNatInt 0))) -> (Eq.{1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : Int) => Int) z) (FunLike.coe.{1, 1, 1} (MonoidWithZeroHom.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) Int (fun (_x : Int) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : Int) => Int) _x) (MulHomClass.toFunLike.{0, 0, 0} (MonoidWithZeroHom.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) Int Int (MulOneClass.toMul.{0} Int (MulZeroOneClass.toMulOneClass.{0} Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))))) (MulOneClass.toMul.{0} Int (MulZeroOneClass.toMulOneClass.{0} Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))))) (MonoidHomClass.toMulHomClass.{0, 0, 0} (MonoidWithZeroHom.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) Int Int (MulZeroOneClass.toMulOneClass.{0} Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) (MulZeroOneClass.toMulOneClass.{0} Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) (MonoidWithZeroHomClass.toMonoidHomClass.{0, 0, 0} (MonoidWithZeroHom.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZeroHom.monoidWithZeroHomClass.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))))))) (normalize.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))) Int.normalizationMonoid) z) (Neg.neg.{0} Int Int.instNegInt z))
+Case conversion may be inaccurate. Consider using '#align int.normalize_of_nonpos Int.normalize_of_nonposₓ'. -/
theorem normalize_of_nonpos {z : ℤ} (h : z ≤ 0) : normalize z = -z :=
by
obtain rfl | h := h.eq_or_lt
@@ -113,22 +137,52 @@ theorem normalize_of_nonpos {z : ℤ} (h : z ≤ 0) : normalize z = -z :=
rw [if_neg (not_le_of_gt h), Units.val_neg, Units.val_one, mul_neg_one]
#align int.normalize_of_nonpos Int.normalize_of_nonpos
+/- warning: int.normalize_coe_nat -> Int.normalize_coe_nat is a dubious translation:
+lean 3 declaration is
+ forall (n : Nat), Eq.{1} Int (coeFn.{1, 1} (MonoidWithZeroHom.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.commSemiring (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.commSemiring (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) (fun (_x : MonoidWithZeroHom.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.commSemiring (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.commSemiring (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) => Int -> Int) (MonoidWithZeroHom.hasCoeToFun.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.commSemiring (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.commSemiring (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) (normalize.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.commSemiring (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))) Int.normalizationMonoid) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Nat Int (HasLiftT.mk.{1, 1} Nat Int (CoeTCₓ.coe.{1, 1} Nat Int (coeBase.{1, 1} Nat Int Int.hasCoe))) n)) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Nat Int (HasLiftT.mk.{1, 1} Nat Int (CoeTCₓ.coe.{1, 1} Nat Int (coeBase.{1, 1} Nat Int Int.hasCoe))) n)
+but is expected to have type
+ forall (n : Nat), Eq.{1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : Int) => Int) (Nat.cast.{0} Int instNatCastInt n)) (FunLike.coe.{1, 1, 1} (MonoidWithZeroHom.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) Int (fun (_x : Int) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : Int) => Int) _x) (MulHomClass.toFunLike.{0, 0, 0} (MonoidWithZeroHom.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) Int Int (MulOneClass.toMul.{0} Int (MulZeroOneClass.toMulOneClass.{0} Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))))) (MulOneClass.toMul.{0} Int (MulZeroOneClass.toMulOneClass.{0} Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))))) (MonoidHomClass.toMulHomClass.{0, 0, 0} (MonoidWithZeroHom.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) Int Int (MulZeroOneClass.toMulOneClass.{0} Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) (MulZeroOneClass.toMulOneClass.{0} Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) (MonoidWithZeroHomClass.toMonoidHomClass.{0, 0, 0} (MonoidWithZeroHom.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZeroHom.monoidWithZeroHomClass.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))))))) (normalize.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))) Int.normalizationMonoid) (Nat.cast.{0} Int instNatCastInt n)) (Nat.cast.{0} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : Int) => Int) (Nat.cast.{0} Int instNatCastInt n)) instNatCastInt n)
+Case conversion may be inaccurate. Consider using '#align int.normalize_coe_nat Int.normalize_coe_natₓ'. -/
theorem normalize_coe_nat (n : ℕ) : normalize (n : ℤ) = n :=
normalize_of_nonneg (ofNat_le_ofNat_of_le <| Nat.zero_le n)
#align int.normalize_coe_nat Int.normalize_coe_nat
+/- warning: int.abs_eq_normalize -> Int.abs_eq_normalize is a dubious translation:
+lean 3 declaration is
+ forall (z : Int), Eq.{1} Int (Abs.abs.{0} Int (Neg.toHasAbs.{0} Int Int.hasNeg (SemilatticeSup.toHasSup.{0} Int (Lattice.toSemilatticeSup.{0} Int (LinearOrder.toLattice.{0} Int Int.linearOrder)))) z) (coeFn.{1, 1} (MonoidWithZeroHom.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.commSemiring (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.commSemiring (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) (fun (_x : MonoidWithZeroHom.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.commSemiring (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.commSemiring (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) => Int -> Int) (MonoidWithZeroHom.hasCoeToFun.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.commSemiring (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.commSemiring (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) (normalize.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.commSemiring (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))) Int.normalizationMonoid) z)
+but is expected to have type
+ forall (z : Int), Eq.{1} Int (Abs.abs.{0} Int (Neg.toHasAbs.{0} Int Int.instNegInt (SemilatticeSup.toSup.{0} Int (Lattice.toSemilatticeSup.{0} Int (DistribLattice.toLattice.{0} Int (instDistribLattice.{0} Int Int.instLinearOrderInt))))) z) (FunLike.coe.{1, 1, 1} (MonoidWithZeroHom.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) Int (fun (_x : Int) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : Int) => Int) _x) (MulHomClass.toFunLike.{0, 0, 0} (MonoidWithZeroHom.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) Int Int (MulOneClass.toMul.{0} Int (MulZeroOneClass.toMulOneClass.{0} Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))))) (MulOneClass.toMul.{0} Int (MulZeroOneClass.toMulOneClass.{0} Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))))) (MonoidHomClass.toMulHomClass.{0, 0, 0} (MonoidWithZeroHom.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) Int Int (MulZeroOneClass.toMulOneClass.{0} Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) (MulZeroOneClass.toMulOneClass.{0} Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) (MonoidWithZeroHomClass.toMonoidHomClass.{0, 0, 0} (MonoidWithZeroHom.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZeroHom.monoidWithZeroHomClass.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))))))) (normalize.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))) Int.normalizationMonoid) z)
+Case conversion may be inaccurate. Consider using '#align int.abs_eq_normalize Int.abs_eq_normalizeₓ'. -/
theorem abs_eq_normalize (z : ℤ) : |z| = normalize z := by
cases le_total 0 z <;> simp [normalize_of_nonneg, normalize_of_nonpos, *]
#align int.abs_eq_normalize Int.abs_eq_normalize
+/- warning: int.nonneg_of_normalize_eq_self -> Int.nonneg_of_normalize_eq_self is a dubious translation:
+lean 3 declaration is
+ forall {z : Int}, (Eq.{1} Int (coeFn.{1, 1} (MonoidWithZeroHom.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.commSemiring (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.commSemiring (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) (fun (_x : MonoidWithZeroHom.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.commSemiring (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.commSemiring (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) => Int -> Int) (MonoidWithZeroHom.hasCoeToFun.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.commSemiring (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.commSemiring (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) (normalize.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.commSemiring (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))) Int.normalizationMonoid) z) z) -> (LE.le.{0} Int Int.hasLe (OfNat.ofNat.{0} Int 0 (OfNat.mk.{0} Int 0 (Zero.zero.{0} Int Int.hasZero))) z)
+but is expected to have type
+ forall {z : Int}, (Eq.{1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : Int) => Int) z) (FunLike.coe.{1, 1, 1} (MonoidWithZeroHom.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) Int (fun (_x : Int) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : Int) => Int) _x) (MulHomClass.toFunLike.{0, 0, 0} (MonoidWithZeroHom.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) Int Int (MulOneClass.toMul.{0} Int (MulZeroOneClass.toMulOneClass.{0} Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))))) (MulOneClass.toMul.{0} Int (MulZeroOneClass.toMulOneClass.{0} Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))))) (MonoidHomClass.toMulHomClass.{0, 0, 0} (MonoidWithZeroHom.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) Int Int (MulZeroOneClass.toMulOneClass.{0} Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) (MulZeroOneClass.toMulOneClass.{0} Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) (MonoidWithZeroHomClass.toMonoidHomClass.{0, 0, 0} (MonoidWithZeroHom.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZeroHom.monoidWithZeroHomClass.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))))))) (normalize.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))) Int.normalizationMonoid) z) z) -> (LE.le.{0} Int Int.instLEInt (OfNat.ofNat.{0} Int 0 (instOfNatInt 0)) z)
+Case conversion may be inaccurate. Consider using '#align int.nonneg_of_normalize_eq_self Int.nonneg_of_normalize_eq_selfₓ'. -/
theorem nonneg_of_normalize_eq_self {z : ℤ} (hz : normalize z = z) : 0 ≤ z :=
abs_eq_self.1 <| by rw [abs_eq_normalize, hz]
#align int.nonneg_of_normalize_eq_self Int.nonneg_of_normalize_eq_self
+/- warning: int.nonneg_iff_normalize_eq_self -> Int.nonneg_iff_normalize_eq_self is a dubious translation:
+lean 3 declaration is
+ forall (z : Int), Iff (Eq.{1} Int (coeFn.{1, 1} (MonoidWithZeroHom.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.commSemiring (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.commSemiring (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) (fun (_x : MonoidWithZeroHom.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.commSemiring (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.commSemiring (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) => Int -> Int) (MonoidWithZeroHom.hasCoeToFun.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.commSemiring (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.commSemiring (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) (normalize.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.commSemiring (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))) Int.normalizationMonoid) z) z) (LE.le.{0} Int Int.hasLe (OfNat.ofNat.{0} Int 0 (OfNat.mk.{0} Int 0 (Zero.zero.{0} Int Int.hasZero))) z)
+but is expected to have type
+ forall (z : Int), Iff (Eq.{1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : Int) => Int) z) (FunLike.coe.{1, 1, 1} (MonoidWithZeroHom.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) Int (fun (_x : Int) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : Int) => Int) _x) (MulHomClass.toFunLike.{0, 0, 0} (MonoidWithZeroHom.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) Int Int (MulOneClass.toMul.{0} Int (MulZeroOneClass.toMulOneClass.{0} Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))))) (MulOneClass.toMul.{0} Int (MulZeroOneClass.toMulOneClass.{0} Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))))) (MonoidHomClass.toMulHomClass.{0, 0, 0} (MonoidWithZeroHom.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) Int Int (MulZeroOneClass.toMulOneClass.{0} Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) (MulZeroOneClass.toMulOneClass.{0} Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) (MonoidWithZeroHomClass.toMonoidHomClass.{0, 0, 0} (MonoidWithZeroHom.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))))))) Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZeroHom.monoidWithZeroHomClass.{0, 0} Int Int (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))) (MonoidWithZero.toMulZeroOneClass.{0} Int (CommMonoidWithZero.toMonoidWithZero.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))))))))) (normalize.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing))) Int.normalizationMonoid) z) z) (LE.le.{0} Int Int.instLEInt (OfNat.ofNat.{0} Int 0 (instOfNatInt 0)) z)
+Case conversion may be inaccurate. Consider using '#align int.nonneg_iff_normalize_eq_self Int.nonneg_iff_normalize_eq_selfₓ'. -/
theorem nonneg_iff_normalize_eq_self (z : ℤ) : normalize z = z ↔ 0 ≤ z :=
⟨nonneg_of_normalize_eq_self, normalize_of_nonneg⟩
#align int.nonneg_iff_normalize_eq_self Int.nonneg_iff_normalize_eq_self
+/- warning: int.eq_of_associated_of_nonneg -> Int.eq_of_associated_of_nonneg is a dubious translation:
+lean 3 declaration is
+ forall {a : Int} {b : Int}, (Associated.{0} Int Int.monoid a b) -> (LE.le.{0} Int Int.hasLe (OfNat.ofNat.{0} Int 0 (OfNat.mk.{0} Int 0 (Zero.zero.{0} Int Int.hasZero))) a) -> (LE.le.{0} Int Int.hasLe (OfNat.ofNat.{0} Int 0 (OfNat.mk.{0} Int 0 (Zero.zero.{0} Int Int.hasZero))) b) -> (Eq.{1} Int a b)
+but is expected to have type
+ forall {a : Int} {b : Int}, (Associated.{0} Int Int.instMonoidInt a b) -> (LE.le.{0} Int Int.instLEInt (OfNat.ofNat.{0} Int 0 (instOfNatInt 0)) a) -> (LE.le.{0} Int Int.instLEInt (OfNat.ofNat.{0} Int 0 (instOfNatInt 0)) b) -> (Eq.{1} Int a b)
+Case conversion may be inaccurate. Consider using '#align int.eq_of_associated_of_nonneg Int.eq_of_associated_of_nonnegₓ'. -/
theorem eq_of_associated_of_nonneg {a b : ℤ} (h : Associated a b) (ha : 0 ≤ a) (hb : 0 ≤ b) :
a = b :=
dvd_antisymm_of_normalize_eq (normalize_of_nonneg ha) (normalize_of_nonneg hb) h.Dvd h.symm.Dvd
@@ -158,24 +212,38 @@ instance : NormalizedGCDMonoid ℤ :=
normalize_gcd := fun a b => normalize_coe_nat _
normalize_lcm := fun a b => normalize_coe_nat _ }
+#print Int.coe_gcd /-
theorem coe_gcd (i j : ℤ) : ↑(Int.gcd i j) = GCDMonoid.gcd i j :=
rfl
#align int.coe_gcd Int.coe_gcd
+-/
+#print Int.coe_lcm /-
theorem coe_lcm (i j : ℤ) : ↑(Int.lcm i j) = GCDMonoid.lcm i j :=
rfl
#align int.coe_lcm Int.coe_lcm
+-/
+#print Int.natAbs_gcd /-
theorem natAbs_gcd (i j : ℤ) : natAbs (GCDMonoid.gcd i j) = Int.gcd i j :=
rfl
#align int.nat_abs_gcd Int.natAbs_gcd
+-/
+#print Int.natAbs_lcm /-
theorem natAbs_lcm (i j : ℤ) : natAbs (GCDMonoid.lcm i j) = Int.lcm i j :=
rfl
#align int.nat_abs_lcm Int.natAbs_lcm
+-/
end GCDMonoid
+/- warning: int.exists_unit_of_abs -> Int.exists_unit_of_abs is a dubious translation:
+lean 3 declaration is
+ forall (a : Int), Exists.{1} Int (fun (u : Int) => Exists.{0} (IsUnit.{0} Int Int.monoid u) (fun (h : IsUnit.{0} Int Int.monoid u) => Eq.{1} Int ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Nat Int (HasLiftT.mk.{1, 1} Nat Int (CoeTCₓ.coe.{1, 1} Nat Int (coeBase.{1, 1} Nat Int Int.hasCoe))) (Int.natAbs a)) (HMul.hMul.{0, 0, 0} Int Int Int (instHMul.{0} Int Int.hasMul) u a)))
+but is expected to have type
+ forall (a : Int), Exists.{1} Int (fun (u : Int) => Exists.{0} (IsUnit.{0} Int Int.instMonoidInt u) (fun (h : IsUnit.{0} Int Int.instMonoidInt u) => Eq.{1} Int (Nat.cast.{0} Int instNatCastInt (Int.natAbs a)) (HMul.hMul.{0, 0, 0} Int Int Int (instHMul.{0} Int Int.instMulInt) u a)))
+Case conversion may be inaccurate. Consider using '#align int.exists_unit_of_abs Int.exists_unit_of_absₓ'. -/
theorem exists_unit_of_abs (a : ℤ) : ∃ (u : ℤ)(h : IsUnit u), (Int.natAbs a : ℤ) = u * a :=
by
cases' nat_abs_eq a with h
@@ -186,10 +254,18 @@ theorem exists_unit_of_abs (a : ℤ) : ∃ (u : ℤ)(h : IsUnit u), (Int.natAbs
simp only [neg_mul, one_mul]
#align int.exists_unit_of_abs Int.exists_unit_of_abs
+#print Int.gcd_eq_natAbs /-
theorem gcd_eq_natAbs {a b : ℤ} : Int.gcd a b = Nat.gcd a.natAbs b.natAbs :=
rfl
#align int.gcd_eq_nat_abs Int.gcd_eq_natAbs
+-/
+/- warning: int.gcd_eq_one_iff_coprime -> Int.gcd_eq_one_iff_coprime is a dubious translation:
+lean 3 declaration is
+ forall {a : Int} {b : Int}, Iff (Eq.{1} Nat (Int.gcd a b) (OfNat.ofNat.{0} Nat 1 (OfNat.mk.{0} Nat 1 (One.one.{0} Nat Nat.hasOne)))) (IsCoprime.{0} Int Int.commSemiring a b)
+but is expected to have type
+ forall {a : Int} {b : Int}, Iff (Eq.{1} Nat (Int.gcd a b) (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1))) (IsCoprime.{0} Int Int.instCommSemiringInt a b)
+Case conversion may be inaccurate. Consider using '#align int.gcd_eq_one_iff_coprime Int.gcd_eq_one_iff_coprimeₓ'. -/
theorem gcd_eq_one_iff_coprime {a b : ℤ} : Int.gcd a b = 1 ↔ IsCoprime a b :=
by
constructor
@@ -207,28 +283,46 @@ theorem gcd_eq_one_iff_coprime {a b : ℤ} : Int.gcd a b = 1 ↔ IsCoprime a b :
exact dvd_add ((coe_nat_dvd_left.mpr ha).mul_left _) ((coe_nat_dvd_left.mpr hb).mul_left _)
#align int.gcd_eq_one_iff_coprime Int.gcd_eq_one_iff_coprime
+/- warning: int.coprime_iff_nat_coprime -> Int.coprime_iff_nat_coprime is a dubious translation:
+lean 3 declaration is
+ forall {a : Int} {b : Int}, Iff (IsCoprime.{0} Int Int.commSemiring a b) (Nat.coprime (Int.natAbs a) (Int.natAbs b))
+but is expected to have type
+ forall {a : Int} {b : Int}, Iff (IsCoprime.{0} Int Int.instCommSemiringInt a b) (Nat.coprime (Int.natAbs a) (Int.natAbs b))
+Case conversion may be inaccurate. Consider using '#align int.coprime_iff_nat_coprime Int.coprime_iff_nat_coprimeₓ'. -/
theorem coprime_iff_nat_coprime {a b : ℤ} : IsCoprime a b ↔ Nat.coprime a.natAbs b.natAbs := by
rw [← gcd_eq_one_iff_coprime, Nat.coprime_iff_gcd_eq_one, gcd_eq_nat_abs]
#align int.coprime_iff_nat_coprime Int.coprime_iff_nat_coprime
+#print Int.gcd_ne_one_iff_gcd_mul_right_ne_one /-
/-- If `gcd a (m * n) ≠ 1`, then `gcd a m ≠ 1` or `gcd a n ≠ 1`. -/
theorem gcd_ne_one_iff_gcd_mul_right_ne_one {a : ℤ} {m n : ℕ} :
a.gcd (m * n) ≠ 1 ↔ a.gcd m ≠ 1 ∨ a.gcd n ≠ 1 := by
simp only [gcd_eq_one_iff_coprime, ← not_and_or, not_iff_not, IsCoprime.mul_right_iff]
#align int.gcd_ne_one_iff_gcd_mul_right_ne_one Int.gcd_ne_one_iff_gcd_mul_right_ne_one
+-/
+#print Int.gcd_eq_one_of_gcd_mul_right_eq_one_left /-
/-- If `gcd a (m * n) = 1`, then `gcd a m = 1`. -/
theorem gcd_eq_one_of_gcd_mul_right_eq_one_left {a : ℤ} {m n : ℕ} (h : a.gcd (m * n) = 1) :
a.gcd m = 1 :=
Nat.dvd_one.mp <| trans_rel_left _ (gcd_dvd_gcd_mul_right_right a m n) h
#align int.gcd_eq_one_of_gcd_mul_right_eq_one_left Int.gcd_eq_one_of_gcd_mul_right_eq_one_left
+-/
+#print Int.gcd_eq_one_of_gcd_mul_right_eq_one_right /-
/-- If `gcd a (m * n) = 1`, then `gcd a n = 1`. -/
theorem gcd_eq_one_of_gcd_mul_right_eq_one_right {a : ℤ} {m n : ℕ} (h : a.gcd (m * n) = 1) :
a.gcd n = 1 :=
Nat.dvd_one.mp <| trans_rel_left _ (gcd_dvd_gcd_mul_left_right a n m) h
#align int.gcd_eq_one_of_gcd_mul_right_eq_one_right Int.gcd_eq_one_of_gcd_mul_right_eq_one_right
+-/
+/- warning: int.sq_of_gcd_eq_one -> Int.sq_of_gcd_eq_one is a dubious translation:
+lean 3 declaration is
+ forall {a : Int} {b : Int} {c : Int}, (Eq.{1} Nat (Int.gcd a b) (OfNat.ofNat.{0} Nat 1 (OfNat.mk.{0} Nat 1 (One.one.{0} Nat Nat.hasOne)))) -> (Eq.{1} Int (HMul.hMul.{0, 0, 0} Int Int Int (instHMul.{0} Int Int.hasMul) a b) (HPow.hPow.{0, 0, 0} Int Nat Int (instHPow.{0, 0} Int Nat (Monoid.Pow.{0} Int Int.monoid)) c (OfNat.ofNat.{0} Nat 2 (OfNat.mk.{0} Nat 2 (bit0.{0} Nat Nat.hasAdd (One.one.{0} Nat Nat.hasOne)))))) -> (Exists.{1} Int (fun (a0 : Int) => Or (Eq.{1} Int a (HPow.hPow.{0, 0, 0} Int Nat Int (instHPow.{0, 0} Int Nat (Monoid.Pow.{0} Int Int.monoid)) a0 (OfNat.ofNat.{0} Nat 2 (OfNat.mk.{0} Nat 2 (bit0.{0} Nat Nat.hasAdd (One.one.{0} Nat Nat.hasOne)))))) (Eq.{1} Int a (Neg.neg.{0} Int Int.hasNeg (HPow.hPow.{0, 0, 0} Int Nat Int (instHPow.{0, 0} Int Nat (Monoid.Pow.{0} Int Int.monoid)) a0 (OfNat.ofNat.{0} Nat 2 (OfNat.mk.{0} Nat 2 (bit0.{0} Nat Nat.hasAdd (One.one.{0} Nat Nat.hasOne)))))))))
+but is expected to have type
+ forall {a : Int} {b : Int} {c : Int}, (Eq.{1} Nat (Int.gcd a b) (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1))) -> (Eq.{1} Int (HMul.hMul.{0, 0, 0} Int Int Int (instHMul.{0} Int Int.instMulInt) a b) (HPow.hPow.{0, 0, 0} Int Nat Int (instHPow.{0, 0} Int Nat (Monoid.Pow.{0} Int Int.instMonoidInt)) c (OfNat.ofNat.{0} Nat 2 (instOfNatNat 2)))) -> (Exists.{1} Int (fun (a0 : Int) => Or (Eq.{1} Int a (HPow.hPow.{0, 0, 0} Int Nat Int (instHPow.{0, 0} Int Nat (Monoid.Pow.{0} Int Int.instMonoidInt)) a0 (OfNat.ofNat.{0} Nat 2 (instOfNatNat 2)))) (Eq.{1} Int a (Neg.neg.{0} Int Int.instNegInt (HPow.hPow.{0, 0, 0} Int Nat Int (instHPow.{0, 0} Int Nat (Monoid.Pow.{0} Int Int.instMonoidInt)) a0 (OfNat.ofNat.{0} Nat 2 (instOfNatNat 2)))))))
+Case conversion may be inaccurate. Consider using '#align int.sq_of_gcd_eq_one Int.sq_of_gcd_eq_oneₓ'. -/
theorem sq_of_gcd_eq_one {a b c : ℤ} (h : Int.gcd a b = 1) (heq : a * b = c ^ 2) :
∃ a0 : ℤ, a = a0 ^ 2 ∨ a = -a0 ^ 2 :=
by
@@ -244,11 +338,23 @@ theorem sq_of_gcd_eq_one {a b c : ℤ} (h : Int.gcd a b = 1) (heq : a * b = c ^
simp
#align int.sq_of_gcd_eq_one Int.sq_of_gcd_eq_one
+/- warning: int.sq_of_coprime -> Int.sq_of_coprime is a dubious translation:
+lean 3 declaration is
+ forall {a : Int} {b : Int} {c : Int}, (IsCoprime.{0} Int Int.commSemiring a b) -> (Eq.{1} Int (HMul.hMul.{0, 0, 0} Int Int Int (instHMul.{0} Int Int.hasMul) a b) (HPow.hPow.{0, 0, 0} Int Nat Int (instHPow.{0, 0} Int Nat (Monoid.Pow.{0} Int Int.monoid)) c (OfNat.ofNat.{0} Nat 2 (OfNat.mk.{0} Nat 2 (bit0.{0} Nat Nat.hasAdd (One.one.{0} Nat Nat.hasOne)))))) -> (Exists.{1} Int (fun (a0 : Int) => Or (Eq.{1} Int a (HPow.hPow.{0, 0, 0} Int Nat Int (instHPow.{0, 0} Int Nat (Monoid.Pow.{0} Int Int.monoid)) a0 (OfNat.ofNat.{0} Nat 2 (OfNat.mk.{0} Nat 2 (bit0.{0} Nat Nat.hasAdd (One.one.{0} Nat Nat.hasOne)))))) (Eq.{1} Int a (Neg.neg.{0} Int Int.hasNeg (HPow.hPow.{0, 0, 0} Int Nat Int (instHPow.{0, 0} Int Nat (Monoid.Pow.{0} Int Int.monoid)) a0 (OfNat.ofNat.{0} Nat 2 (OfNat.mk.{0} Nat 2 (bit0.{0} Nat Nat.hasAdd (One.one.{0} Nat Nat.hasOne)))))))))
+but is expected to have type
+ forall {a : Int} {b : Int} {c : Int}, (IsCoprime.{0} Int Int.instCommSemiringInt a b) -> (Eq.{1} Int (HMul.hMul.{0, 0, 0} Int Int Int (instHMul.{0} Int Int.instMulInt) a b) (HPow.hPow.{0, 0, 0} Int Nat Int (instHPow.{0, 0} Int Nat (Monoid.Pow.{0} Int Int.instMonoidInt)) c (OfNat.ofNat.{0} Nat 2 (instOfNatNat 2)))) -> (Exists.{1} Int (fun (a0 : Int) => Or (Eq.{1} Int a (HPow.hPow.{0, 0, 0} Int Nat Int (instHPow.{0, 0} Int Nat (Monoid.Pow.{0} Int Int.instMonoidInt)) a0 (OfNat.ofNat.{0} Nat 2 (instOfNatNat 2)))) (Eq.{1} Int a (Neg.neg.{0} Int Int.instNegInt (HPow.hPow.{0, 0, 0} Int Nat Int (instHPow.{0, 0} Int Nat (Monoid.Pow.{0} Int Int.instMonoidInt)) a0 (OfNat.ofNat.{0} Nat 2 (instOfNatNat 2)))))))
+Case conversion may be inaccurate. Consider using '#align int.sq_of_coprime Int.sq_of_coprimeₓ'. -/
theorem sq_of_coprime {a b c : ℤ} (h : IsCoprime a b) (heq : a * b = c ^ 2) :
∃ a0 : ℤ, a = a0 ^ 2 ∨ a = -a0 ^ 2 :=
sq_of_gcd_eq_one (gcd_eq_one_iff_coprime.mpr h) HEq
#align int.sq_of_coprime Int.sq_of_coprime
+/- warning: int.nat_abs_euclidean_domain_gcd -> Int.natAbs_euclideanDomain_gcd is a dubious translation:
+lean 3 declaration is
+ forall (a : Int) (b : Int), Eq.{1} Nat (Int.natAbs (EuclideanDomain.gcd.{0} Int Int.euclideanDomain (fun (a : Int) (b : Int) => Int.decidableEq a b) a b)) (Int.gcd a b)
+but is expected to have type
+ forall (a : Int) (b : Int), Eq.{1} Nat (Int.natAbs (EuclideanDomain.gcd.{0} ([mdata borrowed:1 Int]) Int.euclideanDomain (fun (a : [mdata borrowed:1 Int]) (b : [mdata borrowed:1 Int]) => Int.instDecidableEqInt a b) a b)) (Int.gcd a b)
+Case conversion may be inaccurate. Consider using '#align int.nat_abs_euclidean_domain_gcd Int.natAbs_euclideanDomain_gcdₓ'. -/
theorem natAbs_euclideanDomain_gcd (a b : ℤ) : Int.natAbs (EuclideanDomain.gcd a b) = Int.gcd a b :=
by
apply Nat.dvd_antisymm <;> rw [← Int.coe_nat_dvd]
@@ -260,6 +366,12 @@ theorem natAbs_euclideanDomain_gcd (a b : ℤ) : Int.natAbs (EuclideanDomain.gcd
end Int
+/- warning: associates_int_equiv_nat -> associatesIntEquivNat is a dubious translation:
+lean 3 declaration is
+ Equiv.{1, 1} (Associates.{0} Int Int.monoid) Nat
+but is expected to have type
+ Equiv.{1, 1} (Associates.{0} Int Int.instMonoidInt) Nat
+Case conversion may be inaccurate. Consider using '#align associates_int_equiv_nat associatesIntEquivNatₓ'. -/
/-- Maps an associate class of integers consisting of `-n, n` to `n : ℕ` -/
def associatesIntEquivNat : Associates ℤ ≃ ℕ :=
by
@@ -274,6 +386,12 @@ def associatesIntEquivNat : Associates ℤ ≃ ℕ :=
rw [← normalize_apply, ← Int.abs_eq_normalize, Int.natAbs_abs, Int.natAbs_ofNat]
#align associates_int_equiv_nat associatesIntEquivNat
+/- warning: int.prime.dvd_mul -> Int.Prime.dvd_mul is a dubious translation:
+lean 3 declaration is
+ forall {m : Int} {n : Int} {p : Nat}, (Nat.Prime p) -> (Dvd.Dvd.{0} Int (semigroupDvd.{0} Int Int.semigroup) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Nat Int (HasLiftT.mk.{1, 1} Nat Int (CoeTCₓ.coe.{1, 1} Nat Int (coeBase.{1, 1} Nat Int Int.hasCoe))) p) (HMul.hMul.{0, 0, 0} Int Int Int (instHMul.{0} Int Int.hasMul) m n)) -> (Or (Dvd.Dvd.{0} Nat Nat.hasDvd p (Int.natAbs m)) (Dvd.Dvd.{0} Nat Nat.hasDvd p (Int.natAbs n)))
+but is expected to have type
+ forall {m : Int} {n : Int} {p : Nat}, (Nat.Prime p) -> (Dvd.dvd.{0} Int Int.instDvdInt (Nat.cast.{0} Int instNatCastInt p) (HMul.hMul.{0, 0, 0} Int Int Int (instHMul.{0} Int Int.instMulInt) m n)) -> (Or (Dvd.dvd.{0} Nat Nat.instDvdNat p (Int.natAbs m)) (Dvd.dvd.{0} Nat Nat.instDvdNat p (Int.natAbs n)))
+Case conversion may be inaccurate. Consider using '#align int.prime.dvd_mul Int.Prime.dvd_mulₓ'. -/
theorem Int.Prime.dvd_mul {m n : ℤ} {p : ℕ} (hp : Nat.Prime p) (h : (p : ℤ) ∣ m * n) :
p ∣ m.natAbs ∨ p ∣ n.natAbs :=
by
@@ -282,6 +400,12 @@ theorem Int.Prime.dvd_mul {m n : ℤ} {p : ℕ} (hp : Nat.Prime p) (h : (p : ℤ
exact int.coe_nat_dvd_left.mp h
#align int.prime.dvd_mul Int.Prime.dvd_mul
+/- warning: int.prime.dvd_mul' -> Int.Prime.dvd_mul' is a dubious translation:
+lean 3 declaration is
+ forall {m : Int} {n : Int} {p : Nat}, (Nat.Prime p) -> (Dvd.Dvd.{0} Int (semigroupDvd.{0} Int Int.semigroup) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Nat Int (HasLiftT.mk.{1, 1} Nat Int (CoeTCₓ.coe.{1, 1} Nat Int (coeBase.{1, 1} Nat Int Int.hasCoe))) p) (HMul.hMul.{0, 0, 0} Int Int Int (instHMul.{0} Int Int.hasMul) m n)) -> (Or (Dvd.Dvd.{0} Int (semigroupDvd.{0} Int Int.semigroup) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Nat Int (HasLiftT.mk.{1, 1} Nat Int (CoeTCₓ.coe.{1, 1} Nat Int (coeBase.{1, 1} Nat Int Int.hasCoe))) p) m) (Dvd.Dvd.{0} Int (semigroupDvd.{0} Int Int.semigroup) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Nat Int (HasLiftT.mk.{1, 1} Nat Int (CoeTCₓ.coe.{1, 1} Nat Int (coeBase.{1, 1} Nat Int Int.hasCoe))) p) n))
+but is expected to have type
+ forall {m : Int} {n : Int} {p : Nat}, (Nat.Prime p) -> (Dvd.dvd.{0} Int Int.instDvdInt (Nat.cast.{0} Int instNatCastInt p) (HMul.hMul.{0, 0, 0} Int Int Int (instHMul.{0} Int Int.instMulInt) m n)) -> (Or (Dvd.dvd.{0} Int Int.instDvdInt (Nat.cast.{0} Int instNatCastInt p) m) (Dvd.dvd.{0} Int Int.instDvdInt (Nat.cast.{0} Int instNatCastInt p) n))
+Case conversion may be inaccurate. Consider using '#align int.prime.dvd_mul' Int.Prime.dvd_mul'ₓ'. -/
theorem Int.Prime.dvd_mul' {m n : ℤ} {p : ℕ} (hp : Nat.Prime p) (h : (p : ℤ) ∣ m * n) :
(p : ℤ) ∣ m ∨ (p : ℤ) ∣ n :=
by
@@ -289,6 +413,12 @@ theorem Int.Prime.dvd_mul' {m n : ℤ} {p : ℕ} (hp : Nat.Prime p) (h : (p :
exact Int.Prime.dvd_mul hp h
#align int.prime.dvd_mul' Int.Prime.dvd_mul'
+/- warning: int.prime.dvd_pow -> Int.Prime.dvd_pow is a dubious translation:
+lean 3 declaration is
+ forall {n : Int} {k : Nat} {p : Nat}, (Nat.Prime p) -> (Dvd.Dvd.{0} Int (semigroupDvd.{0} Int Int.semigroup) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Nat Int (HasLiftT.mk.{1, 1} Nat Int (CoeTCₓ.coe.{1, 1} Nat Int (coeBase.{1, 1} Nat Int Int.hasCoe))) p) (HPow.hPow.{0, 0, 0} Int Nat Int (instHPow.{0, 0} Int Nat (Monoid.Pow.{0} Int Int.monoid)) n k)) -> (Dvd.Dvd.{0} Nat Nat.hasDvd p (Int.natAbs n))
+but is expected to have type
+ forall {n : Int} {k : Nat} {p : Nat}, (Nat.Prime p) -> (Dvd.dvd.{0} Int Int.instDvdInt (Nat.cast.{0} Int instNatCastInt p) (HPow.hPow.{0, 0, 0} Int Nat Int Int.instHPowIntNat n k)) -> (Dvd.dvd.{0} Nat Nat.instDvdNat p (Int.natAbs n))
+Case conversion may be inaccurate. Consider using '#align int.prime.dvd_pow Int.Prime.dvd_powₓ'. -/
theorem Int.Prime.dvd_pow {n : ℤ} {k p : ℕ} (hp : Nat.Prime p) (h : (p : ℤ) ∣ n ^ k) :
p ∣ n.natAbs := by
apply @Nat.Prime.dvd_of_dvd_pow _ _ k hp
@@ -296,12 +426,24 @@ theorem Int.Prime.dvd_pow {n : ℤ} {k p : ℕ} (hp : Nat.Prime p) (h : (p : ℤ
exact int.coe_nat_dvd_left.mp h
#align int.prime.dvd_pow Int.Prime.dvd_pow
+/- warning: int.prime.dvd_pow' -> Int.Prime.dvd_pow' is a dubious translation:
+lean 3 declaration is
+ forall {n : Int} {k : Nat} {p : Nat}, (Nat.Prime p) -> (Dvd.Dvd.{0} Int (semigroupDvd.{0} Int Int.semigroup) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Nat Int (HasLiftT.mk.{1, 1} Nat Int (CoeTCₓ.coe.{1, 1} Nat Int (coeBase.{1, 1} Nat Int Int.hasCoe))) p) (HPow.hPow.{0, 0, 0} Int Nat Int (instHPow.{0, 0} Int Nat (Monoid.Pow.{0} Int Int.monoid)) n k)) -> (Dvd.Dvd.{0} Int (semigroupDvd.{0} Int Int.semigroup) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Nat Int (HasLiftT.mk.{1, 1} Nat Int (CoeTCₓ.coe.{1, 1} Nat Int (coeBase.{1, 1} Nat Int Int.hasCoe))) p) n)
+but is expected to have type
+ forall {n : Int} {k : Nat} {p : Nat}, (Nat.Prime p) -> (Dvd.dvd.{0} Int Int.instDvdInt (Nat.cast.{0} Int instNatCastInt p) (HPow.hPow.{0, 0, 0} Int Nat Int Int.instHPowIntNat n k)) -> (Dvd.dvd.{0} Int Int.instDvdInt (Nat.cast.{0} Int instNatCastInt p) n)
+Case conversion may be inaccurate. Consider using '#align int.prime.dvd_pow' Int.Prime.dvd_pow'ₓ'. -/
theorem Int.Prime.dvd_pow' {n : ℤ} {k p : ℕ} (hp : Nat.Prime p) (h : (p : ℤ) ∣ n ^ k) :
(p : ℤ) ∣ n := by
rw [Int.coe_nat_dvd_left]
exact Int.Prime.dvd_pow hp h
#align int.prime.dvd_pow' Int.Prime.dvd_pow'
+/- warning: prime_two_or_dvd_of_dvd_two_mul_pow_self_two -> prime_two_or_dvd_of_dvd_two_mul_pow_self_two is a dubious translation:
+lean 3 declaration is
+ forall {m : Int} {p : Nat}, (Nat.Prime p) -> (Dvd.Dvd.{0} Int (semigroupDvd.{0} Int Int.semigroup) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Nat Int (HasLiftT.mk.{1, 1} Nat Int (CoeTCₓ.coe.{1, 1} Nat Int (coeBase.{1, 1} Nat Int Int.hasCoe))) p) (HMul.hMul.{0, 0, 0} Int Int Int (instHMul.{0} Int Int.hasMul) (OfNat.ofNat.{0} Int 2 (OfNat.mk.{0} Int 2 (bit0.{0} Int Int.hasAdd (One.one.{0} Int Int.hasOne)))) (HPow.hPow.{0, 0, 0} Int Nat Int (instHPow.{0, 0} Int Nat (Monoid.Pow.{0} Int Int.monoid)) m (OfNat.ofNat.{0} Nat 2 (OfNat.mk.{0} Nat 2 (bit0.{0} Nat Nat.hasAdd (One.one.{0} Nat Nat.hasOne))))))) -> (Or (Eq.{1} Nat p (OfNat.ofNat.{0} Nat 2 (OfNat.mk.{0} Nat 2 (bit0.{0} Nat Nat.hasAdd (One.one.{0} Nat Nat.hasOne))))) (Dvd.Dvd.{0} Nat Nat.hasDvd p (Int.natAbs m)))
+but is expected to have type
+ forall {m : Int} {p : Nat}, (Nat.Prime p) -> (Dvd.dvd.{0} Int Int.instDvdInt (Nat.cast.{0} Int instNatCastInt p) (HMul.hMul.{0, 0, 0} Int Int Int (instHMul.{0} Int Int.instMulInt) (OfNat.ofNat.{0} Int 2 (instOfNatInt 2)) (HPow.hPow.{0, 0, 0} Int Nat Int (instHPow.{0, 0} Int Nat (Monoid.Pow.{0} Int Int.instMonoidInt)) m (OfNat.ofNat.{0} Nat 2 (instOfNatNat 2))))) -> (Or (Eq.{1} Nat p (OfNat.ofNat.{0} Nat 2 (instOfNatNat 2))) (Dvd.dvd.{0} Nat Nat.instDvdNat p (Int.natAbs m)))
+Case conversion may be inaccurate. Consider using '#align prime_two_or_dvd_of_dvd_two_mul_pow_self_two prime_two_or_dvd_of_dvd_two_mul_pow_self_twoₓ'. -/
theorem prime_two_or_dvd_of_dvd_two_mul_pow_self_two {m : ℤ} {p : ℕ} (hp : Nat.Prime p)
(h : (p : ℤ) ∣ 2 * m ^ 2) : p = 2 ∨ p ∣ Int.natAbs m :=
by
@@ -313,6 +455,12 @@ theorem prime_two_or_dvd_of_dvd_two_mul_pow_self_two {m : ℤ} {p : ℕ} (hp : N
exact (or_self_iff _).mp ((Nat.Prime.dvd_mul hp).mp hpp)
#align prime_two_or_dvd_of_dvd_two_mul_pow_self_two prime_two_or_dvd_of_dvd_two_mul_pow_self_two
+/- warning: int.exists_prime_and_dvd -> Int.exists_prime_and_dvd is a dubious translation:
+lean 3 declaration is
+ forall {n : Int}, (Ne.{1} Nat (Int.natAbs n) (OfNat.ofNat.{0} Nat 1 (OfNat.mk.{0} Nat 1 (One.one.{0} Nat Nat.hasOne)))) -> (Exists.{1} Int (fun (p : Int) => And (Prime.{0} Int (CommSemiring.toCommMonoidWithZero.{0} Int Int.commSemiring) p) (Dvd.Dvd.{0} Int (semigroupDvd.{0} Int Int.semigroup) p n)))
+but is expected to have type
+ forall {n : Int}, (Ne.{1} Nat (Int.natAbs n) (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1))) -> (Exists.{1} Int (fun (p : Int) => And (Prime.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))) p) (Dvd.dvd.{0} Int Int.instDvdInt p n)))
+Case conversion may be inaccurate. Consider using '#align int.exists_prime_and_dvd Int.exists_prime_and_dvdₓ'. -/
theorem Int.exists_prime_and_dvd {n : ℤ} (hn : n.natAbs ≠ 1) : ∃ p, Prime p ∧ p ∣ n :=
by
obtain ⟨p, pp, pd⟩ := Nat.exists_prime_and_dvd hn
@@ -321,6 +469,12 @@ theorem Int.exists_prime_and_dvd {n : ℤ} (hn : n.natAbs ≠ 1) : ∃ p, Prime
open UniqueFactorizationMonoid
+/- warning: nat.factors_eq -> Nat.factors_eq is a dubious translation:
+lean 3 declaration is
+ forall {n : Nat}, Eq.{1} (Multiset.{0} Nat) (UniqueFactorizationMonoid.normalizedFactors.{0} Nat Nat.cancelCommMonoidWithZero (fun (a : Nat) (b : Nat) => Nat.decidableEq a b) (normalizationMonoidOfUniqueUnits.{0} Nat Nat.cancelCommMonoidWithZero Nat.unique_units) Nat.uniqueFactorizationMonoid n) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) (List.{0} Nat) (Multiset.{0} Nat) (HasLiftT.mk.{1, 1} (List.{0} Nat) (Multiset.{0} Nat) (CoeTCₓ.coe.{1, 1} (List.{0} Nat) (Multiset.{0} Nat) (coeBase.{1, 1} (List.{0} Nat) (Multiset.{0} Nat) (Multiset.hasCoe.{0} Nat)))) (Nat.factors n))
+but is expected to have type
+ forall {n : Nat}, Eq.{1} (Multiset.{0} Nat) (UniqueFactorizationMonoid.normalizedFactors.{0} Nat Nat.cancelCommMonoidWithZero (fun (a : Nat) (b : Nat) => instDecidableEqNat a b) (NormalizedGCDMonoid.toNormalizationMonoid.{0} Nat Nat.cancelCommMonoidWithZero instNormalizedGCDMonoidNatCancelCommMonoidWithZero) Nat.instUniqueFactorizationMonoidNatCancelCommMonoidWithZero n) (Multiset.ofList.{0} Nat (Nat.factors n))
+Case conversion may be inaccurate. Consider using '#align nat.factors_eq Nat.factors_eqₓ'. -/
theorem Nat.factors_eq {n : ℕ} : normalizedFactors n = n.factors :=
by
cases n; · simp
@@ -334,6 +488,12 @@ theorem Nat.factors_eq {n : ℕ} : normalizedFactors n = n.factors :=
exact Nat.prime_of_mem_factors hx
#align nat.factors_eq Nat.factors_eq
+/- warning: nat.factors_multiset_prod_of_irreducible -> Nat.factors_multiset_prod_of_irreducible is a dubious translation:
+lean 3 declaration is
+ forall {s : Multiset.{0} Nat}, (forall (x : Nat), (Membership.Mem.{0, 0} Nat (Multiset.{0} Nat) (Multiset.hasMem.{0} Nat) x s) -> (Irreducible.{0} Nat Nat.monoid x)) -> (Eq.{1} (Multiset.{0} Nat) (UniqueFactorizationMonoid.normalizedFactors.{0} Nat Nat.cancelCommMonoidWithZero (fun (a : Nat) (b : Nat) => Nat.decidableEq a b) (normalizationMonoidOfUniqueUnits.{0} Nat Nat.cancelCommMonoidWithZero Nat.unique_units) Nat.uniqueFactorizationMonoid (Multiset.prod.{0} Nat Nat.commMonoid s)) s)
+but is expected to have type
+ forall {s : Multiset.{0} Nat}, (forall (x : Nat), (Membership.mem.{0, 0} Nat (Multiset.{0} Nat) (Multiset.instMembershipMultiset.{0} Nat) x s) -> (Irreducible.{0} Nat Nat.monoid x)) -> (Eq.{1} (Multiset.{0} Nat) (UniqueFactorizationMonoid.normalizedFactors.{0} Nat Nat.cancelCommMonoidWithZero (fun (a : Nat) (b : Nat) => instDecidableEqNat a b) (NormalizedGCDMonoid.toNormalizationMonoid.{0} Nat Nat.cancelCommMonoidWithZero instNormalizedGCDMonoidNatCancelCommMonoidWithZero) Nat.instUniqueFactorizationMonoidNatCancelCommMonoidWithZero (Multiset.prod.{0} Nat Nat.commMonoid s)) s)
+Case conversion may be inaccurate. Consider using '#align nat.factors_multiset_prod_of_irreducible Nat.factors_multiset_prod_of_irreducibleₓ'. -/
theorem Nat.factors_multiset_prod_of_irreducible {s : Multiset ℕ}
(h : ∀ x : ℕ, x ∈ s → Irreducible x) : normalizedFactors s.Prod = s :=
by
@@ -348,24 +508,45 @@ theorem Nat.factors_multiset_prod_of_irreducible {s : Multiset ℕ}
namespace multiplicity
+/- warning: multiplicity.finite_int_iff_nat_abs_finite -> multiplicity.finite_int_iff_natAbs_finite is a dubious translation:
+lean 3 declaration is
+ forall {a : Int} {b : Int}, Iff (multiplicity.Finite.{0} Int Int.monoid a b) (multiplicity.Finite.{0} Nat Nat.monoid (Int.natAbs a) (Int.natAbs b))
+but is expected to have type
+ forall {a : Int} {b : Int}, Iff (multiplicity.Finite.{0} Int Int.instMonoidInt a b) (multiplicity.Finite.{0} Nat Nat.monoid (Int.natAbs a) (Int.natAbs b))
+Case conversion may be inaccurate. Consider using '#align multiplicity.finite_int_iff_nat_abs_finite multiplicity.finite_int_iff_natAbs_finiteₓ'. -/
theorem finite_int_iff_natAbs_finite {a b : ℤ} : Finite a b ↔ Finite a.natAbs b.natAbs := by
simp only [finite_def, ← Int.natAbs_dvd_natAbs, Int.natAbs_pow]
#align multiplicity.finite_int_iff_nat_abs_finite multiplicity.finite_int_iff_natAbs_finite
+/- warning: multiplicity.finite_int_iff -> multiplicity.finite_int_iff is a dubious translation:
+lean 3 declaration is
+ forall {a : Int} {b : Int}, Iff (multiplicity.Finite.{0} Int Int.monoid a b) (And (Ne.{1} Nat (Int.natAbs a) (OfNat.ofNat.{0} Nat 1 (OfNat.mk.{0} Nat 1 (One.one.{0} Nat Nat.hasOne)))) (Ne.{1} Int b (OfNat.ofNat.{0} Int 0 (OfNat.mk.{0} Int 0 (Zero.zero.{0} Int Int.hasZero)))))
+but is expected to have type
+ forall {a : Int} {b : Int}, Iff (multiplicity.Finite.{0} Int Int.instMonoidInt a b) (And (Ne.{1} Nat (Int.natAbs a) (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1))) (Ne.{1} Int b (OfNat.ofNat.{0} Int 0 (instOfNatInt 0))))
+Case conversion may be inaccurate. Consider using '#align multiplicity.finite_int_iff multiplicity.finite_int_iffₓ'. -/
theorem finite_int_iff {a b : ℤ} : Finite a b ↔ a.natAbs ≠ 1 ∧ b ≠ 0 := by
rw [finite_int_iff_nat_abs_finite, finite_nat_iff, pos_iff_ne_zero, Int.natAbs_ne_zero]
#align multiplicity.finite_int_iff multiplicity.finite_int_iff
+#print multiplicity.decidableNat /-
instance decidableNat : DecidableRel fun a b : ℕ => (multiplicity a b).Dom := fun a b =>
decidable_of_iff _ finite_nat_iff.symm
#align multiplicity.decidable_nat multiplicity.decidableNat
+-/
+/- warning: multiplicity.decidable_int -> multiplicity.decidableInt is a dubious translation:
+lean 3 declaration is
+ DecidableRel.{1} Int (fun (a : Int) (b : Int) => Part.Dom.{0} Nat (multiplicity.{0} Int Int.monoid (fun (a : Int) (b : Int) => Int.decidableDvd a b) a b))
+but is expected to have type
+ DecidableRel.{1} Int (fun (a : Int) (b : Int) => Part.Dom.{0} Nat (multiplicity.{0} Int Int.instMonoidInt (fun (a : Int) (b : Int) => Int.decidableDvd a b) a b))
+Case conversion may be inaccurate. Consider using '#align multiplicity.decidable_int multiplicity.decidableIntₓ'. -/
instance decidableInt : DecidableRel fun a b : ℤ => (multiplicity a b).Dom := fun a b =>
decidable_of_iff _ finite_int_iff.symm
#align multiplicity.decidable_int multiplicity.decidableInt
end multiplicity
+#print induction_on_primes /-
theorem induction_on_primes {P : ℕ → Prop} (h₀ : P 0) (h₁ : P 1)
(h : ∀ p a : ℕ, p.Prime → P a → P (p * a)) (n : ℕ) : P n :=
by
@@ -377,15 +558,34 @@ theorem induction_on_primes {P : ℕ → Prop} (h₀ : P 0) (h₁ : P 1)
· intro a p _ hp ha
exact h p a hp.nat_prime ha
#align induction_on_primes induction_on_primes
+-/
+/- warning: int.associated_nat_abs -> Int.associated_natAbs is a dubious translation:
+lean 3 declaration is
+ forall (k : Int), Associated.{0} Int Int.monoid k ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Nat Int (HasLiftT.mk.{1, 1} Nat Int (CoeTCₓ.coe.{1, 1} Nat Int (coeBase.{1, 1} Nat Int Int.hasCoe))) (Int.natAbs k))
+but is expected to have type
+ forall (k : Int), Associated.{0} Int Int.instMonoidInt k (Nat.cast.{0} Int instNatCastInt (Int.natAbs k))
+Case conversion may be inaccurate. Consider using '#align int.associated_nat_abs Int.associated_natAbsₓ'. -/
theorem Int.associated_natAbs (k : ℤ) : Associated k k.natAbs :=
associated_of_dvd_dvd (Int.coe_nat_dvd_right.mpr dvd_rfl) (Int.natAbs_dvd.mpr dvd_rfl)
#align int.associated_nat_abs Int.associated_natAbs
+/- warning: int.prime_iff_nat_abs_prime -> Int.prime_iff_natAbs_prime is a dubious translation:
+lean 3 declaration is
+ forall {k : Int}, Iff (Prime.{0} Int (CommSemiring.toCommMonoidWithZero.{0} Int Int.commSemiring) k) (Nat.Prime (Int.natAbs k))
+but is expected to have type
+ forall {k : Int}, Iff (Prime.{0} Int (CancelCommMonoidWithZero.toCommMonoidWithZero.{0} Int (IsDomain.toCancelCommMonoidWithZero.{0} Int Int.instCommSemiringInt (LinearOrderedRing.isDomain.{0} Int (LinearOrderedCommRing.toLinearOrderedRing.{0} Int Int.linearOrderedCommRing)))) k) (Nat.Prime (Int.natAbs k))
+Case conversion may be inaccurate. Consider using '#align int.prime_iff_nat_abs_prime Int.prime_iff_natAbs_primeₓ'. -/
theorem Int.prime_iff_natAbs_prime {k : ℤ} : Prime k ↔ Nat.Prime k.natAbs :=
(Int.associated_natAbs k).prime_iff.trans Nat.prime_iff_prime_int.symm
#align int.prime_iff_nat_abs_prime Int.prime_iff_natAbs_prime
+/- warning: int.associated_iff_nat_abs -> Int.associated_iff_natAbs is a dubious translation:
+lean 3 declaration is
+ forall {a : Int} {b : Int}, Iff (Associated.{0} Int Int.monoid a b) (Eq.{1} Nat (Int.natAbs a) (Int.natAbs b))
+but is expected to have type
+ forall {a : Int} {b : Int}, Iff (Associated.{0} Int Int.instMonoidInt a b) (Eq.{1} Nat (Int.natAbs a) (Int.natAbs b))
+Case conversion may be inaccurate. Consider using '#align int.associated_iff_nat_abs Int.associated_iff_natAbsₓ'. -/
theorem Int.associated_iff_natAbs {a b : ℤ} : Associated a b ↔ a.natAbs = b.natAbs :=
by
rw [← dvd_dvd_iff_associated, ← Int.natAbs_dvd_natAbs, ← Int.natAbs_dvd_natAbs,
@@ -393,6 +593,12 @@ theorem Int.associated_iff_natAbs {a b : ℤ} : Associated a b ↔ a.natAbs = b.
exact associated_iff_eq
#align int.associated_iff_nat_abs Int.associated_iff_natAbs
+/- warning: int.associated_iff -> Int.associated_iff is a dubious translation:
+lean 3 declaration is
+ forall {a : Int} {b : Int}, Iff (Associated.{0} Int Int.monoid a b) (Or (Eq.{1} Int a b) (Eq.{1} Int a (Neg.neg.{0} Int Int.hasNeg b)))
+but is expected to have type
+ forall {a : Int} {b : Int}, Iff (Associated.{0} Int Int.instMonoidInt a b) (Or (Eq.{1} Int a b) (Eq.{1} Int a (Neg.neg.{0} Int Int.instNegInt b)))
+Case conversion may be inaccurate. Consider using '#align int.associated_iff Int.associated_iffₓ'. -/
theorem Int.associated_iff {a b : ℤ} : Associated a b ↔ a = b ∨ a = -b :=
by
rw [Int.associated_iff_natAbs]
@@ -401,18 +607,36 @@ theorem Int.associated_iff {a b : ℤ} : Associated a b ↔ a = b ∨ a = -b :=
namespace Int
+/- warning: int.zmultiples_nat_abs -> Int.zmultiples_natAbs is a dubious translation:
+lean 3 declaration is
+ forall (a : Int), Eq.{1} (AddSubgroup.{0} Int Int.addGroup) (AddSubgroup.zmultiples.{0} Int Int.addGroup ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Nat Int (HasLiftT.mk.{1, 1} Nat Int (CoeTCₓ.coe.{1, 1} Nat Int (coeBase.{1, 1} Nat Int Int.hasCoe))) (Int.natAbs a))) (AddSubgroup.zmultiples.{0} Int Int.addGroup a)
+but is expected to have type
+ forall (a : Int), Eq.{1} (AddSubgroup.{0} Int Int.instAddGroupInt) (AddSubgroup.zmultiples.{0} Int Int.instAddGroupInt (Nat.cast.{0} Int instNatCastInt (Int.natAbs a))) (AddSubgroup.zmultiples.{0} Int Int.instAddGroupInt a)
+Case conversion may be inaccurate. Consider using '#align int.zmultiples_nat_abs Int.zmultiples_natAbsₓ'. -/
theorem zmultiples_natAbs (a : ℤ) :
AddSubgroup.zmultiples (a.natAbs : ℤ) = AddSubgroup.zmultiples a :=
le_antisymm (AddSubgroup.zmultiples_subset (mem_zmultiples_iff.mpr (dvd_natAbs.mpr (dvd_refl a))))
(AddSubgroup.zmultiples_subset (mem_zmultiples_iff.mpr (natAbs_dvd.mpr (dvd_refl a))))
#align int.zmultiples_nat_abs Int.zmultiples_natAbs
+/- warning: int.span_nat_abs -> Int.span_natAbs is a dubious translation:
+lean 3 declaration is
+ forall (a : Int), Eq.{1} (Ideal.{0} Int Int.semiring) (Ideal.span.{0} Int Int.semiring (Singleton.singleton.{0, 0} Int (Set.{0} Int) (Set.hasSingleton.{0} Int) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Nat Int (HasLiftT.mk.{1, 1} Nat Int (CoeTCₓ.coe.{1, 1} Nat Int (coeBase.{1, 1} Nat Int Int.hasCoe))) (Int.natAbs a)))) (Ideal.span.{0} Int Int.semiring (Singleton.singleton.{0, 0} Int (Set.{0} Int) (Set.hasSingleton.{0} Int) a))
+but is expected to have type
+ forall (a : Int), Eq.{1} (Ideal.{0} Int Int.instSemiringInt) (Ideal.span.{0} Int Int.instSemiringInt (Singleton.singleton.{0, 0} Int (Set.{0} Int) (Set.instSingletonSet.{0} Int) (Nat.cast.{0} Int instNatCastInt (Int.natAbs a)))) (Ideal.span.{0} Int Int.instSemiringInt (Singleton.singleton.{0, 0} Int (Set.{0} Int) (Set.instSingletonSet.{0} Int) a))
+Case conversion may be inaccurate. Consider using '#align int.span_nat_abs Int.span_natAbsₓ'. -/
theorem span_natAbs (a : ℤ) : Ideal.span ({a.natAbs} : Set ℤ) = Ideal.span {a} :=
by
rw [Ideal.span_singleton_eq_span_singleton]
exact (associated_nat_abs _).symm
#align int.span_nat_abs Int.span_natAbs
+/- warning: int.eq_pow_of_mul_eq_pow_bit1_left -> Int.eq_pow_of_mul_eq_pow_bit1_left is a dubious translation:
+lean 3 declaration is
+ forall {a : Int} {b : Int} {c : Int}, (IsCoprime.{0} Int Int.commSemiring a b) -> (forall {k : Nat}, (Eq.{1} Int (HMul.hMul.{0, 0, 0} Int Int Int (instHMul.{0} Int Int.hasMul) a b) (HPow.hPow.{0, 0, 0} Int Nat Int (instHPow.{0, 0} Int Nat (Monoid.Pow.{0} Int Int.monoid)) c (bit1.{0} Nat Nat.hasOne Nat.hasAdd k))) -> (Exists.{1} Int (fun (d : Int) => Eq.{1} Int a (HPow.hPow.{0, 0, 0} Int Nat Int (instHPow.{0, 0} Int Nat (Monoid.Pow.{0} Int Int.monoid)) d (bit1.{0} Nat Nat.hasOne Nat.hasAdd k)))))
+but is expected to have type
+ forall {a : Int} {b : Int} {c : Int}, (IsCoprime.{0} Int Int.instCommSemiringInt a b) -> (forall {k : Nat}, (Eq.{1} Int (HMul.hMul.{0, 0, 0} Int Int Int (instHMul.{0} Int Int.instMulInt) a b) (HPow.hPow.{0, 0, 0} Int Nat Int Int.instHPowIntNat c (bit1.{0} Nat (CanonicallyOrderedCommSemiring.toOne.{0} Nat Nat.canonicallyOrderedCommSemiring) instAddNat k))) -> (Exists.{1} Int (fun (d : Int) => Eq.{1} Int a (HPow.hPow.{0, 0, 0} Int Nat Int (instHPow.{0, 0} Int Nat (Monoid.Pow.{0} Int Int.instMonoidInt)) d (bit1.{0} Nat (CanonicallyOrderedCommSemiring.toOne.{0} Nat Nat.canonicallyOrderedCommSemiring) instAddNat k)))))
+Case conversion may be inaccurate. Consider using '#align int.eq_pow_of_mul_eq_pow_bit1_left Int.eq_pow_of_mul_eq_pow_bit1_leftₓ'. -/
theorem eq_pow_of_mul_eq_pow_bit1_left {a b c : ℤ} (hab : IsCoprime a b) {k : ℕ}
(h : a * b = c ^ bit1 k) : ∃ d, a = d ^ bit1 k :=
by
@@ -422,11 +646,23 @@ theorem eq_pow_of_mul_eq_pow_bit1_left {a b c : ℤ} (hab : IsCoprime a b) {k :
obtain rfl | rfl := hd <;> exact ⟨_, rfl⟩
#align int.eq_pow_of_mul_eq_pow_bit1_left Int.eq_pow_of_mul_eq_pow_bit1_left
+/- warning: int.eq_pow_of_mul_eq_pow_bit1_right -> Int.eq_pow_of_mul_eq_pow_bit1_right is a dubious translation:
+lean 3 declaration is
+ forall {a : Int} {b : Int} {c : Int}, (IsCoprime.{0} Int Int.commSemiring a b) -> (forall {k : Nat}, (Eq.{1} Int (HMul.hMul.{0, 0, 0} Int Int Int (instHMul.{0} Int Int.hasMul) a b) (HPow.hPow.{0, 0, 0} Int Nat Int (instHPow.{0, 0} Int Nat (Monoid.Pow.{0} Int Int.monoid)) c (bit1.{0} Nat Nat.hasOne Nat.hasAdd k))) -> (Exists.{1} Int (fun (d : Int) => Eq.{1} Int b (HPow.hPow.{0, 0, 0} Int Nat Int (instHPow.{0, 0} Int Nat (Monoid.Pow.{0} Int Int.monoid)) d (bit1.{0} Nat Nat.hasOne Nat.hasAdd k)))))
+but is expected to have type
+ forall {a : Int} {b : Int} {c : Int}, (IsCoprime.{0} Int Int.instCommSemiringInt a b) -> (forall {k : Nat}, (Eq.{1} Int (HMul.hMul.{0, 0, 0} Int Int Int (instHMul.{0} Int Int.instMulInt) a b) (HPow.hPow.{0, 0, 0} Int Nat Int Int.instHPowIntNat c (bit1.{0} Nat (CanonicallyOrderedCommSemiring.toOne.{0} Nat Nat.canonicallyOrderedCommSemiring) instAddNat k))) -> (Exists.{1} Int (fun (d : Int) => Eq.{1} Int b (HPow.hPow.{0, 0, 0} Int Nat Int (instHPow.{0, 0} Int Nat (Monoid.Pow.{0} Int Int.instMonoidInt)) d (bit1.{0} Nat (CanonicallyOrderedCommSemiring.toOne.{0} Nat Nat.canonicallyOrderedCommSemiring) instAddNat k)))))
+Case conversion may be inaccurate. Consider using '#align int.eq_pow_of_mul_eq_pow_bit1_right Int.eq_pow_of_mul_eq_pow_bit1_rightₓ'. -/
theorem eq_pow_of_mul_eq_pow_bit1_right {a b c : ℤ} (hab : IsCoprime a b) {k : ℕ}
(h : a * b = c ^ bit1 k) : ∃ d, b = d ^ bit1 k :=
eq_pow_of_mul_eq_pow_bit1_left hab.symm (by rwa [mul_comm] at h)
#align int.eq_pow_of_mul_eq_pow_bit1_right Int.eq_pow_of_mul_eq_pow_bit1_right
+/- warning: int.eq_pow_of_mul_eq_pow_bit1 -> Int.eq_pow_of_mul_eq_pow_bit1 is a dubious translation:
+lean 3 declaration is
+ forall {a : Int} {b : Int} {c : Int}, (IsCoprime.{0} Int Int.commSemiring a b) -> (forall {k : Nat}, (Eq.{1} Int (HMul.hMul.{0, 0, 0} Int Int Int (instHMul.{0} Int Int.hasMul) a b) (HPow.hPow.{0, 0, 0} Int Nat Int (instHPow.{0, 0} Int Nat (Monoid.Pow.{0} Int Int.monoid)) c (bit1.{0} Nat Nat.hasOne Nat.hasAdd k))) -> (And (Exists.{1} Int (fun (d : Int) => Eq.{1} Int a (HPow.hPow.{0, 0, 0} Int Nat Int (instHPow.{0, 0} Int Nat (Monoid.Pow.{0} Int Int.monoid)) d (bit1.{0} Nat Nat.hasOne Nat.hasAdd k)))) (Exists.{1} Int (fun (e : Int) => Eq.{1} Int b (HPow.hPow.{0, 0, 0} Int Nat Int (instHPow.{0, 0} Int Nat (Monoid.Pow.{0} Int Int.monoid)) e (bit1.{0} Nat Nat.hasOne Nat.hasAdd k))))))
+but is expected to have type
+ forall {a : Int} {b : Int} {c : Int}, (IsCoprime.{0} Int Int.instCommSemiringInt a b) -> (forall {k : Nat}, (Eq.{1} Int (HMul.hMul.{0, 0, 0} Int Int Int (instHMul.{0} Int Int.instMulInt) a b) (HPow.hPow.{0, 0, 0} Int Nat Int Int.instHPowIntNat c (bit1.{0} Nat (CanonicallyOrderedCommSemiring.toOne.{0} Nat Nat.canonicallyOrderedCommSemiring) instAddNat k))) -> (And (Exists.{1} Int (fun (d : Int) => Eq.{1} Int a (HPow.hPow.{0, 0, 0} Int Nat Int (instHPow.{0, 0} Int Nat (Monoid.Pow.{0} Int Int.instMonoidInt)) d (bit1.{0} Nat (CanonicallyOrderedCommSemiring.toOne.{0} Nat Nat.canonicallyOrderedCommSemiring) instAddNat k)))) (Exists.{1} Int (fun (e : Int) => Eq.{1} Int b (HPow.hPow.{0, 0, 0} Int Nat Int (instHPow.{0, 0} Int Nat (Monoid.Pow.{0} Int Int.instMonoidInt)) e (bit1.{0} Nat (CanonicallyOrderedCommSemiring.toOne.{0} Nat Nat.canonicallyOrderedCommSemiring) instAddNat k))))))
+Case conversion may be inaccurate. Consider using '#align int.eq_pow_of_mul_eq_pow_bit1 Int.eq_pow_of_mul_eq_pow_bit1ₓ'. -/
theorem eq_pow_of_mul_eq_pow_bit1 {a b c : ℤ} (hab : IsCoprime a b) {k : ℕ}
(h : a * b = c ^ bit1 k) : (∃ d, a = d ^ bit1 k) ∧ ∃ e, b = e ^ bit1 k :=
⟨eq_pow_of_mul_eq_pow_bit1_left hab h, eq_pow_of_mul_eq_pow_bit1_right hab h⟩
mathlib commit https://github.com/leanprover-community/mathlib/commit/2196ab363eb097c008d4497125e0dde23fb36db2
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Johannes Hölzl, Jens Wagemaker, Aaron Anderson
! This file was ported from Lean 3 source module ring_theory.int.basic
-! leanprover-community/mathlib commit e1bccd6e40ae78370f01659715d3c948716e3b7e
+! leanprover-community/mathlib commit 2196ab363eb097c008d4497125e0dde23fb36db2
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -182,7 +182,7 @@ theorem exists_unit_of_abs (a : ℤ) : ∃ (u : ℤ)(h : IsUnit u), (Int.natAbs
· use 1, isUnit_one
rw [← h, one_mul]
· use -1, is_unit_one.neg
- rw [← neg_eq_iff_neg_eq.mp (Eq.symm h)]
+ rw [← neg_eq_iff_eq_neg.mpr h]
simp only [neg_mul, one_mul]
#align int.exists_unit_of_abs Int.exists_unit_of_abs
mathlib commit https://github.com/leanprover-community/mathlib/commit/bd9851ca476957ea4549eb19b40e7b5ade9428cc
These don't use any abstract algebra.
@@ -182,18 +182,6 @@ theorem gcd_ne_one_iff_gcd_mul_right_ne_one {a : ℤ} {m n : ℕ} :
simp only [gcd_eq_one_iff_coprime, ← not_and_or, not_iff_not, IsCoprime.mul_right_iff]
#align int.gcd_ne_one_iff_gcd_mul_right_ne_one Int.gcd_ne_one_iff_gcd_mul_right_ne_one
-/-- If `gcd a (m * n) = 1`, then `gcd a m = 1`. -/
-theorem gcd_eq_one_of_gcd_mul_right_eq_one_left {a : ℤ} {m n : ℕ} (h : a.gcd (m * n) = 1) :
- a.gcd m = 1 :=
- Nat.dvd_one.mp <| h ▸ (gcd_dvd_gcd_mul_right_right a m n)
-#align int.gcd_eq_one_of_gcd_mul_right_eq_one_left Int.gcd_eq_one_of_gcd_mul_right_eq_one_left
-
-/-- If `gcd a (m * n) = 1`, then `gcd a n = 1`. -/
-theorem gcd_eq_one_of_gcd_mul_right_eq_one_right {a : ℤ} {m n : ℕ} (h : a.gcd (m * n) = 1) :
- a.gcd n = 1 :=
- Nat.dvd_one.mp <| h ▸ (gcd_dvd_gcd_mul_left_right a n m)
-#align int.gcd_eq_one_of_gcd_mul_right_eq_one_right Int.gcd_eq_one_of_gcd_mul_right_eq_one_right
-
theorem sq_of_gcd_eq_one {a b c : ℤ} (h : Int.gcd a b = 1) (heq : a * b = c ^ 2) :
∃ a0 : ℤ, a = a0 ^ 2 ∨ a = -a0 ^ 2 := by
have h' : IsUnit (GCDMonoid.gcd a b) := by
All removed items are virtually unused in mathlib and have been deprecated for over a year.
@@ -182,18 +182,16 @@ theorem gcd_ne_one_iff_gcd_mul_right_ne_one {a : ℤ} {m n : ℕ} :
simp only [gcd_eq_one_iff_coprime, ← not_and_or, not_iff_not, IsCoprime.mul_right_iff]
#align int.gcd_ne_one_iff_gcd_mul_right_ne_one Int.gcd_ne_one_iff_gcd_mul_right_ne_one
-set_option linter.deprecated false in -- trans_rel_left
/-- If `gcd a (m * n) = 1`, then `gcd a m = 1`. -/
theorem gcd_eq_one_of_gcd_mul_right_eq_one_left {a : ℤ} {m n : ℕ} (h : a.gcd (m * n) = 1) :
a.gcd m = 1 :=
- Nat.dvd_one.mp <| trans_rel_left _ (gcd_dvd_gcd_mul_right_right a m n) h
+ Nat.dvd_one.mp <| h ▸ (gcd_dvd_gcd_mul_right_right a m n)
#align int.gcd_eq_one_of_gcd_mul_right_eq_one_left Int.gcd_eq_one_of_gcd_mul_right_eq_one_left
-set_option linter.deprecated false in -- trans_rel_left
/-- If `gcd a (m * n) = 1`, then `gcd a n = 1`. -/
theorem gcd_eq_one_of_gcd_mul_right_eq_one_right {a : ℤ} {m n : ℕ} (h : a.gcd (m * n) = 1) :
a.gcd n = 1 :=
- Nat.dvd_one.mp <| trans_rel_left _ (gcd_dvd_gcd_mul_left_right a n m) h
+ Nat.dvd_one.mp <| h ▸ (gcd_dvd_gcd_mul_left_right a n m)
#align int.gcd_eq_one_of_gcd_mul_right_eq_one_right Int.gcd_eq_one_of_gcd_mul_right_eq_one_right
theorem sq_of_gcd_eq_one {a b c : ℤ} (h : Int.gcd a b = 1) (heq : a * b = c ^ 2) :
Previously Mathlib.GroupTheory.Perm.Fin
knew about LinearMap
for no good reason, because it relied on Mathlib.RingTheory.Int.Basic
for some basic things, but that file also has heavy imports.
Co-authored-by: Scott Morrison <scott.morrison@gmail.com>
@@ -54,31 +54,6 @@ instance : UniqueFactorizationMonoid ℕ :=
end Nat
-/-- `ℕ` is a gcd_monoid. -/
-instance : GCDMonoid ℕ where
- gcd := Nat.gcd
- lcm := Nat.lcm
- gcd_dvd_left := Nat.gcd_dvd_left
- gcd_dvd_right := Nat.gcd_dvd_right
- dvd_gcd := Nat.dvd_gcd
- gcd_mul_lcm a b := by rw [Nat.gcd_mul_lcm]; rfl
- lcm_zero_left := Nat.lcm_zero_left
- lcm_zero_right := Nat.lcm_zero_right
-
-instance : NormalizedGCDMonoid ℕ :=
- { (inferInstance : GCDMonoid ℕ),
- (inferInstance : NormalizationMonoid ℕ) with
- normalize_gcd := fun _ _ => normalize_eq _
- normalize_lcm := fun _ _ => normalize_eq _ }
-
-theorem gcd_eq_nat_gcd (m n : ℕ) : gcd m n = Nat.gcd m n :=
- rfl
-#align gcd_eq_nat_gcd gcd_eq_nat_gcd
-
-theorem lcm_eq_nat_lcm (m n : ℕ) : lcm m n = Nat.lcm m n :=
- rfl
-#align lcm_eq_nat_lcm lcm_eq_nat_lcm
-
namespace Int
section NormalizationMonoid
simp
tags or simp
lemmasassociated_one_iff_isUnit
, associated_zero_iff_eq_zero
,
Associates.mk_eq_one
, Associates.mk_dvd_mk
,
Associates.mk_isRelPrime_iff
, Associates.mk_zero
,
Associates.quot_out_zero
, Associates.le_zero
,
Associates.prime_mk
, Associates.irreducible_mk
,
Associates.mk_dvdNotUnit_mk_iff
, Associates.factors_le
,
Associates.prod_factors
gcongr
tagsAssociates.factors_mono
, Associates.prod_mono
Associates.prime_mk
, Associates.irreducible_mk
,
Associates.one_or_eq_of_le_of_prime
[Nontrivial _]
here and there,
mostly in cases when a lemma has _ ≠ _
assumptionAssociates.FactorSetMem
WithTop
APIUse WithTop.some
and ⊤
instead of Option.some
and none
in UniqueFactorizationDomain
.
Associates.isPrimal_iff
→ Associates.isPrimal_mk
;Associates.mk_le_mk_iff_dvd_iff
→ Associates.mk_le_mk_iff_dvd
;Associates.factors_0
→ Associates.factors_zero
;Associates.factors_eq_none_iff_zero
→
Associates.factors_eq_top_iff_zero
@@ -35,9 +35,8 @@ namespace Nat
instance : WfDvdMonoid ℕ :=
⟨by
- refine'
- RelHomClass.wellFounded
- (⟨fun x : ℕ => if x = 0 then (⊤ : ℕ∞) else x, _⟩ : DvdNotUnit →r (· < ·)) wellFounded_lt
+ refine RelHomClass.wellFounded
+ (⟨fun x : ℕ => if x = 0 then (⊤ : ℕ∞) else x, ?_⟩ : DvdNotUnit →r (· < ·)) wellFounded_lt
intro a b h
cases' a with a
· exfalso
@@ -253,14 +252,12 @@ end Int
/-- Maps an associate class of integers consisting of `-n, n` to `n : ℕ` -/
def associatesIntEquivNat : Associates ℤ ≃ ℕ := by
- refine' ⟨fun z => z.out.natAbs, fun n => Associates.mk n, _, _⟩
- · refine' fun a =>
- Quotient.inductionOn a fun a =>
- Associates.mk_eq_mk_iff_associated.2 <| Associated.symm <| ⟨normUnit a, _⟩
+ refine ⟨(·.out.natAbs), (Associates.mk ·), ?_, fun n ↦ ?_⟩
+ · refine Associates.forall_associated.2 fun a ↦ ?_
+ refine Associates.mk_eq_mk_iff_associated.2 <| Associated.symm <| ⟨normUnit a, ?_⟩
simp [Int.abs_eq_normalize]
- · intro n
- dsimp
- rw [← normalize_apply, ← Int.abs_eq_normalize, Int.natAbs_abs, Int.natAbs_ofNat]
+ · dsimp only [Associates.out_mk]
+ rw [← Int.abs_eq_normalize, Int.natAbs_abs, Int.natAbs_ofNat]
#align associates_int_equiv_nat associatesIntEquivNat
theorem Int.Prime.dvd_mul {m n : ℤ} {p : ℕ} (hp : Nat.Prime p) (h : (p : ℤ) ∣ m * n) :
This means Mathlib.NumberTheory.Padics.PadicVal no longer needs to depend on Mathlib.RingTheory.Int.Basic, which is surprisingly heavy (in particular through Mathlib.RingTheory.Noetherian).
@@ -327,26 +327,6 @@ theorem Nat.factors_multiset_prod_of_irreducible {s : Multiset ℕ}
exact not_irreducible_zero (h 0 con)
#align nat.factors_multiset_prod_of_irreducible Nat.factors_multiset_prod_of_irreducible
-namespace multiplicity
-
-theorem finite_int_iff_natAbs_finite {a b : ℤ} : Finite a b ↔ Finite a.natAbs b.natAbs := by
- simp only [finite_def, ← Int.natAbs_dvd_natAbs, Int.natAbs_pow]
-#align multiplicity.finite_int_iff_nat_abs_finite multiplicity.finite_int_iff_natAbs_finite
-
-theorem finite_int_iff {a b : ℤ} : Finite a b ↔ a.natAbs ≠ 1 ∧ b ≠ 0 := by
- rw [finite_int_iff_natAbs_finite, finite_nat_iff, pos_iff_ne_zero, Int.natAbs_ne_zero]
-#align multiplicity.finite_int_iff multiplicity.finite_int_iff
-
-instance decidableNat : DecidableRel fun a b : ℕ => (multiplicity a b).Dom := fun _ _ =>
- decidable_of_iff _ finite_nat_iff.symm
-#align multiplicity.decidable_nat multiplicity.decidableNat
-
-instance decidableInt : DecidableRel fun a b : ℤ => (multiplicity a b).Dom := fun _ _ =>
- decidable_of_iff _ finite_int_iff.symm
-#align multiplicity.decidable_int multiplicity.decidableInt
-
-end multiplicity
-
theorem induction_on_primes {P : ℕ → Prop} (h₀ : P 0) (h₁ : P 1)
(h : ∀ p a : ℕ, p.Prime → P a → P (p * a)) (n : ℕ) : P n := by
apply UniqueFactorizationMonoid.induction_on_prime
coe_nat
to natCast
(#11637)
Reduce the diff of #11499
All in the Int
namespace:
ofNat_eq_cast
→ ofNat_eq_natCast
cast_eq_cast_iff_Nat
→ natCast_inj
natCast_eq_ofNat
→ ofNat_eq_natCast
coe_nat_sub
→ natCast_sub
coe_nat_nonneg
→ natCast_nonneg
sign_coe_add_one
→ sign_natCast_add_one
nat_succ_eq_int_succ
→ natCast_succ
succ_neg_nat_succ
→ succ_neg_natCast_succ
coe_pred_of_pos
→ natCast_pred_of_pos
coe_nat_div
→ natCast_div
coe_nat_ediv
→ natCast_ediv
sign_coe_nat_of_nonzero
→ sign_natCast_of_ne_zero
toNat_coe_nat
→ toNat_natCast
toNat_coe_nat_add_one
→ toNat_natCast_add_one
coe_nat_dvd
→ natCast_dvd_natCast
coe_nat_dvd_left
→ natCast_dvd
coe_nat_dvd_right
→ dvd_natCast
le_coe_nat_sub
→ le_natCast_sub
succ_coe_nat_pos
→ succ_natCast_pos
coe_nat_modEq_iff
→ natCast_modEq_iff
coe_natAbs
→ natCast_natAbs
coe_nat_eq_zero
→ natCast_eq_zero
coe_nat_ne_zero
→ natCast_ne_zero
coe_nat_ne_zero_iff_pos
→ natCast_ne_zero_iff_pos
abs_coe_nat
→ abs_natCast
coe_nat_nonpos_iff
→ natCast_nonpos_iff
Also rename Nat.coe_nat_dvd
to Nat.cast_dvd_cast
@@ -140,10 +140,10 @@ instance : GCDMonoid ℤ where
gcd_dvd_right a b := Int.gcd_dvd_right
dvd_gcd := dvd_gcd
gcd_mul_lcm a b := by
- rw [← Int.ofNat_mul, gcd_mul_lcm, coe_natAbs, abs_eq_normalize]
+ rw [← Int.ofNat_mul, gcd_mul_lcm, natCast_natAbs, abs_eq_normalize]
exact normalize_associated (a * b)
- lcm_zero_left a := coe_nat_eq_zero.2 <| Nat.lcm_zero_left _
- lcm_zero_right a := coe_nat_eq_zero.2 <| Nat.lcm_zero_right _
+ lcm_zero_left a := natCast_eq_zero.2 <| Nat.lcm_zero_left _
+ lcm_zero_right a := natCast_eq_zero.2 <| Nat.lcm_zero_right _
instance : NormalizedGCDMonoid ℤ :=
{ Int.normalizationMonoid,
@@ -194,8 +194,8 @@ theorem gcd_eq_one_iff_coprime {a b : ℤ} : Int.gcd a b = 1 ↔ IsCoprime a b :
by_contra hg
obtain ⟨p, ⟨hp, ha, hb⟩⟩ := Nat.Prime.not_coprime_iff_dvd.mp hg
apply Nat.Prime.not_dvd_one hp
- rw [← coe_nat_dvd, Int.ofNat_one, ← h]
- exact dvd_add ((coe_nat_dvd_left.mpr ha).mul_left _) ((coe_nat_dvd_left.mpr hb).mul_left _)
+ rw [← natCast_dvd_natCast, Int.ofNat_one, ← h]
+ exact dvd_add ((natCast_dvd.mpr ha).mul_left _) ((natCast_dvd.mpr hb).mul_left _)
#align int.gcd_eq_one_iff_coprime Int.gcd_eq_one_iff_coprime
theorem coprime_iff_nat_coprime {a b : ℤ} : IsCoprime a b ↔ Nat.Coprime a.natAbs b.natAbs := by
@@ -242,7 +242,7 @@ theorem sq_of_coprime {a b c : ℤ} (h : IsCoprime a b) (heq : a * b = c ^ 2) :
theorem natAbs_euclideanDomain_gcd (a b : ℤ) :
Int.natAbs (EuclideanDomain.gcd a b) = Int.gcd a b := by
- apply Nat.dvd_antisymm <;> rw [← Int.coe_nat_dvd]
+ apply Nat.dvd_antisymm <;> rw [← Int.natCast_dvd_natCast]
· rw [Int.natAbs_dvd]
exact Int.dvd_gcd (EuclideanDomain.gcd_dvd_left _ _) (EuclideanDomain.gcd_dvd_right _ _)
· rw [Int.dvd_natAbs]
@@ -265,24 +265,24 @@ def associatesIntEquivNat : Associates ℤ ≃ ℕ := by
theorem Int.Prime.dvd_mul {m n : ℤ} {p : ℕ} (hp : Nat.Prime p) (h : (p : ℤ) ∣ m * n) :
p ∣ m.natAbs ∨ p ∣ n.natAbs := by
- rwa [← hp.dvd_mul, ← Int.natAbs_mul, ← Int.coe_nat_dvd_left]
+ rwa [← hp.dvd_mul, ← Int.natAbs_mul, ← Int.natCast_dvd]
#align int.prime.dvd_mul Int.Prime.dvd_mul
theorem Int.Prime.dvd_mul' {m n : ℤ} {p : ℕ} (hp : Nat.Prime p) (h : (p : ℤ) ∣ m * n) :
(p : ℤ) ∣ m ∨ (p : ℤ) ∣ n := by
- rw [Int.coe_nat_dvd_left, Int.coe_nat_dvd_left]
+ rw [Int.natCast_dvd, Int.natCast_dvd]
exact Int.Prime.dvd_mul hp h
#align int.prime.dvd_mul' Int.Prime.dvd_mul'
theorem Int.Prime.dvd_pow {n : ℤ} {k p : ℕ} (hp : Nat.Prime p) (h : (p : ℤ) ∣ n ^ k) :
p ∣ n.natAbs := by
- rw [Int.coe_nat_dvd_left, Int.natAbs_pow] at h
+ rw [Int.natCast_dvd, Int.natAbs_pow] at h
exact hp.dvd_of_dvd_pow h
#align int.prime.dvd_pow Int.Prime.dvd_pow
theorem Int.Prime.dvd_pow' {n : ℤ} {k p : ℕ} (hp : Nat.Prime p) (h : (p : ℤ) ∣ n ^ k) :
(p : ℤ) ∣ n := by
- rw [Int.coe_nat_dvd_left]
+ rw [Int.natCast_dvd]
exact Int.Prime.dvd_pow hp h
#align int.prime.dvd_pow' Int.Prime.dvd_pow'
@@ -298,7 +298,7 @@ theorem prime_two_or_dvd_of_dvd_two_mul_pow_self_two {m : ℤ} {p : ℕ} (hp : N
theorem Int.exists_prime_and_dvd {n : ℤ} (hn : n.natAbs ≠ 1) : ∃ p, Prime p ∧ p ∣ n := by
obtain ⟨p, pp, pd⟩ := Nat.exists_prime_and_dvd hn
- exact ⟨p, Nat.prime_iff_prime_int.mp pp, Int.coe_nat_dvd_left.mpr pd⟩
+ exact ⟨p, Nat.prime_iff_prime_int.mp pp, Int.natCast_dvd.mpr pd⟩
#align int.exists_prime_and_dvd Int.exists_prime_and_dvd
open UniqueFactorizationMonoid
@@ -359,7 +359,7 @@ theorem induction_on_primes {P : ℕ → Prop} (h₀ : P 0) (h₁ : P 1)
#align induction_on_primes induction_on_primes
theorem Int.associated_natAbs (k : ℤ) : Associated k k.natAbs :=
- associated_of_dvd_dvd (Int.coe_nat_dvd_right.mpr dvd_rfl) (Int.natAbs_dvd.mpr dvd_rfl)
+ associated_of_dvd_dvd (Int.dvd_natCast.mpr dvd_rfl) (Int.natAbs_dvd.mpr dvd_rfl)
#align int.associated_nat_abs Int.associated_natAbs
theorem Int.prime_iff_natAbs_prime {k : ℤ} : Prime k ↔ Nat.Prime k.natAbs :=
@@ -322,7 +322,7 @@ theorem Nat.factors_multiset_prod_of_irreducible {s : Multiset ℕ}
apply
UniqueFactorizationMonoid.factors_unique irreducible_of_normalized_factor h
(normalizedFactors_prod _)
- rw [Ne.def, Multiset.prod_eq_zero_iff]
+ rw [Ne, Multiset.prod_eq_zero_iff]
intro con
exact not_irreducible_zero (h 0 con)
#align nat.factors_multiset_prod_of_irreducible Nat.factors_multiset_prod_of_irreducible
List → Multiset
(#11099)
These did not respect the naming convention by having the coe
as a prefix instead of a suffix, or vice-versa. Also add a bunch of norm_cast
@@ -309,7 +309,7 @@ theorem Nat.factors_eq {n : ℕ} : normalizedFactors n = n.factors := by
| succ n =>
rw [← Multiset.rel_eq, ← associated_eq_eq]
apply UniqueFactorizationMonoid.factors_unique irreducible_of_normalized_factor _
- · rw [Multiset.coe_prod, Nat.prod_factors n.succ_ne_zero]
+ · rw [Multiset.prod_coe, Nat.prod_factors n.succ_ne_zero]
apply normalizedFactors_prod (Nat.succ_ne_zero _)
· intro x hx
rw [Nat.irreducible_iff_prime, ← Nat.prime_iff]
Notable changes: lemmas were added in https://github.com/leanprover/std4/pull/538 about gcd
and lcm
, that now have implicit arguments. Mostly this is a positive change in Mathlib, we can just delete the arguments. The one to consider in review is in ModEq
.
Co-authored-by: Scott Morrison <scott.morrison@gmail.com>
@@ -136,8 +136,8 @@ section GCDMonoid
instance : GCDMonoid ℤ where
gcd a b := Int.gcd a b
lcm a b := Int.lcm a b
- gcd_dvd_left a b := Int.gcd_dvd_left _ _
- gcd_dvd_right a b := Int.gcd_dvd_right _ _
+ gcd_dvd_left a b := Int.gcd_dvd_left
+ gcd_dvd_right a b := Int.gcd_dvd_right
dvd_gcd := dvd_gcd
gcd_mul_lcm a b := by
rw [← Int.ofNat_mul, gcd_mul_lcm, coe_natAbs, abs_eq_normalize]
@@ -246,7 +246,7 @@ theorem natAbs_euclideanDomain_gcd (a b : ℤ) :
· rw [Int.natAbs_dvd]
exact Int.dvd_gcd (EuclideanDomain.gcd_dvd_left _ _) (EuclideanDomain.gcd_dvd_right _ _)
· rw [Int.dvd_natAbs]
- exact EuclideanDomain.dvd_gcd (Int.gcd_dvd_left _ _) (Int.gcd_dvd_right _ _)
+ exact EuclideanDomain.dvd_gcd Int.gcd_dvd_left Int.gcd_dvd_right
#align int.nat_abs_euclidean_domain_gcd Int.natAbs_euclideanDomain_gcd
end Int
cases x with | ...
instead of cases x; case => ...
(#9321)
This converts usages of the pattern
cases h
case inl h' => ...
case inr h' => ...
which derive from mathported code, to the "structured cases
" syntax:
cases h with
| inl h' => ...
| inr h' => ...
The case where the subgoals are handled with ·
instead of case
is more contentious (and much more numerous) so I left those alone. This pattern also appears with cases'
, induction
, induction'
, and rcases
. Furthermore, there is a similar transformation for by_cases
:
by_cases h : cond
case pos => ...
case neg => ...
is replaced by:
if h : cond then
...
else
...
Co-authored-by: Mario Carneiro <di.gama@gmail.com>
@@ -304,9 +304,9 @@ theorem Int.exists_prime_and_dvd {n : ℤ} (hn : n.natAbs ≠ 1) : ∃ p, Prime
open UniqueFactorizationMonoid
theorem Nat.factors_eq {n : ℕ} : normalizedFactors n = n.factors := by
- cases n
- case zero => simp
- case succ n =>
+ cases n with
+ | zero => simp
+ | succ n =>
rw [← Multiset.rel_eq, ← associated_eq_eq]
apply UniqueFactorizationMonoid.factors_unique irreducible_of_normalized_factor _
· rw [Multiset.coe_prod, Nat.prod_factors n.succ_ne_zero]
@@ -265,7 +265,7 @@ def associatesIntEquivNat : Associates ℤ ≃ ℕ := by
theorem Int.Prime.dvd_mul {m n : ℤ} {p : ℕ} (hp : Nat.Prime p) (h : (p : ℤ) ∣ m * n) :
p ∣ m.natAbs ∨ p ∣ n.natAbs := by
- rwa [← hp.dvd_mul, ← Int.natAbs_mul, ←Int.coe_nat_dvd_left]
+ rwa [← hp.dvd_mul, ← Int.natAbs_mul, ← Int.coe_nat_dvd_left]
#align int.prime.dvd_mul Int.Prime.dvd_mul
theorem Int.Prime.dvd_mul' {m n : ℤ} {p : ℕ} (hp : Nat.Prime p) (h : (p : ℤ) ∣ m * n) :
<
and >
(#7865)
We already have WellFoundedLT
/WellFoundedGT
as wrappers around IsWellFounded
, but we didn't have the corresponding wrapper lemmas.
@@ -37,8 +37,7 @@ instance : WfDvdMonoid ℕ :=
⟨by
refine'
RelHomClass.wellFounded
- (⟨fun x : ℕ => if x = 0 then (⊤ : ℕ∞) else x, _⟩ : DvdNotUnit →r (· < ·))
- (WithTop.wellFounded_lt Nat.lt_wfRel.wf)
+ (⟨fun x : ℕ => if x = 0 then (⊤ : ℕ∞) else x, _⟩ : DvdNotUnit →r (· < ·)) wellFounded_lt
intro a b h
cases' a with a
· exfalso
@@ -294,7 +294,7 @@ theorem prime_two_or_dvd_of_dvd_two_mul_pow_self_two {m : ℤ} {p : ℕ} (hp : N
exact le_antisymm (Nat.le_of_dvd zero_lt_two hp2) (Nat.Prime.two_le hp)
· apply Or.intro_right
rw [sq, Int.natAbs_mul] at hpp
- exact (or_self_iff _).mp ((Nat.Prime.dvd_mul hp).mp hpp)
+ exact or_self_iff.mp ((Nat.Prime.dvd_mul hp).mp hpp)
#align prime_two_or_dvd_of_dvd_two_mul_pow_self_two prime_two_or_dvd_of_dvd_two_mul_pow_self_two
theorem Int.exists_prime_and_dvd {n : ℤ} (hn : n.natAbs ≠ 1) : ∃ p, Prime p ∧ p ∣ n := by
@@ -199,7 +199,7 @@ theorem gcd_eq_one_iff_coprime {a b : ℤ} : Int.gcd a b = 1 ↔ IsCoprime a b :
exact dvd_add ((coe_nat_dvd_left.mpr ha).mul_left _) ((coe_nat_dvd_left.mpr hb).mul_left _)
#align int.gcd_eq_one_iff_coprime Int.gcd_eq_one_iff_coprime
-theorem coprime_iff_nat_coprime {a b : ℤ} : IsCoprime a b ↔ Nat.coprime a.natAbs b.natAbs := by
+theorem coprime_iff_nat_coprime {a b : ℤ} : IsCoprime a b ↔ Nat.Coprime a.natAbs b.natAbs := by
rw [← gcd_eq_one_iff_coprime, Nat.coprime_iff_gcd_eq_one, gcd_eq_natAbs]
#align int.coprime_iff_nat_coprime Int.coprime_iff_nat_coprime
@@ -199,7 +199,7 @@ theorem gcd_eq_one_iff_coprime {a b : ℤ} : Int.gcd a b = 1 ↔ IsCoprime a b :
exact dvd_add ((coe_nat_dvd_left.mpr ha).mul_left _) ((coe_nat_dvd_left.mpr hb).mul_left _)
#align int.gcd_eq_one_iff_coprime Int.gcd_eq_one_iff_coprime
-theorem coprime_iff_nat_coprime {a b : ℤ} : IsCoprime a b ↔ Nat.Coprime a.natAbs b.natAbs := by
+theorem coprime_iff_nat_coprime {a b : ℤ} : IsCoprime a b ↔ Nat.coprime a.natAbs b.natAbs := by
rw [← gcd_eq_one_iff_coprime, Nat.coprime_iff_gcd_eq_one, gcd_eq_natAbs]
#align int.coprime_iff_nat_coprime Int.coprime_iff_nat_coprime
Some changes have already been review and delegated in #6910 and #7148.
The diff that needs looking at is https://github.com/leanprover-community/mathlib4/pull/7174/commits/64d6d07ee18163627c8f517eb31455411921c5ac
The std bump PR was insta-merged already!
Co-authored-by: leanprover-community-mathlib4-bot <leanprover-community-mathlib4-bot@users.noreply.github.com> Co-authored-by: Scott Morrison <scott.morrison@gmail.com>
@@ -199,7 +199,7 @@ theorem gcd_eq_one_iff_coprime {a b : ℤ} : Int.gcd a b = 1 ↔ IsCoprime a b :
exact dvd_add ((coe_nat_dvd_left.mpr ha).mul_left _) ((coe_nat_dvd_left.mpr hb).mul_left _)
#align int.gcd_eq_one_iff_coprime Int.gcd_eq_one_iff_coprime
-theorem coprime_iff_nat_coprime {a b : ℤ} : IsCoprime a b ↔ Nat.coprime a.natAbs b.natAbs := by
+theorem coprime_iff_nat_coprime {a b : ℤ} : IsCoprime a b ↔ Nat.Coprime a.natAbs b.natAbs := by
rw [← gcd_eq_one_iff_coprime, Nat.coprime_iff_gcd_eq_one, gcd_eq_natAbs]
#align int.coprime_iff_nat_coprime Int.coprime_iff_nat_coprime
@@ -2,17 +2,14 @@
Copyright (c) 2018 Johannes Hölzl. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Johannes Hölzl, Jens Wagemaker, Aaron Anderson
-
-! This file was ported from Lean 3 source module ring_theory.int.basic
-! leanprover-community/mathlib commit e655e4ea5c6d02854696f97494997ba4c31be802
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathlib.Algebra.EuclideanDomain.Basic
import Mathlib.Data.Nat.Factors
import Mathlib.RingTheory.Coprime.Basic
import Mathlib.RingTheory.PrincipalIdealDomain
+#align_import ring_theory.int.basic from "leanprover-community/mathlib"@"e655e4ea5c6d02854696f97494997ba4c31be802"
+
/-!
# Divisibility over ℕ and ℤ
set_theory.cardinal.basic
: forward-ports leanprover-community/mathlib#18781, which backports some ad-hoc changes in #3247 in a more principled wayring_theory.int.basic
: these changes were already forward-ported in #3278, but we forgot the SHA.linear_algebra.dimension
: forward-ports leanprover-community/mathlib#18792linear_algebra.matrix.dot_product
: forward-ports leanprover-community/mathlib#18783linear_algebra.finrank
: forward-ports leanprover-community/mathlib#18794 which is itself a backport of #3378, hence no changes to the fileCo-authored-by: Parcly Taxel <reddeloostw@gmail.com> Co-authored-by: Eric Wieser <wieser.eric@gmail.com>
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Johannes Hölzl, Jens Wagemaker, Aaron Anderson
! This file was ported from Lean 3 source module ring_theory.int.basic
-! leanprover-community/mathlib commit 2196ab363eb097c008d4497125e0dde23fb36db2
+! leanprover-community/mathlib commit e655e4ea5c6d02854696f97494997ba4c31be802
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
https://github.com/leanprover-community/mathlib/pull/18668
algebra.group_power.lemmas
@05101c3df9d9cfe9430edc205860c79b6d660102
..e655e4ea5c6d02854696f97494997ba4c31be802
group_theory.submonoid.membership
@2ec920d35348cb2d13ac0e1a2ad9df0fdf1a76b4
..e655e4ea5c6d02854696f97494997ba4c31be802
group_theory.subgroup.zpowers
@f93c11933efbc3c2f0299e47b8ff83e9b539cbf6
..e655e4ea5c6d02854696f97494997ba4c31be802
group_theory.subgroup.pointwise
@c10e724be91096453ee3db13862b9fb9a992fef2
..e655e4ea5c6d02854696f97494997ba4c31be802
ring_theory.int.basic
@2196ab363eb097c008d4497125e0dde23fb36db2
..e655e4ea5c6d02854696f97494997ba4c31be802
@@ -385,8 +385,8 @@ namespace Int
theorem zmultiples_natAbs (a : ℤ) :
AddSubgroup.zmultiples (a.natAbs : ℤ) = AddSubgroup.zmultiples a :=
- le_antisymm (AddSubgroup.zmultiples_subset (mem_zmultiples_iff.mpr (dvd_natAbs.mpr (dvd_refl a))))
- (AddSubgroup.zmultiples_subset (mem_zmultiples_iff.mpr (natAbs_dvd.mpr (dvd_refl a))))
+ le_antisymm (AddSubgroup.zmultiples_le_of_mem (mem_zmultiples_iff.mpr (dvd_natAbs.mpr dvd_rfl)))
+ (AddSubgroup.zmultiples_le_of_mem (mem_zmultiples_iff.mpr (natAbs_dvd.mpr dvd_rfl)))
#align int.zmultiples_nat_abs Int.zmultiples_natAbs
theorem span_natAbs (a : ℤ) : Ideal.span ({(a.natAbs : ℤ)} : Set ℤ) = Ideal.span {a} := by
The unported dependencies are