Real exponentiation, part I

Аналіз I, Розділ 5.6: Піднесення дійсних чисел до степеня, частина I

Я (пр.перекл. Терренс Тао) намагався зробити переклад якомога точнішим перефразуванням оригінального тексту. Коли є вибір між більш ідіоматичним рішенням Lean та більш точним перекладом, я зазвичай обирав останній. Зокрема, будуть місця, де код Lean можна було б "підбуцнути", щоб зробити його більш елегантним та ідіоматичним, але я свідомо уникав цього вибору.

Основні конструкції та результати цього розділу:

  • Піднесення дійсних чисел до степеня натуральних та цілих чисел.

  • Коріння n-го рівня.

  • Піднесення дійсного числа до раціонального.

Підказки від попередніх користувачів

Користувачі супровідного матеріалу, які виконали вправи в цьому розділі, можуть надсилати свої поради майбутнім користувачам цього розділу як PRи.

  • (Додайте підказку тут)

namespace Chapter5

Визначення 5.6.1 (Піднесення дійсного числа до степеня натурального числа). Тут ми використовуємо визначення Mathlib, взяте з Monoid.{u} (M : Type u) : Type uMonoid.

lemma Real.pow_zero (x: Real) : x ^ 0 = 1 := rfl
lemma Real.pow_succ (x: Real) (n:) : x ^ (n+1) = (x ^ n) * x := rfllemma Real.pow_of_coe (q: ) (n:) : (q:Real) ^ n = (q ^ n:) := q:n:q ^ n = (q ^ n) q:q ^ 0 = (q ^ 0)q:n:hn:q ^ n = (q ^ n)q ^ (n + 1) = (q ^ (n + 1)) q:q ^ 0 = (q ^ 0)q:n:hn:q ^ n = (q ^ n)q ^ (n + 1) = (q ^ (n + 1)) All goals completed! 🐙
/- Твердження нижче можуть бути легко опрацьовані за допомогою наявного API Mathlib (оскільки вже відомо, що `Real` є `Field`), але суть вправ полягає в тому, щоб адаптувати доведення твердження 4.3.10, які ви встановили раніше. -/

Аналог Твердження 4.3.10(a)

theorem declaration uses 'sorry'Real.pow_add (x:Real) (m n:) : x^n * x^m = x^(n+m) := x:Realm:n:x ^ n * x ^ m = x ^ (n + m) All goals completed! 🐙

Аналог Твердження 4.3.10(a)

theorem declaration uses 'sorry'Real.pow_mul (x:Real) (m n:) : (x^n)^m = x^(n*m) := x:Realm:n:(x ^ n) ^ m = x ^ (n * m) All goals completed! 🐙

Аналог Твердження 4.3.10(a)

theorem declaration uses 'sorry'Real.mul_pow (x y:Real) (n:) : (x*y)^n = x^n * y^n := x:Realy:Realn:(x * y) ^ n = x ^ n * y ^ n All goals completed! 🐙

Аналог Твердження 4.3.10(b)

theorem declaration uses 'sorry'Real.pow_eq_zero (x:Real) (n:) (hn : 0 < n) : x^n = 0 x = 0 := x:Realn:hn:0 < nx ^ n = 0 x = 0 All goals completed! 🐙

Аналог Твердження 4.3.10(c)

theorem declaration uses 'sorry'Real.pow_nonneg {x:Real} (n:) (hx: x 0) : x^n 0 := x:Realn:hx:x 0x ^ n 0 All goals completed! 🐙

Аналог Твердження 4.3.10(c)

theorem declaration uses 'sorry'Real.pow_pos {x:Real} (n:) (hx: x > 0) : x^n > 0 := x:Realn:hx:x > 0x ^ n > 0 All goals completed! 🐙

Аналог Твердження 4.3.10(c)

theorem declaration uses 'sorry'Real.pow_ge_pow (x y:Real) (n:) (hxy: x y) (hy: y 0) : x^n y^n := x:Realy:Realn:hxy:x yhy:y 0x ^ n y ^ n All goals completed! 🐙

Аналог Твердження 4.3.10(c)

theorem declaration uses 'sorry'Real.pow_gt_pow (x y:Real) (n:) (hxy: x > y) (hy: y 0) (hn: n > 0) : x^n > y^n := x:Realy:Realn:hxy:x > yhy:y 0hn:n > 0x ^ n > y ^ n All goals completed! 🐙

Аналог Твердження 4.3.10(d)

theorem declaration uses 'sorry'Real.pow_abs (x:Real) (n:) : |x|^n = |x^n| := x:Realn:|x| ^ n = |x ^ n| All goals completed! 🐙

Визначення 5.6.2 (Піднесення дійсного числа до цілого степеня). Тут ми використовуємо визначення Mathlib, що походить від DivInvMonoid.{u} (G : Type u) : Type uDivInvMonoid.

lemma Real.pow_eq_pow (x: Real) (n:): x ^ (n:) = x ^ n := x:Realn:x ^ n = x ^ n All goals completed! 🐙
@[simp] lemma Real.zpow_zero (x: Real) : x ^ (0:) = 1 := x:Realx ^ 0 = 1 All goals completed! 🐙lemma Real.zpow_neg {x:Real} (n:) : x^(-n:) = 1 / (x^n) := x:Realn:x ^ (-n) = 1 / x ^ n All goals completed! 🐙

Аналог Твердження 4.3.12(a)

theorem declaration uses 'sorry'Real.zpow_add (x:Real) (n m:) (hx: x 0): x^n * x^m = x^(n+m) := x:Realn:m:hx:x 0x ^ n * x ^ m = x ^ (n + m) All goals completed! 🐙

Аналог Твердження 4.3.12(a)

theorem declaration uses 'sorry'Real.zpow_mul (x:Real) (n m:) : (x^n)^m = x^(n*m) := x:Realn:m:(x ^ n) ^ m = x ^ (n * m) All goals completed! 🐙

Аналог Твердження 4.3.12(a)

theorem declaration uses 'sorry'Real.mul_zpow (x y:Real) (n:) : (x*y)^n = x^n * y^n := x:Realy:Realn:(x * y) ^ n = x ^ n * y ^ n All goals completed! 🐙

Аналог Твердження 4.3.12(b)

theorem declaration uses 'sorry'Real.zpow_pos {x:Real} (n:) (hx: x > 0) : x^n > 0 := x:Realn:hx:x > 0x ^ n > 0 All goals completed! 🐙

Аналог Твердження 4.3.12(b)

