pith. machine review for the scientific record. sign in
lemma proved tactic proof

minus_one_step_forces_phi_shift

show as:
view Lean formalization →

No prose has been written for this declaration yet. The Lean source and graph data below render without it.

generate prose now

formal statement (Lean)

  91lemma minus_one_step_forces_phi_shift
  92    {a b c : ℝ}
  93    (hb : 1 < b)
  94    (h0 : gapAffineLogR a b c 0 = 0)
  95    (h1 : gapAffineLogR a b c 1 = 1)
  96    (hneg1 : gapAffineLogR a b c (-1) = -2) :
  97    b = phi := by

proof body

Tactic-mode proof.

  98  have hb_pos : 0 < b := lt_trans zero_lt_one hb
  99  have hb_ne : b ≠ 0 := ne_of_gt hb_pos
 100  have hplus_pos : 0 < 1 + (1 : ℝ) / b := by
 101    have hinv_pos : 0 < (1 : ℝ) / b := one_div_pos.mpr hb_pos
 102    linarith
 103  have hinv_lt_one : (1 : ℝ) / b < 1 := by
 104    simpa using (one_div_lt_one_div_of_lt (by norm_num : (0 : ℝ) < 1) hb)
 105  have hminus_pos : 0 < 1 - (1 : ℝ) / b := by
 106    linarith
 107  have hminus_ne : (1 - (1 : ℝ) / b) ≠ 0 := ne_of_gt hminus_pos
 108  have hc : c = 0 := by
 109    simpa [gapAffineLogR] using h0
 110  have h1' : a * Real.log (1 + (1 : ℝ) / b) = 1 := by
 111    simpa [gapAffineLogR, hc] using h1
 112  have hneg1_raw : a * Real.log (1 + (-1 : ℝ) / b) = -2 := by
 113    simpa [gapAffineLogR, hc] using hneg1
 114  have hneg1' : a * Real.log (1 - (1 : ℝ) / b) = -2 := by
 115    simpa [sub_eq_add_neg, div_eq_mul_inv, mul_assoc] using hneg1_raw
 116  have ha_ne : a ≠ 0 := by
 117    intro ha
 118    have h1'' := h1'
 119    simp [ha] at h1''
 120  have hscaled : a * (-2 * Real.log (1 + (1 : ℝ) / b)) = -2 := by
 121    calc
 122      a * (-2 * Real.log (1 + (1 : ℝ) / b))
 123          = (-2) * (a * Real.log (1 + (1 : ℝ) / b)) := by ring
 124      _ = (-2) * 1 := by rw [h1']
 125      _ = -2 := by ring
 126  have hlog_rel :
 127      Real.log (1 - (1 : ℝ) / b) = -2 * Real.log (1 + (1 : ℝ) / b) := by
 128    apply (mul_left_cancel₀ ha_ne)
 129    calc
 130      a * Real.log (1 - (1 : ℝ) / b) = -2 := hneg1'
 131      _ = a * (-2 * Real.log (1 + (1 : ℝ) / b)) := by
 132        symm
 133        exact hscaled
 134  have hlog_pow :
 135      Real.log ((1 + (1 : ℝ) / b) ^ (2 : ℝ)) =
 136        2 * Real.log (1 + (1 : ℝ) / b) := by
 137    exact Real.log_rpow hplus_pos (2 : ℝ)
 138  have hlog_sum :
 139      Real.log (1 - (1 : ℝ) / b) +
 140        Real.log ((1 + (1 : ℝ) / b) ^ (2 : ℝ)) = 0 := by
 141    linarith [hlog_rel, hlog_pow]
 142  have hpow_ne : ((1 + (1 : ℝ) / b) ^ (2 : ℝ)) ≠ 0 := by
 143    exact ne_of_gt (Real.rpow_pos_of_pos hplus_pos (2 : ℝ))
 144  have hlog_prod :
 145      Real.log ((1 - (1 : ℝ) / b) * ((1 + (1 : ℝ) / b) ^ (2 : ℝ))) = 0 := by
 146    calc
 147      Real.log ((1 - (1 : ℝ) / b) * ((1 + (1 : ℝ) / b) ^ (2 : ℝ)))
 148          = Real.log (1 - (1 : ℝ) / b) + Real.log ((1 + (1 : ℝ) / b) ^ (2 : ℝ)) := by
 149              simpa using (Real.log_mul hminus_ne hpow_ne)
 150      _ = 0 := hlog_sum
 151  have hprod_pos : 0 < (1 - (1 : ℝ) / b) * ((1 + (1 : ℝ) / b) ^ (2 : ℝ)) := by
 152    exact mul_pos hminus_pos (Real.rpow_pos_of_pos hplus_pos (2 : ℝ))
 153  have hprod_eq_one : (1 - (1 : ℝ) / b) * ((1 + (1 : ℝ) / b) ^ (2 : ℝ)) = 1 := by
 154    exact Real.eq_one_of_pos_of_log_eq_zero hprod_pos hlog_prod
 155  have hpoly : b ^ 2 - b - 1 = 0 := by
 156    have htmp : (1 - (1 : ℝ) / b) * (1 + (1 : ℝ) / b) ^ 2 = 1 := by
 157      simpa [Real.rpow_two] using hprod_eq_one
 158    field_simp [hb_ne] at htmp
 159    nlinarith [htmp]
 160  have hphi_poly : phi ^ 2 - phi - 1 = 0 := by
 161    linarith [phi_sq_eq]
 162  have hfactor : (b - phi) * (b + phi - 1) = 0 := by
 163    nlinarith [hpoly, hphi_poly]
 164  rcases mul_eq_zero.mp hfactor with hroot | hother
 165  · linarith
 166  · have hpos : 0 < b + phi - 1 := by
 167      linarith [hb, one_lt_phi]
 168    exact False.elim ((ne_of_gt hpos) hother)
 169
 170/-- Under the three-point calibration, all affine-log parameters are forced. -/

used by (5)

From the project-wide theorem graph. These declarations reference this one in their body.

depends on (16)

Lean names referenced from this declaration's body.