diff options
author | Helmut Grohne <helmut@subdivi.de> | 2012-10-22 11:05:34 +0200 |
---|---|---|
committer | Helmut Grohne <helmut@subdivi.de> | 2012-10-22 11:05:34 +0200 |
commit | 58038d636d9f1225f8355c22102823e3168ad56c (patch) | |
tree | bf53ce921cc8ddc84a261ec53e266348d7d6af03 /BFF.agda | |
parent | e88e81ee531d8133bc0d32f86b416fa940b40395 (diff) | |
download | bidiragda-58038d636d9f1225f8355c22102823e3168ad56c.tar.gz |
now parameterize BFF
And update Bidir and Precond, cause they import BFF.
Diffstat (limited to 'BFF.agda')
-rw-r--r-- | BFF.agda | 51 |
1 files changed, 26 insertions, 25 deletions
@@ -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′ |