/- Copyright 2026 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. -/ import FormalConjecturesUtil

Bugeaud Collection of Conjectures and Open Questions: Lacunary Sequences in Real Number Fields

The following problems were proposed and discussed by Dubickas as Conjecture 2 in [Dub09].

References:

    [Bug12] Bugeaud, Yann. "Distribution modulo one and Diophantine approximation." Vol. 193. Cambridge University Press, 2012. Chapter 10.

    [Dub09] Dubickas, Artūras. "An approximation property of lacunary sequences." Israel Journal of Mathematics 170.1 (2009): 95-111.

namespace Bugeaud05 open Filter

Problem 10.5 (first part). Let $\mathbb{K}$ be a real number field. Then, for any $\varepsilon > 0$, there exists a lacunary sequence $(t_n){n \ge 1}$ of positive numbers in $\mathbb{K}$ such that $$\limsup{n \to \infty} {\xi t_n} \ge 1 - \varepsilon,$$ for any real number $\xi$ not in $\mathbb{K}$.

@[category research open, AMS 11] theorem declaration uses 'sorry'problem_10_5 (K : IntermediateField ) [FiniteDimensional K] {ε : } ( : 0 < ε) : t : K, ( n, 0 < (t n : )) IsLacunaryReal (fun k => (t k : )) ξ : , ξ K (1 - ε) limsup (fun n => Int.fract (ξ * (t n : ))) atTop := K:IntermediateField inst✝:FiniteDimensional Kε::0 < ε t, (∀ (n : ), 0 < (t n)) (IsLacunaryReal fun k => (t k)) ξ K, 1 - ε limsup (fun n => Int.fract (ξ * (t n))) atTop All goals completed! 🐙

Problem 10.5 ("moreover" clause). With the same hypotheses as problem_10_5, the sequence $(t_n)$ can be chosen so that, for any real $\xi$ not in $\mathbb{K}$, each subinterval of $[0, 1]$ of length $\varepsilon$ contains a limit point of the sequence $({\xi t_n})_{n \ge 1}$. This is strictly stronger than problem_10_5: the limsup bound is the special case at the subinterval $[1 - \varepsilon, 1]$.

@[category research open, AMS 11] theorem declaration uses 'sorry'problem_10_5_moreover (K : IntermediateField ) [FiniteDimensional K] {ε : } ( : 0 < ε) : t : K, ( n, 0 < (t n : )) IsLacunaryReal (fun k => (t k : )) ξ : , ξ K a, a Set.Icc (0 : ) (1 - ε) y Set.Icc a (a + ε), MapClusterPt y atTop (fun n => Int.fract (ξ * (t n : ))) := K:IntermediateField inst✝:FiniteDimensional Kε::0 < ε t, (∀ (n : ), 0 < (t n)) (IsLacunaryReal fun k => (t k)) ξ K, a Set.Icc 0 (1 - ε), y Set.Icc a (a + ε), MapClusterPt y atTop fun n => Int.fract (ξ * (t n)) All goals completed! 🐙

The "moreover" form of Problem 10.5 implies the first part: applying the cluster-point density to the subinterval $[1 - \varepsilon, 1]$ yields the required lower bound on the limsup.

