Absolute value and exponentiation

Аналіз I, Розділ 4.3: Абсолютні значення та піднесення до степеня

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

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

  • Базові властивості абсолютного значення та піднесення до степеня для раціональних чисел (тут ми використовуємо раціональні числа Mathlib : Type, а не раціональні числа розділу 4.2).

Примітка: щоб уникнути конфлікту позначень, ми використовуємо стандартні визначення Mathlib для абсолютного значення та піднесення до степеня. Через це кілька вправ можна досить легко розв’язати за допомогою API Mathlib для цих операцій. Однак дух вправ полягає в тому, щоб розв’язувати їх, використовуючи API, наданий у цьому розділі, а також більш базовий API Mathlib для раціональних чисел, який не посилається на абсолютне значення чи піднесення до степеня.

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

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

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

Це визначення потрібно зробити поза простором імен Розділу 4.3 з технічних причин.

def Rat.Close (ε : ) (x y:) := |x-y| ε
namespace Section_4_3

Визначення 4.3.1 (Абсолютне значення)

abbrev abs (x:) : := if x > 0 then x else (if x < 0 then -x else 0)
theorem abs_of_pos {x: } (hx: 0 < x) : abs x = x := x:hx:0 < xabs x = x All goals completed! 🐙

Визначення 4.3.1 (Абсолютне значення)

theorem abs_of_neg {x: } (hx: x < 0) : abs x = -x := x:hx:x < 0abs x = -x All goals completed! 🐙

Визначення 4.3.1 (Абсолютне значення)

theorem abs_of_zero : abs 0 = 0 := rfl

(Не в підручнику) Це визначення абсолютного значення збігається з визначенням у Mathlib. Надалі ми використовуємо абсолютне значення Mathlib.

theorem declaration uses 'sorry'abs_eq_abs (x: ) : abs x = |x| := x:abs x = |x| All goals completed! 🐙
abbrev dist (x y : ) := |x - y|

Визначення 4.2 (Відстань). Тут ми уникаємо поняття відстані з Mathlib, оскільки воно має дійсні значення.

theorem dist_eq (x y: ) : dist x y = |x-y| := rfl

Твердження 4.3.3(a) / Вправа 4.3.1

theorem declaration uses 'sorry'abs_nonneg (x: ) : |x| 0 := x:|x| 0 All goals completed! 🐙

Твердження 4.3.3(a) / Вправа 4.3.1

theorem declaration uses 'sorry'abs_eq_zero_iff (x: ) : |x| = 0 x = 0 := x:|x| = 0 x = 0 All goals completed! 🐙

Твердження 4.3.3(b) / Вправа 4.3.1

theorem declaration uses 'sorry'abs_add (x y:) : |x + y| |x| + |y| := x:y:|x + y| |x| + |y| All goals completed! 🐙

Твердження 4.3.3(c) / Вправа 4.3.1

theorem declaration uses 'sorry'abs_le_iff (x y:) : -y x x y |x| y := x:y:-y x x y |x| y All goals completed! 🐙

Твердження 4.3.3(c) / Вправа 4.3.1

theorem declaration uses 'sorry'le_abs (x:) : -|x| x x |x| := x:-|x| x x |x| All goals completed! 🐙

Твердження 4.3.3(d) / Вправа 4.3.1

theorem declaration uses 'sorry'abs_mul (x y:) : |x * y| = |x| * |y| := x:y:|x * y| = |x| * |y| All goals completed! 🐙

Твердження 4.3.3(d) / Вправа 4.3.1

theorem declaration uses 'sorry'abs_neg (x:) : |-x| = |x| := x:|(-x)| = |x| All goals completed! 🐙

Твердження 4.3.3(e) / Вправа 4.3.1

theorem declaration uses 'sorry'dist_nonneg (x y:) : dist x y 0 := x:y:dist x y 0 All goals completed! 🐙

Твердження 4.3.3(e) / Вправа 4.3.1

theorem declaration uses 'sorry'dist_eq_zero_iff (x y:) : dist x y = 0 x = y := x:y:dist x y = 0 x = y All goals completed! 🐙

Твердження 4.3.3(f) / Вправа 4.3.1

theorem declaration uses 'sorry'dist_symm (x y:) : dist x y = dist y x := x:y:dist x y = dist y x All goals completed! 🐙

Твердження 4.3.3(f) / Вправа 4.3.1

theorem declaration uses 'sorry'dist_le (x y z:) : dist x z dist x y + dist y z := x:y:z:dist x z dist x y + dist y z All goals completed! 🐙

