Built with doc-gen4, running Lean4. Bubbles () indicate interactive fragments: hover for details, tap to reveal contents. Use Ctrl+↑Ctrl+↓to navigate, Ctrl+🖱️to focus. On Mac, use Cmdinstead of Ctrl.
/-
Copyright (c) 2022 Eric Wieser. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Eric Wieser

! This file was ported from Lean 3 source module data.int.log
! leanprover-community/mathlib commit 1f0096e6caa61e9c849ec2adbd227e960e9dff58
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
import Mathlib.Algebra.Order.Floor
import Mathlib.Algebra.Order.Field.Power
import Mathlib.Data.Nat.Log

/-!
# Integer logarithms in a field with respect to a natural base

This file defines two `ℤ`-valued analogs of the logarithm of `r : R` with base `b : ℕ`:

* `Int.log b r`: Lower logarithm, or floor **log**. Greatest `k` such that `↑b^k ≤ r`.
* `Int.clog b r`: Upper logarithm, or **c**eil **log**. Least `k` such that `r ≤ ↑b^k`.

Note that `Int.log` gives the position of the left-most non-zero digit:
```lean
#eval (Int.log 10 (0.09 : ℚ), Int.log 10 (0.10 : ℚ), Int.log 10 (0.11 : ℚ))
--    (-2,                    -1,                    -1)
#eval (Int.log 10 (9 : ℚ),    Int.log 10 (10 : ℚ),   Int.log 10 (11 : ℚ))
--    (0,                     1,                     1)
```
which means it can be used for computing digit expansions
```lean
import Data.Fin.VecNotation
import Mathlib.Data.Rat.Floor

def digits (b : ℕ) (q : ℚ) (n : ℕ) : ℕ :=
⌊q * ((b : ℚ) ^ (n - Int.log b q))⌋₊ % b

#eval digits 10 (1/7) ∘ ((↑) : Fin 8 → ℕ)
-- ![1, 4, 2, 8, 5, 7, 1, 4]
```

## Main results

* For `Int.log`:
  * `Int.zpow_log_le_self`, `Int.lt_zpow_succ_log_self`: the bounds formed by `Int.log`,
    `(b : R) ^ log b r ≤ r < (b : R) ^ (log b r + 1)`.
  * `Int.zpow_log_gi`: the galois coinsertion between `zpow` and `Int.log`.
* For `Int.clog`:
  * `Int.zpow_pred_clog_lt_self`, `Int.self_le_zpow_clog`: the bounds formed by `Int.clog`,
    `(b : R) ^ (clog b r - 1) < r ≤ (b : R) ^ clog b r`.
  * `Int.clog_zpow_gi`:  the galois insertion between `Int.clog` and `zpow`.
* `Int.neg_log_inv_eq_clog`, `Int.neg_clog_inv_eq_log`: the link between the two definitions.
-/


variable {
R: Type ?u.45115
R
:
Type _: Type (?u.32611+1)
Type _
} [
LinearOrderedSemifield: Type ?u.27172 → Type ?u.27172
LinearOrderedSemifield
R: Type ?u.2
R
] [
FloorSemiring: (α : Type ?u.32617) → [inst : OrderedSemiring α] → Type ?u.32617
FloorSemiring
R: Type ?u.2
R
] namespace Int /-- The greatest power of `b` such that `b ^ log b r ≤ r`. -/ def
log: R
log
(
b:
b
:
: Type
) (
r: R
r
:
R: Type ?u.45
R
) :
: Type
:= if
1: ?m.97
1
r: R
r
then
Nat.log:
Nat.log
b:
b
r: R
r
⌋₊ else -
Nat.clog:
Nat.clog
b:
b
r: R
r
⁻¹⌉₊ #align int.log
Int.log: {R : Type u_1} → [inst : LinearOrderedSemifield R] → [inst : FloorSemiring R] → R
Int.log
theorem
log_of_one_le_right: ∀ (b : ) {r : R}, 1 rlog b r = ↑(Nat.log b r⌋₊)
log_of_one_le_right
(
b:
b
:
: Type
) {
r: R
r
:
R: Type ?u.870
R
} (
hr: 1 r
hr
:
1: ?m.919
1
r: R
r
) :
log: {R : Type ?u.1113} → [inst : LinearOrderedSemifield R] → [inst : FloorSemiring R] → R
log
b:
b
r: R
r
=
Nat.log:
Nat.log
b:
b
r: R
r
⌋₊ :=
if_pos: ∀ {c : Prop} {h : Decidable c}, c∀ {α : Sort ?u.1245} {t e : α}, (if c then t else e) = t
if_pos
hr: 1 r
hr
#align int.log_of_one_le_right
Int.log_of_one_le_right: ∀ {R : Type u_1} [inst : LinearOrderedSemifield R] [inst_1 : FloorSemiring R] (b : ) {r : R}, 1 rlog b r = ↑(Nat.log b r⌋₊)
Int.log_of_one_le_right
theorem
log_of_right_le_one: ∀ {R : Type u_1} [inst : LinearOrderedSemifield R] [inst_1 : FloorSemiring R] (b : ) {r : R}, r 1log b r = -↑(Nat.clog b r⁻¹⌉₊)
log_of_right_le_one
(
b:
b
:
: Type
) {
r: R
r
:
R: Type ?u.1269
R
} (
hr: r 1
hr
:
r: R
r
1: ?m.1318
1
) :
log: {R : Type ?u.1507} → [inst : LinearOrderedSemifield R] → [inst : FloorSemiring R] → R
log
b:
b
r: R
r
= -
Nat.clog:
Nat.clog
b:
b
r: R
r
⁻¹⌉₊ :=

Goals accomplished! 🐙
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

r: R

hr: r 1


R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hr: 1 1


inl
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

r: R

hr✝: r 1

hr: r < 1


inr
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

r: R

hr: r 1


R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hr: 1 1


inl
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hr: 1 1


inl
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

r: R

