summaryrefslogtreecommitdiff
path: root/BFF.agda
diff options
context:
space:
mode:
Diffstat (limited to 'BFF.agda')
-rw-r--r--BFF.agda17
1 files changed, 10 insertions, 7 deletions
diff --git a/BFF.agda b/BFF.agda
index ced6ebf..6943f0d 100644
--- a/BFF.agda
+++ b/BFF.agda
@@ -30,18 +30,21 @@ module PartialVecBFF (A : DecSetoid ℓ₀ ℓ₀) where
enumerate : {n : ℕ} → Vec Carrier n → Vec (Fin n) n
enumerate _ = tabulate id
+ enumeratel : (n : ℕ) → Vec (Fin n) n
+ enumeratel _ = tabulate id
+
denumerate : {n : ℕ} → Vec Carrier n → Fin n → Carrier
denumerate = flip lookupV
-
- bff : (G : Get) → ({i : Get.|I| G} → Vec Carrier (Get.|gl₁| G i) → Vec Carrier (Get.|gl₂| G i) → Maybe (Vec Carrier (Get.|gl₁| G i)))
- bff G s v = let s′ = enumerate s
+ bff : (G : Get) → {i : Get.|I| G} → (j : Get.|I| G) → Vec Carrier (Get.|gl₁| G i) → Vec Carrier (Get.|gl₂| G j) → Maybe (Vec Carrier (Get.|gl₁| G j))
+ bff G i s v = let s′ = enumerate s
t′ = Get.get G s′
g = fromFunc (denumerate s)
g′ = delete-many t′ g
- h = assoc t′ v
- h′ = (flip union g′) <$> h
- in h′ >>= flip mapMV s′ ∘ flip lookupV
+ t = enumeratel (Get.|gl₁| G i)
+ h = assoc (Get.get G t) v
+ h′ = (flip union (reshape g′ (Get.|gl₁| G i))) <$> h
+ in h′ >>= flip mapMV t ∘ flip lookupM
module VecBFF (A : DecSetoid ℓ₀ ℓ₀) where
open GetTypes.VecVec public using (Get)
@@ -50,5 +53,5 @@ module VecBFF (A : DecSetoid ℓ₀ ℓ₀) where
open PartialVecBFF A public using (assoc ; enumerate ; denumerate)
- bff : (G : Get) → ({n : ℕ} → Vec Carrier n → Vec Carrier (Get.getlen G n) → Maybe (Vec Carrier n))
+ bff : (G : Get) → {n : ℕ} → (m : ℕ) → Vec Carrier n → Vec Carrier (Get.getlen G m) → Maybe (Vec Carrier m)
bff G = PartialVecBFF.bff A (VecVec-to-PartialVecVec G)