Theorem: Lean4Axiomatic.Rational.pow_substL_ge_nonneg (Lean4Axiomatic/Rational/Exponentiation.lean)

State before:
ℕ ℤ : Type
inst✝¹² : Natural ℕ
inst✝¹¹ : Integer ℤ
ℚ : Type
inst✝¹⁰ : Core ℚ
inst✝⁹ : Addition ℚ
inst✝⁸ : Multiplication ℚ
inst✝⁷ : Negation ℚ
inst✝⁶ : Subtraction ℚ
inst✝⁵ : Reciprocation ℚ
inst✝⁴ : Division ℚ
inst✝³ : Sign ℚ
inst✝² : Order ℚ
inst✝¹ : Metric ℚ
inst✝ : Natural.Exponentiation ℕ fun x x_1 => x * x_1
p q : ℚ
n : ℕ
⊢ p ≥ q ∧ q ≥ 0 → p ^ n ≥ q ^ n ∧ q ^ n ≥ 0
Tactic:
intro (And.intro (_ : p ≥ q) (_ : q ≥ 0))
State after:
ℕ ℤ : Type
inst✝¹² : Natural ℕ
inst✝¹¹ : Integer ℤ
ℚ : Type
inst✝¹⁰ : Core ℚ
inst✝⁹ : Addition ℚ
inst✝⁸ : Multiplication ℚ
inst✝⁷ : Negation ℚ
inst✝⁶ : Subtraction ℚ
inst✝⁵ : Reciprocation ℚ
inst✝⁴ : Division ℚ
inst✝³ : Sign ℚ
inst✝² : Order ℚ
inst✝¹ : Metric ℚ
inst✝ : Natural.Exponentiation ℕ fun x x_1 => x * x_1
p q : ℚ
n : ℕ
left✝ : p ≥ q
right✝ : q ≥ 0
⊢ p ^ n ≥ q ^ n ∧ q ^ n ≥ 0

State before:
ℕ ℤ : Type
inst✝¹² : Natural ℕ
inst✝¹¹ : Integer ℤ
ℚ : Type
inst✝¹⁰ : Core ℚ
inst✝⁹ : Addition ℚ
inst✝⁸ : Multiplication ℚ
inst✝⁷ : Negation ℚ
inst✝⁶ : Subtraction ℚ
inst✝⁵ : Reciprocation ℚ
inst✝⁴ : Division ℚ
inst✝³ : Sign ℚ
inst✝² : Order ℚ
inst✝¹ : Metric ℚ
inst✝ : Natural.Exponentiation ℕ fun x x_1 => x * x_1
p q : ℚ
n : ℕ
left✝ : p ≥ q
right✝ : q ≥ 0
⊢ p ^ n ≥ q ^ n ∧ q ^ n ≥ 0
Tactic:
apply Natural.ind_on n
State after:
case zero
ℕ ℤ : Type
inst✝¹² : Natural ℕ
inst✝¹¹ : Integer ℤ
ℚ : Type
inst✝¹⁰ : Core ℚ
inst✝⁹ : Addition ℚ
inst✝⁸ : Multiplication ℚ
inst✝⁷ : Negation ℚ
inst✝⁶ : Subtraction ℚ
inst✝⁵ : Reciprocation ℚ
inst✝⁴ : Division ℚ
inst✝³ : Sign ℚ
inst✝² : Order ℚ
inst✝¹ : Metric ℚ
inst✝ : Natural.Exponentiation ℕ fun x x_1 => x * x_1
p q : ℚ
n : ℕ
left✝ : p ≥ q
right✝ : q ≥ 0
⊢ p ^ 0 ≥ q ^ 0 ∧ q ^ 0 ≥ 0

