Update logpos.lean

This commit is contained in:
Stefan Kebekus
2024-12-20 20:52:06 +01:00
parent c218c59225
commit 402128875f

View File

@@ -35,5 +35,93 @@ theorem logpos_norm {r : } : log⁺ r = 2⁻¹ * (log r + ‖log r‖) := by
rw [this]
ring
-- WANT: logpos is even and continuous
-- WANT: Inequalities
theorem logpos_abs
{x : } :
log x = log |x| := by
unfold logpos
simp
-- Warning: This should be fixed in Mathlib
theorem log_pos_iff' (hx : 0 x) : 0 < log x 1 < x := by
by_cases h₁x : x = 0
· rw [h₁x]; simp
· exact log_pos_iff (lt_of_le_of_ne hx (Ne.symm h₁x))
theorem Real.monotoneOn_logpos :
MonotoneOn logpos (Set.Ici 0) := by
intro x hx y hy hxy
unfold logpos
simp
by_cases h : log x 0
· tauto
· simp [h]
simp at h
have : log x log y := by
apply log_le_log
--
rw [log_pos_iff' hx] at h
have : (0 : ) < 1 := by exact Real.zero_lt_one
exact lt_trans this h
assumption
constructor
· linarith
· linarith
theorem logpos_add_le_add_logpos_add_log2₀
{a b : }
(h : |a| |b|) :
log (a + b) log a + log b + log 2 := by
nth_rw 1 [logpos_abs]
nth_rw 2 [logpos_abs]
nth_rw 3 [logpos_abs]
calc log |a + b|
_ log (|a| + |b|) := by
apply Real.monotoneOn_logpos
simp [abs_nonneg]; simp [abs_nonneg]
apply add_nonneg
simp [abs_nonneg]; simp [abs_nonneg]
exact abs_add_le a b
_ log (|b| + |b|) := by
apply Real.monotoneOn_logpos
simp [abs_nonneg]
apply add_nonneg
simp [abs_nonneg]; simp [abs_nonneg]
simp [h]
linarith
_ = log (2 * |b|) := by
congr; ring
_ log |b| + log 2 := by
unfold logpos; simp
constructor
· apply add_nonneg
simp
exact log_nonneg one_le_two
· by_cases hb: b = 0
· rw [hb]; simp
exact log_nonneg one_le_two
· rw [log_mul, log_abs, add_comm]
simp
exact Ne.symm (NeZero.ne' 2)
exact abs_ne_zero.mpr hb
_ log |a| + log |b| + log 2 := by
unfold logpos; simp
theorem logpos_add_le_add_logpos_add_log2
{a b : } :
log (a + b) log a + log b + log 2 := by
by_cases h : |a| |b|
· exact logpos_add_le_add_logpos_add_log2₀ h
· rw [add_comm a b, add_comm (log a) (log b)]
apply logpos_add_le_add_logpos_add_log2₀
exact le_of_not_ge h