====== Learning Pluscal ====== PlusCal is an algorithm language—a language for writing and debugging algorithms. It is especially good for algorithms to be implemented with multi-threaded code. Instead of being compiled into code, a PlusCal algorithm is translated into a TLA+ specification. An algorithm written in PlusCal is debugged using the TLA+ tools—mainly the TLC model checker. Correctness of the algorithm can also be proved with the TLAPS proof system, but that requires a lot of hard work and is seldom done. The easiest way to learn pluscal, is to read the Pluscal tutorial by Lamport. Free, and readable online; it can be found here: https:%%//%%lamport.azurewebsites.net/tla/tutorial/contents.html ===== C-style vs P-Style ===== Pluscal comes into two flavors: C-Style and P-Style. For a more complete overview of Pluscal, there is a manual available for each style: [[https://lamport.azurewebsites.net/tla/c-manual.pdf|c-manual.pdf]], [[https://lamport.azurewebsites.net/tla/p-manual.pdf|p-style.pdf]]. To have a taste of each style: P-Syntax ---- MODULE Playground ---- EXTENDS TLC, Naturals (*--algorithm Playground variable x = 0, y = 0; begin while x > 0 do if y > 0 then y := y-1; x := x-1 else x := x-2 end if end while; print y; end algorithm; *) ==== C-Syntax style ---- MODULE Playground ---- EXTENDS TLC, Naturals (*--algorithm Playground { variables x = 0, y = 0; { while (x > 0) { if (y > 0) { y := y-1; x := x-1; } else x := x-2 }; print y; } }*) ====