[Agda] am I doing something fundamentally impredicative in this code? or is there a better approach
Carter Schonwald
carter.schonwald at gmail.com
Thu Feb 1 23:13:58 CET 2018
Hello everyone! i'm messing around with trying to mock / model out first
class "signed values", and with a toy development i'm getting some type
universe issues which makes me suspect i'm modelling it wrong,
feedback would be appreciated,
https://gist.github.com/cartazio/373eaa1ab726b2f6e651777a44b3f2b1
is the current version of the code
many thanks!
-Carter
also including it inline below
module auth where
open import Data.String
open import Data.Nat
open import Level
open import Data.Product
open import Relation.Binary.PropositionalEquality
open import Relation.Binary.HeterogeneousEquality as Het
-- SignedBy will be a magic built in type that requires type checker support
-- seems likely in practice that i'll need to have some singleton structures
record SignedBy {ℓ } (t : Set ℓ ) ( identity : String ) : Set ℓ where
field
val : t
uniqueCounter : ℕ --- unique natural number th
hashOfVal : ℕ --- nat number thats a Cryptographically Strong Hash of
the canonical serialization of val
signature : String --- signature of concatenation of
---(hashfOfVal , uniqueCounter), using the public
key denotated by identity
data AsDelegate : Set where
IsDelegate : AsDelegate
IsLeaf : AsDelegate
open AsDelegate
record TypeSing {ℓ : Level} ( tau : Set ℓ ) (v : tau) : Set ℓ where
field
singVal : tau
singIsSing : singVal ≡ v
record Pair {tx ty : Level} ( x : Set tx ) (y : Set ty ) : Set ( Level.suc
(tx Level.⊔ ty )) where
constructor mkPair
field
one : x
two : y
data OnBehalfOf : String -> String -> AsDelegate -> Set where
Self : { x : String } -> OnBehalfOf x x IsDelegate
DelegatedTo : {root mid : String} -> (end : String)->
SignedBy ( mkPair (OnBehalfOf mid root IsDelegate) (
TypeSing String end)) mid ->
---- not sure how to hack around this type universe issue...
am I getting impredicative or wishing i was?
OnBehalfOf end root IsDelegate
LeafAuth : {root mid : String} -> (end : String) -> OnBehalfOf mid root
IsDelegate -> OnBehalfOf end root IsLeaf
{-
equivalent datalog would be (roughly)
onBehalfOf(me,me,Delegate).
onBehalfOf(agent,originalPerson,Delegate) :-
onBehalfOf(mid,originalPerson,Delegate),AddsDelegateFor(mid,originalperson,agent)
onBhealfOf(leafAgent,originalPerson,LEAF) :-
onBehalfOf(mid,originalPerson,Delegate),AddsLeafFor(mid,originalperson,leafAgent)
-}
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.chalmers.se/pipermail/agda/attachments/20180201/5f589fbd/attachment.html>
More information about the Agda
mailing list