equal
deleted
inserted
replaced
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" |