Version from October 17, 2005
0.
<Ident> | := | | <symbol>*
|
<Nat> | := | | <numeral>*
|
<String> | := | | <symbol>*
|
1.
<Exp> | := | | <AtomExp>
|
| | | | <CompositeTerm>
|
|
|
<AtomExp> | := | | <Principal>
|
| | | | <AtomTerm>
|
1.1.
<Principal> | := | | (<PType> <Kind> <Ident>)
|
1.1.1.
1.1.2.
<PType> | := | | principal (controls <Principal>)*
|
1.2
<AtomTerm> | := | | (<Type> <Kind> <Ident>)
|
1.2.1.
<Type> | := | | <ConsType>
|
| | | | <DepType>
|
1.2.1.1.
<ConsType> | := | | nonce | | | | stkey | | | | term
|
1.2.1.2.
<DepType> | := | | ltkey <Principal>*
|
| | | | pubkey <Principal>
|
| | | | privkey <Principal>
|
1.3.
<CompositeTerm> | := | | (<Function> <Exp>+)
|
| | | | (tuple <Exp>*)
|
1.3.1.
<Function> | := | | (<OutType> <InType> <Kind> <Parameters> <Ident>)
|
1.3.1.
<OutType> | := | | encr | sig | hash | function // more??
|
<InType> | := | | <Nat> // arity
|
<Parameters> | := | | (parameters <Exp>*)
|
<InParameters> | := | | (inparameters <Exp>*)
|
<OutParameters> | := | | (outparameters <Exp>*)
|
1.4.
<BTerm> | := | | (boolean <Exp> == <Exp>)
|
2.
<Action> | := | | <AtomAction>
| | | | <CompositeAction>
|
2.1.
<AtomAction> | := | | (<Kind> <Ident>)
|
2.2.
<CompositeAction> | := | | <InternalAction> | <ExternalAction>
|
2.2.1.
<InternalAction> | := | | (new <ConsType> var <Ident>)
|
| | | | (match <Exp> <Exp>) // refine this
|
| | | | (cond <Bterm> <Action>)
|
2.2.2.
<ExternalAction> | := | | (send <Principal> <Principal> <Exp>)
|
| | | | (receive | (principal var <Ident>)
|
| | | | (principal var <Ident>)
|
| | | | (term var <Ident>))
|
3.
<Agent> | := | | (<AgentType> <AgentDescription> <Program>)
|
3.1.
3.2.
<AgentDescription> | := | | <Principal> <InParameters> <OutParameters> <Spec>
|
3.2.1.
<Spec> | := | | (spec <String>)
|
specifies the axioms that the agent uses in her reasoning.
need to refine this category to the s-exp grammar suitable to
translate for theorem provers.
3.3.
<Program> | := | | <Action>
| | | | (seq <Program>*)
| | | | (par <Program>*)
|
4.
<Process> | := | | (process <Agent>+)
|
5.
<Run> | := | | (<RunType> <Edge>*)
|
5.1.
5.2.
<Edge> | := | | (map <RecvRef> <SendRef>)
|
<RecvRef> | := | | (recvref <Principal> <Ident>)
|
<SendRef> | := | | (sendref <Principal> <Ident>)
|
6.
<Protocol> | := | | (protocol <ProtocolDescription> <Process> <Security>)
|
6.1.
<ProtocolDescription> | := | | <Ident> <Parameters>
|
6.3.
<Security> | := | | <Run>+ <Spec>
|