<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="bbPress/1.0.2" -->
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title>TLA+ &#124; The way to specify &#187; Recent Topics</title>
		<link>http://bbpress.tlaplus.net/</link>
		<description>The TLA+ and PlusCal Resource</description>
		<language>en-US</language>
		<pubDate>Wed, 22 Feb 2012 23:41:58 +0000</pubDate>
		<generator>http://bbpress.org/?v=1.0.2</generator>
		<textInput>
			<title><![CDATA[Search]]></title>
			<description><![CDATA[Search all topics from these forums.]]></description>
			<name>q</name>
			<link>http://bbpress.tlaplus.net/search.php</link>
		</textInput>
		<atom:link href="http://bbpress.tlaplus.net/rss/topics" rel="self" type="application/rss+xml" />

		<item>
			<title>CharpoV on "Still the same old bug"</title>
			<link>http://bbpress.tlaplus.net/topic/still-the-same-old-bug#post-165</link>
			<pubDate>Tue, 07 Feb 2012 20:48:32 +0000</pubDate>
			<dc:creator>CharpoV</dc:creator>
			<guid isPermaLink="false">165@http://bbpress.tlaplus.net/</guid>
			<description>&#60;p&#62;This old bug is getting to be really annoying, especially now that it shows up even in the simplest examples I use in a class I'm teaching on TLA/TLC (and severely undermines my message on the beauty of model-checking).  Is there a version of TLC in which the bug has been fixed (I'm using the command-line tools, not the fancy toolbox)?  Will it ever be fixed?  How is it that I seem to be the only user who gets into this problem with astounding regularity?&#60;/p&#62;
&#60;p&#62;Below is a small module that exhibits the problem.  The trace produced by TLC is clearly not a valid counterexample to the leads-to.&#60;/p&#62;
&#60;p&#62;MC&#60;/p&#62;
&#60;p&#62;Module:&#60;br /&#62;
&#60;code&#62;&#60;br /&#62;
-------------------- MODULE X --------------------&#60;br /&#62;
EXTENDS Naturals&#60;/p&#62;
&#60;p&#62;VARIABLES x, b&#60;/p&#62;
&#60;p&#62;A ==&#60;br /&#62;
  /\ x &#38;lt; 5&#60;br /&#62;
  /\ b&#60;br /&#62;
  /\ b' = ~b&#60;br /&#62;
  /\ UNCHANGED x&#60;/p&#62;
&#60;p&#62;B ==&#60;br /&#62;
  /\ ~b&#60;br /&#62;
  /\ b' = ~b&#60;br /&#62;
  /\ x' = x + 1&#60;/p&#62;
&#60;p&#62;Init == x \in 0..3 /\ b \in BOOLEAN&#60;/p&#62;
&#60;p&#62;Prog == Init /\ [][A \/ B]_&#38;lt;&#38;lt;x, b&#38;gt;&#38;gt; /\ WF_&#38;lt;&#38;lt;x, b&#38;gt;&#38;gt;(A \/ B)&#60;/p&#62;
&#60;p&#62;--------------------------------------------------------------------------------&#60;br /&#62;
Xshrinks == x=2 ~&#38;gt; x=1&#60;br /&#62;
================================================================================&#60;br /&#62;
&#60;/code&#62;&#60;/p&#62;
&#60;p&#62;Trace:&#60;br /&#62;
&#60;code&#62;&#60;/p&#62;
&#60;p&#62;State 1: &#38;lt;Initial predicate&#38;gt;&#60;br /&#62;
/\ b = FALSE&#60;br /&#62;
/\ x = 3&#60;/p&#62;
&#60;p&#62;State 2: &#38;lt;Action line 13, col 3 to line 15, col 15 of module X&#38;gt;&#60;br /&#62;
/\ b = TRUE&#60;br /&#62;
/\ x = 4&#60;/p&#62;
&#60;p&#62;State 3: &#38;lt;Action line 7, col 3 to line 10, col 16 of module X&#38;gt;&#60;br /&#62;
/\ b = FALSE&#60;br /&#62;
/\ x = 4&#60;/p&#62;
&#60;p&#62;State 4: &#38;lt;Action line 13, col 3 to line 15, col 15 of module X&#38;gt;&#60;br /&#62;
/\ b = TRUE&#60;br /&#62;
/\ x = 5&#60;/p&#62;
&#60;p&#62;State 5: Stuttering&#60;br /&#62;
&#60;/code&#62;
&#60;/p&#62;</description>
		</item>
		<item>
			<title>groban on "Hi - Newbee Question"</title>
			<link>http://bbpress.tlaplus.net/topic/hi-newbee-question#post-149</link>
			<pubDate>Sun, 10 Jul 2011 10:10:31 +0000</pubDate>
			<dc:creator>groban</dc:creator>
			<guid isPermaLink="false">149@http://bbpress.tlaplus.net/</guid>
			<description>&#60;p&#62;I am trying to understand both TLA+ and toolbox. I am useing toolbox-64 on windows 7 prof 64bit. I am testing the hourclock example. ok.&#60;br /&#62;
I am changing HCnxt with the following&#60;/p&#62;
&#60;p&#62;'HCnxt == IF hr' # 14 THEN hr+1 ELSE 1'&#60;/p&#62;
&#60;p&#62;This change shouldn't make my theorem incorrect? I am running model checker and it founds no errors.&#60;/p&#62;
&#60;p&#62;Also in the model checker when i am clicking in the header of the column an empty new window with no state graph is presented.&#60;/p&#62;
&#60;p&#62;Finally, when i am trying to lanch model prover (with right click) it creates an error message that doesn't find c:/cygwin/bin. Does the toolbox needs cygwin pre-installed?&#60;/p&#62;
&#60;p&#62;Thanks for your time
&#60;/p&#62;</description>
		</item>
		<item>
			<title>CharpoV on "(old) leads-to bug"</title>
			<link>http://bbpress.tlaplus.net/topic/old-leads-to-bug#post-161</link>
			<pubDate>Thu, 17 Nov 2011 23:56:04 +0000</pubDate>
			<dc:creator>CharpoV</dc:creator>
			<guid isPermaLink="false">161@http://bbpress.tlaplus.net/</guid>
			<description>&#60;p&#62;I'm seing (again) a counterexample for a property of the form p ~&#38;gt; q in which the cycle of states is such that p is always false.  This is a longstanding bug (I can provide the module if needed).&#60;/p&#62;
&#60;p&#62;In my desperation, I tried to use the toolbox instead of the command-line tools (although it looks both use TLC2 Version 2.03 of 20 July 2011).  What I get then is &#34;java.io.EOFException&#34;.&#60;/p&#62;
&#60;p&#62;Also, is setting Java's class path to toolbox/plugins/org.lamport.tlatools_1.0.0.201109181126 equivalent to using the command-line tools?&#60;/p&#62;
&#60;p&#62;MC
&#60;/p&#62;</description>
		</item>
		<item>
			<title>CharpoV on "Feature request"</title>
			<link>http://bbpress.tlaplus.net/topic/feature-request#post-160</link>
			<pubDate>Thu, 17 Nov 2011 17:24:50 +0000</pubDate>
			<dc:creator>CharpoV</dc:creator>
			<guid isPermaLink="false">160@http://bbpress.tlaplus.net/</guid>
			<description>&#60;p&#62;TLC won't let me use:&#60;/p&#62;
&#60;p&#62;\A &#38;lt;&#38;lt;x,y&#38;gt;&#38;gt; \in AllRouters, s \in Sides :&#60;br /&#62;
LET q == grid[x, y][s].in&#60;br /&#62;
IN  \/ q = &#38;lt;&#38;lt;&#38;gt;&#38;gt;&#60;br /&#62;
    \/ Head(q).header # &#38;lt;&#38;lt;x,y&#38;gt;&#38;gt;&#60;/p&#62;