theorem declaration uses 'sorry'Real.zpow_ge_zpow {x y:Real} {n:} (hxy: x y) (hy: y > 0) (hn: n > 0): x^n y^n := x:Realy:Realn:hxy:x yhy:y > 0hn:n > 0x ^ n y ^ n All goals completed! 🐙
theorem declaration uses 'sorry'Real.zpow_ge_zpow_ofneg {x y:Real} {n:} (hxy: x y) (hy: y > 0) (hn: n < 0) : x^n y^n := x:Realy:Realn:hxy:x yhy:y > 0hn:n < 0x ^ n y ^ n All goals completed! 🐙

Аналог Твердження 4.3.12(c)

theorem declaration uses 'sorry'Real.zpow_inj {x y:Real} {n:} (hx: x > 0) (hy : y > 0) (hn: n 0) (hxy: x^n = y^n) : x = y := x:Realy:Realn:hx:x > 0hy:y > 0hn:n 0hxy:x ^ n = y ^ nx = y All goals completed! 🐙

Аналог Твердження 4.3.12(d)

theorem declaration uses 'sorry'Real.zpow_abs (x:Real) (n:) : |x|^n = |x^n| := x:Realn:|x| ^ n = |x ^ n| All goals completed! 🐙

Визначення 5.6.2. Ми допускаємо , коли Unknown identifier `x`x є від’ємним або Unknown identifier `n`n дорівнює нулю.

noncomputable abbrev Real.root (x:Real) (n:) : Real := sSup { y:Real | y 0 y^n x }
noncomputable abbrev Real.sqrt (x:Real) := x.root 2

Лема 5.6.5 (Існування коренів n-го степеня)

theorem declaration uses 'sorry'Real.rootset_nonempty {x:Real} (hx: x 0) (n:) (hn: n 1) : { y:Real | y 0 y^n x }.Nonempty := x:Realhx:x 0n:hn:n 1{y | y 0 y ^ n x}.Nonempty x:Realhx:x 0n:hn:n 10 {y | y 0 y ^ n x} All goals completed! 🐙
theorem declaration uses 'sorry'Real.rootset_bddAbove {x:Real} (n:) (hn: n 1) : BddAbove { y:Real | y 0 y^n x } := x:Realn:hn:n 1BddAbove {y | y 0 y ^ n x} -- Доведення написане так, щоб відповідати структурі оригінального тексту. x:Realn:hn:n 1 x_1, y {y | y 0 y ^ n x}, y x_1 x:Realn:hn:n 1h:x 1 x_1, y {y | y 0 y ^ n x}, y x_1x:Realn:hn:n 1h:1 < x x_1, y {y | y 0 y ^ n x}, y x_1 x:Realn:hn:n 1h:x 1 x_1, y {y | y 0 y ^ n x}, y x_1 x:Realn:hn:n 1h:x 1 y {y | y 0 y ^ n x}, y 1; x:Realn:hn:n 1h:x 1y:Realhy:y {y | y 0 y ^ n x}y 1; x:Realn:hn:n 1h:x 1y:Realhy:0 y y ^ n xy 1 x:Realn:hn:n 1h:x 1y:Realhy:0 y y ^ n xhy':1 < yFalse replace hy' : 1 < y^n := x:Realn:hn:n 1BddAbove {y | y 0 y ^ n x} All goals completed! 🐙 All goals completed! 🐙 x:Realn:hn:n 1h:1 < x y {y | y 0 y ^ n x}, y x; x:Realn:hn:n 1h:1 < xy:Realhy:y {y | y 0 y ^ n x}y x; x:Realn:hn:n 1h:1 < xy:Realhy:0 y y ^ n xy x x:Realn:hn:n 1h:1 < xy:Realhy:0 y y ^ n xhy':x < yFalse replace hy' : x < y^n := x:Realn:hn:n 1BddAbove {y | y 0 y ^ n x} All goals completed! 🐙 All goals completed! 🐙

Лема 5.6.6 (ab) / Вправа 5.6.1

theorem declaration uses 'sorry'Real.eq_root_iff_pow_eq {x y:Real} (hx: x 0) (hy: y 0) {n:} (hn: n 1) : y = x.root n y^n = x := x:Realy:Realhx:x 0hy:y 0n:hn:n 1y = x.root n y ^ n = x All goals completed! 🐙

Лема 5.6.6 (c) / Вправа 5.6.1

theorem declaration uses 'sorry'Real.root_nonneg {x:Real} (hx: x 0) {n:} (hn: n 1) : x.root n 0 := x:Realhx:x 0n:hn:n 1x.root n 0 All goals completed! 🐙

Лема 5.6.6 (c) / Вправа 5.6.1

theorem declaration uses 'sorry'Real.root_pos {x:Real} (hx: x 0) {n:} (hn: n 1) : x.root n > 0 x > 0 := x:Realhx:x 0n:hn:n 1x.root n > 0 x > 0 All goals completed! 🐙
theorem declaration uses 'sorry'Real.pow_of_root {x:Real} (hx: x 0) {n:} (hn: n 1) : (x.root n)^n = x := x:Realhx:x 0n:hn:n 1x.root n ^ n = x All goals completed! 🐙theorem declaration uses 'sorry'Real.root_of_pow {x:Real} (hx: x 0) {n:} (hn: n 1) : (x^n).root n = x := x:Realhx:x 0n:hn:n 1(x ^ n).root n = x All goals completed! 🐙

Лема 5.6.6 (d) / Вправа 5.6.1

theorem declaration uses 'sorry'Real.root_mono {x y:Real} (hx: x 0) (hy: y 0) {n:} (hn: n 1) : x > y x.root n > y.root n := x:Realy:Realhx:x 0hy:y 0n:hn:n 1x > y x.root n > y.root n All goals completed! 🐙

Лема 5.6.6 (e) / Вправа 5.6.1

theorem declaration uses 'sorry'Real.root_mono_of_gt_one {x : Real} (hx: x > 1) {k l: } (hkl: k > l) (hl: l 1) : x.root k < x.root l := x:Realhx:x > 1k:l:hkl:k > lhl:l 1x.root k < x.root l All goals completed! 🐙

Лема 5.6.6 (e) / Вправа 5.6.1

theorem declaration uses 'sorry'Real.root_mono_of_lt_one {x : Real} (hx0: 0 < x) (hx: x < 1) {k l: } (hkl: k > l) (hl: l 1) : x.root k > x.root l := x:Realhx0:0 < xhx:x < 1k:l:hkl:k > lhl:l 1x.root k > x.root l All goals completed! 🐙

Лема 5.6.6 (e) / Вправа 5.6.1

theorem declaration uses 'sorry'Real.root_of_one {k: } (hk: k 1): (1:Real).root k = 1 := k:hk:k 1root 1 k = 1 All goals completed! 🐙

Лема 5.6.6 (f) / Вправа 5.6.1

theorem declaration uses 'sorry'Real.root_mul {x y:Real} (hx: x 0) (hy: y 0) {n:} (hn: n 1) : (x*y).root n = (x.root n) * (y.root n) := x:Realy:Realhx:x 0hy:y 0n:hn:n 1(x * y).root n = x.root n * y.root n All goals completed! 🐙

