Skip to content

Translation Alloy to Electrum: Bad Parenthizing #65

@esb-dev

Description

@esb-dev

Hi,

Im using Electrum Analyzer 2.1 (forked from Alloy Analyzer 5.1) built 2021-04-21T14:18:04.241Z

The following example shows that the parenthizing seems to be not correct in the generated Electrod code:

open util/graph[Node]
abstract sig Node {
	neighbors: set Node, 
	var parent: lone Node,
	var inbox: set Node 
}

one sig INode extends Node {} -- Initiator
sig PNode extends Node {}     -- Paricipant


fact {
	noSelfLoops[neighbors]     -- irreflexive
	undirected[neighbors]      -- undirected
	rootedAt[neighbors, INode] -- connected with initiator
}

pred skip {
	parent' = parent
	inbox' = inbox
}
	
pred init {
	no parent and no inbox
}

pred broadcast[n, fp: Node] {
	let to = n.neighbors - fp {
		all q: to | q.inbox' = q.inbox + n
		all u: (Node - to) - n | u.inbox' = u.inbox // observe the parenthesis here
		n.inbox' = n.inbox - fp 
	} 
}

pred initiate {
	init
	broadcast[INode, INode]
	parent' = parent
}

pred forward {
	some n: PNode, msg: Node | {
			no n.parent and msg in n.inbox
			parent' = parent ++ n->msg
			broadcast[n, msg] // shouild not send to future parent
	}
}

fact { 
	init
	always {
		initiate or
		forward or
    skip
	}
} 

run { eventually some parent } for exactly 4 Node

/* generated file for Electrod
lines 74 - 77

   (all broadcast_u: (this##INode + this##PNode) - (forward_n . 
    this##Node#neighbors) - forward_msg - forward_n { 
     (broadcast_u . (this##Node#inbox)' ) = (broadcast_u . this##Node#inbox)
     }) and 

corresponding to Node - n.neighbors - msg - n  -- which is not correct

but should be:

   (all broadcast_u: ((this##INode + this##PNode) - (forward_n . 
    this##Node#neighbors - forward_msg)) - forward_n { 
     (broadcast_u . (this##Node#inbox)' ) = (broadcast_u . this##Node#inbox)
     }) and 

corresponding to (Node - (n.neighbors - msg)) - n -- which is correct
*/

Sorry that I don't have a shorter example.

Kind regards,
Burkhardt Renz

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions