File: Mathlib/SetTheory/Surreal/Dyadic.lean

full_name: SetTheory.PGame.powHalf
code: /-- For a natural number `n`, the pre-game `powHalf (n + 1)` is recursively defined as
`{0 | powHalf n}`. These are the explicit expressions of powers of `1 / 2`. By definition, we have
`powHalf 0 = 1` and `powHalf 1 ≈ 1 / 2` and we prove later on that
`powHalf (n + 1) + powHalf (n + 1) ≈ powHalf n`. -/
def powHalf : ℕ → PGame
  
goal: ℕ → SetTheory.PGame

full_name: SetTheory.PGame.powHalf_zero
code: @[simp]
theorem powHalf_zero : powHalf 0 = 1 
goal: SetTheory.PGame.powHalf 0 = 1

full_name: SetTheory.PGame.powHalf_leftMoves
code: theorem powHalf_leftMoves (n) : (powHalf n).LeftMoves = PUnit 
goal: (SetTheory.PGame.powHalf n).LeftMoves = PUnit.{u_1 + 1}

full_name: SetTheory.PGame.powHalf_zero_rightMoves
code: theorem powHalf_zero_rightMoves : (powHalf 0).RightMoves = PEmpty 
goal: (SetTheory.PGame.powHalf 0).RightMoves = PEmpty.{u_1 + 1}

full_name: SetTheory.PGame.powHalf_succ_rightMoves
code: theorem powHalf_succ_rightMoves (n) : (powHalf (n + 1)).RightMoves = PUnit 
goal: (SetTheory.PGame.powHalf (n + 1)).RightMoves = PUnit.{u_1 + 1}

full_name: SetTheory.PGame.powHalf_moveLeft
code: @[simp]
theorem powHalf_moveLeft (n i) : (powHalf n).moveLeft i = 0 
goal: (SetTheory.PGame.powHalf n).moveLeft i = 0

full_name: SetTheory.PGame.powHalf_succ_moveRight
code: @[simp]
theorem powHalf_succ_moveRight (n i) : (powHalf (n + 1)).moveRight i = powHalf n 
goal: (SetTheory.PGame.powHalf (n + 1)).moveRight i = SetTheory.PGame.powHalf n

full_name: SetTheory.PGame.uniquePowHalfLeftMoves
code: instance uniquePowHalfLeftMoves (n) : Unique (powHalf n).LeftMoves 
goal: Unique (SetTheory.PGame.powHalf n).LeftMoves

full_name: SetTheory.PGame.isEmpty_powHalf_zero_rightMoves
code: instance isEmpty_powHalf_zero_rightMoves : IsEmpty (powHalf 0).RightMoves 
goal: IsEmpty (SetTheory.PGame.powHalf 0).RightMoves

full_name: SetTheory.PGame.uniquePowHalfSuccRightMoves
code: instance uniquePowHalfSuccRightMoves (n) : Unique (powHalf (n + 1)).RightMoves 
goal: Unique (SetTheory.PGame.powHalf (n + 1)).RightMoves

full_name: SetTheory.PGame.birthday_half
code: @[simp]
theorem birthday_half : birthday (powHalf 1) = 2 
goal: (SetTheory.PGame.powHalf 1).birthday = 2

full_name: SetTheory.PGame.numeric_powHalf
code: /-- For all natural numbers `n`, the pre-games `powHalf n` are numeric. -/
theorem numeric_powHalf (n) : (powHalf n).Numeric 
goal: (SetTheory.PGame.powHalf n).Numeric

full_name: SetTheory.PGame.powHalf_succ_lt_powHalf
code: theorem powHalf_succ_lt_powHalf (n : ℕ) : powHalf (n + 1) < powHalf n 
goal: SetTheory.PGame.powHalf (n + 1) < SetTheory.PGame.powHalf n

full_name: SetTheory.PGame.powHalf_succ_le_powHalf
code: theorem powHalf_succ_le_powHalf (n : ℕ) : powHalf (n + 1) ≤ powHalf n 
goal: SetTheory.PGame.powHalf (n + 1) ≤ SetTheory.PGame.powHalf n

full_name: SetTheory.PGame.powHalf_le_one
code: theorem powHalf_le_one (n : ℕ) : powHalf n ≤ 1 
goal: SetTheory.PGame.powHalf n ≤ 1

full_name: SetTheory.PGame.powHalf_succ_lt_one
code: theorem powHalf_succ_lt_one (n : ℕ) : powHalf (n + 1) < 1 
goal: SetTheory.PGame.powHalf (n + 1) < 1

full_name: SetTheory.PGame.powHalf_pos
code: theorem powHalf_pos (n : ℕ) : 0 < powHalf n 
goal: 0 < SetTheory.PGame.powHalf n