hr✝: r 1

hr: r < 1


inr
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hr: 1 1


inl
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hr: 1 1


inl
(if 1 1 then ↑(Nat.log b 1⌋₊) else -↑(Nat.clog b 1⁻¹⌉₊)) = -↑(Nat.clog b 1⁻¹⌉₊)
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hr: 1 1


inl
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hr: 1 1


inl
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hr: 1 1


inl
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hr: 1 1


inl
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hr: 1 1


inl
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hr: 1 1


inl
↑(Nat.log b 1⌋₊) = -↑(Nat.clog b 1)
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hr: 1 1


inl
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hr: 1 1


inl
↑(Nat.log b 1) = -↑(Nat.clog b 1)
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hr: 1 1


inl
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hr: 1 1


inl
0 = -↑(Nat.clog b 1)
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hr: 1 1


inl
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hr: 1 1


inl
0 = -0
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hr: 1 1


inl
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hr: 1 1


inl
0 = -0
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hr: 1 1


inl
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hr: 1 1


inl
0 = 0

Goals accomplished! 🐙
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

r: R

hr: r 1


R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

r: R

hr✝: r 1

hr: r < 1


inr
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

r: R

hr✝: r 1

hr: r < 1


inr

Goals accomplished! 🐙
#align int.log_of_right_le_one
Int.log_of_right_le_one: ∀ {R : Type u_1} [inst : LinearOrderedSemifield R] [inst_1 : FloorSemiring R] (b : ) {r : R}, r 1log b r = -↑(Nat.clog b r⁻¹⌉₊)
Int.log_of_right_le_one
@[simp, norm_cast] theorem
log_natCast: ∀ (b n : ), log b n = ↑(Nat.log b n)
log_natCast
(
b:
b
:
: Type
) (
n:
n
:
: Type
) :
log: {R : Type ?u.2390} → [inst : LinearOrderedSemifield R] → [inst : FloorSemiring R] → R
log
b:
b
(
n:
n
:
R: Type ?u.2342
R
) =
Nat.log:
Nat.log
b:
b
n:
n
:=

Goals accomplished! 🐙
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b, n:


log b n = ↑(Nat.log b n)
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:


zero
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b, n✝:


succ
log b ↑(Nat.succ n✝) = ↑(Nat.log b (Nat.succ n✝))
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b, n:


log b n = ↑(Nat.log b n)
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:


zero
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:


zero
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b, n✝:


succ
log b ↑(Nat.succ n✝) = ↑(Nat.log b (Nat.succ n✝))

Goals accomplished! 🐙
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b, n:


log b n = ↑(Nat.log b n)
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b, n✝:


succ
log b ↑(Nat.succ n✝) = ↑(Nat.log b (Nat.succ n✝))
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b, n✝:


succ
log b ↑(Nat.succ n✝) = ↑(Nat.log b (Nat.succ n✝))
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b, n✝:


succ
log b ↑(Nat.succ n✝) = ↑(Nat.log b (Nat.succ n✝))
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b, n✝:


succ
↑(Nat.log b ↑(Nat.succ n✝)⌋₊) = ↑(Nat.log b (Nat.succ n✝))
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b, n✝:


succ.hr
1 ↑(Nat.succ n✝)
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b, n✝:


succ
log b ↑(Nat.succ n✝) = ↑(Nat.log b (Nat.succ n✝))
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b, n✝:


succ
↑(Nat.log b (Nat.succ n✝)) = ↑(Nat.log b (Nat.succ n✝))
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b, n✝:


succ.hr
1 ↑(Nat.succ n✝)
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b, n✝:


succ.hr
1 ↑(Nat.succ n✝)
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b, n✝:


succ
log b ↑(Nat.succ n✝) = ↑(Nat.log b (Nat.succ n✝))

Goals accomplished! 🐙
#align int.log_nat_cast
Int.log_natCast: ∀ {R : Type u_1} [inst : LinearOrderedSemifield R] [inst_1 : FloorSemiring R] (b n : ), log b n = ↑(Nat.log b n)
Int.log_natCast
theorem
log_of_left_le_one: ∀ {b : }, b 1∀ (r : R), log b r = 0
log_of_left_le_one
{
b:
b
:
: Type
} (
hb: b 1
hb
:
b:
b
1: ?m.4797
1
) (
r: R
r
:
R: Type ?u.4750
R
) :
log: {R : Type ?u.4830} → [inst : LinearOrderedSemifield R] → [inst : FloorSemiring R] → R
log
b:
b
r: R
r
=
0: ?m.4845
0
:=

Goals accomplished! 🐙
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: b 1

r: R


log b r = 0
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: b 1

r: R

h: 1 r


inl
log b r = 0
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: b 1

r: R

h: r 1


inr
log b r = 0
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: b 1

r: R


log b r = 0
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: b 1

r: R

h: 1 r


inl
log b r = 0
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: b 1

r: R

h: 1 r


inl
log b r = 0
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: b 1

r: R

h: r 1


inr
log b r = 0
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: b 1

r: R

h: 1 r


inl
log b r = 0
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: b 1

r: R

h: 1 r


inl
↑(Nat.log b r⌋₊) = 0
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: b 1

r: R

h: 1 r


inl
log b r = 0
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: b 1

r: R

h: 1 r


inl
0 = 0
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: b 1

r: R

h: 1 r


inl
log b r = 0
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: b 1

r: R

h: 1 r


inl
0 = 0

Goals accomplished! 🐙
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: b 1

r: R


log b r = 0
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: b 1

r: R

h: r 1


inr
log b r = 0
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: b 1

r: R

h: r 1


inr
log b r = 0
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: b 1

r: R

h: r 1


inr
log b r = 0
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: b 1

r: R

h: r 1


inr
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: b 1

r: R

h: r 1


inr
log b r = 0
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: b 1

r: R

h: r 1


inr
-0 = 0
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: b 1

r: R

h: r 1


inr
log b r = 0
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: b 1