case step
ℕ ℤ : Type
inst✝¹² : Natural ℕ
inst✝¹¹ : Integer ℤ
ℚ : Type
inst✝¹⁰ : Core ℚ
inst✝⁹ : Addition ℚ
inst✝⁸ : Multiplication ℚ
inst✝⁷ : Negation ℚ
inst✝⁶ : Subtraction ℚ
inst✝⁵ : Reciprocation ℚ
inst✝⁴ : Division ℚ
inst✝³ : Sign ℚ
inst✝² : Order ℚ
inst✝¹ : Metric ℚ
inst✝ : Natural.Exponentiation ℕ fun x x_1 => x * x_1
p q : ℚ
n : ℕ
left✝ : p ≥ q
right✝ : q ≥ 0
⊢ ∀ (m : ℕ), p ^ m ≥ q ^ m ∧ q ^ m ≥ 0 → p ^ step m ≥ q ^ step m ∧ q ^ step m ≥ 0

State before:
ℕ ℤ : Type
inst✝¹² : Natural ℕ
inst✝¹¹ : Integer ℤ
ℚ : Type
inst✝¹⁰ : Core ℚ
inst✝⁹ : Addition ℚ
inst✝⁸ : Multiplication ℚ
inst✝⁷ : Negation ℚ
inst✝⁶ : Subtraction ℚ
inst✝⁵ : Reciprocation ℚ
inst✝⁴ : Division ℚ
inst✝³ : Sign ℚ
inst✝² : Order ℚ
inst✝¹ : Metric ℚ
inst✝ : Natural.Exponentiation ℕ fun x x_1 => x * x_1
p q : ℚ
n : ℕ
left✝ : p ≥ q
right✝ : q ≥ 0
⊢ p ^ 0 ≥ q ^ 0 ∧ q ^ 0 ≥ 0
Tactic:
case zero =>
  show p^0 ≥ q^0 ∧ q^0 ≥ 0
  have : p^(0:ℕ) ≥ q^(0:ℕ) := calc
    _ ≃ p^0 := eqv_refl
    _ ≃ 1   := pow_zero
    _ ≃ q^0 := eqv_symm pow_zero
    _ ≥ q^0 := le_refl
  have : q^(0:ℕ) ≥ 0 := calc
    _ ≃ q^0 := eqv_refl
    _ ≃ 1   := pow_zero
    _ ≥ 0   := one_ge_zero
  exact And.intro ‹p^(0:ℕ) ≥ q^(0:ℕ)› ‹q^(0:ℕ) ≥ 0›
State after:
no goals

