aboutsummaryrefslogtreecommitdiff
path: root/FinMerge
diff options
context:
space:
mode:
Diffstat (limited to 'FinMerge')
-rw-r--r--FinMerge/Properties.agda3
-rw-r--r--FinMerge/Util.agda32
2 files changed, 34 insertions, 1 deletions
diff --git a/FinMerge/Properties.agda b/FinMerge/Properties.agda
index 5f92905..6e9d53a 100644
--- a/FinMerge/Properties.agda
+++ b/FinMerge/Properties.agda
@@ -13,10 +13,11 @@ open import Data.Maybe.Base using (Maybe; map; nothing; just; fromMaybe)
open import Function using (id;  _∘_)
open import Relation.Binary.Definitions using (tri<; tri≈; tri>)
-open import Util using (_<_<_; _<_≤_; toℕ<; Ordering; less; equal; greater; compare)
+open import FinMerge.Util using (_<_≤_; Ordering; compare)
open import FinMerge using (merge; unmerge; pluck; glue-once; glue-unglue-once; glue-iter; unpluck)
+open Ordering
private
variable
diff --git a/FinMerge/Util.agda b/FinMerge/Util.agda
new file mode 100644
index 0000000..6a7f7b4
--- /dev/null
+++ b/FinMerge/Util.agda
@@ -0,0 +1,32 @@
+{-# OPTIONS --without-K --safe #-}
+module FinMerge.Util where
+
+open import Data.Fin using (Fin; toℕ)
+open import Data.Nat using (ℕ; _≤_; _<_ ; z<s; s≤s)
+open import Data.Product using (_×_; _,_)
+open import Relation.Binary.PropositionalEquality using (_≡_; refl; cong)
+
+
+_<_≤_ : ℕ → ℕ → ℕ → Set
+_<_≤_ i j k = (i < j) × (j ≤ k)
+
+_<_<_ : ℕ → ℕ → ℕ → Set
+_<_<_ i j k = (i < j) × (j < k)
+
+toℕ< : {n : ℕ} → (i : Fin n) → toℕ i < n
+toℕ< Fin.zero = z<s
+toℕ< (Fin.suc i) = s≤s (toℕ< i)
+
+data Ordering {n : ℕ} : Fin n → Fin n → Set where
+ less : ∀ {i j} → toℕ i < toℕ j < n → Ordering i j
+ equal : ∀ {i j} → i ≡ j → Ordering i j
+ greater : ∀ {i j} → toℕ j < toℕ i < n → Ordering i j
+
+compare : ∀ {n : ℕ} (i j : Fin n) → Ordering i j
+compare Fin.zero Fin.zero = equal refl
+compare Fin.zero j@(Fin.suc _) = less (z<s , toℕ< j)
+compare i@(Fin.suc _) Fin.zero = greater (z<s , toℕ< i)
+compare (Fin.suc i) (Fin.suc j) with compare i j
+... | less (i<j , j<n) = less (s≤s i<j , s≤s j<n)
+... | equal i≡j = equal (cong Fin.suc i≡j)
+... | greater (j<i , i<n) = greater (s≤s j<i , s≤s i<n)