Визначення 4.3.4 (ε-близькість). У тексті це поняття не визначене для ε, що дорівнює нулю або є від’ємним, але в Lean зручніше призначити в цьому випадку «сміттєве» визначення. Це також дозволяє деяке послаблення гіпотез у наступних лемах.

theorem close_iff (ε x y:): ε.Close x y |x - y| ε := ε:x:y:ε.Close x y |x - y| ε All goals completed! 🐙

Приклади 4.3.6

declaration uses 'sorry'example : (0.1:).Close (0.99:) (1.01:) := Rat.Close 0.1 0.99 1.01 All goals completed! 🐙

Приклади 4.3.6

declaration uses 'sorry'example : ¬ (0.01:).Close (0.99:) (1.01:) := ¬Rat.Close 1e-2 0.99 1.01 All goals completed! 🐙

Приклади 4.3.6

declaration uses 'sorry'example (ε : ) ( : ε > 0) : ε.Close 2 2 := ε::ε > 0ε.Close 2 2 All goals completed! 🐙
theorem declaration uses 'sorry'close_refl (x:) : (0:).Close x x := x:Rat.Close 0 x x All goals completed! 🐙

Твердження 4.3.7(a) / Вправа 4.3.2

theorem declaration uses 'sorry'eq_if_close (x y:) : x = y ε:, ε > 0 ε.Close x y := x:y:x = y ε > 0, ε.Close x y All goals completed! 🐙

Твердження 4.3.7(b) / Вправа 4.3.2

theorem declaration uses 'sorry'close_symm (ε x y:) : ε.Close x y ε.Close y x := ε:x:y:ε.Close x y ε.Close y x All goals completed! 🐙

Твердження 4.3.7(c) / Вправа 4.3.2

theorem declaration uses 'sorry'close_trans {ε δ x y z:} (hxy: ε.Close x y) (hyz: δ.Close y z) : (ε + δ).Close x z := ε:δ:x:y:z:hxy:ε.Close x yhyz:δ.Close y z(ε + δ).Close x z All goals completed! 🐙

Твердження 4.3.7(d) / Вправа 4.3.2

theorem declaration uses 'sorry'add_close {ε δ x y z w:} (hxy: ε.Close x y) (hzw: δ.Close z w) : (ε + δ).Close (x+z) (y+w) := ε:δ:x:y:z:w:hxy:ε.Close x yhzw:δ.Close z w(ε + δ).Close (x + z) (y + w) All goals completed! 🐙

Твердження 4.3.7(d) / Вправа 4.3.2

theorem declaration uses 'sorry'sub_close {ε δ x y z w:} (hxy: ε.Close x y) (hzw: δ.Close z w) : (ε + δ).Close (x-z) (y-w) := ε:δ:x:y:z:w:hxy:ε.Close x yhzw:δ.Close z w(ε + δ).Close (x - z) (y - w) All goals completed! 🐙

Твердження 4.3.7(e) / Вправа 4.3.2, трохи посилена

theorem declaration uses 'sorry'close_mono {ε ε' x y:} (hxy: ε.Close x y) (: ε' ε) : ε'.Close x y := ε:ε':x:y:hxy:ε.Close x y:ε' εε'.Close x y All goals completed! 🐙

Твердження 4.3.7(f) / Вправа 4.3.2

theorem declaration uses 'sorry'close_between {ε x y z w:} (hxy: ε.Close x y) (hxz: ε.Close x z) (hbetween: (y w w z) (z w w y)) : ε.Close x w := ε:x:y:z:w:hxy:ε.Close x yhxz:ε.Close x zhbetween:y w w z z w w yε.Close x w All goals completed! 🐙

Твердження 4.3.7(g) / Вправа 4.3.2

theorem declaration uses 'sorry'close_mul_right {ε x y z:} (hxy: ε.Close x y) : (ε*|z|).Close (x * z) (y * z) := ε:x:y:z:hxy:ε.Close x y(ε * |z|).Close (x * z) (y * z) All goals completed! 🐙

Твердження 4.3.7(h) / Вправа 4.3.2

