<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<id>tag:www.nabble.com,2006:forum-13992</id>
	<title>Nabble - Alloy Analyzer</title>
	<updated>2008-07-16T10:48:51Z</updated>
	<link rel="self" type="application/atom+xml" href="http://www.nabble.com/Alloy-Analyzer-f13992.xml" />
	<link rel="alternate" type="text/html" href="http://www.nabble.com/Alloy-Analyzer-f13992.html" />
	<subtitle type="html">The &lt;a href=&quot;http://alloy.mit.edu/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;Alloy Analyzer&lt;/a&gt;&amp;nbsp;is a tool developed by the Software Design Group for analyzing models written in Alloy, a simple structural modeling language based on first-order logic.</subtitle>
	
<entry>
	<id>tag:www.nabble.com,2006:post-18493140</id>
	<title>new community website / IMPORTANT</title>
	<published>2008-07-16T10:48:51Z</published>
	<updated>2008-07-16T10:48:51Z</updated>
	<author>
		<name>Daniel Jackson-6</name>
	</author>
	<content type="html">Dear Alloy Listserv Members,
&lt;br&gt;&lt;br&gt;The Yahoo listserv is about to be retired.
&lt;br&gt;&lt;br&gt;A new community website is now open at
&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;a href=&quot;http://alloy.mit.edu/community&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://alloy.mit.edu/community&lt;/a&gt;&lt;br&gt;&lt;br&gt;This has been designed to support the needs of our community better &amp;nbsp;
&lt;br&gt;-- in particular to make it easier for you to get information that &amp;nbsp;
&lt;br&gt;you need, and to share your own materials and contributions with &amp;nbsp;
&lt;br&gt;others. Once you've registered as a member, you can post messages, &amp;nbsp;
&lt;br&gt;upload materials, create a group, etc.
&lt;br&gt;&lt;br&gt;All the existing messages from the Yahoo listserv have been uploaded &amp;nbsp;
&lt;br&gt;to the new site.
&lt;br&gt;&lt;br&gt;We hope you'll find this an improvement, and that you'll make good &amp;nbsp;
&lt;br&gt;use of it. Let us know if you have any ideas about how to improve it.
&lt;br&gt;&lt;br&gt;Yours,
&lt;br&gt;&lt;br&gt;The Alloy Development Team
&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://www.nabble.com/new-community-website---IMPORTANT-tp18493140p18493140.html" />
</entry>

<entry>
	<id>tag:www.nabble.com,2006:post-18424097</id>
	<title>How to detect whether maxium/minimum bound of integer is exceeded?</title>
	<published>2008-07-12T15:00:51Z</published>
	<updated>2008-07-12T15:00:51Z</updated>
	<author>
		<name>wyz854</name>
	</author>
	<content type="html">Hi,
&lt;br&gt;&lt;br&gt;I want to use some integer functions in Alloy, but only within the 
&lt;br&gt;limited boundary. For example, if x+y is less than the maximum atom of 
&lt;br&gt;the current bitwidth, than the function will compute the result, 
&lt;br&gt;otherwise I will use some other signature to hold the value of x+y (as 
&lt;br&gt;some symbolic value). But as mentioned in the document, the integer 
&lt;br&gt;functions will implicitly truncate the result if it overflows. So I can 
&lt;br&gt;not use &amp;quot;add[x, y] &amp;gt; max&amp;quot;, because if will always return true. Is there 
&lt;br&gt;any way to tell whether an integer function produce a overflow result?
&lt;br&gt;Thank you!
&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://www.nabble.com/How-to-detect-whether-maxium-minimum-bound-of-integer-is-exceeded--tp18424097p18424097.html" />
</entry>

<entry>
	<id>tag:www.nabble.com,2006:post-18305290</id>
	<title>Re: How to define transitive closure of tree-like relations for reachability, transitive closure over a formula</title>
	<published>2008-07-06T11:53:46Z</published>
	<updated>2008-07-06T11:53:46Z</updated>
	<author>
		<name>Sharon Goldschlager</name>
	</author>
	<content type="html">Hi Eunsuk,
