Basics for the Rational Numbers #
Summary #
We define the integral domain structure on ℚ and prove basic lemmas about it.
The definition of the field structure on ℚ will be done in Mathlib/Algebra/Field/Rat.lean
once the Field class has been defined.
Main Definitions #
Rat.divInt n dconstructs a rational numberq = n / dfromn d : ℤ.
Notation #
/.is infix notation forRat.divInt.
@[deprecated Rat.intCast_eq_zero_iff (since := "2025-10-24")]
Alias of Rat.intCast_eq_zero_iff.
@[deprecated Rat.natCast_eq_zero_iff (since := "2025-10-24")]
Alias of Rat.natCast_eq_zero_iff.
@[deprecated Rat.intCast_eq_one_iff (since := "2025-10-24")]
Alias of Rat.intCast_eq_one_iff.
@[deprecated Rat.natCast_eq_one_iff (since := "2025-10-24")]
Alias of Rat.natCast_eq_one_iff.
@[simp]
theorem
Rat.mk'_zero
(d : ℕ)
(h : d ≠ 0)
(w : (Int.natAbs 0).Coprime d)
:
{ num := 0, den := d, den_nz := h, reduced := w } = 0
theorem
Rat.lift_binop_eq
(f : ℚ → ℚ → ℚ)
(f₁ f₂ : ℤ → ℤ → ℤ → ℤ → ℤ)
(fv :
∀ {n₁ : ℤ} {d₁ : ℕ} {h₁ : d₁ ≠ 0} {c₁ : n₁.natAbs.Coprime d₁} {n₂ : ℤ} {d₂ : ℕ} {h₂ : d₂ ≠ 0}
{c₂ : n₂.natAbs.Coprime d₂},
f { num := n₁, den := d₁, den_nz := h₁, reduced := c₁ } { num := n₂, den := d₂, den_nz := h₂, reduced := c₂ } = divInt (f₁ n₁ (↑d₁) n₂ ↑d₂) (f₂ n₁ (↑d₁) n₂ ↑d₂))
(f0 : ∀ {n₁ d₁ n₂ d₂ : ℤ}, d₁ ≠ 0 → d₂ ≠ 0 → f₂ n₁ d₁ n₂ d₂ ≠ 0)
(a b c d : ℤ)
(b0 : b ≠ 0)
(d0 : d ≠ 0)
(H : ∀ {n₁ d₁ n₂ d₂ : ℤ}, a * d₁ = n₁ * b → c * d₂ = n₂ * d → f₁ n₁ d₁ n₂ d₂ * f₂ a b c d = f₁ a b c d * f₂ n₁ d₁ n₂ d₂)
:
f (divInt a b) (divInt c d) = divInt (f₁ a b c d) (f₂ a b c d)
theorem
Rat.mk'_mul_mk'
(n₁ n₂ : ℤ)
(d₁ d₂ : ℕ)
(hd₁ : d₁ ≠ 0)
(hd₂ : d₂ ≠ 0)
(hnd₁ : n₁.natAbs.Coprime d₁)
(hnd₂ : n₂.natAbs.Coprime d₂)
(h₁₂ : n₁.natAbs.Coprime d₂)
(h₂₁ : n₂.natAbs.Coprime d₁)
:
{ num := n₁, den := d₁, den_nz := hd₁, reduced := hnd₁ } * { num := n₂, den := d₂, den_nz := hd₂, reduced := hnd₂ } = { num := n₁ * n₂, den := d₁ * d₂, den_nz := ⋯, reduced := ⋯ }
@[simp]
theorem
Rat.mk'_pow
(num : ℤ)
(den : ℕ)
(hd : den ≠ 0)
(hdn : num.natAbs.Coprime den)
(n : ℕ)
:
{ num := num, den := den, den_nz := hd, reduced := hdn } ^ n = { num := num ^ n, den := den ^ n, den_nz := ⋯, reduced := ⋯ }
@[simp]
theorem
Rat.divInt_div_divInt
(n₁ d₁ n₂ d₂ : ℤ)
:
divInt n₁ d₁ / divInt n₂ d₂ = divInt (n₁ * d₂) (d₁ * n₂)
The rational numbers are a group #
@[implicit_reducible]
@[implicit_reducible]
theorem
Rat.mk_denom_ne_zero_of_ne_zero
{q : ℚ}
{n d : ℤ}
(hq : q ≠ 0)
(hqnd : q = divInt n d)
:
d ≠ 0
theorem
Rat.divInt_mul_divInt_cancel
{x : ℤ}
(hx : x ≠ 0)
(n d : ℤ)
:
divInt n x * divInt x d = divInt n d
def
Rat.divCasesOn
{C : ℚ → Sort u_1}
(a : ℚ)
(div : (n : ℤ) → (d : ℕ) → d ≠ 0 → n.natAbs.Coprime d → C (↑n / ↑d))
:
C a
A version of Rat.casesOn that uses / instead of Rat.mk'. Use as
cases r with
| div p q nonzero coprime =>