r: R

h: r 1


inr
-0 = 0
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: b 1

r: R

h: r 1


inr
log b r = 0
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: b 1

r: R

h: r 1


inr
0 = 0

Goals accomplished! 🐙
#align int.log_of_left_le_one
Int.log_of_left_le_one: ∀ {R : Type u_1} [inst : LinearOrderedSemifield R] [inst_1 : FloorSemiring R] {b : }, b 1∀ (r : R), log b r = 0
Int.log_of_left_le_one
theorem
log_of_right_le_zero: ∀ (b : ) {r : R}, r 0log b r = 0
log_of_right_le_zero
(
b:
b
:
: Type
) {
r: R
r
:
R: Type ?u.5268
R
} (
hr: r 0
hr
:
r: R
r
0: ?m.5317
0
) :
log: {R : Type ?u.5512} → [inst : LinearOrderedSemifield R] → [inst : FloorSemiring R] → R
log
b:
b
r: R
r
=
0: ?m.5525
0
:=

Goals accomplished! 🐙
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

r: R

hr: r 0


log b r = 0
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

r: R

hr: r 0


log b r = 0
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

r: R

hr: r 0


R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

r: R

hr: r 0


log b r = 0
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

r: R

hr: r 0


-0 = 0
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

r: R

hr: r 0


log b r = 0
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

r: R

hr: r 0


-0 = 0
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

r: R

hr: r 0


log b r = 0
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

r: R

hr: r 0


0 = 0

Goals accomplished! 🐙
#align int.log_of_right_le_zero
Int.log_of_right_le_zero: ∀ {R : Type u_1} [inst : LinearOrderedSemifield R] [inst_1 : FloorSemiring R] (b : ) {r : R}, r 0log b r = 0
Int.log_of_right_le_zero
theorem
zpow_log_le_self: ∀ {R : Type u_1} [inst : LinearOrderedSemifield R] [inst_1 : FloorSemiring R] {b : } {r : R}, 1 < b0 < rb ^ log b r r
zpow_log_le_self
{
b:
b
:
: Type
} {
r: R
r
:
R: Type ?u.6740
R
} (
hb: 1 < b
hb
:
1: ?m.6789
1
<
b:
b
) (
hr: 0 < r
hr
:
0: ?m.6826
0
<
r: R
r
) : (
b:
b
:
R: Type ?u.6740
R
) ^
log: {R : Type ?u.7098} → [inst : LinearOrderedSemifield R] → [inst : FloorSemiring R] → R
log
b:
b
r: R
r
r: R
r
:=

Goals accomplished! 🐙
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

r: R

hb: 1 < b

hr: 0 < r


b ^ log b r r
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

r: R

hb: 1 < b

hr: 0 < r

hr1: 1 r


inl
b ^ log b r r
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

r: R

hb: 1 < b

hr: 0 < r

hr1: r 1


inr
b ^ log b r r
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

r: R

hb: 1 < b

hr: 0 < r


b ^ log b r r
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

r: R

hb: 1 < b

hr: 0 < r

hr1: 1 r


inl
b ^ log b r r
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

r: R

hb: 1 < b

hr: 0 < r

hr1: 1 r


inl
b ^ log b r r
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

r: R

hb: 1 < b

hr: 0 < r

hr1: r 1


inr
b ^ log b r r
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

r: R

hb: 1 < b

hr: 0 < r

hr1: 1 r


inl
b ^ log b r r
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

r: R

hb: 1 < b

hr: 0 < r

hr1: 1 r


inl
b ^ ↑(Nat.log b r⌋₊) r
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

r: R

hb: 1 < b

hr: 0 < r

hr1: 1 r


inl
b ^ ↑(Nat.log b r⌋₊) r
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

r: R

hb: 1 < b

hr: 0 < r

hr1: 1 r


inl
b ^ log b r r
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

r: R

hb: 1 < b

hr: 0 < r

hr1: 1 r


inl
b ^ ↑(Nat.log b r⌋₊) r
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

r: R

hb: 1 < b

hr: 0 < r

hr1: 1 r


inl
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

r: R

hb: 1 < b

hr: 0 < r

hr1: 1 r


inl
b ^ ↑(Nat.log b r⌋₊) r
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

r: R

hb: 1 < b

hr: 0 < r

hr1: 1 r


inl
↑(b ^ Nat.log b r⌋₊) r
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

r: R

hb: 1 < b

hr: 0 < r

hr1: 1 r


inl
b ^ ↑(Nat.log b r⌋₊) r
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

r: R

hb: 1 < b

hr: 0 < r

hr1: 1 r


inl
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

r: R

hb: 1 < b

hr: 0 < r

hr1: 1 r


inl
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

r: R

hb: 1 < b

hr: 0 < r

hr1: 1 r


inl
b ^ log b r r

Goals accomplished! 🐙
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

r: R

hb: 1 < b

hr: 0 < r


b ^ log b r r
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

r: R

hb: 1 < b

hr: 0 < r

hr1: r 1


inr
b ^ log b r r
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

r: R

hb: 1 < b

hr: 0 < r

hr1: r 1


inr
b ^ log b r r
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

r: R

hb: 1 < b

hr: 0 < r

hr1: r 1


inr
b ^ log b r r
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

r: R

hb: 1 < b

hr: 0 < r

hr1: r 1


inr
b ^ (-↑(Nat.clog b r⁻¹⌉₊)) r
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

r: R

hb: 1 < b

hr: 0 < r

hr1: r 1


inr
b ^ log b r r
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

r: R

hb: 1 < b

hr: 0 < r

hr1: r 1


inr
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

r: R

hb: 1 < b

hr: 0 < r

hr1: r 1


inr
b ^ log b r r
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

r: R

hb: 1 < b

hr: 0 < r

hr1: r 1


inr
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

r: R

hb: 1 < b

hr: 0 < r

hr1: r 1


inr
b ^ log b r r
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

r: R

hb: 1 < b

