SETL

From HandWiki

SETL (SET Language) is a very high-level programming language[1] based on the mathematical theory of sets.[2][3] It was originally developed at the New York University (NYU) Courant Institute of Mathematical Sciences in the late 1960s, by a group including (Jack) Jacob T. Schwartz,[1][3] R.B.K. Dewar, and E. Schonberg.[1] Schwartz is credited with designing the language.[4]

Design

SETL provides two basic aggregate data types: (unordered) sets, and tuples.[1][2][5] The elements of sets and tuples can be of any arbitrary type, including sets and tuples themselves, except the undefined value om[1] (sometimes capitalized: OM).[6] Maps are provided as sets of pairs (i.e., tuples of length 2) and can have arbitrary domain and range types.[1][5] Primitive operations in SETL include set membership, union, intersection, and power set construction, among others.[1][6]

SETL provides quantified boolean expressions constructed using the universal and existential quantifiers of first-order predicate logic.[1][6]

SETL provides several iterators to produce a variety of loops over aggregate data structures.[1][7]

Examples

Print all prime numbers from 2 to N:

print([n in [2..N] | forall m in {2..n - 1} | n mod m > 0]);

The notation is similar to list comprehension.

A factorial procedure definition:

procedure factorial(n); -- calculates the factorial n!
  return if n = 1 then 1 else n * factorial(n - 1) end if;
end factorial;

A more conventional SETL expression for factorial (n > 0):

*/[1..n]

Uses

Implementations of SETL were available on the CDC 6600, CDC Cyber, DEC VAX, IBM/370, Sun workstation and Apollo.[8] In the 1970s, SETL was ported to the BESM-6, ES EVM and other Russian computer systems.[9]

SETL was used for an early implementation of the programming language Ada, named the NYU Ada/ED translator.[10] This later became the first validated Ada implementation, certified on April 11, 1983.[11]

According to Guido van Rossum, "Python's predecessor, ABC, was inspired by SETL – Lambert Meertens spent a year with the SETL group at NYU before coming up with the final ABC design!"[12]

Language variants

SET Language 2 (SETL2), a backward incompatible descendant of SETL, was created by Kirk Snyder of the Courant Institute of Mathematical Sciences at New York University in the late 1980s.[13] Like its predecessor, it is based on the theory and notation of finite sets, but has also been influenced in syntax and style by the Ada language.[13]

Interactive SET Language (ISETL) is a variant of SETL used in discrete mathematics.[14]

GNU SETL is a command-line utility that implements and extends SETL.[15]

References

  1. 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 Schwartz, J. T.; Dewar, R. B. K.; Schonberg, E.; Dubinsky, E. (1986) (in en). Programming with Sets. pp. v-vii, 2, 48, 53, 57–58, 63, 113ff. doi:10.1007/978-1-4613-9575-1. ISBN 978-1-4613-9577-5. https://doi.org/10.1007/978-1-4613-9575-1. 
  2. 2.0 2.1 "GNU SETL Om". https://setl.org/setl/doc/setl.html. 
  3. 3.0 3.1 Markoff, John (2009-03-04). "Jacob T. Schwartz, 79, Restless Scientist, Dies" (in en-US). The New York Times. ISSN 0362-4331. https://www.nytimes.com/2009/03/04/science/04schwartz.html. 
  4. Schwartz, Jacob T.; Cantone, Domenico; Omodeo, Eugenio G. (2011) (in en). Computational Logic and Set Theory. pp. vii. doi:10.1007/978-0-85729-808-9. ISBN 978-0-85729-807-2. https://link.springer.com/book/10.1007/978-0-85729-808-9. 
  5. 5.0 5.1 "Chapter 2". https://www.settheory.com/Chapters/Chapter_2.html. 
  6. 6.0 6.1 6.2 "Chapter 3". https://www.settheory.com/Chapters/Chapter_3.html. 
  7. "Chapter 4". https://www.settheory.com/Chapters/Chapter_4.html. 
  8. Schwartz, J.T.; Dewar, R.B.K.; Dubinsky, E.; Schonberg, E. (1986). Programming with sets: An Introduction to SETL. New York, New York: Springer-Verlag. ISBN 978-1-4613-9577-5. https://books.google.com/books?id=4pfbBwAAQBAJ&pg=PR6. 
  9. И.В. Поттосин, ed (2001) (in ru). Становление новосибирской школы программирования (мозаика воспоминаний). Новосибирск: Институт систем информатики им. А. П. Ершова СО РАН. pp. 106–113. https://www.iis.nsk.su/files/articles/mozaika.pdf. 
  10. Dewar, Robert B. K.; Fisher Jr., Gerald A.; Schonberg, Edmond; Froelich, Robert; Bryant, Stephen; Goss, Clinton F.; Burke, Michael (November 1980). "The NYU Ada translator and interpreter". Proceeding of the ACM-SIGPLAN symposium on Ada programming language – SIGPLAN '80. 15. pp. 194–201. doi:10.1145/948632.948659. ISBN 0-89791-030-3. 
  11. SofTech Inc. (1983-04-11). "Ada Compiler Validation Summary Report: NYU Ada/ED, Version 19.7 V-001". http://www.dtic.mil/docs/citations/ADA136759. 
  12. Python-Dev: SETL (was: Lukewarm about range literals)
  13. 13.0 13.1 "SETL2 – EDM2". http://www.edm2.com/index.php/SETL2. 
  14. Baxter Hastings, Nancy; Dubinsky, Ed; Levin, Gary (1989). Learning discrete mathematics with ISETL. New York: Springer-Verlag. ISBN 978-0-387-96898-8. 
  15. "GNU SETL". https://setl.org/setl/. 

Further reading

  • Schwartz, Jacob T., "Set Theory as a Language for Program Specification and Programming". Courant Institute of Mathematical Sciences, New York University, 1970.
  • Schwartz, Jacob T., "On Programming, An Interim Report on the SETL Project", Computer Science Department, Courant Institute of Mathematical Sciences, New York University (1973).
  • Schwartz, Jacob T., Dewar, R.B.K., Dubinsky, E., and Schonberg, E., Programming With Sets: An Introduction to SETL, 1986. ISBN 0-387-96399-5.