summaryrefslogtreecommitdiff
path: root/src/Obs/Abstract.idr
diff options
context:
space:
mode:
authorGreg Brown <greg.brown01@ed.ac.uk>2023-01-07 22:01:05 +0000
committerGreg Brown <greg.brown01@ed.ac.uk>2023-01-07 22:01:05 +0000
commiteb49ef28b93431d9694a17b1ad44d9ea966bcb05 (patch)
tree284683527022fb9a1d633a8a774532513d6630eb /src/Obs/Abstract.idr
parentff65d1e285a97295708899bebdcc83ec214cd347 (diff)
Add postulates.
Diffstat (limited to 'src/Obs/Abstract.idr')
-rw-r--r--src/Obs/Abstract.idr20
1 files changed, 16 insertions, 4 deletions
diff --git a/src/Obs/Abstract.idr b/src/Obs/Abstract.idr
index 25c4210..16b0c92 100644
--- a/src/Obs/Abstract.idr
+++ b/src/Obs/Abstract.idr
@@ -132,6 +132,12 @@ abstractSyntaxBounds ctx val@(MkBounded v irrel bnds) = do
term <- inBounds $ (MkBounded (abstractSyntax ctx v) irrel bnds)
pure $ map (const term) val
+abstractParameter : Context n -> Parameter -> Logging ann (Parameter n)
+abstractParameter ctx param = pure $ MkParameter
+ { name = param.name
+ , ty = !(abstractSyntaxBounds ctx param.ty)
+ }
+
abstractDefinition : Context n -> Definition -> Logging ann (Definition n)
abstractDefinition ctx def = pure $ MkDefinition
{ name = def.name
@@ -140,14 +146,20 @@ abstractDefinition ctx def = pure $ MkDefinition
}
export
-abstractBlock : (defs : List Definition) -> Logging ann (Block (length defs))
+abstractBlock : (defs : List (Either Parameter Definition)) -> Logging ann (Block (length defs))
abstractBlock defs =
let asContext : Block n -> Context n
asContext [] = []
- asContext (defs :< def) = bind (asContext defs) def.name.val
- in let helper : Block n -> (defs : List Definition) -> Logging ann (Block (length defs + n))
+ asContext (blk :< def) = bind (asContext blk) def.name.val
+ asContext (blk ::< param) = bind (asContext blk) param.name.val
+ in let helper : Block n ->
+ (defs : List (Either Parameter Definition)) ->
+ Logging ann (Block (length defs + n))
helper blk [] = pure blk
- helper blk (def :: defs) = do
+ helper blk (Left param :: defs) = do
+ param <- abstractParameter (asContext blk) param
+ (rewrite plusSuccRightSucc (length defs) n in helper (blk ::< param) defs)
+ helper blk (Right def :: defs) = do
def <- abstractDefinition (asContext blk) def
(rewrite plusSuccRightSucc (length defs) n in helper (blk :< def) defs)
in rewrite sym $ plusZeroRightNeutral (length defs) in helper [] defs