Algorithms are different from programs and should not be described with programming languages. The only simple alternative to programming languages has been pseudo-code. PlusCal is an algorithm language that can be used right now to replace pseudo-code, for both sequential and concurrent algorithms. It is based on the TLA +  specification language, and a PlusCal algorithm is automatically translated to a TLA +  specification that can be checked with the TLC model checker and reasoned about formally.


Model Check Mutual Exclusion Liveness Property Empty Sequence Abstract State Machine 
These keywords were added by machine and not by the authors. This process is experimental and the keywords may be updated as the learning algorithm improves.


Unable to display preview. Download preview PDF.

Unable to display preview. Download preview PDF.


  1. 1.
    Wirth, N.: Algorithms + Data Structures = Programs. Prentice-Hall, Englewood Cliffs (1975)zbMATHGoogle Scholar
  2. 2.
    Lamport, L.: Specifying Systems. Addison-Wesley, Boston (2003), zbMATHGoogle Scholar
  3. 3.
    Yu, Y., Manolios, P., Lamport, L.: Model checking TLA +  specifications. In: Pierre, L., Kropf, T. (eds.) CHARME 1999. LNCS, vol. 1703, pp. 54–66. Springer, Heidelberg (1999)CrossRefGoogle Scholar
  4. 4.
    Lamport, L.: The PlusCal algorithm language, The page can also be found by searching the Web for the 25-letter string obtained by removing the “-” from uid-lamportpluscalhomepage
  5. 5.
    Sedgewick, R.: Algorithms. Addison-Wesley, Reading (1988)zbMATHGoogle Scholar
  6. 6.
    Hoare, C.A.R.: Algorithm 64: Quicksort. Communications of the ACM 4, 321 (1961)CrossRefGoogle Scholar
  7. 7.
    Lamport, L.: A fast mutual exclusion algorithm. ACM Transactions on Computer Systems 5, 1–11 (1987)CrossRefGoogle Scholar
  8. 8.
    Lamport, L.: What good is temporal logic? In: Mason, R.E.A. (ed.) Information Processing 83: Proceedings of the IFIP 9th World Congress, Paris, IFIP, pp. 657–668. North-Holland, Amsterdam (1983)Google Scholar
  9. 9.
    Pratt, V.R.: Semantical considerations on Floyd-Hoare logic. In: 17th Symposium on Foundations of Computer Science, pp. 109–121. IEEE, Los Alamitos (1976)Google Scholar
  10. 10.
    Lynch, N.A.: Distributed Algorithms. Morgan Kaufmann, San Mateo (1995)Google Scholar
  11. 11.
    Francez, N.: Fairness. Texts and Monographs in Computer Science. Springer, Heidelberg (1986)Google Scholar
  12. 12.
    Lamport, L.: Checking a multithreaded algorithm with  + CAL. In: Dolev, S. (ed.) DISC 2006. LNCS, vol. 4167, pp. 151–163. Springer, Heidelberg (2006)CrossRefGoogle Scholar
  13. 13.
    Lamport, L.: The temporal logic of actions. ACM Transactions on Programming Languages and Systems 16, 872–923 (1994)CrossRefGoogle Scholar
  14. 14.
    Schwartz, J.T., Dewar, R.B., Schonberg, E., Dubinsky, E.: Programming with sets: An Introduction to SETL. Springer, New York (1986)CrossRefzbMATHGoogle Scholar
  15. 15.
    Jackson, D.: Alloy: a lightweight object modelling notation. ACM Transactions on Software Engineering and Methodology 11, 256–290 (2002)CrossRefGoogle Scholar
  16. 16.
    Holzmann, G.J.: The Spin Model Checker. Addison-Wesley, Boston (2004)Google Scholar
  17. 17.
    McMillan, K.L.: Symbolic Model Checking. Kluwer Academic Publishers, Dordrecht (1993)CrossRefzbMATHGoogle Scholar
  18. 18.
    Gurevich, Y.: Can abstract state machines be useful in language theory? Theoretical Computer Science 376, 17–29 (2007)MathSciNetCrossRefzbMATHGoogle Scholar
  19. 19.
    Dijkstra, E.W.: A Discipline of Programming. Prentice-Hall, Englewood Cliffs (1976)zbMATHGoogle Scholar
  20. 20.
    Hoare, C.A.R.: Communicating sequential processes. Communications of the ACM 21, 666–677 (1978)CrossRefzbMATHGoogle Scholar

Copyright information

© Springer-Verlag Berlin Heidelberg 2009

Authors and Affiliations

  • Leslie Lamport
    • 1
  1. 1.Microsoft ResearchUSA

Personalised recommendations