&#60;p&#62;However, this ugly alternative works:&#60;br /&#62;
...&#60;br /&#62;
IN IF q = &#38;lt;&#38;lt;&#38;gt;&#38;gt; THEN TRUE ELSE Head(q).header # &#38;lt;&#38;lt;x,y&#38;gt;&#38;gt;&#60;/p&#62;
&#60;p&#62;Could TLC's evaluation of disjunctions be improved to avoid the problem?  Or is there a non-ugly alternative that I'm missing?&#60;/p&#62;
&#60;p&#62;(Note: I'm using the command-line tools, TLC2 Version 2.03 of 20 July 2011.)&#60;/p&#62;
&#60;p&#62;MC
&#60;/p&#62;</description>
		</item>
		<item>
			<title>sid_rao on "&#34;Successor state is not completely specified by the next-state action&#34; error"</title>
			<link>http://bbpress.tlaplus.net/topic/successor-state-is-not-completely-specified-by-the-next-state-action-error#post-158</link>
			<pubDate>Mon, 24 Oct 2011 17:10:35 +0000</pubDate>
			<dc:creator>sid_rao</dc:creator>
			<guid isPermaLink="false">158@http://bbpress.tlaplus.net/</guid>
			<description>&#60;p&#62;Hi, I have some experience with TLA+. Currently, I am writing a specification which gives the following error,&#60;br /&#62;
&#34;Error: Successor state is not completely specified by the next-state action.&#34;&#60;/p&#62;
&#60;p&#62;The transition function in the model which causes this error is,&#60;/p&#62;
&#60;p&#62;BootRomOp ==&#60;br /&#62;
             /\ pc = &#34;rom&#34;&#60;br /&#62;
	     /\ BootRom_state' = IF (BootRom_corrupt=0)&#60;br /&#62;
 			         THEN &#34;malicious&#34;&#60;br /&#62;
                                 ELSE &#34;good&#34;&#60;br /&#62;
	     /\ pc' = &#34;boot&#34;&#60;br /&#62;
             /\ UNCHANGED &#38;lt;&#38;lt;variables&#38;gt;&#38;gt;&#60;br /&#62;
---end---&#60;/p&#62;
&#60;p&#62;However, the error goes away and TLC completes successfully, if I remove the &#34;IF THEN ELSE&#34; construct from the above transition function, and reformulate the function as, for example,&#60;/p&#62;
&#60;p&#62;BootRomOp ==&#60;br /&#62;
             /\ pc = &#34;rom&#34;&#60;br /&#62;
	     /\ BootRom_state' = &#34;good&#34;&#60;br /&#62;
	     /\ pc' = &#34;boot&#34;&#60;br /&#62;
             /\ UNCHANGED &#38;lt;&#38;lt;variables&#38;gt;&#38;gt;&#60;br /&#62;
----end-----&#60;/p&#62;
&#60;p&#62;Can someone give me an insight into why I am getting the &#34;Successor state is not completely specified&#34; error?
&#60;/p&#62;</description>
		</item>
		<item>
			<title>Parul on "TLA+ Specification"</title>
			<link>http://bbpress.tlaplus.net/topic/tla-specification#post-156</link>
			<pubDate>Sun, 25 Sep 2011 19:51:07 +0000</pubDate>
			<dc:creator>Parul</dc:creator>
			<guid isPermaLink="false">156@http://bbpress.tlaplus.net/</guid>
			<description>&#60;p&#62;Hi,&#60;br /&#62;
I am new to TLA.I am exploring TLA+ tools and i am facing problems in this.I have following queries&#60;br /&#62;
1)I want to know how to get output for any code.suppose we write code for factorial program(in which we are calculating factorial of a number) so where we will get its output.&#60;br /&#62;
2)How to check a model with tlc when there is no liveness property?&#60;br /&#62;
Thanks in advance
&#60;/p&#62;</description>
		</item>
		<item>
			<title>Leslie Lamport on "Introduction to the Distributed TLC Forum"</title>
			<link>http://bbpress.tlaplus.net/topic/introduction-to-the-distributed-tlc-forum#post-155</link>
			<pubDate>Thu, 15 Sep 2011 11:39:01 +0000</pubDate>
			<dc:creator>Leslie Lamport</dc:creator>
			<guid isPermaLink="false">155@http://bbpress.tlaplus.net/</guid>
			<description>&#60;p&#62;The next release of the TLA+ Toolbox will allow TLC to run in distributed mode.  You will be able to execute a TLC run in parallel on dozens or hundreds of computers, potentially speeding up model checking by one or two orders of magnitude.  However, this will require automating the process of starting the workers, and we don't know how to do that on all the different operating systems and networks that people use.  The purpose of this forum is for users to share their experiences of running TLC in distributed mode, so we can all learn what works on what kinds of systems.
&#60;/p&#62;</description>
		</item>
		<item>
			<title>kbanks on "Creating a Sequence from a Set?"</title>
			<link>http://bbpress.tlaplus.net/topic/creating-a-sequence-from-a-set#post-123</link>
			<pubDate>Sun, 12 Dec 2010 09:16:34 +0000</pubDate>
			<dc:creator>kbanks</dc:creator>
			<guid isPermaLink="false">123@http://bbpress.tlaplus.net/</guid>
			<description>&#60;p&#62;If I have a set like a = {1,2,3} and I create a Sequence b = Sequence(a), I get a sequence of length 1, with the sole element being the set. In other words, b = &#38;lt;&#38;lt;{1,2,3}&#38;gt;&#38;gt;.&#60;/p&#62;
&#60;p&#62;What is the right way to somehow enumerate over the set, so I can define a set of things in my config (.cfg) file, and make a sequence from them in my .tla file? (My intent was to wind up with b = &#38;lt;&#38;lt;1,2,3&#38;gt;&#38;gt;)
&#60;/p&#62;</description>
		</item>
		<item>
			<title>mkoconnor on "Nullpointerexception"</title>
			<link>http://bbpress.tlaplus.net/topic/nullpointerexception#post-150</link>
			<pubDate>Fri, 19 Aug 2011 09:18:18 +0000</pubDate>
			<dc:creator>mkoconnor</dc:creator>
			<guid isPermaLink="false">150@http://bbpress.tlaplus.net/</guid>
			<description>&#60;p&#62;First of all, thanks for this!  It looks great.&#60;/p&#62;
&#60;p&#62;I get a Null Pointer exception every time I try to run TLC on any model (i.e., click the Green run model button).  I'm not sure what  all information you need, but I'm on a Mac and this is the toolbox version:&#60;/p&#62;
&#60;p&#62;This is Version 1.3.1 of 5 April 2011 and includes:&#60;br /&#62;
  - SANY Version 2.1 of 10 February 2011&#60;br /&#62;
  - TLC Version 2.03 of 26 May 2010&#60;br /&#62;
  - PlusCal Version 1.5 of 19 March 2011&#60;br /&#62;
  - TLATeX Version .9 of 19 September 2007&#60;/p&#62;
&#60;p&#62;and this is my machine and Java versions:&#60;/p&#62;
&#60;p&#62;$ uname -a&#60;br /&#62;
Darwin Michael-OConnors-MacBook-Pro.local 10.8.0 Darwin Kernel Version 10.8.0: Tue Jun  7 16:33:36 PDT 2011; root:xnu-1504.15.3~1/RELEASE_I386 i386&#60;br /&#62;
$ java -version&#60;br /&#62;
java version &#34;1.6.0_26&#34;&#60;br /&#62;
Java(TM) SE Runtime Environment (build 1.6.0_26-b03-384-10M3425)&#60;br /&#62;
Java HotSpot(TM) 64-Bit Server VM (build 20.1-b02-384, mixed mode)&#60;/p&#62;
&#60;p&#62;Thanks!
&#60;/p&#62;</description>
		</item>
		<item>
			<title>Leslie Lamport on "Coming Soon: Parallel Execution of TLC on a Network"</title>
			<link>http://bbpress.tlaplus.net/topic/coming-soon-parallel-execution-of-tlc-on-a-network#post-148</link>
			<pubDate>Tue, 28 Jun 2011 10:39:24 +0000</pubDate>
			<dc:creator>Leslie Lamport</dc:creator>
			<guid isPermaLink="false">148@http://bbpress.tlaplus.net/</guid>
			<description>&#60;p&#62;We are going to enhance the Toolbox and the TLC model checker to&#60;br /&#62;
enable running TLC on a network of machines.  We hope this will&#60;br /&#62;
provide a speedup that is linear in the number of machines for dozens&#60;br /&#62;
and perhaps hundreds of machines.  Because of the variety of networks&#60;br /&#62;
that people might use, we cannot make it as easy to use TLC on a&#60;br /&#62;
network as on a single machine.  To try to make it reasonably easy for&#60;br /&#62;
must users, we would like to find out how this will be used.&#60;/p&#62;
&#60;p&#62;If you would be likely to use this feature, please let us know how you&#60;br /&#62;
would use it.  You can either post to this forum or send email to&#60;br /&#62;
Leslie Lamport (&#60;a href=&#34;http://lamport.org&#34;&#62;http://lamport.org&#60;/a&#62;) briefly&#60;br /&#62;
describing:&#60;/p&#62;
&#60;ul&#62;
&#60;li&#62; What operating system(s) you will be using.&#60;/li&#62;
&#60;li&#62; The network of computers you will be using, including its bandwidth,&#60;br /&#62;
  the number of machines and the kinds of machines (how many cores and&#60;br /&#62;
  how much memory they have).&#60;/li&#62;
&#60;li&#62; How the computer running the Toolbox will be connected to the&#60;br /&#62;
  network running TLC, and if it will be continuously connected&#60;br /&#62;
  to the network throughout a TLC run. &#60;/li&#62;
&#60;li&#62; If possible, the approximate number of distinct states generated&#60;br /&#62;
  by the models you would like to check.&#60;/li&#62;
&#60;/ul&#62;
&#60;p&#62;When run on a network, TLC will check only safety properties, not liveness&#60;br /&#62;
properties.  (The liveness-checking algorithm cannot easily be parallelized.)
&#60;/p&#62;</description>
		</item>
		<item>
			<title>cnewcom on "Best way to define transitive closure as an operator for TLC?"</title>
			<link>http://bbpress.tlaplus.net/topic/best-way-to-define-transitive-closure-as-an-operator-for-tlc#post-141</link>
			<pubDate>Sun, 05 Jun 2011 23:05:38 +0000</pubDate>
			<dc:creator>cnewcom</dc:creator>
			<guid isPermaLink="false">141@http://bbpress.tlaplus.net/</guid>
			<description>&#60;p&#62;Does anyone have a definition of a transitive closure operator that is efficient for TLC to evaluate?&#60;/p&#62;
&#60;p&#62;A paper [1] shows that transitive closure cannot be defined in first order logic, but it can be defined in Datalog, as datalog guarantees to use the least-fixed-point solution.&#60;br /&#62;
I would use this CHOOSE solution, which appears to work for small test cases.  But per [2], TLA+ does not guarantee that CHOOSE finds the least fix-point solution, which means this definition is incorrect (I think).  This definition is also very slow in TLC, for anything other than tiny inputs.&#60;/p&#62;
&#60;p&#62;IsTransitive(r) == \A x, y, z \in Univ :&#60;br /&#62;
	                 &#38;lt;&#38;lt;x, y&#38;gt;&#38;gt; \in r /\ &#38;lt;&#38;lt;y, z&#38;gt;&#38;gt; \in r =&#38;gt; &#38;lt;&#38;lt;x, z&#38;gt;&#38;gt; \in r  &#60;/p&#62;
&#60;p&#62;TCChoose(r) == CHOOSE TCr \in SUBSET (Univ \X Univ) :&#60;br /&#62;
                    /\ r \subseteq TCr            (* \subset doesn't parse, why? p273 *)&#60;br /&#62;
                    /\ IsTransitive(TCr)&#60;br /&#62;
                    /\ (* No smaller value meets the same conditions *)&#60;br /&#62;
                        ~ \E tuple \in TCr :&#60;br /&#62;
                            LET one_smaller == TCr \ {tuple}&#60;br /&#62;
                            IN  /\ r \subseteq one_smaller&#60;br /&#62;
                                /\ IsTransitive(one_smaller)&#60;/p&#62;
&#60;p&#62;I wrote a constructive version that recurs until reaching least fixpoint (below).&#60;br /&#62;
But I’m planning to make heavy use of this operator, so I’d like to know if there’s a faster way.&#60;br /&#62;
Also, I recall reading that it’s possible to implement particular TLA+ modules in Java, for TLC.  Has anyone found that to be worth the effort?&#60;/p&#62;
&#60;p&#62;Thanks,&#60;/p&#62;
&#60;p&#62;Chris&#60;/p&#62;
&#60;p&#62;TCRecur(r) == LET RECURSIVE selfJoin(_)&#60;br /&#62;
                selfJoin(r1) ==&#60;br /&#62;
                  LET MissingJoinTuples(left,right) == {&#38;lt;&#38;lt;x, z&#38;gt;&#38;gt; \in (Univ \X Univ) :&#60;br /&#62;
                              /\ &#38;lt;&#38;lt;x, z&#38;gt;&#38;gt; \notin left&#60;br /&#62;
                              /\ &#38;lt;&#38;lt;x, z&#38;gt;&#38;gt; \notin right&#60;br /&#62;
                              /\ \E y \in Univ : &#38;lt;&#38;lt;x, y&#38;gt;&#38;gt; \in left /\ &#38;lt;&#38;lt;y, z&#38;gt;&#38;gt; \in right}&#60;br /&#62;
                      mjt == MissingJoinTuples(r1, r1)&#60;br /&#62;
                  IN IF mjt = {} THEN r1   (* have reached least fixpoint, so this must be transitive closure *)&#60;br /&#62;
                                 ELSE LET bigger == r1 \union mjt&#60;br /&#62;
                                      IN bigger \union selfJoin(bigger)&#60;br /&#62;
              IN selfJoin(r)&#60;/p&#62;
&#60;p&#62;(* Test constant expressions, with Univ &#38;lt;- {a, b, c, d, e, f}&#60;/p&#62;
&#60;p&#62;TCChoose({&#38;lt;&#38;lt;a, b&#38;gt;&#38;gt;, &#38;lt;&#38;lt;b, c&#38;gt;&#38;gt;, &#38;lt;&#38;lt;d, e&#38;gt;&#38;gt;, &#38;lt;&#38;lt;d, f&#38;gt;&#38;gt;}) = {&#38;lt;&#38;lt;a, b&#38;gt;&#38;gt;, &#38;lt;&#38;lt;a, c&#38;gt;&#38;gt;, &#38;lt;&#38;lt;b, c&#38;gt;&#38;gt;, &#38;lt;&#38;lt;d, e&#38;gt;&#38;gt;, &#38;lt;&#38;lt;d, f&#38;gt;&#38;gt;}&#60;br /&#62;
*) &#60;/p&#62;
&#60;p&#62;[1] &#60;a href=&#34;http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.127.8266&#38;amp;rep=rep1&#38;amp;type=pdf&#34; rel=&#34;nofollow&#34;&#62;http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.127.8266&#38;amp;rep=rep1&#38;amp;type=pdf&#60;/a&#62;&#60;/p&#62;
&#60;p&#62;[2] From &#60;a href=&#34;http://www.loria.fr/~merz/papers/tla+logic2008.pdf&#34; rel=&#34;nofollow&#34;&#62;http://www.loria.fr/~merz/papers/tla+logic2008.pdf&#60;/a&#62;&#60;/p&#62;
&#60;p&#62;Recursive functions can be defined in terms of choice, e.g.&#60;br /&#62;
factorial _=&#60;br /&#62;
choose f : f = [n ∈ Nat 7→ if n = 0 then 1 else n ∗ f [n − 1]]&#60;br /&#62;
which TLA+, using some syntactic sugar, offers to write more concisely as&#60;br /&#62;
factorial [n ∈ Nat ] _= if n = 0 then 1 else n ∗ factorial [n − 1]&#60;br /&#62;
Of course, as with any construction based on choice, such a definition should&#60;br /&#62;
be justified by proving the existence of a function that satisfies the recursive&#60;br /&#62;
equation. Unlike standard semantics of programming languages, TLA+ does&#60;br /&#62;
not commit to the least fixed point of a recursively defined function in cases&#60;br /&#62;
where there are several solutions.
&#60;/p&#62;</description>
		</item>
		<item>
			<title>ajholanda on "Spec: Experiment using PID Controller"</title>
			<link>http://bbpress.tlaplus.net/topic/spec-experiment-using-pid-controller#post-146</link>
			<pubDate>Tue, 21 Jun 2011 18:41:19 +0000</pubDate>
			<dc:creator>ajholanda</dc:creator>
			<guid isPermaLink="false">146@http://bbpress.tlaplus.net/</guid>
			<description>&#60;p&#62;Dear All;&#60;/p&#62;
&#60;p&#62;I am specifying a program to control an physical experiment using TLA+. I think I have my first draft, but of course there is a large room to improvements. I've tried to split the chunks of the specification it is not reliable, but the result appeared very cryptic. So I'm posting the documentation link that contains the specification:&#60;/p&#62;
&#60;p&#62;&#60;a href=&#34;http://dcm.ffclrp.usp.br/~aholanda/pidcon/pidcon.pdf&#34; rel=&#34;nofollow&#34;&#62;http://dcm.ffclrp.usp.br/~aholanda/pidcon/pidcon.pdf&#60;/a&#62;&#60;/p&#62;
&#60;p&#62;Some doubts:&#60;br /&#62;
1. At page 8 the function &#34;DoPerodicMeasures&#34; is specified, but now that I am studying temporal formulas, it seems to me that I can use them to specify this function. But a doubt occurred to me, when I specify using temporal formulas, some instructions necessary to the implementation are &#34;coupled&#34; into the formulas, it maybe is good in the specification, but the implementation loose a guide.&#60;br /&#62;
2. I think I put a lot of implementation details, mainly in the &#34;CondutivityExperiment&#34; specification.&#60;br /&#62;
3. I have doubts if &#34;DeviceInterface&#34; is being a good abstraction for the devices.&#60;/p&#62;
&#60;p&#62;I have to apologize the draft state of the material, but I need some feedback to advance.&#60;br /&#62;
Any help are welcome.&#60;/p&#62;
&#60;p&#62;Thanks in advance;&#60;/p&#62;
&#60;p&#62;Regards;&#60;/p&#62;
&#60;p&#62;Adriano.
&#60;/p&#62;</description>
		</item>
		<item>
			<title>giuliano on "Possible bug in TLC?"</title>
			<link>http://bbpress.tlaplus.net/topic/possible-bug-in-tlc#post-138</link>
			<pubDate>Tue, 12 Apr 2011 15:07:34 +0000</pubDate>
			<dc:creator>giuliano</dc:creator>
			<guid isPermaLink="false">138@http://bbpress.tlaplus.net/</guid>
			<description>&#60;p&#62;Hello, I'm having trouble running TLC. I'm using the latest version of the tla tools without the toolbox (just using a terminal on linux).&#60;/p&#62;
&#60;p&#62;Here is a simplified version of my setup:&#60;br /&#62;
-&#60;br /&#62;
I defined two modules, NoCrash and Library, as follows (in two different files):&#60;/p&#62;
&#60;pre&#62;&#60;code&#62;------------------------ MODULE NoCrash ------------------------
EXTENDS Library
CONSTANTS X
VARIABLES y
-----------------------------------
Init == y = TRUE
Z == {h \in MySeqs : \E p \in X : TRUE}
Next == Z = TRUE
==============================&#60;/code&#62;&#60;/pre&#62;
&#60;pre&#62;&#60;code&#62;------------------------------- MODULE Library  -------------------------------
CONSTANT MySeqs
=====================================&#60;/code&#62;&#60;/pre&#62;
&#60;p&#62;In order to use TLC I then defined module MCNoCrash as follows:&#60;/p&#62;
&#60;pre&#62;&#60;code&#62;-------------------- MODULE MCNoCrash --------------------------------
EXTENDS Library
CONSTANT X
BS == [{1} -&#38;gt; {1}]
VARIABLE y
I == INSTANCE NoCrash
Next == I!Next
Init == I!Init
============================&#60;/code&#62;&#60;/pre&#62;
&#60;p&#62;And the following configuration file:&#60;/p&#62;
&#60;pre&#62;&#60;code&#62;INIT Init
NEXT Next
CONSTANTS
X = {}
MySeqs &#38;lt;- BS&#60;/code&#62;&#60;/pre&#62;
&#60;p&#62;When running TLC with the command &#34;java -cp ~/tla/tla/ tlc2/TLC MCNoCrash.tla&#34;, I get the following output:&#60;br /&#62;
-&#60;br /&#62;
Computing initial states...&#60;br /&#62;
Finished computing initial states: 1 distinct state generated.&#60;br /&#62;
Error: In evaluation, the identifier X is either undefined or not an operator.&#60;br /&#62;
-&#60;br /&#62;
TLC says the error appeared while evaluating the expression &#34;{h \in MySeqs : \E p \in X : TRUE}&#34;&#60;br /&#62;
-&#60;br /&#62;
Although my setup is a bit silly I think I shouldn't get this error. For example if I set BS to the empty set instead of [{1} -&#38;gt; {1}] in module MCNoCrash the error disappears. It also disappears if I replace Z by its definition when defining Next in module NoCrash. &#60;/p&#62;
&#60;p&#62;Is this a bug or am I doing something wrong?&#60;/p&#62;
&#60;p&#62;I also get the same error in another situation involving instantiation.&#60;br /&#62;
-&#60;br /&#62;
Thanks for reading my message,&#60;br /&#62;
Giuliano
&#60;/p&#62;</description>
		</item>
		<item>
			<title>Saleem on "Measuring memory usage"</title>
			<link>http://bbpress.tlaplus.net/topic/measuring-memory-usage#post-68</link>
			<pubDate>Sun, 28 Mar 2010 11:36:00 +0000</pubDate>
			<dc:creator>Saleem</dc:creator>
			<guid isPermaLink="false">68@http://bbpress.tlaplus.net/</guid>
			<description>&#60;p&#62;How can we check memory used after verifying the specification/model/query? In verification results, I can just check. 1) Execution time 2) Diameter 3) States found and so on...but I can not check how much memory is used. Can any one help me in finding answer to this question.
&#60;/p&#62;</description>
		</item>
		<item>
			<title>robson on "WildFire Challenge and TLA+ ToolBox"</title>
			<link>http://bbpress.tlaplus.net/topic/wildfire-challenge-and-tla-toolbox#post-134</link>
			<pubDate>Tue, 05 Apr 2011 21:31:21 +0000</pubDate>
			<dc:creator>robson</dc:creator>
			<guid isPermaLink="false">134@http://bbpress.tlaplus.net/</guid>
			<description>&#60;p&#62;Hi, I am new to TLA+ and I trying explore WildFire spec in TLA+ ToolBox.&#60;br /&#62;
But, when I open the WildFire.tla and after create a model, It's is reported&#60;br /&#62;
13 errors (Model Overview tab) to &#34;Specify the values of declared constants&#34;.&#60;br /&#62;
Can anyone help-me? What is happening.
&#60;/p&#62;</description>
		</item>
		<item>
			<title>cnewcom on "Toolbox stuck in strange state after system restart while running TLC"</title>
			<link>http://bbpress.tlaplus.net/topic/toolbox-stuck-in-strange-state-after-system-restart-while-running-tlc#post-131</link>
			<pubDate>Tue, 22 Mar 2011 17:54:49 +0000</pubDate>
			<dc:creator>cnewcom</dc:creator>
			<guid isPermaLink="false">131@http://bbpress.tlaplus.net/</guid>
			<description>&#60;p&#62;I'm using Version 1.2.1 of 29 September 2010  (32-bit)&#60;br /&#62;
Running on Windoes 7 Enterprise 64-bit, on a 4-proc 4GB ThinkPad laptop.&#60;/p&#62;
&#60;p&#62;Sequence of events:&#60;/p&#62;
&#60;p&#62;1. TLC was checking a model.  (I can't remember if it was doing it in the background.)&#60;/p&#62;
&#60;p&#62;2. I had to do a system restart to install an update of some unrelated software (Adobe Reader).&#60;/p&#62;
&#60;p&#62;3. After the restart I ran the toolbox and found that:&#60;/p&#62;
&#60;p&#62;   - TLC is not running (not surprising, as I haven't restarted it.)&#60;/p&#62;
&#60;p&#62;   - The Model Overview tab says &#34;(model checking is in progress)&#34;&#60;/p&#62;
&#60;p&#62;   - The &#34;How to run&#34; options are all greyed out.   The &#34;Checkpoint Id&#34; and &#34;Checkpoint Size&#34; are populated with reasonable values, but they are greyed-out.&#60;/p&#62;
&#60;p&#62;   - The &#34;Model Checking Results&#34; tab says &#34;Current Status: Not running&#34; and &#34;Errors detected: No Errors&#34;.  The &#34;State space progress&#34; box lists the last few state reports (from before the system restart)&#60;/p&#62;
&#60;p&#62;Note: I did previously stop this TLC run, and restart from a checkpoint, without any problems. But I didn't do a system-restart that time.&#60;/p&#62;
&#60;p&#62;thanks,&#60;/p&#62;
&#60;p&#62;Chris
&#60;/p&#62;</description>
		</item>
		<item>
			<title>kbanks on "Towers of Hanoi and a question about Invariants"</title>
			<link>http://bbpress.tlaplus.net/topic/towers-of-hanoi-and-a-question-about-invariants#post-124</link>
			<pubDate>Tue, 14 Dec 2010 06:24:16 +0000</pubDate>
			<dc:creator>kbanks</dc:creator>
			<guid isPermaLink="false">124@http://bbpress.tlaplus.net/</guid>
			<description>&#60;p&#62;Created an example for the &#34;Towers of Hanoi&#34; logic puzzle, but ran out of time before I could add any error checking using invariants.&#60;/p&#62;
&#60;p&#62;Anybody got a good suggestion for what I should have verified in&#60;/p&#62;
&#60;pre&#62;&#60;code&#62;(*
TypeInvariant == /\ peg1 ???
                 /\ peg2 ???
                 /\ peg3 ???
*)&#60;/code&#62;&#60;/pre&#62;
&#60;p&#62;Hanoi.tla&#60;br /&#62;
&#60;pre&#62;&#60;code&#62;------------------------------ MODULE Hanoi ---------------------------------
(***************************************************************************)
(* &#38;quot;Towers of Hanoi&#38;quot; puzzle solved using TLA+ 12/12/2010-12/13/2010        *)
(* Transfer a stack of disks from one peg to another, with the constraint  *)
(* that a larger disk can never be placed on a smaller disk. A third peg   *)
(* makes the puzzle possible.                                              *)
(***************************************************************************)

(***************************************************************************)
(* Since we care about the SIZE of the disks we represent them as integers *)
(* We will represent each peg as a sequence of those disks, with the Head  *)
(* of each Sequence representing the TOP of that stack of disks.           *)
(***************************************************************************)
EXTENDS Integers, Sequences
CONSTANTS NumberOfDisks
VARIABLE peg1, peg2, peg3

-----------------------------------------------------------------------------

\* I never did find a way to specify the initial tuple in the .cfg file...
Disks == [i \in 1..NumberOfDisks &#124;-&#38;gt; i]

Init == /\ peg1 = Disks
        /\ peg2 = &#38;lt;&#38;lt;&#38;gt;&#38;gt;
        /\ peg3 = &#38;lt;&#38;lt;&#38;gt;&#38;gt;

(*
TypeInvariant == /\ peg1 ???
                 /\ peg2 ???
                 /\ peg3 ???
*)

(***************************************************************************)
(* Helper function, needed because the destination peg might be empty      *)
(* (You cannot take the Head() of an empty Sequence!)                      *)
(* What we do in the &#38;quot;empty peg&#38;quot; case is return a number bigger than ANY   *)
(* disk.                                                                   *)
(***************************************************************************)
Top(peg) == IF peg = &#38;lt;&#38;lt;&#38;gt;&#38;gt; THEN NumberOfDisks+1 ELSE Head(peg)

(***************************************************************************)
(* A legal move in Hanoi, genericized in terms of src peg, dest peg, and   *)
(* the spare peg                                                           *)
(***************************************************************************)
MoveDisk(src, dest, spare) == /\ src # &#38;lt;&#38;lt;&#38;gt;&#38;gt;
                              /\ Head(src) &#38;lt; Top(dest)
                              /\ src&#38;#39; = Tail(src)
                              /\ dest&#38;#39; = SubSeq(src,1,1) \o dest
                              /\ UNCHANGED &#38;lt;&#38;lt;spare&#38;gt;&#38;gt;

(***************************************************************************)
(* The legal moves in Hanoi, specified in terms of MoveDisk.               *)
(***************************************************************************)

MoveTopDiskFromPeg1ToPeg2 == MoveDisk(peg1, peg2, peg3)

MoveTopDiskFromPeg1ToPeg3 == MoveDisk(peg1, peg3, peg2)

MoveTopDiskFromPeg2ToPeg1 == MoveDisk(peg2, peg1, peg3)

MoveTopDiskFromPeg2ToPeg3 == MoveDisk(peg2, peg3, peg1)

MoveTopDiskFromPeg3ToPeg1 == MoveDisk(peg3, peg1, peg2)

MoveTopDiskFromPeg3ToPeg2 == MoveDisk(peg3, peg2, peg1)

Next == \/ MoveTopDiskFromPeg1ToPeg2
        \/ MoveTopDiskFromPeg1ToPeg3
        \/ MoveTopDiskFromPeg2ToPeg1
        \/ MoveTopDiskFromPeg2ToPeg3
        \/ MoveTopDiskFromPeg3ToPeg1
        \/ MoveTopDiskFromPeg3ToPeg2

Spec == Init /\ [][Next]_&#38;lt;&#38;lt;peg1, peg2, peg3&#38;gt;&#38;gt;
-----------------------------------------------------------------------------

Solved == /\ peg1 = &#38;lt;&#38;lt;&#38;gt;&#38;gt;
          /\ peg2 = &#38;lt;&#38;lt;&#38;gt;&#38;gt;
          /\ peg3 = Disks

NotSolved == ~Solved
=============================================================================&#60;/code&#62;&#60;/pre&#62;
&#60;p&#62;Hanoi.cfg&#60;br /&#62;
&#60;pre&#62;&#60;code&#62;CONSTANTS
  NumberOfDisks = 3

SPECIFICATION Spec
\*INVARIANTS TypeInvariant NotSolved
INVARIANTS NotSolved&#60;/code&#62;&#60;/pre&#62;</description>
		</item>
		<item>
			<title>notpattison on "Trouble with Channels in PlusCal"</title>
			<link>http://bbpress.tlaplus.net/topic/trouble-with-channels-in-pluscal#post-125</link>
			<pubDate>Thu, 03 Feb 2011 05:10:29 +0000</pubDate>
			<dc:creator>notpattison</dc:creator>
			<guid isPermaLink="false">125@http://bbpress.tlaplus.net/</guid>
			<description>&#60;p&#62;I'm a graduate student learning PlusCal in an Independent Study. I'm using PlusCal to model a concurrent system, and I need to use channels and message queues to model communication between processes. I attempted to reuse the Channel and FIFO modules described in the Specifying Systems book, but I'm having trouble. The model I'm creating requires more than one channel so I tried to use INSTANCE to create multiple instances of the Channel module. I used define { InChan == INSTANCE Channel WITH Data &#38;lt;- PassengerNames, chan &#38;lt;- in }. PlusCal failed to translate, and the translator complains about the comma in the InChan definition (I can give you the exact error message in a second post). I also don't know how to make InChan!Init apart of the Init operation generated by PlusCal. Also, I'm having trouble getting a TypeInvariant operation to work. I've had no luck modeling any part of a system in TLA when using PlusCal. Ultimately, I decided to use PlusCal to implement the channels and message queue, but it was tedious work.&#60;/p&#62;
&#60;p&#62;Do you have any suggestions for geting TLA modules to work in a PlusCal model?
&#60;/p&#62;</description>
		</item>
		<item>
			<title>kbanks on "By a newbie for fellow newbies - Missionaries and Cannibals"</title>
			<link>http://bbpress.tlaplus.net/topic/by-a-newbie-for-fellow-newbies-missionaries-and-cannibals#post-122</link>
			<pubDate>Sun, 12 Dec 2010 04:36:23 +0000</pubDate>
			<dc:creator>kbanks</dc:creator>
			<guid isPermaLink="false">122@http://bbpress.tlaplus.net/</guid>
			<description>&#60;p&#62;(second attempt at this post - failed the captcha the first time (?))&#60;/p&#62;
&#60;p&#62;Fellow beginners may find this example useful. I took what I learned from the &#34;DieHard&#34; example and wrote a TLA+ spec to solve the &#34;Missionaries and Cannibals&#34; puzzle.&#60;/p&#62;
&#60;p&#62;Config file Cannibal.cfg&#60;br /&#62;
&#60;pre&#62;&#60;code&#62;SPECIFICATION Spec
INVARIANTS TypeOK NotSolved&#60;/code&#62;&#60;/pre&#62;
&#60;p&#62;Spec file Cannibal.tla&#60;br /&#62;
&#60;pre&#62;&#60;code&#62;------------------------------ MODULE Cannibal -----------------------------
(***************************************************************************)
(* The Missionaries and Cannibals Problem solved using TLA+                *)
(* Everybody starts on the lhs of the river                                *)
(* The goal is to get everybody safely across the river                    *)
(* The boat can only carry 1 or 2 (never none)                             *)
(* If the cannibals ever outnumber the missionaries, they will eat them!   *)
(* NOTE-there CAN legally be more cannibals than missionaries on the same  *)
(* side of the river when the number of missionaries = 0                   *)
(* Worked on this 12/07/2010-12/08/2010                                    *)
(***************************************************************************)
EXTENDS Naturals

VARIABLES cl,   \* The number of cannibals on the lhs of the river.
          ml,   \* The number of missionaries on the lhs of the river.
          cr,   \* The number of cannibals on the rhs of the river.
          mr,   \* The number of missionaries on the rhs of the river.
          boat  \* 0 when boat is on the lhs, 1 when the boat is on the rhs

TypeOK == /\ cl \in 0..3
          /\ ml \in 0..3
          /\ cr \in 0..3
          /\ mr \in 0..3
          /\ boat \in 0..1

Init == /\ cl = 3
        /\ ml = 3
        /\ cr = 0
        /\ mr = 0
        /\ boat = 0

(***************************************************************************)
(* Now we define the actions that can happen.  There are ten.              *)
(* Because the boat changes sides each time a crossing is made, only 5 are *)
(* possible at any given time.                                             *)
(***************************************************************************)

BoatLR1C      == /\ boat = 0
                 /\ cl &#38;gt;= 1
                 /\ \/ mr = 0
                    \/ mr &#38;gt;= cr+1
                 /\ boat&#38;#39; = 1
                 /\ cl&#38;#39; = cl-1
                 /\ UNCHANGED &#38;lt;&#38;lt;ml&#38;gt;&#38;gt;
                 /\ cr&#38;#39; = cr+1
                 /\ UNCHANGED &#38;lt;&#38;lt;mr&#38;gt;&#38;gt;

BoatLR2C      == /\ boat = 0
                 /\ cl &#38;gt;= 2
                 /\ \/ mr = 0
                    \/ mr &#38;gt;= cr+2
                 /\ boat&#38;#39; = 1
                 /\ cl&#38;#39; = cl-2
                 /\ UNCHANGED &#38;lt;&#38;lt;ml&#38;gt;&#38;gt;
                 /\ cr&#38;#39; = cr+2
                 /\ UNCHANGED &#38;lt;&#38;lt;mr&#38;gt;&#38;gt;

BoatLR1M      == /\ boat = 0
                 /\ ml &#38;gt;= 1
                 /\ \/ ml-1 = 0
                    \/ ml-1 &#38;gt;= cl
                 /\ mr+1 &#38;gt;= cr
                 /\ boat&#38;#39; = 1
                 /\ ml&#38;#39; = ml-1
                 /\ UNCHANGED &#38;lt;&#38;lt;cl&#38;gt;&#38;gt;
                 /\ mr&#38;#39; = mr+1
                 /\ UNCHANGED &#38;lt;&#38;lt;cr&#38;gt;&#38;gt;

BoatLR2M      == /\ boat = 0
                 /\ ml &#38;gt;= 2
                 /\ \/ ml-2 = 0
                    \/ ml-2 &#38;gt;= cl
                 /\ mr+2 &#38;gt;= cr
                 /\ boat&#38;#39; = 1
                 /\ ml&#38;#39; = ml-2
                 /\ UNCHANGED &#38;lt;&#38;lt;cl&#38;gt;&#38;gt;
                 /\ mr&#38;#39; = mr+2
                 /\ UNCHANGED &#38;lt;&#38;lt;cr&#38;gt;&#38;gt;

BoatLR1C1M    == /\ boat = 0
                 /\ cl &#38;gt;= 1
                 /\ ml &#38;gt;= 1
                 /\ \/ ml-1 = 0
                    \/ ml-1 &#38;gt;= cl-1
                 /\ mr+1 &#38;gt;= cr+1
                 /\ boat&#38;#39; = 1
                 /\ cl&#38;#39; = cl-1
                 /\ ml&#38;#39; = ml-1
                 /\ cr&#38;#39; = cr+1
                 /\ mr&#38;#39; = mr+1

BoatRL1C      == /\ boat = 1
                 /\ cr &#38;gt;= 1
                 /\ \/ ml = 0
                    \/ ml &#38;gt;= cl+1
                 /\ boat&#38;#39; = 0
                 /\ cr&#38;#39; = cr-1
                 /\ UNCHANGED &#38;lt;&#38;lt;mr&#38;gt;&#38;gt;
                 /\ cl&#38;#39; = cl+1
                 /\ UNCHANGED &#38;lt;&#38;lt;ml&#38;gt;&#38;gt;

BoatRL2C      == /\ boat = 1
                 /\ cr &#38;gt;= 2
                 /\ \/ ml = 0
                    \/ ml &#38;gt;= cl+2
                 /\ boat&#38;#39; = 0
                 /\ cr&#38;#39; = cr-2
                 /\ UNCHANGED &#38;lt;&#38;lt;mr&#38;gt;&#38;gt;
                 /\ cl&#38;#39; = cl+2
                 /\ UNCHANGED &#38;lt;&#38;lt;ml&#38;gt;&#38;gt;

BoatRL1M      == /\ boat = 1
                 /\ mr &#38;gt;= 1
                 /\ \/ mr-1 = 0
                    \/ mr-1 &#38;gt;= cr
                 /\ ml+1 &#38;gt;= cl
                 /\ boat&#38;#39; = 0
                 /\ mr&#38;#39; = mr-1
                 /\ UNCHANGED &#38;lt;&#38;lt;cr&#38;gt;&#38;gt;
                 /\ ml&#38;#39; = ml+1
                 /\ UNCHANGED &#38;lt;&#38;lt;cl&#38;gt;&#38;gt;

BoatRL2M      == /\ boat = 1
                 /\ mr &#38;gt;= 2
                 /\ \/ mr-2 = 0
                    \/ mr-2 &#38;gt;= cr
                 /\ ml+2 &#38;gt;= cl
                 /\ boat&#38;#39; = 0
                 /\ mr&#38;#39; = mr-2
                 /\ UNCHANGED &#38;lt;&#38;lt;cr&#38;gt;&#38;gt;
                 /\ ml&#38;#39; = ml+2
                 /\ UNCHANGED &#38;lt;&#38;lt;cl&#38;gt;&#38;gt;

BoatRL1C1M    == /\ boat = 1
                 /\ cr &#38;gt;= 1
                 /\ mr &#38;gt;= 1
                 /\ \/ mr-1 = 0
                    \/ mr-1 &#38;gt;= cr-1
                 /\ ml+1 &#38;gt;= cl+1
                 /\ boat&#38;#39; = 0
                 /\ cr&#38;#39; = cr-1
                 /\ mr&#38;#39; = mr-1
                 /\ cl&#38;#39; = cl+1
                 /\ ml&#38;#39; = ml+1

Next ==  \/ BoatLR1C
         \/ BoatLR2C
         \/ BoatLR1M
         \/ BoatLR2M
         \/ BoatLR1C1M
         \/ BoatRL1C
         \/ BoatRL2C
         \/ BoatRL1M
         \/ BoatRL2M
         \/ BoatRL1C1M    

Spec == Init /\ [][Next]_&#38;lt;&#38;lt;cl, ml, cr, mr, boat&#38;gt;&#38;gt;
-----------------------------------------------------------------------------

(***************************************************************************)
(* The puzzle is solved when all parties are safely across the river,      *)
(***************************************************************************)
Solved == /\ cl = 0
          /\ ml = 0
          /\ cr = 3
          /\ mr = 3
          /\ boat = 1

NotSolved == ~Solved

(*NotSolved == \/ cl # 0
             \/ ml # 0
             \/ cr # 3
             \/ mr # 3
             \/ boat # 1*)

=============================================================================&#60;/code&#62;&#60;/pre&#62;</description>
		</item>
		<item>
			<title>Avinash Joshi on "[TLA+ Toolbox] Multiple tla Tabs"</title>
			<link>http://bbpress.tlaplus.net/topic/tla-toolbox-multiple-tla-tabs#post-121</link>
			<pubDate>Fri, 22 Oct 2010 05:46:56 +0000</pubDate>
			<dc:creator>Avinash Joshi</dc:creator>
			<guid isPermaLink="false">121@http://bbpress.tlaplus.net/</guid>
			<description>&#60;p&#62;Hi.&#60;/p&#62;
&#60;p&#62;I am are using TLA+ Toolbox on my Ubuntu 10.04 (x64). Toolbox works fine without any hitches. But, I have been trying to open multiple tla files in different tabs, but that does not seem to work for some reason. Whenever I try to open a spec file from the Spec Explorer, it opens in the existing tab and a new tab is not created.&#60;/p&#62;
&#60;p&#62;How do I fix this?
&#60;/p&#62;</description>
		</item>
		<item>
			<title>merz on "&#34;Save as ...&#34; pitfall"</title>
			<link>http://bbpress.tlaplus.net/topic/save-as-pitfall#post-117</link>
			<pubDate>Sun, 10 Oct 2010 20:48:48 +0000</pubDate>
			<dc:creator>merz</dc:creator>
			<guid isPermaLink="false">117@http://bbpress.tlaplus.net/</guid>
			<description>&#60;p&#62;Suppose I want to create a variant of a spec MySpec that defines a temporal formula Spec. I edit MySpec.tla and save it as MySpec2.tla, via the &#34;Save as ...&#34; dialog. At this moment, only the frame for MySpec2 is displayed in the toolbox. However, the toolbox treats this file as belonging to MySpec. In particular, when I subsequently create a model and run the model checker, it will use the specification Spec of MySpec.tla, not of MySpec2.tla. If I want to create a model for MySpec2, I must go through the &#34;Open Spec&#34; dialog, even though the specification is (the only one) displayed in the editor.&#60;/p&#62;
&#60;p&#62;It is not clear to me if this is a bug or a feature, but it would be nice if the GUI could give a better feedback of what it considers the current spec.&#60;/p&#62;
&#60;p&#62;Thanks,&#60;br /&#62;
Stephan
&#60;/p&#62;</description>
		</item>
		<item>
			<title>Frederic Line on "Recursivity and arity"</title>
			<link>http://bbpress.tlaplus.net/topic/recursivity-and-arity#post-118</link>
			<pubDate>Sat, 16 Oct 2010 14:10:09 +0000</pubDate>
			<dc:creator>Frederic Line</dc:creator>
			<guid isPermaLink="false">118@http://bbpress.tlaplus.net/</guid>
			<description>&#60;p&#62;If I define &#60;/p&#62;
&#60;p&#62;RECURSIVE depthFirst(_,_)&#60;br /&#62;
depthFirst(f,F(_)) == ...&#60;/p&#62;
&#60;p&#62;I get the error depthFirst has different arity than its recursive declaration.&#60;/p&#62;
&#60;p&#62;Maybe it's a bug.
&#60;/p&#62;</description>
		</item>
		<item>
			<title>SomeBdyElse on "TLC friendly state composition"</title>
			<link>http://bbpress.tlaplus.net/topic/tlc-friendly-state-composition#post-114</link>
			<pubDate>Fri, 06 Aug 2010 18:15:35 +0000</pubDate>
			<dc:creator>SomeBdyElse</dc:creator>
			<guid isPermaLink="false">114@http://bbpress.tlaplus.net/</guid>
			<description>&#60;p&#62;Hi all!&#60;/p&#62;
&#60;p&#62;I am trying to check the conformity of concurrent Java programs to TLA+ specifications by &#34;running&#34; them in a TLA+ formalization of the JVM specification. In this context I wrote two TLA+ formulas: The first one describes the execution of a single Thread in the JVM, while the second one composes multiple threads and would ideally allow them to move at the same time, if monitors etc allow. It is somehow comparable to the ClockArray example in Mr. Lamport's &#34;Specifying Systems&#34;, page 139, just that there are also constraints on the combination of thread states, as if it was (for example) forbidden that multiple clocks show the same time in one global state. Additionally the number of threads that the JVM manages is variable. &#60;/p&#62;
&#60;p&#62;While the single threads &#34;run&#34; fine in TLC I am troubled to find a good way to express the composition, that TLC accepts. Here is a simplified example of the formulas I would like to get TLC compatible. To make it readable I reduced the complexity of the thread module to a simple program counter and left away the global constraints, which I think I would be able to handle.&#60;/p&#62;
&#60;pre&#62;&#60;code&#62;---- MODULE Thread ----
VARIABLE pc
LOCAL INSTANCE Integers
----
Init == pc = 0
Next == pc&#38;#39; = pc+1
====

---- MODULE TLAJVM ----
VARIABLE pcs
Thread(i) == INSTANCE Thread WITH pc &#38;lt;- pcs[i]
----
Init ==
    (* start with one Thread *)
    /\    DOMAIN(pcs) = {1}

    (* Thread!Init has to be true for all threads *)
    /\    \forall i \in DOMAIN(pcs): Thread(i)!Init

Next ==
    (* after a regular &#38;quot;Next&#38;quot; step the amount of threads is still the same *)
    /\    DOMAIN(pcs&#38;#39;) = DOMAIN(pcs)

    (* all threads step *)
    /\    \forall i \in DOMAIN(pcs): Thread(i)!Next
====&#60;/code&#62;&#60;/pre&#62;
&#60;p&#62;Is there a way to formalize this in a way that TLC takes it? The ClockArray example uses the &#34;IsFcnOn&#34; formula defined on page 140 to describe the global state. However, while humans can compute possible next states out of a given state, the IsFcnOn invariable and the action formulas for each single clock just fine, TLC needs pcs' to be defined as either &#34;pcs' = ...&#34; or &#34;pcs' \in ...&#34; as far as I understand. Does anybody have an idea how to rewrite the above formula to this form? &#60;/p&#62;
&#60;p&#62;I first thought that the TLA+ translations of multiprocess PlusCal algorithms might yield an example, but after reading the &#34;Next&#34; formula on page 63 of &#34;A PlusCal User's Manual&#34; it seems to me that in PlusCal only one processes is allowed to advance per Next step.&#60;/p&#62;
&#60;p&#62;For now I have resigned myself to use two alternating actions in the TLAJVM. One that chooses non-deterministically which thread gets run next and a second one that advances that thread while all other threads hold still. However, this introduces interleaving where I would prefer true concurrency and has bad effects on the number of states and the complexity of the mappings I draw from the TLAJVM into the original TLA+ specifications of the programs. Here is a (simplified) version of my current solution:&#60;/p&#62;
&#60;pre&#62;&#60;code&#62;---- MODULE TLAJVM ----
VARIABLE pcs

VARIABLE threadMovingI
VARIABLE pc
VARIABLE move
----
Thread == INSTANCE Thread WITH pc &#38;lt;- pc (* just to be explicit here *)

Init ==
	/\	Thread!Init (* this determines pc *)
	/\	pcs = &#38;lt;&#38;lt; pc &#38;gt;&#38;gt;
	/\	threadMovingI = FALSE
	/\	move = FALSE

Prepare ==
	/\	move = FALSE

	/\	UNCHANGED pcs
	/\	threadMovingI&#38;#39; \in DOMAIN(pcs)
	/\	pc&#38;#39; = pcs[threadMovingI&#38;#39;]
	/\	move&#38;#39; = TRUE

Move ==
	/\	move = TRUE

	/\	Thread!Next (* this determines pc&#38;#39; *)
	/\	pcs&#38;#39; = [pcs EXCEPT ![threadMovingI] = pc]
	/\	threadMovingI&#38;#39; = FALSE
	/\	move&#38;#39; = FALSE

Next == Prepare \/ Move

TLAJVM == Init /\ [][Next]_&#38;lt;&#38;lt;pcs,threadMovingI,pc,move&#38;gt;&#38;gt;
====&#60;/code&#62;&#60;/pre&#62;
&#60;p&#62;I would be glad if anyone can give me hint how to express true concurrency of the thread movements in a way that TLC can compute the next states and check my refinement mappings.&#60;/p&#62;
&#60;p&#62;Thanks a lot for reading this far and any thoughts on it you might share ;)
&#60;/p&#62;</description>
		</item>
		<item>
			<title>pdudnik on "wildfire spec design question"</title>
			<link>http://bbpress.tlaplus.net/topic/wildfire-spec-design-question#post-108</link>
			<pubDate>Fri, 21 May 2010 16:07:23 +0000</pubDate>
			<dc:creator>pdudnik</dc:creator>
			<guid isPermaLink="false">108@http://bbpress.tlaplus.net/</guid>
			<description>&#60;p&#62;Hi,&#60;/p&#62;
&#60;p&#62;I read the wildfire spec and I saw that transient states were modeled with cache versions.&#60;/p&#62;
&#60;p&#62;I wonder why the designers of the spec chose to use cache versions rather than true transient states for modeling. Does it have to do with TLC limitations, or is it just a simplification?&#60;/p&#62;
&#60;p&#62;Thank you.&#60;/p&#62;
&#60;p&#62;Polina
&#60;/p&#62;</description>
		</item>
		<item>
			<title>pdudnik on "INSTANCE question"</title>
			<link>http://bbpress.tlaplus.net/topic/instance-question#post-111</link>
			<pubDate>Tue, 25 May 2010 17:11:14 +0000</pubDate>
			<dc:creator>pdudnik</dc:creator>
			<guid isPermaLink="false">111@http://bbpress.tlaplus.net/</guid>
			<description>&#60;p&#62;Hi,&#60;/p&#62;
&#60;p&#62;I have a question about using INSTANCE. From what I understand, tlc2 is able to handle INSTANCE. So, suppose my purpose in using INSTANCE is to hide some variables. Other than that, I would like to keep everything the same. &#60;/p&#62;
&#60;p&#62;So, I would say: &#60;/p&#62;
&#60;p&#62;Inner(param) == INSTANCE MyModule&#60;br /&#62;
Spec ==  \E param: MyModule(param)!MySpec&#60;/p&#62;
&#60;p&#62;and in the config file I would say SPECIFICATION Spec&#60;/p&#62;
&#60;p&#62;So far, my experience has been that tlc2 complains about this setup because it is not finding init predicate. So, I think it is looking for something of the form Init /\ []Next, and not finding it because it is in MyModule. Is there a way to go about this?&#60;/p&#62;
&#60;p&#62;Thank you.&#60;/p&#62;
&#60;p&#62;Polina
&#60;/p&#62;</description>
		</item>
		<item>
			<title>pdudnik on "memBar and comsig"</title>
			<link>http://bbpress.tlaplus.net/topic/membar-and-comsig#post-107</link>
			<pubDate>Fri, 21 May 2010 15:50:59 +0000</pubDate>
			<dc:creator>pdudnik</dc:creator>
			<guid isPermaLink="false">107@http://bbpress.tlaplus.net/</guid>
			<description>&#60;p&#62;Hi,&#60;/p&#62;
&#60;p&#62;In the wildfire spec, MB request can be retired once it receives comsig's for all the previous requests. Which means that MB can be retired before all operations ahead of it have actually completed. So, for example, from what I understand the following can happen:&#60;/p&#62;
&#60;p&#62;Processor 2 has block A. Processor 1 has block A in idle state and would like to write it, so it issues a request to the directory. The directory forwards the request to processor 2 and sends a comsig to processor 1. Because comsig and fill messages travel on separate paths, comsig message can arrive before fill message.&#60;/p&#62;
&#60;p&#62;In that case, could the following scenario lead to inconsistency:&#60;br /&#62;
P1 to Dir: get block A&#60;br /&#62;
Dir to P2: inval block A&#60;br /&#62;
Dir to P1: comsig&#60;br /&#62;
Dir to P1: fill block A&#60;br /&#62;
P1 locally: MB&#60;br /&#62;
P1 locally: update block B&#60;br /&#62;
P2 to Dir: get block B&#60;br /&#62;
Dir to P1: forward block B&#60;br /&#62;
P1 to P2: block B&#60;br /&#62;
P2 locally: fill block B&#60;br /&#62;
P2 locally: read block A&#60;br /&#62;
P2 locally: inval block A (invalidate message finally arrives)&#60;/p&#62;
&#60;p&#62;So, essentially, the writes to block A and block B should be ordered by MB, but are observed out of order by processor 2 because MB does not wait for all the fills to complete.&#60;/p&#62;
&#60;p&#62;Thank you.&#60;/p&#62;
&#60;p&#62;Polina
&#60;/p&#62;</description>
		</item>
		<item>
			<title>pdudnik on "Is this forum a good place for questions about the wildfire challenge?"</title>
			<link>http://bbpress.tlaplus.net/topic/is-this-forum-a-good-place-for-questions-about-the-wildfire-challenge#post-104</link>
			<pubDate>Tue, 18 May 2010 22:53:35 +0000</pubDate>
			<dc:creator>pdudnik</dc:creator>
			<guid isPermaLink="false">104@http://bbpress.tlaplus.net/</guid>
			<description>&#60;p&#62;Thank you.&#60;/p&#62;
&#60;p&#62;Polina
&#60;/p&#62;</description>
		</item>
		<item>
			<title>Simon Zambrovski on "Specifications"</title>
			<link>http://bbpress.tlaplus.net/topic/specifications#post-22</link>
			<pubDate>Mon, 08 Feb 2010 08:41:01 +0000</pubDate>
			<dc:creator>Simon Zambrovski</dc:creator>
			<guid isPermaLink="false">22@http://bbpress.tlaplus.net/</guid>
			<description>&#60;p&#62;This is a forum for users to post their specification examples only. Please provide a name of the specification and post the ASCII version of TLA+/PlusCal specification into the thread. &#60;/p&#62;
&#60;p&#62;If you have any questions, feel free to post to the General FAQ forum.
&#60;/p&#62;</description>
		</item>
		<item>
			<title>pdudnik on "How to check that model is right?"</title>
			<link>http://bbpress.tlaplus.net/topic/how-to-check-that-model-is-right#post-100</link>
			<pubDate>Wed, 12 May 2010 19:47:55 +0000</pubDate>
			<dc:creator>pdudnik</dc:creator>
			<guid isPermaLink="false">100@http://bbpress.tlaplus.net/</guid>
			<description>&#60;p&#62;Hi,&#60;/p&#62;
&#60;p&#62;Sorry for so many posts. None of this is really urgent. I have a more high-level question. &#60;/p&#62;
&#60;p&#62;I started going through exercises from the README files. So far, I can write a model that passes the model checking. However, I am concerned that the model I write may not exactly be what I think it is. Since I have almost no experience with TLA+, it is hard for me to be sure even for simple examples that my specifications are correct. &#60;/p&#62;
&#60;p&#62;So, long story short, from what I understand the simulation mode is used to check that the specifications reflect my intentions. But I am not quite sure how to use the simulation mode, or at least how it is normally used. Should I insert some print statements and generate a trace and then manually go through it to make sure that the behavior is as expected? Or is there a better way?&#60;/p&#62;
&#60;p&#62;Thanks.&#60;/p&#62;
&#60;p&#62;Polina
&#60;/p&#62;</description>
		</item>
		<item>
			<title>pdudnik on "A Caching Memory question"</title>
			<link>http://bbpress.tlaplus.net/topic/a-caching-memory-question#post-101</link>
			<pubDate>Thu, 13 May 2010 23:21:08 +0000</pubDate>
			<dc:creator>pdudnik</dc:creator>
			<guid isPermaLink="false">101@http://bbpress.tlaplus.net/</guid>
			<description>&#60;p&#62;Hi,&#60;/p&#62;
&#60;p&#62;I have a question about Caching Memory. Specifically, I don't quite understand the atomicity of actions. So, for example is it possible for DoWr and MemQRd to be happening at the same time and interleave in some way? Or are these always linearized, meaning they cannot be both happening at the same time? So, is it assumed that all these transformations take no time and so one always happens after the other atomically? Because looking at DoRw and MemQRd I do not see conditions that would make them mutually exclusive and so prevent them from happening at the same time and accessing memQ at the same time.&#60;/p&#62;
&#60;p&#62;The reason I ask is because I am adding rdQ as dictated by the exercises section of the README file, and I am concerned about the access to that rdQ being atomic. Specifically, in order to satisfy the Coherence invariant, I have to make sure that the values in that rdQ don't violate it. There are two ways I see of doing that: 1) the easy way is to just make sure the rdQ is empty before doing the DoWr, 2) the other way is to update queues in addition to caches in DoWr. What I am worried about in both of these solutions, is that the new action I added to read from the rdQ will not be atomic with DoWr and will cause errors. &#60;/p&#62;
&#60;p&#62;Thank you.&#60;/p&#62;
&#60;p&#62;Polina&#60;/p&#62;
&#60;p&#62;Thanks.&#60;/p&#62;
&#60;p&#62;Polina
&#60;/p&#62;</description>
		</item>

	</channel>
</rss>

