Module docstring
{"# The order relation on the integers "}
{"# The order relation on the integers "}
Int.le.elim
theorem
{a b : ℤ} (h : a ≤ b) {P : Prop} (h' : ∀ n : ℕ, a + ↑n = b → P) : P
theorem le.elim {a b : ℤ} (h : a ≤ b) {P : Prop} (h' : ∀ n : ℕ, a + ↑n = b → P) : P :=
Exists.elim (le.dest h) h'
Int.lt.elim
theorem
{a b : ℤ} (h : a < b) {P : Prop} (h' : ∀ n : ℕ, a + ↑(Nat.succ n) = b → P) : P
Int.instLinearOrder
instance
: LinearOrder ℤ
instance instLinearOrder : LinearOrder ℤ where
le := (·≤·)
le_refl := Int.le_refl
le_trans := @Int.le_trans
le_antisymm := @Int.le_antisymm
lt := (·<·)
lt_iff_le_not_le := @Int.lt_iff_le_not_le
le_total := Int.le_total
toDecidableEq := by infer_instance
toDecidableLE := by infer_instance
toDecidableLT := by infer_instance
Int.nonneg_or_nonpos_of_mul_nonneg
theorem
{a b : ℤ} : 0 ≤ a * b → 0 ≤ a ∧ 0 ≤ b ∨ a ≤ 0 ∧ b ≤ 0
theorem nonneg_or_nonpos_of_mul_nonneg {a b : ℤ} : 0 ≤ a * b → 0 ≤ a ∧ 0 ≤ b0 ≤ a ∧ 0 ≤ b ∨ a ≤ 0 ∧ b ≤ 0 := by
intro h
by_cases ha : 0 ≤ a <;> by_cases hb : 0 ≤ b
· exact .inl ⟨ha, hb⟩
· refine .inr ⟨?_, le_of_not_le hb⟩
obtain _ | _ := Int.mul_eq_zero.mp <|
Int.le_antisymm (Int.mul_nonpos_of_nonneg_of_nonpos ha <| le_of_not_le hb) h
all_goals omega
· refine .inr ⟨le_of_not_le ha, ?_⟩
obtain _ | _ := Int.mul_eq_zero.mp <|
Int.le_antisymm (Int.mul_nonpos_of_nonpos_of_nonneg (le_of_not_le ha) hb) h
all_goals omega
· exact .inr ⟨le_of_not_ge ha, le_of_not_ge hb⟩
Int.mul_nonneg_of_nonneg_or_nonpos
theorem
{a b : ℤ} : 0 ≤ a ∧ 0 ≤ b ∨ a ≤ 0 ∧ b ≤ 0 → 0 ≤ a * b
theorem mul_nonneg_of_nonneg_or_nonpos {a b : ℤ} : 0 ≤ a ∧ 0 ≤ b0 ≤ a ∧ 0 ≤ b ∨ a ≤ 0 ∧ b ≤ 0 → 0 ≤ a * b
| .inl ⟨ha, hb⟩ => Int.mul_nonneg ha hb
| .inr ⟨ha, hb⟩ => Int.mul_nonneg_of_nonpos_of_nonpos ha hb
Int.mul_nonneg_iff
theorem
{a b : ℤ} : 0 ≤ a * b ↔ 0 ≤ a ∧ 0 ≤ b ∨ a ≤ 0 ∧ b ≤ 0
protected theorem mul_nonneg_iff {a b : ℤ} : 0 ≤ a * b ↔ 0 ≤ a ∧ 0 ≤ b ∨ a ≤ 0 ∧ b ≤ 0 :=
⟨nonneg_or_nonpos_of_mul_nonneg, mul_nonneg_of_nonneg_or_nonpos⟩