------------------------------------------------------------------------
-- The Agda standard library
--
-- Documentation for the `All` predicate over `List`
------------------------------------------------------------------------
module README.Data.List.Relation.Unary.All where
open import Data.List.Base using ([]; _∷_)
open import Data.Nat using (ℕ; s≤s; z≤n; _≤_)
open import Data.Nat.Properties using (≤-trans; n≤1+n)
------------------------------------------------------------------------
-- All
-- The dual to `Any` is the predicate `All` which encodes the idea that
-- every element in a given list satisfies a given property.
open import Data.List.Relation.Unary.All
-- Proofs for `All` are constructed using exactly the same syntax as
-- is used to construct lists ("[]" & "_∷_"). For example to prove
-- that every element in a list is less than or equal to one:
lem₁ : All (_≤ 1) (1 ∷ 0 ∷ 1 ∷ [])
lem₁ = 1≤1 ∷ 0≤1 ∷ 1≤1 ∷ []
where
0≤1 = z≤n
1≤1 = s≤s z≤n
-- As with `Any`, the module also provides the standard operators
-- `map`, `zip` etc. to manipulate proofs for `All`.
import Data.List.Relation.Unary.All as All
lem₂ : All (_≤ 2) (1 ∷ 0 ∷ 1 ∷ [])
lem₂ = All.map ≤1⇒≤2 lem₁
where
≤1⇒≤2 : ∀ {x} → x ≤ 1 → x ≤ 2
≤1⇒≤2 x≤1 = ≤-trans x≤1 (n≤1+n 1)
-- Properties of how list functions interact with `All` can be
-- found in:
import Data.List.Relation.Unary.All.Properties