hr: 0 < r

hr1: r 1


inr
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

r: R

hb: 1 < b

hr: 0 < r

hr1: r 1


inr
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

r: R

hb: 1 < b

hr: 0 < r

hr1: r 1


inr
b ^ log b r r

Goals accomplished! 🐙
#align int.zpow_log_le_self
Int.zpow_log_le_self: ∀ {R : Type u_1} [inst : LinearOrderedSemifield R] [inst_1 : FloorSemiring R] {b : } {r : R}, 1 < b0 < rb ^ log b r r
Int.zpow_log_le_self
theorem
lt_zpow_succ_log_self: ∀ {b : }, 1 < b∀ (r : R), r < b ^ (log b r + 1)
lt_zpow_succ_log_self
{
b:
b
:
: Type
} (
hb: 1 < b
hb
:
1: ?m.11226
1
<
b:
b
) (
r: R
r
:
R: Type ?u.11179
R
) :
r: R
r
< (
b:
b
:
R: Type ?u.11179
R
) ^ (
log: {R : Type ?u.11348} → [inst : LinearOrderedSemifield R] → [inst : FloorSemiring R] → R
log
b:
b
r: R
r
+
1: ?m.11361
1
) :=

Goals accomplished! 🐙
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: 1 < b

r: R


r < b ^ (log b r + 1)
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: 1 < b

r: R

hr: r 0


inl
r < b ^ (log b r + 1)
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: 1 < b

r: R

hr: 0 < r


inr
r < b ^ (log b r + 1)
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: 1 < b

r: R


r < b ^ (log b r + 1)
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: 1 < b

r: R

hr: r 0


inl
r < b ^ (log b r + 1)
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: 1 < b

r: R

hr: r 0


inl
r < b ^ (log b r + 1)
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: 1 < b

r: R

hr: 0 < r


inr
r < b ^ (log b r + 1)
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: 1 < b

r: R

hr: r 0


inl
r < b ^ (log b r + 1)
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: 1 < b

r: R

hr: r 0


inl
r < b ^ (0 + 1)
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: 1 < b

r: R

hr: r 0


inl
r < b ^ (log b r + 1)
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: 1 < b

r: R

hr: r 0


inl
r < b ^ 1
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: 1 < b

r: R

hr: r 0


inl
r < b ^ (log b r + 1)
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: 1 < b

r: R

hr: r 0


inl
r < b
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: 1 < b

r: R

hr: r 0


inl
r < b
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: 1 < b

r: R

hr: r 0


inl
r < b ^ (log b r + 1)
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: 1 < b

r: R

hr: r 0


inl
r < b

Goals accomplished! 🐙
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: 1 < b

r: R

hr: r 0


1 b

Goals accomplished! 🐙

Goals accomplished! 🐙
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: 1 < b

r: R


r < b ^ (log b r + 1)
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: 1 < b

r: R

hr: 0 < r

hr1: 1 r


inr.inl
r < b ^ (log b r + 1)
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: 1 < b

r: R

hr: 0 < r

hr1: r < 1


inr.inr
r < b ^ (log b r + 1)
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: 1 < b

r: R


r < b ^ (log b r + 1)
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: 1 < b

r: R

hr: 0 < r

hr1: 1 r


inr.inl
r < b ^ (log b r + 1)
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: 1 < b

r: R

hr: 0 < r

hr1: 1 r


inr.inl
r < b ^ (log b r + 1)
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: 1 < b

r: R

hr: 0 < r

hr1: r < 1


inr.inr
r < b ^ (log b r + 1)
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: 1 < b

r: R

hr: 0 < r

hr1: 1 r


inr.inl
r < b ^ (log b r + 1)
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: 1 < b

r: R

hr: 0 < r

hr1: 1 r


inr.inl
r < b ^ (↑(Nat.log b r⌋₊) + 1)
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: 1 < b

r: R

hr: 0 < r

hr1: 1 r


inr.inl
r < b ^ (↑(Nat.log b r⌋₊) + 1)
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: 1 < b

r: R

hr: 0 < r

hr1: 1 r


inr.inl
r < b ^ (log b r + 1)
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: 1 < b

r: R

hr: 0 < r

hr1: 1 r


inr.inl
r < b ^ (↑(Nat.log b r⌋₊) + 1)
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: 1 < b

r: R

hr: 0 < r

hr1: 1 r


inr.inl
r < b ^ ↑(Nat.succ (Nat.log b r⌋₊))
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: 1 < b

r: R

hr: 0 < r

hr1: 1 r


inr.inl
r < b ^ (↑(Nat.log b r⌋₊) + 1)
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: 1 < b

r: R

hr: 0 < r

hr1: 1 r


inr.inl
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: 1 < b

r: R

hr: 0 < r

hr1: 1 r


inr.inl
r < b ^ (↑(Nat.log b r⌋₊) + 1)
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: 1 < b

r: R

hr: 0 < r

hr1: 1 r


inr.inl
r < ↑(b ^ Nat.succ (Nat.log b r⌋₊))
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: 1 < b

r: R

hr: 0 < r

hr1: 1 r


inr.inl
r < ↑(b ^ Nat.succ (Nat.log b r⌋₊))
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: 1 < b

r: R

hr: 0 < r

hr1: 1 r


inr.inl
r < b ^ (log b r + 1)
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: 1 < b

r: R

hr: 0 < r

hr1: 1 r


inr.inl.h
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: 1 < b

r: R

hr: 0 < r

hr1: 1 r


inr.inl
r < b ^ (log b r + 1)

Goals accomplished! 🐙
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: 1 < b

r: R


r < b ^ (log b r + 1)
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: 1 < b

r: R

hr: 0 < r

hr1: r < 1


inr.inr
r < b ^ (log b r + 1)
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: 1 < b

r: R

hr: 0 < r

hr1: r < 1


inr.inr
r < b ^ (log b r + 1)
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: 1 < b

r: R

hr: 0 < r

