lemma
proved
B_of_one
show as:
view math explainer →
open explainer
Read the cached plain-language explainer.
open lean source
IndisputableMonolith.RecogSpec.Scales on GitHub at line 21.
browse module
All declarations in this module, on Recognition.
explainer page
depends on
formal source
18 have : 0 < (2:ℝ) := by norm_num
19 simpa [B_of] using pow_pos this k
20
21@[simp] lemma B_of_one : B_of 1 = 2 := by simp [B_of]
22
23lemma one_le_B_of (k : Nat) : (1 : ℝ) ≤ B_of k := by
24 induction k with
25 | zero => simp [B_of]
26 | succ k ih =>
27 have hmul : (2 : ℝ) ≤ 2 * B_of k := by
28 have : 2 * (1 : ℝ) ≤ 2 * B_of k := by
29 have hnonneg : 0 ≤ (2 : ℝ) := by norm_num
30 exact mul_le_mul_of_nonneg_left ih hnonneg
31 simpa using this
32 have h12 : (1 : ℝ) ≤ 2 := by norm_num
33 have : (1 : ℝ) ≤ 2 * B_of k := le_trans h12 hmul
34 simpa [B_of_succ, mul_comm] using this
35
36/-- Two to an integer power: 2^k for k ∈ ℤ. -/
37noncomputable def twoPowZ (k : Int) : ℝ :=
38 if 0 ≤ k then (2 : ℝ) ^ (Int.toNat k)
39 else 1 / ((2 : ℝ) ^ (Int.toNat (-k)))
40
41@[simp] lemma twoPowZ_zero : twoPowZ 0 = 1 := by simp [twoPowZ]
42@[simp] lemma twoPowZ_ofNat (k : Nat) : twoPowZ (Int.ofNat k) = (2 : ℝ) ^ k := by simp [twoPowZ]
43@[simp] lemma twoPowZ_negSucc (k : Nat) : twoPowZ (Int.negSucc k) = 1 / ((2 : ℝ) ^ k.succ) := by
44 simp [twoPowZ]
45
46/-- φ-power wrapper. -/
47noncomputable def PhiPow (x : ℝ) : ℝ := Real.exp (Real.log (Constants.phi) * x)
48
49lemma PhiPow_add (x y : ℝ) : PhiPow (x + y) = PhiPow x * PhiPow y := by
50 unfold PhiPow
51 have hx : Real.log (Constants.phi) * (x + y)