&lt;br&gt;Many Thanks!!! This creates a random tree, 
&lt;br&gt;For the benefit of other users I've put here the corrected code. Indeed different solvers produce different solutions. 
&lt;br&gt;Users: play with the run command - time increases as parameter of int increases, and the Domain size.
&lt;br&gt;the parameter for int is bit width, default is 4, Domain size should not exceed  (2^(int_size-1))-1, see note 6 on
&lt;br&gt;&lt;a href=&quot;http://alloy.mit.edu/alloy4/quickguide/a4.html&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://alloy.mit.edu/alloy4/quickguide/a4.html&lt;/a&gt;&lt;br&gt;Experiment with the reach function in the evaluator, press Instance, then Evaluator button.
&lt;br&gt;module startFormula
&lt;br&gt;sig Domain {}
&lt;br&gt;fact { #Domain &amp;gt; 6 }  // &amp;lt;============= Setting domain size
&lt;br&gt;// for predicate root[v] - whether v is root of tree.
&lt;br&gt;sig root_id12'Sig in Domain { }
&lt;br&gt;pred root_id12(v1:Domain) {
&lt;br&gt;  v1 in root_id12'Sig
&lt;br&gt;}
&lt;br&gt;//True iff node is reachable from root node.
&lt;br&gt;sig r'root'_id17'Sig in Domain { }
&lt;br&gt;pred r'root'_id17(v1:Domain) {
&lt;br&gt;  v1 in r'root'_id17'Sig
&lt;br&gt;}
&lt;br&gt;//True iff v2 is imediate right child of v1.
&lt;br&gt;sig right_id15'Sig in Domain { right_id15'f: set Domain }
&lt;br&gt;pred right_id15(v1:right_id15'Sig,v2:Domain)  {
&lt;br&gt;  v2 in v1.right_id15'f
&lt;br&gt;}
&lt;br&gt;//True iff v2 is imediate left child of v1.
&lt;br&gt;sig left_id16'Sig in Domain { left_id16'f: set Domain }
&lt;br&gt;pred left_id16(v1:left_id16'Sig,v2:Domain)  {
&lt;br&gt;  v2 in v1.left_id16'f
&lt;br&gt;}
&lt;br&gt;pred solveFormula { 
&lt;br&gt;//start forcing a Tree
&lt;br&gt;// some node is root
&lt;br&gt;(some v1:Domain|root_id12[v1] ) &amp;&amp; 
&lt;br&gt;// every node is either a root or pointed by a left or right of another node
&lt;br&gt;(all v1:Domain |  root_id12[v1] ||  (some v2:Domain |left_id16[v2,v1] || right_id15[v2,v1])) &amp;&amp; 
&lt;br&gt;//no two nodes connected by both left and right !!XXX Only if remarked there's solution
&lt;br&gt;//(all v1:Domain,v2:Domain| left_id16[v1,v2] =&amp;gt;!(right_id15[v1,v2])) &amp;&amp; 
&lt;br&gt;// no self loops
&lt;br&gt;(all v1:Domain,v2:Domain| left_id16[v1,v2] =&amp;gt; !(v1==v2)) &amp;&amp;
&lt;br&gt;(all v1:Domain,v2:Domain| right_id15[v1,v2] =&amp;gt; !(v1==v2)) &amp;&amp;
&lt;br&gt;//there's a fork, it's a real tree, not a list
&lt;br&gt;(some v1:Domain,v2:Domain,v3:Domain| left_id16[v1,v2] &amp;&amp;  right_id15[v1,v3] ) &amp;&amp;
&lt;br&gt;//no node points to root
&lt;br&gt;(all v1:Domain,v2:Domain|!(root_id12[v1] &amp;&amp;  (left_id16[v2,v1] || right_id15[v2,v1]))) &amp;&amp; 
&lt;br&gt;// no mutual pointing
&lt;br&gt;(all v1:Domain,v2:Domain| left_id16[v1,v2] =&amp;gt; ! left_id16[v2,v1]) &amp;&amp; 
&lt;br&gt;(all v1:Domain,v2:Domain| right_id15[v1,v2] =&amp;gt; ! right_id15[v2,v1]) &amp;&amp; 
&lt;br&gt;// a node may be pointed only once.
&lt;br&gt;(all v1:Domain,v2:Domain,v3:Domain| (left_id16[v1,v2] &amp;&amp; left_id16[v3,v2]) =&amp;gt; v1==v3) &amp;&amp;
&lt;br&gt;(all v1:Domain,v2:Domain,v3:Domain| (right_id15[v1,v2] &amp;&amp; right_id15[v3,v2]) =&amp;gt;v1==v3) &amp;&amp;
&lt;br&gt;(all v1:Domain,v2:Domain,v3:Domain| left_id16[v1,v2] =&amp;gt; ! right_id15[v3,v2]) &amp;&amp;
&lt;br&gt;(all v1:Domain,v2:Domain,v3:Domain| right_id15[v1,v2] =&amp;gt;! left_id16[v3,v2]) &amp;&amp;
&lt;br&gt;// all nodes are in the same tree
&lt;br&gt;(all v1:Domain|some v2:Domain| root_id12[v2] &amp;&amp; v1 in reach[v2]) &amp;&amp; 
&lt;br&gt;// no cycles 
&lt;br&gt;( no v1:Domain| v1 in v1.^n'ftc0) &amp;&amp;
&lt;br&gt;//end forcing a Tree
&lt;br&gt;//root[v] holds for at most a single node.
&lt;br&gt;(
&lt;br&gt; all  v2:Domain,v1:Domain|((root_id12[v1] &amp;&amp; root_id12[v2]) =&amp;gt; (v1 == v2)))
&lt;br&gt;&amp;&amp; (
&lt;br&gt; all  v2:Domain|(
&lt;br&gt;( some  v1:Domain|(root_id12[v1] &amp;&amp; ( ! (v1 == v2)))) =&amp;gt; ( ! root_id12[v2])))
&lt;br&gt;&amp;&amp; 
&lt;br&gt;// right is a pointer.
&lt;br&gt;(
&lt;br&gt; all  v2:Domain,v1:Domain|(
&lt;br&gt;( some  v:Domain|(right_id15[v,v1] &amp;&amp; right_id15[v,v2])) =&amp;gt; (v1 == v2))) &amp;&amp; (
&lt;br&gt; all  v2:Domain,v:Domain|(
&lt;br&gt;( some  v1:Domain|(right_id15[v,v1] &amp;&amp; ( ! (v1 == v2)))) =&amp;gt; ( ! right_id15[v,v2]))) &amp;&amp; (
&lt;br&gt;//left is a pointer.
&lt;br&gt; all  v2:Domain,v1:Domain|(
&lt;br&gt;( some  v:Domain|(left_id16[v,v1] &amp;&amp; left_id16[v,v2])) =&amp;gt; (v1 == v2))) &amp;&amp; (
&lt;br&gt; all  v2:Domain,v:Domain|(
&lt;br&gt;( some  v1:Domain|(left_id16[v,v1] &amp;&amp; ( ! (v1 == v2)))) =&amp;gt; ( ! left_id16[v,v2]))) &amp;&amp;
&lt;br&gt;//definition of r'root
&lt;br&gt;( all  v:Domain|((root_id12[v] || 
&lt;br&gt;( some  z___v2:Domain|(root_id12[z___v2] &amp;&amp; tcFormula'TC[z___v2,v]))) =&amp;gt; r'root'_id17[v])) &amp;&amp;
&lt;br&gt; ( all  v:Domain|(( ! (root_id12[v] || 
&lt;br&gt;( some  z___v2:Domain|(root_id12[z___v2] &amp;&amp; tcFormula'TC[z___v2,v]))))) =&amp;gt; ( ! r'root'_id17[v]))
&lt;br&gt;}
&lt;br&gt;sig tcFormula'Sig in Domain { n'ftc0: set Domain }
&lt;br&gt;fact tcFact { all v1:Domain,v2:Domain|  (left_id16[v1,v2] ||  right_id15[v1,v2]) &amp;lt;=&amp;gt; (v1 in tcFormula'Sig &amp;&amp; v2 in v1. n'ftc0) }
&lt;br&gt;// is there a path between v1 and v2 on tree.
&lt;br&gt;pred tcFormula'TC(v1:tcFormula'Sig, v2:Domain) {
&lt;br&gt;   v2 in  v1.^n'ftc0
&lt;br&gt;}
&lt;br&gt;fun reach(v1:Domain): Domain {
&lt;br&gt;   v1 +  v1.^n'ftc0
&lt;br&gt;}
&lt;br&gt;run solveFormula for 10 Domain, 4 int expect 1 
&lt;br&gt;Sharon
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;----- Original Message ----
&lt;br&gt;From: Eunsuk Kang &amp;lt;&lt;a href=&quot;http://www.nabble.com/user/SendEmail.jtp?type=post&amp;post=18305290&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;eskang@...&lt;/a&gt;&amp;gt;
&lt;br&gt;To: &lt;a href=&quot;http://www.nabble.com/user/SendEmail.jtp?type=post&amp;post=18305290&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;alloy-discuss@...&lt;/a&gt;
&lt;br&gt;Sent: Sunday, July 6, 2008 2:13:02 AM
&lt;br&gt;Subject: Re: [alloy-discuss] How to define transitive closure of tree-like relations for reachability, transitive closure over a formula
&lt;br&gt;&lt;br&gt;&lt;br&gt;Hi Sharon,
&lt;br&gt;&lt;br&gt;The following constraint in pred solveFormula was causing a 
&lt;br&gt;contradiction in your model:
&lt;br&gt;&lt;br&gt;// right is a pointer.
&lt;br&gt;....
&lt;br&gt;( some v1:Domain|(right_ id15[v,v1] &amp;&amp; ( ! (v1 == v2)))) =&amp;gt; ( ! 
&lt;br&gt;left_id16[v, v2]))) &amp;&amp; ....
&lt;br&gt;&lt;br&gt;If you replace :left_id16[v, v2]&amp;quot; with &amp;quot;right_id15[ v,v2]&amp;quot;, Alloy 
&lt;br&gt;generates an instance:
&lt;br&gt;&lt;br&gt;( some v1:Domain|(right_ id15[v,v1] &amp;&amp; ( ! (v1 == v2)))) =&amp;gt; ( ! 
&lt;br&gt;right_id15[v, v2]))) &amp;&amp; (
&lt;br&gt;&lt;br&gt;In general, if Alloy does not produce any instance, unsat core can be 
&lt;br&gt;very useful in determining
&lt;br&gt;the set of constraints that led to a contradiction. To enable unsat 
&lt;br&gt;core, select Menu -&amp;gt; Options -&amp;gt;
&lt;br&gt;Sat Solver: MiniSat with Unsat Core.
&lt;br&gt;&lt;br&gt;In your example, an unsat core returned from Alloy highlighted a small 
&lt;br&gt;subset of constraints in
&lt;br&gt;pred solveFormula, from which I was able to locate the above overconstraint.
&lt;br&gt;&lt;br&gt;Eunsuk
&lt;br&gt;&lt;br&gt;Sharon G. wrote:
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; Hi,
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; How do I define reachability of a binary tree, each node having a 
&lt;br&gt;&amp;gt; left, right fields. Please see example below. Eventually I'd like 
&lt;br&gt;&amp;gt; Alloy to generate a tree structure, and have predicate 
&lt;br&gt;&amp;gt; tcFormula'TC( v1,v2) ==True iff there is a path on tree between v1 and 
&lt;br&gt;&amp;gt; v2 (assuming v1!=v2).
&lt;br&gt;&amp;gt; I'm concerned with how to define the fact tcFact - is it correct ?
&lt;br&gt;&amp;gt; Also no solution to this unless I remark the requirement labeled with 
&lt;br&gt;&amp;gt; !!XXX forcing a tree structure.
&lt;br&gt;&amp;gt; How can i force tree structure, and still have tcFormula'TC( v1,v2) 
&lt;br&gt;&amp;gt; correct ?
&lt;br&gt;&amp;gt; I must have a general solution for transitive closure of a formula, 
&lt;br&gt;&amp;gt; since I'm developing a static analysis tool using Alloy as solver.
&lt;br&gt;&amp;gt; In this example the formula like TC(left_id16[ v1,v2] || 
&lt;br&gt;&amp;gt; right_id15[v1, v2])(w1,w2) .
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; module startFormula
&lt;br&gt;&amp;gt; sig Domain {}
&lt;br&gt;&amp;gt; fact { #Domain &amp;gt; 4 }
&lt;br&gt;&amp;gt; // for predicate root[v] - whether v is root of tree.
&lt;br&gt;&amp;gt; sig root_id12'Sig in Domain { }
&lt;br&gt;&amp;gt; pred root_id12(v1: Domain) {
&lt;br&gt;&amp;gt; v1 in root_id12'Sig
&lt;br&gt;&amp;gt; }
&lt;br&gt;&amp;gt; //True iff node is reachable from root node.
&lt;br&gt;&amp;gt; sig r'root'_id17' Sig in Domain { }
&lt;br&gt;&amp;gt; pred r'root'_id17( v1:Domain) {
&lt;br&gt;&amp;gt; v1 in r'root'_id17' Sig
&lt;br&gt;&amp;gt; }
&lt;br&gt;&amp;gt; //True iff v2 is imediate right child of v1.
&lt;br&gt;&amp;gt; sig right_id15'Sig in Domain { right_id15'f: set Domain }
&lt;br&gt;&amp;gt; pred right_id15(v1: right_id15' Sig,v2:Domain) {
&lt;br&gt;&amp;gt; v2 in v1.right_id15' f
&lt;br&gt;&amp;gt; }
&lt;br&gt;&amp;gt; //True iff v2 is imediate left child of v1.
&lt;br&gt;&amp;gt; sig left_id16'Sig in Domain { left_id16'f: set Domain }
&lt;br&gt;&amp;gt; pred left_id16(v1: left_id16' Sig,v2:Domain) {
&lt;br&gt;&amp;gt; v2 in v1.left_id16' f
&lt;br&gt;&amp;gt; }
&lt;br&gt;&amp;gt; pred solveFormula {
&lt;br&gt;&amp;gt; //start forcing a Tree
&lt;br&gt;&amp;gt; // some node is root
&lt;br&gt;&amp;gt; (some v1:Domain|root_ id12[v1] ) &amp;&amp;
&lt;br&gt;&amp;gt; // every node is either a root or pointed by a left or right of 
&lt;br&gt;&amp;gt; another node
&lt;br&gt;&amp;gt; (all v1:Domain | root_id12[v1] || (some v2:Domain |left_id16[v2, v1] 
&lt;br&gt;&amp;gt; || right_id15[v2, v1])) &amp;&amp;
&lt;br&gt;&amp;gt; //no two nodes connected by both left and right !!XXX Only if 
&lt;br&gt;&amp;gt; remarked there's solution
&lt;br&gt;&amp;gt; (all v1:Domain,v2: Domain| left_id16[v1, v2] =&amp;gt;!(right_id15[ v1,v2])) &amp;&amp;
&lt;br&gt;&amp;gt; // no self loops
&lt;br&gt;&amp;gt; (all v1:Domain,v2: Domain| left_id16[v1, v2] =&amp;gt; !(v1==v2)) &amp;&amp;
&lt;br&gt;&amp;gt; (all v1:Domain,v2: Domain| right_id15[v1, v2] =&amp;gt; !(v1==v2)) &amp;&amp;
&lt;br&gt;&amp;gt; //there's a fork, it's a real tree, not a list
&lt;br&gt;&amp;gt; (some v1:Domain,v2: Domain,v3: Domain| left_id16[v1, v2] &amp;&amp; 
&lt;br&gt;&amp;gt; right_id15[v1, v3] ) &amp;&amp;
&lt;br&gt;&amp;gt; //no node points to root
&lt;br&gt;&amp;gt; (all v1:Domain,v2: Domain|!( root_id12[ v1] &amp;&amp; (left_id16[v2, v1] || 
&lt;br&gt;&amp;gt; right_id15[v2, v1]))) &amp;&amp;
&lt;br&gt;&amp;gt; // no mutual pointing
&lt;br&gt;&amp;gt; (all v1:Domain,v2: Domain| left_id16[v1, v2] =&amp;gt; ! left_id16[v2, v1]) &amp;&amp;
&lt;br&gt;&amp;gt; (all v1:Domain,v2: Domain| right_id15[v1, v2] =&amp;gt; ! right_id15[v2, v1]) &amp;&amp;
&lt;br&gt;&amp;gt; //end forcing a Tree
&lt;br&gt;&amp;gt; //root[v] holds for at most a single node.
&lt;br&gt;&amp;gt; (
&lt;br&gt;&amp;gt; all v2:Domain,v1: Domain|(( root_id12[ v1] &amp;&amp; root_id12[v2] ) =&amp;gt; (v1 == 
&lt;br&gt;&amp;gt; v2)))
&lt;br&gt;&amp;gt; &amp;&amp; (
&lt;br&gt;&amp;gt; all v2:Domain|(
&lt;br&gt;&amp;gt; ( some v1:Domain|(root_ id12[v1] &amp;&amp; ( ! (v1 == v2)))) =&amp;gt; ( ! 
&lt;br&gt;&amp;gt; root_id12[v2] )))
&lt;br&gt;&amp;gt; &amp;&amp;
&lt;br&gt;&amp;gt; // right is a pointer.
&lt;br&gt;&amp;gt; (
&lt;br&gt;&amp;gt; all v2:Domain,v1: Domain|(
&lt;br&gt;&amp;gt; ( some v:Domain|(right_ id15[v,v1] &amp;&amp; right_id15[v, v2])) =&amp;gt; (v1 == 
&lt;br&gt;&amp;gt; v2))) &amp;&amp; (
&lt;br&gt;&amp;gt; all v2:Domain,v: Domain|(
&lt;br&gt;&amp;gt; ( some v1:Domain|(right_ id15[v,v1] &amp;&amp; ( ! (v1 == v2)))) =&amp;gt; ( ! 
&lt;br&gt;&amp;gt; left_id16[v, v2]))) &amp;&amp; (
&lt;br&gt;&amp;gt; //left is a pointer.
&lt;br&gt;&amp;gt; all v2:Domain,v1: Domain|(
&lt;br&gt;&amp;gt; ( some v:Domain|(left_ id16[v,v1] &amp;&amp; left_id16[v, v2])) =&amp;gt; (v1 == v2))) 
&lt;br&gt;&amp;gt; &amp;&amp; (
&lt;br&gt;&amp;gt; all v2:Domain,v: Domain|(
&lt;br&gt;&amp;gt; ( some v1:Domain|(left_ id16[v,v1] &amp;&amp; ( ! (v1 == v2)))) =&amp;gt; ( ! 
&lt;br&gt;&amp;gt; left_id16[v, v2]))) &amp;&amp;
&lt;br&gt;&amp;gt; //definition of r'root
&lt;br&gt;&amp;gt; ( all v:Domain|((root_ id12[v] ||
&lt;br&gt;&amp;gt; ( some z___v2:Domain| (root_id12[ z___v2] &amp;&amp; tcFormula'TC[ z___v2,v] ))) 
&lt;br&gt;&amp;gt; =&amp;gt; r'root'_id17[ v])) &amp;&amp;
&lt;br&gt;&amp;gt; ( all v:Domain|(( ! (root_id12[v] ||
&lt;br&gt;&amp;gt; ( some z___v2:Domain| (root_id12[ z___v2] &amp;&amp; 
&lt;br&gt;&amp;gt; tcFormula'TC[ z___v2,v] ))))) =&amp;gt; ( ! r'root'_id17[ v]))
&lt;br&gt;&amp;gt; }
&lt;br&gt;&amp;gt; sig tcFormula'Sig in Domain { n'ftc0: set Domain }
&lt;br&gt;&amp;gt; fact tcFact { all v1:Domain,v2: Domain| (left_id16[v1, v2] || 
&lt;br&gt;&amp;gt; right_id15[v1, v2]) &amp;lt;=&amp;gt; (v1 in tcFormula'Sig &amp;&amp; v2 in v1. n'ftc0) }
&lt;br&gt;&amp;gt; // no cycles
&lt;br&gt;&amp;gt; fact { no v1:Domain| v1 in v1.^n'ftc0}
&lt;br&gt;&amp;gt; // is there a path between v1 and v2 on tree.
&lt;br&gt;&amp;gt; pred tcFormula'TC( v1:tcFormula' Sig, v2:Domain) {
&lt;br&gt;&amp;gt; v2 in v1.^n'ftc0
&lt;br&gt;&amp;gt; }
&lt;br&gt;&amp;gt; //reflexive transitive reachability
&lt;br&gt;&amp;gt; fun reach(v1:Domain) : Domain {
&lt;br&gt;&amp;gt; v1 + v1.^n'ftc0
&lt;br&gt;&amp;gt; }
&lt;br&gt;&amp;gt; run solveFormula for 7 Domain expect 1 
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; Many Thanks,
&lt;br&gt;&amp;gt; Sharon
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; 
&lt;/div&gt;&lt;br&gt;&amp;nbsp;
&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; </content>
	<link rel="alternate" type="text/html" href="http://www.nabble.com/How-to-define-transitive-closure-of-tree-like-relations-for-reachability%2C-transitive-closure-over-a-formula-tp18296409p18305290.html" />
</entry>

<entry>
	<id>tag:www.nabble.com,2006:post-18297714</id>
	<title>Re: How to define transitive closure of tree-like relations for reachability, transitive closure over a formula</title>
	<published>2008-07-05T17:13:02Z</published>
	<updated>2008-07-05T17:13:02Z</updated>
	<author>
		<name>Eunsuk Kang</name>
	</author>
	<content type="html">Hi Sharon,
&lt;br&gt;&lt;br&gt;The following constraint in pred solveFormula was causing a 
&lt;br&gt;contradiction in your model:
&lt;br&gt;&lt;br&gt;// right is a pointer.
&lt;br&gt;....
&lt;br&gt;( some &amp;nbsp;v1:Domain|(right_id15[v,v1] &amp;&amp; ( ! (v1 == v2)))) =&amp;gt; ( ! 
&lt;br&gt;left_id16[v,v2]))) &amp;&amp; ....
&lt;br&gt;&lt;br&gt;If you replace :left_id16[v, v2]&amp;quot; with &amp;quot;right_id15[v,v2]&amp;quot;, Alloy 
&lt;br&gt;generates an instance:
&lt;br&gt;&lt;br&gt;( some &amp;nbsp;v1:Domain|(right_id15[v,v1] &amp;&amp; ( ! (v1 == v2)))) =&amp;gt; ( ! 
&lt;br&gt;right_id15[v,v2]))) &amp;&amp; (
&lt;br&gt;&lt;br&gt;In general, if Alloy does not produce any instance, unsat core can be 
&lt;br&gt;very useful in determining
&lt;br&gt;the set of constraints that led to a contradiction. To enable unsat 
&lt;br&gt;core, select Menu -&amp;gt; Options -&amp;gt;
&lt;br&gt;Sat Solver: MiniSat with Unsat Core.
&lt;br&gt;&lt;br&gt;In your example, an unsat core returned from Alloy highlighted a small 
&lt;br&gt;subset of constraints in
&lt;br&gt;pred solveFormula, from which I was able to locate the above overconstraint.
&lt;br&gt;&lt;br&gt;Eunsuk
&lt;br&gt;&lt;br&gt;Sharon G. wrote:
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; Hi,
&lt;br&gt;&amp;gt; &amp;nbsp;
&lt;br&gt;&amp;gt; How do I define reachability of a binary tree, each node having a 
&lt;br&gt;&amp;gt; left, right fields. Please see example below. Eventually I'd like 
&lt;br&gt;&amp;gt; Alloy to generate a tree structure, and have predicate 
&lt;br&gt;&amp;gt; tcFormula'TC(v1,v2) ==True iff there is a path on tree between v1 and 
&lt;br&gt;&amp;gt; v2 (assuming v1!=v2).
&lt;br&gt;&amp;gt; I'm concerned with how to define the fact tcFact - is it correct ?
&lt;br&gt;&amp;gt; Also no solution to this unless I remark the requirement labeled with 
&lt;br&gt;&amp;gt; !!XXX forcing a tree structure.
&lt;br&gt;&amp;gt; How can i force tree structure, and still have tcFormula'TC(v1,v2) 
&lt;br&gt;&amp;gt; correct ?
&lt;br&gt;&amp;gt; I must have a general solution for transitive closure of a formula, 
&lt;br&gt;&amp;gt; since I'm developing a static analysis tool using Alloy as solver.
&lt;br&gt;&amp;gt; In this example the formula like TC(left_id16[v1,v2] || &amp;nbsp;
&lt;br&gt;&amp;gt; right_id15[v1,v2])(w1,w2).
&lt;br&gt;&amp;gt; &amp;nbsp;
&lt;br&gt;&amp;gt; module startFormula
&lt;br&gt;&amp;gt; sig Domain {}
&lt;br&gt;&amp;gt; fact { #Domain &amp;gt; 4 }
&lt;br&gt;&amp;gt; // for predicate root[v] - whether v is root of tree.
&lt;br&gt;&amp;gt; sig root_id12'Sig in Domain { }
&lt;br&gt;&amp;gt; pred root_id12(v1:Domain) {
&lt;br&gt;&amp;gt; &amp;nbsp; v1 in root_id12'Sig
&lt;br&gt;&amp;gt; }
&lt;br&gt;&amp;gt; //True iff node is reachable from root node.
&lt;br&gt;&amp;gt; sig r'root'_id17'Sig in Domain { }
&lt;br&gt;&amp;gt; pred r'root'_id17(v1:Domain) {
&lt;br&gt;&amp;gt; &amp;nbsp; v1 in r'root'_id17'Sig
&lt;br&gt;&amp;gt; }
&lt;br&gt;&amp;gt; //True iff v2 is imediate right child of v1.
&lt;br&gt;&amp;gt; sig right_id15'Sig in Domain { right_id15'f: set Domain }
&lt;br&gt;&amp;gt; pred right_id15(v1:right_id15'Sig,v2:Domain) &amp;nbsp;{
&lt;br&gt;&amp;gt; &amp;nbsp; v2 in v1.right_id15'f
&lt;br&gt;&amp;gt; }
&lt;br&gt;&amp;gt; //True iff v2 is imediate left child of v1.
&lt;br&gt;&amp;gt; sig left_id16'Sig in Domain { left_id16'f: set Domain }
&lt;br&gt;&amp;gt; pred left_id16(v1:left_id16'Sig,v2:Domain) &amp;nbsp;{
&lt;br&gt;&amp;gt; &amp;nbsp; v2 in v1.left_id16'f
&lt;br&gt;&amp;gt; }
&lt;br&gt;&amp;gt; pred solveFormula {
&lt;br&gt;&amp;gt; //start forcing a Tree
&lt;br&gt;&amp;gt; // some node is root
&lt;br&gt;&amp;gt; (some v1:Domain|root_id12[v1] ) &amp;&amp;
&lt;br&gt;&amp;gt; // every node is either a root or pointed by a left or right of 
&lt;br&gt;&amp;gt; another node
&lt;br&gt;&amp;gt; (all v1:Domain | &amp;nbsp;root_id12[v1] || &amp;nbsp;(some v2:Domain |left_id16[v2,v1] 
&lt;br&gt;&amp;gt; || right_id15[v2,v1])) &amp;&amp;
&lt;br&gt;&amp;gt; //no two nodes connected by both left and right &amp;nbsp;!!XXX Only if 
&lt;br&gt;&amp;gt; remarked there's solution
&lt;br&gt;&amp;gt; (all v1:Domain,v2:Domain| left_id16[v1,v2] =&amp;gt;!(right_id15[v1,v2])) &amp;&amp;
&lt;br&gt;&amp;gt; // no self loops
&lt;br&gt;&amp;gt; (all v1:Domain,v2:Domain| left_id16[v1,v2] =&amp;gt; !(v1==v2)) &amp;&amp;
&lt;br&gt;&amp;gt; (all v1:Domain,v2:Domain| right_id15[v1,v2] =&amp;gt; !(v1==v2)) &amp;&amp;
&lt;br&gt;&amp;gt; //there's a fork, it's a real tree, not a list
&lt;br&gt;&amp;gt; (some v1:Domain,v2:Domain,v3:Domain| left_id16[v1,v2] &amp;&amp; &amp;nbsp;
&lt;br&gt;&amp;gt; right_id15[v1,v3] ) &amp;&amp;
&lt;br&gt;&amp;gt; //no node points to root
&lt;br&gt;&amp;gt; (all v1:Domain,v2:Domain|!(root_id12[v1] &amp;&amp; &amp;nbsp;(left_id16[v2,v1] || 
&lt;br&gt;&amp;gt; right_id15[v2,v1]))) &amp;&amp;
&lt;br&gt;&amp;gt; // no mutual pointing
&lt;br&gt;&amp;gt; (all v1:Domain,v2:Domain| left_id16[v1,v2] =&amp;gt; ! left_id16[v2,v1]) &amp;&amp;
&lt;br&gt;&amp;gt; (all v1:Domain,v2:Domain| right_id15[v1,v2] =&amp;gt; ! right_id15[v2,v1]) &amp;&amp;
&lt;br&gt;&amp;gt; //end forcing a Tree
&lt;br&gt;&amp;gt; //root[v] holds for at most a single node.
&lt;br&gt;&amp;gt; (
&lt;br&gt;&amp;gt; &amp;nbsp;all &amp;nbsp;v2:Domain,v1:Domain|((root_id12[v1] &amp;&amp; root_id12[v2]) =&amp;gt; (v1 == 
&lt;br&gt;&amp;gt; v2)))
&lt;br&gt;&amp;gt; &amp;&amp; (
&lt;br&gt;&amp;gt; &amp;nbsp;all &amp;nbsp;v2:Domain|(
&lt;br&gt;&amp;gt; ( some &amp;nbsp;v1:Domain|(root_id12[v1] &amp;&amp; ( ! (v1 == v2)))) =&amp;gt; ( ! 
&lt;br&gt;&amp;gt; root_id12[v2])))
&lt;br&gt;&amp;gt; &amp;&amp;
&lt;br&gt;&amp;gt; // right is a pointer.
&lt;br&gt;&amp;gt; (
&lt;br&gt;&amp;gt; &amp;nbsp;all &amp;nbsp;v2:Domain,v1:Domain|(
&lt;br&gt;&amp;gt; ( some &amp;nbsp;v:Domain|(right_id15[v,v1] &amp;&amp; right_id15[v,v2])) =&amp;gt; (v1 == 
&lt;br&gt;&amp;gt; v2))) &amp;&amp; (
&lt;br&gt;&amp;gt; &amp;nbsp;all &amp;nbsp;v2:Domain,v:Domain|(
&lt;br&gt;&amp;gt; ( some &amp;nbsp;v1:Domain|(right_id15[v,v1] &amp;&amp; ( ! (v1 == v2)))) =&amp;gt; ( ! 
&lt;br&gt;&amp;gt; left_id16[v,v2]))) &amp;&amp; (
&lt;br&gt;&amp;gt; //left is a pointer.
&lt;br&gt;&amp;gt; &amp;nbsp;all &amp;nbsp;v2:Domain,v1:Domain|(
&lt;br&gt;&amp;gt; ( some &amp;nbsp;v:Domain|(left_id16[v,v1] &amp;&amp; left_id16[v,v2])) =&amp;gt; (v1 == v2))) 
&lt;br&gt;&amp;gt; &amp;&amp; (
&lt;br&gt;&amp;gt; &amp;nbsp;all &amp;nbsp;v2:Domain,v:Domain|(
&lt;br&gt;&amp;gt; ( some &amp;nbsp;v1:Domain|(left_id16[v,v1] &amp;&amp; ( ! (v1 == v2)))) =&amp;gt; ( ! 
&lt;br&gt;&amp;gt; left_id16[v,v2]))) &amp;&amp;
&lt;br&gt;&amp;gt; //definition of r'root
&lt;br&gt;&amp;gt; ( all &amp;nbsp;v:Domain|((root_id12[v] ||
&lt;br&gt;&amp;gt; ( some &amp;nbsp;z___v2:Domain|(root_id12[z___v2] &amp;&amp; tcFormula'TC[z___v2,v]))) 
&lt;br&gt;&amp;gt; =&amp;gt; r'root'_id17[v])) &amp;&amp;
&lt;br&gt;&amp;gt; &amp;nbsp;( all &amp;nbsp;v:Domain|(( ! (root_id12[v] ||
&lt;br&gt;&amp;gt; ( some &amp;nbsp;z___v2:Domain|(root_id12[z___v2] &amp;&amp; 
&lt;br&gt;&amp;gt; tcFormula'TC[z___v2,v]))))) =&amp;gt; ( ! r'root'_id17[v]))
&lt;br&gt;&amp;gt; }
&lt;br&gt;&amp;gt; sig tcFormula'Sig in Domain { n'ftc0: set Domain }
&lt;br&gt;&amp;gt; fact tcFact { all v1:Domain,v2:Domain| &amp;nbsp;(left_id16[v1,v2] || &amp;nbsp;
&lt;br&gt;&amp;gt; right_id15[v1,v2]) &amp;lt;=&amp;gt; (v1 in tcFormula'Sig &amp;&amp; v2 in v1. n'ftc0) }
&lt;br&gt;&amp;gt; // no cycles
&lt;br&gt;&amp;gt; fact { no v1:Domain| v1 in v1.^n'ftc0}
&lt;br&gt;&amp;gt; // is there a path between v1 and v2 on tree.
&lt;br&gt;&amp;gt; pred tcFormula'TC(v1:tcFormula'Sig, v2:Domain) {
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;v2 in &amp;nbsp;v1.^n'ftc0
&lt;br&gt;&amp;gt; }
&lt;br&gt;&amp;gt; //reflexive transitive reachability
&lt;br&gt;&amp;gt; fun reach(v1:Domain): Domain {
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;v1 + &amp;nbsp;v1.^n'ftc0
&lt;br&gt;&amp;gt; }
&lt;br&gt;&amp;gt; run solveFormula for 7 Domain expect 1 &amp;nbsp;
&lt;br&gt;&amp;gt; &amp;nbsp;
&lt;br&gt;&amp;gt; Many Thanks,
&lt;br&gt;&amp;gt; Sharon
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp;
&lt;/div&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://www.nabble.com/How-to-define-transitive-closure-of-tree-like-relations-for-reachability%2C-transitive-closure-over-a-formula-tp18296409p18297714.html" />
</entry>

<entry>
	<id>tag:www.nabble.com,2006:post-18296443</id>
	<title>Displaying Alloy optimizations impact</title>
	<published>2008-07-05T14:28:18Z</published>
	<updated>2008-07-05T14:28:18Z</updated>
	<author>
		<name>Sharon Goldschlager</name>
	</author>
	<content type="html">Hi,
&lt;br&gt;I'd like to show Alloy indeed helps in solving problems faster.
&lt;br&gt;How can I see the number of variables and clauses before and after Alloy optimizations ? 
&lt;br&gt;Many Thanks,
&lt;br&gt;Sharon
&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; </content>
	<link rel="alternate" type="text/html" href="http://www.nabble.com/Displaying-Alloy-optimizations-impact-tp18296443p18296443.html" />
</entry>

<entry>
	<id>tag:www.nabble.com,2006:post-18296409</id>
	<title>How to define transitive closure of tree-like relations for reachability, transitive closure over a formula</title>
	<published>2008-07-05T14:23:01Z</published>
	<updated>2008-07-05T14:23:01Z</updated>
	<author>
		<name>Sharon Goldschlager</name>
	</author>
	<content type="html">Hi,
&lt;br&gt;How do I define reachability of a binary tree, each node having a left, right fields. Please see example below. Eventually I'd like Alloy to generate a tree structure, and have predicate tcFormula'TC(v1,v2) ==True iff there is a path on tree between v1 and v2 (assuming v1!=v2).
&lt;br&gt;I'm concerned with how to define the fact tcFact - is it correct ? 
&lt;br&gt;Also no solution to this unless I remark the requirement labeled with !!XXX forcing a tree structure.
&lt;br&gt;How can i force tree structure, and still have tcFormula'TC(v1,v2) correct ? 
&lt;br&gt;I must have a general solution for transitive closure of a formula, since I'm developing a static analysis tool using Alloy as solver. 
&lt;br&gt;In this example the formula like TC(left_id16[v1,v2] ||  right_id15[v1,v2])(w1,w2).
&lt;br&gt;module startFormula
&lt;br&gt;sig Domain {}
&lt;br&gt;fact { #Domain &amp;gt; 4 }
&lt;br&gt;// for predicate root[v] - whether v is root of tree.
&lt;br&gt;sig root_id12'Sig in Domain { }
&lt;br&gt;pred root_id12(v1:Domain) {
&lt;br&gt;  v1 in root_id12'Sig
&lt;br&gt;}
&lt;br&gt;//True iff node is reachable from root node.
&lt;br&gt;sig r'root'_id17'Sig in Domain { }
&lt;br&gt;pred r'root'_id17(v1:Domain) {
&lt;br&gt;  v1 in r'root'_id17'Sig
&lt;br&gt;}
&lt;br&gt;//True iff v2 is imediate right child of v1.
&lt;br&gt;sig right_id15'Sig in Domain { right_id15'f: set Domain }
&lt;br&gt;pred right_id15(v1:right_id15'Sig,v2:Domain)  {
&lt;br&gt;  v2 in v1.right_id15'f
&lt;br&gt;}
&lt;br&gt;//True iff v2 is imediate left child of v1.
&lt;br&gt;sig left_id16'Sig in Domain { left_id16'f: set Domain }
&lt;br&gt;pred left_id16(v1:left_id16'Sig,v2:Domain)  {
&lt;br&gt;  v2 in v1.left_id16'f
&lt;br&gt;}
&lt;br&gt;pred solveFormula { 
&lt;br&gt;//start forcing a Tree
&lt;br&gt;// some node is root
&lt;br&gt;(some v1:Domain|root_id12[v1] ) &amp;&amp; 
&lt;br&gt;// every node is either a root or pointed by a left or right of another node
&lt;br&gt;(all v1:Domain |  root_id12[v1] ||  (some v2:Domain |left_id16[v2,v1] || right_id15[v2,v1])) &amp;&amp; 
&lt;br&gt;//no two nodes connected by both left and right  !!XXX Only if remarked there's solution
&lt;br&gt;(all v1:Domain,v2:Domain| left_id16[v1,v2] =&amp;gt;!(right_id15[v1,v2])) &amp;&amp; 
&lt;br&gt;// no self loops
&lt;br&gt;(all v1:Domain,v2:Domain| left_id16[v1,v2] =&amp;gt; !(v1==v2)) &amp;&amp;
&lt;br&gt;(all v1:Domain,v2:Domain| right_id15[v1,v2] =&amp;gt; !(v1==v2)) &amp;&amp;
&lt;br&gt;//there's a fork, it's a real tree, not a list
&lt;br&gt;(some v1:Domain,v2:Domain,v3:Domain| left_id16[v1,v2] &amp;&amp;  right_id15[v1,v3] ) &amp;&amp;
&lt;br&gt;//no node points to root
&lt;br&gt;(all v1:Domain,v2:Domain|!(root_id12[v1] &amp;&amp;  (left_id16[v2,v1] || right_id15[v2,v1]))) &amp;&amp; 
&lt;br&gt;// no mutual pointing
&lt;br&gt;(all v1:Domain,v2:Domain| left_id16[v1,v2] =&amp;gt; ! left_id16[v2,v1]) &amp;&amp; 
&lt;br&gt;(all v1:Domain,v2:Domain| right_id15[v1,v2] =&amp;gt; ! right_id15[v2,v1]) &amp;&amp; 
&lt;br&gt;//end forcing a Tree
&lt;br&gt;//root[v] holds for at most a single node.
&lt;br&gt;(
&lt;br&gt; all  v2:Domain,v1:Domain|((root_id12[v1] &amp;&amp; root_id12[v2]) =&amp;gt; (v1 == v2)))
&lt;br&gt;&amp;&amp; (
&lt;br&gt; all  v2:Domain|(
&lt;br&gt;( some  v1:Domain|(root_id12[v1] &amp;&amp; ( ! (v1 == v2)))) =&amp;gt; ( ! root_id12[v2])))
&lt;br&gt;&amp;&amp; 
&lt;br&gt;// right is a pointer.
&lt;br&gt;(
&lt;br&gt; all  v2:Domain,v1:Domain|(
&lt;br&gt;( some  v:Domain|(right_id15[v,v1] &amp;&amp; right_id15[v,v2])) =&amp;gt; (v1 == v2))) &amp;&amp; (
&lt;br&gt; all  v2:Domain,v:Domain|(
&lt;br&gt;( some  v1:Domain|(right_id15[v,v1] &amp;&amp; ( ! (v1 == v2)))) =&amp;gt; ( ! left_id16[v,v2]))) &amp;&amp; (
&lt;br&gt;//left is a pointer.
&lt;br&gt; all  v2:Domain,v1:Domain|(
&lt;br&gt;( some  v:Domain|(left_id16[v,v1] &amp;&amp; left_id16[v,v2])) =&amp;gt; (v1 == v2))) &amp;&amp; (
&lt;br&gt; all  v2:Domain,v:Domain|(
&lt;br&gt;( some  v1:Domain|(left_id16[v,v1] &amp;&amp; ( ! (v1 == v2)))) =&amp;gt; ( ! left_id16[v,v2]))) &amp;&amp;
&lt;br&gt;//definition of r'root
&lt;br&gt;( all  v:Domain|((root_id12[v] || 
&lt;br&gt;( some  z___v2:Domain|(root_id12[z___v2] &amp;&amp; tcFormula'TC[z___v2,v]))) =&amp;gt; r'root'_id17[v])) &amp;&amp;
&lt;br&gt; ( all  v:Domain|(( ! (root_id12[v] || 
&lt;br&gt;( some  z___v2:Domain|(root_id12[z___v2] &amp;&amp; tcFormula'TC[z___v2,v]))))) =&amp;gt; ( ! r'root'_id17[v]))
&lt;br&gt;}
&lt;br&gt;sig tcFormula'Sig in Domain { n'ftc0: set Domain }
&lt;br&gt;fact tcFact { all v1:Domain,v2:Domain|  (left_id16[v1,v2] ||  right_id15[v1,v2]) &amp;lt;=&amp;gt; (v1 in tcFormula'Sig &amp;&amp; v2 in v1. n'ftc0) }
&lt;br&gt;// no cycles
&lt;br&gt;fact { no v1:Domain| v1 in v1.^n'ftc0}
&lt;br&gt;// is there a path between v1 and v2 on tree.
&lt;br&gt;pred tcFormula'TC(v1:tcFormula'Sig, v2:Domain) {
&lt;br&gt;   v2 in  v1.^n'ftc0
&lt;br&gt;}
&lt;br&gt;//reflexive transitive reachability
&lt;br&gt;fun reach(v1:Domain): Domain {
&lt;br&gt;   v1 +  v1.^n'ftc0
&lt;br&gt;}
&lt;br&gt;run solveFormula for 7 Domain expect 1  
&lt;br&gt;Many Thanks,
&lt;br&gt;Sharon
&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; </content>
	<link rel="alternate" type="text/html" href="http://www.nabble.com/How-to-define-transitive-closure-of-tree-like-relations-for-reachability%2C-transitive-closure-over-a-formula-tp18296409p18296409.html" />
</entry>

<entry>
	<id>tag:www.nabble.com,2006:post-18291594</id>
	<title>Re: How does the Analyzer slice Alloy models?</title>
	<published>2008-07-05T04:55:00Z</published>
	<updated>2008-07-05T04:55:00Z</updated>
	<author>
		<name>Felix Chang-2</name>
	</author>
	<content type="html">On Sat, 5 Jul 2008, ikarus1983de wrote:
&lt;br&gt;&amp;gt; I'm looking for some information (e.g. technical report) on how an
&lt;br&gt;&amp;gt; Alloy model is reduced / sliced before the analysis.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; I know about the work on the Kato-Tool by Ilya Shlyakhter et. al. but
&lt;br&gt;&amp;gt; up to my knowledge this isn't integrated into Alloy (or Kodkod) yet.
&lt;br&gt;&amp;gt; Furthermore, I'd like to know if Alloy does stuff like &amp;quot;signature x is
&lt;br&gt;&amp;gt; not used for check y, thus remove x for the analysis of y&amp;quot;.
&lt;br&gt;&lt;br&gt;Dear Christian:
&lt;br&gt;&lt;br&gt;There is currently no technical report on Alloy4's translation yet,
&lt;br&gt;but I will write it soon as part of my thesis.
&lt;br&gt;&lt;br&gt;To answer your question, since Alloy translates the user problem into
&lt;br&gt;a single CNF problem, that means &amp;quot;each predicate call&amp;quot; adds to
&lt;br&gt;the final CNF, and unused predicates are completely omitted.
&lt;br&gt;&lt;br&gt;Several optimizations include: 1) calls to the same predicates
&lt;br&gt;with the same actual arguments are merged, so that if you call
&lt;br&gt;the same predicate from multiple places in your model with the
&lt;br&gt;same arguments, then the cost is borne only once. &amp;nbsp;2) Even between
&lt;br&gt;two calls with different arguments, identical subformulas and
&lt;br&gt;subexpressions are merged (&amp;quot;shared&amp;quot;) to further reduce the cost.
&lt;br&gt;&lt;br&gt;Sincerely,
&lt;br&gt;Felix Chang
&lt;br&gt;Alloy4 Developer
&lt;br&gt;&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://www.nabble.com/How-does-the-Analyzer-slice-Alloy-models--tp18290663p18291594.html" />
</entry>

<entry>
	<id>tag:www.nabble.com,2006:post-18290663</id>
	<title>How does the Analyzer slice Alloy models?</title>
	<published>2008-07-05T02:56:28Z</published>
	<updated>2008-07-05T02:56:28Z</updated>
	<author>
		<name>ikarus1983de</name>
	</author>
	<content type="html">Hi,
&lt;br&gt;&lt;br&gt;I'm looking for some information (e.g. technical report) on how an
&lt;br&gt;Alloy model is reduced / sliced before the analysis.
&lt;br&gt;&lt;br&gt;I know about the work on the Kato-Tool by Ilya Shlyakhter et. al. but
&lt;br&gt;up to my knowledge this isn't integrated into Alloy (or Kodkod) yet.
&lt;br&gt;Furthermore, I'd like to know if Alloy does stuff like &amp;quot;signature x is
&lt;br&gt;not used for check y, thus remove x for the analysis of y&amp;quot;.
&lt;br&gt;&lt;br&gt;Any help or hint is appreciated.
&lt;br&gt;&lt;br&gt;Best regards,
&lt;br&gt;Christian
&lt;br&gt;&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://www.nabble.com/How-does-the-Analyzer-slice-Alloy-models--tp18290663p18290663.html" />
</entry>

<entry>
	<id>tag:www.nabble.com,2006:post-18290634</id>
	<title>How does the Analyzer slice Alloy models?</title>
	<published>2008-07-05T02:53:18Z</published>
	<updated>2008-07-05T02:53:18Z</updated>
	<author>
		<name>ikarus1983de</name>
	</author>
	<content type="html">Hi,
&lt;br&gt;&lt;br&gt;I'm looking for some information (e.g. technical report) on how an
&lt;br&gt;Alloy model is reduced / sliced before the analysis.
&lt;br&gt;&lt;br&gt;I know about the work on the Kato-Tool by Ilya Shlyakhter et. al. but
&lt;br&gt;up to my knowledge this isn't integrated into Alloy (or Kodkod) yet.
&lt;br&gt;Furthermore, I'd like to know if Alloy does stuff like &amp;quot;predicate x is
&lt;br&gt;not used for check y, thus remove x for the analysis of y&amp;quot;.
&lt;br&gt;&lt;br&gt;Any help or hint is appreciated.
&lt;br&gt;&lt;br&gt;Best regards,
&lt;br&gt;Christian
&lt;br&gt;&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://www.nabble.com/How-does-the-Analyzer-slice-Alloy-models--tp18290634p18290634.html" />
</entry>

<entry>
	<id>tag:www.nabble.com,2006:post-18282159</id>
	<title>Re: haw to declare integers</title>
	<published>2008-07-04T09:00:21Z</published>
	<updated>2008-07-04T09:00:21Z</updated>
	<author>
		<name>Daniel Jackson-6</name>
	</author>
	<content type="html">Felix,
&lt;br&gt;&lt;br&gt;You do a fantastic job in replying to queries. But seeing some of the &amp;nbsp;
&lt;br&gt;replies to the last discussion, it occurs to me that you might want &amp;nbsp;
&lt;br&gt;to hold off on some more basic questions to encourage other people to &amp;nbsp;
&lt;br&gt;answer.
&lt;br&gt;&lt;br&gt;--Daniel
&lt;br&gt;&lt;br&gt;On Jun 25, 2008, at 5:31 PM, Felix Chang wrote:
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; On Wed, 25 Jun 2008, ylayouni wrote:
&lt;br&gt;&amp;gt;&amp;gt; please i want to manipulate integer, for example :
&lt;br&gt;&amp;gt;&amp;gt; sig user { check_ : set machine}
&lt;br&gt;&amp;gt;&amp;gt; sig machine { temperature: int} // this is wrong !
&lt;br&gt;&amp;gt;&amp;gt; sig machine1 extends machine{}
&lt;br&gt;&amp;gt;&amp;gt;
&lt;br&gt;&amp;gt;&amp;gt; fact {
&lt;br&gt;&amp;gt;&amp;gt; all u: user | machine.temperature &amp;gt;10 =&amp;gt; u.check_= machine
&lt;br&gt;&amp;gt;&amp;gt; }
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; The lowercase &amp;quot;int&amp;quot; refers to a &amp;quot;2's complement&amp;quot; integer.
&lt;br&gt;&amp;gt; So if your model is configured to use a bitwidth of 4, let's say,
&lt;br&gt;&amp;gt; then your model would have integers ranging
&lt;br&gt;&amp;gt; from -8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; (You can set the bitwidth for each &amp;quot;run&amp;quot; and each &amp;quot;check&amp;quot; separately.
&lt;br&gt;&amp;gt; If you write &amp;quot;check someAssertion for 5 int&amp;quot;, that means
&lt;br&gt;&amp;gt; you want to check that assertion with a bitwidth of 5)
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; The uppercase &amp;quot;Int&amp;quot; refers to a set of special atoms
&lt;br&gt;&amp;gt; that correspond to each integer.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Only atoms can belong in relations. &amp;nbsp;So you would write
&lt;br&gt;&amp;gt; &amp;quot;sig machine { temperature: Int }&amp;quot; if you want
&lt;br&gt;&amp;gt; each machine to have an Int atom associated with it.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Note that the conversion between Int and int is very subtle.
&lt;br&gt;&amp;gt; Please search the mailinglist messages for previous discussions,
&lt;br&gt;&amp;gt; and please consult the Alloy3 user manual and/or Prof. Jackson's book.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Sincerely,
&lt;br&gt;&amp;gt; Felix Chang
&lt;br&gt;&amp;gt; Alloy4 Developer
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; ------------------------------------
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Yahoo! Groups Links
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;/div&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://www.nabble.com/haw-to-declare-integers-tp18122047p18282159.html" />
</entry>

<entry>
	<id>tag:www.nabble.com,2006:post-18122179</id>
	<title>Re: haw to declare integers</title>
	<published>2008-06-25T14:31:43Z</published>
	<updated>2008-06-25T14:31:43Z</updated>
	<author>
		<name>Felix Chang-2</name>
	</author>
	<content type="html">On Wed, 25 Jun 2008, ylayouni wrote:
&lt;br&gt;&amp;gt; please i want to manipulate integer, for example :
&lt;br&gt;&amp;gt; sig user { check_ : set machine}
&lt;br&gt;&amp;gt; sig machine { temperature: int} // this is wrong !
&lt;br&gt;&amp;gt; sig machine1 extends machine{}
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; fact {
&lt;br&gt;&amp;gt; all u: user | machine.temperature &amp;gt;10 =&amp;gt; u.check_= machine
&lt;br&gt;&amp;gt; }
&lt;br&gt;&lt;br&gt;The lowercase &amp;quot;int&amp;quot; refers to a &amp;quot;2's complement&amp;quot; integer.
&lt;br&gt;So if your model is configured to use a bitwidth of 4, let's say,
&lt;br&gt;then your model would have integers ranging
&lt;br&gt;from -8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7
&lt;br&gt;&lt;br&gt;(You can set the bitwidth for each &amp;quot;run&amp;quot; and each &amp;quot;check&amp;quot; separately.
&lt;br&gt;If you write &amp;quot;check someAssertion for 5 int&amp;quot;, that means
&lt;br&gt;you want to check that assertion with a bitwidth of 5)
&lt;br&gt;&lt;br&gt;The uppercase &amp;quot;Int&amp;quot; refers to a set of special atoms
&lt;br&gt;that correspond to each integer.
&lt;br&gt;&lt;br&gt;Only atoms can belong in relations. &amp;nbsp;So you would write
&lt;br&gt;&amp;quot;sig machine { temperature: Int }&amp;quot; if you want
&lt;br&gt;each machine to have an Int atom associated with it.
&lt;br&gt;&lt;br&gt;Note that the conversion between Int and int is very subtle.
&lt;br&gt;Please search the mailinglist messages for previous discussions,
&lt;br&gt;and please consult the Alloy3 user manual and/or Prof. Jackson's book.
&lt;br&gt;&lt;br&gt;Sincerely,
&lt;br&gt;Felix Chang
&lt;br&gt;Alloy4 Developer
&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://www.nabble.com/haw-to-declare-integers-tp18122047p18122179.html" />
</entry>

<entry>
	<id>tag:www.nabble.com,2006:post-18122047</id>
	<title>haw to declare integers</title>
	<published>2008-06-25T14:14:35Z</published>
	<updated>2008-06-25T14:14:35Z</updated>
	<author>
		<name>ylayouni</name>
	</author>
	<content type="html">hello,
&lt;br&gt;&lt;br&gt;please i want to manipulate integer, for example :
&lt;br&gt;&lt;br&gt;sig user {
&lt;br&gt;&lt;br&gt;check_ : set machine}
&lt;br&gt;&lt;br&gt;sig machine { temperature: int} // this is wrong !
&lt;br&gt;sig machine1 extends machine{}
&lt;br&gt;&lt;br&gt;fact {
&lt;br&gt;all u: user | machine.temperature &amp;gt;10 =&amp;gt; u.check_= machine
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;thank you,
&lt;br&gt;Yakine
&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://www.nabble.com/haw-to-declare-integers-tp18122047p18122047.html" />
</entry>

<entry>
	<id>tag:www.nabble.com,2006:post-18114671</id>
	<title>Re: how to express condition</title>
	<published>2008-06-25T06:28:41Z</published>
	<updated>2008-06-25T06:28:41Z</updated>
	<author>
		<name>ylayouni</name>
	</author>
	<content type="html">--- In &lt;a href=&quot;http://www.nabble.com/user/SendEmail.jtp?type=post&amp;post=18114671&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;alloy-discuss@...&lt;/a&gt;, &amp;quot;pierrekelsen&amp;quot; 
&lt;br&gt;&amp;lt;pierre.kelsen@...&amp;gt; wrote:
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; --- In &lt;a href=&quot;http://www.nabble.com/user/SendEmail.jtp?type=post&amp;post=18114671&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;alloy-discuss@...&lt;/a&gt;, &amp;quot;Jeremy Jacob&amp;quot;
&lt;br&gt;&amp;gt; &amp;lt;Jeremy.Jacob@&amp;gt; wrote:
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; --- In &lt;a href=&quot;http://www.nabble.com/user/SendEmail.jtp?type=post&amp;post=18114671&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;alloy-discuss@...&lt;/a&gt;, Felix Chang &amp;lt;fschang@&amp;gt; 
&lt;br&gt;wrote:
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; &amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; On Tue, 24 Jun 2008, ylayouni wrote:
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; for all user.Zone=sectionA then those user.state=low
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; i try to do this :
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; fact {
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; user.Zone=sectionA =&amp;gt; user.state=low
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; }
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; 
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; I assume &amp;quot;user&amp;quot; is a signature, perhaps looking like this:
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; 
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; sig user {
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; &amp;nbsp; &amp;nbsp;Zone: ...
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; }
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; 
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; In that case, you need to write your fact like this:
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; 
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; fact {
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; &amp;nbsp; &amp;nbsp;all u: user | u.Zone=sectionA =&amp;gt; u.state=low
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; }
&lt;br&gt;&amp;gt; &amp;gt; 
&lt;br&gt;&amp;gt; &amp;gt; If you don't like quantifiers you could also write:
&lt;br&gt;&amp;gt; &amp;gt; 
&lt;br&gt;&amp;gt; &amp;gt; fact{Zone.sectionA in state.low}
&lt;br&gt;&amp;gt; &amp;gt; 
&lt;br&gt;&amp;gt; &amp;gt; although some people would argue that this is too opaque (a 
&lt;/div&gt;change in
&lt;br&gt;&amp;gt; &amp;gt; the names ou use might fix that).
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; Or use a signature fact:
&lt;br&gt;&amp;gt; sig user {...
&lt;br&gt;&amp;gt; }{ Zone = sectionA =&amp;gt; state=low}
&lt;br&gt;&amp;gt; (also avoids use of quantifiers).
&lt;br&gt;&lt;br&gt;thank you very much 
&lt;br&gt;&lt;br&gt;all u: user | u.Zone=sectionA =&amp;gt; u.state= u.state + low
&lt;br&gt;&lt;br&gt;this is to preserve the old state 
&lt;br&gt;&lt;br&gt;thank you
&lt;br&gt;&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://www.nabble.com/how-to-express-condition-tp18100670p18114671.html" />
</entry>

<entry>
	<id>tag:www.nabble.com,2006:post-18108087</id>
	<title>Re: how to express condition</title>
	<published>2008-06-25T02:14:38Z</published>
	<updated>2008-06-25T02:14:38Z</updated>
	<author>
		<name>pierrekelsen</name>
	</author>
	<content type="html">--- In &lt;a href=&quot;http://www.nabble.com/user/SendEmail.jtp?type=post&amp;post=18108087&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;alloy-discuss@...&lt;/a&gt;, &amp;quot;Jeremy Jacob&amp;quot;
&lt;br&gt;&amp;lt;Jeremy.Jacob@...&amp;gt; wrote:
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; --- In &lt;a href=&quot;http://www.nabble.com/user/SendEmail.jtp?type=post&amp;post=18108087&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;alloy-discuss@...&lt;/a&gt;, Felix Chang &amp;lt;fschang@&amp;gt; wrote:
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; On Tue, 24 Jun 2008, ylayouni wrote:
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; for all user.Zone=sectionA then those user.state=low
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; i try to do this :
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; fact {
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; user.Zone=sectionA =&amp;gt; user.state=low
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; }
&lt;br&gt;&amp;gt; &amp;gt; 
&lt;br&gt;&amp;gt; &amp;gt; I assume &amp;quot;user&amp;quot; is a signature, perhaps looking like this:
&lt;br&gt;&amp;gt; &amp;gt; 
&lt;br&gt;&amp;gt; &amp;gt; sig user {
&lt;br&gt;&amp;gt; &amp;gt; &amp;nbsp; &amp;nbsp;Zone: ...
&lt;br&gt;&amp;gt; &amp;gt; }
&lt;br&gt;&amp;gt; &amp;gt; 
&lt;br&gt;&amp;gt; &amp;gt; In that case, you need to write your fact like this:
&lt;br&gt;&amp;gt; &amp;gt; 
&lt;br&gt;&amp;gt; &amp;gt; fact {
&lt;br&gt;&amp;gt; &amp;gt; &amp;nbsp; &amp;nbsp;all u: user | u.Zone=sectionA =&amp;gt; u.state=low
&lt;br&gt;&amp;gt; &amp;gt; }
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; If you don't like quantifiers you could also write:
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; fact{Zone.sectionA in state.low}
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; although some people would argue that this is too opaque (a change in
&lt;br&gt;&amp;gt; the names ou use might fix that).
&lt;br&gt;&amp;gt;
&lt;/div&gt;&lt;br&gt;Or use a signature fact:
&lt;br&gt;sig user {...
&lt;br&gt;}{ Zone = sectionA =&amp;gt; state=low}
&lt;br&gt;(also avoids use of quantifiers).
&lt;br&gt;&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://www.nabble.com/how-to-express-condition-tp18100670p18108087.html" />
</entry>

<entry>
	<id>tag:www.nabble.com,2006:post-18107931</id>
	<title>Re: how to express condition</title>
	<published>2008-06-25T02:04:49Z</published>
	<updated>2008-06-25T02:04:49Z</updated>
	<author>
		<name>Jeremy Jacob</name>
	</author>
	<content type="html">--- In &lt;a href=&quot;http://www.nabble.com/user/SendEmail.jtp?type=post&amp;post=18107931&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;alloy-discuss@...&lt;/a&gt;, Felix Chang &amp;lt;fschang@...&amp;gt; wrote:
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; On Tue, 24 Jun 2008, ylayouni wrote:
&lt;br&gt;&amp;gt; &amp;gt; for all user.Zone=sectionA then those user.state=low
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; i try to do this :
&lt;br&gt;&amp;gt; &amp;gt; fact {
&lt;br&gt;&amp;gt; &amp;gt; user.Zone=sectionA =&amp;gt; user.state=low
&lt;br&gt;&amp;gt; &amp;gt; }
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; I assume &amp;quot;user&amp;quot; is a signature, perhaps looking like this:
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; sig user {
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;Zone: ...
&lt;br&gt;&amp;gt; }
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; In that case, you need to write your fact like this:
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; fact {
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp;all u: user | u.Zone=sectionA =&amp;gt; u.state=low
&lt;br&gt;&amp;gt; }
&lt;/div&gt;&lt;br&gt;If you don't like quantifiers you could also write:
&lt;br&gt;&lt;br&gt;fact{Zone.sectionA in state.low}
&lt;br&gt;&lt;br&gt;although some people would argue that this is too opaque (a change in
&lt;br&gt;the names ou use might fix that).
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://www.nabble.com/how-to-express-condition-tp18100670p18107931.html" />
</entry>

<entry>
	<id>tag:www.nabble.com,2006:post-18104137</id>
	<title>Re : how to express condition</title>
	<published>2008-06-24T20:07:43Z</published>
	<updated>2008-06-24T20:07:43Z</updated>
	<author>
		<name>ylayouni</name>
	</author>
	<content type="html">what do you think about this 
&lt;br&gt;&lt;a href=&quot;http://www.mac125.com/forums/ftopic41247-0.html&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.mac125.com/forums/ftopic41247-0.html&lt;/a&gt;&lt;br&gt;may be we have to try this 
&lt;br&gt;i love you baby this is just for the jocking 
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;----- Message d'origine ----
&lt;br&gt;De : Rychkova Irina &amp;lt;&lt;a href=&quot;http://www.nabble.com/user/SendEmail.jtp?type=post&amp;post=18104137&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;irina.rychkova@...&lt;/a&gt;&amp;gt;
&lt;br&gt;À : &amp;quot;&lt;a href=&quot;http://www.nabble.com/user/SendEmail.jtp?type=post&amp;post=18104137&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;alloy-discuss@...&lt;/a&gt;&amp;quot; &amp;lt;&lt;a href=&quot;http://www.nabble.com/user/SendEmail.jtp?type=post&amp;post=18104137&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;alloy-discuss@...&lt;/a&gt;&amp;gt;
&lt;br&gt;Envoyé le : Mardi, 24 Juin 2008, 17h56mn 44s
&lt;br&gt;Objet : RE: [alloy-discuss] how to express condition
&lt;br&gt;&lt;br&gt;&lt;br&gt;Try this:
&lt;br&gt;{all user: User | user.Zone = sectionA =&amp;gt; user.state =low
&lt;br&gt;}
&lt;br&gt; 
&lt;br&gt;From:alloy-discuss@ yahoogroups. com [mailto:alloy- discuss@yahoogro ups.com] On Behalf Of ylayouni
&lt;br&gt;Sent: 24 June 2008 23:40
&lt;br&gt;To: alloy-discuss@ yahoogroups. com
&lt;br&gt;Subject: [alloy-discuss] how to express condition
&lt;br&gt; 
&lt;br&gt;Hello Alloy users
&lt;br&gt;&lt;br&gt;please how can we build a condition like this :
&lt;br&gt;&lt;br&gt;for all user.Zone=sectionA then those user.state=low
&lt;br&gt;&lt;br&gt;i try to do this :
&lt;br&gt;fact {
&lt;br&gt;user.Zone=sectionA =&amp;gt; user.state=low
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;but the analyzer dont applies this condiction for all users !!
&lt;br&gt;&lt;br&gt;thank you 
&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; _____________________________________________________________________________ 
&lt;br&gt;Envoyez avec Yahoo! Mail. Une boite mail plus intelligente &lt;a href=&quot;http://mail.yahoo.fr&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://mail.yahoo.fr&lt;/a&gt;</content>
	<link rel="alternate" type="text/html" href="http://www.nabble.com/Re-%3A-how-to-express-condition-tp18104137p18104137.html" />
</entry>

<entry>
	<id>tag:www.nabble.com,2006:post-18100956</id>
	<title>Re: how to express condition</title>
	<published>2008-06-24T14:57:41Z</published>
	<updated>2008-06-24T14:57:41Z</updated>
	<author>
		<name>Felix Chang-2</name>
	</author>
	<content type="html">On Tue, 24 Jun 2008, ylayouni wrote:
&lt;br&gt;&amp;gt; for all user.Zone=sectionA then those user.state=low
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; i try to do this :
&lt;br&gt;&amp;gt; fact {
&lt;br&gt;&amp;gt; user.Zone=sectionA =&amp;gt; user.state=low
&lt;br&gt;&amp;gt; }
&lt;br&gt;&lt;br&gt;I assume &amp;quot;user&amp;quot; is a signature, perhaps looking like this:
&lt;br&gt;&lt;br&gt;sig user {
&lt;br&gt;&amp;nbsp; &amp;nbsp;Zone: ...
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;In that case, you need to write your fact like this:
&lt;br&gt;&lt;br&gt;fact {
&lt;br&gt;&amp;nbsp; &amp;nbsp;all u: user | u.Zone=sectionA =&amp;gt; u.state=low
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;What you wrote doesn't work, because what you wrote only applies
&lt;br&gt;when EVERY user have zone=sectionA. &amp;nbsp;That is, if there is at least
&lt;br&gt;one user whose zone is not sectionA, then your rule doesn't apply!
&lt;br&gt;&lt;br&gt;Sincerely,
&lt;br&gt;Felix Chang
&lt;br&gt;Alloy4 Developer
&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://www.nabble.com/how-to-express-condition-tp18100670p18100956.html" />
</entry>

<entry>
	<id>tag:www.nabble.com,2006:post-18100939</id>
	<title>RE: how to express condition</title>
	<published>2008-06-24T14:56:44Z</published>
	<updated>2008-06-24T14:56:44Z</updated>
	<author>
		<name>Irina Rychkova</name>
	</author>
	<content type="html">Try this:
&lt;br&gt;{all user: User | user.Zone = sectionA =&amp;gt; user.state =low
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;From: &lt;a href=&quot;http://www.nabble.com/user/SendEmail.jtp?type=post&amp;post=18100939&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;alloy-discuss@...&lt;/a&gt; [mailto:&lt;a href=&quot;http://www.nabble.com/user/SendEmail.jtp?type=post&amp;post=18100939&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;alloy-discuss@...&lt;/a&gt;] On Behalf Of ylayouni
&lt;br&gt;Sent: 24 June 2008 23:40
&lt;br&gt;To: &lt;a href=&quot;http://www.nabble.com/user/SendEmail.jtp?type=post&amp;post=18100939&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;alloy-discuss@...&lt;/a&gt;
&lt;br&gt;Subject: [alloy-discuss] how to express condition
&lt;br&gt;&lt;br&gt;&lt;br&gt;Hello Alloy users
&lt;br&gt;&lt;br&gt;please how can we build a condition like this :
&lt;br&gt;&lt;br&gt;for all user.Zone=sectionA then those user.state=low
&lt;br&gt;&lt;br&gt;i try to do this :
&lt;br&gt;fact {
&lt;br&gt;user.Zone=sectionA =&amp;gt; user.state=low
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;but the analyzer dont applies this condiction for all users !!
&lt;br&gt;&lt;br&gt;thank you
&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://www.nabble.com/how-to-express-condition-tp18100670p18100939.html" />
</entry>

<entry>
	<id>tag:www.nabble.com,2006:post-18100670</id>
	<title>how to express condition</title>
	<published>2008-06-24T14:40:29Z</published>
	<updated>2008-06-24T14:40:29Z</updated>
	<author>
		<name>ylayouni</name>
	</author>
	<content type="html">Hello Alloy users
&lt;br&gt;&lt;br&gt;please how can we build a condition like this :
&lt;br&gt;&lt;br&gt;for all user.Zone=sectionA then those user.state=low
&lt;br&gt;&lt;br&gt;i try to do this :
&lt;br&gt;fact {
&lt;br&gt;user.Zone=sectionA =&amp;gt; user.state=low
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;but the analyzer dont applies this condiction for all users !!
&lt;br&gt;&lt;br&gt;thank you
&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://www.nabble.com/how-to-express-condition-tp18100670p18100670.html" />
</entry>

<entry>
	<id>tag:www.nabble.com,2006:post-18091161</id>
	<title>Re: Re: Defining formal semantics using Alloy</title>
	<published>2008-06-24T06:34:31Z</published>
	<updated>2008-06-24T06:34:31Z</updated>
	<author>
		<name>pierrekelsen</name>
	</author>
	<content type="html">Hi,
&lt;br&gt;&lt;br&gt;you expressed interest in our work on formal semantics using Alloy. Here
&lt;br&gt;is the link to a technical report, an expanded version of a paper we &amp;nbsp;
&lt;br&gt;just submitted for publication and which advocates the use of Alloy &amp;nbsp;
&lt;br&gt;for defining the formal semantics using a concrete example language:
&lt;br&gt;&lt;a href=&quot;http://lassy.uni.lu/democles/documentation/TR_LASSY_08_03.pdf&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://lassy.uni.lu/democles/documentation/TR_LASSY_08_03.pdf&lt;/a&gt;&lt;br&gt;&lt;br&gt;Any comments or questions are welcome.
&lt;br&gt;&lt;br&gt;Sincerely,
&lt;br&gt;&lt;br&gt;Pierre Kelsen
&lt;br&gt;&lt;br&gt;PS: You probably got the link already from the Alloy news group.
&lt;br&gt;&lt;br&gt;&lt;br&gt;On Apr 21, 2008, at 10:43 AM, Jeremy Jacob wrote:
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; --- In &lt;a href=&quot;http://www.nabble.com/user/SendEmail.jtp?type=post&amp;post=18091161&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;alloy-discuss@...&lt;/a&gt;, KELSEN Pierre
&lt;br&gt;&amp;gt; &amp;lt;pierre.kelsen@...&amp;gt; wrote:
&lt;br&gt;&amp;gt; &amp;gt; We have by now successfully defined abstract syntax, static
&lt;br&gt;&amp;gt; semantics and dynamic semantics of our modeling language using Alloy.
&lt;br&gt;&amp;gt; &amp;gt; We''ll be writing up soon our results. If you are interested, I'll
&lt;br&gt;&amp;gt; mail you a copy of our paper.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; This is very interesting. I am working on a (traditional)
&lt;br&gt;&amp;gt; denotational semantics in Alloy (first job this AM is to extend
&lt;br&gt;&amp;gt; expressions from Booleans to Naturals).
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Would you publish the location of the paper here, please?
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;nbsp;###########################################
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; This message has been scanned by F-Secure Anti-Virus for Microsoft &amp;nbsp;
&lt;br&gt;&amp;gt; Exchange.
&lt;br&gt;&amp;gt; For more information, connect to &lt;a href=&quot;http://www.f-secure.com/&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://www.f-secure.com/&lt;/a&gt;&lt;/div&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://www.nabble.com/Defining-formal-semantics-using-Alloy-tp16700701p18091161.html" />
</entry>

<entry>
	<id>tag:www.nabble.com,2006:post-18064879</id>
	<title>Re: Defining formal semantics using Alloy</title>
	<published>2008-06-23T01:37:18Z</published>
	<updated>2008-06-23T01:37:18Z</updated>
	<author>
		<name>Jeremy Jacob</name>
	</author>
	<content type="html">--- In &lt;a href=&quot;http://www.nabble.com/user/SendEmail.jtp?type=post&amp;post=18064879&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;alloy-discuss@...&lt;/a&gt;, &amp;quot;Stephen Butler&amp;quot;
&lt;br&gt;&amp;lt;s.o.butler@...&amp;gt; wrote:
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; On Mon, Apr 21, 2008 at 10:43 AM, Jeremy Jacob
&lt;br&gt;&amp;gt; &amp;lt;Jeremy.Jacob@...&amp;gt; wrote:
&lt;br&gt;&amp;gt; &amp;gt; --- In &lt;a href=&quot;http://www.nabble.com/user/SendEmail.jtp?type=post&amp;post=18064879&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;alloy-discuss@...&lt;/a&gt;, KELSEN Pierre
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; We have by now successfully defined abstract syntax, static
&lt;br&gt;&amp;gt; &amp;gt; semantics and dynamic semantics of our modeling language using Alloy.
&lt;br&gt;&amp;gt; &amp;gt;&amp;gt; We''ll be writing up soon our results. If you are interested, I'll
&lt;br&gt;&amp;gt; &amp;gt; mail you a copy of our paper.
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; Would you publish the location of the paper here, please?
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; It appears to be at
&lt;br&gt;&amp;gt; &lt;a href=&quot;http://lassy.uni.lu/democles/documentation/TR_LASSY_08_03.pdf&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://lassy.uni.lu/democles/documentation/TR_LASSY_08_03.pdf&lt;/a&gt;&amp;nbsp;.
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; Regards,
&lt;br&gt;&amp;gt; Steve
&lt;br&gt;&amp;gt;
&lt;/div&gt;&lt;br&gt;Thanks for pointing that out!
&lt;br&gt;&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://www.nabble.com/Defining-formal-semantics-using-Alloy-tp16700701p18064879.html" />
</entry>

<entry>
	<id>tag:www.nabble.com,2006:post-18039379</id>
	<title>Re: Re: Defining formal semantics using Alloy</title>
	<published>2008-06-20T17:00:29Z</published>
	<updated>2008-06-20T17:00:29Z</updated>
	<author>
		<name>Stephen Butler-3</name>
	</author>
	<content type="html">On Mon, Apr 21, 2008 at 10:43 AM, Jeremy Jacob
&lt;br&gt;&amp;lt;&lt;a href=&quot;http://www.nabble.com/user/SendEmail.jtp?type=post&amp;post=18039379&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;Jeremy.Jacob@...&lt;/a&gt;&amp;gt; wrote:
&lt;br&gt;&amp;gt; --- In &lt;a href=&quot;http://www.nabble.com/user/SendEmail.jtp?type=post&amp;post=18039379&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;alloy-discuss@...&lt;/a&gt;, KELSEN Pierre
&lt;br&gt;&amp;gt;&amp;gt; We have by now successfully defined abstract syntax, static
&lt;br&gt;&amp;gt; semantics and dynamic semantics of our modeling language using Alloy.
&lt;br&gt;&amp;gt;&amp;gt; We''ll be writing up soon our results. If you are interested, I'll
&lt;br&gt;&amp;gt; mail you a copy of our paper.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Would you publish the location of the paper here, please?
&lt;br&gt;&lt;br&gt;It appears to be at
&lt;br&gt;&lt;a href=&quot;http://lassy.uni.lu/democles/documentation/TR_LASSY_08_03.pdf&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://lassy.uni.lu/democles/documentation/TR_LASSY_08_03.pdf&lt;/a&gt;&amp;nbsp;.
&lt;br&gt;&lt;br&gt;Regards,
&lt;br&gt;Steve
&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://www.nabble.com/Defining-formal-semantics-using-Alloy-tp16700701p18039379.html" />
</entry>

<entry>
	<id>tag:www.nabble.com,2006:post-17842263</id>
	<title>Re: jar file for Alloy 4.1.5</title>
	<published>2008-06-14T11:18:25Z</published>
	<updated>2008-06-14T11:18:25Z</updated>
	<author>
		<name>Felix Chang-2</name>
	</author>
	<content type="html">On Sat, 14 Jun 2008, Miguel Carrillo wrote:
&lt;br&gt;&amp;gt; is there a jar file for Alloy 4.1.5?
&lt;br&gt;&amp;gt; The url of &amp;quot;All Others: download and double-click this jar file..&amp;quot;
&lt;br&gt;&amp;gt; is a zip file.
&lt;br&gt;&lt;br&gt;Dear Miguel:
&lt;br&gt;&lt;br&gt;I believe you are mistaken. &amp;nbsp;The link on the website
&lt;br&gt;points to &lt;a href=&quot;http://alloy.mit.edu/alloy4/alloy4.jar&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;http://alloy.mit.edu/alloy4/alloy4.jar&lt;/a&gt;&lt;br&gt;&lt;br&gt;And your OS may tell you that it is a ZIP file, because indeed
&lt;br&gt;the Standard Java JAR file format is exactly the same as ZIP format
&lt;br&gt;with the added requirement that there must be a manifest.mf file in it.
&lt;br&gt;&lt;br&gt;So just download the URL as the website indicates
&lt;br&gt;and then double click the file or type &amp;quot;java -jar alloy4.jar&amp;quot;
&lt;br&gt;as the website indicates.
&lt;br&gt;&lt;br&gt;Sincerely,
&lt;br&gt;Felix Chang
&lt;br&gt;Alloy4 Developer
&lt;br&gt;&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://www.nabble.com/jar-file-for-Alloy-4.1.5-tp17841740p17842263.html" />
</entry>

<entry>
	<id>tag:www.nabble.com,2006:post-17841740</id>
	<title>jar file for Alloy 4.1.5</title>
	<published>2008-06-14T10:05:48Z</published>
	<updated>2008-06-14T10:05:48Z</updated>
	<author>
		<name>Miguel Carrillo</name>
	</author>
	<content type="html">Hi!,
&lt;br&gt;&lt;br&gt;is there a jar file for Alloy 4.1.5?
&lt;br&gt;The url of &amp;quot;All Others: download and double-click this jar file..&amp;quot;
&lt;br&gt;is a zip file.
&lt;br&gt;&lt;br&gt;Thanks!
&lt;br&gt;&lt;br&gt;Miguel.
&lt;br&gt;&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://www.nabble.com/jar-file-for-Alloy-4.1.5-tp17841740p17841740.html" />
</entry>

<entry>
	<id>tag:www.nabble.com,2006:post-17447571</id>
	<title>Re: TranslationRecords in Solution.proof().core() have empty env()</title>
	<published>2008-05-24T05:59:17Z</published>
	<updated>2008-05-24T05:59:17Z</updated>
	<author>
		<name>Emina Torlak</name>
	</author>
	<content type="html">Dear Chris,
&lt;br&gt;&lt;br&gt;The env() map will be empty for a given formula if all free variables &amp;nbsp;
&lt;br&gt;in that formula were skolemized. &amp;nbsp;(Note that the top-level formulas &amp;nbsp;
&lt;br&gt;from the high-level core cannot have any free variables as they are &amp;nbsp;
&lt;br&gt;the top-level conjuncts.) &amp;nbsp;For example, if you compile and run the &amp;nbsp;
&lt;br&gt;attached file (&amp;quot;java examples.CeilingsAndFloors 3 3&amp;quot;), the output &amp;nbsp;
&lt;br&gt;will show that there is no binding for the free variable &amp;quot;m0&amp;quot; in the &amp;nbsp;
&lt;br&gt;constraint (m0 . floor) = (n0 . ceiling) within the formula
&lt;br&gt;&lt;br&gt;!(all m0: one Man | (some n0: one Man | ((m0 . floor) = (n0 . &amp;nbsp;
&lt;br&gt;ceiling)))).
&lt;br&gt;&lt;br&gt;This is because the variable m0 is eliminated through skolemization &amp;nbsp;
&lt;br&gt;(it is replaced with a constant). &amp;nbsp;The output will also show full &amp;nbsp;
&lt;br&gt;variable bindings for other sub-formulas whose free variables were &amp;nbsp;
&lt;br&gt;not skolemized.
&lt;br&gt;&lt;br&gt;Cheers,
&lt;br&gt;Emina
&lt;br&gt;&lt;br&gt;￼
&lt;br&gt;&lt;br&gt;On May 24, 2008, at 8:32 AM, chrissoalloyuser wrote:
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; Dear Alloy Users,
&lt;br&gt;&amp;gt; I am working with Kodkod, and I check several constraints for a given
&lt;br&gt;&amp;gt; model. If some constraints are not valid, I can get these constraints
&lt;br&gt;&amp;gt; with the core and highLevelCore attributes of the returned &amp;quot;Proof&amp;quot;- 
&lt;br&gt;&amp;gt; object.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; But i additionally want to know, for which variable assignments the
&lt;br&gt;&amp;gt; constraints do not hold.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; I assumed that this information is in the env() map, of a
&lt;br&gt;&amp;gt; TranslationRecord. But this env() is empty for all TranslationRecords.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; The log translation option of my solver is set to &amp;quot;2&amp;quot;.
&lt;br&gt;&amp;gt; (solver.options().setLogTranslation(2);).
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Any ideas or clues ?
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Thanks and regards
&lt;br&gt;&amp;gt; Christian
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; 
&lt;/div&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://www.nabble.com/TranslationRecords-in-Solution.proof%28%29.core%28%29-have-empty-env%28%29-tp17447347p17447571.html" />
</entry>

<entry>
	<id>tag:www.nabble.com,2006:post-17447347</id>
	<title>TranslationRecords in Solution.proof().core() have empty env()</title>
	<published>2008-05-24T05:32:53Z</published>
	<updated>2008-05-24T05:32:53Z</updated>
	<author>
		<name>chrissoalloyuser</name>
	</author>
	<content type="html">Dear Alloy Users,
&lt;br&gt;I am working with Kodkod, and I check several constraints for a given
&lt;br&gt;model. If some constraints are not valid, I can get these constraints
&lt;br&gt;with the core and highLevelCore attributes of the returned &amp;quot;Proof&amp;quot;-object.
&lt;br&gt;&lt;br&gt;But i additionally want to know, for which variable assignments the
&lt;br&gt;constraints do not hold.
&lt;br&gt;&lt;br&gt;I assumed that this information is in the env() map, of a
&lt;br&gt;TranslationRecord. But this env() is empty for all TranslationRecords.
&lt;br&gt;&lt;br&gt;The log translation option of my solver is set to &amp;quot;2&amp;quot;.
&lt;br&gt;(solver.options().setLogTranslation(2);).
&lt;br&gt;&lt;br&gt;Any ideas or clues ?
&lt;br&gt;&lt;br&gt;Thanks and regards
&lt;br&gt;Christian
&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://www.nabble.com/TranslationRecords-in-Solution.proof%28%29.core%28%29-have-empty-env%28%29-tp17447347p17447347.html" />
</entry>

<entry>
	<id>tag:www.nabble.com,2006:post-17257685</id>
	<title>Re: Is it possible with Alloy?</title>
	<published>2008-05-15T09:50:47Z</published>
	<updated>2008-05-15T09:50:47Z</updated>
	<author>
		<name>Felix Chang-2</name>
	</author>
	<content type="html">On Sun, 27 Apr 2008, Michael Igler wrote:
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; I'm a research member of the University of Bayreuth and I want to model special workflow
&lt;br&gt;&amp;gt; constructs and translate them to a states and relations.
&lt;br&gt;&amp;gt; I have attached a small workflow of process steps A to H with a XOR decision.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; When you consider the model on the bottom then you would start
&lt;br&gt;&amp;gt; in state : &amp;quot;_____&amp;quot;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; From this state you can choose process steps A, B, C, D, F
&lt;br&gt;&amp;gt; because they are all connected with black arows. A black arrow means
&lt;br&gt;&amp;gt; transitivity, so you can also start with B because it is connected
&lt;br&gt;&amp;gt; to A through a black arrow.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; The red arrow and the red XOR means, that it breaks transitivity and
&lt;br&gt;&amp;gt; all steps before this step have to be fulfilled first. Before E is possible,
&lt;br&gt;&amp;gt; ABC have to be done first, so E is only accessible from state &amp;quot;ABC&amp;quot;.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Now my idea is to model this workflow with all the constraints
&lt;br&gt;&amp;gt; in Alloy and Alloy is generating me this state machine on the
&lt;br&gt;&amp;gt; bottom of the attached file. In the future I'd also like to model
&lt;br&gt;&amp;gt; temporal constraints(maybe A not_during B is executed).
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; My questions is now if someone has some experiences
&lt;br&gt;&amp;gt; in this and if it is generally possible with Alloy?
&lt;/div&gt;&lt;br&gt;Hi Michael:
&lt;br&gt;&lt;br&gt;I'm attaching an Alloy4 model that models processes, states,
&lt;br&gt;red arrows, and black arrows as you described.
&lt;br&gt;The model designates a particular state as Start state,
&lt;br&gt;and I model each state as representing a set of &amp;quot;pending&amp;quot;
&lt;br&gt;processes and a set of &amp;quot;done&amp;quot; processes.
&lt;br&gt;&lt;br&gt;Given &amp;quot;State1 --blackA--&amp;gt; State2 --blackB--&amp;gt; State3 --redC--&amp;gt; State4&amp;quot;,
&lt;br&gt;you say that {A,B} can all execute in arbitrary order,
&lt;br&gt;but they must all finish before executing C.
&lt;br&gt;&lt;br&gt;So in my model,
&lt;br&gt;State1.done={} and State1.pending={}.
&lt;br&gt;State2.done={} and State2.pending={A}.
&lt;br&gt;State3.done={} and State3.pending={A,B}.
&lt;br&gt;State4.done={A,B,C} and State4.pending={}.
&lt;br&gt;&lt;br&gt;Note that &amp;quot;pending&amp;quot; and &amp;quot;done&amp;quot; are both sets, so there is no
&lt;br&gt;ordering among them. &amp;nbsp;You can regard State3.pending as {A,B}
&lt;br&gt;or {B,A} since sets are not ordered. &amp;nbsp;However, since we separate
&lt;br&gt;the processes into either belonging to the pending set
&lt;br&gt;or the done set, that allows us to express the intention
&lt;br&gt;that everything in the done set are different from
&lt;br&gt;things in the pending set.
&lt;br&gt;&lt;br&gt;-
&lt;br&gt;&lt;br&gt;You should be able to adjust the model as you see fit,
&lt;br&gt;to express the more complicated properties you mentioned above.
&lt;br&gt;&lt;br&gt;-
&lt;br&gt;&lt;br&gt;I'm attaching both &amp;quot;pro.als&amp;quot; (the Alloy model file)
&lt;br&gt;and a &amp;quot;pro.thm&amp;quot; (a visualization theme file that I think looks good for this)
&lt;br&gt;&lt;br&gt;-
&lt;br&gt;&lt;br&gt;Sincerely,
&lt;br&gt;Felix Chang
&lt;br&gt;Alloy4 Developer
&lt;br&gt;&lt;br&gt;&lt;br&gt;////////// GENERAL DEFINITIONS ////////////
&lt;br&gt;&lt;br&gt;// There are a set of processes.
&lt;br&gt;abstract sig Process { }
&lt;br&gt;&lt;br&gt;// There are a set of states.
&lt;br&gt;sig State {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;pending: set Process, &amp;nbsp;// processes that may not have finished
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;done: set Process, &amp;nbsp; &amp;nbsp; // processes that definitely finished
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;black: Process-&amp;gt;State, // these are the black edges
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;red: Process-&amp;gt;State &amp;nbsp; &amp;nbsp;// these are the red edges
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;// We especially designate one state as Start, and one as Goal
&lt;br&gt;one sig Start, Goal extends State { }
&lt;br&gt;&lt;br&gt;// This function computes all edges regardless of the label
&lt;br&gt;fun edge : State-&amp;gt;State {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;{a, b: State | some p: Process | a-&amp;gt;p-&amp;gt;b in black+red }
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;// Upon a black edge, &amp;quot;done&amp;quot; stays the same, but &amp;quot;pending&amp;quot; grows
&lt;br&gt;fact {
&lt;br&gt;&amp;nbsp; &amp;nbsp;all p:Process, a:State, b:p.(a.black) |
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;p !in a.(done+pending) &amp;&amp; b.done=a.done &amp;&amp; b.pending=a.pending+p
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;// Upon a red edge, &amp;quot;done&amp;quot; grows, but &amp;quot;pending&amp;quot; becomes the empty set
&lt;br&gt;fact {
&lt;br&gt;&amp;nbsp; &amp;nbsp;all p:Process, a:State, b:p.(a.red) |
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;p !in a.(done+pending) &amp;&amp; b.done=a.done+a.pending+p &amp;&amp; no b.pending
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;// We only want to see states that are came out of the Start state
&lt;br&gt;fact { all x:State | x in Start.*edge }
&lt;br&gt;&lt;br&gt;// We don't want to see duplicate States
&lt;br&gt;fact { all disj a, b: State | a.done!=b.done or a.pending!=b.pending }
&lt;br&gt;&lt;br&gt;////////// ONE SPECIFIC INSTANCE ////////////
&lt;br&gt;&lt;br&gt;one sig A, B, C extends Process { }
&lt;br&gt;run { Goal.done=Process &amp;&amp; no Start.(pending+done) } for 10
&lt;br&gt;////////// GENERAL DEFINITIONS ////////////
&lt;br&gt;&lt;br&gt;// There are a set of processes.
&lt;br&gt;abstract sig Process { }
&lt;br&gt;&lt;br&gt;// There are a set of states.
&lt;br&gt;sig State {
&lt;br&gt;&amp;nbsp; &amp;nbsp; pending: set Process, &amp;nbsp;// processes that may not have finished
&lt;br&gt;&amp;nbsp; &amp;nbsp; done: set Process, &amp;nbsp; &amp;nbsp; // processes that definitely finished
&lt;br&gt;&amp;nbsp; &amp;nbsp; black: Process-&amp;gt;State, // these are the black edges
&lt;br&gt;&amp;nbsp; &amp;nbsp; red: Process-&amp;gt;State &amp;nbsp; &amp;nbsp;// these are the red edges
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;// We especially designate one state as Start, and one as Goal
&lt;br&gt;one sig Start, Goal extends State { }
&lt;br&gt;&lt;br&gt;// This function computes all edges regardless of the label
&lt;br&gt;fun edge : State-&amp;gt;State {
&lt;br&gt;&amp;nbsp; &amp;nbsp; {a, b: State | some p: Process | a-&amp;gt;p-&amp;gt;b in black+red }
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;// Upon a black edge, &amp;quot;done&amp;quot; stays the same, but &amp;quot;pending&amp;quot; grows
&lt;br&gt;fact {
&lt;br&gt;&amp;nbsp; all p:Process, a:State, b:p.(a.black) |
&lt;br&gt;&amp;nbsp; &amp;nbsp; p !in a.(done+pending) &amp;&amp; b.done=a.done &amp;&amp; b.pending=a.pending+p
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;// Upon a red edge, &amp;quot;done&amp;quot; grows, but &amp;quot;pending&amp;quot; becomes the empty set
&lt;br&gt;fact {
&lt;br&gt;&amp;nbsp; all p:Process, a:State, b:p.(a.red) |
&lt;br&gt;&amp;nbsp; &amp;nbsp; p !in a.(done+pending) &amp;&amp; b.done=a.done+a.pending+p &amp;&amp; no b.pending
&lt;br&gt;}
&lt;br&gt;&lt;br&gt;// We only want to see states that are came out of the Start state
&lt;br&gt;fact { all x:State | x in Start.*edge }
&lt;br&gt;&lt;br&gt;// We don't want to see duplicate States
&lt;br&gt;fact { all disj a, b: State | a.done!=b.done or a.pending!=b.pending }
&lt;br&gt;&lt;br&gt;////////// ONE SPECIFIC INSTANCE ////////////
&lt;br&gt;&lt;br&gt;one sig A, B, C extends Process { }
&lt;br&gt;run { Goal.done=Process &amp;&amp; no Start.(pending+done) } for 10
&lt;br&gt;&lt;br&gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;
&lt;br&gt;&amp;lt;alloy&amp;gt;
&lt;br&gt;&lt;br&gt;&amp;lt;view&amp;gt;
&lt;br&gt;&lt;br&gt;&amp;lt;defaultnode/&amp;gt;
&lt;br&gt;&lt;br&gt;&amp;lt;defaultedge/&amp;gt;
&lt;br&gt;&lt;br&gt;&amp;lt;node&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp;&amp;lt;type name=&amp;quot;A&amp;quot;/&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp;&amp;lt;type name=&amp;quot;B&amp;quot;/&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp;&amp;lt;type name=&amp;quot;C&amp;quot;/&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp;&amp;lt;type name=&amp;quot;Goal&amp;quot;/&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp;&amp;lt;type name=&amp;quot;Int&amp;quot;/&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp;&amp;lt;type name=&amp;quot;Start&amp;quot;/&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp;&amp;lt;type name=&amp;quot;State&amp;quot;/&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp;&amp;lt;type name=&amp;quot;univ&amp;quot;/&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp;&amp;lt;type name=&amp;quot;seq/Int&amp;quot;/&amp;gt;
&lt;br&gt;&amp;lt;/node&amp;gt;
&lt;br&gt;&lt;br&gt;&amp;lt;node hideunconnected=&amp;quot;yes&amp;quot;&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp;&amp;lt;type name=&amp;quot;Process&amp;quot;/&amp;gt;
&lt;br&gt;&amp;lt;/node&amp;gt;
&lt;br&gt;&lt;br&gt;&amp;lt;edge color=&amp;quot;Black&amp;quot; label=&amp;quot; &amp;quot;&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp;&amp;lt;relation name=&amp;quot;black&amp;quot;&amp;gt; &amp;lt;type name=&amp;quot;State&amp;quot;/&amp;gt; &amp;lt;type name=&amp;quot;Process&amp;quot;/&amp;gt; &amp;lt;type name=&amp;quot;State&amp;quot;/&amp;gt; &amp;lt;/relation&amp;gt;
&lt;br&gt;&amp;lt;/edge&amp;gt;
&lt;br&gt;&lt;br&gt;&amp;lt;edge color=&amp;quot;Red&amp;quot; label=&amp;quot; &amp;quot;&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp;&amp;lt;relation name=&amp;quot;red&amp;quot;&amp;gt; &amp;lt;type name=&amp;quot;State&amp;quot;/&amp;gt; &amp;lt;type name=&amp;quot;Process&amp;quot;/&amp;gt; &amp;lt;type name=&amp;quot;State&amp;quot;/&amp;gt; &amp;lt;/relation&amp;gt;
&lt;br&gt;&amp;lt;/edge&amp;gt;
&lt;br&gt;&lt;br&gt;&amp;lt;edge visible=&amp;quot;no&amp;quot;&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp;&amp;lt;relation name=&amp;quot;$edge&amp;quot;&amp;gt; &amp;lt;type name=&amp;quot;State&amp;quot;/&amp;gt; &amp;lt;type name=&amp;quot;State&amp;quot;/&amp;gt; &amp;lt;/relation&amp;gt;
&lt;br&gt;&amp;lt;/edge&amp;gt;
&lt;br&gt;&lt;br&gt;&amp;lt;edge visible=&amp;quot;no&amp;quot; attribute=&amp;quot;yes&amp;quot;&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp;&amp;lt;relation name=&amp;quot;done&amp;quot;&amp;gt; &amp;lt;type name=&amp;quot;State&amp;quot;/&amp;gt; &amp;lt;type name=&amp;quot;Process&amp;quot;/&amp;gt; &amp;lt;/relation&amp;gt;
&lt;br&gt;&amp;nbsp; &amp;nbsp;&amp;lt;relation name=&amp;quot;pending&amp;quot;&amp;gt; &amp;lt;type name=&amp;quot;State&amp;quot;/&amp;gt; &amp;lt;type name=&amp;quot;Process&amp;quot;/&amp;gt; &amp;lt;/relation&amp;gt;
&lt;br&gt;&amp;lt;/edge&amp;gt;
&lt;br&gt;&lt;br&gt;&amp;lt;/view&amp;gt;
&lt;br&gt;&lt;br&gt;&amp;lt;/alloy&amp;gt;
&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://www.nabble.com/Is-it-possible-with-Alloy--tp16925183p17257685.html" />
</entry>

<entry>
	<id>tag:www.nabble.com,2006:post-17240135</id>
	<title>Re: UnboundLeafException for a relation that is in the Bounds object</title>
	<published>2008-05-14T13:28:53Z</published>
	<updated>2008-05-14T13:28:53Z</updated>
	<author>
		<name>chrissoalloyuser</name>
	</author>
	<content type="html">Dear Emina,
&lt;br&gt;you are right. I found out, that i have accidentally invoked the
&lt;br&gt;method, which adds all the relations to the Map, two times :(
&lt;br&gt;That makes abolutely sense.
&lt;br&gt;&lt;br&gt;Well, so there is no bug in the Kodkod API ;-)
&lt;br&gt;&lt;br&gt;Regards
&lt;br&gt;Christian
&lt;br&gt;&lt;br&gt;&lt;br&gt;--- In &lt;a href=&quot;http://www.nabble.com/user/SendEmail.jtp?type=post&amp;post=17240135&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;alloy-discuss@...&lt;/a&gt;, Emina Torlak &amp;lt;emina@...&amp;gt; wrote:
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Dear Chris,
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; I'm glad you found the source of the problem, but there is probably &amp;nbsp;
&lt;br&gt;&amp;gt; something else going on there as well. &amp;nbsp;A duplicated constraint will &amp;nbsp;
&lt;br&gt;&amp;gt; not cause an exception. &amp;nbsp;For example, you can replace the line
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; final Solution sol = solver.solve(show, model.bounds(m,p));
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; in examples.CeilingsAndFloors with the line
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; final Solution sol = solver.solve(Nodes.and(show, show, show), &amp;nbsp;
&lt;br&gt;&amp;gt; model.bounds(m,p));
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; and everything will work as before (despite the &amp;quot;show&amp;quot; formula being &amp;nbsp;
&lt;br&gt;&amp;gt; repeated 3 times).
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; Sincerely,
&lt;br&gt;&amp;gt; Emina
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; On May 14, 2008, at 3:48 PM, chrissoalloyuser wrote:
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; &amp;gt; Dear Emina,
&lt;br&gt;&amp;gt; &amp;gt; thanks for your offering, but I &amp;nbsp;think I found the problem.
&lt;br&gt;&amp;gt; &amp;gt; I searched at the wrong place the whole time. The problem occurred &amp;nbsp;
&lt;br&gt;&amp;gt; &amp;gt; because of duplicated constraints.
&lt;br&gt;&amp;gt; &amp;gt; Accidentally i invoked the following code 2 times.
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; for(Iterator&amp;lt;EClass&amp;gt; CLASS_ITER = superTypes.iterator(); &amp;nbsp;
&lt;br&gt;&amp;gt; &amp;gt; CLASS_ITER.hasNext();) {
&lt;br&gt;&amp;gt; &amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; EClass currentSuperClass = CLASS_ITER.next();
&lt;br&gt;&amp;gt; &amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Formula newFormula = relations.get 
&lt;br&gt;&amp;gt; &amp;gt; (currentEClass.getName()).in(relations.get(currentSuperClass.getName 
&lt;br&gt;&amp;gt; &amp;gt; ()));
&lt;br&gt;&amp;gt; &amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; //System.out.println(&amp;quot;Problem Formula: &amp;quot; + &amp;nbsp;
&lt;br&gt;&amp;gt; &amp;gt; newFormula.toString()); &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;plmConstraints.add 
&lt;br&gt;&amp;gt; &amp;gt; (newFormula);
&lt;br&gt;&amp;gt; &amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;gt; &amp;gt; I use the EMF reflection API to retrieve all Supertypes of a class, &amp;nbsp;
&lt;br&gt;&amp;gt; &amp;gt; and add the corresponding kodkod constraints. &amp;nbsp;At the end I use
&lt;br&gt;&amp;gt; &amp;gt; kodkod.util.nodes.Nodes.and(...) to combine all Formualas and give &amp;nbsp;
&lt;br&gt;&amp;gt; &amp;gt; it to the solver.
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; I did not know, that duplicate Formulas can create an exception. &amp;nbsp;
&lt;br&gt;&amp;gt; &amp;gt; Maybe here is something wrong ?
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; Regards
&lt;br&gt;&amp;gt; &amp;gt; Christian
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; --- In &lt;a href=&quot;http://www.nabble.com/user/SendEmail.jtp?type=post&amp;post=17240135&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;alloy-discuss@...&lt;/a&gt;, Emina Torlak &amp;lt;emina@&amp;gt; wrote:
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; Dear Chris,
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; If you cannot isolate the problem, you can send me the entire &amp;nbsp;
&lt;br&gt;&amp;gt; &amp;gt; program.
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; Sincerely,
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; Emina
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; On May 14, 2008, at 2:32 PM, chrissoalloyuser wrote:
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; Dear Emina,
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; well, I will try to isolate the problem to a small example. I &amp;nbsp;
&lt;br&gt;&amp;gt; &amp;gt; assume
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; that it has something to do with the way i am adding all the &amp;nbsp;
&lt;br&gt;&amp;gt; &amp;gt; relations
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; into a map.
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; Normally you define the relations as &amp;quot;final&amp;quot;, but in my &amp;nbsp;
&lt;br&gt;&amp;gt; &amp;gt; application i
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; can not do that. Maybe it has something to do with it.
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; Regards
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; Christian
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; --- In &lt;a href=&quot;http://www.nabble.com/user/SendEmail.jtp?type=post&amp;post=17240135&amp;i=2&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;alloy-discuss@...&lt;/a&gt;, Emina Torlak emina@ wrote:
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; &amp;gt; Dear Chris,
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; &amp;gt; This should not be happening if all of your relations are bound
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; &amp;gt; properly. However, I can't tell why you are getting the &amp;nbsp;
&lt;br&gt;&amp;gt; &amp;gt; exception
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; &amp;gt; without seeing the code. Can you try reducing your example to a
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; &amp;gt; small test case that demonstrates the bug?
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; &amp;gt; Sincerely,
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; &amp;gt; Emina
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; &amp;gt; On May 14, 2008, at 1:17 PM, chrissoalloyuser wrote:
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; &amp;gt; &amp;gt; Dear Users,
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; &amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; &amp;gt; &amp;gt; I am working with Kodkod and I create Bounds and Constraints
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; &amp;gt; &amp;gt; dynamically at runtime. I get an UnboundLeafException for a
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; relation,
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; &amp;gt; &amp;gt; that is in the Bounds object. I checked this with the
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; &amp;gt; &amp;gt; bounds.relations() function. Do you have any suggestions why I
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; &amp;gt; &amp;gt; nevertheless get this Exception ?
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; &amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; &amp;gt; &amp;gt; It's not easy to add a Code Example, because it is a long &amp;nbsp;
&lt;br&gt;&amp;gt; &amp;gt; piece of
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; &amp;gt; &amp;gt; code.
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; &amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; &amp;gt; &amp;gt; Thanks and Regards
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; &amp;gt; &amp;gt; Christian
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; &amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; &amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; &amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt;
&lt;/div&gt;&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://www.nabble.com/UnboundLeafException-for-a-relation-that-is-in-the-Bounds-object-tp17236431p17240135.html" />
</entry>

<entry>
	<id>tag:www.nabble.com,2006:post-17239637</id>
	<title>Re: Re: UnboundLeafException for a relation that is in the Bounds object</title>
	<published>2008-05-14T13:00:29Z</published>
	<updated>2008-05-14T13:00:29Z</updated>
	<author>
		<name>Emina Torlak</name>
	</author>
	<content type="html">Dear Chris,
&lt;br&gt;&lt;br&gt;I'm glad you found the source of the problem, but there is probably &amp;nbsp;
&lt;br&gt;something else going on there as well. &amp;nbsp;A duplicated constraint will &amp;nbsp;
&lt;br&gt;not cause an exception. &amp;nbsp;For example, you can replace the line
&lt;br&gt;&lt;br&gt;final Solution sol = solver.solve(show, model.bounds(m,p));
&lt;br&gt;&lt;br&gt;in examples.CeilingsAndFloors with the line
&lt;br&gt;&lt;br&gt;final Solution sol = solver.solve(Nodes.and(show, show, show), &amp;nbsp;
&lt;br&gt;model.bounds(m,p));
&lt;br&gt;&lt;br&gt;and everything will work as before (despite the &amp;quot;show&amp;quot; formula being &amp;nbsp;
&lt;br&gt;repeated 3 times).
&lt;br&gt;&lt;br&gt;Sincerely,
&lt;br&gt;Emina
&lt;br&gt;&lt;br&gt;On May 14, 2008, at 3:48 PM, chrissoalloyuser wrote:
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; Dear Emina,
&lt;br&gt;&amp;gt; thanks for your offering, but I &amp;nbsp;think I found the problem.
&lt;br&gt;&amp;gt; I searched at the wrong place the whole time. The problem occurred &amp;nbsp;
&lt;br&gt;&amp;gt; because of duplicated constraints.
&lt;br&gt;&amp;gt; Accidentally i invoked the following code 2 times.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; for(Iterator&amp;lt;EClass&amp;gt; CLASS_ITER = superTypes.iterator(); &amp;nbsp;
&lt;br&gt;&amp;gt; CLASS_ITER.hasNext();) {
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; EClass currentSuperClass = CLASS_ITER.next();
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Formula newFormula = relations.get 
&lt;br&gt;&amp;gt; (currentEClass.getName()).in(relations.get(currentSuperClass.getName 
&lt;br&gt;&amp;gt; ()));
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; //System.out.println(&amp;quot;Problem Formula: &amp;quot; + &amp;nbsp;
&lt;br&gt;&amp;gt; newFormula.toString()); &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;plmConstraints.add 
&lt;br&gt;&amp;gt; (newFormula);
&lt;br&gt;&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }
&lt;br&gt;&amp;gt; I use the EMF reflection API to retrieve all Supertypes of a class, &amp;nbsp;
&lt;br&gt;&amp;gt; and add the corresponding kodkod constraints. &amp;nbsp;At the end I use
&lt;br&gt;&amp;gt; kodkod.util.nodes.Nodes.and(...) to combine all Formualas and give &amp;nbsp;
&lt;br&gt;&amp;gt; it to the solver.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; I did not know, that duplicate Formulas can create an exception. &amp;nbsp;
&lt;br&gt;&amp;gt; Maybe here is something wrong ?
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Regards
&lt;br&gt;&amp;gt; Christian
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; --- In &lt;a href=&quot;http://www.nabble.com/user/SendEmail.jtp?type=post&amp;post=17239637&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;alloy-discuss@...&lt;/a&gt;, Emina Torlak &amp;lt;emina@...&amp;gt; wrote:
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; Dear Chris,
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; If you cannot isolate the problem, you can send me the entire &amp;nbsp;
&lt;br&gt;&amp;gt; program.
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; Sincerely,
&lt;br&gt;&amp;gt; &amp;gt; Emina
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; On May 14, 2008, at 2:32 PM, chrissoalloyuser wrote:
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; Dear Emina,
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; well, I will try to isolate the problem to a small example. I &amp;nbsp;
&lt;br&gt;&amp;gt; assume
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; that it has something to do with the way i am adding all the &amp;nbsp;
&lt;br&gt;&amp;gt; relations
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; into a map.
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; Normally you define the relations as &amp;quot;final&amp;quot;, but in my &amp;nbsp;
&lt;br&gt;&amp;gt; application i
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; can not do that. Maybe it has something to do with it.
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; Regards
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; Christian
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; --- In &lt;a href=&quot;http://www.nabble.com/user/SendEmail.jtp?type=post&amp;post=17239637&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;alloy-discuss@...&lt;/a&gt;, Emina Torlak emina@ wrote:
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; Dear Chris,
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; This should not be happening if all of your relations are bound
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; properly. However, I can't tell why you are getting the &amp;nbsp;
&lt;br&gt;&amp;gt; exception
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; without seeing the code. Can you try reducing your example to a
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; small test case that demonstrates the bug?
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; Sincerely,
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; Emina
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; On May 14, 2008, at 1:17 PM, chrissoalloyuser wrote:
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; &amp;gt; Dear Users,
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; &amp;gt; I am working with Kodkod and I create Bounds and Constraints
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; &amp;gt; dynamically at runtime. I get an UnboundLeafException for a
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; relation,
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; &amp;gt; that is in the Bounds object. I checked this with the
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; &amp;gt; bounds.relations() function. Do you have any suggestions why I
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; &amp;gt; nevertheless get this Exception ?
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; &amp;gt; It's not easy to add a Code Example, because it is a long &amp;nbsp;
&lt;br&gt;&amp;gt; piece of
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; &amp;gt; code.
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; &amp;gt; Thanks and Regards
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; &amp;gt; Christian
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; 
&lt;/div&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://www.nabble.com/UnboundLeafException-for-a-relation-that-is-in-the-Bounds-object-tp17236431p17239637.html" />
</entry>

<entry>
	<id>tag:www.nabble.com,2006:post-17239414</id>
	<title>Re: UnboundLeafException for a relation that is in the Bounds object</title>
	<published>2008-05-14T12:48:44Z</published>
	<updated>2008-05-14T12:48:44Z</updated>
	<author>
		<name>chrissoalloyuser</name>
	</author>
	<content type="html">Dear Emina,
&lt;br&gt;thanks for your offering, but I &amp;nbsp;think I found the problem.
&lt;br&gt;I searched at the wrong place the whole time. The problem occurred
&lt;br&gt;because of duplicated constraints.
&lt;br&gt;Accidentally i invoked the following code 2 times.
&lt;br&gt;for(Iterator&amp;lt;EClass&amp;gt; CLASS_ITER = superTypes.iterator();
&lt;br&gt;CLASS_ITER.hasNext();) {
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;EClass currentSuperClass = CLASS_ITER.next();
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Formula newFormula =
&lt;br&gt;relations.get(currentEClass.getName()).in(relations.get(currentSuperClas\
&lt;br&gt;s.getName()));
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//System.out.println(&amp;quot;Problem Formula: &amp;quot; +
&lt;br&gt;newFormula.toString());
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;plmConstraints.add(newFormula);
&lt;br&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}
&lt;br&gt;I use the EMF reflection API to retrieve all Supertypes of a class, and
&lt;br&gt;add the corresponding kodkod constraints. &amp;nbsp;At the end I use
&lt;br&gt;kodkod.util.nodes.Nodes.and(...) to combine all Formualas and give it to
&lt;br&gt;the solver.
&lt;br&gt;&lt;br&gt;I did not know, that duplicate Formulas can create an exception. Maybe
&lt;br&gt;here is something wrong ?
&lt;br&gt;&lt;br&gt;Regards
&lt;br&gt;Christian
&lt;br&gt;&lt;br&gt;--- In &lt;a href=&quot;http://www.nabble.com/user/SendEmail.jtp?type=post&amp;post=17239414&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;alloy-discuss@...&lt;/a&gt;, Emina Torlak &amp;lt;emina@...&amp;gt; wrote:
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Dear Chris,
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; If you cannot isolate the problem, you can send me the entire program.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Sincerely,
&lt;br&gt;&amp;gt; Emina
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; On May 14, 2008, at 2:32 PM, chrissoalloyuser wrote:
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; Dear Emina,
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; well, I will try to isolate the problem to a small example. I assume
&lt;br&gt;&amp;gt; &amp;gt; that it has something to do with the way i am adding all the
&lt;/div&gt;relations
&lt;br&gt;&amp;gt; &amp;gt; into a map.
&lt;br&gt;&amp;gt; &amp;gt; Normally you define the relations as &amp;quot;final&amp;quot;, but in my application
&lt;br&gt;i
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; &amp;gt; can not do that. Maybe it has something to do with it.
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; Regards
&lt;br&gt;&amp;gt; &amp;gt; Christian
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; --- In &lt;a href=&quot;http://www.nabble.com/user/SendEmail.jtp?type=post&amp;post=17239414&amp;i=1&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;alloy-discuss@...&lt;/a&gt;, Emina Torlak emina@ wrote:
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; Dear Chris,
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; This should not be happening if all of your relations are bound
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; properly. However, I can't tell why you are getting the exception
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; without seeing the code. Can you try reducing your example to a
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; small test case that demonstrates the bug?
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; Sincerely,
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; Emina
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; On May 14, 2008, at 1:17 PM, chrissoalloyuser wrote:
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; Dear Users,
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; I am working with Kodkod and I create Bounds and Constraints
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; dynamically at runtime. I get an UnboundLeafException for a
&lt;br&gt;&amp;gt; &amp;gt; relation,
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; that is in the Bounds object. I checked this with the
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; bounds.relations() function. Do you have any suggestions why I
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; nevertheless get this Exception ?
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; It's not easy to add a Code Example, because it is a long piece
&lt;/div&gt;of
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; code.
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; Thanks and Regards
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt; Christian
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt;
&lt;/div&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://www.nabble.com/UnboundLeafException-for-a-relation-that-is-in-the-Bounds-object-tp17236431p17239414.html" />
</entry>

<entry>
	<id>tag:www.nabble.com,2006:post-17238516</id>
	<title>Re: Re: UnboundLeafException for a relation that is in the Bounds object</title>
	<published>2008-05-14T11:59:08Z</published>
	<updated>2008-05-14T11:59:08Z</updated>
	<author>
		<name>Emina Torlak</name>
	</author>
	<content type="html">Dear Chris,
&lt;br&gt;&lt;br&gt;If you cannot isolate the problem, you can send me the entire program.
&lt;br&gt;&lt;br&gt;Sincerely,
&lt;br&gt;Emina
&lt;br&gt;&lt;br&gt;On May 14, 2008, at 2:32 PM, chrissoalloyuser wrote:
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; Dear Emina,
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; well, I will try to isolate the problem to a small example. I assume
&lt;br&gt;&amp;gt; that it has something to do with the way i am adding all the relations
&lt;br&gt;&amp;gt; into a map.
&lt;br&gt;&amp;gt; Normally you define the relations as &amp;quot;final&amp;quot;, but in my application i
&lt;br&gt;&amp;gt; can not do that. Maybe it has something to do with it.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Regards
&lt;br&gt;&amp;gt; Christian
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; --- In &lt;a href=&quot;http://www.nabble.com/user/SendEmail.jtp?type=post&amp;post=17238516&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;alloy-discuss@...&lt;/a&gt;, Emina Torlak &amp;lt;emina@...&amp;gt; wrote:
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; Dear Chris,
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; This should not be happening if all of your relations are bound
&lt;br&gt;&amp;gt; &amp;gt; properly. However, I can't tell why you are getting the exception
&lt;br&gt;&amp;gt; &amp;gt; without seeing the code. Can you try reducing your example to a
&lt;br&gt;&amp;gt; &amp;gt; small test case that demonstrates the bug?
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; Sincerely,
&lt;br&gt;&amp;gt; &amp;gt; Emina
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; On May 14, 2008, at 1:17 PM, chrissoalloyuser wrote:
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; Dear Users,
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; I am working with Kodkod and I create Bounds and Constraints
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; dynamically at runtime. I get an UnboundLeafException for a &amp;nbsp;
&lt;br&gt;&amp;gt; relation,
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; that is in the Bounds object. I checked this with the
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; bounds.relations() function. Do you have any suggestions why I
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; nevertheless get this Exception ?
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; It's not easy to add a Code Example, because it is a long piece of
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; code.
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; Thanks and Regards
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt; Christian
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; 
&lt;/div&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://www.nabble.com/UnboundLeafException-for-a-relation-that-is-in-the-Bounds-object-tp17236431p17238516.html" />
</entry>

<entry>
	<id>tag:www.nabble.com,2006:post-17238008</id>
	<title>Re: UnboundLeafException for a relation that is in the Bounds object</title>
	<published>2008-05-14T11:32:30Z</published>
	<updated>2008-05-14T11:32:30Z</updated>
	<author>
		<name>chrissoalloyuser</name>
	</author>
	<content type="html">Dear Emina,
&lt;br&gt;&lt;br&gt;well, I will try to isolate the problem to a small example. I assume
&lt;br&gt;that it has something to do with the way i am adding all the relations
&lt;br&gt;into a map.
&lt;br&gt;Normally you define the relations as &amp;quot;final&amp;quot;, but in my application i
&lt;br&gt;can not do that. Maybe it has something to do with it.
&lt;br&gt;&lt;br&gt;Regards
&lt;br&gt;Christian
&lt;br&gt;&lt;br&gt;--- In &lt;a href=&quot;http://www.nabble.com/user/SendEmail.jtp?type=post&amp;post=17238008&amp;i=0&quot; target=&quot;_top&quot; rel=&quot;nofollow&quot;&gt;alloy-discuss@...&lt;/a&gt;, Emina Torlak &amp;lt;emina@...&amp;gt; wrote:
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Dear Chris,
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; This should not be happening if all of your relations are bound &amp;nbsp;
&lt;br&gt;&amp;gt; properly. &amp;nbsp;However, I can't tell why you are getting the exception &amp;nbsp;
&lt;br&gt;&amp;gt; without seeing the code. &amp;nbsp;Can you try reducing your example to a &amp;nbsp;
&lt;br&gt;&amp;gt; small test case that demonstrates the bug?
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; Sincerely,
&lt;br&gt;&amp;gt; Emina
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; On May 14, 2008, at 1:17 PM, chrissoalloyuser wrote:
&lt;br&gt;&amp;gt; 
&lt;br&gt;&amp;gt; &amp;gt; Dear Users,
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; I am working with Kodkod and I create Bounds and Constraints
&lt;br&gt;&amp;gt; &amp;gt; dynamically at runtime. I get an UnboundLeafException for a relation,
&lt;br&gt;&amp;gt; &amp;gt; that is in the Bounds object. I checked this with the
&lt;br&gt;&amp;gt; &amp;gt; bounds.relations() function. Do you have any suggestions why I
&lt;br&gt;&amp;gt; &amp;gt; nevertheless get this Exception ?
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; It's not easy to add a Code Example, because it is a long piece of &amp;nbsp;
&lt;br&gt;&amp;gt; &amp;gt; code.
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt; Thanks and Regards
&lt;br&gt;&amp;gt; &amp;gt; Christian
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt; &amp;gt;
&lt;br&gt;&amp;gt;
&lt;/div&gt;&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://www.nabble.com/UnboundLeafException-for-a-relation-that-is-in-the-Bounds-object-tp17236431p17238008.html" />
</entry>

<entry>
	<id>tag:www.nabble.com,2006:post-17236566</id>
	<title>Re: UnboundLeafException for a relation that is in the Bounds object</title>
	<published>2008-05-14T10:23:48Z</published>
	<updated>2008-05-14T10:23:48Z</updated>
	<author>
		<name>Emina Torlak</name>
	</author>
	<content type="html">Dear Chris,
&lt;br&gt;&lt;br&gt;This should not be happening if all of your relations are bound &amp;nbsp;
&lt;br&gt;properly. &amp;nbsp;However, I can't tell why you are getting the exception &amp;nbsp;
&lt;br&gt;without seeing the code. &amp;nbsp;Can you try reducing your example to a &amp;nbsp;
&lt;br&gt;small test case that demonstrates the bug?
&lt;br&gt;&lt;br&gt;Sincerely,
&lt;br&gt;Emina
&lt;br&gt;&lt;br&gt;&lt;br&gt;On May 14, 2008, at 1:17 PM, chrissoalloyuser wrote:
&lt;br&gt;&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt; Dear Users,
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; I am working with Kodkod and I create Bounds and Constraints
&lt;br&gt;&amp;gt; dynamically at runtime. I get an UnboundLeafException for a relation,
&lt;br&gt;&amp;gt; that is in the Bounds object. I checked this with the
&lt;br&gt;&amp;gt; bounds.relations() function. Do you have any suggestions why I
&lt;br&gt;&amp;gt; nevertheless get this Exception ?
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; It's not easy to add a Code Example, because it is a long piece of &amp;nbsp;
&lt;br&gt;&amp;gt; code.
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; Thanks and Regards
&lt;br&gt;&amp;gt; Christian
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; 
&lt;/div&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://www.nabble.com/UnboundLeafException-for-a-relation-that-is-in-the-Bounds-object-tp17236431p17236566.html" />
</entry>

<entry>
	<id>tag:www.nabble.com,2006:post-17236480</id>
	<title>Re: UnboundLeafException for a relation that is in the Bounds object</title>
	<published>2008-05-14T10:20:09Z</published>
	<updated>2008-05-14T10:20:09Z</updated>
	<author>
		<name>Felix Chang-2</name>
	</author>
	<content type="html">On Wed, 14 May 2008, chrissoalloyuser wrote:
&lt;div class='shrinkable-quote'&gt;&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; I am working with Kodkod and I create Bounds and Constraints
&lt;br&gt;&amp;gt; dynamically at runtime. I get an UnboundLeafException for a relation,
&lt;br&gt;&amp;gt; that is in the Bounds object. I checked this with the
&lt;br&gt;&amp;gt; bounds.relations() function. Do you have any suggestions why I
&lt;br&gt;&amp;gt; nevertheless get this Exception &amp;nbsp;?
&lt;br&gt;&amp;gt;
&lt;br&gt;&amp;gt; It's not easy to add a Code Example, because it is a long piece of code.
&lt;br&gt;&amp;gt; Thanks and Regards
&lt;br&gt;&amp;gt; Christian
&lt;/div&gt;&lt;br&gt;UnboundLeafException should only occur if you forget to add the relation
&lt;br&gt;to the Bounds you are using. &amp;nbsp;If you suspect there is a bug,
&lt;br&gt;please email the complete code to Emina Torlak (emina AT mit.edu)
&lt;br&gt;&lt;br&gt;Sincerely,
&lt;br&gt;Felix Chang
&lt;br&gt;Alloy4 Developer
&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://www.nabble.com/UnboundLeafException-for-a-relation-that-is-in-the-Bounds-object-tp17236431p17236480.html" />
</entry>

<entry>
	<id>tag:www.nabble.com,2006:post-17236431</id>
	<title>UnboundLeafException for a relation that is in the Bounds object</title>
	<published>2008-05-14T10:17:39Z</published>
	<updated>2008-05-14T10:17:39Z</updated>
	<author>
		<name>chrissoalloyuser</name>
	</author>
	<content type="html">Dear Users,
&lt;br&gt;&lt;br&gt;I am working with Kodkod and I create Bounds and Constraints
&lt;br&gt;dynamically at runtime. I get an UnboundLeafException for a relation,
&lt;br&gt;that is in the Bounds object. I checked this with the
&lt;br&gt;bounds.relations() function. Do you have any suggestions why I
&lt;br&gt;nevertheless get this Exception &amp;nbsp;?
&lt;br&gt;&lt;br&gt;It's not easy to add a Code Example, because it is a long piece of code.
&lt;br&gt;&lt;br&gt;Thanks and Regards
&lt;br&gt;Christian
&lt;br&gt;&lt;br&gt;</content>
	<link rel="alternate" type="text/html" href="http://www.nabble.com/UnboundLeafException-for-a-relation-that-is-in-the-Bounds-object-tp17236431p17236431.html" />
</entry>

</feed>
