/-
Copyright 2025 The Formal Conjectures Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
https://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-/
module
public import FormalConjecturesUtilEquidistributed Sequences
Corollary 4.2 of Chapter 1 states that the sequence $(x^n), n = 1, 2, ... ,$ is equidistributed modulo 1 for almost all x > 1. And a little bit further down: "one does not know whether sequences such as $(e^n)$, $(π^n)$, or even $((\frac 3 2)^n)$" are equidistributed modulo 1 or not.
References:
Uniform Distribution of Sequences by L. Kuipers and H. Niederreiter, 1974
[Mat80] de Mathan, Bernard. "Numbers contravening a condition in density modulo 1." Acta Mathematica Hungarica 36.3-4 (1980): 237-241.
[Pol79] Pollington, Andrew Douglas. "On the density of sequence ${n_ {k}\xi} $." Illinois Journal of Mathematics 23.4 (1979): 511-515.
@[expose] public sectionnamespace Equidistributionopen scoped Topology
A point x is an accumulation point of a sequence s_0, s_1, ...
if any neighbourhood of x contains a point of the sequence distinct
from x.
def IsAccumulationPoint (x : ℝ) (s : ℕ → ℝ) : Prop :=
x ∈ closure (Set.range s \ {x})
If a point x is an accumulation point of a sequence s_0, s_1, ... then
there is a subsequence of s that tends to x
x:ℝs:ℕ → ℝhx:IsAccumulationPoint x sU:Set ℝhU:U ∈ 𝓝 xN:ℕhcon:∀ (b : ℕ), N ≤ b → s b ∉ UhV:U ∩ ⋂ n ∈ Finset.range N, {y | s n ≠ x → y ≠ s n} ∈ 𝓝 xn:ℕhyU:s n ∈ UhyI:∀ i ∈ Finset.range N, s n ∈ {y | s i ≠ x → y ≠ s i}hyx:s n ∉ {x}⊢ False
rcases Nat.lt_or_ge n N with hn | hn inl x:ℝs:ℕ → ℝhx:IsAccumulationPoint x sU:Set ℝhU:U ∈ 𝓝 xN:ℕhcon:∀ (b : ℕ), N ≤ b → s b ∉ UhV:U ∩ ⋂ n ∈ Finset.range N, {y | s n ≠ x → y ≠ s n} ∈ 𝓝 xn:ℕhyU:s n ∈ UhyI:∀ i ∈ Finset.range N, s n ∈ {y | s i ≠ x → y ≠ s i}hyx:s n ∉ {x}hn:n < N⊢ Falseinr x:ℝs:ℕ → ℝhx:IsAccumulationPoint x sU:Set ℝhU:U ∈ 𝓝 xN:ℕhcon:∀ (b : ℕ), N ≤ b → s b ∉ UhV:U ∩ ⋂ n ∈ Finset.range N, {y | s n ≠ x → y ≠ s n} ∈ 𝓝 xn:ℕhyU:s n ∈ UhyI:∀ i ∈ Finset.range N, s n ∈ {y | s i ≠ x → y ≠ s i}hyx:s n ∉ {x}hn:n ≥ N⊢ False
· inl x:ℝs:ℕ → ℝhx:IsAccumulationPoint x sU:Set ℝhU:U ∈ 𝓝 xN:ℕhcon:∀ (b : ℕ), N ≤ b → s b ∉ UhV:U ∩ ⋂ n ∈ Finset.range N, {y | s n ≠ x → y ≠ s n} ∈ 𝓝 xn:ℕhyU:s n ∈ UhyI:∀ i ∈ Finset.range N, s n ∈ {y | s i ≠ x → y ≠ s i}hyx:s n ∉ {x}hn:n < N⊢ False exact hyI n (Finset.mem_range.2 hn) hyx rfl All goals completed! 🐙
· inr x:ℝs:ℕ → ℝhx:IsAccumulationPoint x sU:Set ℝhU:U ∈ 𝓝 xN:ℕhcon:∀ (b : ℕ), N ≤ b → s b ∉ UhV:U ∩ ⋂ n ∈ Finset.range N, {y | s n ≠ x → y ≠ s n} ∈ 𝓝 xn:ℕhyU:s n ∈ UhyI:∀ i ∈ Finset.range N, s n ∈ {y | s i ≠ x → y ≠ s i}hyx:s n ∉ {x}hn:n ≥ N⊢ False exact hcon n hn hyU All goals completed! 🐙
The sequence (3/2)^n is equidistributed modulo 1.
@[category research open, AMS 11]
theorem isEquidistributedModuloOne_three_halves_pow :
IsEquidistributedModuloOne (fun n => (3 / 2 : ℝ)^n) := by ⊢ IsEquidistributedModuloOne fun n ↦ (3 / 2) ^ n
sorry All goals completed! 🐙
It is not true that for every transcendental number x the sequence x * (3 / 2) ^ n is
equidistributed modulo 1. The sequence (3 / 2) ^ n is lacunary, so by the theorem of
Pollington [Pol79] and de Mathan [Mat80] the set of real numbers x for which x * (3 / 2) ^ n
is not even dense modulo 1 has Hausdorff dimension 1. This set is uncountable, so it contains
transcendental numbers. Alternatively, an elementary nested-interval construction (see issue
#5003) gives a Cantor set of x with Int.fract (x * (3 / 2) ^ (8 * j)) ∈ [0, 1 / 10] for all
j, which already rules out equidistribution for uncountably many, hence some transcendental,
x. By Koksma's metric theorem (Kuipers–Niederreiter, Chapter 1, Section 4), the sequence
x * (3 / 2) ^ n is equidistributed modulo 1 for almost all x.
@[category research solved, AMS 11]
theorem isEquidistributedModuloOne_transcendental_three_halves_pow :
¬ ∀ x : ℝ, Transcendental ℚ x →
IsEquidistributedModuloOne (fun n ↦ x * (3 / 2 : ℝ) ^ n) := by ⊢ ¬∀ (x : ℝ), Transcendental ℚ x → IsEquidistributedModuloOne fun n ↦ x * (3 / 2) ^ n
sorry All goals completed! 🐙
The sequence (3/2)^n has infinitely many accumulation points modulo 1.
@[category research solved, AMS 11]
theorem isAccumulationPoint_three_halves_pow_infinite :
{x | IsAccumulationPoint x (fun n => Int.fract <| (3 / 2 : ℝ)^n)}.Infinite := by ⊢ {x | IsAccumulationPoint x fun n ↦ Int.fract ((3 / 2) ^ n)}.Infinite
sorry All goals completed! 🐙
Find an accumulation point of the sequence (3/2)^n modulo 1.
@[category research open, AMS 11]
theorem isAccumulationPoint_three_halves_pow :
IsAccumulationPoint answer(sorry) (fun n => Int.fract <| (3 / 2 : ℝ)^n) := by ⊢ IsAccumulationPoint sorry fun n ↦ Int.fract ((3 / 2) ^ n)
sorry All goals completed! 🐙
The values of (3/2)^n modulo 1 are pairwise distinct: if (3/2)^n - (3/2)^m were an
integer for m < n, then 3^n - 3^m * 2^(n - m) would be even.
@[category API, AMS 11]
theorem fract_three_halves_pow_injective :
Function.Injective fun n : ℕ => Int.fract ((3 / 2 : ℝ) ^ n) := by ⊢ Function.Injective fun n ↦ Int.fract ((3 / 2) ^ n)
intro n m hnm n:ℕm:ℕhnm:(fun n ↦ Int.fract ((3 / 2) ^ n)) n = (fun n ↦ Int.fract ((3 / 2) ^ n)) m⊢ n = m
by_contra hne n:ℕm:ℕhnm:(fun n ↦ Int.fract ((3 / 2) ^ n)) n = (fun n ↦ Int.fract ((3 / 2) ^ n)) mhne:¬n = m⊢ False
wlog hlt : m < n generalizing n m inr n:ℕm:ℕhnm:(fun n ↦ Int.fract ((3 / 2) ^ n)) n = (fun n ↦ Int.fract ((3 / 2) ^ n)) mhne:¬n = mthis:∀ ⦃n m : ℕ⦄, (fun n ↦ Int.fract ((3 / 2) ^ n)) n = (fun n ↦ Int.fract ((3 / 2) ^ n)) m → ¬n = m → m < n → Falsehlt:¬m < n⊢ Falsen:ℕm:ℕhnm:(fun n ↦ Int.fract ((3 / 2) ^ n)) n = (fun n ↦ Int.fract ((3 / 2) ^ n)) mhne:¬n = mhlt:m < n⊢ False
· inr n:ℕm:ℕhnm:(fun n ↦ Int.fract ((3 / 2) ^ n)) n = (fun n ↦ Int.fract ((3 / 2) ^ n)) mhne:¬n = mthis:∀ ⦃n m : ℕ⦄, (fun n ↦ Int.fract ((3 / 2) ^ n)) n = (fun n ↦ Int.fract ((3 / 2) ^ n)) m → ¬n = m → m < n → Falsehlt:¬m < n⊢ False exact this hnm.symm (Ne.symm hne) (lt_of_le_of_ne (not_lt.1 hlt) hne) All goals completed! 🐙
obtain ⟨z, hz⟩ := Int.fract_eq_fract.1 hnm n:ℕm:ℕhnm:(fun n ↦ Int.fract ((3 / 2) ^ n)) n = (fun n ↦ Int.fract ((3 / 2) ^ n)) mhne:¬n = mhlt:m < nz:ℤhz:(3 / 2) ^ n - (3 / 2) ^ m = ↑z⊢ False
have h2 : (2 : ℝ) ^ n ≠ 0 := by ⊢ Function.Injective fun n ↦ Int.fract ((3 / 2) ^ n) n:ℕm:ℕhnm:(fun n ↦ Int.fract ((3 / 2) ^ n)) n = (fun n ↦ Int.fract ((3 / 2) ^ n)) mhne:¬n = mhlt:m < nz:ℤhz:(3 / 2) ^ n - (3 / 2) ^ m = ↑zh2:2 ^ n ≠ 0⊢ False positivity n:ℕm:ℕhnm:(fun n ↦ Int.fract ((3 / 2) ^ n)) n = (fun n ↦ Int.fract ((3 / 2) ^ n)) mhne:¬n = mhlt:m < nz:ℤhz:(3 / 2) ^ n - (3 / 2) ^ m = ↑zh2:2 ^ n ≠ 0⊢ False n:ℕm:ℕhnm:(fun n ↦ Int.fract ((3 / 2) ^ n)) n = (fun n ↦ Int.fract ((3 / 2) ^ n)) mhne:¬n = mhlt:m < nz:ℤhz:(3 / 2) ^ n - (3 / 2) ^ m = ↑zh2:2 ^ n ≠ 0⊢ False
have key : ((3 : ℤ) ^ n - 3 ^ m * 2 ^ (n - m) : ℤ) = z * 2 ^ n := by ⊢ Function.Injective fun n ↦ Int.fract ((3 / 2) ^ n) n:ℕm:ℕhnm:(fun n ↦ Int.fract ((3 / 2) ^ n)) n = (fun n ↦ Int.fract ((3 / 2) ^ n)) mhne:¬n = mhlt:m < nz:ℤhz:(3 / 2) ^ n - (3 / 2) ^ m = ↑zh2:2 ^ n ≠ 0key:3 ^ n - 3 ^ m * 2 ^ (n - m) = z * 2 ^ n⊢ False
have : ((3 : ℝ) ^ n - 3 ^ m * 2 ^ (n - m)) = z * 2 ^ n := by ⊢ Function.Injective fun n ↦ Int.fract ((3 / 2) ^ n) n:ℕm:ℕhnm:(fun n ↦ Int.fract ((3 / 2) ^ n)) n = (fun n ↦ Int.fract ((3 / 2) ^ n)) mhne:¬n = mhlt:m < nz:ℤhz:(3 / 2) ^ n - (3 / 2) ^ m = ↑zh2:2 ^ n ≠ 0this:3 ^ n - 3 ^ m * 2 ^ (n - m) = ↑z * 2 ^ n⊢ 3 ^ n - 3 ^ m * 2 ^ (n - m) = z * 2 ^ n n:ℕm:ℕhnm:(fun n ↦ Int.fract ((3 / 2) ^ n)) n = (fun n ↦ Int.fract ((3 / 2) ^ n)) mhne:¬n = mhlt:m < nz:ℤhz:(3 / 2) ^ n - (3 / 2) ^ m = ↑zh2:2 ^ n ≠ 0key:3 ^ n - 3 ^ m * 2 ^ (n - m) = z * 2 ^ n⊢ False
have hm : (2 : ℝ) ^ n = 2 ^ m * 2 ^ (n - m) := by ⊢ Function.Injective fun n ↦ Int.fract ((3 / 2) ^ n) n:ℕm:ℕhnm:(fun n ↦ Int.fract ((3 / 2) ^ n)) n = (fun n ↦ Int.fract ((3 / 2) ^ n)) mhne:¬n = mhlt:m < nz:ℤhz:(3 / 2) ^ n - (3 / 2) ^ m = ↑zh2:2 ^ n ≠ 0hm:2 ^ n = 2 ^ m * 2 ^ (n - m)⊢ 3 ^ n - 3 ^ m * 2 ^ (n - m) = ↑z * 2 ^ n n:ℕm:ℕhnm:(fun n ↦ Int.fract ((3 / 2) ^ n)) n = (fun n ↦ Int.fract ((3 / 2) ^ n)) mhne:¬n = mhlt:m < nz:ℤhz:(3 / 2) ^ n - (3 / 2) ^ m = ↑zh2:2 ^ n ≠ 0this:3 ^ n - 3 ^ m * 2 ^ (n - m) = ↑z * 2 ^ n⊢ 3 ^ n - 3 ^ m * 2 ^ (n - m) = z * 2 ^ n n:ℕm:ℕhnm:(fun n ↦ Int.fract ((3 / 2) ^ n)) n = (fun n ↦ Int.fract ((3 / 2) ^ n)) mhne:¬n = mhlt:m < nz:ℤhz:(3 / 2) ^ n - (3 / 2) ^ m = ↑zh2:2 ^ n ≠ 0key:3 ^ n - 3 ^ m * 2 ^ (n - m) = z * 2 ^ n⊢ False
rw [← pow_add, n:ℕm:ℕhnm:(fun n ↦ Int.fract ((3 / 2) ^ n)) n = (fun n ↦ Int.fract ((3 / 2) ^ n)) mhne:¬n = mhlt:m < nz:ℤhz:(3 / 2) ^ n - (3 / 2) ^ m = ↑zh2:2 ^ n ≠ 0⊢ 2 ^ n = 2 ^ (m + (n - m)) n:ℕm:ℕhnm:(fun n ↦ Int.fract ((3 / 2) ^ n)) n = (fun n ↦ Int.fract ((3 / 2) ^ n)) mhne:¬n = mhlt:m < nz:ℤhz:(3 / 2) ^ n - (3 / 2) ^ m = ↑zh2:2 ^ n ≠ 0hm:2 ^ n = 2 ^ m * 2 ^ (n - m)⊢ 3 ^ n - 3 ^ m * 2 ^ (n - m) = ↑z * 2 ^ n n:ℕm:ℕhnm:(fun n ↦ Int.fract ((3 / 2) ^ n)) n = (fun n ↦ Int.fract ((3 / 2) ^ n)) mhne:¬n = mhlt:m < nz:ℤhz:(3 / 2) ^ n - (3 / 2) ^ m = ↑zh2:2 ^ n ≠ 0this:3 ^ n - 3 ^ m * 2 ^ (n - m) = ↑z * 2 ^ n⊢ 3 ^ n - 3 ^ m * 2 ^ (n - m) = z * 2 ^ n n:ℕm:ℕhnm:(fun n ↦ Int.fract ((3 / 2) ^ n)) n = (fun n ↦ Int.fract ((3 / 2) ^ n)) mhne:¬n = mhlt:m < nz:ℤhz:(3 / 2) ^ n - (3 / 2) ^ m = ↑zh2:2 ^ n ≠ 0key:3 ^ n - 3 ^ m * 2 ^ (n - m) = z * 2 ^ n⊢ False Nat.add_sub_cancel' hlt.le n:ℕm:ℕhnm:(fun n ↦ Int.fract ((3 / 2) ^ n)) n = (fun n ↦ Int.fract ((3 / 2) ^ n)) mhne:¬n = mhlt:m < nz:ℤhz:(3 / 2) ^ n - (3 / 2) ^ m = ↑zh2:2 ^ n ≠ 0⊢ 2 ^ n = 2 ^ n n:ℕm:ℕhnm:(fun n ↦ Int.fract ((3 / 2) ^ n)) n = (fun n ↦ Int.fract ((3 / 2) ^ n)) mhne:¬n = mhlt:m < nz:ℤhz:(3 / 2) ^ n - (3 / 2) ^ m = ↑zh2:2 ^ n ≠ 0hm:2 ^ n = 2 ^ m * 2 ^ (n - m)⊢ 3 ^ n - 3 ^ m * 2 ^ (n - m) = ↑z * 2 ^ n n:ℕm:ℕhnm:(fun n ↦ Int.fract ((3 / 2) ^ n)) n = (fun n ↦ Int.fract ((3 / 2) ^ n)) mhne:¬n = mhlt:m < nz:ℤhz:(3 / 2) ^ n - (3 / 2) ^ m = ↑zh2:2 ^ n ≠ 0this:3 ^ n - 3 ^ m * 2 ^ (n - m) = ↑z * 2 ^ n⊢ 3 ^ n - 3 ^ m * 2 ^ (n - m) = z * 2 ^ n n:ℕm:ℕhnm:(fun n ↦ Int.fract ((3 / 2) ^ n)) n = (fun n ↦ Int.fract ((3 / 2) ^ n)) mhne:¬n = mhlt:m < nz:ℤhz:(3 / 2) ^ n - (3 / 2) ^ m = ↑zh2:2 ^ n ≠ 0key:3 ^ n - 3 ^ m * 2 ^ (n - m) = z * 2 ^ n⊢ False] n:ℕm:ℕhnm:(fun n ↦ Int.fract ((3 / 2) ^ n)) n = (fun n ↦ Int.fract ((3 / 2) ^ n)) mhne:¬n = mhlt:m < nz:ℤhz:(3 / 2) ^ n - (3 / 2) ^ m = ↑zh2:2 ^ n ≠ 0hm:2 ^ n = 2 ^ m * 2 ^ (n - m)⊢ 3 ^ n - 3 ^ m * 2 ^ (n - m) = ↑z * 2 ^ n n:ℕm:ℕhnm:(fun n ↦ Int.fract ((3 / 2) ^ n)) n = (fun n ↦ Int.fract ((3 / 2) ^ n)) mhne:¬n = mhlt:m < nz:ℤhz:(3 / 2) ^ n - (3 / 2) ^ m = ↑zh2:2 ^ n ≠ 0this:3 ^ n - 3 ^ m * 2 ^ (n - m) = ↑z * 2 ^ n⊢ 3 ^ n - 3 ^ m * 2 ^ (n - m) = z * 2 ^ n n:ℕm:ℕhnm:(fun n ↦ Int.fract ((3 / 2) ^ n)) n = (fun n ↦ Int.fract ((3 / 2) ^ n)) mhne:¬n = mhlt:m < nz:ℤhz:(3 / 2) ^ n - (3 / 2) ^ m = ↑zh2:2 ^ n ≠ 0key:3 ^ n - 3 ^ m * 2 ^ (n - m) = z * 2 ^ n⊢ False n:ℕm:ℕhnm:(fun n ↦ Int.fract ((3 / 2) ^ n)) n = (fun n ↦ Int.fract ((3 / 2) ^ n)) mhne:¬n = mhlt:m < nz:ℤhz:(3 / 2) ^ n - (3 / 2) ^ m = ↑zh2:2 ^ n ≠ 0hm:2 ^ n = 2 ^ m * 2 ^ (n - m)⊢ 3 ^ n - 3 ^ m * 2 ^ (n - m) = ↑z * 2 ^ n n:ℕm:ℕhnm:(fun n ↦ Int.fract ((3 / 2) ^ n)) n = (fun n ↦ Int.fract ((3 / 2) ^ n)) mhne:¬n = mhlt:m < nz:ℤhz:(3 / 2) ^ n - (3 / 2) ^ m = ↑zh2:2 ^ n ≠ 0this:3 ^ n - 3 ^ m * 2 ^ (n - m) = ↑z * 2 ^ n⊢ 3 ^ n - 3 ^ m * 2 ^ (n - m) = z * 2 ^ n n:ℕm:ℕhnm:(fun n ↦ Int.fract ((3 / 2) ^ n)) n = (fun n ↦ Int.fract ((3 / 2) ^ n)) mhne:¬n = mhlt:m < nz:ℤhz:(3 / 2) ^ n - (3 / 2) ^ m = ↑zh2:2 ^ n ≠ 0key:3 ^ n - 3 ^ m * 2 ^ (n - m) = z * 2 ^ n⊢ False
have e1 : (3 / 2 : ℝ) ^ n * 2 ^ n = 3 ^ n := by ⊢ Function.Injective fun n ↦ Int.fract ((3 / 2) ^ n) n:ℕm:ℕhnm:(fun n ↦ Int.fract ((3 / 2) ^ n)) n = (fun n ↦ Int.fract ((3 / 2) ^ n)) mhne:¬n = mhlt:m < nz:ℤhz:(3 / 2) ^ n - (3 / 2) ^ m = ↑zh2:2 ^ n ≠ 0hm:2 ^ n = 2 ^ m * 2 ^ (n - m)e1:(3 / 2) ^ n * 2 ^ n = 3 ^ n⊢ 3 ^ n - 3 ^ m * 2 ^ (n - m) = ↑z * 2 ^ n n:ℕm:ℕhnm:(fun n ↦ Int.fract ((3 / 2) ^ n)) n = (fun n ↦ Int.fract ((3 / 2) ^ n)) mhne:¬n = mhlt:m < nz:ℤhz:(3 / 2) ^ n - (3 / 2) ^ m = ↑zh2:2 ^ n ≠ 0this:3 ^ n - 3 ^ m * 2 ^ (n - m) = ↑z * 2 ^ n⊢ 3 ^ n - 3 ^ m * 2 ^ (n - m) = z * 2 ^ n n:ℕm:ℕhnm:(fun n ↦ Int.fract ((3 / 2) ^ n)) n = (fun n ↦ Int.fract ((3 / 2) ^ n)) mhne:¬n = mhlt:m < nz:ℤhz:(3 / 2) ^ n - (3 / 2) ^ m = ↑zh2:2 ^ n ≠ 0key:3 ^ n - 3 ^ m * 2 ^ (n - m) = z * 2 ^ n⊢ False
rw [div_pow, n:ℕm:ℕhnm:(fun n ↦ Int.fract ((3 / 2) ^ n)) n = (fun n ↦ Int.fract ((3 / 2) ^ n)) mhne:¬n = mhlt:m < nz:ℤhz:(3 / 2) ^ n - (3 / 2) ^ m = ↑zh2:2 ^ n ≠ 0hm:2 ^ n = 2 ^ m * 2 ^ (n - m)⊢ 3 ^ n / 2 ^ n * 2 ^ n = 3 ^ n n:ℕm:ℕhnm:(fun n ↦ Int.fract ((3 / 2) ^ n)) n = (fun n ↦ Int.fract ((3 / 2) ^ n)) mhne:¬n = mhlt:m < nz:ℤhz:(3 / 2) ^ n - (3 / 2) ^ m = ↑zh2:2 ^ n ≠ 0hm:2 ^ n = 2 ^ m * 2 ^ (n - m)e1:(3 / 2) ^ n * 2 ^ n = 3 ^ n⊢ 3 ^ n - 3 ^ m * 2 ^ (n - m) = ↑z * 2 ^ n n:ℕm:ℕhnm:(fun n ↦ Int.fract ((3 / 2) ^ n)) n = (fun n ↦ Int.fract ((3 / 2) ^ n)) mhne:¬n = mhlt:m < nz:ℤhz:(3 / 2) ^ n - (3 / 2) ^ m = ↑zh2:2 ^ n ≠ 0this:3 ^ n - 3 ^ m * 2 ^ (n - m) = ↑z * 2 ^ n⊢ 3 ^ n - 3 ^ m * 2 ^ (n - m) = z * 2 ^ n n:ℕm:ℕhnm:(fun n ↦ Int.fract ((3 / 2) ^ n)) n = (fun n ↦ Int.fract ((3 / 2) ^ n)) mhne:¬n = mhlt:m < nz:ℤhz:(3 / 2) ^ n - (3 / 2) ^ m = ↑zh2:2 ^ n ≠ 0key:3 ^ n - 3 ^ m * 2 ^ (n - m) = z * 2 ^ n⊢ False div_mul_cancel₀ _ h2 n:ℕm:ℕhnm:(fun n ↦ Int.fract ((3 / 2) ^ n)) n = (fun n ↦ Int.fract ((3 / 2) ^ n)) mhne:¬n = mhlt:m < nz:ℤhz:(3 / 2) ^ n - (3 / 2) ^ m = ↑zh2:2 ^ n ≠ 0hm:2 ^ n = 2 ^ m * 2 ^ (n - m)⊢ 3 ^ n = 3 ^ n n:ℕm:ℕhnm:(fun n ↦ Int.fract ((3 / 2) ^ n)) n = (fun n ↦ Int.fract ((3 / 2) ^ n)) mhne:¬n = mhlt:m < nz:ℤhz:(3 / 2) ^ n - (3 / 2) ^ m = ↑zh2:2 ^ n ≠ 0hm:2 ^ n = 2 ^ m * 2 ^ (n - m)e1:(3 / 2) ^ n * 2 ^ n = 3 ^ n⊢ 3 ^ n - 3 ^ m * 2 ^ (n - m) = ↑z * 2 ^ n n:ℕm:ℕhnm:(fun n ↦ Int.fract ((3 / 2) ^ n)) n = (fun n ↦ Int.fract ((3 / 2) ^ n)) mhne:¬n = mhlt:m < nz:ℤhz:(3 / 2) ^ n - (3 / 2) ^ m = ↑zh2:2 ^ n ≠ 0this:3 ^ n - 3 ^ m * 2 ^ (n - m) = ↑z * 2 ^ n⊢ 3 ^ n - 3 ^ m * 2 ^ (n - m) = z * 2 ^ n n:ℕm:ℕhnm:(fun n ↦ Int.fract ((3 / 2) ^ n)) n = (fun n ↦ Int.fract ((3 / 2) ^ n)) mhne:¬n = mhlt:m < nz:ℤhz:(3 / 2) ^ n - (3 / 2) ^ m = ↑zh2:2 ^ n ≠ 0key:3 ^ n - 3 ^ m * 2 ^ (n - m) = z * 2 ^ n⊢ False] n:ℕm:ℕhnm:(fun n ↦ Int.fract ((3 / 2) ^ n)) n = (fun n ↦ Int.fract ((3 / 2) ^ n)) mhne:¬n = mhlt:m < nz:ℤhz:(3 / 2) ^ n - (3 / 2) ^ m = ↑zh2:2 ^ n ≠ 0hm:2 ^ n = 2 ^ m * 2 ^ (n - m)e1:(3 / 2) ^ n * 2 ^ n = 3 ^ n⊢ 3 ^ n - 3 ^ m * 2 ^ (n - m) = ↑z * 2 ^ n n:ℕm:ℕhnm:(fun n ↦ Int.fract ((3 / 2) ^ n)) n = (fun n ↦ Int.fract ((3 / 2) ^ n)) mhne:¬n = mhlt:m < nz:ℤhz:(3 / 2) ^ n - (3 / 2) ^ m = ↑zh2:2 ^ n ≠ 0this:3 ^ n - 3 ^ m * 2 ^ (n - m) = ↑z * 2 ^ n⊢ 3 ^ n - 3 ^ m * 2 ^ (n - m) = z * 2 ^ n n:ℕm:ℕhnm:(fun n ↦ Int.fract ((3 / 2) ^ n)) n = (fun n ↦ Int.fract ((3 / 2) ^ n)) mhne:¬n = mhlt:m < nz:ℤhz:(3 / 2) ^ n - (3 / 2) ^ m = ↑zh2:2 ^ n ≠ 0key:3 ^ n - 3 ^ m * 2 ^ (n - m) = z * 2 ^ n⊢ False n:ℕm:ℕhnm:(fun n ↦ Int.fract ((3 / 2) ^ n)) n = (fun n ↦ Int.fract ((3 / 2) ^ n)) mhne:¬n = mhlt:m < nz:ℤhz:(3 / 2) ^ n - (3 / 2) ^ m = ↑zh2:2 ^ n ≠ 0hm:2 ^ n = 2 ^ m * 2 ^ (n - m)e1:(3 / 2) ^ n * 2 ^ n = 3 ^ n⊢ 3 ^ n - 3 ^ m * 2 ^ (n - m) = ↑z * 2 ^ n n:ℕm:ℕhnm:(fun n ↦ Int.fract ((3 / 2) ^ n)) n = (fun n ↦ Int.fract ((3 / 2) ^ n)) mhne:¬n = mhlt:m < nz:ℤhz:(3 / 2) ^ n - (3 / 2) ^ m = ↑zh2:2 ^ n ≠ 0this:3 ^ n - 3 ^ m * 2 ^ (n - m) = ↑z * 2 ^ n⊢ 3 ^ n - 3 ^ m * 2 ^ (n - m) = z * 2 ^ n n:ℕm:ℕhnm:(fun n ↦ Int.fract ((3 / 2) ^ n)) n = (fun n ↦ Int.fract ((3 / 2) ^ n)) mhne:¬n = mhlt:m < nz:ℤhz:(3 / 2) ^ n - (3 / 2) ^ m = ↑zh2:2 ^ n ≠ 0key:3 ^ n - 3 ^ m * 2 ^ (n - m) = z * 2 ^ n⊢ False
have e2 : (3 / 2 : ℝ) ^ m * 2 ^ n = 3 ^ m * 2 ^ (n - m) := by ⊢ Function.Injective fun n ↦ Int.fract ((3 / 2) ^ n) n:ℕm:ℕhnm:(fun n ↦ Int.fract ((3 / 2) ^ n)) n = (fun n ↦ Int.fract ((3 / 2) ^ n)) mhne:¬n = mhlt:m < nz:ℤhz:(3 / 2) ^ n - (3 / 2) ^ m = ↑zh2:2 ^ n ≠ 0hm:2 ^ n = 2 ^ m * 2 ^ (n - m)e1:(3 / 2) ^ n * 2 ^ n = 3 ^ ne2:(3 / 2) ^ m * 2 ^ n = 3 ^ m * 2 ^ (n - m)⊢ 3 ^ n - 3 ^ m * 2 ^ (n - m) = ↑z * 2 ^ n n:ℕm:ℕhnm:(fun n ↦ Int.fract ((3 / 2) ^ n)) n = (fun n ↦ Int.fract ((3 / 2) ^ n)) mhne:¬n = mhlt:m < nz:ℤhz:(3 / 2) ^ n - (3 / 2) ^ m = ↑zh2:2 ^ n ≠ 0this:3 ^ n - 3 ^ m * 2 ^ (n - m) = ↑z * 2 ^ n⊢ 3 ^ n - 3 ^ m * 2 ^ (n - m) = z * 2 ^ n n:ℕm:ℕhnm:(fun n ↦ Int.fract ((3 / 2) ^ n)) n = (fun n ↦ Int.fract ((3 / 2) ^ n)) mhne:¬n = mhlt:m < nz:ℤhz:(3 / 2) ^ n - (3 / 2) ^ m = ↑zh2:2 ^ n ≠ 0key:3 ^ n - 3 ^ m * 2 ^ (n - m) = z * 2 ^ n⊢ False
rw [hm, n:ℕm:ℕhnm:(fun n ↦ Int.fract ((3 / 2) ^ n)) n = (fun n ↦ Int.fract ((3 / 2) ^ n)) mhne:¬n = mhlt:m < nz:ℤhz:(3 / 2) ^ n - (3 / 2) ^ m = ↑zh2:2 ^ n ≠ 0hm:2 ^ n = 2 ^ m * 2 ^ (n - m)e1:(3 / 2) ^ n * 2 ^ n = 3 ^ n⊢ (3 / 2) ^ m * (2 ^ m * 2 ^ (n - m)) = 3 ^ m * 2 ^ (n - m) n:ℕm:ℕhnm:(fun n ↦ Int.fract ((3 / 2) ^ n)) n = (fun n ↦ Int.fract ((3 / 2) ^ n)) mhne:¬n = mhlt:m < nz:ℤhz:(3 / 2) ^ n - (3 / 2) ^ m = ↑zh2:2 ^ n ≠ 0hm:2 ^ n = 2 ^ m * 2 ^ (n - m)e1:(3 / 2) ^ n * 2 ^ n = 3 ^ ne2:(3 / 2) ^ m * 2 ^ n = 3 ^ m * 2 ^ (n - m)⊢ 3 ^ n - 3 ^ m * 2 ^ (n - m) = ↑z * 2 ^ n n:ℕm:ℕhnm:(fun n ↦ Int.fract ((3 / 2) ^ n)) n = (fun n ↦ Int.fract ((3 / 2) ^ n)) mhne:¬n = mhlt:m < nz:ℤhz:(3 / 2) ^ n - (3 / 2) ^ m = ↑zh2:2 ^ n ≠ 0this:3 ^ n - 3 ^ m * 2 ^ (n - m) = ↑z * 2 ^ n⊢ 3 ^ n - 3 ^ m * 2 ^ (n - m) = z * 2 ^ n n:ℕm:ℕhnm:(fun n ↦ Int.fract ((3 / 2) ^ n)) n = (fun n ↦ Int.fract ((3 / 2) ^ n)) mhne:¬n = mhlt:m < nz:ℤhz:(3 / 2) ^ n - (3 / 2) ^ m = ↑zh2:2 ^ n ≠ 0key:3 ^ n - 3 ^ m * 2 ^ (n - m) = z * 2 ^ n⊢ False ← mul_assoc, n:ℕm:ℕhnm:(fun n ↦ Int.fract ((3 / 2) ^ n)) n = (fun n ↦ Int.fract ((3 / 2) ^ n)) mhne:¬n = mhlt:m < nz:ℤhz:(3 / 2) ^ n - (3 / 2) ^ m = ↑zh2:2 ^ n ≠ 0hm:2 ^ n = 2 ^ m * 2 ^ (n - m)e1:(3 / 2) ^ n * 2 ^ n = 3 ^ n⊢ (3 / 2) ^ m * 2 ^ m * 2 ^ (n - m) = 3 ^ m * 2 ^ (n - m) n:ℕm:ℕhnm:(fun n ↦ Int.fract ((3 / 2) ^ n)) n = (fun n ↦ Int.fract ((3 / 2) ^ n)) mhne:¬n = mhlt:m < nz:ℤhz:(3 / 2) ^ n - (3 / 2) ^ m = ↑zh2:2 ^ n ≠ 0hm:2 ^ n = 2 ^ m * 2 ^ (n - m)e1:(3 / 2) ^ n * 2 ^ n = 3 ^ ne2:(3 / 2) ^ m * 2 ^ n = 3 ^ m * 2 ^ (n - m)⊢ 3 ^ n - 3 ^ m * 2 ^ (n - m) = ↑z * 2 ^ n n:ℕm:ℕhnm:(fun n ↦ Int.fract ((3 / 2) ^ n)) n = (fun n ↦ Int.fract ((3 / 2) ^ n)) mhne:¬n = mhlt:m < nz:ℤhz:(3 / 2) ^ n - (3 / 2) ^ m = ↑zh2:2 ^ n ≠ 0this:3 ^ n - 3 ^ m * 2 ^ (n - m) = ↑z * 2 ^ n⊢ 3 ^ n - 3 ^ m * 2 ^ (n - m) = z * 2 ^ n n:ℕm:ℕhnm:(fun n ↦ Int.fract ((3 / 2) ^ n)) n = (fun n ↦ Int.fract ((3 / 2) ^ n)) mhne:¬n = mhlt:m < nz:ℤhz:(3 / 2) ^ n - (3 / 2) ^ m = ↑zh2:2 ^ n ≠ 0key:3 ^ n - 3 ^ m * 2 ^ (n - m) = z * 2 ^ n⊢ False div_pow, n:ℕm:ℕhnm:(fun n ↦ Int.fract ((3 / 2) ^ n)) n = (fun n ↦ Int.fract ((3 / 2) ^ n)) mhne:¬n = mhlt:m < nz:ℤhz:(3 / 2) ^ n - (3 / 2) ^ m = ↑zh2:2 ^ n ≠ 0hm:2 ^ n = 2 ^ m * 2 ^ (n - m)e1:(3 / 2) ^ n * 2 ^ n = 3 ^ n⊢ 3 ^ m / 2 ^ m * 2 ^ m * 2 ^ (n - m) = 3 ^ m * 2 ^ (n - m) n:ℕm:ℕhnm:(fun n ↦ Int.fract ((3 / 2) ^ n)) n = (fun n ↦ Int.fract ((3 / 2) ^ n)) mhne:¬n = mhlt:m < nz:ℤhz:(3 / 2) ^ n - (3 / 2) ^ m = ↑zh2:2 ^ n ≠ 0hm:2 ^ n = 2 ^ m * 2 ^ (n - m)e1:(3 / 2) ^ n * 2 ^ n = 3 ^ ne2:(3 / 2) ^ m * 2 ^ n = 3 ^ m * 2 ^ (n - m)⊢ 3 ^ n - 3 ^ m * 2 ^ (n - m) = ↑z * 2 ^ n n:ℕm:ℕhnm:(fun n ↦ Int.fract ((3 / 2) ^ n)) n = (fun n ↦ Int.fract ((3 / 2) ^ n)) mhne:¬n = mhlt:m < nz:ℤhz:(3 / 2) ^ n - (3 / 2) ^ m = ↑zh2:2 ^ n ≠ 0this:3 ^ n - 3 ^ m * 2 ^ (n - m) = ↑z * 2 ^ n⊢ 3 ^ n - 3 ^ m * 2 ^ (n - m) = z * 2 ^ n n:ℕm:ℕhnm:(fun n ↦ Int.fract ((3 / 2) ^ n)) n = (fun n ↦ Int.fract ((3 / 2) ^ n)) mhne:¬n = mhlt:m < nz:ℤhz:(3 / 2) ^ n - (3 / 2) ^ m = ↑zh2:2 ^ n ≠ 0key:3 ^ n - 3 ^ m * 2 ^ (n - m) = z * 2 ^ n⊢ False div_mul_cancel₀ _ (by n:ℕm:ℕhnm:(fun n ↦ Int.fract ((3 / 2) ^ n)) n = (fun n ↦ Int.fract ((3 / 2) ^ n)) mhne:¬n = mhlt:m < nz:ℤhz:(3 / 2) ^ n - (3 / 2) ^ m = ↑zh2:2 ^ n ≠ 0hm:2 ^ n = 2 ^ m * 2 ^ (n - m)e1:(3 / 2) ^ n * 2 ^ n = 3 ^ n⊢ 2 ^ m ≠ 0 n:ℕm:ℕhnm:(fun n ↦ Int.fract ((3 / 2) ^ n)) n = (fun n ↦ Int.fract ((3 / 2) ^ n)) mhne:¬n = mhlt:m < nz:ℤhz:(3 / 2) ^ n - (3 / 2) ^ m = ↑zh2:2 ^ n ≠ 0hm:2 ^ n = 2 ^ m * 2 ^ (n - m)e1:(3 / 2) ^ n * 2 ^ n = 3 ^ ne2:(3 / 2) ^ m * 2 ^ n = 3 ^ m * 2 ^ (n - m)⊢ 3 ^ n - 3 ^ m * 2 ^ (n - m) = ↑z * 2 ^ n n:ℕm:ℕhnm:(fun n ↦ Int.fract ((3 / 2) ^ n)) n = (fun n ↦ Int.fract ((3 / 2) ^ n)) mhne:¬n = mhlt:m < nz:ℤhz:(3 / 2) ^ n - (3 / 2) ^ m = ↑zh2:2 ^ n ≠ 0this:3 ^ n - 3 ^ m * 2 ^ (n - m) = ↑z * 2 ^ n⊢ 3 ^ n - 3 ^ m * 2 ^ (n - m) = z * 2 ^ n n:ℕm:ℕhnm:(fun n ↦ Int.fract ((3 / 2) ^ n)) n = (fun n ↦ Int.fract ((3 / 2) ^ n)) mhne:¬n = mhlt:m < nz:ℤhz:(3 / 2) ^ n - (3 / 2) ^ m = ↑zh2:2 ^ n ≠ 0key:3 ^ n - 3 ^ m * 2 ^ (n - m) = z * 2 ^ n⊢ False positivity All goals completed! 🐙 n:ℕm:ℕhnm:(fun n ↦ Int.fract ((3 / 2) ^ n)) n = (fun n ↦ Int.fract ((3 / 2) ^ n)) mhne:¬n = mhlt:m < nz:ℤhz:(3 / 2) ^ n - (3 / 2) ^ m = ↑zh2:2 ^ n ≠ 0hm:2 ^ n = 2 ^ m * 2 ^ (n - m)e1:(3 / 2) ^ n * 2 ^ n = 3 ^ ne2:(3 / 2) ^ m * 2 ^ n = 3 ^ m * 2 ^ (n - m)⊢ 3 ^ n - 3 ^ m * 2 ^ (n - m) = ↑z * 2 ^ n n:ℕm:ℕhnm:(fun n ↦ Int.fract ((3 / 2) ^ n)) n = (fun n ↦ Int.fract ((3 / 2) ^ n)) mhne:¬n = mhlt:m < nz:ℤhz:(3 / 2) ^ n - (3 / 2) ^ m = ↑zh2:2 ^ n ≠ 0this:3 ^ n - 3 ^ m * 2 ^ (n - m) = ↑z * 2 ^ n⊢ 3 ^ n - 3 ^ m * 2 ^ (n - m) = z * 2 ^ n n:ℕm:ℕhnm:(fun n ↦ Int.fract ((3 / 2) ^ n)) n = (fun n ↦ Int.fract ((3 / 2) ^ n)) mhne:¬n = mhlt:m < nz:ℤhz:(3 / 2) ^ n - (3 / 2) ^ m = ↑zh2:2 ^ n ≠ 0key:3 ^ n - 3 ^ m * 2 ^ (n - m) = z * 2 ^ n⊢ False)] n:ℕm:ℕhnm:(fun n ↦ Int.fract ((3 / 2) ^ n)) n = (fun n ↦ Int.fract ((3 / 2) ^ n)) mhne:¬n = mhlt:m < nz:ℤhz:(3 / 2) ^ n - (3 / 2) ^ m = ↑zh2:2 ^ n ≠ 0hm:2 ^ n = 2 ^ m * 2 ^ (n - m)e1:(3 / 2) ^ n * 2 ^ n = 3 ^ ne2:(3 / 2) ^ m * 2 ^ n = 3 ^ m * 2 ^ (n - m)⊢ 3 ^ n - 3 ^ m * 2 ^ (n - m) = ↑z * 2 ^ n n:ℕm:ℕhnm:(fun n ↦ Int.fract ((3 / 2) ^ n)) n = (fun n ↦ Int.fract ((3 / 2) ^ n)) mhne:¬n = mhlt:m < nz:ℤhz:(3 / 2) ^ n - (3 / 2) ^ m = ↑zh2:2 ^ n ≠ 0this:3 ^ n - 3 ^ m * 2 ^ (n - m) = ↑z * 2 ^ n⊢ 3 ^ n - 3 ^ m * 2 ^ (n - m) = z * 2 ^ n n:ℕm:ℕhnm:(fun n ↦ Int.fract ((3 / 2) ^ n)) n = (fun n ↦ Int.fract ((3 / 2) ^ n)) mhne:¬n = mhlt:m < nz:ℤhz:(3 / 2) ^ n - (3 / 2) ^ m = ↑zh2:2 ^ n ≠ 0key:3 ^ n - 3 ^ m * 2 ^ (n - m) = z * 2 ^ n⊢ False n:ℕm:ℕhnm:(fun n ↦ Int.fract ((3 / 2) ^ n)) n = (fun n ↦ Int.fract ((3 / 2) ^ n)) mhne:¬n = mhlt:m < nz:ℤhz:(3 / 2) ^ n - (3 / 2) ^ m = ↑zh2:2 ^ n ≠ 0hm:2 ^ n = 2 ^ m * 2 ^ (n - m)e1:(3 / 2) ^ n * 2 ^ n = 3 ^ ne2:(3 / 2) ^ m * 2 ^ n = 3 ^ m * 2 ^ (n - m)⊢ 3 ^ n - 3 ^ m * 2 ^ (n - m) = ↑z * 2 ^ n n:ℕm:ℕhnm:(fun n ↦ Int.fract ((3 / 2) ^ n)) n = (fun n ↦ Int.fract ((3 / 2) ^ n)) mhne:¬n = mhlt:m < nz:ℤhz:(3 / 2) ^ n - (3 / 2) ^ m = ↑zh2:2 ^ n ≠ 0this:3 ^ n - 3 ^ m * 2 ^ (n - m) = ↑z * 2 ^ n⊢ 3 ^ n - 3 ^ m * 2 ^ (n - m) = z * 2 ^ n n:ℕm:ℕhnm:(fun n ↦ Int.fract ((3 / 2) ^ n)) n = (fun n ↦ Int.fract ((3 / 2) ^ n)) mhne:¬n = mhlt:m < nz:ℤhz:(3 / 2) ^ n - (3 / 2) ^ m = ↑zh2:2 ^ n ≠ 0key:3 ^ n - 3 ^ m * 2 ^ (n - m) = z * 2 ^ n⊢ False
rw [← e1, n:ℕm:ℕhnm:(fun n ↦ Int.fract ((3 / 2) ^ n)) n = (fun n ↦ Int.fract ((3 / 2) ^ n)) mhne:¬n = mhlt:m < nz:ℤhz:(3 / 2) ^ n - (3 / 2) ^ m = ↑zh2:2 ^ n ≠ 0hm:2 ^ n = 2 ^ m * 2 ^ (n - m)e1:(3 / 2) ^ n * 2 ^ n = 3 ^ ne2:(3 / 2) ^ m * 2 ^ n = 3 ^ m * 2 ^ (n - m)⊢ (3 / 2) ^ n * 2 ^ n - 3 ^ m * 2 ^ (n - m) = ↑z * 2 ^ n n:ℕm:ℕhnm:(fun n ↦ Int.fract ((3 / 2) ^ n)) n = (fun n ↦ Int.fract ((3 / 2) ^ n)) mhne:¬n = mhlt:m < nz:ℤhz:(3 / 2) ^ n - (3 / 2) ^ m = ↑zh2:2 ^ n ≠ 0this:3 ^ n - 3 ^ m * 2 ^ (n - m) = ↑z * 2 ^ n⊢ 3 ^ n - 3 ^ m * 2 ^ (n - m) = z * 2 ^ n n:ℕm:ℕhnm:(fun n ↦ Int.fract ((3 / 2) ^ n)) n = (fun n ↦ Int.fract ((3 / 2) ^ n)) mhne:¬n = mhlt:m < nz:ℤhz:(3 / 2) ^ n - (3 / 2) ^ m = ↑zh2:2 ^ n ≠ 0key:3 ^ n - 3 ^ m * 2 ^ (n - m) = z * 2 ^ n⊢ False ← e2, n:ℕm:ℕhnm:(fun n ↦ Int.fract ((3 / 2) ^ n)) n = (fun n ↦ Int.fract ((3 / 2) ^ n)) mhne:¬n = mhlt:m < nz:ℤhz:(3 / 2) ^ n - (3 / 2) ^ m = ↑zh2:2 ^ n ≠ 0hm:2 ^ n = 2 ^ m * 2 ^ (n - m)e1:(3 / 2) ^ n * 2 ^ n = 3 ^ ne2:(3 / 2) ^ m * 2 ^ n = 3 ^ m * 2 ^ (n - m)⊢ (3 / 2) ^ n * 2 ^ n - (3 / 2) ^ m * 2 ^ n = ↑z * 2 ^ n n:ℕm:ℕhnm:(fun n ↦ Int.fract ((3 / 2) ^ n)) n = (fun n ↦ Int.fract ((3 / 2) ^ n)) mhne:¬n = mhlt:m < nz:ℤhz:(3 / 2) ^ n - (3 / 2) ^ m = ↑zh2:2 ^ n ≠ 0this:3 ^ n - 3 ^ m * 2 ^ (n - m) = ↑z * 2 ^ n⊢ 3 ^ n - 3 ^ m * 2 ^ (n - m) = z * 2 ^ n n:ℕm:ℕhnm:(fun n ↦ Int.fract ((3 / 2) ^ n)) n = (fun n ↦ Int.fract ((3 / 2) ^ n)) mhne:¬n = mhlt:m < nz:ℤhz:(3 / 2) ^ n - (3 / 2) ^ m = ↑zh2:2 ^ n ≠ 0key:3 ^ n - 3 ^ m * 2 ^ (n - m) = z * 2 ^ n⊢ False ← sub_mul, n:ℕm:ℕhnm:(fun n ↦ Int.fract ((3 / 2) ^ n)) n = (fun n ↦ Int.fract ((3 / 2) ^ n)) mhne:¬n = mhlt:m < nz:ℤhz:(3 / 2) ^ n - (3 / 2) ^ m = ↑zh2:2 ^ n ≠ 0hm:2 ^ n = 2 ^ m * 2 ^ (n - m)e1:(3 / 2) ^ n * 2 ^ n = 3 ^ ne2:(3 / 2) ^ m * 2 ^ n = 3 ^ m * 2 ^ (n - m)⊢ ((3 / 2) ^ n - (3 / 2) ^ m) * 2 ^ n = ↑z * 2 ^ n n:ℕm:ℕhnm:(fun n ↦ Int.fract ((3 / 2) ^ n)) n = (fun n ↦ Int.fract ((3 / 2) ^ n)) mhne:¬n = mhlt:m < nz:ℤhz:(3 / 2) ^ n - (3 / 2) ^ m = ↑zh2:2 ^ n ≠ 0this:3 ^ n - 3 ^ m * 2 ^ (n - m) = ↑z * 2 ^ n⊢ 3 ^ n - 3 ^ m * 2 ^ (n - m) = z * 2 ^ n n:ℕm:ℕhnm:(fun n ↦ Int.fract ((3 / 2) ^ n)) n = (fun n ↦ Int.fract ((3 / 2) ^ n)) mhne:¬n = mhlt:m < nz:ℤhz:(3 / 2) ^ n - (3 / 2) ^ m = ↑zh2:2 ^ n ≠ 0key:3 ^ n - 3 ^ m * 2 ^ (n - m) = z * 2 ^ n⊢ False hz n:ℕm:ℕhnm:(fun n ↦ Int.fract ((3 / 2) ^ n)) n = (fun n ↦ Int.fract ((3 / 2) ^ n)) mhne:¬n = mhlt:m < nz:ℤhz:(3 / 2) ^ n - (3 / 2) ^ m = ↑zh2:2 ^ n ≠ 0hm:2 ^ n = 2 ^ m * 2 ^ (n - m)e1:(3 / 2) ^ n * 2 ^ n = 3 ^ ne2:(3 / 2) ^ m * 2 ^ n = 3 ^ m * 2 ^ (n - m)⊢ ↑z * 2 ^ n = ↑z * 2 ^ n n:ℕm:ℕhnm:(fun n ↦ Int.fract ((3 / 2) ^ n)) n = (fun n ↦ Int.fract ((3 / 2) ^ n)) mhne:¬n = mhlt:m < nz:ℤhz:(3 / 2) ^ n - (3 / 2) ^ m = ↑zh2:2 ^ n ≠ 0this:3 ^ n - 3 ^ m * 2 ^ (n - m) = ↑z * 2 ^ n⊢ 3 ^ n - 3 ^ m * 2 ^ (n - m) = z * 2 ^ n n:ℕm:ℕhnm:(fun n ↦ Int.fract ((3 / 2) ^ n)) n = (fun n ↦ Int.fract ((3 / 2) ^ n)) mhne:¬n = mhlt:m < nz:ℤhz:(3 / 2) ^ n - (3 / 2) ^ m = ↑zh2:2 ^ n ≠ 0key:3 ^ n - 3 ^ m * 2 ^ (n - m) = z * 2 ^ n⊢ False] n:ℕm:ℕhnm:(fun n ↦ Int.fract ((3 / 2) ^ n)) n = (fun n ↦ Int.fract ((3 / 2) ^ n)) mhne:¬n = mhlt:m < nz:ℤhz:(3 / 2) ^ n - (3 / 2) ^ m = ↑zh2:2 ^ n ≠ 0this:3 ^ n - 3 ^ m * 2 ^ (n - m) = ↑z * 2 ^ n⊢ 3 ^ n - 3 ^ m * 2 ^ (n - m) = z * 2 ^ n n:ℕm:ℕhnm:(fun n ↦ Int.fract ((3 / 2) ^ n)) n = (fun n ↦ Int.fract ((3 / 2) ^ n)) mhne:¬n = mhlt:m < nz:ℤhz:(3 / 2) ^ n - (3 / 2) ^ m = ↑zh2:2 ^ n ≠ 0key:3 ^ n - 3 ^ m * 2 ^ (n - m) = z * 2 ^ n⊢ False n:ℕm:ℕhnm:(fun n ↦ Int.fract ((3 / 2) ^ n)) n = (fun n ↦ Int.fract ((3 / 2) ^ n)) mhne:¬n = mhlt:m < nz:ℤhz:(3 / 2) ^ n - (3 / 2) ^ m = ↑zh2:2 ^ n ≠ 0this:3 ^ n - 3 ^ m * 2 ^ (n - m) = ↑z * 2 ^ n⊢ 3 ^ n - 3 ^ m * 2 ^ (n - m) = z * 2 ^ n n:ℕm:ℕhnm:(fun n ↦ Int.fract ((3 / 2) ^ n)) n = (fun n ↦ Int.fract ((3 / 2) ^ n)) mhne:¬n = mhlt:m < nz:ℤhz:(3 / 2) ^ n - (3 / 2) ^ m = ↑zh2:2 ^ n ≠ 0key:3 ^ n - 3 ^ m * 2 ^ (n - m) = z * 2 ^ n⊢ False
exact_mod_cast this n:ℕm:ℕhnm:(fun n ↦ Int.fract ((3 / 2) ^ n)) n = (fun n ↦ Int.fract ((3 / 2) ^ n)) mhne:¬n = mhlt:m < nz:ℤhz:(3 / 2) ^ n - (3 / 2) ^ m = ↑zh2:2 ^ n ≠ 0key:3 ^ n - 3 ^ m * 2 ^ (n - m) = z * 2 ^ n⊢ False n:ℕm:ℕhnm:(fun n ↦ Int.fract ((3 / 2) ^ n)) n = (fun n ↦ Int.fract ((3 / 2) ^ n)) mhne:¬n = mhlt:m < nz:ℤhz:(3 / 2) ^ n - (3 / 2) ^ m = ↑zh2:2 ^ n ≠ 0key:3 ^ n - 3 ^ m * 2 ^ (n - m) = z * 2 ^ n⊢ False
have hmod := congrArg (fun t : ℤ => (t : ZMod 2)) key n:ℕm:ℕhnm:(fun n ↦ Int.fract ((3 / 2) ^ n)) n = (fun n ↦ Int.fract ((3 / 2) ^ n)) mhne:¬n = mhlt:m < nz:ℤhz:(3 / 2) ^ n - (3 / 2) ^ m = ↑zh2:2 ^ n ≠ 0key:3 ^ n - 3 ^ m * 2 ^ (n - m) = z * 2 ^ nhmod:↑(3 ^ n - 3 ^ m * 2 ^ (n - m)) = ↑(z * 2 ^ n)⊢ False
simp only [Int.cast_sub, Int.cast_mul, Int.cast_pow, Int.cast_ofNat] at hmod n:ℕm:ℕhnm:(fun n ↦ Int.fract ((3 / 2) ^ n)) n = (fun n ↦ Int.fract ((3 / 2) ^ n)) mhne:¬n = mhlt:m < nz:ℤhz:(3 / 2) ^ n - (3 / 2) ^ m = ↑zh2:2 ^ n ≠ 0key:3 ^ n - 3 ^ m * 2 ^ (n - m) = z * 2 ^ nhmod:3 ^ n - 3 ^ m * 2 ^ (n - m) = ↑z * 2 ^ n⊢ False
rw [show (2 : ZMod 2) = 0 from rfl, n:ℕm:ℕhnm:(fun n ↦ Int.fract ((3 / 2) ^ n)) n = (fun n ↦ Int.fract ((3 / 2) ^ n)) mhne:¬n = mhlt:m < nz:ℤhz:(3 / 2) ^ n - (3 / 2) ^ m = ↑zh2:2 ^ n ≠ 0key:3 ^ n - 3 ^ m * 2 ^ (n - m) = z * 2 ^ nhmod:3 ^ n - 3 ^ m * 0 ^ (n - m) = ↑z * 0 ^ n⊢ False n:ℕm:ℕhnm:(fun n ↦ Int.fract ((3 / 2) ^ n)) n = (fun n ↦ Int.fract ((3 / 2) ^ n)) mhne:¬n = mhlt:m < nz:ℤhz:(3 / 2) ^ n - (3 / 2) ^ m = ↑zh2:2 ^ n ≠ 0key:3 ^ n - 3 ^ m * 2 ^ (n - m) = z * 2 ^ nhmod:1 ^ n - 1 ^ m * 0 = ↑z * 0⊢ False zero_pow (by n:ℕm:ℕhnm:(fun n ↦ Int.fract ((3 / 2) ^ n)) n = (fun n ↦ Int.fract ((3 / 2) ^ n)) mhne:¬n = mhlt:m < nz:ℤhz:(3 / 2) ^ n - (3 / 2) ^ m = ↑zh2:2 ^ n ≠ 0key:3 ^ n - 3 ^ m * 2 ^ (n - m) = z * 2 ^ nhmod:3 ^ n - 3 ^ m * 0 ^ (n - m) = ↑z * 0 ^ n⊢ n - m ≠ 0 n:ℕm:ℕhnm:(fun n ↦ Int.fract ((3 / 2) ^ n)) n = (fun n ↦ Int.fract ((3 / 2) ^ n)) mhne:¬n = mhlt:m < nz:ℤhz:(3 / 2) ^ n - (3 / 2) ^ m = ↑zh2:2 ^ n ≠ 0key:3 ^ n - 3 ^ m * 2 ^ (n - m) = z * 2 ^ nhmod:1 ^ n - 1 ^ m * 0 = ↑z * 0⊢ False omega All goals completed! 🐙 n:ℕm:ℕhnm:(fun n ↦ Int.fract ((3 / 2) ^ n)) n = (fun n ↦ Int.fract ((3 / 2) ^ n)) mhne:¬n = mhlt:m < nz:ℤhz:(3 / 2) ^ n - (3 / 2) ^ m = ↑zh2:2 ^ n ≠ 0key:3 ^ n - 3 ^ m * 2 ^ (n - m) = z * 2 ^ nhmod:1 ^ n - 1 ^ m * 0 = ↑z * 0⊢ False), zero_pow (by n:ℕm:ℕhnm:(fun n ↦ Int.fract ((3 / 2) ^ n)) n = (fun n ↦ Int.fract ((3 / 2) ^ n)) mhne:¬n = mhlt:m < nz:ℤhz:(3 / 2) ^ n - (3 / 2) ^ m = ↑zh2:2 ^ n ≠ 0key:3 ^ n - 3 ^ m * 2 ^ (n - m) = z * 2 ^ nhmod:3 ^ n - 3 ^ m * 0 = ↑z * 0 ^ n⊢ n ≠ 0 n:ℕm:ℕhnm:(fun n ↦ Int.fract ((3 / 2) ^ n)) n = (fun n ↦ Int.fract ((3 / 2) ^ n)) mhne:¬n = mhlt:m < nz:ℤhz:(3 / 2) ^ n - (3 / 2) ^ m = ↑zh2:2 ^ n ≠ 0key:3 ^ n - 3 ^ m * 2 ^ (n - m) = z * 2 ^ nhmod:1 ^ n - 1 ^ m * 0 = ↑z * 0⊢ False omega All goals completed! 🐙 n:ℕm:ℕhnm:(fun n ↦ Int.fract ((3 / 2) ^ n)) n = (fun n ↦ Int.fract ((3 / 2) ^ n)) mhne:¬n = mhlt:m < nz:ℤhz:(3 / 2) ^ n - (3 / 2) ^ m = ↑zh2:2 ^ n ≠ 0key:3 ^ n - 3 ^ m * 2 ^ (n - m) = z * 2 ^ nhmod:1 ^ n - 1 ^ m * 0 = ↑z * 0⊢ False),
show (3 : ZMod 2) = 1 from rfl n:ℕm:ℕhnm:(fun n ↦ Int.fract ((3 / 2) ^ n)) n = (fun n ↦ Int.fract ((3 / 2) ^ n)) mhne:¬n = mhlt:m < nz:ℤhz:(3 / 2) ^ n - (3 / 2) ^ m = ↑zh2:2 ^ n ≠ 0key:3 ^ n - 3 ^ m * 2 ^ (n - m) = z * 2 ^ nhmod:1 ^ n - 1 ^ m * 0 = ↑z * 0⊢ False n:ℕm:ℕhnm:(fun n ↦ Int.fract ((3 / 2) ^ n)) n = (fun n ↦ Int.fract ((3 / 2) ^ n)) mhne:¬n = mhlt:m < nz:ℤhz:(3 / 2) ^ n - (3 / 2) ^ m = ↑zh2:2 ^ n ≠ 0key:3 ^ n - 3 ^ m * 2 ^ (n - m) = z * 2 ^ nhmod:1 ^ n - 1 ^ m * 0 = ↑z * 0⊢ False] at hmod n:ℕm:ℕhnm:(fun n ↦ Int.fract ((3 / 2) ^ n)) n = (fun n ↦ Int.fract ((3 / 2) ^ n)) mhne:¬n = mhlt:m < nz:ℤhz:(3 / 2) ^ n - (3 / 2) ^ m = ↑zh2:2 ^ n ≠ 0key:3 ^ n - 3 ^ m * 2 ^ (n - m) = z * 2 ^ nhmod:1 ^ n - 1 ^ m * 0 = ↑z * 0⊢ False
simp at hmod All goals completed! 🐙
There is an accumulation point of the sequence (3/2)^n modulo 1: its values are pairwise
distinct and lie in [0, 1], so they have an accumulation point by compactness.
@[category test, AMS 11]
theorem isAccumulationPoint_three_halves_pow_exists :
∃ p, (IsAccumulationPoint p (fun n => Int.fract <| (3 / 2 : ℝ)^n)) := by ⊢ ∃ p, IsAccumulationPoint p fun n ↦ Int.fract ((3 / 2) ^ n)
have hinf : (Set.range fun n : ℕ => Int.fract ((3 / 2 : ℝ) ^ n)).Infinite :=
Set.infinite_range_of_injective fract_three_halves_pow_injective hinf:(Set.range fun n ↦ Int.fract ((3 / 2) ^ n)).Infinite⊢ ∃ p, IsAccumulationPoint p fun n ↦ Int.fract ((3 / 2) ^ n)
have hsub : (Set.range fun n : ℕ => Int.fract ((3 / 2 : ℝ) ^ n)) ⊆ Set.Icc 0 1 := by
rintro _ ⟨n, rfl⟩ hinf:(Set.range fun n ↦ Int.fract ((3 / 2) ^ n)).Infiniten:ℕ⊢ (fun n ↦ Int.fract ((3 / 2) ^ n)) n ∈ Set.Icc 0 1 hinf:(Set.range fun n ↦ Int.fract ((3 / 2) ^ n)).Infinitehsub:(Set.range fun n ↦ Int.fract ((3 / 2) ^ n)) ⊆ Set.Icc 0 1⊢ ∃ p, IsAccumulationPoint p fun n ↦ Int.fract ((3 / 2) ^ n)
exact ⟨Int.fract_nonneg _, (Int.fract_lt_one _).le⟩ hinf:(Set.range fun n ↦ Int.fract ((3 / 2) ^ n)).Infinitehsub:(Set.range fun n ↦ Int.fract ((3 / 2) ^ n)) ⊆ Set.Icc 0 1⊢ ∃ p, IsAccumulationPoint p fun n ↦ Int.fract ((3 / 2) ^ n) hinf:(Set.range fun n ↦ Int.fract ((3 / 2) ^ n)).Infinitehsub:(Set.range fun n ↦ Int.fract ((3 / 2) ^ n)) ⊆ Set.Icc 0 1⊢ ∃ p, IsAccumulationPoint p fun n ↦ Int.fract ((3 / 2) ^ n)
obtain ⟨x, -, hx⟩ := hinf.exists_accPt_of_subset_isCompact isCompact_Icc hsub hinf:(Set.range fun n ↦ Int.fract ((3 / 2) ^ n)).Infinitehsub:(Set.range fun n ↦ Int.fract ((3 / 2) ^ n)) ⊆ Set.Icc 0 1x:ℝhx:AccPt x (Filter.principal (Set.range fun n ↦ Int.fract ((3 / 2) ^ n)))⊢ ∃ p, IsAccumulationPoint p fun n ↦ Int.fract ((3 / 2) ^ n)
exact ⟨x, mem_closure_iff_clusterPt.2 (accPt_principal_iff_clusterPt.1 hx)⟩ All goals completed! 🐙end Equidistribution