src/HOL/Transcendental.thy
changeset 80528 6dec6b1f31f5
parent 80523 532156e8f15f
child 80612 e65eed943bee
equal deleted inserted replaced
80523:532156e8f15f 80528:6dec6b1f31f5
  1624   by (metis abs_raw_ln abs_zero exp_not_eq_zero raw_ln_exp)
  1624   by (metis abs_raw_ln abs_zero exp_not_eq_zero raw_ln_exp)
  1625 
  1625 
  1626 lemma raw_ln_mult: "x>0 \<Longrightarrow> y>0 \<Longrightarrow> raw_ln_real (x * y) = raw_ln_real x + raw_ln_real y"
  1626 lemma raw_ln_mult: "x>0 \<Longrightarrow> y>0 \<Longrightarrow> raw_ln_real (x * y) = raw_ln_real x + raw_ln_real y"
  1627   by (metis exp_add exp_ln raw_ln_exp)
  1627   by (metis exp_add exp_ln raw_ln_exp)
  1628 
  1628 
  1629 lemma ln_mult: "(x\<noteq>0 \<longleftrightarrow> y\<noteq>0) \<Longrightarrow> ln (x * y) = ln x + ln y"
  1629 lemma ln_mult: "ln (x * y) = (if x\<noteq>0 \<and> y\<noteq>0 then ln x + ln y else 0)"
  1630   for x :: real
  1630   for x :: real
  1631   by (simp add: ln_real_def abs_mult raw_ln_mult)
  1631   by (simp add: ln_real_def abs_mult raw_ln_mult)
  1632 
  1632 
  1633 lemma ln_mult_pos: "x>0 \<Longrightarrow> y>0 \<Longrightarrow> ln (x * y) = ln x + ln y"
  1633 lemma ln_mult_pos: "x>0 \<Longrightarrow> y>0 \<Longrightarrow> ln (x * y) = ln x + ln y"
  1634   for x :: real
  1634   for x :: real
  1640 
  1640 
  1641 lemma ln_inverse: "ln (inverse x) = - ln x"
  1641 lemma ln_inverse: "ln (inverse x) = - ln x"
  1642   for x :: real
  1642   for x :: real
  1643   by (smt (verit) inverse_nonzero_iff_nonzero ln_mult ln_one ln_real_def right_inverse)
  1643   by (smt (verit) inverse_nonzero_iff_nonzero ln_mult ln_one ln_real_def right_inverse)
  1644 
  1644 
  1645 lemma ln_div: "(x\<noteq>0 \<longleftrightarrow> y\<noteq>0) \<Longrightarrow> ln (x/y) = ln x - ln y"
  1645 lemma ln_div: "ln (x/y) = (if x\<noteq>0 \<and> y\<noteq>0 then ln x - ln y else 0)"
  1646   for x :: real
  1646   for x :: real
  1647   by (simp add: divide_inverse ln_inverse ln_mult)
  1647   by (simp add: divide_inverse ln_inverse ln_mult)
  1648 
  1648 
  1649 lemma ln_divide_pos: "x>0 \<Longrightarrow> y>0 \<Longrightarrow> ln (x/y) = ln x - ln y"
  1649 lemma ln_divide_pos: "x>0 \<Longrightarrow> y>0 \<Longrightarrow> ln (x/y) = ln x - ln y"
  1650   for x :: real
  1650   for x :: real
  2119   for x :: real
  2119   for x :: real
  2120   using exp_ge_add_one_self[of "ln x"] by simp
  2120   using exp_ge_add_one_self[of "ln x"] by simp
  2121 
  2121 
  2122 corollary ln_diff_le: "0 < x \<Longrightarrow> 0 < y \<Longrightarrow> ln x - ln y \<le> (x - y) / y"
  2122 corollary ln_diff_le: "0 < x \<Longrightarrow> 0 < y \<Longrightarrow> ln x - ln y \<le> (x - y) / y"
  2123   for x :: real
  2123   for x :: real
  2124   by (simp add: ln_div [symmetric] diff_divide_distrib ln_le_minus_one)
  2124 by (metis diff_divide_distrib divide_pos_pos divide_self ln_divide_pos ln_le_minus_one order_less_irrefl)
  2125 
  2125 
  2126 lemma ln_eq_minus_one:
  2126 lemma ln_eq_minus_one:
  2127   fixes x :: real
  2127   fixes x :: real
  2128   assumes "0 < x" "ln x = x - 1"
  2128   assumes "0 < x" "ln x = x - 1"
  2129   shows "x = 1"
  2129   shows "x = 1"
  2508 
  2508 
  2509 lemma powr_eq_iff: "\<lbrakk>y>0; a>1\<rbrakk> \<Longrightarrow> a powr x = y \<longleftrightarrow> log a y = x"
  2509 lemma powr_eq_iff: "\<lbrakk>y>0; a>1\<rbrakk> \<Longrightarrow> a powr x = y \<longleftrightarrow> log a y = x"
  2510   by auto
  2510   by auto
  2511 
  2511 
  2512 lemma log_mult:
  2512 lemma log_mult:
  2513   "(x\<noteq>0 \<longleftrightarrow> y\<noteq>0) \<Longrightarrow> log a (x * y) = log a x + log a y"
  2513   "log a (x * y) = (if x\<noteq>0 \<and> y\<noteq>0 then log a x + log a y else 0)"
  2514   by (simp add: log_def ln_mult divide_inverse distrib_right)
  2514   by (simp add: log_def ln_mult divide_inverse distrib_right)
  2515 
  2515 
  2516 lemma log_mult_pos:
  2516 lemma log_mult_pos:
  2517   "x>0 \<Longrightarrow> y>0 \<Longrightarrow> log a (x * y) = log a x + log a y"
  2517   "x>0 \<Longrightarrow> y>0 \<Longrightarrow> log a (x * y) = log a x + log a y"
  2518   by (simp add: log_def ln_mult divide_inverse distrib_right)
  2518   by (simp add: log_def ln_mult divide_inverse distrib_right)
  2539 
  2539 
  2540 lemma log_recip: "log a (1/x) = - log a x"
  2540 lemma log_recip: "log a (1/x) = - log a x"
  2541   by (simp add: divide_inverse log_inverse)
  2541   by (simp add: divide_inverse log_inverse)
  2542 
  2542 
  2543 lemma log_divide:
  2543 lemma log_divide:
  2544   "(x\<noteq>0 \<longleftrightarrow> y\<noteq>0) \<Longrightarrow> log a (x / y) = log a x - log a y"
  2544   "log a (x / y) = (if x\<noteq>0 \<and> y\<noteq>0 then log a x - log a y else 0)"
  2545   by (simp add: diff_divide_distrib ln_div log_def)
  2545   by (simp add: diff_divide_distrib ln_div log_def)
  2546 
  2546 
  2547 lemma log_divide_pos:
  2547 lemma log_divide_pos:
  2548   "x>0 \<Longrightarrow> y>0 \<Longrightarrow> log a (x / y) = log a x - log a y"
  2548   "x>0 \<Longrightarrow> y>0 \<Longrightarrow> log a (x / y) = log a x - log a y"
  2549   using log_divide by auto
  2549   using log_divide by auto
  2837 
  2837 
  2838 lemma ln_root: "n > 0 \<Longrightarrow> ln (root n b) =  ln b / n"
  2838 lemma ln_root: "n > 0 \<Longrightarrow> ln (root n b) =  ln b / n"
  2839   by (metis ln_powr mult_1 powr_inverse_root powr_one' times_divide_eq_left)
  2839   by (metis ln_powr mult_1 powr_inverse_root powr_one' times_divide_eq_left)
  2840 
  2840 
  2841 lemma ln_sqrt: "0 \<le> x \<Longrightarrow> ln (sqrt x) = ln x / 2"
  2841 lemma ln_sqrt: "0 \<le> x \<Longrightarrow> ln (sqrt x) = ln x / 2"
  2842   by (smt (verit) field_sum_of_halves ln_mult real_sqrt_mult_self)
  2842   by (metis (full_types) divide_inverse inverse_eq_divide ln_powr mult.commute of_nat_numeral pos2 root_powr_inverse sqrt_def)
  2843 
  2843 
  2844 lemma log_root: "n > 0 \<Longrightarrow> a \<ge> 0 \<Longrightarrow> log b (root n a) =  log b a / n"
  2844 lemma log_root: "n > 0 \<Longrightarrow> a \<ge> 0 \<Longrightarrow> log b (root n a) =  log b a / n"
  2845   by (simp add: log_def ln_root)
  2845   by (simp add: log_def ln_root)
  2846 
  2846 
  2847 lemma log_powr: "log b (x powr y) = y * log b x"
  2847 lemma log_powr: "log b (x powr y) = y * log b x"