Лема 5.6.6 (g) / Вправа 5.6.1

theorem declaration uses 'sorry'Real.root_root {x:Real} (hx: x 0) {n m:} (hn: n 1) (hm: m 1): (x.root n).root m = x.root (n*m) := x:Realhx:x 0n:m:hn:n 1hm:m 1(x.root n).root m = x.root (n * m) All goals completed! 🐙
theorem declaration uses 'sorry'Real.root_one {x:Real} (hx: x > 0): x.root 1 = x := x:Realhx:x > 0x.root 1 = x All goals completed! 🐙theorem declaration uses 'sorry'Real.pow_cancel {y z:Real} (hy: y > 0) (hz: z > 0) {n:} (hn: n 1) (h: y^n = z^n) : y = z := y:Realz:Realhy:y > 0hz:z > 0n:hn:n 1h:y ^ n = z ^ ny = z All goals completed! 🐙example : ¬( (y:Real) (z:Real) (n:) (_: n 1) (_: y^n = z^n), y = z) := ¬ (y z : Real), n 1, y ^ n = z ^ n y = z x x_1 x_2, 1 x_2 x ^ x_2 = x_1 ^ x_2 ¬x = x_1; 1 2(-3) ^ 2 = 3 ^ 2¬-3 = 3 1 2(-3) ^ 2 = 3 ^ 2¬-3 = 3 All goals completed! 🐙

Визначення 5.6.7

noncomputable abbrev Real.ratPow (x:Real) (q:) : Real := (x.root q.den)^(q.num)
noncomputable instance Real.instRatPow : Pow Real where pow x q := x.ratPow qtheorem Rat.eq_quot (q:) : a:, b:, b > 0 q = a / b := q: a, b > 0, q = a / b q:q.den > 0 q = q.num / q.den; q:this:?_mvar.65025 := failed to pretty print expression (use 'set_option pp.rawOnError true' for raw representation)q.den > 0 q = q.num / q.den refine q:this:failed to pretty print expression (use 'set_option pp.rawOnError true' for raw representation) := failed to pretty print expression (use 'set_option pp.rawOnError true' for raw representation)q.den > 0 All goals completed! 🐙, (Rat.num_div_den q).symm

Лема 5.6.8

