Add properties of basic definitions

This commit is contained in:
Nathan van Doorn 2024-06-20 09:06:44 +02:00
parent 1188fb505a
commit 4f392d19b7
1 changed files with 50 additions and 0 deletions

View File

@ -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 φ) ψ)