Documentation

CombinatorialGames.Mathlib.Dyadic

Dyadic numbers #

A dyadic (rational) number is a rational number whose denominator is a power of two. We provide the CommRing structure, as well as proving some auxiliary theorems on them.

For Mathlib #

theorem le_of_le_of_lt_of_lt {α : Type u_1} {β : Type u_2} [PartialOrder α] [Preorder β] {x y : α} {f : αβ} (h : x < yf x < f y) (hxy : x y) :
f x f y
theorem Nat.pow_log_eq_self_iff {b n : } (hb : b 0) :
b ^ log b n = n n Set.range fun (x : ) => b ^ x
theorem pos_of_mem_powers {n : } (h : n Submonoid.powers 2) :
0 < n
theorem dvd_iff_le_of_mem_powers {m n : } (hm : m Submonoid.powers 2) (hn : n Submonoid.powers 2) :
m n m n
theorem Dyadic.le_def {x y : Dyadic} :
theorem Dyadic.lt_def {x y : Dyadic} :
x < y x.toRat < y.toRat
@[reducible, inline]
abbrev Dyadic.num (x : Dyadic) :

Numerator of a dyadic number.

Equations
Instances For
    @[reducible, inline]
    abbrev Dyadic.den (x : Dyadic) :

    Denominator of a dyadic number.

    Equations
    Instances For
      theorem Dyadic.den_pos (x : Dyadic) :
      0 < x.den
      @[simp]
      @[simp]
      theorem Dyadic.den_ne_one_of_den_lt {x y : Dyadic} (h : x.den < y.den) :
      y.den 1
      theorem Dyadic.ext {x y : Dyadic} (h : x.toRat = y.toRat) :
      x = y
      theorem Dyadic.ext_iff {x y : Dyadic} :
      x = y x.toRat = y.toRat
      @[simp]
      theorem Dyadic.num_natCast (n : ) :
      (↑n).num = n
      @[simp]
      theorem Dyadic.den_natCast (n : ) :
      (↑n).den = 1
      @[simp]
      theorem Dyadic.val_ofNat (n : ) [n.AtLeastTwo] :
      @[simp]
      theorem Dyadic.num_ofNat (n : ) [n.AtLeastTwo] :
      (OfNat.ofNat n).num = n
      @[simp]
      theorem Dyadic.den_ofNat (n : ) [n.AtLeastTwo] :
      @[simp]
      theorem Dyadic.natCast_lt_val {x : } {y : Dyadic} :
      x < y.toRat x < y
      @[simp]
      theorem Dyadic.natCast_le_val {x : } {y : Dyadic} :
      x y.toRat x y
      @[simp]
      theorem Dyadic.val_lt_natCast {x : Dyadic} {y : } :
      x.toRat < y x < y
      @[simp]
      theorem Dyadic.val_le_natCast {x : Dyadic} {y : } :
      x.toRat y x y
      @[simp]
      theorem Dyadic.val_eq_natCast {x : Dyadic} {y : } :
      x.toRat = y x = y
      @[simp]
      theorem Dyadic.natCast_eq_val {x : } {y : Dyadic} :
      x = y.toRat x = y
      @[simp]
      theorem Dyadic.num_intCast (n : ) :
      (↑n).num = n
      @[simp]
      theorem Dyadic.den_intCast (n : ) :
      (↑n).den = 1
      @[simp]
      theorem Dyadic.intCast_lt_val {x : } {y : Dyadic} :
      x < y.toRat x < y
      @[simp]
      theorem Dyadic.intCast_le_val {x : } {y : Dyadic} :
      x y.toRat x y
      @[simp]
      theorem Dyadic.val_lt_intCast {x : Dyadic} {y : } :
      x.toRat < y x < y
      @[simp]
      theorem Dyadic.val_le_intCast {x : Dyadic} {y : } :
      x.toRat y x y
      @[simp]
      theorem Dyadic.val_eq_intCast {x : Dyadic} {y : } :
      x.toRat = y x = y
      @[simp]
      theorem Dyadic.intCast_eq_val {x : } {y : Dyadic} :
      x = y.toRat x = y
      @[simp]
      theorem Dyadic.val_zero :
      toRat 0 = 0
      @[simp]
      theorem Dyadic.num_zero :
      num 0 = 0
      @[simp]
      theorem Dyadic.den_zero :
      den 0 = 1
      @[simp]
      theorem Dyadic.zero_lt_val {x : Dyadic} :
      0 < x.toRat 0 < x
      @[simp]
      theorem Dyadic.zero_le_val {x : Dyadic} :
      0 x.toRat 0 x
      @[simp]
      theorem Dyadic.val_lt_zero {x : Dyadic} :
      x.toRat < 0 x < 0
      @[simp]
      theorem Dyadic.val_le_zero {x : Dyadic} :
      x.toRat 0 x 0
      @[simp]
      theorem Dyadic.val_eq_zero {x : Dyadic} :
      x.toRat = 0 x = 0
      @[simp]
      theorem Dyadic.zero_eq_val {x : Dyadic} :
      0 = x.toRat 0 = x
      @[simp]
      theorem Dyadic.val_one :
      toRat 1 = 1
      @[simp]
      theorem Dyadic.num_one :
      num 1 = 1
      @[simp]
      theorem Dyadic.den_one :
      den 1 = 1
      @[simp]
      theorem Dyadic.one_lt_val {x : Dyadic} :
      1 < x.toRat 1 < x
      @[simp]
      theorem Dyadic.one_le_val {x : Dyadic} :
      1 x.toRat 1 x
      @[simp]
      theorem Dyadic.val_lt_one {x : Dyadic} :
      x.toRat < 1 x < 1
      @[simp]
      theorem Dyadic.val_le_one {x : Dyadic} :
      x.toRat 1 x 1
      @[simp]
      theorem Dyadic.val_eq_one {x : Dyadic} :
      x.toRat = 1 x = 1
      @[simp]
      theorem Dyadic.one_eq_val {x : Dyadic} :
      1 = x.toRat 1 = x
      @[simp]
      theorem Dyadic.num_neg (x : Dyadic) :
      (-x).num = -x.num
      @[simp]
      theorem Dyadic.den_neg (x : Dyadic) :
      (-x).den = x.den
      @[simp]
      theorem Dyadic.val_nsmul (x : ) (y : Dyadic) :
      (x y).toRat = x y.toRat
      @[simp]
      theorem Dyadic.val_zsmul (x : ) (y : Dyadic) :
      (x y).toRat = x y.toRat

      The dyadic number ½.

      Equations
      Instances For
        @[simp]
        @[simp]
        def Dyadic.mkRat (m : ) {n : } (h : n Submonoid.powers 2) :

        Constructor for the fraction m / n.

        Equations
        Instances For
          @[simp]
          theorem Dyadic.val_mkRat (m : ) {n : } (h : n Submonoid.powers 2) :
          @[simp]
          theorem Dyadic.mkRat_self (x : Dyadic) :
          @[simp]
          theorem Dyadic.mkRat_one (m : ) (h : 1 Submonoid.powers 2) :
          Dyadic.mkRat m h = m
          @[simp]
          theorem Dyadic.mkRat_lt_mkRat {m n : } {k : } (h₁ h₂ : k Submonoid.powers 2) :
          Dyadic.mkRat m h₁ < Dyadic.mkRat n h₂ m < n
          Equations
          • One or more equations did not get rendered due to their size.
          @[simp]
          theorem Dyadic.mkRat_le_mkRat {m n : } {k : } (h₁ h₂ : k Submonoid.powers 2) :
          Dyadic.mkRat m h₁ Dyadic.mkRat n h₂ m n
          theorem Dyadic.mkRat_add_mkRat_self {m n : } {k : } (h₁ h₂ : k Submonoid.powers 2) :
          Dyadic.mkRat m h₁ + Dyadic.mkRat n h₂ = Dyadic.mkRat (m + n) h₁
          Equations
          • One or more equations did not get rendered due to their size.
          theorem Dyadic.even_den {x : Dyadic} (hx : x.den 1) :
          theorem Dyadic.odd_num {x : Dyadic} (hx : x.den 1) :
          theorem Dyadic.den_mkRat_le (x : ) {n : } (hn : n 0) :
          (mkRat x n).den n
          theorem Dyadic.den_mkRat_lt {x : Dyadic} {n : } (hn : 2 n) (hd : x.den 1) :
          (mkRat n x.den).den < x.den
          theorem Dyadic.den_add_self_lt {x : Dyadic} (hx : x.den 1) :
          (x + x).den < x.den
          theorem Dyadic.eq_mkRat_of_den_le {x : Dyadic} {n : } (h : x.den n) (hn : n Submonoid.powers 2) :
          ∃ (m : ), x = Dyadic.mkRat m hn
          theorem Dyadic.den_add_le_den_right {x y : Dyadic} (h : x.den y.den) :
          (x + y).den y.den

          Coercion as a RingHom.

          Equations
          Instances For