Skip to content

Commit 5a0087d

Browse files
lukaszczCopilot
andauthored
fix: check for at least one message in object RL (#108)
- Closes #106 --------- Co-authored-by: Copilot <[email protected]>
1 parent ecb7af5 commit 5a0087d

File tree

3 files changed

+14
-9
lines changed

3 files changed

+14
-9
lines changed

AVM/Class/Translation/Logics.lean

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -67,18 +67,23 @@ private def Method.Message.logicFun
6767
&& Logic.checkResourcesPersistent consumedResObjs
6868
&& Logic.checkResourcesPersistent createdResObjs
6969

70-
/-- The class logic checks if all consumed messages in the action correspond
71-
to class members and the single consumed object is the receiver. -/
70+
/-- The class logic checks if all consumed messages in the action correspond to
71+
class members, the single consumed object is the receiver, and there is
72+
at least one message. -/
7273
private def logicFun {lab : Ecosystem.Label} {classId : lab.ClassId} (cl : Class classId) (args : Logic.Args) : Bool :=
7374
let try self : Object classId.label := Object.fromResource args.self
7475
check cl.invariant self args
7576
match args.status with
7677
| Created => true
7778
| Consumed =>
7879
let consumedMessageResources : List Anoma.Resource := Logic.selectMessageResources args.consumed
80+
let nMessages := consumedMessageResources.length
7981
let! [consumedObjectResource] : List Anoma.Resource := Logic.selectObjectResources args.consumed
8082
let try consumedObject : Object classId.label := Object.fromResource consumedObjectResource
81-
consumedMessageResources.length + 1 == (Logic.filterOutDummy args.consumed).length
83+
-- NOTE: consumedObject == self by definition of Logic.Args; we only check
84+
-- that there are no other consumed objects
85+
nMessages >= 1
86+
&& nMessages + 1 == (Logic.filterOutDummy args.consumed).length
8287
&& consumedMessageResources.all fun res =>
8388
let try msg : Message classId.label := Message.fromResource res
8489
consumedObject.uid == msg.recipient

AVM/Logic.lean

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ def checkResourcesPersistent (resources : List Anoma.Resource) : Bool :=
3434
Logic.filterOutDummy resources |>.all Anoma.Resource.isPersistent
3535

3636
def selectObjectResources.{u, v} (resources : List Anoma.Resource.{u, v}) : List Anoma.Resource.{u, v} :=
37-
resources.filter Resource.isSomeObject.{u, v, v}
37+
resources.filter Resource.isSomeObject.{u, v}
3838

3939
def selectMessageResources.{u, v} (resources : List Anoma.Resource.{u, v}) : List Anoma.Resource.{u, v} :=
4040
resources.filter Resource.isSomeMessage

AVM/Object.lean

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -106,13 +106,13 @@ def Object.fromResource
106106
data := ⟨res.quantity, value.privateFields⟩,
107107
nonce := res.nonce }
108108

109-
def SomeObject.fromResource
110-
(res : Anoma.Resource)
111-
: Option SomeObject :=
109+
def SomeObject.fromResource.{u, v}
110+
(res : Anoma.Resource.{u, v})
111+
: Option SomeObject.{max u v + 1} :=
112112
let try resLab : Object.Resource.Label := tryCast res.label
113113
let lab : Class.Label := resLab.classLabel
114114
let try obj := @Object.fromResource lab res
115115
some {label := lab, object := obj}
116116

117-
def Resource.isSomeObject.{u, v, w} (res : Anoma.Resource.{u, v}) : Bool :=
118-
Option.isSome (SomeObject.fromResource.{u, v, w} res)
117+
def Resource.isSomeObject.{u, v} (res : Anoma.Resource.{u, v}) : Bool :=
118+
Option.isSome (SomeObject.fromResource.{u, v} res)

0 commit comments

Comments
 (0)