9. Role1 → ASK[predicate(param1:type1, param2:type2)] → Role2
To be a <Role1>:
if elicit[hasRole(R,<Role2>)] then Send message ask(<predicate>) to <Role2> R
then either (
Wait for message reply_yes(<predicate(P1,P2,...)>) from <Role2> R
then know[ <predicate(P1,P2,...)>]
) or (
Wait for message reply_no from <Role2> R ).
To be a <Role2>:
Wait for message ask(<predicate>) from <Role1> R
then either (
if elicit[<predicate(P1,P2,...)>] then
Send message reply_yes(<predicate(P1,P2,...)>) to <Role1> R
) or (
if elicit[not(<predicate(P1,P2,...)>)] then
Send message reply_no to <Role1> R ).
10. CyberMadre → ASK[have_food(name:String,quantity:Int,giver:ID)] → Giver
To be a Cybermadre:
if elicit[hasRole(R,Giver)] then Send message ask(have_food) to Giver R
then either (
Wait for message reply_yes(have_food(N,Q,ID)) from Giver R
then know[ have_food(N,Q,ID) ]
) or (
Wait for message reply_no from Giver R ).
To be a Giver:
Wait for message ask(have_food) from Cybermadre R
then either (
if elicit[have_food(N,Q,ID)] then
Send message reply_yes(have_food(N,Q,ID)) to Cybermadre R
) or (
if elicit[not(have_food(N,Q,ID))] then
Send message reply_no to Cybermadre R ).
14. Behind the scenes: Composition
Giver → SIGN_UP[] → CyberMadre
+
CyberMadre → ASK_ALL[have_food(name,quantity,giver)] →
Giver
+
CyberMadre → RESERVE[food(name,quantity,giver)] → Giver
=
???
● Need composition semantics + alignment of e/k’s
15. CyberMadre → ASK_ALL[have_food(name,quantity,giver)] →
Giver
+ CyberMadre → RESERVE[food(name,quantity,giver)] → GiverTo be a CyberMadre: if getListOfRole(L,Giver) then Play role Asker(L).
To be a Asker(L):
either (
if L = [R|T] and hasRole(R,Giver) then Send message ask(have_food) to Giver R then
either (
Wait for message reply_yes(have_food(Name,Quantity,ID)) from Giver R then
Know have_food(Name,Quantity,ID) then
if hasRole(R,Giver) and reserve(food(Name,Quantity,R)) and not(reserved(food(Name,Quantity,R))) then
Send message reserve(food(Name,Quantity,R)) to Giver R then
either (
Wait for message reserved(food(Name,Quantity,R)) from Giver R then
Know reserved(food(Name,Quantity,R))
) or (
Wait for message failed from Giver R
)
) or ( Wait for message reply_no from Giver R then
Play role Asker(T))
) or ( if L = [] then Know not(have_food) ).
To be a Giver:
Wait for message ask(have_food) from CyberMadre R then
either (
if have_food(Name,Quantity,ID) then Send message reply_yes(have_food(Name,Quantity,ID)) to CyberMadre R then
Wait for message reserve(food(Name,Quantity,ID)) from CyberMadre R then
either (
if reserve(food(Name,Quantity,ID)) and not(reserved(food(Name,Quantity,ID))) then
Send message reserved(food(Name,Quantity,ID)) to CyberMadre Rtthen
Knowreserved(food(Name,Quantity,ID))
) or ( if not(reserve(food(Name,Quantity,ID))) then Send message failed to CyberMadre R
) or ( if reserved(food(Name,Quantity,ID)) then Send message failed to CyberMadre R )
) or ( if not(have_food(Name,Quantity,ID)) then Send message reply_no to CyberMadre R ).
16. CyberMadre → ASK_ALL[have_food(name,quantity,giver)] →
Giver
+ CyberMadre → RESERVE[food(name,quantity,giver)] → GiverTo be a CyberMadre: if getListOfRole(L,Giver) then Play role Asker(L).
To be a Asker(L):
either (
if L = [R|T] and hasRole(R,Giver) then Send message ask(have_food) to Giver R then
either (
Wait for message reply_yes(have_food(Name,Quantity,ID)) from Giver R then
Know have_food(Name,Quantity,ID) then
if hasRole(R,Giver) and reserve(food(Name,Quantity,R)) and not(reserved(food(Name,Quantity,R))) then
Send message reserve(food(Name,Quantity,R)) to Giver R then
either (
Wait for message reserved(food(Name,Quantity,R)) from Giver R then
Know reserved(food(Name,Quantity,R))
) or (
Wait for message failed from Giver R
)
) or ( Wait for message reply_no from Giver R then
Play role Asker(T))
) or ( if L = [] then Know not(have_food) ).
To be a Giver:
Wait for message ask(have_food) from CyberMadre R then
either (
if have_food(Name,Quantity,ID) then Send message reply_yes(have_food(Name,Quantity,ID)) to CyberMadre R
then
Wait for message reserve(food(Name,Quantity,ID)) from CyberMadre R then
either (
if reserve(food(Name,Quantity,ID)) and not(reserved(food(Name,Quantity,ID))) then
Send message reserved(food(Name,Quantity,ID)) to CyberMadre Rtthen
Know reserved(food(Name,Quantity,ID))
) or ( if not(reserve(food(Name,Quantity,ID))) then Send message failed to CyberMadre R
17. Step 5: derive data model (automatic)
k(Giver(name))
k(DeliveryPerson(name, location))
k(HungryPerson(name, location))
k(FoodAvailable(description, date, Giver))
k(Reserve(FoodAvailable))
k(Delivery(date,time,FoodAvailable,DeliveryPerson))
18. Step 5: derive data model (automatic)
k(Giver(name))
k(DeliveryPerson(name, location))
k(HungryPerson(name, location))
k(FoodAvailable(description, date, Giver))
k(Reserve(FoodAvailable))
k(Delivery(date,time,FoodAvailable,DeliveryPerson))
Giver
name
19. Step 5: derive data model (automatic)
k(Giver(name))
k(DeliveryPerson(name, location))
k(HungryPerson(name, location))
k(FoodAvailable(description, date, Giver))
k(Reserve(FoodAvailable))
k(Delivery(date,time,FoodAvailable,DeliveryPerson))
FoodAvailable
descr date
Giver
name
20. Step 5: derive data model (automatic)
k(Giver(name))
k(DeliveryPerson(name, location))
k(HungryPerson(name, location))
k(FoodAvailable(description, date, Giver))
k(Reserve(FoodAvailable))
k(Delivery(date,time,FoodAvailable,DeliveryPerson))
FoodAvailable
descr date
GiverReserve
name
21. Step 5: derive data model (automatic)
k(Giver(name))
k(DeliveryPerson(name, location))
k(HungryPerson(name, location))
k(FoodAvailable(description, date, Giver))
k(Reserve(FoodAvailable))
k(Delivery(date,time,FoodAvailable,DeliveryPerson))
HungryPerson
name location
FoodAvailable
descr date
GiverReserve
Delivery
Person
Delivery
date
name
22. Step 6: Generating agents
● Which are bots and which are people?
○ Autonomous agents (all e and k automated)
○ Interface agents (some manual e, some storage of k)
→ automatically generated UIs
○ Humans (connected via… web interface, twitter, etc ?)
automation
24. More questions to be addressed
What about decentralization?
Access control ?
How do agents know about each other?
25. Where to store the information?
Who needs to know about what?
FoodAvailable
descr date
Giver
Reserve
Madres will need to e(FoodAvailable(X)) in order to
decide to reserve it and schedule a delivery.
Madre
Giver Givers need to know that
food is reserved so they don’t
throw it out.
28. Access Control and protocol composition
The Reputation Issue (™)
Giver
Giver
SIGN UP
ASK
(Food)
29. Access Control and protocol composition
The Reputation Issue (™)
Giver
Giver
SIGN UP
Reputation
ASK
(Food)
30. Access Control and protocol composition
The Reputation Issue (™)
Giver
Giver
SIGN UP
Reputation
Unreputable
Giver
Reputable
Giver → Use predicate isReputableGiver(...) with
custom definition to trigger ASK
ASK
(Food)
32. Where to store the information?
Who needs to know about what?
HungryPerson
name location
FoodAvailable
descr date
GiverReserve
Delivery
Person
Delivery
date
33. Where to store the information?
Who needs to know about what?
HungryPerson
name location
FoodAvailable
descr date
GiverReserve
Delivery
Person
Delivery
date
Madres will need to e(FoodAvailable(X)) in order to decide to
reserve it and schedule a delivery.
Madre
34. Where to store the information?
Who needs to know about what?
HungryPerson
name location
FoodAvailable
descr date
GiverReserve
Delivery
Person
Delivery
date
Madres will need to e(FoodAvailable(X)) in order to decide to
reserve it and schedule a delivery.
Madre
Delivery People need to e(Delivery(., ME,..)) related to
themselves to know when to actually deliver the food
DeliveryPerson
35. How do agents know about each other?
Which actors are described in the system?
=> data model tells us about some (HungryPerson, DeliveryPerson, Giver).
=> actors with access control (Madres) presumably have accounts. They might
be automatically notified by a centralized system: Givers/Informants need to
know about CyberMadres Central, who then transfers all information to all
Madres.
=> Add Actor (central system) and protocol: if system is told X, system
broadcasts X to all Madres.
Hinweis der Redaktion
(=>manually select which ones need accounts, which ones need to be described in the “system” (data storage) [e.g. hungry people must be described but don’t need accounts])
(for others (informants?), perhaps allow for protocols to be initiated via email, twitter…)
(vague) proposal: There are two issues:
- One is annotating the people’s description with annotations (like marking food as reserved, only marking people as having different achievements, possibly aggregated by a bot)
- The other is relevant to access control : create more than one role and make the reputation bot move people between roles.
(vague) proposal: There are two issues:
- One is annotating the people’s description with annotations (like marking food as reserved, only marking people as having different achievements, possibly aggregated by a bot)
- The other is relevant to access control : create more than one role and make the reputation bot move people between roles.
(vague) proposal: There are two issues:
- One is annotating the people’s description with annotations (like marking food as reserved, only marking people as having different achievements, possibly aggregated by a bot)
- The other is relevant to access control : create more than one role and make the reputation bot move people between roles.
(vague) proposal: There are two issues:
- One is annotating the people’s description with annotations (like marking food as reserved, only marking people as having different achievements, possibly aggregated by a bot)
- The other is relevant to access control : create more than one role and make the reputation bot move people between roles.