summaryrefslogtreecommitdiff
path: root/BFF.agda
diff options
context:
space:
mode:
authorHelmut Grohne <helmut@subdivi.de>2012-10-22 11:05:34 +0200
committerHelmut Grohne <helmut@subdivi.de>2012-10-22 11:05:34 +0200
commit58038d636d9f1225f8355c22102823e3168ad56c (patch)
treebf53ce921cc8ddc84a261ec53e266348d7d6af03 /BFF.agda
parente88e81ee531d8133bc0d32f86b416fa940b40395 (diff)
downloadbidiragda-58038d636d9f1225f8355c22102823e3168ad56c.tar.gz
now parameterize BFF
And update Bidir and Precond, cause they import BFF.
Diffstat (limited to 'BFF.agda')
-rw-r--r--BFF.agda51
1 files changed, 26 insertions, 25 deletions
diff --git a/BFF.agda b/BFF.agda
index 612c2c3..b7502ce 100644
--- a/BFF.agda
+++ b/BFF.agda
@@ -6,6 +6,7 @@ open import Data.Maybe using (Maybe ; just ; nothing ; maybe′)
open import Data.List using (List ; [] ; _∷_ ; map ; length)
open import Data.Vec using (Vec ; toList ; fromList ; tabulate ; allFin) renaming (lookup to lookupV ; map to mapV ; [] to []V ; _∷_ to _∷V_)
open import Function using (id ; _∘_ ; flip)
+open import Relation.Binary.Core using (Decidable ; _≡_)
open import FinMap
open import CheckInsert
@@ -17,43 +18,43 @@ _>>=_ = flip (flip maybe′ nothing)
fmap : {A B : Set} → (A → B) → Maybe A → Maybe B
fmap f = maybe′ (λ a → just (f a)) nothing
-module ListBFF where
+module ListBFF (Carrier : Set) (deq : Decidable {A = Carrier} _≡_) where
open FreeTheorems.ListList public using (get-type)
- assoc : {A : Set} {n : ℕ} → EqInst A → List (Fin n) → List A → Maybe (FinMapMaybe n A)
- assoc _ [] [] = just empty
- assoc eq (i ∷ is) (b ∷ bs) = (assoc eq is bs) >>= (checkInsert eq i b)
- assoc _ _ _ = nothing
+ assoc : {n : ℕ} → List (Fin n) → List Carrier → Maybe (FinMapMaybe n Carrier)
+ assoc [] [] = just empty
+ assoc (i ∷ is) (b ∷ bs) = (assoc is bs) >>= (checkInsert deq i b)
+ assoc _ _ = nothing
- enumerate : {A : Set} → (l : List A) → List (Fin (length l))
+ enumerate : (l : List Carrier) → List (Fin (length l))
enumerate l = toList (tabulate id)
- denumerate : {A : Set} (l : List A) → Fin (length l) → A
+ denumerate : (l : List Carrier) → Fin (length l) → Carrier
denumerate l = flip lookupV (fromList l)
- bff : get-type → ({B : Set} → EqInst B → List B → List B → Maybe (List B))
- bff get eq s v = let s′ = enumerate s
- g = fromFunc (denumerate s)
- h = assoc eq (get s′) v
- h′ = fmap (flip union g) h
- in fmap (flip map s′ ∘ flip lookup) h′
+ bff : get-type → (List Carrier → List Carrier → Maybe (List Carrier))
+ bff get s v = let s′ = enumerate s
+ g = fromFunc (denumerate s)
+ h = assoc (get s′) v
+ h′ = fmap (flip union g) h
+ in fmap (flip map s′ ∘ flip lookup) h′
-module VecBFF where
+module VecBFF (Carrier : Set) (deq : Decidable {A = Carrier} _≡_) where
open FreeTheorems.VecVec public using (get-type)
- assoc : {A : Set} {n m : ℕ} → EqInst A → Vec (Fin n) m → Vec A m → Maybe (FinMapMaybe n A)
- assoc _ []V []V = just empty
- assoc eq (i ∷V is) (b ∷V bs) = (assoc eq is bs) >>= (checkInsert eq i b)
+ assoc : {n m : ℕ} → Vec (Fin n) m → Vec Carrier m → Maybe (FinMapMaybe n Carrier)
+ assoc []V []V = just empty
+ assoc (i ∷V is) (b ∷V bs) = (assoc is bs) >>= (checkInsert deq i b)
- enumerate : {A : Set} {n : ℕ} → Vec A n → Vec (Fin n) n
+ enumerate : {n : ℕ} → Vec Carrier n → Vec (Fin n) n
enumerate _ = tabulate id
- denumerate : {A : Set} {n : ℕ} → Vec A n → Fin n → A
+ denumerate : {n : ℕ} → Vec Carrier n → Fin n → Carrier
denumerate = flip lookupV
- bff : {getlen : ℕ → ℕ} → (get-type getlen) → ({B : Set} {n : ℕ} → EqInst B → Vec B n → Vec B (getlen n) → Maybe (Vec B n))
- bff get eq s v = let s′ = enumerate s
- g = fromFunc (denumerate s)
- h = assoc eq (get s′) v
- h′ = fmap (flip union g) h
- in fmap (flip mapV s′ ∘ flip lookupV) h′
+ bff : {getlen : ℕ → ℕ} → (get-type getlen) → ({n : ℕ} → Vec Carrier n → Vec Carrier (getlen n) → Maybe (Vec Carrier n))
+ bff get s v = let s′ = enumerate s
+ g = fromFunc (denumerate s)
+ h = assoc (get s′) v
+ h′ = fmap (flip union g) h
+ in fmap (flip mapV s′ ∘ flip lookupV) h′