theorem close_mul_mul {ε δ x y z w:} (hxy: ε.Close x y) (hzw: δ.Close z w) : (ε*|z|+δ*|x|+ε*δ).Close (x * z) (y * w) := ε:δ:x:y:z:w:hxy:ε.Close x yhzw:δ.Close z w(ε * |z| + δ * |x| + ε * δ).Close (x * z) (y * w) -- Доведення написане так, щоб відповідати структурі оригінального тексту, хоча -- невід’ємність ε та δ є очевидною і не потребує явного зазначення в гіпотезах. ε:δ:x:y:z:w:hxy:ε.Close x yhzw:δ.Close z w:_fvar.6597 0 := le_trans (abs_nonneg ?_mvar.6709) _fvar.6603(ε * |z| + δ * |x| + ε * δ).Close (x * z) (y * w) ε:δ:x:y:z:w:hxy:ε.Close x yhzw:δ.Close z w:_fvar.6597 0 := le_trans (abs_nonneg ?_mvar.6709) _fvar.6603a: := _fvar.6600 - _fvar.6599(ε * |z| + δ * |x| + ε * δ).Close (x * z) (y * w) have ha : y = x + a := ε:δ:x:y:z:w:hxy:ε.Close x yhzw:δ.Close z w(ε * |z| + δ * |x| + ε * δ).Close (x * z) (y * w) All goals completed! 🐙 have haε: |a| ε := ε:δ:x:y:z:w:hxy:ε.Close x yhzw:δ.Close z w(ε * |z| + δ * |x| + ε * δ).Close (x * z) (y * w) rwa [close_symm, close_iffε:δ:x:y:z:w:hxy:|y - x| εhzw:δ.Close z w:ε 0a: := _fvar.6600 - _fvar.6599ha:y = x + a|a| ε at hxy ε:δ:x:y:z:w:hxy:ε.Close x yhzw:δ.Close z w:_fvar.6597 0 := le_trans (abs_nonneg ?_mvar.6709) _fvar.6603a: := _fvar.6600 - _fvar.6599ha:_fvar.6600 = _fvar.6599 + _fvar.6764 := ?_mvar.6923haε:|_fvar.6764| _fvar.6597 := ?_mvar.8623b: := _fvar.6602 - _fvar.6601(ε * |z| + δ * |x| + ε * δ).Close (x * z) (y * w) have hb : w = z + b := ε:δ:x:y:z:w:hxy:ε.Close x yhzw:δ.Close z w(ε * |z| + δ * |x| + ε * δ).Close (x * z) (y * w) All goals completed! 🐙 have hbδ: |b| δ := ε:δ:x:y:z:w:hxy:ε.Close x yhzw:δ.Close z w(ε * |z| + δ * |x| + ε * δ).Close (x * z) (y * w) rwa [close_symm, close_iffε:δ:x:y:z:w:hxy:ε.Close x yhzw:|w - z| δ:ε 0a: := _fvar.6600 - _fvar.6599ha:y = x + ahaε:|a| εb: := _fvar.6602 - _fvar.6601hb:w = z + b|b| δ at hzw have : y*w = x * z + a * z + x * b + a * b := ε:δ:x:y:z:w:hxy:ε.Close x yhzw:δ.Close z w(ε * |z| + δ * |x| + ε * δ).Close (x * z) (y * w) All goals completed! 🐙 ε:δ:x:y:z:w:hxy:ε.Close x yhzw:δ.Close z w:_fvar.6597 0 := le_trans (abs_nonneg ?_mvar.6709) _fvar.6603a: := _fvar.6600 - _fvar.6599ha:_fvar.6600 = _fvar.6599 + _fvar.6764 := ?_mvar.6923haε:|_fvar.6764| _fvar.6597 := ?_mvar.8623b: := _fvar.6602 - _fvar.6601hb:_fvar.6602 = _fvar.6601 + _fvar.10741 := ?_mvar.10927hbδ:|_fvar.10741| _fvar.6598 := ?_mvar.12659this:_fvar.6600 * _fvar.6602 = _fvar.6599 * _fvar.6601 + _fvar.6764 * _fvar.6601 + _fvar.6599 * _fvar.10741 + _fvar.6764 * _fvar.10741 := ?_mvar.14162|y * w - x * z| ε * |z| + δ * |x| + ε * δ calc _ = |a * z + b * x + a * b| := ε:δ:x:y:z:w:hxy:ε.Close x yhzw:δ.Close z w:_fvar.6597 0 := le_trans (abs_nonneg (_fvar.6599 - _fvar.6600)) _fvar.6603a: := _fvar.6600 - _fvar.6599ha:_fvar.6600 = _fvar.6599 + _fvar.6764 := close_mul_mul._proof_1haε:|_fvar.6764| _fvar.6597 := Eq.mp (congrArg (fun _a => _a) (propext (close_iff _fvar.6597 _fvar.6600 _fvar.6599))) (Eq.mp (congrArg (fun _a => _a) (propext (close_symm _fvar.6597 _fvar.6599 _fvar.6600))) _fvar.6603)b: := _fvar.6602 - _fvar.6601hb:_fvar.6602 = _fvar.6601 + _fvar.10741 := close_mul_mul._proof_2hbδ:|_fvar.10741| _fvar.6598 := Eq.mp (congrArg (fun _a => _a) (propext (close_iff _fvar.6598 _fvar.6602 _fvar.6601))) (Eq.mp (congrArg (fun _a => _a) (propext (close_symm _fvar.6598 _fvar.6601 _fvar.6602))) _fvar.6604)this:_fvar.6600 * _fvar.6602 = _fvar.6599 * _fvar.6601 + _fvar.6764 * _fvar.6601 + _fvar.6599 * _fvar.10741 + _fvar.6764 * _fvar.10741 := close_mul_mul._proof_3|y * w - x * z| = |a * z + b * x + a * b| All goals completed! 🐙 _ |a * z + b * x| + |a * b| := abs_add _ _ _ |a * z| + |b * x| + |a * b| := ε:δ:x:y:z:w:hxy:ε.Close x yhzw:δ.Close z w:_fvar.6597 0 := le_trans (abs_nonneg (_fvar.6599 - _fvar.6600)) _fvar.6603a: := _fvar.6600 - _fvar.6599ha:_fvar.6600 = _fvar.6599 + _fvar.6764 := close_mul_mul._proof_1haε:|_fvar.6764| _fvar.6597 := Eq.mp (congrArg (fun _a => _a) (propext (close_iff _fvar.6597 _fvar.6600 _fvar.6599))) (Eq.mp (congrArg (fun _a => _a) (propext (close_symm _fvar.6597 _fvar.6599 _fvar.6600))) _fvar.6603)b: := _fvar.6602 - _fvar.6601hb:_fvar.6602 = _fvar.6601 + _fvar.10741 := close_mul_mul._proof_2hbδ:|_fvar.10741| _fvar.6598 := Eq.mp (congrArg (fun _a => _a) (propext (close_iff _fvar.6598 _fvar.6602 _fvar.6601))) (Eq.mp (congrArg (fun _a => _a) (propext (close_symm _fvar.6598 _fvar.6601 _fvar.6602))) _fvar.6604)this:_fvar.6600 * _fvar.6602 = _fvar.6599 * _fvar.6601 + _fvar.6764 * _fvar.6601 + _fvar.6599 * _fvar.10741 + _fvar.6764 * _fvar.10741 := close_mul_mul._proof_3|a * z + b * x| + |a * b| |a * z| + |b * x| + |a * b| All goals completed! 🐙 _ = |a| * |z| + |b| * |x| + |a| * |b| := ε:δ:x:y:z:w:hxy:ε.Close x yhzw:δ.Close z w:_fvar.6597 0 := le_trans (abs_nonneg (_fvar.6599 - _fvar.6600)) _fvar.6603a: := _fvar.6600 - _fvar.6599ha:_fvar.6600 = _fvar.6599 + _fvar.6764 := close_mul_mul._proof_1haε:|_fvar.6764| _fvar.6597 := Eq.mp (congrArg (fun _a => _a) (propext (close_iff _fvar.6597 _fvar.6600 _fvar.6599))) (Eq.mp (congrArg (fun _a => _a) (propext (close_symm _fvar.6597 _fvar.6599 _fvar.6600))) _fvar.6603)b: := _fvar.6602 - _fvar.6601hb:_fvar.6602 = _fvar.6601 + _fvar.10741 := close_mul_mul._proof_2hbδ:|_fvar.10741| _fvar.6598 := Eq.mp (congrArg (fun _a => _a) (propext (close_iff _fvar.6598 _fvar.6602 _fvar.6601))) (Eq.mp (congrArg (fun _a => _a) (propext (close_symm _fvar.6598 _fvar.6601 _fvar.6602))) _fvar.6604)this:_fvar.6600 * _fvar.6602 = _fvar.6599 * _fvar.6601 + _fvar.6764 * _fvar.6601 + _fvar.6599 * _fvar.10741 + _fvar.6764 * _fvar.10741 := close_mul_mul._proof_3|a * z| + |b * x| + |a * b| = |a| * |z| + |b| * |x| + |a| * |b| All goals completed! 🐙 _ _ := ε:δ:x:y:z:w:hxy:ε.Close x yhzw:δ.Close z w:_fvar.6597 0 := le_trans (abs_nonneg (_fvar.6599 - _fvar.6600)) _fvar.6603a: := _fvar.6600 - _fvar.6599ha:_fvar.6600 = _fvar.6599 + _fvar.6764 := close_mul_mul._proof_1haε:|_fvar.6764| _fvar.6597 := Eq.mp (congrArg (fun _a => _a) (propext (close_iff _fvar.6597 _fvar.6600 _fvar.6599))) (Eq.mp (congrArg (fun _a => _a) (propext (close_symm _fvar.6597 _fvar.6599 _fvar.6600))) _fvar.6603)b: := _fvar.6602 - _fvar.6601hb:_fvar.6602 = _fvar.6601 + _fvar.10741 := close_mul_mul._proof_2hbδ:|_fvar.10741| _fvar.6598 := Eq.mp (congrArg (fun _a => _a) (propext (close_iff _fvar.6598 _fvar.6602 _fvar.6601))) (Eq.mp (congrArg (fun _a => _a) (propext (close_symm _fvar.6598 _fvar.6601 _fvar.6602))) _fvar.6604)this:_fvar.6600 * _fvar.6602 = _fvar.6599 * _fvar.6601 + _fvar.6764 * _fvar.6601 + _fvar.6599 * _fvar.10741 + _fvar.6764 * _fvar.10741 := close_mul_mul._proof_3|a| * |z| + |b| * |x| + |a| * |b| ε * |z| + δ * |x| + ε * δ All goals completed! 🐙

Ця варіація Твердження 4.3.7(h) не містилася в підручнику, але може бути корисною у деяких наступних вправах.

theorem declaration uses 'sorry'close_mul_mul' {ε δ x y z w:} (hxy: ε.Close x y) (hzw: δ.Close z w) : (ε*|z|+δ*|y|).Close (x * z) (y * w) := ε:δ:x:y:z:w:hxy:ε.Close x yhzw:δ.Close z w(ε * |z| + δ * |y|).Close (x * z) (y * w) All goals completed! 🐙

Визначення 4.3.9 (піднесення до степеня). Тут ми використовуємо визначення з Mathlib.

lemma pow_zero (x:) : x^0 = 1 := rfl
example : (0:)^0 = 1 := pow_zero 0

Визначення 4.3.9 (піднесення до степеня). Тут ми використовуємо визначення з Mathlib.

lemma pow_succ (x:) (n:) : x^(n+1) = x^n * x := _root_.pow_succ x n

Твердження 4.3.10(a) (Властивості піднесення до степеня, I) / Вправа 4.3.3

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

Твердження 4.3.10(a) (Властивості піднесення до степеня, I) / Вправа 4.3.3

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

Твердження 4.3.10(a) (Властивості піднесення до степеня, I) / Вправа 4.3.3

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

Твердження 4.3.10(b) (Властивості піднесення до степеня, I) / Вправа 4.3.3

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

Твердження 4.3.10(c) (Властивості піднесення до степеня, I) / Вправа 4.3.3

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

Твердження 4.3.10(c) (Властивості піднесення до степеня, I) / Вправа 4.3.3

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

Твердження 4.3.10(c) (Властивості піднесення до степеня, I) / Вправа 4.3.3

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

Твердження 4.3.10(c) (Властивості піднесення до степеня, I) / Вправа 4.3.3

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

Твердження 4.3.10(d) (Властивості піднесення до степеня, I) / Вправа 4.3.3

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

Визначення 4.3.11 (Піднесення до степеня з від’ємним показником). Тут ми використовуємо поняття піднесення до степеня з цілим показником із Mathlib.

theorem zpow_neg (x:) (n:) : x^(-(n:)) = 1/(x^n) := x:n:x ^ (-n) = 1 / x ^ n All goals completed! 🐙
example (x:): x^(-3:) = 1/(x^3) := zpow_neg x 3example (x:): x^(-3:) = 1/(x*x*x) := x:x ^ (-3) = 1 / (x * x * x) x:x * x * x = x ^ 3; All goals completed! 🐙theorem pow_eq_zpow (x:) (n:): x^(n:) = x^n := zpow_natCast x n

Твердження 4.3.12(a) (Властивості піднесення до степеня, II) / Вправа 4.3.4

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

Твердження 4.3.12(a) (Властивості піднесення до степеня, II) / Вправа 4.3.4

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

Твердження 4.3.12(a) (Властивості піднесення до степеня, II) / Вправа 4.3.4

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

Твердження 4.3.12(b) (Властивості піднесення до степеня, II) / Вправа 4.3.4

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

Твердження 4.3.12(b) (Властивості піднесення до степеня, II) / Вправа 4.3.4

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

Твердження 4.3.12(c) (Властивості піднесення до степеня, II) / Вправа 4.3.4

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

Твердження 4.3.12(d) (Властивості піднесення до степеня, II) / Вправа 4.3.4

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

Вправа 4.3.5

theorem declaration uses 'sorry'two_pow_geq (N:) : 2^N N := N:2 ^ N N All goals completed! 🐙