------------------------------------------------------------------------------ -- Parametrized preorder reasoning ------------------------------------------------------------------------------ {-# OPTIONS --exact-split #-} {-# OPTIONS --no-sized-types #-} {-# OPTIONS --no-universe-polymorphism #-} {-# OPTIONS --without-K #-} module Common.Relation.Binary.PreorderReasoning {D : Set} (_∼_ : D → D → Set) (refl : ∀ {x} → x ∼ x) (trans : ∀ {x y z} → x ∼ y → y ∼ z → x ∼ z) where infix 3 _∎ infixr 2 _∼⟨_⟩_ ------------------------------------------------------------------------------ -- From (Mu, S.-C., Ko, H.-S. and Jansson, P. (2009)). -- -- N.B. Unlike Ulf's thesis (and the Agda standard library 0.8.1) this -- set of combinators do not use a wrapper data type. _∼⟨_⟩_ : ∀ x {y z} → x ∼ y → y ∼ z → x ∼ z _ ∼⟨ x∼y ⟩ y∼z = trans x∼y y∼z _∎ : ∀ x → x ∼ x _∎ _ = refl ------------------------------------------------------------------------------ -- References -- -- Mu, S.-C., Ko, H.-S. and Jansson, P. (2009). Algebra of programming -- in Agda: Dependent types for relational program derivation. Journal -- of Functional Programming 19.5, pp. 545–579.