@[category test, AMS 11] theorem problem_10_5_of_moreover (h : type_of% problem_10_5_moreover) : type_of% problem_10_5 := h: (K : IntermediateField ) [FiniteDimensional K] {ε : }, 0 < ε t, (∀ (n : ), 0 < (t n)) (IsLacunaryReal fun k => (t k)) ξ K, a Set.Icc 0 (1 - ε), y Set.Icc a (a + ε), MapClusterPt y atTop fun n => Int.fract (ξ * (t n)) (K : IntermediateField ) [FiniteDimensional K] {ε : }, 0 < ε t, (∀ (n : ), 0 < (t n)) (IsLacunaryReal fun k => (t k)) ξ K, 1 - ε limsup (fun n => Int.fract (ξ * (t n))) atTop intro K h: (K : IntermediateField ) [FiniteDimensional K] {ε : }, 0 < ε t, (∀ (n : ), 0 < (t n)) (IsLacunaryReal fun k => (t k)) ξ K, a Set.Icc 0 (1 - ε), y Set.Icc a (a + ε), MapClusterPt y atTop fun n => Int.fract (ξ * (t n))K:IntermediateField inst✝:FiniteDimensional K {ε : }, 0 < ε t, (∀ (n : ), 0 < (t n)) (IsLacunaryReal fun k => (t k)) ξ K, 1 - ε limsup (fun n => Int.fract (ξ * (t n))) atTop h: (K : IntermediateField ) [FiniteDimensional K] {ε : }, 0 < ε t, (∀ (n : ), 0 < (t n)) (IsLacunaryReal fun k => (t k)) ξ K, a Set.Icc 0 (1 - ε), y Set.Icc a (a + ε), MapClusterPt y atTop fun n => Int.fract (ξ * (t n))K:IntermediateField inst✝:FiniteDimensional Kε:0 < ε t, (∀ (n : ), 0 < (t n)) (IsLacunaryReal fun k => (t k)) ξ K, 1 - ε limsup (fun n => Int.fract (ξ * (t n))) atTop h: (K : IntermediateField ) [FiniteDimensional K] {ε : }, 0 < ε t, (∀ (n : ), 0 < (t n)) (IsLacunaryReal fun k => (t k)) ξ K, a Set.Icc 0 (1 - ε), y Set.Icc a (a + ε), MapClusterPt y atTop fun n => Int.fract (ξ * (t n))K:IntermediateField inst✝:FiniteDimensional Kε::0 < ε t, (∀ (n : ), 0 < (t n)) (IsLacunaryReal fun k => (t k)) ξ K, 1 - ε limsup (fun n => Int.fract (ξ * (t n))) atTop h: (K : IntermediateField ) [FiniteDimensional K] {ε : }, 0 < ε t, (∀ (n : ), 0 < (t n)) (IsLacunaryReal fun k => (t k)) ξ K, a Set.Icc 0 (1 - ε), y Set.Icc a (a + ε), MapClusterPt y atTop fun n => Int.fract (ξ * (t n))K:IntermediateField inst✝:FiniteDimensional Kε::0 < εt: Khpos: (n : ), 0 < (t n)hlac:IsLacunaryReal fun k => (t k): ξ K, a Set.Icc 0 (1 - ε), y Set.Icc a (a + ε), MapClusterPt y atTop fun n => Int.fract (ξ * (t n)) t, (∀ (n : ), 0 < (t n)) (IsLacunaryReal fun k => (t k)) ξ K, 1 - ε limsup (fun n => Int.fract (ξ * (t n))) atTop h: (K : IntermediateField ) [FiniteDimensional K] {ε : }, 0 < ε t, (∀ (n : ), 0 < (t n)) (IsLacunaryReal fun k => (t k)) ξ K, a Set.Icc 0 (1 - ε), y Set.Icc a (a + ε), MapClusterPt y atTop fun n => Int.fract (ξ * (t n))K:IntermediateField inst✝:FiniteDimensional Kε::0 < εt: Khpos: (n : ), 0 < (t n)hlac:IsLacunaryReal fun k => (t k): ξ K, a Set.Icc 0 (1 - ε), y Set.Icc a (a + ε), MapClusterPt y atTop fun n => Int.fract (ξ * (t n))ξ:hξK:ξ K1 - ε limsup (fun n => Int.fract (ξ * (t n))) atTop h: (K : IntermediateField ) [FiniteDimensional K] {ε : }, 0 < ε t, (∀ (n : ), 0 < (t n)) (IsLacunaryReal fun k => (t k)) ξ K, a Set.Icc 0 (1 - ε), y Set.Icc a (a + ε), MapClusterPt y atTop fun n => Int.fract (ξ * (t n))K:IntermediateField inst✝:FiniteDimensional Kε::0 < εt: Khpos: (n : ), 0 < (t n)hlac:IsLacunaryReal fun k => (t k): ξ K, a Set.Icc 0 (1 - ε), y Set.Icc a (a + ε), MapClusterPt y atTop fun n => Int.fract (ξ * (t n))ξ:hξK:ξ Khb:IsBoundedUnder (fun x1 x2 => x1 x2) atTop fun n => Int.fract (ξ * (t n)) := isBoundedUnder_of (Exists.intro 1 fun n => LT.lt.le (Int.fract_lt_one (ξ * (t n))))1 - ε limsup (fun n => Int.fract (ξ * (t n))) atTop h: (K : IntermediateField ) [FiniteDimensional K] {ε : }, 0 < ε t, (∀ (n : ), 0 < (t n)) (IsLacunaryReal fun k => (t k)) ξ K, a Set.Icc 0 (1 - ε), y Set.Icc a (a + ε), MapClusterPt y atTop fun n => Int.fract (ξ * (t n))K:IntermediateField inst✝:FiniteDimensional Kε::0 < εt: Khpos: (n : ), 0 < (t n)hlac:IsLacunaryReal fun k => (t k): ξ K, a Set.Icc 0 (1 - ε), y Set.Icc a (a + ε), MapClusterPt y atTop fun n => Int.fract (ξ * (t n))ξ:hξK:ξ Khb:IsBoundedUnder (fun x1 x2 => x1 x2) atTop fun n => Int.fract (ξ * (t n)) := isBoundedUnder_of (Exists.intro 1 fun n => LT.lt.le (Int.fract_lt_one (ξ * (t n))))hε1:ε 11 - ε limsup (fun n => Int.fract (ξ * (t n))) atToph: (K : IntermediateField ) [FiniteDimensional K] {ε : }, 0 < ε t, (∀ (n : ), 0 < (t n)) (IsLacunaryReal fun k => (t k)) ξ K, a Set.Icc 0 (1 - ε), y Set.Icc a (a + ε), MapClusterPt y atTop fun n => Int.fract (ξ * (t n))K:IntermediateField inst✝:FiniteDimensional Kε::0 < εt: Khpos: (n : ), 0 < (t n)hlac:IsLacunaryReal fun k => (t k): ξ K, a Set.Icc 0 (1 - ε), y Set.Icc a (a + ε), MapClusterPt y atTop fun n => Int.fract (ξ * (t n))ξ:hξK:ξ Khb:IsBoundedUnder (fun x1 x2 => x1 x2) atTop fun n => Int.fract (ξ * (t n)) := isBoundedUnder_of (Exists.intro 1 fun n => LT.lt.le (Int.fract_lt_one (ξ * (t n))))hε1:¬ε 11 - ε limsup (fun n => Int.fract (ξ * (t n))) atTop h: (K : IntermediateField ) [FiniteDimensional K] {ε : }, 0 < ε t, (∀ (n : ), 0 < (t n)) (IsLacunaryReal fun k => (t k)) ξ K, a Set.Icc 0 (1 - ε), y Set.Icc a (a + ε), MapClusterPt y atTop fun n => Int.fract (ξ * (t n))K:IntermediateField inst✝:FiniteDimensional Kε::0 < εt: Khpos: (n : ), 0 < (t n)hlac:IsLacunaryReal fun k => (t k): ξ K, a Set.Icc 0 (1 - ε), y Set.Icc a (a + ε), MapClusterPt y atTop fun n => Int.fract (ξ * (t n))ξ:hξK:ξ Khb:IsBoundedUnder (fun x1 x2 => x1 x2) atTop fun n => Int.fract (ξ * (t n)) := isBoundedUnder_of (Exists.intro 1 fun n => LT.lt.le (Int.fract_lt_one (ξ * (t n))))hε1:ε 11 - ε limsup (fun n => Int.fract (ξ * (t n))) atTop obtain y, hy, hcluster := ξ hξK (1 - ε) h: (K : IntermediateField ) [FiniteDimensional K] {ε : }, 0 < ε t, (∀ (n : ), 0 < (t n)) (IsLacunaryReal fun k => (t k)) ξ K, a Set.Icc 0 (1 - ε), y Set.Icc a (a + ε), MapClusterPt y atTop fun n => Int.fract (ξ * (t n))K:IntermediateField inst✝:FiniteDimensional Kε::0 < εt: Khpos: (n : ), 0 < (t n)hlac:IsLacunaryReal fun k => (t k): ξ K, a Set.Icc 0 (1 - ε), y Set.Icc a (a + ε), MapClusterPt y atTop fun n => Int.fract (ξ * (t n))ξ:hξK:ξ Khb:IsBoundedUnder (fun x1 x2 => x1 x2) atTop fun n => Int.fract (ξ * (t n)) := isBoundedUnder_of (Exists.intro 1 fun n => LT.lt.le (Int.fract_lt_one (ξ * (t n))))hε1:ε 10 1 - ε All goals completed! 🐙, le_refl _ h: (K : IntermediateField ) [FiniteDimensional K] {ε : }, 0 < ε t, (∀ (n : ), 0 < (t n)) (IsLacunaryReal fun k => (t k)) ξ K, a Set.Icc 0 (1 - ε), y Set.Icc a (a + ε), MapClusterPt y atTop fun n => Int.fract (ξ * (t n))K:IntermediateField inst✝:FiniteDimensional Kε::0 < εt: Khpos: (n : ), 0 < (t n)hlac:IsLacunaryReal fun k => (t k): ξ K, a Set.Icc 0 (1 - ε), y Set.Icc a (a + ε), MapClusterPt y atTop fun n => Int.fract (ξ * (t n))ξ:hξK:ξ Khb:IsBoundedUnder (fun x1 x2 => x1 x2) atTop fun n => Int.fract (ξ * (t n)) := isBoundedUnder_of (Exists.intro 1 fun n => LT.lt.le (Int.fract_lt_one (ξ * (t n))))hε1:ε 1y:hy:y Set.Icc (1 - ε) (1 - ε + ε)hcluster:MapClusterPt y atTop fun n => Int.fract (ξ * (t n))hb_ge:IsBoundedUnder (fun x1 x2 => x1 x2) atTop fun n => Int.fract (ξ * (t n)) := isBoundedUnder_of (Exists.intro 0 fun n => Int.fract_nonneg (ξ * (t n)))1 - ε limsup (fun n => Int.fract (ξ * (t n))) atTop h: (K : IntermediateField ) [FiniteDimensional K] {ε : }, 0 < ε t, (∀ (n : ), 0 < (t n)) (IsLacunaryReal fun k => (t k)) ξ K, a Set.Icc 0 (1 - ε), y Set.Icc a (a + ε), MapClusterPt y atTop fun n => Int.fract (ξ * (t n))K:IntermediateField inst✝:FiniteDimensional Kε::0 < εt: Khpos: (n : ), 0 < (t n)hlac:IsLacunaryReal fun k => (t k): ξ K, a Set.Icc 0 (1 - ε), y Set.Icc a (a + ε), MapClusterPt y atTop fun n => Int.fract (ξ * (t n))ξ:hξK:ξ Khb:IsBoundedUnder (fun x1 x2 => x1 x2) atTop fun n => Int.fract (ξ * (t n)) := isBoundedUnder_of (Exists.intro 1 fun n => LT.lt.le (Int.fract_lt_one (ξ * (t n))))hε1:ε 1y:hy:y Set.Icc (1 - ε) (1 - ε + ε)hcluster:MapClusterPt y atTop fun n => Int.fract (ξ * (t n))hb_ge:IsBoundedUnder (fun x1 x2 => x1 x2) atTop fun n => Int.fract (ξ * (t n)) := isBoundedUnder_of (Exists.intro 0 fun n => Int.fract_nonneg (ξ * (t n)))hcob:IsCoboundedUnder (fun x1 x2 => x1 x2) atTop fun n => Int.fract (ξ * (t n)) := IsBoundedUnder.isCoboundedUnder_le hb_ge1 - ε limsup (fun n => Int.fract (ξ * (t n))) atTop have hle : y limsup (fun n => Int.fract (ξ * (t n : ))) atTop := h: (K : IntermediateField ) [FiniteDimensional K] {ε : }, 0 < ε t, (∀ (n : ), 0 < (t n)) (IsLacunaryReal fun k => (t k)) ξ K, a Set.Icc 0 (1 - ε), y Set.Icc a (a + ε), MapClusterPt y atTop fun n => Int.fract (ξ * (t n)) (K : IntermediateField ) [FiniteDimensional K] {ε : }, 0 < ε t, (∀ (n : ), 0 < (t n)) (IsLacunaryReal fun k => (t k)) ξ K, 1 - ε limsup (fun n => Int.fract (ξ * (t n))) atTop h: (K : IntermediateField ) [FiniteDimensional K] {ε : }, 0 < ε t, (∀ (n : ), 0 < (t n)) (IsLacunaryReal fun k => (t k)) ξ K, a Set.Icc 0 (1 - ε), y Set.Icc a (a + ε), MapClusterPt y atTop fun n => Int.fract (ξ * (t n))K:IntermediateField inst✝:FiniteDimensional Kε::0 < εt: Khpos: (n : ), 0 < (t n)hlac:IsLacunaryReal fun k => (t k): ξ K, a Set.Icc 0 (1 - ε), y Set.Icc a (a + ε), MapClusterPt y atTop fun n => Int.fract (ξ * (t n))ξ:hξK:ξ Khb:IsBoundedUnder (fun x1 x2 => x1 x2) atTop fun n => Int.fract (ξ * (t n)) := isBoundedUnder_of (Exists.intro 1 fun n => LT.lt.le (Int.fract_lt_one (ξ * (t n))))hε1:ε 1y:hy:y Set.Icc (1 - ε) (1 - ε + ε)hcluster:MapClusterPt y atTop fun n => Int.fract (ξ * (t n))hb_ge:IsBoundedUnder (fun x1 x2 => x1 x2) atTop fun n => Int.fract (ξ * (t n)) := isBoundedUnder_of (Exists.intro 0 fun n => Int.fract_nonneg (ξ * (t n)))hcob:IsCoboundedUnder (fun x1 x2 => x1 x2) atTop fun n => Int.fract (ξ * (t n)) := IsBoundedUnder.isCoboundedUnder_le hb_ge y_1 < y, ∃ᶠ (a : ) in atTop, y_1 < Int.fract (ξ * (t a)) All goals completed! 🐙 All goals completed! 🐙 h: (K : IntermediateField ) [FiniteDimensional K] {ε : }, 0 < ε t, (∀ (n : ), 0 < (t n)) (IsLacunaryReal fun k => (t k)) ξ K, a Set.Icc 0 (1 - ε), y Set.Icc a (a + ε), MapClusterPt y atTop fun n => Int.fract (ξ * (t n))K:IntermediateField inst✝:FiniteDimensional Kε::0 < εt: Khpos: (n : ), 0 < (t n)hlac:IsLacunaryReal fun k => (t k): ξ K, a Set.Icc 0 (1 - ε), y Set.Icc a (a + ε), MapClusterPt y atTop fun n => Int.fract (ξ * (t n))ξ:hξK:ξ Khb:IsBoundedUnder (fun x1 x2 => x1 x2) atTop fun n => Int.fract (ξ * (t n)) := isBoundedUnder_of (Exists.intro 1 fun n => LT.lt.le (Int.fract_lt_one (ξ * (t n))))hε1:¬ε 11 - ε limsup (fun n => Int.fract (ξ * (t n))) atTop h: (K : IntermediateField ) [FiniteDimensional K] {ε : }, 0 < ε t, (∀ (n : ), 0 < (t n)) (IsLacunaryReal fun k => (t k)) ξ K, a Set.Icc 0 (1 - ε), y Set.Icc a (a + ε), MapClusterPt y atTop fun n => Int.fract (ξ * (t n))K:IntermediateField inst✝:FiniteDimensional Kε::0 < εt: Khpos: (n : ), 0 < (t n)hlac:IsLacunaryReal fun k => (t k): ξ K, a Set.Icc 0 (1 - ε), y Set.Icc a (a + ε), MapClusterPt y atTop fun n => Int.fract (ξ * (t n))ξ:hξK:ξ Khb:IsBoundedUnder (fun x1 x2 => x1 x2) atTop fun n => Int.fract (ξ * (t n)) := isBoundedUnder_of (Exists.intro 1 fun n => LT.lt.le (Int.fract_lt_one (ξ * (t n))))hε1:1 < ε1 - ε limsup (fun n => Int.fract (ξ * (t n))) atTop h: (K : IntermediateField ) [FiniteDimensional K] {ε : }, 0 < ε t, (∀ (n : ), 0 < (t n)) (IsLacunaryReal fun k => (t k)) ξ K, a Set.Icc 0 (1 - ε), y Set.Icc a (a + ε), MapClusterPt y atTop fun n => Int.fract (ξ * (t n))K:IntermediateField inst✝:FiniteDimensional Kε::0 < εt: Khpos: (n : ), 0 < (t n)hlac:IsLacunaryReal fun k => (t k): ξ K, a Set.Icc 0 (1 - ε), y Set.Icc a (a + ε), MapClusterPt y atTop fun n => Int.fract (ξ * (t n))ξ:hξK:ξ Khb:IsBoundedUnder (fun x1 x2 => x1 x2) atTop fun n => Int.fract (ξ * (t n)) := isBoundedUnder_of (Exists.intro 1 fun n => LT.lt.le (Int.fract_lt_one (ξ * (t n))))hε1:1 < εh0:0 limsup (fun n => Int.fract (ξ * (t n))) atTop := le_limsup_of_frequently_le (Eventually.frequently (Eventually.of_forall fun n => Int.fract_nonneg (ξ * (t n)))) hb1 - ε limsup (fun n => Int.fract (ξ * (t n))) atTop All goals completed! 🐙 end Bugeaud05