hr1: r < 1


inr.inr
r < b ^ (log b r + 1)
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: 1 < b

r: R

hr: 0 < r

hr1: r < 1


inr.inr
r < b ^ (-↑(Nat.clog b r⁻¹⌉₊) + 1)
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: 1 < b

r: R

hr: 0 < r

hr1: r < 1


inr.inr
r < b ^ (-↑(Nat.clog b r⁻¹⌉₊) + 1)
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: 1 < b

r: R

hr: 0 < r

hr1: r < 1


inr.inr
r < b ^ (log b r + 1)
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: 1 < b

r: R

hr: 0 < r

hr1: r < 1

hcri: 1 < r⁻¹


inr.inr
r < b ^ (-↑(Nat.clog b r⁻¹⌉₊) + 1)
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: 1 < b

r: R

hr: 0 < r

hr1: r < 1


inr.inr
r < b ^ (log b r + 1)
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: 1 < b

r: R

hr: 0 < r

hr1: r < 1

hcri: 1 < r⁻¹

this: 1 Nat.clog b r⁻¹⌉₊


inr.inr
r < b ^ (-↑(Nat.clog b r⁻¹⌉₊) + 1)
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: 1 < b

r: R

hr: 0 < r

hr1: r < 1


inr.inr
r < b ^ (log b r + 1)
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: 1 < b

r: R

hr: 0 < r

hr1: r < 1

hcri: 1 < r⁻¹

this: 1 Nat.clog b r⁻¹⌉₊


inr.inr
r < b ^ (-↑(Nat.clog b r⁻¹⌉₊) + 1)
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: 1 < b

r: R

hr: 0 < r

hr1: r < 1

hcri: 1 < r⁻¹

this: 1 Nat.clog b r⁻¹⌉₊


inr.inr
r < b ^ (1 - ↑(Nat.clog b r⁻¹⌉₊))
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: 1 < b

r: R

hr: 0 < r

hr1: r < 1

hcri: 1 < r⁻¹

this: 1 Nat.clog b r⁻¹⌉₊


inr.inr
r < b ^ (-↑(Nat.clog b r⁻¹⌉₊) + 1)
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: 1 < b

r: R

hr: 0 < r

hr1: r < 1

hcri: 1 < r⁻¹

this: 1 Nat.clog b r⁻¹⌉₊


inr.inr
r < b ^ (-(↑(Nat.clog b r⁻¹⌉₊) - 1))
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: 1 < b

r: R

hr: 0 < r

hr1: r < 1

hcri: 1 < r⁻¹

this: 1 Nat.clog b r⁻¹⌉₊


inr.inr
r < b ^ (-↑(Nat.clog b r⁻¹⌉₊) + 1)
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: 1 < b

r: R

hr: 0 < r

hr1: r < 1

hcri: 1 < r⁻¹

this: 1 Nat.clog b r⁻¹⌉₊


inr.inr
r < b ^ (-(↑(Nat.clog b r⁻¹⌉₊) - 1))
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: 1 < b

r: R

hr: 0 < r

hr1: r < 1

hcri: 1 < r⁻¹

this: 1 Nat.clog b r⁻¹⌉₊


inr.inr
r < b ^ (-↑(Nat.clog b r⁻¹⌉₊) + 1)
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: 1 < b

r: R

hr: 0 < r

hr1: r < 1

hcri: 1 < r⁻¹

this: 1 Nat.clog b r⁻¹⌉₊


inr.inr
r < b ^ (-↑(Nat.clog b r⁻¹⌉₊ - 1))
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: 1 < b

r: R

hr: 0 < r

hr1: r < 1

hcri: 1 < r⁻¹

this: 1 Nat.clog b r⁻¹⌉₊


inr.inr
r < b ^ (-↑(Nat.clog b r⁻¹⌉₊) + 1)
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: 1 < b

r: R

hr: 0 < r

hr1: r < 1

hcri: 1 < r⁻¹

this: 1 Nat.clog b r⁻¹⌉₊


inr.inr
r < (b ^ ↑(Nat.clog b r⁻¹⌉₊ - 1))⁻¹
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: 1 < b

r: R

hr: 0 < r

hr1: r < 1

hcri: 1 < r⁻¹

this: 1 Nat.clog b r⁻¹⌉₊


inr.inr
r < b ^ (-↑(Nat.clog b r⁻¹⌉₊) + 1)
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: 1 < b

r: R

hr: 0 < r

hr1: r < 1

hcri: 1 < r⁻¹

this: 1 Nat.clog b r⁻¹⌉₊


inr.inr
r < (b ^ (Nat.clog b r⁻¹⌉₊ - 1))⁻¹
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: 1 < b

r: R

hr: 0 < r

hr1: r < 1

hcri: 1 < r⁻¹

this: 1 Nat.clog b r⁻¹⌉₊


inr.inr
r < b ^ (-↑(Nat.clog b r⁻¹⌉₊) + 1)
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: 1 < b

r: R

hr: 0 < r

hr1: r < 1

hcri: 1 < r⁻¹

this: 1 Nat.clog b r⁻¹⌉₊


inr.inr
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: 1 < b

r: R

hr: 0 < r

hr1: r < 1

hcri: 1 < r⁻¹

this: 1 Nat.clog b r⁻¹⌉₊


inr.inr
r < b ^ (-↑(Nat.clog b r⁻¹⌉₊) + 1)
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: 1 < b

r: R

hr: 0 < r

hr1: r < 1

hcri: 1 < r⁻¹

this: 1 Nat.clog b r⁻¹⌉₊


inr.inr
↑(b ^ (Nat.clog b r⁻¹⌉₊ - 1)) < r⁻¹
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: 1 < b

r: R

hr: 0 < r

hr1: r < 1

hcri: 1 < r⁻¹

this: 1 Nat.clog b r⁻¹⌉₊


inr.inr
↑(b ^ (Nat.clog b r⁻¹⌉₊ - 1)) < r⁻¹
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: 1 < b