State before:
ℕ ℤ : Type
inst✝¹² : Natural ℕ
inst✝¹¹ : Integer ℤ
ℚ : Type
inst✝¹⁰ : Core ℚ
inst✝⁹ : Addition ℚ
inst✝⁸ : Multiplication ℚ
inst✝⁷ : Negation ℚ
inst✝⁶ : Subtraction ℚ
inst✝⁵ : Reciprocation ℚ
inst✝⁴ : Division ℚ
inst✝³ : Sign ℚ
inst✝² : Order ℚ
inst✝¹ : Metric ℚ
inst✝ : Natural.Exponentiation ℕ fun x x_1 => x * x_1
p q : ℚ
n : ℕ
left✝ : p ≥ q
right✝ : q ≥ 0
⊢ ∀ (m : ℕ), p ^ m ≥ q ^ m ∧ q ^ m ≥ 0 → p ^ step m ≥ q ^ step m ∧ q ^ step m ≥ 0
Tactic:
case step =>
  intro (n' : ℕ) (And.intro (_ : p^n' ≥ q^n') (_ : q^n' ≥ 0))
  show p^(step n') ≥ q^(step n') ∧ q^(step n') ≥ 0
  have : p ≥ 0 := ge_trans ‹p ≥ q› ‹q ≥ 0›
  have : p^(step n') ≥ q^(step n') := calc
    _ ≃ p^(step n') := eqv_refl
    _ ≃ p^n' * p    := pow_step
    _ ≥ q^n' * p    := le_substL_mul_nonneg ‹p ≥ 0› ‹p^n' ≥ q^n'›
    _ ≥ q^n' * q    := le_substR_mul_nonneg ‹q^n' ≥ 0› ‹p ≥ q›
    _ ≃ q^(step n') := eqv_symm pow_step
  have : q^(step n') ≥ 0 := calc
    _ ≃ q^(step n') := eqv_refl
    _ ≃ q^n' * q    := pow_step
    _ ≥ 0 * q       := le_substL_mul_nonneg ‹q ≥ 0› ‹q^n' ≥ 0›
    _ ≃ 0           := mul_absorbL
  exact And.intro ‹p^(step n') ≥ q^(step n')› ‹q^(step n') ≥ 0›
State after:
no goals

State before:
ℕ ℤ : Type
inst✝¹² : Natural ℕ
inst✝¹¹ : Integer ℤ
ℚ : Type
inst✝¹⁰ : Core ℚ
inst✝⁹ : Addition ℚ
inst✝⁸ : Multiplication ℚ
inst✝⁷ : Negation ℚ
inst✝⁶ : Subtraction ℚ
inst✝⁵ : Reciprocation ℚ
inst✝⁴ : Division ℚ
inst✝³ : Sign ℚ
inst✝² : Order ℚ
inst✝¹ : Metric ℚ
inst✝ : Natural.Exponentiation ℕ fun x x_1 => x * x_1
p q : ℚ
n : ℕ
left✝ : p ≥ q
right✝ : q ≥ 0
⊢ p ^ 0 ≥ q ^ 0 ∧ q ^ 0 ≥ 0
Tactic:
have : p^(0:ℕ) ≥ q^(0:ℕ) := calc
  _ ≃ p^0 := eqv_refl
  _ ≃ 1   := pow_zero
  _ ≃ q^0 := eqv_symm pow_zero
  _ ≥ q^0 := le_refl
State after:
ℕ ℤ : Type
inst✝¹² : Natural ℕ
inst✝¹¹ : Integer ℤ
ℚ : Type
inst✝¹⁰ : Core ℚ
inst✝⁹ : Addition ℚ
inst✝⁸ : Multiplication ℚ
inst✝⁷ : Negation ℚ
inst✝⁶ : Subtraction ℚ
inst✝⁵ : Reciprocation ℚ
inst✝⁴ : Division ℚ
inst✝³ : Sign ℚ
inst✝² : Order ℚ
inst✝¹ : Metric ℚ
inst✝ : Natural.Exponentiation ℕ fun x x_1 => x * x_1
p q : ℚ
n : ℕ
left✝ : p ≥ q
right✝ : q ≥ 0
this : p ^ 0 ≥ q ^ 0
⊢ p ^ 0 ≥ q ^ 0 ∧ q ^ 0 ≥ 0

State before:
ℕ ℤ : Type
inst✝¹² : Natural ℕ
inst✝¹¹ : Integer ℤ
ℚ : Type
inst✝¹⁰ : Core ℚ
inst✝⁹ : Addition ℚ
inst✝⁸ : Multiplication ℚ
inst✝⁷ : Negation ℚ
inst✝⁶ : Subtraction ℚ
inst✝⁵ : Reciprocation ℚ
inst✝⁴ : Division ℚ
inst✝³ : Sign ℚ
inst✝² : Order ℚ
inst✝¹ : Metric ℚ
inst✝ : Natural.Exponentiation ℕ fun x x_1 => x * x_1
p q : ℚ
n : ℕ
left✝ : p ≥ q
right✝ : q ≥ 0
this : p ^ 0 ≥ q ^ 0
⊢ p ^ 0 ≥ q ^ 0 ∧ q ^ 0 ≥ 0
Tactic:
have : q^(0:ℕ) ≥ 0 := calc
  _ ≃ q^0 := eqv_refl
  _ ≃ 1   := pow_zero
  _ ≥ 0   := one_ge_zero
State after:
ℕ ℤ : Type
inst✝¹² : Natural ℕ
inst✝¹¹ : Integer ℤ
ℚ : Type
inst✝¹⁰ : Core ℚ
inst✝⁹ : Addition ℚ
inst✝⁸ : Multiplication ℚ
inst✝⁷ : Negation ℚ
inst✝⁶ : Subtraction ℚ
inst✝⁵ : Reciprocation ℚ
inst✝⁴ : Division ℚ
inst✝³ : Sign ℚ
inst✝² : Order ℚ
inst✝¹ : Metric ℚ
inst✝ : Natural.Exponentiation ℕ fun x x_1 => x * x_1
p q : ℚ
n : ℕ
left✝ : p ≥ q
right✝ : q ≥ 0
this✝ : p ^ 0 ≥ q ^ 0
this : q ^ 0 ≥ 0
⊢ p ^ 0 ≥ q ^ 0 ∧ q ^ 0 ≥ 0

State before:
ℕ ℤ : Type
inst✝¹² : Natural ℕ
inst✝¹¹ : Integer ℤ
ℚ : Type
inst✝¹⁰ : Core ℚ
inst✝⁹ : Addition ℚ
inst✝⁸ : Multiplication ℚ
inst✝⁷ : Negation ℚ
inst✝⁶ : Subtraction ℚ
inst✝⁵ : Reciprocation ℚ
inst✝⁴ : Division ℚ
inst✝³ : Sign ℚ
inst✝² : Order ℚ
inst✝¹ : Metric ℚ
inst✝ : Natural.Exponentiation ℕ fun x x_1 => x * x_1
p q : ℚ
n : ℕ
left✝ : p ≥ q
right✝ : q ≥ 0
this✝ : p ^ 0 ≥ q ^ 0
this : q ^ 0 ≥ 0
⊢ p ^ 0 ≥ q ^ 0 ∧ q ^ 0 ≥ 0
Tactic:
exact And.intro ‹p^(0:ℕ) ≥ q^(0:ℕ)› ‹q^(0:ℕ) ≥ 0›
State after:
no goals

State before:
ℕ ℤ : Type
inst✝¹² : Natural ℕ
inst✝¹¹ : Integer ℤ
ℚ : Type
inst✝¹⁰ : Core ℚ
inst✝⁹ : Addition ℚ
inst✝⁸ : Multiplication ℚ
inst✝⁷ : Negation ℚ
inst✝⁶ : Subtraction ℚ
inst✝⁵ : Reciprocation ℚ
inst✝⁴ : Division ℚ
inst✝³ : Sign ℚ
inst✝² : Order ℚ
inst✝¹ : Metric ℚ
inst✝ : Natural.Exponentiation ℕ fun x x_1 => x * x_1
p q : ℚ
n : ℕ
left✝ : p ≥ q
right✝ : q ≥ 0
⊢ ∀ (m : ℕ), p ^ m ≥ q ^ m ∧ q ^ m ≥ 0 → p ^ step m ≥ q ^ step m ∧ q ^ step m ≥ 0
Tactic:
intro (n' : ℕ) (And.intro (_ : p^n' ≥ q^n') (_ : q^n' ≥ 0))
State after:
ℕ ℤ : Type
inst✝¹² : Natural ℕ
inst✝¹¹ : Integer ℤ
ℚ : Type
inst✝¹⁰ : Core ℚ
inst✝⁹ : Addition ℚ
inst✝⁸ : Multiplication ℚ
inst✝⁷ : Negation ℚ
inst✝⁶ : Subtraction ℚ
inst✝⁵ : Reciprocation ℚ
inst✝⁴ : Division ℚ
inst✝³ : Sign ℚ
inst✝² : Order ℚ
inst✝¹ : Metric ℚ
inst✝ : Natural.Exponentiation ℕ fun x x_1 => x * x_1
p q : ℚ
n : ℕ
left✝¹ : p ≥ q
right✝¹ : q ≥ 0
n' : ℕ
left✝ : p ^ n' ≥ q ^ n'
right✝ : q ^ n' ≥ 0
⊢ p ^ step n' ≥ q ^ step n' ∧ q ^ step n' ≥ 0

State before:
ℕ ℤ : Type
inst✝¹² : Natural ℕ
inst✝¹¹ : Integer ℤ
ℚ : Type
inst✝¹⁰ : Core ℚ
inst✝⁹ : Addition ℚ
inst✝⁸ : Multiplication ℚ
inst✝⁷ : Negation ℚ
inst✝⁶ : Subtraction ℚ
inst✝⁵ : Reciprocation ℚ
inst✝⁴ : Division ℚ
inst✝³ : Sign ℚ
inst✝² : Order ℚ
inst✝¹ : Metric ℚ
inst✝ : Natural.Exponentiation ℕ fun x x_1 => x * x_1
p q : ℚ
n : ℕ
left✝¹ : p ≥ q
right✝¹ : q ≥ 0
n' : ℕ
left✝ : p ^ n' ≥ q ^ n'
right✝ : q ^ n' ≥ 0
⊢ p ^ step n' ≥ q ^ step n' ∧ q ^ step n' ≥ 0
Tactic:
have : p ≥ 0 := ge_trans ‹p ≥ q› ‹q ≥ 0›
State after:
ℕ ℤ : Type
inst✝¹² : Natural ℕ
inst✝¹¹ : Integer ℤ
ℚ : Type
inst✝¹⁰ : Core ℚ
inst✝⁹ : Addition ℚ
inst✝⁸ : Multiplication ℚ
inst✝⁷ : Negation ℚ
inst✝⁶ : Subtraction ℚ
inst✝⁵ : Reciprocation ℚ
inst✝⁴ : Division ℚ
inst✝³ : Sign ℚ
inst✝² : Order ℚ
inst✝¹ : Metric ℚ
inst✝ : Natural.Exponentiation ℕ fun x x_1 => x * x_1
p q : ℚ
n : ℕ
left✝¹ : p ≥ q
right✝¹ : q ≥ 0
n' : ℕ
left✝ : p ^ n' ≥ q ^ n'
right✝ : q ^ n' ≥ 0
this : p ≥ 0
⊢ p ^ step n' ≥ q ^ step n' ∧ q ^ step n' ≥ 0

State before:
ℕ ℤ : Type
inst✝¹² : Natural ℕ
inst✝¹¹ : Integer ℤ
ℚ : Type
inst✝¹⁰ : Core ℚ
inst✝⁹ : Addition ℚ
inst✝⁸ : Multiplication ℚ
inst✝⁷ : Negation ℚ
inst✝⁶ : Subtraction ℚ
inst✝⁵ : Reciprocation ℚ
inst✝⁴ : Division ℚ
inst✝³ : Sign ℚ
inst✝² : Order ℚ
inst✝¹ : Metric ℚ
inst✝ : Natural.Exponentiation ℕ fun x x_1 => x * x_1
p q : ℚ
n : ℕ
left✝¹ : p ≥ q
right✝¹ : q ≥ 0
n' : ℕ
left✝ : p ^ n' ≥ q ^ n'
right✝ : q ^ n' ≥ 0
this : p ≥ 0
⊢ p ^ step n' ≥ q ^ step n' ∧ q ^ step n' ≥ 0
Tactic:
have : p^(step n') ≥ q^(step n') := calc
  _ ≃ p^(step n') := eqv_refl
  _ ≃ p^n' * p    := pow_step
  _ ≥ q^n' * p    := le_substL_mul_nonneg ‹p ≥ 0› ‹p^n' ≥ q^n'›
  _ ≥ q^n' * q    := le_substR_mul_nonneg ‹q^n' ≥ 0› ‹p ≥ q›
  _ ≃ q^(step n') := eqv_symm pow_step
State after:
ℕ ℤ : Type
inst✝¹² : Natural ℕ
inst✝¹¹ : Integer ℤ
ℚ : Type
inst✝¹⁰ : Core ℚ
inst✝⁹ : Addition ℚ
inst✝⁸ : Multiplication ℚ
inst✝⁷ : Negation ℚ
inst✝⁶ : Subtraction ℚ
inst✝⁵ : Reciprocation ℚ
inst✝⁴ : Division ℚ
inst✝³ : Sign ℚ
inst✝² : Order ℚ
inst✝¹ : Metric ℚ
inst✝ : Natural.Exponentiation ℕ fun x x_1 => x * x_1
p q : ℚ
n : ℕ
left✝¹ : p ≥ q
right✝¹ : q ≥ 0
n' : ℕ
left✝ : p ^ n' ≥ q ^ n'
right✝ : q ^ n' ≥ 0
this✝ : p ≥ 0
this : p ^ step n' ≥ q ^ step n'
⊢ p ^ step n' ≥ q ^ step n' ∧ q ^ step n' ≥ 0

State before:
ℕ ℤ : Type
inst✝¹² : Natural ℕ
inst✝¹¹ : Integer ℤ
ℚ : Type
inst✝¹⁰ : Core ℚ
inst✝⁹ : Addition ℚ
inst✝⁸ : Multiplication ℚ
inst✝⁷ : Negation ℚ
inst✝⁶ : Subtraction ℚ
inst✝⁵ : Reciprocation ℚ
inst✝⁴ : Division ℚ
inst✝³ : Sign ℚ
inst✝² : Order ℚ
inst✝¹ : Metric ℚ
inst✝ : Natural.Exponentiation ℕ fun x x_1 => x * x_1
p q : ℚ
n : ℕ
left✝¹ : p ≥ q
right✝¹ : q ≥ 0
n' : ℕ
left✝ : p ^ n' ≥ q ^ n'
right✝ : q ^ n' ≥ 0
this✝ : p ≥ 0
this : p ^ step n' ≥ q ^ step n'
⊢ p ^ step n' ≥ q ^ step n' ∧ q ^ step n' ≥ 0
Tactic:
have : q^(step n') ≥ 0 := calc
  _ ≃ q^(step n') := eqv_refl
  _ ≃ q^n' * q    := pow_step
  _ ≥ 0 * q       := le_substL_mul_nonneg ‹q ≥ 0› ‹q^n' ≥ 0›
  _ ≃ 0           := mul_absorbL
State after:
ℕ ℤ : Type
inst✝¹² : Natural ℕ
inst✝¹¹ : Integer ℤ
ℚ : Type
inst✝¹⁰ : Core ℚ
inst✝⁹ : Addition ℚ
inst✝⁸ : Multiplication ℚ
inst✝⁷ : Negation ℚ
inst✝⁶ : Subtraction ℚ
inst✝⁵ : Reciprocation ℚ
inst✝⁴ : Division ℚ
inst✝³ : Sign ℚ
inst✝² : Order ℚ
inst✝¹ : Metric ℚ
inst✝ : Natural.Exponentiation ℕ fun x x_1 => x * x_1
p q : ℚ
n : ℕ
left✝¹ : p ≥ q
right✝¹ : q ≥ 0
n' : ℕ
left✝ : p ^ n' ≥ q ^ n'
right✝ : q ^ n' ≥ 0
this✝¹ : p ≥ 0
this✝ : p ^ step n' ≥ q ^ step n'
this : q ^ step n' ≥ 0
⊢ p ^ step n' ≥ q ^ step n' ∧ q ^ step n' ≥ 0

State before:
ℕ ℤ : Type
inst✝¹² : Natural ℕ
inst✝¹¹ : Integer ℤ
ℚ : Type
inst✝¹⁰ : Core ℚ
inst✝⁹ : Addition ℚ
inst✝⁸ : Multiplication ℚ
inst✝⁷ : Negation ℚ
inst✝⁶ : Subtraction ℚ
inst✝⁵ : Reciprocation ℚ
inst✝⁴ : Division ℚ
inst✝³ : Sign ℚ
inst✝² : Order ℚ
inst✝¹ : Metric ℚ
inst✝ : Natural.Exponentiation ℕ fun x x_1 => x * x_1
p q : ℚ
n : ℕ
left✝¹ : p ≥ q
right✝¹ : q ≥ 0
n' : ℕ
left✝ : p ^ n' ≥ q ^ n'
right✝ : q ^ n' ≥ 0
this✝¹ : p ≥ 0
this✝ : p ^ step n' ≥ q ^ step n'
this : q ^ step n' ≥ 0
⊢ p ^ step n' ≥ q ^ step n' ∧ q ^ step n' ≥ 0
Tactic:
exact And.intro ‹p^(step n') ≥ q^(step n')› ‹q^(step n') ≥ 0›
State after:
no goals