# The positive, negative, nonnegative and nonpositive integers ```agda module elementary-number-theory.positive-and-negative-integers where ``` <details><summary>Imports</summary> ```agda open import elementary-number-theory.integers open import elementary-number-theory.natural-numbers open import elementary-number-theory.negative-integers open import elementary-number-theory.nonnegative-integers open import elementary-number-theory.nonpositive-integers open import elementary-number-theory.nonzero-integers open import elementary-number-theory.positive-integers open import foundation.cartesian-product-types open import foundation.coproduct-types open import foundation.dependent-pair-types open import foundation.empty-types open import foundation.function-types open import foundation.identity-types open import foundation.negated-equality open import foundation.negation open import foundation.unit-type ``` </details> ## Idea In this file, we outline basic relations between negative, nonpositive, nonnegative, and positive integers. ## Properties ### The only nonnegative and nonpositive integer is zero ```agda is-zero-is-nonnegative-is-nonpositive-ℤ : {x : ℤ} → is-nonnegative-ℤ x → is-nonpositive-ℤ x → is-zero-ℤ x is-zero-is-nonnegative-is-nonpositive-ℤ {inr (inl x)} H K = refl ``` ### No integer is both positive and negative ```agda is-not-negative-and-positive-ℤ : (x : ℤ) → ¬ (is-negative-ℤ x × is-positive-ℤ x) is-not-negative-and-positive-ℤ (inl x) (H , K) = K is-not-negative-and-positive-ℤ (inr x) (H , K) = H ``` ### Dichotomies #### A nonzero integer is either negative or positive ```agda decide-sign-nonzero-ℤ : {x : ℤ} → x ≠ zero-ℤ → is-negative-ℤ x + is-positive-ℤ x decide-sign-nonzero-ℤ {inl x} H = inl star decide-sign-nonzero-ℤ {inr (inl x)} H = ex-falso (H refl) decide-sign-nonzero-ℤ {inr (inr x)} H = inr star ``` #### An integer is either positive or nonpositive ```agda decide-is-positive-is-nonpositive-ℤ : {x : ℤ} → is-positive-ℤ x + is-nonpositive-ℤ x decide-is-positive-is-nonpositive-ℤ {inl x} = inr star decide-is-positive-is-nonpositive-ℤ {inr (inl x)} = inr star decide-is-positive-is-nonpositive-ℤ {inr (inr x)} = inl star ``` #### An integer is either negative or nonnegative ```agda decide-is-negative-is-nonnegative-ℤ : {x : ℤ} → is-negative-ℤ x + is-nonnegative-ℤ x decide-is-negative-is-nonnegative-ℤ {inl x} = inl star decide-is-negative-is-nonnegative-ℤ {inr x} = inr star ``` #### An integer or its negative is nonnegative ```agda decide-is-nonnegative-is-nonnegative-neg-ℤ : {x : ℤ} → (is-nonnegative-ℤ x) + (is-nonnegative-ℤ (neg-ℤ x)) decide-is-nonnegative-is-nonnegative-neg-ℤ {inl x} = inr star decide-is-nonnegative-is-nonnegative-neg-ℤ {inr x} = inl star ``` #### An integer or its negative is nonpositive ```agda decide-is-nonpositive-is-nonpositive-neg-ℤ : {x : ℤ} → (is-nonpositive-ℤ x) + (is-nonpositive-ℤ (neg-ℤ x)) decide-is-nonpositive-is-nonpositive-neg-ℤ {inl x} = inl star decide-is-nonpositive-is-nonpositive-neg-ℤ {inr (inl x)} = inl star decide-is-nonpositive-is-nonpositive-neg-ℤ {inr (inr x)} = inr star ``` ### Positive integers are nonnegative ```agda is-nonnegative-is-positive-ℤ : {x : ℤ} → is-positive-ℤ x → is-nonnegative-ℤ x is-nonnegative-is-positive-ℤ {inr (inr x)} H = H nonnegative-positive-ℤ : positive-ℤ → nonnegative-ℤ nonnegative-positive-ℤ (x , H) = (x , is-nonnegative-is-positive-ℤ H) ``` ### Negative integers are nonpositive ```agda is-nonpositive-is-negative-ℤ : {x : ℤ} → is-negative-ℤ x → is-nonpositive-ℤ x is-nonpositive-is-negative-ℤ {inl x} H = H nonpositive-negative-ℤ : negative-ℤ → nonpositive-ℤ nonpositive-negative-ℤ (x , H) = (x , is-nonpositive-is-negative-ℤ H) ``` ### Determining the sign of the successor of an integer #### The successor of a nonnegative integer is positive ```agda is-positive-succ-is-nonnegative-ℤ : {x : ℤ} → is-nonnegative-ℤ x → is-positive-ℤ (succ-ℤ x) is-positive-succ-is-nonnegative-ℤ {inr (inl x)} H = H is-positive-succ-is-nonnegative-ℤ {inr (inr x)} H = H ``` #### The successor of a negative integer is nonpositive ```agda is-nonpositive-succ-is-negative-ℤ : {x : ℤ} → is-negative-ℤ x → is-nonpositive-ℤ (succ-ℤ x) is-nonpositive-succ-is-negative-ℤ {inl zero-ℕ} H = H is-nonpositive-succ-is-negative-ℤ {inl (succ-ℕ x)} H = H ``` ### Determining the sign of the predecessor of an integer #### The predecessor of a positive integer is nonnegative ```agda is-nonnegative-pred-is-positive-ℤ : {x : ℤ} → is-positive-ℤ x → is-nonnegative-ℤ (pred-ℤ x) is-nonnegative-pred-is-positive-ℤ {inr (inr zero-ℕ)} H = H is-nonnegative-pred-is-positive-ℤ {inr (inr (succ-ℕ x))} H = H ``` #### The predecessor of a nonpositive integer is negative ```agda is-negative-pred-is-nonpositive-ℤ : {x : ℤ} → is-nonpositive-ℤ x → is-negative-ℤ (pred-ℤ x) is-negative-pred-is-nonpositive-ℤ {inl x} H = H is-negative-pred-is-nonpositive-ℤ {inr (inl x)} H = H ``` ### Determining the sign of the negative of an integer #### The negative of a nonnegative integer is nonpositive ```agda is-nonpositive-neg-is-nonnegative-ℤ : {x : ℤ} → is-nonnegative-ℤ x → is-nonpositive-ℤ (neg-ℤ x) is-nonpositive-neg-is-nonnegative-ℤ {inr (inl x)} H = H is-nonpositive-neg-is-nonnegative-ℤ {inr (inr x)} H = H neg-nonnegative-ℤ : nonnegative-ℤ → nonpositive-ℤ neg-nonnegative-ℤ (x , H) = neg-ℤ x , is-nonpositive-neg-is-nonnegative-ℤ H ``` #### The negative of a nonpositive integer is nonnegative ```agda is-nonnegative-neg-is-nonpositive-ℤ : {x : ℤ} → is-nonpositive-ℤ x → is-nonnegative-ℤ (neg-ℤ x) is-nonnegative-neg-is-nonpositive-ℤ {inl x} H = H is-nonnegative-neg-is-nonpositive-ℤ {inr (inl x)} H = H neg-nonpositive-ℤ : nonpositive-ℤ → nonnegative-ℤ neg-nonpositive-ℤ (x , H) = neg-ℤ x , is-nonnegative-neg-is-nonpositive-ℤ H ``` #### The negative of a positive integer is negative ```agda is-negative-neg-is-positive-ℤ : {x : ℤ} → is-positive-ℤ x → is-negative-ℤ (neg-ℤ x) is-negative-neg-is-positive-ℤ {inr (inr x)} H = H neg-positive-ℤ : positive-ℤ → negative-ℤ neg-positive-ℤ (x , H) = (neg-ℤ x , is-negative-neg-is-positive-ℤ H) ``` #### The negative of a negative integer is positive ```agda is-positive-neg-is-negative-ℤ : {x : ℤ} → is-negative-ℤ x → is-positive-ℤ (neg-ℤ x) is-positive-neg-is-negative-ℤ {inl x} H = H neg-negative-ℤ : negative-ℤ → positive-ℤ neg-negative-ℤ (x , H) = (neg-ℤ x , is-positive-neg-is-negative-ℤ H) ``` ### Negated properties #### Nonpositivity is negated positivity ```agda is-not-positive-is-nonpositive-ℤ : {x : ℤ} → is-nonpositive-ℤ x → ¬ (is-positive-ℤ x) is-not-positive-is-nonpositive-ℤ {inr (inl x)} _ q = q is-not-positive-is-nonpositive-ℤ {inr (inr x)} p _ = p is-nonpositive-is-not-positive-ℤ : {x : ℤ} → ¬ (is-positive-ℤ x) → is-nonpositive-ℤ x is-nonpositive-is-not-positive-ℤ {x} H = rec-coproduct ( λ K → ex-falso (H K)) ( id) ( decide-is-positive-is-nonpositive-ℤ) ``` #### Nonnegativity is negated negativity ```agda is-not-negative-is-nonnegative-ℤ : {x : ℤ} → is-nonnegative-ℤ x → ¬ (is-negative-ℤ x) is-not-negative-is-nonnegative-ℤ {x} H K = is-not-positive-is-nonpositive-ℤ ( is-nonpositive-neg-is-nonnegative-ℤ H) ( is-positive-neg-is-negative-ℤ K) is-nonnegative-is-not-negative-ℤ : {x : ℤ} → ¬ (is-negative-ℤ x) → is-nonnegative-ℤ x is-nonnegative-is-not-negative-ℤ {x} H = rec-coproduct ( λ K → ex-falso (H K)) ( id) ( decide-is-negative-is-nonnegative-ℤ) ```