r: R

hr: 0 < r

hr1: r < 1


inr.inr
r < b ^ (log b r + 1)
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: 1 < b

r: R

hr: 0 < r

hr1: r < 1

hcri: 1 < r⁻¹

this: 1 Nat.clog b r⁻¹⌉₊


inr.inr
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: 1 < b

r: R

hr: 0 < r

hr1: r < 1


inr.inr
r < b ^ (log b r + 1)

Goals accomplished! 🐙
#align int.lt_zpow_succ_log_self
Int.lt_zpow_succ_log_self: ∀ {R : Type u_1} [inst : LinearOrderedSemifield R] [inst_1 : FloorSemiring R] {b : }, 1 < b∀ (r : R), r < b ^ (log b r + 1)
Int.lt_zpow_succ_log_self
@[simp] theorem
log_zero_right: ∀ (b : ), log b 0 = 0
log_zero_right
(
b:
b
:
: Type
) :
log: {R : Type ?u.19742} → [inst : LinearOrderedSemifield R] → [inst : FloorSemiring R] → R
log
b:
b
(
0: ?m.19748
0
:
R: Type ?u.19696
R
) =
0: ?m.19819
0
:=
log_of_right_le_zero: ∀ {R : Type ?u.19845} [inst : LinearOrderedSemifield R] [inst_1 : FloorSemiring R] (b : ) {r : R}, r 0log b r = 0
log_of_right_le_zero
b:
b
le_rfl: ∀ {α : Type ?u.19868} [inst : Preorder α] {a : α}, a a
le_rfl
#align int.log_zero_right
Int.log_zero_right: ∀ {R : Type u_1} [inst : LinearOrderedSemifield R] [inst_1 : FloorSemiring R] (b : ), log b 0 = 0
Int.log_zero_right
@[simp] theorem
log_one_right: ∀ {R : Type u_1} [inst : LinearOrderedSemifield R] [inst_1 : FloorSemiring R] (b : ), log b 1 = 0
log_one_right
(
b:
b
:
: Type
) :
log: {R : Type ?u.20080} → [inst : LinearOrderedSemifield R] → [inst : FloorSemiring R] → R
log
b:
b
(
1: ?m.20086
1
:
R: Type ?u.20034
R
) =
0: ?m.20157
0
:=

Goals accomplished! 🐙
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:


log b 1 = 0
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:


log b 1 = 0
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:


↑(Nat.log b 1⌋₊) = 0
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:


log b 1 = 0
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:


↑(Nat.log b 1) = 0
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:


log b 1 = 0
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:


0 = 0
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:


log b 1 = 0
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:


0 = 0

Goals accomplished! 🐙
#align int.log_one_right
Int.log_one_right: ∀ {R : Type u_1} [inst : LinearOrderedSemifield R] [inst_1 : FloorSemiring R] (b : ), log b 1 = 0
Int.log_one_right
-- Porting note: needed to replace b ^ z with (b : R) ^ z in the below theorem
log_zpow: ∀ {R : Type u_1} [inst : LinearOrderedSemifield R] [inst_1 : FloorSemiring R] {b : }, 1 < b∀ (z : ), log b (b ^ z) = z
log_zpow
{
b:
b
:
: Type
} (
hb: 1 < b
hb
:
1: ?m.20600
1
<
b:
b
) (
z:
z
:
: Type
) :
log: {R : Type ?u.20638} → [inst : LinearOrderedSemifield R] → [inst : FloorSemiring R] → R
log
b:
b
((
b:
b
:
R: Type ?u.20553
R
) ^
z:
z
:
R: Type ?u.20553
R
) =
z:
z
:=

Goals accomplished! 🐙
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: 1 < b

z:


log b (b ^ z) = z
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: 1 < b

n:


intro.inl
log b (b ^ n) = n
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: 1 < b

n:


intro.inr
log b (b ^ (-n)) = -n
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: 1 < b

z:


log b (b ^ z) = z
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: 1 < b

n:


intro.inl
log b (b ^ n) = n
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: 1 < b

n:


intro.inl
log b (b ^ n) = n
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: 1 < b

n:


intro.inr
log b (b ^ (-n)) = -n
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: 1 < b

n:


intro.inl
log b (b ^ n) = n
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: 1 < b

n:


intro.inl
↑(Nat.log b b ^ n⌋₊) = n
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: 1 < b

n:


1 b
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: 1 < b

n:


intro.inl
log b (b ^ n) = n
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: 1 < b

n:


intro.inl
↑(Nat.log b b ^ n⌋₊) = n
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: 1 < b

n:


1 b
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: 1 < b

n:


intro.inl
log b (b ^ n) = n
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: 1 < b

n:


intro.inl
↑(Nat.log b ↑(b ^ n)⌋₊) = n
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: 1 < b

n:


1 b
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: 1 < b

n:


intro.inl
log b (b ^ n) = n
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: 1 < b

n:


intro.inl
↑(Nat.log b (b ^ n)) = n
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: 1 < b

n:


1 b
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: 1 < b

n:


intro.inl
log b (b ^ n) = n
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: 1 < b

n:


intro.inl
n = n
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: 1 < b

n:


1 b
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: 1 < b

n:


1 b
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: 1 < b

n:


intro.inl
log b (b ^ n) = n

Goals accomplished! 🐙
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: 1 < b

z:


log b (b ^ z) = z
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: 1 < b

n:


intro.inr
log b (b ^ (-n)) = -n
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: 1 < b

n:


intro.inr
log b (b ^ (-n)) = -n
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: 1 < b

n:


intro.inr
log b (b ^ (-n)) = -n
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: 1 < b

n:


intro.inr
-↑(Nat.clog b (b ^ (-n))⁻¹⌉₊) = -n
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: 1 < b

n:


1 b
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: 1 < b

n:


intro.inr
log b (b ^ (-n)) = -n
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: 1 < b

n:


intro.inr
-↑(Nat.clog b (b ^ n)⁻¹⁻¹⌉₊) = -n
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: 1 < b

n:


1 b
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: 1 < b

n:


intro.inr
log b (b ^ (-n)) = -n
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: 1 < b

n:


intro.inr
-↑(Nat.clog b b ^ n⌉₊) = -n
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: 1 < b

n:


1 b
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: 1 < b

n:


intro.inr
log b (b ^ (-n)) = -n
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: 1 < b

n:


intro.inr
-↑(Nat.clog b b ^ n⌉₊) = -n
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: 1 < b

n:


1 b
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: 1 < b

n:


intro.inr
log b (b ^ (-n)) = -n
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: 1 < b

n:


intro.inr
-↑(Nat.clog b ↑(b ^ n)⌉₊) = -n
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: 1 < b

n:


1 b
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: 1 < b

n:


intro.inr
log b (b ^ (-n)) = -n
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: 1 < b

n:


intro.inr
-↑(Nat.clog b (b ^ n)) = -n
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: 1 < b

n:


1 b
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: 1 < b

n:


intro.inr
log b (b ^ (-n)) = -n
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: 1 < b

n:


intro.inr
-n = -n
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: 1 < b

n:


1 b
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: 1 < b

n:


1 b
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

hb: 1 < b

n:


intro.inr
log b (b ^ (-n)) = -n

Goals accomplished! 🐙
#align int.log_zpow
Int.log_zpow: ∀ {R : Type u_1} [inst : LinearOrderedSemifield R] [inst_1 : FloorSemiring R] {b : }, 1 < b∀ (z : ), log b (b ^ z) = z
Int.log_zpow
@[mono] theorem
log_mono_right: ∀ {b : } {r₁ r₂ : R}, 0 < r₁r₁ r₂log b r₁ log b r₂
log_mono_right
{
b:
b
:
: Type
} {
r₁: R
r₁
r₂: R
r₂
:
R: Type ?u.25031
R
} (
h₀: 0 < r₁
h₀
:
0: ?m.25082
0
<
r₁: R
r₁
) (
h: r₁ r₂
h
:
r₁: R
r₁
r₂: R
r₂
) :
log: {R : Type ?u.25372} → [inst : LinearOrderedSemifield R] → [inst : FloorSemiring R] → R
log
b:
b
r₁: R
r₁
log: {R : Type ?u.25384} → [inst : LinearOrderedSemifield R] → [inst : FloorSemiring R] → R
log
b:
b
r₂: R
r₂
:=

Goals accomplished! 🐙
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

r₁, r₂: R

h₀: 0 < r₁

h: r₁ r₂


log b r₁ log b r₂
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

r₁, r₂: R

h₀: 0 < r₁

h: r₁ r₂

hb: b 1


inl
log b r₁ log b r₂
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

r₁, r₂: R

h₀: 0 < r₁

h: r₁ r₂

hb: 1 < b


inr
log b r₁ log b r₂
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

r₁, r₂: R

h₀: 0 < r₁

h: r₁ r₂


log b r₁ log b r₂
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

r₁, r₂: R

h₀: 0 < r₁

h: r₁ r₂

hb: b 1


inl
log b r₁ log b r₂
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

r₁, r₂: R

h₀: 0 < r₁

h: r₁ r₂

hb: b 1


inl
log b r₁ log b r₂
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

r₁, r₂: R

h₀: 0 < r₁

h: r₁ r₂

hb: 1 < b


inr
log b r₁ log b r₂
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

r₁, r₂: R

h₀: 0 < r₁

h: r₁ r₂

hb: b 1


inl
log b r₁ log b r₂
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

r₁, r₂: R

h₀: 0 < r₁

h: r₁ r₂

hb: b 1


inl
0 log b r₂
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

r₁, r₂: R

h₀: 0 < r₁

h: r₁ r₂

hb: b 1


inl
log b r₁ log b r₂
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

r₁, r₂: R

h₀: 0 < r₁

h: r₁ r₂

hb: b 1


inl
0 0

Goals accomplished! 🐙
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

r₁, r₂: R

h₀: 0 < r₁

h: r₁ r₂


log b r₁ log b r₂
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

r₁, r₂: R

h₀: 0 < r₁

h: r₁ r₂

hb: 1 < b

h₁: r₁ 1


inr.inl
log b r₁ log b r₂
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

r₁, r₂: R

h₀: 0 < r₁

h: r₁ r₂

hb: 1 < b

h₁: 1 r₁


inr.inr
log b r₁ log b r₂
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

r₁, r₂: R

h₀: 0 < r₁

h: r₁ r₂

hb: 1 < b


inr
log b r₁ log b r₂
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

r₁, r₂: R

h₀: 0 < r₁

h: r₁ r₂

hb: 1 < b

h₁: r₁ 1


inr.inl
log b r₁ log b r₂
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

r₁, r₂: R

h₀: 0 < r₁

h: r₁ r₂

hb: 1 < b

h₁: 1 r₁


inr.inr
log b r₁ log b r₂
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

r₁, r₂: R

h₀: 0 < r₁

h: r₁ r₂

hb: 1 < b


inr
log b r₁ log b r₂
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

r₁, r₂: R

h₀: 0 < r₁

h: r₁ r₂

hb: 1 < b

h₁: r₁ 1

h₂: r₂ 1


inr.inl.inl
log b r₁ log b r₂
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

r₁, r₂: R

h₀: 0 < r₁

h: r₁ r₂

hb: 1 < b

h₁: r₁ 1

h₂: 1 r₂


inr.inl.inr
log b r₁ log b r₂
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

r₁, r₂: R

h₀: 0 < r₁

h: r₁ r₂


log b r₁ log b r₂
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

r₁, r₂: R

h₀: 0 < r₁

h: r₁ r₂

hb: 1 < b

h₁: r₁ 1

h₂: r₂ 1


inr.inl.inl
log b r₁ log b r₂
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

