[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedSemifield α
a✝ b c d e : α
m n : ℤ
a : α
ha : 0 < a
⊢ a * 0 < a * a⁻¹
[PROOFSTEP]
simp [ne_of_gt ha, zero_lt_one]
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedSemifield α
a b c d e : α
m n : ℤ
⊢ 0 ≤ a⁻¹ ↔ 0 ≤ a
[PROOFSTEP]
simp only [le_iff_eq_or_lt, inv_pos, zero_eq_inv]
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedSemifield α
a b c d e : α
m n : ℤ
⊢ a⁻¹ < 0 ↔ a < 0
[PROOFSTEP]
simp only [← not_le, inv_nonneg]
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedSemifield α
a b c d e : α
m n : ℤ
⊢ a⁻¹ ≤ 0 ↔ a ≤ 0
[PROOFSTEP]
simp only [← not_lt, inv_pos]
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedSemifield α
a b c d e : α
m n : ℤ
ha : 0 < a
hb : 0 < b
⊢ 0 < a / b
[PROOFSTEP]
rw [div_eq_mul_inv]
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedSemifield α
a b c d e : α
m n : ℤ
ha : 0 < a
hb : 0 < b
⊢ 0 < a * b⁻¹
[PROOFSTEP]
exact mul_pos ha (inv_pos.2 hb)
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedSemifield α
a b c d e : α
m n : ℤ
ha : 0 ≤ a
hb : 0 ≤ b
⊢ 0 ≤ a / b
[PROOFSTEP]
rw [div_eq_mul_inv]
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedSemifield α
a b c d e : α
m n : ℤ
ha : 0 ≤ a
hb : 0 ≤ b
⊢ 0 ≤ a * b⁻¹
[PROOFSTEP]
exact mul_nonneg ha (inv_nonneg.2 hb)
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedSemifield α
a b c d e : α
m n : ℤ
ha : a ≤ 0
hb : 0 ≤ b
⊢ a / b ≤ 0
[PROOFSTEP]
rw [div_eq_mul_inv]
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedSemifield α
a b c d e : α
m n : ℤ
ha : a ≤ 0
hb : 0 ≤ b
⊢ a * b⁻¹ ≤ 0
[PROOFSTEP]
exact mul_nonpos_of_nonpos_of_nonneg ha (inv_nonneg.2 hb)
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedSemifield α
a b c d e : α
m n : ℤ
ha : 0 ≤ a
hb : b ≤ 0
⊢ a / b ≤ 0
[PROOFSTEP]
rw [div_eq_mul_inv]
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedSemifield α
a b c d e : α
m n : ℤ
ha : 0 ≤ a
hb : b ≤ 0
⊢ a * b⁻¹ ≤ 0
[PROOFSTEP]
exact mul_nonpos_of_nonneg_of_nonpos ha (inv_nonpos.2 hb)
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedSemifield α
a b c d e : α
m n✝ : ℤ
ha : 0 ≤ a
n : ℕ
⊢ 0 ≤ a ^ ↑n
[PROOFSTEP]
rw [zpow_ofNat]
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedSemifield α
a b c d e : α
m n✝ : ℤ
ha : 0 ≤ a
n : ℕ
⊢ 0 ≤ a ^ n
[PROOFSTEP]
exact pow_nonneg ha _
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedSemifield α
a b c d e : α
m n✝ : ℤ
ha : 0 ≤ a
n : ℕ
⊢ 0 ≤ a ^ (-↑(n + 1))
[PROOFSTEP]
rw [zpow_neg, inv_nonneg, zpow_ofNat]
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedSemifield α
a b c d e : α
m n✝ : ℤ
ha : 0 ≤ a
n : ℕ
⊢ 0 ≤ a ^ (n + 1)
[PROOFSTEP]
exact pow_nonneg ha _
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedSemifield α
a b c d e : α
m n✝ : ℤ
ha : 0 < a
n : ℕ
⊢ 0 < a ^ ↑n
[PROOFSTEP]
rw [zpow_ofNat]
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedSemifield α
a b c d e : α
m n✝ : ℤ
ha : 0 < a
n : ℕ
⊢ 0 < a ^ n
[PROOFSTEP]
exact pow_pos ha _
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedSemifield α
a b c d e : α
m n✝ : ℤ
ha : 0 < a
n : ℕ
⊢ 0 < a ^ (-↑(n + 1))
[PROOFSTEP]
rw [zpow_neg, inv_pos, zpow_ofNat]
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedSemifield α
a b c d e : α
m n✝ : ℤ
ha : 0 < a
n : ℕ
⊢ 0 < a ^ (n + 1)
[PROOFSTEP]
exact pow_pos ha _
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedSemifield α
a b c d e : α
m n : ℤ
hc : 0 < c
⊢ a ≤ b / c ↔ c * a ≤ b
[PROOFSTEP]
rw [mul_comm, le_div_iff hc]
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedSemifield α
a b c d e : α
m n : ℤ
hb : 0 < b
h : a / b ≤ c
⊢ a = a / b * b
[PROOFSTEP]
rw [div_mul_cancel _ (ne_of_lt hb).symm]
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedSemifield α
a b c d e : α
m n : ℤ
hb : 0 < b
h : a ≤ c * b
⊢ c * b / b = c
[PROOFSTEP]
refine' (div_eq_iff (ne_of_gt hb)).mpr rfl
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedSemifield α
a b c d e : α
m n : ℤ
hb : 0 < b
⊢ a / b ≤ c ↔ a ≤ b * c
[PROOFSTEP]
rw [mul_comm, div_le_iff hb]
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedSemifield α
a b c d e : α
m n : ℤ
hc : 0 < c
⊢ a < b / c ↔ c * a < b
[PROOFSTEP]
rw [mul_comm, lt_div_iff hc]
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedSemifield α
a b c d e : α
m n : ℤ
hc : 0 < c
⊢ b / c < a ↔ b < c * a
[PROOFSTEP]
rw [mul_comm, div_lt_iff hc]
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedSemifield α
a b c d e : α
m n : ℤ
h : 0 < b
⊢ b⁻¹ * a ≤ c ↔ a ≤ b * c
[PROOFSTEP]
rw [inv_eq_one_div, mul_comm, ← div_eq_mul_one_div]
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedSemifield α
a b c d e : α
m n : ℤ
h : 0 < b
⊢ a / b ≤ c ↔ a ≤ b * c
[PROOFSTEP]
exact div_le_iff' h
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedSemifield α
a b c d e : α
m n : ℤ
h : 0 < b
⊢ b⁻¹ * a ≤ c ↔ a ≤ c * b
[PROOFSTEP]
rw [inv_mul_le_iff h, mul_comm]
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedSemifield α
a b c d e : α
m n : ℤ
h : 0 < b
⊢ a * b⁻¹ ≤ c ↔ a ≤ b * c
[PROOFSTEP]
rw [mul_comm, inv_mul_le_iff h]
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedSemifield α
a b c d e : α
m n : ℤ
h : 0 < b
⊢ a * b⁻¹ ≤ c ↔ a ≤ c * b
[PROOFSTEP]
rw [mul_comm, inv_mul_le_iff' h]
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedSemifield α
a✝ b c d e : α
m n : ℤ
a : α
h : a = 0
⊢ a / a ≤ 1
[PROOFSTEP]
simp [h]
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedSemifield α
a✝ b c d e : α
m n : ℤ
a : α
h : ¬a = 0
⊢ a / a ≤ 1
[PROOFSTEP]
simp [h]
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedSemifield α
a b c d e : α
m n : ℤ
h : 0 < b
⊢ b⁻¹ * a < c ↔ a < b * c
[PROOFSTEP]
rw [inv_eq_one_div, mul_comm, ← div_eq_mul_one_div]
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedSemifield α
a b c d e : α
m n : ℤ
h : 0 < b
⊢ a / b < c ↔ a < b * c
[PROOFSTEP]
exact div_lt_iff' h
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedSemifield α
a b c d e : α
m n : ℤ
h : 0 < b
⊢ b⁻¹ * a < c ↔ a < c * b
[PROOFSTEP]
rw [inv_mul_lt_iff h, mul_comm]
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedSemifield α
a b c d e : α
m n : ℤ
h : 0 < b
⊢ a * b⁻¹ < c ↔ a < b * c
[PROOFSTEP]
rw [mul_comm, inv_mul_lt_iff h]
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedSemifield α
a b c d e : α
m n : ℤ
h : 0 < b
⊢ a * b⁻¹ < c ↔ a < c * b
[PROOFSTEP]
rw [mul_comm, inv_mul_lt_iff' h]
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedSemifield α
a b c d e : α
m n : ℤ
ha : 0 < a
⊢ a⁻¹ ≤ b ↔ 1 ≤ b * a
[PROOFSTEP]
rw [inv_eq_one_div]
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedSemifield α
a b c d e : α
m n : ℤ
ha : 0 < a
⊢ 1 / a ≤ b ↔ 1 ≤ b * a
[PROOFSTEP]
exact div_le_iff ha
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedSemifield α
a b c d e : α
m n : ℤ
ha : 0 < a
⊢ a⁻¹ ≤ b ↔ 1 ≤ a * b
[PROOFSTEP]
rw [inv_eq_one_div]
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedSemifield α
a b c d e : α
m n : ℤ
ha : 0 < a
⊢ 1 / a ≤ b ↔ 1 ≤ a * b
[PROOFSTEP]
exact div_le_iff' ha
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedSemifield α
a b c d e : α
m n : ℤ
ha : 0 < a
⊢ a⁻¹ < b ↔ 1 < b * a
[PROOFSTEP]
rw [inv_eq_one_div]
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedSemifield α
a b c d e : α
m n : ℤ
ha : 0 < a
⊢ 1 / a < b ↔ 1 < b * a
[PROOFSTEP]
exact div_lt_iff ha
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedSemifield α
a b c d e : α
m n : ℤ
ha : 0 < a
⊢ a⁻¹ < b ↔ 1 < a * b
[PROOFSTEP]
rw [inv_eq_one_div]
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedSemifield α
a b c d e : α
m n : ℤ
ha : 0 < a
⊢ 1 / a < b ↔ 1 < a * b
[PROOFSTEP]
exact div_lt_iff' ha
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedSemifield α
a b c d e : α
m n : ℤ
hb : 0 ≤ b
hc : 0 ≤ c
h : a ≤ c * b
⊢ a / b ≤ c
[PROOFSTEP]
rcases eq_or_lt_of_le hb with (rfl | hb')
[GOAL]
case inl
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedSemifield α
a c d e : α
m n : ℤ
hc : 0 ≤ c
hb : 0 ≤ 0
h : a ≤ c * 0
⊢ a / 0 ≤ c
case inr
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedSemifield α
a b c d e : α
m n : ℤ
hb : 0 ≤ b
hc : 0 ≤ c
h : a ≤ c * b
hb' : 0 < b
⊢ a / b ≤ c
[PROOFSTEP]
simp [hc]
[GOAL]
case inr
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedSemifield α
a b c d e : α
m n : ℤ
hb : 0 ≤ b
hc : 0 ≤ c
h : a ≤ c * b
hb' : 0 < b
⊢ a / b ≤ c
[PROOFSTEP]
rwa [div_le_iff hb']
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedSemifield α
a b c d e : α
m n : ℤ
hb : 0 ≤ b
hc : 0 ≤ c
h : a ≤ b / c
⊢ a * c ≤ b
[PROOFSTEP]
obtain rfl | hc := hc.eq_or_lt
[GOAL]
case inl
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedSemifield α
a b d e : α
m n : ℤ
hb : 0 ≤ b
hc : 0 ≤ 0
h : a ≤ b / 0
⊢ a * 0 ≤ b
[PROOFSTEP]
simpa using hb
[GOAL]
case inr
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedSemifield α
a b c d e : α
m n : ℤ
hb : 0 ≤ b
hc✝ : 0 ≤ c
h : a ≤ b / c
hc : 0 < c
⊢ a * c ≤ b
[PROOFSTEP]
rwa [le_div_iff hc] at h 
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedSemifield α
a b c d e : α
m n : ℤ
h : a ≤ b
hb : 0 ≤ b
⊢ a ≤ 1 * b
[PROOFSTEP]
rwa [one_mul]
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedSemifield α
a b c d e : α
m n : ℤ
ha : 0 < a
h : a ≤ b
⊢ b⁻¹ ≤ a⁻¹
[PROOFSTEP]
rwa [← one_div a, le_div_iff' ha, ← div_eq_mul_inv, div_le_iff (ha.trans_le h), one_mul]
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedSemifield α
a b c d e : α
m n : ℤ
ha : 0 < a
hb : 0 < b
⊢ a⁻¹ ≤ b⁻¹ ↔ b ≤ a
[PROOFSTEP]
rw [← one_div, div_le_iff ha, ← div_eq_inv_mul, le_div_iff hb, one_mul]
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedSemifield α
a b c d e : α
m n : ℤ
ha : 0 < a
hb : 0 < b
⊢ a⁻¹ ≤ b ↔ b⁻¹ ≤ a
[PROOFSTEP]
rw [← inv_le_inv hb (inv_pos.2 ha), inv_inv]
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedSemifield α
a b c d e : α
m n : ℤ
ha : 0 < a
hb : 0 < b
⊢ a ≤ b⁻¹ ↔ b ≤ a⁻¹
[PROOFSTEP]
rw [← inv_le_inv (inv_pos.2 hb) ha, inv_inv]
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedSemifield α
a b c d e : α
m n : ℤ
ha : 1 < a
⊢ a⁻¹ < 1
[PROOFSTEP]
rwa [inv_lt (zero_lt_one.trans ha) zero_lt_one, inv_one]
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedSemifield α
a b c d e : α
m n : ℤ
h₁ : 0 < a
h₂ : a < 1
⊢ 1 < a⁻¹
[PROOFSTEP]
rwa [lt_inv (@zero_lt_one α _ _ _ _ _) h₁, inv_one]
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedSemifield α
a b c d e : α
m n : ℤ
ha : 1 ≤ a
⊢ a⁻¹ ≤ 1
[PROOFSTEP]
rwa [inv_le (zero_lt_one.trans_le ha) zero_lt_one, inv_one]
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedSemifield α
a b c d e : α
m n : ℤ
h₁ : 0 < a
h₂ : a ≤ 1
⊢ 1 ≤ a⁻¹
[PROOFSTEP]
rwa [le_inv (@zero_lt_one α _ _ _ _ _) h₁, inv_one]
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedSemifield α
a b c d e : α
m n : ℤ
⊢ a⁻¹ < 1 ↔ a ≤ 0 ∨ 1 < a
[PROOFSTEP]
cases' le_or_lt a 0 with ha ha
[GOAL]
case inl
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedSemifield α
a b c d e : α
m n : ℤ
ha : a ≤ 0
⊢ a⁻¹ < 1 ↔ a ≤ 0 ∨ 1 < a
[PROOFSTEP]
simp [ha, (inv_nonpos.2 ha).trans_lt zero_lt_one]
[GOAL]
case inr
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedSemifield α
a b c d e : α
m n : ℤ
ha : 0 < a
⊢ a⁻¹ < 1 ↔ a ≤ 0 ∨ 1 < a
[PROOFSTEP]
simp only [ha.not_le, false_or_iff, inv_lt_one_iff_of_pos ha]
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedSemifield α
a b c d e : α
m n : ℤ
⊢ a⁻¹ ≤ 1 ↔ a ≤ 0 ∨ 1 ≤ a
[PROOFSTEP]
rcases em (a = 1) with (rfl | ha)
[GOAL]
case inl
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedSemifield α
b c d e : α
m n : ℤ
⊢ 1⁻¹ ≤ 1 ↔ 1 ≤ 0 ∨ 1 ≤ 1
[PROOFSTEP]
simp [le_rfl]
[GOAL]
case inr
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedSemifield α
a b c d e : α
m n : ℤ
ha : ¬a = 1
⊢ a⁻¹ ≤ 1 ↔ a ≤ 0 ∨ 1 ≤ a
[PROOFSTEP]
simp only [Ne.le_iff_lt (Ne.symm ha), Ne.le_iff_lt (mt inv_eq_one.1 ha), inv_lt_one_iff]
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedSemifield α
a b c d e : α
m n : ℤ
hc : 0 ≤ c
h : a ≤ b
⊢ a / c ≤ b / c
[PROOFSTEP]
rw [div_eq_mul_one_div a c, div_eq_mul_one_div b c]
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedSemifield α
a b c d e : α
m n : ℤ
hc : 0 ≤ c
h : a ≤ b
⊢ a * (1 / c) ≤ b * (1 / c)
[PROOFSTEP]
exact mul_le_mul_of_nonneg_right h (one_div_nonneg.2 hc)
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedSemifield α
a b c d e : α
m n : ℤ
ha : 0 ≤ a
hc : 0 < c
h : c ≤ b
⊢ a / b ≤ a / c
[PROOFSTEP]
rw [div_eq_mul_inv, div_eq_mul_inv]
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedSemifield α
a b c d e : α
m n : ℤ
ha : 0 ≤ a
hc : 0 < c
h : c ≤ b
⊢ a * b⁻¹ ≤ a * c⁻¹
[PROOFSTEP]
exact mul_le_mul_of_nonneg_left ((inv_le_inv (hc.trans_le h) hc).mpr h) ha
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedSemifield α
a b c d e : α
m n : ℤ
hc : 0 < c
h : a < b
⊢ a / c < b / c
[PROOFSTEP]
rw [div_eq_mul_one_div a c, div_eq_mul_one_div b c]
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedSemifield α
a b c d e : α
m n : ℤ
hc : 0 < c
h : a < b
⊢ a * (1 / c) < b * (1 / c)
[PROOFSTEP]
exact mul_lt_mul_of_pos_right h (one_div_pos.2 hc)
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedSemifield α
a b c d e : α
m n : ℤ
ha : 0 < a
hb : 0 < b
hc : 0 < c
⊢ a / b < a / c ↔ c < b
[PROOFSTEP]
simp only [div_eq_mul_inv, mul_lt_mul_left ha, inv_lt_inv hb hc]
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedSemifield α
a b c d e : α
m n : ℤ
b0 : 0 < b
d0 : 0 < d
⊢ a / b < c / d ↔ a * d < c * b
[PROOFSTEP]
rw [lt_div_iff d0, div_mul_eq_mul_div, div_lt_iff b0]
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedSemifield α
a b c d e : α
m n : ℤ
b0 : 0 < b
d0 : 0 < d
⊢ a / b ≤ c / d ↔ a * d ≤ c * b
[PROOFSTEP]
rw [le_div_iff d0, div_mul_eq_mul_div, div_le_iff b0]
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedSemifield α
a b c d e : α
m n : ℤ
hc : 0 ≤ c
hac : a ≤ c
hd : 0 < d
hbd : d ≤ b
⊢ a / b ≤ c / d
[PROOFSTEP]
rw [div_le_div_iff (hd.trans_le hbd) hd]
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedSemifield α
a b c d e : α
m n : ℤ
hc : 0 ≤ c
hac : a ≤ c
hd : 0 < d
hbd : d ≤ b
⊢ a * d ≤ c * b
[PROOFSTEP]
exact mul_le_mul hac hbd hd.le hc
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedSemifield α
a b c d e : α
m n : ℤ
ha : 0 ≤ a
hb : 1 ≤ b
⊢ a / b ≤ a
[PROOFSTEP]
simpa only [div_one] using div_le_div_of_le_left ha zero_lt_one hb
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedSemifield α
a b c d e : α
m n : ℤ
ha : 0 < a
hb : 1 < b
⊢ a / b < a
[PROOFSTEP]
simpa only [div_one] using div_lt_div_of_lt_left ha zero_lt_one hb
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedSemifield α
a b c d e : α
m n : ℤ
ha : 0 ≤ a
hb₀ : 0 < b
hb₁ : b ≤ 1
⊢ a ≤ a / b
[PROOFSTEP]
simpa only [div_one] using div_le_div_of_le_left ha hb₀ hb₁
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedSemifield α
a b c d e : α
m n : ℤ
hb : 0 < b
⊢ 1 ≤ a / b ↔ b ≤ a
[PROOFSTEP]
rw [le_div_iff hb, one_mul]
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedSemifield α
a b c d e : α
m n : ℤ
hb : 0 < b
⊢ a / b ≤ 1 ↔ a ≤ b
[PROOFSTEP]
rw [div_le_iff hb, one_mul]
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedSemifield α
a b c d e : α
m n : ℤ
hb : 0 < b
⊢ 1 < a / b ↔ b < a
[PROOFSTEP]
rw [lt_div_iff hb, one_mul]
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedSemifield α
a b c d e : α
m n : ℤ
hb : 0 < b
⊢ a / b < 1 ↔ a < b
[PROOFSTEP]
rw [div_lt_iff hb, one_mul]
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedSemifield α
a b c d e : α
m n : ℤ
ha : 0 < a
hb : 0 < b
⊢ 1 / a ≤ b ↔ 1 / b ≤ a
[PROOFSTEP]
simpa using inv_le ha hb
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedSemifield α
a b c d e : α
m n : ℤ
ha : 0 < a
hb : 0 < b
⊢ 1 / a < b ↔ 1 / b < a
[PROOFSTEP]
simpa using inv_lt ha hb
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedSemifield α
a b c d e : α
m n : ℤ
ha : 0 < a
hb : 0 < b
⊢ a ≤ 1 / b ↔ b ≤ 1 / a
[PROOFSTEP]
simpa using le_inv ha hb
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedSemifield α
a b c d e : α
m n : ℤ
ha : 0 < a
hb : 0 < b
⊢ a < 1 / b ↔ b < 1 / a
[PROOFSTEP]
simpa using lt_inv ha hb
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedSemifield α
a b c d e : α
m n : ℤ
ha : 0 < a
h : a ≤ b
⊢ 1 / b ≤ 1 / a
[PROOFSTEP]
simpa using inv_le_inv_of_le ha h
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedSemifield α
a b c d e : α
m n : ℤ
ha : 0 < a
h : a < b
⊢ 1 / b < 1 / a
[PROOFSTEP]
rwa [lt_div_iff' ha, ← div_eq_mul_one_div, div_lt_one (ha.trans h)]
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedSemifield α
a b c d e : α
m n : ℤ
h1 : 0 < a
h2 : a < 1
⊢ 1 < 1 / a
[PROOFSTEP]
rwa [lt_one_div (@zero_lt_one α _ _ _ _ _) h1, one_div_one]
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedSemifield α
a b c d e : α
m n : ℤ
h1 : 0 < a
h2 : a ≤ 1
⊢ 1 ≤ 1 / a
[PROOFSTEP]
rwa [le_one_div (@zero_lt_one α _ _ _ _ _) h1, one_div_one]
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedSemifield α
a✝ b c d e : α
m n : ℤ
a : α
⊢ a / 2 + a / 2 = a
[PROOFSTEP]
rw [div_add_div_same, ← two_mul, mul_div_cancel_left a two_ne_zero]
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedSemifield α
a✝ b c d e : α
m n : ℤ
a : α
⊢ (a + a) / 2 = a
[PROOFSTEP]
rw [← mul_two, mul_div_cancel a two_ne_zero]
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedSemifield α
a b c d e : α
m n : ℤ
⊢ a / 2 ≤ a ↔ 0 ≤ a
[PROOFSTEP]
rw [div_le_iff (zero_lt_two' α), mul_two, le_add_iff_nonneg_left]
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedSemifield α
a b c d e : α
m n : ℤ
⊢ a / 2 < a ↔ 0 < a
[PROOFSTEP]
rw [div_lt_iff (zero_lt_two' α), mul_two, lt_add_iff_pos_left]
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedSemifield α
a b c d e : α
m n : ℤ
⊢ a < (a + b) / 2 ↔ a < b
[PROOFSTEP]
simp [lt_div_iff, mul_two]
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedSemifield α
a b c d e : α
m n : ℤ
⊢ (a + b) / 2 < b ↔ a < b
[PROOFSTEP]
simp [div_lt_iff, mul_two]
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedSemifield α
a✝ b c d e : α
m n : ℤ
a : α
⊢ a / 3 + a / 3 + a / 3 = a
[PROOFSTEP]
rw [div_add_div_same, div_add_div_same, ← two_mul, ← add_one_mul 2 a, two_add_one_eq_three,
  mul_div_cancel_left a three_ne_zero]
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedSemifield α
a b c d e : α
m n : ℤ
h : a * (b / c) ≤ d
hc : 0 < c
⊢ b * a ≤ d * c
[PROOFSTEP]
rw [← mul_div_assoc] at h 
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedSemifield α
a b c d e : α
m n : ℤ
h : a * b / c ≤ d
hc : 0 < c
⊢ b * a ≤ d * c
[PROOFSTEP]
rwa [mul_comm b, ← div_le_iff hc]
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedSemifield α
a b c d e : α
m n : ℤ
h : a / b ≤ c / d
he : 0 ≤ e
⊢ a / (b * e) ≤ c / (d * e)
[PROOFSTEP]
rw [div_mul_eq_div_mul_one_div, div_mul_eq_div_mul_one_div]
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedSemifield α
a b c d e : α
m n : ℤ
h : a / b ≤ c / d
he : 0 ≤ e
⊢ a / b * (1 / e) ≤ c / d * (1 / e)
[PROOFSTEP]
exact mul_le_mul_of_nonneg_right h (one_div_nonneg.2 he)
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedSemifield α
a✝ b✝ c d e : α
m n : ℤ
a : α
h : 0 < a
b : α
⊢ ∃ c, 0 < c ∧ b * c < a
[PROOFSTEP]
have : 0 < a / max (b + 1) 1 := div_pos h (lt_max_iff.2 (Or.inr zero_lt_one))
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedSemifield α
a✝ b✝ c d e : α
m n : ℤ
a : α
h : 0 < a
b : α
this : 0 < a / max (b + 1) 1
⊢ ∃ c, 0 < c ∧ b * c < a
[PROOFSTEP]
refine' ⟨a / max (b + 1) 1, this, _⟩
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedSemifield α
a✝ b✝ c d e : α
m n : ℤ
a : α
h : 0 < a
b : α
this : 0 < a / max (b + 1) 1
⊢ b * (a / max (b + 1) 1) < a
[PROOFSTEP]
rw [← lt_div_iff this, div_div_cancel' h.ne']
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedSemifield α
a✝ b✝ c d e : α
m n : ℤ
a : α
h : 0 < a
b : α
this : 0 < a / max (b + 1) 1
⊢ b < max (b + 1) 1
[PROOFSTEP]
exact lt_max_iff.2 (Or.inl <| lt_add_one _)
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedSemifield α
a✝ b✝ c✝ d e : α
m n : ℤ
a : α
h : 0 < a
b c : α
hc₀ : 0 < c
hc : b * c < a
⊢ b < c⁻¹ * a
[PROOFSTEP]
rwa [← div_eq_inv_mul, lt_div_iff hc₀]
[GOAL]
ι : Type u_1
α : Type u_2
β✝ : Type u_3
inst✝¹ : LinearOrderedSemifield α
a b c✝ d e : α
m n : ℤ
β : Type u_4
inst✝ : Preorder β
f : β → α
hf : Monotone f
c : α
hc : 0 ≤ c
⊢ Monotone fun x => f x / c
[PROOFSTEP]
haveI := @LinearOrder.decidableLE α _
[GOAL]
ι : Type u_1
α : Type u_2
β✝ : Type u_3
inst✝¹ : LinearOrderedSemifield α
a b c✝ d e : α
m n : ℤ
β : Type u_4
inst✝ : Preorder β
f : β → α
hf : Monotone f
c : α
hc : 0 ≤ c
this : DecidableRel fun x x_1 => x ≤ x_1
⊢ Monotone fun x => f x / c
[PROOFSTEP]
simpa only [div_eq_mul_inv] using (monotone_mul_right_of_nonneg (inv_nonneg.2 hc)).comp hf
[GOAL]
ι : Type u_1
α : Type u_2
β✝ : Type u_3
inst✝¹ : LinearOrderedSemifield α
a b c✝ d e : α
m n : ℤ
β : Type u_4
inst✝ : Preorder β
f : β → α
hf : StrictMono f
c : α
hc : 0 < c
⊢ StrictMono fun x => f x / c
[PROOFSTEP]
simpa only [div_eq_mul_inv] using hf.mul_const (inv_pos.2 hc)
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedSemifield α
a b c d e : α
m✝ n✝ : ℤ
a1 : 1 ≤ a
m n : ℕ
mn : m ≤ n
⊢ 1 / a ^ n ≤ 1 / a ^ m
[PROOFSTEP]
refine' (one_div_le_one_div _ _).mpr (pow_le_pow a1 mn)
[GOAL]
case refine'_1
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedSemifield α
a b c d e : α
m✝ n✝ : ℤ
a1 : 1 ≤ a
m n : ℕ
mn : m ≤ n
⊢ 0 < a ^ n
[PROOFSTEP]
exact pow_pos (zero_lt_one.trans_le a1) _
[GOAL]
case refine'_2
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedSemifield α
a b c d e : α
m✝ n✝ : ℤ
a1 : 1 ≤ a
m n : ℕ
mn : m ≤ n
⊢ 0 < a ^ m
[PROOFSTEP]
exact pow_pos (zero_lt_one.trans_le a1) _
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedSemifield α
a b c d e : α
m✝ n✝ : ℤ
a1 : 1 < a
m n : ℕ
mn : m < n
⊢ 1 / a ^ n < 1 / a ^ m
[PROOFSTEP]
refine' (one_div_lt_one_div _ _).mpr (pow_lt_pow a1 mn)
[GOAL]
case refine'_1
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedSemifield α
a b c d e : α
m✝ n✝ : ℤ
a1 : 1 < a
m n : ℕ
mn : m < n
⊢ 0 < a ^ n
[PROOFSTEP]
exact pow_pos (zero_lt_one.trans a1) _
[GOAL]
case refine'_2
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedSemifield α
a b c d e : α
m✝ n✝ : ℤ
a1 : 1 < a
m n : ℕ
mn : m < n
⊢ 0 < a ^ m
[PROOFSTEP]
exact pow_pos (zero_lt_one.trans a1) _
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedSemifield α
a b c d e : α
m✝ n✝ : ℤ
a1 : 1 ≤ a
m n : ℕ
mn : m ≤ n
⊢ (a ^ n)⁻¹ ≤ (a ^ m)⁻¹
[PROOFSTEP]
convert one_div_pow_le_one_div_pow_of_le a1 mn using 1
[GOAL]
case h.e'_3
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedSemifield α
a b c d e : α
m✝ n✝ : ℤ
a1 : 1 ≤ a
m n : ℕ
mn : m ≤ n
⊢ (a ^ n)⁻¹ = 1 / a ^ n
[PROOFSTEP]
simp
[GOAL]
case h.e'_4
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedSemifield α
a b c d e : α
m✝ n✝ : ℤ
a1 : 1 ≤ a
m n : ℕ
mn : m ≤ n
⊢ (a ^ m)⁻¹ = 1 / a ^ m
[PROOFSTEP]
simp
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedSemifield α
a b c d e : α
m✝ n✝ : ℤ
a1 : 1 < a
m n : ℕ
mn : m < n
⊢ (a ^ n)⁻¹ < (a ^ m)⁻¹
[PROOFSTEP]
convert one_div_pow_lt_one_div_pow_of_lt a1 mn using 1
[GOAL]
case h.e'_3
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedSemifield α
a b c d e : α
m✝ n✝ : ℤ
a1 : 1 < a
m n : ℕ
mn : m < n
⊢ (a ^ n)⁻¹ = 1 / a ^ n
[PROOFSTEP]
simp
[GOAL]
case h.e'_4
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedSemifield α
a b c d e : α
m✝ n✝ : ℤ
a1 : 1 < a
m n : ℕ
mn : m < n
⊢ (a ^ m)⁻¹ = 1 / a ^ m
[PROOFSTEP]
simp
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedSemifield α
a b c d e : α
m n : ℤ
s : Set α
ha : 0 ≤ a
hs : IsGLB s b
⊢ IsGLB ((fun b => a * b) '' s) (a * b)
[PROOFSTEP]
rcases lt_or_eq_of_le ha with (ha | rfl)
[GOAL]
case inl
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedSemifield α
a b c d e : α
m n : ℤ
s : Set α
ha✝ : 0 ≤ a
hs : IsGLB s b
ha : 0 < a
⊢ IsGLB ((fun b => a * b) '' s) (a * b)
[PROOFSTEP]
exact (OrderIso.mulLeft₀ _ ha).isGLB_image'.2 hs
[GOAL]
case inr
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedSemifield α
b c d e : α
m n : ℤ
s : Set α
hs : IsGLB s b
ha : 0 ≤ 0
⊢ IsGLB ((fun b => 0 * b) '' s) (0 * b)
[PROOFSTEP]
simp_rw [zero_mul]
[GOAL]
case inr
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedSemifield α
b c d e : α
m n : ℤ
s : Set α
hs : IsGLB s b
ha : 0 ≤ 0
⊢ IsGLB ((fun a => 0) '' s) 0
[PROOFSTEP]
rw [hs.nonempty.image_const]
[GOAL]
case inr
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedSemifield α
b c d e : α
m n : ℤ
s : Set α
hs : IsGLB s b
ha : 0 ≤ 0
⊢ IsGLB {0} 0
[PROOFSTEP]
exact isGLB_singleton
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedSemifield α
a b c d e : α
m n : ℤ
s : Set α
ha : 0 ≤ a
hs : IsGLB s b
⊢ IsGLB ((fun b => b * a) '' s) (b * a)
[PROOFSTEP]
simpa [mul_comm] using hs.mul_left ha
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedField α
a b c d : α
n : ℤ
⊢ 0 < a / b ↔ 0 < a ∧ 0 < b ∨ a < 0 ∧ b < 0
[PROOFSTEP]
simp only [division_def, mul_pos_iff, inv_pos, inv_lt_zero]
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedField α
a b c d : α
n : ℤ
⊢ a / b < 0 ↔ 0 < a ∧ b < 0 ∨ a < 0 ∧ 0 < b
[PROOFSTEP]
simp [division_def, mul_neg_iff]
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedField α
a b c d : α
n : ℤ
⊢ 0 ≤ a / b ↔ 0 ≤ a ∧ 0 ≤ b ∨ a ≤ 0 ∧ b ≤ 0
[PROOFSTEP]
simp [division_def, mul_nonneg_iff]
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedField α
a b c d : α
n : ℤ
⊢ a / b ≤ 0 ↔ 0 ≤ a ∧ b ≤ 0 ∨ a ≤ 0 ∧ 0 ≤ b
[PROOFSTEP]
simp [division_def, mul_nonpos_iff]
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedField α
a b c d : α
n : ℤ
hc : c < 0
⊢ b / c ≤ a ↔ c * a ≤ b
[PROOFSTEP]
rw [mul_comm, div_le_iff_of_neg hc]
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedField α
a b c d : α
n : ℤ
hc : c < 0
⊢ a ≤ b / c ↔ b ≤ a * c
[PROOFSTEP]
rw [← neg_neg c, mul_neg, div_neg, le_neg, div_le_iff (neg_pos.2 hc), neg_mul]
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedField α
a b c d : α
n : ℤ
hc : c < 0
⊢ a ≤ b / c ↔ b ≤ c * a
[PROOFSTEP]
rw [mul_comm, le_div_iff_of_neg hc]
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedField α
a b c d : α
n : ℤ
hc : c < 0
⊢ b / c < a ↔ c * a < b
[PROOFSTEP]
rw [mul_comm, div_lt_iff_of_neg hc]
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedField α
a b c d : α
n : ℤ
hc : c < 0
⊢ a < b / c ↔ b < c * a
[PROOFSTEP]
rw [mul_comm, lt_div_iff_of_neg hc]
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedField α
a b c d : α
n : ℤ
h : b ≤ a
hb : b ≤ 0
⊢ a / b ≤ 1
[PROOFSTEP]
simpa only [neg_div_neg_eq] using div_le_one_of_le (neg_le_neg h) (neg_nonneg_of_nonpos hb)
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedField α
a b c d : α
n : ℤ
ha : a < 0
hb : b < 0
⊢ a⁻¹ ≤ b⁻¹ ↔ b ≤ a
[PROOFSTEP]
rw [← one_div, div_le_iff_of_neg ha, ← div_eq_inv_mul, div_le_iff_of_neg hb, one_mul]
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedField α
a b c d : α
n : ℤ
ha : a < 0
hb : b < 0
⊢ a⁻¹ ≤ b ↔ b⁻¹ ≤ a
[PROOFSTEP]
rw [← inv_le_inv_of_neg hb (inv_lt_zero.2 ha), inv_inv]
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedField α
a b c d : α
n : ℤ
ha : a < 0
hb : b < 0
⊢ a ≤ b⁻¹ ↔ b ≤ a⁻¹
[PROOFSTEP]
rw [← inv_le_inv_of_neg (inv_lt_zero.2 hb) ha, inv_inv]
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedField α
a b c d : α
n : ℤ
hc : c ≤ 0
h : b ≤ a
⊢ a / c ≤ b / c
[PROOFSTEP]
rw [div_eq_mul_one_div a c, div_eq_mul_one_div b c]
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedField α
a b c d : α
n : ℤ
hc : c ≤ 0
h : b ≤ a
⊢ a * (1 / c) ≤ b * (1 / c)
[PROOFSTEP]
exact mul_le_mul_of_nonpos_right h (one_div_nonpos.2 hc)
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedField α
a b c d : α
n : ℤ
hc : c < 0
h : b < a
⊢ a / c < b / c
[PROOFSTEP]
rw [div_eq_mul_one_div a c, div_eq_mul_one_div b c]
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedField α
a b c d : α
n : ℤ
hc : c < 0
h : b < a
⊢ a * (1 / c) < b * (1 / c)
[PROOFSTEP]
exact mul_lt_mul_of_neg_right h (one_div_neg.2 hc)
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedField α
a b c d : α
n : ℤ
hb : b < 0
⊢ 1 ≤ a / b ↔ a ≤ b
[PROOFSTEP]
rw [le_div_iff_of_neg hb, one_mul]
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedField α
a b c d : α
n : ℤ
hb : b < 0
⊢ a / b ≤ 1 ↔ b ≤ a
[PROOFSTEP]
rw [div_le_iff_of_neg hb, one_mul]
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedField α
a b c d : α
n : ℤ
hb : b < 0
⊢ 1 < a / b ↔ a < b
[PROOFSTEP]
rw [lt_div_iff_of_neg hb, one_mul]
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedField α
a b c d : α
n : ℤ
hb : b < 0
⊢ a / b < 1 ↔ b < a
[PROOFSTEP]
rw [div_lt_iff_of_neg hb, one_mul]
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedField α
a b c d : α
n : ℤ
ha : a < 0
hb : b < 0
⊢ 1 / a ≤ b ↔ 1 / b ≤ a
[PROOFSTEP]
simpa using inv_le_of_neg ha hb
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedField α
a b c d : α
n : ℤ
ha : a < 0
hb : b < 0
⊢ 1 / a < b ↔ 1 / b < a
[PROOFSTEP]
simpa using inv_lt_of_neg ha hb
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedField α
a b c d : α
n : ℤ
ha : a < 0
hb : b < 0
⊢ a ≤ 1 / b ↔ b ≤ 1 / a
[PROOFSTEP]
simpa using le_inv_of_neg ha hb
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedField α
a b c d : α
n : ℤ
ha : a < 0
hb : b < 0
⊢ a < 1 / b ↔ b < 1 / a
[PROOFSTEP]
simpa using lt_inv_of_neg ha hb
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedField α
a b c d : α
n : ℤ
⊢ 1 < a / b ↔ 0 < b ∧ b < a ∨ b < 0 ∧ a < b
[PROOFSTEP]
rcases lt_trichotomy b 0 with (hb | rfl | hb)
[GOAL]
case inl
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedField α
a b c d : α
n : ℤ
hb : b < 0
⊢ 1 < a / b ↔ 0 < b ∧ b < a ∨ b < 0 ∧ a < b
[PROOFSTEP]
simp [hb, hb.not_lt, one_lt_div_of_neg]
[GOAL]
case inr.inl
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedField α
a c d : α
n : ℤ
⊢ 1 < a / 0 ↔ 0 < 0 ∧ 0 < a ∨ 0 < 0 ∧ a < 0
[PROOFSTEP]
simp [lt_irrefl, zero_le_one]
[GOAL]
case inr.inr
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedField α
a b c d : α
n : ℤ
hb : 0 < b
⊢ 1 < a / b ↔ 0 < b ∧ b < a ∨ b < 0 ∧ a < b
[PROOFSTEP]
simp [hb, hb.not_lt, one_lt_div]
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedField α
a b c d : α
n : ℤ
⊢ 1 ≤ a / b ↔ 0 < b ∧ b ≤ a ∨ b < 0 ∧ a ≤ b
[PROOFSTEP]
rcases lt_trichotomy b 0 with (hb | rfl | hb)
[GOAL]
case inl
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedField α
a b c d : α
n : ℤ
hb : b < 0
⊢ 1 ≤ a / b ↔ 0 < b ∧ b ≤ a ∨ b < 0 ∧ a ≤ b
[PROOFSTEP]
simp [hb, hb.not_lt, one_le_div_of_neg]
[GOAL]
case inr.inl
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedField α
a c d : α
n : ℤ
⊢ 1 ≤ a / 0 ↔ 0 < 0 ∧ 0 ≤ a ∨ 0 < 0 ∧ a ≤ 0
[PROOFSTEP]
simp [lt_irrefl, zero_lt_one.not_le, zero_lt_one]
[GOAL]
case inr.inr
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedField α
a b c d : α
n : ℤ
hb : 0 < b
⊢ 1 ≤ a / b ↔ 0 < b ∧ b ≤ a ∨ b < 0 ∧ a ≤ b
[PROOFSTEP]
simp [hb, hb.not_lt, one_le_div]
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedField α
a b c d : α
n : ℤ
⊢ a / b < 1 ↔ 0 < b ∧ a < b ∨ b = 0 ∨ b < 0 ∧ b < a
[PROOFSTEP]
rcases lt_trichotomy b 0 with (hb | rfl | hb)
[GOAL]
case inl
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedField α
a b c d : α
n : ℤ
hb : b < 0
⊢ a / b < 1 ↔ 0 < b ∧ a < b ∨ b = 0 ∨ b < 0 ∧ b < a
[PROOFSTEP]
simp [hb, hb.not_lt, hb.ne, div_lt_one_of_neg]
[GOAL]
case inr.inl
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedField α
a c d : α
n : ℤ
⊢ a / 0 < 1 ↔ 0 < 0 ∧ a < 0 ∨ 0 = 0 ∨ 0 < 0 ∧ 0 < a
[PROOFSTEP]
simp [zero_lt_one]
[GOAL]
case inr.inr
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedField α
a b c d : α
n : ℤ
hb : 0 < b
⊢ a / b < 1 ↔ 0 < b ∧ a < b ∨ b = 0 ∨ b < 0 ∧ b < a
[PROOFSTEP]
simp [hb, hb.not_lt, div_lt_one, hb.ne.symm]
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedField α
a b c d : α
n : ℤ
⊢ a / b ≤ 1 ↔ 0 < b ∧ a ≤ b ∨ b = 0 ∨ b < 0 ∧ b ≤ a
[PROOFSTEP]
rcases lt_trichotomy b 0 with (hb | rfl | hb)
[GOAL]
case inl
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedField α
a b c d : α
n : ℤ
hb : b < 0
⊢ a / b ≤ 1 ↔ 0 < b ∧ a ≤ b ∨ b = 0 ∨ b < 0 ∧ b ≤ a
[PROOFSTEP]
simp [hb, hb.not_lt, hb.ne, div_le_one_of_neg]
[GOAL]
case inr.inl
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedField α
a c d : α
n : ℤ
⊢ a / 0 ≤ 1 ↔ 0 < 0 ∧ a ≤ 0 ∨ 0 = 0 ∨ 0 < 0 ∧ 0 ≤ a
[PROOFSTEP]
simp [zero_le_one]
[GOAL]
case inr.inr
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedField α
a b c d : α
n : ℤ
hb : 0 < b
⊢ a / b ≤ 1 ↔ 0 < b ∧ a ≤ b ∨ b = 0 ∨ b < 0 ∧ b ≤ a
[PROOFSTEP]
simp [hb, hb.not_lt, div_le_one, hb.ne.symm]
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedField α
a b c d : α
n : ℤ
hb : b < 0
h : a ≤ b
⊢ 1 / b ≤ 1 / a
[PROOFSTEP]
rwa [div_le_iff_of_neg' hb, ← div_eq_mul_one_div, div_le_one_of_neg (h.trans_lt hb)]
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedField α
a b c d : α
n : ℤ
hb : b < 0
h : a < b
⊢ 1 / b < 1 / a
[PROOFSTEP]
rwa [div_lt_iff_of_neg' hb, ← div_eq_mul_one_div, div_lt_one_of_neg (h.trans hb)]
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedField α
a b c d : α
n : ℤ
ha : a < 0
hb : b < 0
⊢ 1 / a ≤ 1 / b ↔ b ≤ a
[PROOFSTEP]
simpa [one_div] using inv_le_inv_of_neg ha hb
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedField α
a b c d : α
n : ℤ
h1 : a < 0
h2 : -1 < a
this : 1 / a < 1 / -1
⊢ 1 / a < -1
[PROOFSTEP]
rwa [one_div_neg_one_eq_neg_one] at this 
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedField α
a b c d : α
n : ℤ
h1 : a < 0
h2 : -1 ≤ a
this : 1 / a ≤ 1 / -1
⊢ 1 / a ≤ -1
[PROOFSTEP]
rwa [one_div_neg_one_eq_neg_one] at this 
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedField α
a✝ b c d : α
n : ℤ
a : α
⊢ a - a / 2 = a / 2
[PROOFSTEP]
suffices a / 2 + a / 2 - a / 2 = a / 2 by rwa [add_halves] at this 
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedField α
a✝ b c d : α
n : ℤ
a : α
this : a / 2 + a / 2 - a / 2 = a / 2
⊢ a - a / 2 = a / 2
[PROOFSTEP]
rwa [add_halves] at this 
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedField α
a✝ b c d : α
n : ℤ
a : α
⊢ a / 2 + a / 2 - a / 2 = a / 2
[PROOFSTEP]
rw [add_sub_cancel]
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedField α
a✝ b c d : α
n : ℤ
a : α
⊢ a / 2 - a = -(a / 2)
[PROOFSTEP]
suffices a / 2 - (a / 2 + a / 2) = -(a / 2) by rwa [add_halves] at this 
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedField α
a✝ b c d : α
n : ℤ
a : α
this : a / 2 - (a / 2 + a / 2) = -(a / 2)
⊢ a / 2 - a = -(a / 2)
[PROOFSTEP]
rwa [add_halves] at this 
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedField α
a✝ b c d : α
n : ℤ
a : α
⊢ a / 2 - (a / 2 + a / 2) = -(a / 2)
[PROOFSTEP]
rw [sub_add_eq_sub_sub, sub_self, zero_sub]
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedField α
a b c d : α
n : ℤ
h : a < b
⊢ a + (b - a) / 2 < b
[PROOFSTEP]
rwa [← div_sub_div_same, sub_eq_add_neg, add_comm (b / 2), ← add_assoc, ← sub_eq_add_neg, ← lt_sub_iff_add_lt,
  sub_self_div_two, sub_self_div_two, div_lt_div_right (zero_lt_two' α)]
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedField α
a b c d : α
n : ℤ
a2 : 2 ≤ a
⊢ (1 - 1 / a)⁻¹ ≤ 2
[PROOFSTEP]
refine'
  (inv_le_inv_of_le (inv_pos.2 <| zero_lt_two' α) _).trans_eq
    (inv_inv (2 : α))
      -- move `1 / a` to the left and `2⁻¹` to the right.
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedField α
a b c d : α
n : ℤ
a2 : 2 ≤ a
⊢ 2⁻¹ ≤ 1 - 1 / a
[PROOFSTEP]
rw [le_sub_iff_add_le, add_comm, ← le_sub_iff_add_le]
  -- take inverses on both sides and use the assumption `2 ≤ a`.
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedField α
a b c d : α
n : ℤ
a2 : 2 ≤ a
⊢ 1 / a ≤ 1 - 2⁻¹
[PROOFSTEP]
convert (one_div a).le.trans (inv_le_inv_of_le zero_lt_two a2) using 1
  -- show `1 - 1 / 2 = 1 / 2`.
[GOAL]
case h.e'_4
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedField α
a b c d : α
n : ℤ
a2 : 2 ≤ a
⊢ 1 - 2⁻¹ = 2⁻¹
[PROOFSTEP]
rw [sub_eq_iff_eq_add, ← two_mul, mul_inv_cancel two_ne_zero]
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedField α
a b c d : α
n : ℤ
s : Set α
ha : 0 ≤ a
hs : IsLUB s b
⊢ IsLUB ((fun b => a * b) '' s) (a * b)
[PROOFSTEP]
rcases lt_or_eq_of_le ha with (ha | rfl)
[GOAL]
case inl
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedField α
a b c d : α
n : ℤ
s : Set α
ha✝ : 0 ≤ a
hs : IsLUB s b
ha : 0 < a
⊢ IsLUB ((fun b => a * b) '' s) (a * b)
[PROOFSTEP]
exact (OrderIso.mulLeft₀ _ ha).isLUB_image'.2 hs
[GOAL]
case inr
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedField α
b c d : α
n : ℤ
s : Set α
hs : IsLUB s b
ha : 0 ≤ 0
⊢ IsLUB ((fun b => 0 * b) '' s) (0 * b)
[PROOFSTEP]
simp_rw [zero_mul]
[GOAL]
case inr
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedField α
b c d : α
n : ℤ
s : Set α
hs : IsLUB s b
ha : 0 ≤ 0
⊢ IsLUB ((fun a => 0) '' s) 0
[PROOFSTEP]
rw [hs.nonempty.image_const]
[GOAL]
case inr
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedField α
b c d : α
n : ℤ
s : Set α
hs : IsLUB s b
ha : 0 ≤ 0
⊢ IsLUB {0} 0
[PROOFSTEP]
exact isLUB_singleton
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedField α
a b c d : α
n : ℤ
s : Set α
ha : 0 ≤ a
hs : IsLUB s b
⊢ IsLUB ((fun b => b * a) '' s) (b * a)
[PROOFSTEP]
simpa [mul_comm] using hs.mul_left ha
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedField α
a b c d : α
n : ℤ
hc : c ≠ 0
hd : d ≠ 0
⊢ (a * d - b * c) / (c * d) < 0 ↔ a / c < b / d
[PROOFSTEP]
rw [mul_comm b c, ← div_sub_div _ _ hc hd, sub_lt_zero]
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedField α
a b c d : α
n : ℤ
hc : c ≠ 0
hd : d ≠ 0
⊢ (a * d - b * c) / (c * d) ≤ 0 ↔ a / c ≤ b / d
[PROOFSTEP]
rw [mul_comm b c, ← div_sub_div _ _ hc hd, sub_nonpos]
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedField α
a b c d : α
n : ℤ
h : ∀ (ε : α), ε > 0 → b - ε ≤ a
⊢ b ≤ a
[PROOFSTEP]
contrapose! h
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedField α
a b c d : α
n : ℤ
h : a < b
⊢ ∃ ε, ε > 0 ∧ a < b - ε
[PROOFSTEP]
simpa only [@and_comm ((0 : α) < _), lt_sub_iff_add_lt, gt_iff_lt] using exists_add_lt_and_pos_of_lt h
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedField α
a b c d : α
n : ℤ
a0 : 0 ≤ a
b0 : 0 ≤ b
h : a = -b
⊢ a = b
[PROOFSTEP]
subst a
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedField α
b c d : α
n : ℤ
b0 : 0 ≤ b
a0 : 0 ≤ -b
⊢ -b = b
[PROOFSTEP]
have : b = 0 := le_antisymm (neg_nonneg.1 a0) b0
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedField α
b c d : α
n : ℤ
b0 : 0 ≤ b
a0 : 0 ≤ -b
this : b = 0
⊢ -b = b
[PROOFSTEP]
rw [this, neg_zero]
[GOAL]
ι : Type u_1
α : Type u_2
β : Type u_3
inst✝ : LinearOrderedField α
a✝ b c d : α
n : ℤ
a : α
⊢ |1 / a| = 1 / |a|
[PROOFSTEP]
rw [abs_div, abs_one]
