lemma
proved
tactic proof
minus_one_step_forces_phi_shift
show as:
view Lean formalization →
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. -/