r₁, r₂: R

h₀: 0 < r₁

h: r₁ r₂

hb: 1 < b

h₁: r₁ 1

h₂: r₂ 1


inr.inl.inl
log b r₁ log b r₂
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

r₁, r₂: R

h₀: 0 < r₁

h: r₁ r₂

hb: 1 < b

h₁: r₁ 1

h₂: 1 r₂


inr.inl.inr
log b r₁ log b r₂
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

r₁, r₂: R

h₀: 0 < r₁

h: r₁ r₂

hb: 1 < b

h₁: 1 r₁

h₂: r₂ 1


inr.inr.inl
log b r₁ log b r₂
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

r₁, r₂: R

h₀: 0 < r₁

h: r₁ r₂

hb: 1 < b

h₁: 1 r₁

h₂: 1 r₂


inr.inr.inr
log b r₁ log b r₂
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

r₁, r₂: R

h₀: 0 < r₁

h: r₁ r₂

hb: 1 < b

h₁: r₁ 1

h₂: r₂ 1


inr.inl.inl
log b r₁ log b r₂
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

r₁, r₂: R

h₀: 0 < r₁

h: r₁ r₂

hb: 1 < b

h₁: r₁ 1

h₂: r₂ 1


inr.inl.inl
-↑(Nat.clog b r₁⁻¹⌉₊) log b r₂
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

r₁, r₂: R

h₀: 0 < r₁

h: r₁ r₂

hb: 1 < b

h₁: r₁ 1

h₂: r₂ 1


inr.inl.inl
log b r₁ log b r₂
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

r₁, r₂: R

h₀: 0 < r₁

h: r₁ r₂

hb: 1 < b

h₁: r₁ 1

h₂: r₂ 1


inr.inl.inl
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

r₁, r₂: R

h₀: 0 < r₁

h: r₁ r₂

hb: 1 < b

h₁: r₁ 1

h₂: r₂ 1


inr.inl.inl
log b r₁ log b r₂
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

r₁, r₂: R

h₀: 0 < r₁

h: r₁ r₂

hb: 1 < b

h₁: r₁ 1

h₂: r₂ 1


inr.inl.inl
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

r₁, r₂: R

h₀: 0 < r₁

h: r₁ r₂

hb: 1 < b

h₁: r₁ 1

h₂: r₂ 1


inr.inl.inl
log b r₁ log b r₂
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

r₁, r₂: R

h₀: 0 < r₁

h: r₁ r₂

hb: 1 < b

h₁: r₁ 1

h₂: r₂ 1


inr.inl.inl
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

r₁, r₂: R

h₀: 0 < r₁

h: r₁ r₂

hb: 1 < b

h₁: r₁ 1

h₂: r₂ 1


inr.inl.inl
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

r₁, r₂: R

h₀: 0 < r₁

h: r₁ r₂

hb: 1 < b

h₁: r₁ 1

h₂: r₂ 1


inr.inl.inl
log b r₁ log b r₂

Goals accomplished! 🐙
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

r₁, r₂: R

h₀: 0 < r₁

h: r₁ r₂


log b r₁ log b r₂
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

r₁, r₂: R

h₀: 0 < r₁

h: r₁ r₂

hb: 1 < b

h₁: r₁ 1

h₂: 1 r₂


inr.inl.inr
log b r₁ log b r₂
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

r₁, r₂: R

h₀: 0 < r₁

h: r₁ r₂

hb: 1 < b

h₁: r₁ 1

h₂: 1 r₂


inr.inl.inr
log b r₁ log b r₂
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

r₁, r₂: R

h₀: 0 < r₁

h: r₁ r₂

hb: 1 < b

h₁: 1 r₁

h₂: r₂ 1


inr.inr.inl
log b r₁ log b r₂
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

r₁, r₂: R

h₀: 0 < r₁

h: r₁ r₂

hb: 1 < b

h₁: 1 r₁

h₂: 1 r₂


inr.inr.inr
log b r₁ log b r₂
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

r₁, r₂: R

h₀: 0 < r₁

h: r₁ r₂

hb: 1 < b

h₁: r₁ 1

h₂: 1 r₂


inr.inl.inr
log b r₁ log b r₂
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

r₁, r₂: R

h₀: 0 < r₁

h: r₁ r₂

hb: 1 < b

h₁: r₁ 1

h₂: 1 r₂


inr.inl.inr
-↑(Nat.clog b r₁⁻¹⌉₊) log b r₂
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

r₁, r₂: R

h₀: 0 < r₁

h: r₁ r₂

hb: 1 < b

h₁: r₁ 1

h₂: 1 r₂


inr.inl.inr
log b r₁ log b r₂
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

r₁, r₂: R

h₀: 0 < r₁

h: r₁ r₂

hb: 1 < b

h₁: r₁ 1

h₂: 1 r₂


inr.inl.inr
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

r₁, r₂: R

h₀: 0 < r₁

h: r₁ r₂

hb: 1 < b

h₁: r₁ 1

h₂: 1 r₂


inr.inl.inr
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

r₁, r₂: R

h₀: 0 < r₁

h: r₁ r₂

hb: 1 < b

h₁: r₁ 1

h₂: 1 r₂


inr.inl.inr
log b r₁ log b r₂

Goals accomplished! 🐙
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

r₁, r₂: R

h₀: 0 < r₁

h: r₁ r₂


log b r₁ log b r₂
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

r₁, r₂: R

h₀: 0 < r₁

h: r₁ r₂

hb: 1 < b

h₁: 1 r₁

h₂: r₂ 1


inr.inr.inl
log b r₁ log b r₂
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiring R

b:

r₁, r₂: R

h₀: 0 < r₁

h: r₁ r₂

hb: 1 < b

h₁: 1 r₁

h₂: r₂ 1


inr.inr.inl
log b r₁ log b r₂
R: Type u_1

inst✝¹: LinearOrderedSemifield R

inst✝: FloorSemiri