full_name: SetTheory.PGame.zero_le_powHalf
code: theorem zero_le_powHalf (n : ℕ) : 0 ≤ powHalf n 
goal: 0 ≤ SetTheory.PGame.powHalf n

full_name: SetTheory.PGame.add_powHalf_succ_self_eq_powHalf
code: theorem add_powHalf_succ_self_eq_powHalf (n) : powHalf (n + 1) + powHalf (n + 1) ≈ powHalf n 
goal: SetTheory.PGame.powHalf (n + 1) + SetTheory.PGame.powHalf (n + 1) ≈ SetTheory.PGame.powHalf n

full_name: SetTheory.PGame.half_add_half_equiv_one
code: theorem half_add_half_equiv_one : powHalf 1 + powHalf 1 ≈ 1 
goal: SetTheory.PGame.powHalf 1 + SetTheory.PGame.powHalf 1 ≈ 1

full_name: Surreal.powHalf
code: /-- Powers of the surreal number `half`. -/
def powHalf (n : ℕ) : Surreal 
goal: Surreal

full_name: Surreal.powHalf_zero
code: @[simp]
theorem powHalf_zero : powHalf 0 = 1 
goal: Surreal.powHalf 0 = 1

full_name: Surreal.double_powHalf_succ_eq_powHalf
code: @[simp]
theorem double_powHalf_succ_eq_powHalf (n : ℕ) : 2 * powHalf (n + 1) = powHalf n 
goal: 2 * Surreal.powHalf (n + 1) = Surreal.powHalf n

full_name: Surreal.nsmul_pow_two_powHalf
code: @[simp]
theorem nsmul_pow_two_powHalf (n : ℕ) : 2 ^ n * powHalf n = 1 
goal: 2 ^ n * Surreal.powHalf n = 1

full_name: Surreal.nsmul_pow_two_powHalf'
code: @[simp]
theorem nsmul_pow_two_powHalf' (n k : ℕ) : 2 ^ n * powHalf (n + k) = powHalf k 
goal: 2 ^ n * Surreal.powHalf (n + k) = Surreal.powHalf k

full_name: Surreal.zsmul_pow_two_powHalf
code: theorem zsmul_pow_two_powHalf (m : ℤ) (n k : ℕ) :
    (m * 2 ^ n) * powHalf (n + k) = m * powHalf k 
goal: ↑m * 2 ^ n * Surreal.powHalf (n + k) = ↑m * Surreal.powHalf k

full_name: Surreal.dyadic_aux
code: theorem dyadic_aux {m₁ m₂ : ℤ} {y₁ y₂ : ℕ} (h₂ : m₁ * 2 ^ y₁ = m₂ * 2 ^ y₂) :
    m₁ * powHalf y₂ = m₂ * powHalf y₁ 
goal: ↑m₁ * Surreal.powHalf y₂ = ↑m₂ * Surreal.powHalf y₁

full_name: Surreal.dyadicMap
code: /-- The additive monoid morphism `dyadicMap` sends ⟦⟨m, 2^n⟩⟧ to m • half ^ n. -/
noncomputable def dyadicMap : Localization.Away (2 : ℤ) →+ Surreal 
goal: Localization.Away 2 →+ Surreal

full_name: Surreal.dyadicMap_apply
code: @[simp]
theorem dyadicMap_apply (m : ℤ) (p : Submonoid.powers (2 : ℤ)) :
    dyadicMap (IsLocalization.mk' (Localization (Submonoid.powers 2)) m p) =
      m * powHalf (Submonoid.log p) 
goal: Surreal.dyadicMap (IsLocalization.mk' (Localization (Submonoid.powers 2)) m p) = ↑m * Surreal.powHalf (Submonoid.log p)

full_name: Surreal.dyadicMap_apply_pow
code: theorem dyadicMap_apply_pow (m : ℤ) (n : ℕ) :
    dyadicMap (IsLocalization.mk' (Localization (Submonoid.powers 2)) m (Submonoid.pow 2 n)) =
      m • powHalf n 
goal: Surreal.dyadicMap (IsLocalization.mk' (Localization (Submonoid.powers 2)) m (Submonoid.pow 2 n)) = m • Surreal.powHalf n

full_name: Surreal.dyadicMap_apply_pow'
code: @[simp]
theorem dyadicMap_apply_pow' (m : ℤ) (n : ℕ) :
    m * Surreal.powHalf (Submonoid.log (Submonoid.pow (2 : ℤ) n)) = m * powHalf n 
goal: ↑m * Surreal.powHalf (Submonoid.log (Submonoid.pow 2 n)) = ↑m * Surreal.powHalf n

full_name: Surreal.dyadic
code: /-- We define dyadic surreals as the range of the map `dyadicMap`. -/
def dyadic : Set Surreal 
goal: Set Surreal