Thanks to visit codestin.com
Credit goes to github.com

Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 4 additions & 3 deletions AVM/Class/Translation/Logics.lean
Original file line number Diff line number Diff line change
Expand Up @@ -102,10 +102,11 @@ private def logicFun
| Consumed =>
let consumedObjectResources : List Anoma.Resource := Logic.selectObjectResources args.consumed
let! [consumedMessageResource] := Logic.selectMessageResources args.consumed
-- Note: the success of the `try` below ensures that the message is "legal"
-- for the consumed objects - it is from the same ecosystem
let try msg : Message lab := Message.fromResource consumedMessageResource
let recipients := msg.recipients.toList
self.uid ∈ recipients
&& recipients.length == consumedObjectResources.length
self.uid ∈ msg.recipients
&& msg.recipients.length == consumedObjectResources.length
-- Note that the message logics already check if the consumed object
-- resources have the right form, i.e., correspond to the self / selves. We
-- only need to check that the number of recipients is equal to the number
Expand Down
22 changes: 12 additions & 10 deletions AVM/Class/Translation/Messages.lean
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ def Constructor.message
logicRef := Constructor.Message.logic.{0, 0} constr |>.reference
vals,
args,
recipients := List.Vector.singleton newId }
recipients := [newId] }

def Destructor.message
{lab : Ecosystem.Label}
Expand All @@ -37,7 +37,7 @@ def Destructor.message
logicRef := Destructor.Message.logic.{0, 0} destr |>.reference
vals
args
recipients := List.Vector.singleton selfId }
recipients := [selfId] }

def Method.message
{lab : Ecosystem.Label}
Expand All @@ -54,7 +54,7 @@ def Method.message
logicRef := Method.Message.logic.{0, 0} method |>.reference
vals
args
recipients := List.Vector.singleton selfId }
recipients := [selfId] }

def Upgrade.message
{lab : Ecosystem.Label}
Expand All @@ -67,7 +67,7 @@ def Upgrade.message
Vals := ⟨PUnit⟩
vals := PUnit.unit
args := .unit
recipients := List.Vector.singleton selfId }
recipients := [selfId] }

end AVM.Class

Expand All @@ -79,15 +79,17 @@ def MultiMethod.message
(method : MultiMethod multiId)
(selves : multiId.Selves)
(args : multiId.Args.type)
(body : Program lab (MultiMethodResult multiId))
(vals : body.params.Product)
(Vals : SomeType)
(vals : Vals.type)
(data : MultiMethodData)
(rands : MultiMethodRandoms data)
: Message lab :=
let res : MultiMethodResult multiId := body.value vals
let data := res.data
{ id := .multiMethodId multiId
logicRef := MultiMethod.Message.logic.{0, 0} method data |>.reference
data
Vals := ⟨body.params.Product⟩
Vals
vals
args
recipients := Label.MultiMethodId.SelvesToVector selves (fun obj => obj.uid) }
recipients :=
(Label.MultiMethodId.SelvesToVector selves (fun obj => obj.uid) |>.toList)
++ rands.constructedNonces.toList.map (·.value) }
16 changes: 8 additions & 8 deletions AVM/Class/Translation/Tasks.lean
Original file line number Diff line number Diff line change
Expand Up @@ -104,14 +104,14 @@ private partial def Body.task'
(body : Program lab α)
(cont : α → AdjustFun → Tasks (TasksResult .empty β))
(mkActionData : β → ActionData)
(mkMessage : body.params.Product → SomeMessage)
(mkMessage : body.params.Product → β → SomeMessage)
: Task' :=
let tasks : Tasks (TasksResult body.params β) :=
Body.tasks' adjust eco body cont
let task :=
Tasks.composeWithMessage
tasks
(fun res => mkMessage res.bodyParameterValues)
(fun res => mkMessage res.bodyParameterValues res.value)
(fun res => mkActionData res.value)
let mkAdjust (vals : task.params.Product) : AdjustFun :=
let res := tasks.value (Tasks.coerce vals)
Expand Down Expand Up @@ -153,7 +153,7 @@ private partial def Class.Constructor.task'
[CreatedObject.fromSomeObject newObj (ephemeral := false) (rand := r)]
{ consumed := [consumedObj]
created := createdObjects }
let mkMessage (vals : body.params.Product) : SomeMessage :=
let mkMessage (vals : body.params.Product) _ : SomeMessage :=
constr.message ⟨body.params.Product⟩ vals newId args
Body.task' adjust eco body mkReturn mkActionData mkMessage

