Add properties of basic definitions
This commit is contained in:
parent
1188fb505a
commit
4f392d19b7
|
@ -0,0 +1,50 @@
|
|||
{-# OPTIONS --safe --without-K #-}
|
||||
|
||||
module Thinning.Properties where
|
||||
|
||||
open import Data.List.Base using (List)
|
||||
open import Level using (Level)
|
||||
open import Relation.Binary.PropositionalEquality.Core using (_≡_; refl; cong)
|
||||
|
||||
open import Thinning
|
||||
|
||||
private
|
||||
variable
|
||||
a : Level
|
||||
A : Set a
|
||||
ws xs ys zs : List A
|
||||
|
||||
-- In agda-categories, the convention is to have the arguments to many of these
|
||||
-- properties implicit. In the standard library, however, the convention is to
|
||||
-- make the arguments explicit. I think implicit is better when working with an
|
||||
-- abstract instance of the structure, but here we're pretty much always going
|
||||
-- to be working with Thinnings concretely, so I'm going to make the arguments
|
||||
-- explicit.
|
||||
|
||||
-- Composition has a left identity
|
||||
identityˡ : ∀ (θ : Thinning A xs ys) → id ∘ θ ≡ θ
|
||||
identityˡ end = refl
|
||||
identityˡ (include θ) = cong include (identityˡ θ)
|
||||
identityˡ (exclude θ) = cong exclude (identityˡ θ)
|
||||
|
||||
-- Composition has a right identity
|
||||
identityʳ : ∀ (θ : Thinning A xs ys) → θ ∘ id ≡ θ
|
||||
identityʳ end = refl
|
||||
identityʳ (include θ) = cong include (identityʳ θ)
|
||||
identityʳ (exclude θ) = cong exclude (identityʳ θ)
|
||||
|
||||
-- Composition is associative
|
||||
assoc : (θ : Thinning A ws xs) (φ : Thinning A xs ys) (ψ : Thinning A ys zs)
|
||||
→ (ψ ∘ φ) ∘ θ ≡ ψ ∘ (φ ∘ θ)
|
||||
assoc end end end = refl
|
||||
assoc end end (exclude ψ) = cong exclude (assoc end end ψ)
|
||||
assoc end (exclude φ) (include ψ) = cong exclude (assoc end φ ψ)
|
||||
assoc end (exclude φ) (exclude ψ) = cong exclude (assoc end (exclude φ) ψ)
|
||||
assoc (include θ) (include φ) (include ψ) = cong include (assoc θ φ ψ)
|
||||
assoc (include θ) (include φ) (exclude ψ) = cong exclude (assoc (include θ) (include φ) ψ)
|
||||
assoc (include θ) (exclude φ) (include ψ) = cong exclude (assoc (include θ) φ ψ)
|
||||
assoc (include θ) (exclude φ) (exclude ψ) = cong exclude (assoc (include θ) (exclude φ) ψ)
|
||||
assoc (exclude θ) (include φ) (include ψ) = cong exclude (assoc θ φ ψ)
|
||||
assoc (exclude θ) (include φ) (exclude ψ) = cong exclude (assoc (exclude θ) (include φ) ψ)
|
||||
assoc (exclude θ) (exclude φ) (include ψ) = cong exclude (assoc (exclude θ) φ ψ)
|
||||
assoc (exclude θ) (exclude φ) (exclude ψ) = cong exclude (assoc (exclude θ) (exclude φ) ψ)
|
Loading…
Reference in New Issue