theorem declaration uses 'sorry'Real.pow_root_eq_pow_root {a a':} {b b':} (hb: b > 0) (hb' : b' > 0) (hq : (a/b:) = (a'/b':)) {x:Real} (hx: x > 0) : (x.root b')^(a') = (x.root b)^(a) := a:a':b:b':hb:b > 0hb':b' > 0hq:a / b = a' / b'x:Realhx:x > 0x.root b' ^ a' = x.root b ^ a -- Доведення написане так, щоб відповідати структурі оригінального тексту. a:a':b:b':hb:b > 0hb':b' > 0hq:a / b = a' / b'x:Realhx:x > 0this: {a a' : } {b b' : }, b > 0 b' > 0 a / b = a' / b' a > 0 x.root b' ^ a' = x.root b ^ aha:¬a > 0x.root b' ^ a' = x.root b ^ ax:Realhx:x > 0a:a':b:b':hb:b > 0hb':b' > 0hq:a / b = a' / b'ha:a > 0x.root b' ^ a' = x.root b ^ a a:a':b:b':hb:b > 0hb':b' > 0hq:a / b = a' / b'x:Realhx:x > 0this: {a a' : } {b b' : }, b > 0 b' > 0 a / b = a' / b' a > 0 x.root b' ^ a' = x.root b ^ aha:¬a > 0x.root b' ^ a' = x.root b ^ a a:a':b:b':hb:b > 0hb':b' > 0hq:a / b = a' / b'x:Realhx:x > 0this: {a a' : } {b b' : }, b > 0 b' > 0 a / b = a' / b' a > 0 x.root b' ^ a' = x.root b ^ aha:a 0x.root b' ^ a' = x.root b ^ a a:a':b:b':hb:b > 0hb':b' > 0hq:a / b = a' / b'x:Realhx:x > 0this: {a a' : } {b b' : }, b > 0 b' > 0 a / b = a' / b' a > 0 x.root b' ^ a' = x.root b ^ aha✝:a 0ha:a < 0x.root b' ^ a' = x.root b ^ aa:a':b:b':hb:b > 0hb':b' > 0hq:a / b = a' / b'x:Realhx:x > 0this: {a a' : } {b b' : }, b > 0 b' > 0 a / b = a' / b' a > 0 x.root b' ^ a' = x.root b ^ aha✝:a 0ha:a = 0x.root b' ^ a' = x.root b ^ a a:a':b:b':hb:b > 0hb':b' > 0hq:a / b = a' / b'x:Realhx:x > 0this: {a a' : } {b b' : }, b > 0 b' > 0 a / b = a' / b' a > 0 x.root b' ^ a' = x.root b ^ aha✝:a 0ha:a < 0x.root b' ^ a' = x.root b ^ a replace hq : ((-a:)/b:) = ((-a':)/b':) := a:a':b:b':hb:b > 0hb':b' > 0hq:a / b = a' / b'x:Realhx:x > 0x.root b' ^ a' = x.root b ^ a a:a':b:b':hb:b > 0hb':b' > 0hq:a / b = a' / b'x:Realhx:x > 0this: {a a' : } {b b' : }, b > 0 b' > 0 a / b = a' / b' a > 0 x.root b' ^ a' = x.root b ^ aha✝:a 0ha:a < 0-a / b = -a' / b'; a:a':b:b':hb:b > 0hb':b' > 0x:Realhx:x > 0ha✝:a 0ha:a < 0this: {a a' : } {b b' : }, b > 0 b' > 0 a * (↑b)⁻¹ = a' * (↑b')⁻¹ a > 0 x.root b' ^ a' = x.root b ^ ahq:a * (↑b)⁻¹ = a' * (↑b')⁻¹-(a * (↑b)⁻¹) = -(a' * (↑b')⁻¹); All goals completed! 🐙 specialize this hb hb' hq (a:a':b:b':hb:b > 0hb':b' > 0x:Realhx:x > 0this: {a a' : } {b b' : }, b > 0 b' > 0 a / b = a' / b' a > 0 x.root b' ^ a' = x.root b ^ aha✝:a 0ha:a < 0hq:(-_fvar.65683) / _fvar.65685 = (-_fvar.65684) / _fvar.65686 := Eq.mpr (id (congr (congrArg (fun x => Eq (x / _fvar.65685)) (Int.cast_neg _fvar.65683)) (congrArg (fun x => x / _fvar.65686) (Int.cast_neg _fvar.65684)))) (Eq.mpr (id (congr (congrArg Eq (Eq.trans (Mathlib.Tactic.Ring.div_congr (Mathlib.Tactic.Ring.neg_congr (Mathlib.Tactic.Ring.atom_pf _fvar.65683) (Mathlib.Tactic.Ring.neg_add (Mathlib.Tactic.Ring.neg_mul (↑_fvar.65683) (Nat.rawCast 1) (Mathlib.Tactic.Ring.neg_one_mul (Mathlib.Meta.NormNum.IsInt.to_raw_eq (Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 1)) (Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw 1)) (Eq.refl (Int.negOfNat 1)))))) Mathlib.Tactic.Ring.neg_zero)) (Mathlib.Tactic.Ring.atom_pf _fvar.65685) (Mathlib.Tactic.Ring.div_pf (Mathlib.Tactic.Ring.inv_single (Mathlib.Tactic.Ring.inv_mul (Eq.refl (↑_fvar.65685)⁻¹) (Mathlib.Meta.NormNum.IsNat.to_raw_eq (Mathlib.Meta.NormNum.IsNNRat.to_isNat (Mathlib.Meta.NormNum.isNNRat_inv_pos (Mathlib.Meta.NormNum.IsNat.to_isNNRat (Mathlib.Meta.NormNum.IsNat.of_raw 1))))) (Mathlib.Tactic.Ring.mul_pf_right (↑_fvar.65685)⁻¹ (Nat.rawCast 1) (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1))))) (Mathlib.Tactic.Ring.add_mul (Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.mul_pf_left (↑_fvar.65683) (Nat.rawCast 1) (Mathlib.Tactic.Ring.mul_pf_right (↑_fvar.65685)⁻¹ (Nat.rawCast 1) (Mathlib.Tactic.Ring.mul_one (Int.negOfNat 1).rawCast))) (Mathlib.Tactic.Ring.mul_zero (_fvar.65683 ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast)) (Mathlib.Tactic.Ring.add_pf_add_zero (_fvar.65683 ^ Nat.rawCast 1 * ((↑_fvar.65685)⁻¹ ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast) + 0))) (Mathlib.Tactic.Ring.zero_mul ((↑_fvar.65685)⁻¹ ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)) (Mathlib.Tactic.Ring.add_pf_add_zero (_fvar.65683 ^ Nat.rawCast 1 * ((↑_fvar.65685)⁻¹ ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast) + 0))))) (Eq.trans (congrArg (fun x => x + 0) (Eq.trans (congr (congrArg HMul.hMul (Eq.trans (congrArg (HPow.hPow _fvar.65683) Mathlib.Tactic.RingNF.nat_rawCast_1) (pow_one _fvar.65683))) (Eq.trans (Eq.trans (congr (congrArg HMul.hMul (Eq.trans (congrArg (HPow.hPow (↑_fvar.65685)⁻¹) Mathlib.Tactic.RingNF.nat_rawCast_1) (pow_one (↑_fvar.65685)⁻¹))) (Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg (congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1))) (Mathlib.Tactic.RingNF.mul_neg (↑_fvar.65685)⁻¹ 1)) (congrArg Neg.neg (mul_one (↑_fvar.65685)⁻¹)))) (Mathlib.Tactic.RingNF.mul_neg (↑_fvar.65683) (↑_fvar.65685)⁻¹))) (add_zero (-(_fvar.65683 * (↑_fvar.65685)⁻¹)))))) (Eq.trans (Mathlib.Tactic.Ring.div_congr (Mathlib.Tactic.Ring.neg_congr (Mathlib.Tactic.Ring.atom_pf _fvar.65684) (Mathlib.Tactic.Ring.neg_add (Mathlib.Tactic.Ring.neg_mul (↑_fvar.65684) (Nat.rawCast 1) (Mathlib.Tactic.Ring.neg_one_mul (Mathlib.Meta.NormNum.IsInt.to_raw_eq (Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul) (Mathlib.Meta.NormNum.IsInt.of_raw (Int.negOfNat 1)) (Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw 1)) (Eq.refl (Int.negOfNat 1)))))) Mathlib.Tactic.Ring.neg_zero)) (Mathlib.Tactic.Ring.atom_pf _fvar.65686) (Mathlib.Tactic.Ring.div_pf (Mathlib.Tactic.Ring.inv_single (Mathlib.Tactic.Ring.inv_mul (Eq.refl (↑_fvar.65686)⁻¹) (Mathlib.Meta.NormNum.IsNat.to_raw_eq (Mathlib.Meta.NormNum.IsNNRat.to_isNat (Mathlib.Meta.NormNum.isNNRat_inv_pos (Mathlib.Meta.NormNum.IsNat.to_isNNRat (Mathlib.Meta.NormNum.IsNat.of_raw 1))))) (Mathlib.Tactic.Ring.mul_pf_right (↑_fvar.65686)⁻¹ (Nat.rawCast 1) (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1))))) (Mathlib.Tactic.Ring.add_mul (Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.mul_pf_left (↑_fvar.65684) (Nat.rawCast 1) (Mathlib.Tactic.Ring.mul_pf_right (↑_fvar.65686)⁻¹ (Nat.rawCast 1) (Mathlib.Tactic.Ring.mul_one (Int.negOfNat 1).rawCast))) (Mathlib.Tactic.Ring.mul_zero (_fvar.65684 ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast)) (Mathlib.Tactic.Ring.add_pf_add_zero (_fvar.65684 ^ Nat.rawCast 1 * ((↑_fvar.65686)⁻¹ ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast) + 0))) (Mathlib.Tactic.Ring.zero_mul ((↑_fvar.65686)⁻¹ ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)) (Mathlib.Tactic.Ring.add_pf_add_zero (_fvar.65684 ^ Nat.rawCast 1 * ((↑_fvar.65686)⁻¹ ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast) + 0))))) (Eq.trans (congrArg (fun x => x + 0) (Eq.trans (congr (congrArg HMul.hMul (Eq.trans (congrArg (HPow.hPow _fvar.65684) Mathlib.Tactic.RingNF.nat_rawCast_1) (pow_one _fvar.65684))) (Eq.trans (Eq.trans (congr (congrArg HMul.hMul (Eq.trans (congrArg (HPow.hPow (↑_fvar.65686)⁻¹) Mathlib.Tactic.RingNF.nat_rawCast_1) (pow_one (↑_fvar.65686)⁻¹))) (Eq.trans Mathlib.Tactic.RingNF.int_rawCast_neg (congrArg Neg.neg Mathlib.Tactic.RingNF.nat_rawCast_1))) (Mathlib.Tactic.RingNF.mul_neg (↑_fvar.65686)⁻¹ 1)) (congrArg Neg.neg (mul_one (↑_fvar.65686)⁻¹)))) (Mathlib.Tactic.RingNF.mul_neg (↑_fvar.65684) (↑_fvar.65686)⁻¹))) (add_zero (-(_fvar.65684 * (↑_fvar.65686)⁻¹))))))) (of_eq_true (Eq.trans (congrArg (fun x => -x = -(_fvar.65684 * (↑_fvar.65686)⁻¹)) (Eq.mp (congr (congrArg Eq (Eq.trans (Mathlib.Tactic.Ring.div_congr (Mathlib.Tactic.Ring.atom_pf _fvar.65683) (Mathlib.Tactic.Ring.atom_pf _fvar.65685) (Mathlib.Tactic.Ring.div_pf (Mathlib.Tactic.Ring.inv_single (Mathlib.Tactic.Ring.inv_mul (Eq.refl (↑_fvar.65685)⁻¹) (Mathlib.Meta.NormNum.IsNat.to_raw_eq (Mathlib.Meta.NormNum.IsNNRat.to_isNat (Mathlib.Meta.NormNum.isNNRat_inv_pos (Mathlib.Meta.NormNum.IsNat.to_isNNRat (Mathlib.Meta.NormNum.IsNat.of_raw 1))))) (Mathlib.Tactic.Ring.mul_pf_right (↑_fvar.65685)⁻¹ (Nat.rawCast 1) (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1))))) (Mathlib.Tactic.Ring.add_mul (Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.mul_pf_left (↑_fvar.65683) (Nat.rawCast 1) (Mathlib.Tactic.Ring.mul_pf_right (↑_fvar.65685)⁻¹ (Nat.rawCast 1) (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1)))) (Mathlib.Tactic.Ring.mul_zero (_fvar.65683 ^ Nat.rawCast 1 * Nat.rawCast 1)) (Mathlib.Tactic.Ring.add_pf_add_zero (_fvar.65683 ^ Nat.rawCast 1 * ((↑_fvar.65685)⁻¹ ^ Nat.rawCast 1 * Nat.rawCast 1) + 0))) (Mathlib.Tactic.Ring.zero_mul ((↑_fvar.65685)⁻¹ ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)) (Mathlib.Tactic.Ring.add_pf_add_zero (_fvar.65683 ^ Nat.rawCast 1 * ((↑_fvar.65685)⁻¹ ^ Nat.rawCast 1 * Nat.rawCast 1) + 0))))) (Eq.trans (congrArg (fun x => x + 0) (congr (congrArg HMul.hMul (Eq.trans (congrArg (HPow.hPow _fvar.65683) Mathlib.Tactic.RingNF.nat_rawCast_1) (pow_one _fvar.65683))) (Eq.trans (congr (congrArg HMul.hMul (Eq.trans (congrArg (HPow.hPow (↑_fvar.65685)⁻¹) Mathlib.Tactic.RingNF.nat_rawCast_1) (pow_one (↑_fvar.65685)⁻¹))) Mathlib.Tactic.RingNF.nat_rawCast_1) (mul_one (↑_fvar.65685)⁻¹)))) (add_zero (_fvar.65683 * (↑_fvar.65685)⁻¹))))) (Eq.trans (Mathlib.Tactic.Ring.div_congr (Mathlib.Tactic.Ring.atom_pf _fvar.65684) (Mathlib.Tactic.Ring.atom_pf _fvar.65686) (Mathlib.Tactic.Ring.div_pf (Mathlib.Tactic.Ring.inv_single (Mathlib.Tactic.Ring.inv_mul (Eq.refl (↑_fvar.65686)⁻¹) (Mathlib.Meta.NormNum.IsNat.to_raw_eq (Mathlib.Meta.NormNum.IsNNRat.to_isNat (Mathlib.Meta.NormNum.isNNRat_inv_pos (Mathlib.Meta.NormNum.IsNat.to_isNNRat (Mathlib.Meta.NormNum.IsNat.of_raw 1))))) (Mathlib.Tactic.Ring.mul_pf_right (↑_fvar.65686)⁻¹ (Nat.rawCast 1) (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1))))) (Mathlib.Tactic.Ring.add_mul (Mathlib.Tactic.Ring.mul_add (Mathlib.Tactic.Ring.mul_pf_left (↑_fvar.65684) (Nat.rawCast 1) (Mathlib.Tactic.Ring.mul_pf_right (↑_fvar.65686)⁻¹ (Nat.rawCast 1) (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1)))) (Mathlib.Tactic.Ring.mul_zero (_fvar.65684 ^ Nat.rawCast 1 * Nat.rawCast 1)) (Mathlib.Tactic.Ring.add_pf_add_zero (_fvar.65684 ^ Nat.rawCast 1 * ((↑_fvar.65686)⁻¹ ^ Nat.rawCast 1 * Nat.rawCast 1) + 0))) (Mathlib.Tactic.Ring.zero_mul ((↑_fvar.65686)⁻¹ ^ Nat.rawCast 1 * Nat.rawCast 1 + 0)) (Mathlib.Tactic.Ring.add_pf_add_zero (_fvar.65684 ^ Nat.rawCast 1 * ((↑_fvar.65686)⁻¹ ^ Nat.rawCast 1 * Nat.rawCast 1) + 0))))) (Eq.trans (congrArg (fun x => x + 0) (congr (congrArg HMul.hMul (Eq.trans (congrArg (HPow.hPow _fvar.65684) Mathlib.Tactic.RingNF.nat_rawCast_1) (pow_one _fvar.65684))) (Eq.trans (congr (congrArg HMul.hMul (Eq.trans (congrArg (HPow.hPow (↑_fvar.65686)⁻¹) Mathlib.Tactic.RingNF.nat_rawCast_1) (pow_one (↑_fvar.65686)⁻¹))) Mathlib.Tactic.RingNF.nat_rawCast_1) (mul_one (↑_fvar.65686)⁻¹)))) (add_zero (_fvar.65684 * (↑_fvar.65686)⁻¹))))) _fvar.65689)) (eq_self (-(_fvar.65684 * (↑_fvar.65686)⁻¹))))))-a > 0 All goals completed! 🐙) All goals completed! 🐙 have : a' = 0 := a:a':b:b':hb:b > 0hb':b' > 0hq:a / b = a' / b'x:Realhx:x > 0x.root b' ^ a' = x.root b ^ a All goals completed! 🐙 All goals completed! 🐙 have : a' > 0 := a:a':b:b':hb:b > 0hb':b' > 0hq:a / b = a' / b'x:Realhx:x > 0x.root b' ^ a' = x.root b ^ a All goals completed! 🐙 x:Realhx:x > 0a:a':b:b':hb:b > 0hb':b' > 0ha:a > 0this:_fvar.65746 > 0 := ?_mvar.132179hq:a * b' = a' * bx.root b' ^ a' = x.root b ^ a lift a to using x:Realhx:x > 0a:a':b:b':hb:b > 0hb':b' > 0ha:a > 0this:_fvar.65746 > 0 := sorryhq:a * b' = a' * b0 a All goals completed! 🐙 lift a' to using x:Realhx:x > 0a':b:b':hb:b > 0hb':b' > 0this:_fvar.65746 > 0 := sorrya:ha:a > 0hq:a * b' = a' * b0 a' All goals completed! 🐙 x:Realb:b':hb:b > 0hb':b' > 0a:a':hx:x > 0ha:0 < athis:0 < a'hq:a * b' = a' * bx.root b' ^ a' = x.root b ^ a x:Realb:b':hb:b > 0hb':b' > 0a:a':hx:x > 0ha:0 < athis:0 < a'hq:a * b' = a' * by:Chapter5.Real := Chapter5.Real.root _fvar.65690 (_fvar.140840 * _fvar.65748)x.root b' ^ a' = x.root b ^ a have h1 : y = (x.root b').root a := a:a':b:b':hb:b > 0hb':b' > 0hq:a / b = a' / b'x:Realhx:x > 0x.root b' ^ a' = x.root b ^ a x:Realb:b':hb:b > 0hb':b' > 0a:a':hx:x > 0ha:0 < athis:0 < a'hq:a * b' = a' * by:Chapter5.Real := Chapter5.Real.root _fvar.65690 (_fvar.140840 * _fvar.65748)x 0x:Realb:b':hb:b > 0hb':b' > 0a:a':hx:x > 0ha:0 < athis:0 < a'hq:a * b' = a' * by:Chapter5.Real := Chapter5.Real.root _fvar.65690 (_fvar.140840 * _fvar.65748)b' 1x:Realb:b':hb:b > 0hb':b' > 0a:a':hx:x > 0ha:0 < athis:0 < a'hq:a * b' = a' * by:Chapter5.Real := Chapter5.Real.root _fvar.65690 (_fvar.140840 * _fvar.65748)a 1 x:Realb:b':hb:b > 0hb':b' > 0a:a':hx:x > 0ha:0 < athis:0 < a'hq:a * b' = a' * by:Chapter5.Real := Chapter5.Real.root _fvar.65690 (_fvar.140840 * _fvar.65748)x 0x:Realb:b':hb:b > 0hb':b' > 0a:a':hx:x > 0ha:0 < athis:0 < a'hq:a * b' = a' * by:Chapter5.Real := Chapter5.Real.root _fvar.65690 (_fvar.140840 * _fvar.65748)b' 1x:Realb:b':hb:b > 0hb':b' > 0a:a':hx:x > 0ha:0 < athis:0 < a'hq:a * b' = a' * by:Chapter5.Real := Chapter5.Real.root _fvar.65690 (_fvar.140840 * _fvar.65748)a 1 All goals completed! 🐙 have h2 : y = (x.root b).root a' := a:a':b:b':hb:b > 0hb':b' > 0hq:a / b = a' / b'x:Realhx:x > 0x.root b' ^ a' = x.root b ^ a x:Realb:b':hb:b > 0hb':b' > 0a:a':hx:x > 0ha:0 < athis:0 < a'hq:a * b' = a' * by:Chapter5.Real := Chapter5.Real.root _fvar.65690 (_fvar.140840 * _fvar.65748)h1:_fvar.149744 = (Chapter5.Real.root _fvar.65690 _fvar.65748).root _fvar.140840 := ?_mvar.149891x 0x:Realb:b':hb:b > 0hb':b' > 0a:a':hx:x > 0ha:0 < athis:0 < a'hq:a * b' = a' * by:Chapter5.Real := Chapter5.Real.root _fvar.65690 (_fvar.140840 * _fvar.65748)h1:_fvar.149744 = (Chapter5.Real.root _fvar.65690 _fvar.65748).root _fvar.140840 := ?_mvar.149891b 1x:Realb:b':hb:b > 0hb':b' > 0a:a':hx:x > 0ha:0 < athis:0 < a'hq:a * b' = a' * by:Chapter5.Real := Chapter5.Real.root _fvar.65690 (_fvar.140840 * _fvar.65748)h1:_fvar.149744 = (Chapter5.Real.root _fvar.65690 _fvar.65748).root _fvar.140840 := ?_mvar.149891a' 1 x:Realb:b':hb:b > 0hb':b' > 0a:a':hx:x > 0ha:0 < athis:0 < a'hq:a * b' = a' * by:Chapter5.Real := Chapter5.Real.root _fvar.65690 (_fvar.140840 * _fvar.65748)h1:_fvar.149744 = (Chapter5.Real.root _fvar.65690 _fvar.65748).root _fvar.140840 := ?_mvar.149891x 0x:Realb:b':hb:b > 0hb':b' > 0a:a':hx:x > 0ha:0 < athis:0 < a'hq:a * b' = a' * by:Chapter5.Real := Chapter5.Real.root _fvar.65690 (_fvar.140840 * _fvar.65748)h1:_fvar.149744 = (Chapter5.Real.root _fvar.65690 _fvar.65748).root _fvar.140840 := ?_mvar.149891b 1x:Realb:b':hb:b > 0hb':b' > 0a:a':hx:x > 0ha:0 < athis:0 < a'hq:a * b' = a' * by:Chapter5.Real := Chapter5.Real.root _fvar.65690 (_fvar.140840 * _fvar.65748)h1:_fvar.149744 = (Chapter5.Real.root _fvar.65690 _fvar.65748).root _fvar.140840 := ?_mvar.149891a' 1 All goals completed! 🐙 have h3 : y^a = x.root b' := a:a':b:b':hb:b > 0hb':b' > 0hq:a / b = a' / b'x:Realhx:x > 0x.root b' ^ a' = x.root b ^ a x:Realb:b':hb:b > 0hb':b' > 0a:a':hx:x > 0ha:0 < athis:0 < a'hq:a * b' = a' * by:Chapter5.Real := Chapter5.Real.root _fvar.65690 (_fvar.140840 * _fvar.65748)h1:_fvar.149744 = (Chapter5.Real.root _fvar.65690 _fvar.65748).root _fvar.140840 := ?_mvar.149891h2:_fvar.149744 = (Chapter5.Real.root _fvar.65690 _fvar.65747).root _fvar.144763 := ?_mvar.163954(x.root b').root a ^ a = x.root b'; x:Realb:b':hb:b > 0hb':b' > 0a:a':hx:x > 0ha:0 < athis:0 < a'hq:a * b' = a' * by:Chapter5.Real := Chapter5.Real.root _fvar.65690 (_fvar.140840 * _fvar.65748)h1:_fvar.149744 = (Chapter5.Real.root _fvar.65690 _fvar.65748).root _fvar.140840 := ?_mvar.149891h2:_fvar.149744 = (Chapter5.Real.root _fvar.65690 _fvar.65747).root _fvar.144763 := ?_mvar.163954a 1x:Realb:b':hb:b > 0hb':b' > 0a:a':hx:x > 0ha:0 < athis:0 < a'hq:a * b' = a' * by:Chapter5.Real := Chapter5.Real.root _fvar.65690 (_fvar.140840 * _fvar.65748)h1:_fvar.149744 = (Chapter5.Real.root _fvar.65690 _fvar.65748).root _fvar.140840 := ?_mvar.149891h2:_fvar.149744 = (Chapter5.Real.root _fvar.65690 _fvar.65747).root _fvar.144763 := ?_mvar.163954x 0x:Realb:b':hb:b > 0hb':b' > 0a:a':hx:x > 0ha:0 < athis:0 < a'hq:a * b' = a' * by:Chapter5.Real := Chapter5.Real.root _fvar.65690 (_fvar.140840 * _fvar.65748)h1:_fvar.149744 = (Chapter5.Real.root _fvar.65690 _fvar.65748).root _fvar.140840 := ?_mvar.149891h2:_fvar.149744 = (Chapter5.Real.root _fvar.65690 _fvar.65747).root _fvar.144763 := ?_mvar.163954b' 1 x:Realb:b':hb:b > 0hb':b' > 0a:a':hx:x > 0ha:0 < athis:0 < a'hq:a * b' = a' * by:Chapter5.Real := Chapter5.Real.root _fvar.65690 (_fvar.140840 * _fvar.65748)h1:_fvar.149744 = (Chapter5.Real.root _fvar.65690 _fvar.65748).root _fvar.140840 := ?_mvar.149891h2:_fvar.149744 = (Chapter5.Real.root _fvar.65690 _fvar.65747).root _fvar.144763 := ?_mvar.163954a 1x:Realb:b':hb:b > 0hb':b' > 0a:a':hx:x > 0ha:0 < athis:0 < a'hq:a * b' = a' * by:Chapter5.Real := Chapter5.Real.root _fvar.65690 (_fvar.140840 * _fvar.65748)h1:_fvar.149744 = (Chapter5.Real.root _fvar.65690 _fvar.65748).root _fvar.140840 := ?_mvar.149891h2:_fvar.149744 = (Chapter5.Real.root _fvar.65690 _fvar.65747).root _fvar.144763 := ?_mvar.163954x 0x:Realb:b':hb:b > 0hb':b' > 0a:a':hx:x > 0ha:0 < athis:0 < a'hq:a * b' = a' * by:Chapter5.Real := Chapter5.Real.root _fvar.65690 (_fvar.140840 * _fvar.65748)h1:_fvar.149744 = (Chapter5.Real.root _fvar.65690 _fvar.65748).root _fvar.140840 := ?_mvar.149891h2:_fvar.149744 = (Chapter5.Real.root _fvar.65690 _fvar.65747).root _fvar.144763 := ?_mvar.163954b' 1 All goals completed! 🐙 have h4 : y^a' = x.root b := a:a':b:b':hb:b > 0hb':b' > 0hq:a / b = a' / b'x:Realhx:x > 0x.root b' ^ a' = x.root b ^ a x:Realb:b':hb:b > 0hb':b' > 0a:a':hx:x > 0ha:0 < athis:0 < a'hq:a * b' = a' * by:Chapter5.Real := Chapter5.Real.root _fvar.65690 (_fvar.140840 * _fvar.65748)h1:_fvar.149744 = (Chapter5.Real.root _fvar.65690 _fvar.65748).root _fvar.140840 := ?_mvar.149891h2:_fvar.149744 = (Chapter5.Real.root _fvar.65690 _fvar.65747).root _fvar.144763 := ?_mvar.163954h3:_fvar.149744 ^ _fvar.140840 = Chapter5.Real.root _fvar.65690 _fvar.65748 := ?_mvar.178249(x.root b).root a' ^ a' = x.root b; x:Realb:b':hb:b > 0hb':b' > 0a:a':hx:x > 0ha:0 < athis:0 < a'hq:a * b' = a' * by:Chapter5.Real := Chapter5.Real.root _fvar.65690 (_fvar.140840 * _fvar.65748)h1:_fvar.149744 = (Chapter5.Real.root _fvar.65690 _fvar.65748).root _fvar.140840 := ?_mvar.149891h2:_fvar.149744 = (Chapter5.Real.root _fvar.65690 _fvar.65747).root _fvar.144763 := ?_mvar.163954h3:_fvar.149744 ^ _fvar.140840 = Chapter5.Real.root _fvar.65690 _fvar.65748 := ?_mvar.178249a' 1x:Realb:b':hb:b > 0hb':b' > 0a:a':hx:x > 0ha:0 < athis:0 < a'hq:a * b' = a' * by:Chapter5.Real := Chapter5.Real.root _fvar.65690 (_fvar.140840 * _fvar.65748)h1:_fvar.149744 = (Chapter5.Real.root _fvar.65690 _fvar.65748).root _fvar.140840 := ?_mvar.149891h2:_fvar.149744 = (Chapter5.Real.root _fvar.65690 _fvar.65747).root _fvar.144763 := ?_mvar.163954h3:_fvar.149744 ^ _fvar.140840 = Chapter5.Real.root _fvar.65690 _fvar.65748 := ?_mvar.178249x 0x:Realb:b':hb:b > 0hb':b' > 0a:a':hx:x > 0ha:0 < athis:0 < a'hq:a * b' = a' * by:Chapter5.Real := Chapter5.Real.root _fvar.65690 (_fvar.140840 * _fvar.65748)h1:_fvar.149744 = (Chapter5.Real.root _fvar.65690 _fvar.65748).root _fvar.140840 := ?_mvar.149891h2:_fvar.149744 = (Chapter5.Real.root _fvar.65690 _fvar.65747).root _fvar.144763 := ?_mvar.163954h3:_fvar.149744 ^ _fvar.140840 = Chapter5.Real.root _fvar.65690 _fvar.65748 := ?_mvar.178249b 1 x:Realb:b':hb:b > 0hb':b' > 0a:a':hx:x > 0ha:0 < athis:0 < a'hq:a * b' = a' * by:Chapter5.Real := Chapter5.Real.root _fvar.65690 (_fvar.140840 * _fvar.65748)h1:_fvar.149744 = (Chapter5.Real.root _fvar.65690 _fvar.65748).root _fvar.140840 := ?_mvar.149891h2:_fvar.149744 = (Chapter5.Real.root _fvar.65690 _fvar.65747).root _fvar.144763 := ?_mvar.163954h3:_fvar.149744 ^ _fvar.140840 = Chapter5.Real.root _fvar.65690 _fvar.65748 := ?_mvar.178249a' 1x:Realb:b':hb:b > 0hb':b' > 0a:a':hx:x > 0ha:0 < athis:0 < a'hq:a * b' = a' * by:Chapter5.Real := Chapter5.Real.root _fvar.65690 (_fvar.140840 * _fvar.65748)h1:_fvar.149744 = (Chapter5.Real.root _fvar.65690 _fvar.65748).root _fvar.140840 := ?_mvar.149891h2:_fvar.149744 = (Chapter5.Real.root _fvar.65690 _fvar.65747).root _fvar.144763 := ?_mvar.163954h3:_fvar.149744 ^ _fvar.140840 = Chapter5.Real.root _fvar.65690 _fvar.65748 := ?_mvar.178249x 0x:Realb:b':hb:b > 0hb':b' > 0a:a':hx:x > 0ha:0 < athis:0 < a'hq:a * b' = a' * by:Chapter5.Real := Chapter5.Real.root _fvar.65690 (_fvar.140840 * _fvar.65748)h1:_fvar.149744 = (Chapter5.Real.root _fvar.65690 _fvar.65748).root _fvar.140840 := ?_mvar.149891h2:_fvar.149744 = (Chapter5.Real.root _fvar.65690 _fvar.65747).root _fvar.144763 := ?_mvar.163954h3:_fvar.149744 ^ _fvar.140840 = Chapter5.Real.root _fvar.65690 _fvar.65748 := ?_mvar.178249b 1 All goals completed! 🐙 All goals completed! 🐙
theorem Real.ratPow_def {x:Real} (hx: x > 0) (a:) {b:} (hb: b > 0) : x^(a/b:) = (x.root b)^a := x:Realhx:x > 0a:b:hb:b > 0x ^ (a / b) = x.root b ^ a x:Realhx:x > 0a:b:hb:b > 0q: := _fvar.207131 / _fvar.207132x ^ q = x.root b ^ a x:Realhx:x > 0a:b:hb:b > 0q: := _fvar.207131 / _fvar.207132q.den > 0x:Realhx:x > 0a:b:hb:b > 0q: := _fvar.207131 / _fvar.207132a / b = q.num / q.den x:Realhx:x > 0a:b:hb:b > 0q: := _fvar.207131 / _fvar.207132q.den > 0 x:Realhx:x > 0a:b:hb:b > 0q: := _fvar.207131 / _fvar.207132this:?_mvar.209520 := failed to pretty print expression (use 'set_option pp.rawOnError true' for raw representation)q.den > 0; All goals completed! 🐙 All goals completed! 🐙theorem declaration uses 'sorry'Real.ratPow_eq_root {x:Real} (hx: x > 0) {n:} (hn: n 1) : x^(1/n:) = x.root n := x:Realhx:x > 0n:hn:n 1x ^ (1 / n) = x.root n All goals completed! 🐙theorem declaration uses 'sorry'Real.ratPow_eq_pow {x:Real} (hx: x > 0) (n:) : x^(n:) = x^n := x:Realhx:x > 0n:x ^ n = x ^ n All goals completed! 🐙

Лема 5.6.9(a) / Вправа 5.6.2

theorem declaration uses 'sorry'Real.ratPow_pos {x:Real} (hx: x > 0) (q:) : x^q > 0 := x:Realhx:x > 0q:x ^ q > 0 All goals completed! 🐙

Лема 5.6.9(b) / Вправа 5.6.2

theorem declaration uses 'sorry'Real.ratPow_add {x:Real} (hx: x > 0) (q r:) : x^(q+r) = x^q * x^r := x:Realhx:x > 0q:r:x ^ (q + r) = x ^ q * x ^ r All goals completed! 🐙

Лема 5.6.9(b) / Вправа 5.6.2

theorem declaration uses 'sorry'Real.ratPow_ratPow {x:Real} (hx: x > 0) (q r:) : (x^q)^r = x^(q*r) := x:Realhx:x > 0q:r:(x ^ q) ^ r = x ^ (q * r) All goals completed! 🐙

Лема 5.6.9(c) / Вправа 5.6.2

theorem declaration uses 'sorry'Real.ratPow_neg {x:Real} (hx: x > 0) (q:) : x^(-q) = 1 / x^q := x:Realhx:x > 0q:x ^ (-q) = 1 / x ^ q All goals completed! 🐙

Лема 5.6.9(d) / Вправа 5.6.2

theorem declaration uses 'sorry'Real.ratPow_mono {x y:Real} (hx: x > 0) (hy: y > 0) {q:} (h: q > 0) : x > y x^q > y^q := x:Realy:Realhx:x > 0hy:y > 0q:h:q > 0x > y x ^ q > y ^ q All goals completed! 🐙

Лема 5.6.9(e) / Вправа 5.6.2

theorem declaration uses 'sorry'Real.ratPow_mono_of_gt_one {x:Real} (hx: x > 1) {q r:} : x^q > x^r q > r := x:Realhx:x > 1q:r:x ^ q > x ^ r q > r All goals completed! 🐙

Лема 5.6.9(e) / Вправа 5.6.2

theorem declaration uses 'sorry'Real.ratPow_mono_of_lt_one {x:Real} (hx0: 0 < x) (hx: x < 1) {q r:} : x^q > x^r q < r := x:Realhx0:0 < xhx:x < 1q:r:x ^ q > x ^ r q < r All goals completed! 🐙

Лема 5.6.9(f) / Вправа 5.6.2

theorem declaration uses 'sorry'Real.ratPow_mul {x y:Real} (hx: x > 0) (hy: y > 0) (q:) : (x*y)^q = x^q * y^q := x:Realy:Realhx:x > 0hy:y > 0q:(x * y) ^ q = x ^ q * y ^ q All goals completed! 🐙

Вправа 5.6.3

theorem declaration uses 'sorry'Real.pow_even (x:Real) {n:} (hn: Even n) : x^n 0 := x:Realn:hn:Even nx ^ n 0 All goals completed! 🐙

Вправа 5.6.5

theorem declaration uses 'sorry'Real.max_ratPow {x y:Real} (hx: x > 0) (hy: y > 0) {q:} (hq: q > 0) : max (x^q) (y^q) = (max x y)^q := x:Realy:Realhx:x > 0hy:y > 0q:hq:q > 0max (x ^ q) (y ^ q) = max x y ^ q All goals completed! 🐙

Вправа 5.6.5

theorem declaration uses 'sorry'Real.min_ratPow {x y:Real} (hx: x > 0) (hy: y > 0) {q:} (hq: q > 0) : min (x^q) (y^q) = (min x y)^q := x:Realy:Realhx:x > 0hy:y > 0q:hq:q > 0min (x ^ q) (y ^ q) = min x y ^ q All goals completed! 🐙
-- Заключна частина вправи 5.6.5: сформулюйте та доведіть версії наведених вище лем для випадку від’ємних значень q. end Chapter5