Expand All @@ -179,7 +179,7 @@ private partial def Class.Destructor.task'
rand := r }]
{ consumed := [consumedObj]
created := createdObjects }
let mkMessage (vals : body.params.Product) : SomeMessage :=
let mkMessage (vals : body.params.Product) _ : SomeMessage :=
destructor.message ⟨body.params.Product⟩ vals self.uid args
Body.task' adjust eco body mkReturn mkActionData mkMessage

Expand All @@ -206,7 +206,7 @@ private partial def Class.Method.task'
rand := r }
{ consumed := [consumedObj]
created := [createdObject] }
let mkMessage (vals : body.params.Product) : SomeMessage :=
let mkMessage (vals : body.params.Product) _ : SomeMessage :=
method.message ⟨body.params.Product⟩ vals self.uid args
Body.task' adjust eco body mkReturn mkActionData mkMessage

Expand All @@ -228,7 +228,7 @@ private partial def Class.Upgrade.task'
rand := r }
{ consumed := [consumedObj]
created := [createdObject] }
let mkMessage (_ : PUnit) : SomeMessage :=
let mkMessage (_ : PUnit) _ : SomeMessage :=
Class.Upgrade.message classId self.uid
Body.task' adjust eco (.return PUnit.unit) mkReturn mkActionData mkMessage

Expand Down Expand Up @@ -297,8 +297,8 @@ partial def Ecosystem.Label.MultiMethodId.task'
created := reassembled ++ constructed ++ selvesDestroyedEph
ensureUnique := rands.reassembledNewUidNonces.toList }

let mkMessage (vals : body.params.Product) : SomeMessage :=
⟨(eco.multiMethods multiId).message selves args body vals⟩
let mkMessage (vals : body.params.Product) (tasksRes : MultiTasksResult multiId) : SomeMessage :=
⟨(eco.multiMethods multiId).message selves args body.params.Product⟩ vals tasksRes.res.data tasksRes.rands

Body.task' adjust eco body mkResult mkActionData mkMessage

Expand Down
1 change: 1 addition & 0 deletions AVM/Ecosystem/Label/Base.lean
Original file line number Diff line number Diff line change
Expand Up @@ -137,6 +137,7 @@ instance hasBEq {lab : Ecosystem.Label} : BEq (Ecosystem.Label.MemberId lab) whe
| _, multiMethodId _ => false
| classMember c1, classMember c2 => c1 === c2

/-- The number of object arguments (selves) for this member ID. -/
def numObjectArgs {lab : Ecosystem.Label} (memberId : MemberId lab) : Nat :=
match memberId with
| multiMethodId f => f.numObjectArgs
Expand Down
4 changes: 2 additions & 2 deletions AVM/Message/Base.lean
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ structure Message (lab : Ecosystem.Label) : Type 1 where
/-- Extra data. -/
data : id.Data
/-- The recipients of the message. -/
recipients : List.Vector ObjectId id.numObjectArgs
recipients : List ObjectId

instance Message.hasTypeRep (lab : Ecosystem.Label) : TypeRep (Message lab) where
rep := Rep.composite "AVM.Message" [Rep.atomic lab.name]
Expand Down Expand Up @@ -51,7 +51,7 @@ instance : Inhabited SomeMessage where
logicRef := default
id := .classMember (classId := .unit) (.constructorId PUnit.unit),
args := PUnit.unit
recipients := List.Vector.singleton 0 }}
recipients := [] }}

def Message.toSomeMessage {lab : Ecosystem.Label} (msg : Message lab) : SomeMessage :=
{ label := lab, message := msg }
Expand Down