home *** CD-ROM | disk | FTP | other *** search
/ Black Box 4 / BlackBox.cdr / proglang / isetl.arj / TUTORIAL.TXT < prev   
Text File  |  1989-10-05  |  12KB  |  451 lines

  1. Introduction to ISETL  (March 1989)
  2.                        (Modified October 5, 1989)         
  3.  
  4. Prepared by Murray Kirch
  5.             Professor of Computer Science and Mathematics
  6.             Stockton State College
  7.             Pomona, NJ 08240
  8.             (609) 652-4353
  9.             E-MAIL: kirch@njin.pilot.net
  10.  
  11.  
  12.  
  13.  
  14. --> All user input will be indicated in lower case.  ISETL is
  15.     case sensitive; for the sake of simplicity during this tutorial,
  16.     use only lower case when typing at the terminal.  User input
  17.     will be indented.
  18. --> ISETL output will not be indented.
  19. --> All commentary on this typescript will begin on a new line and
  20.     be enclosed in parentheses.
  21. --> When the ISETL output is long and not critical, it is omitted
  22.     and replaced by the symbol ... .
  23.  
  24.  
  25. (ISETL may be run from any disk drive.  We will assume your ISETL
  26. disk is in drive A and we have a system prompt for that drive.
  27. Enter ISETL.)
  28.  
  29.  
  30. a> isetl
  31. ...
  32. >
  33.  
  34. (If, at any time, you wish to leave ISETL, type !quit .)
  35.  
  36. (The ISETL prompt is >.  ISETL is an interactive language.  If an
  37. expression is typed at the terminal, then ISETL will evaluate it and
  38. then prompt the user for more input.  All expressions must terminate
  39. with a semi-colon and each line must end with a carriage return.)
  40.  
  41. >       4 + 5;
  42. 9;
  43. >
  44.  
  45. (Expressions can be continued over several lines.  ISETL uses >> to
  46. prompt for more input to complete an expression.
  47.  
  48. If you make an error and are still on the first line of an
  49. expression, use the delete key to make corrections.  Otherwise,
  50. press return to finish the current line; then type !clear and press
  51. return.  When you see the > prompt, you may reenter the expression.
  52.  
  53. ISETL 2.0 does provide editing capabilities but they are not needed
  54. for this tutorial.)
  55.  
  56.  
  57. >>      !clear
  58. !clear complete
  59. >
  60.  
  61. >       4
  62. >>      +
  63. >>      5
  64. >>      ;
  65. 9;
  66. >       4 = 3 + 1;
  67. true;
  68. >
  69.  
  70. (ISETL provides the usual arithmetic and boolean operations.
  71. x mod y evaluates to the remainder obtained by dividing the integer
  72. x by the integer y.  x /= y denotes "x is not equal to y".)
  73.  
  74. >       5 mod 2;
  75. 1;
  76. >       6 * 2;
  77. 12;
  78. >       true or false;
  79. true;
  80. >       (2 < 3) and (3 > 10);
  81. false;
  82. >       (2 * 3) /= (3 * 2);
  83. false;
  84. >       5 mod 2 = 0;
  85. false;
  86. >       not (5 mod 2 = 0);
  87. true;
  88. >
  89.  
  90. (Assignment statements in ISETL are similar to those in Pascal.)
  91.  
  92. >      x := 1 + 3;
  93. >      x;
  94. 4;
  95. >      b := 2 < 5;
  96. >      b;
  97. true;
  98. >
  99.  
  100. (A set is an unordered collection of objects.)
  101.  
  102. >      s := {1, 4, 5};
  103. >      s;
  104. {1, 4, 5};
  105. >      s := {1..20};
  106. >      s;
  107. ...
  108. >
  109.  
  110. (The last assignment statement assigns to s the set of all integers
  111. from 1 to 20, inclusive.  When the value of a set is displayed, the
  112. order of the elements is unpredictable.
  113.  
  114. ISETL provides several set operations and functions including the
  115. following:
  116.           union              a + b
  117.           intersection       a * b
  118.           difference         a - b
  119.           power set          pow (a)
  120.           size               #(a)
  121.                              #a
  122.           membership         x in a
  123.                              x notin a
  124.           selection of an
  125.           arbitrary member   arb (a)    
  126.  
  127. Evaluate each of the above expressions after assigning a the value
  128. {1..4}, b the value {2,4,6} and x the value 1.
  129.  
  130. ISETL also provides for predicates, boolean valued expressions
  131. which can include quantified variables.)
  132.  
  133. >      a := {1..4};
  134. >      forall k in a | k * k = k;
  135. false;
  136. >      exists k in a | k * k = k;
  137. true;
  138. >
  139.  
  140. (The first expression is false since it states that each member of
  141. a is equal to its own square.  However 1 is a member of a.  Hence
  142. the second expression is true since it states that there exists a
  143. member of a which is its own square.
  144.  
  145. ISETL has Pascal-like control structures and the capability to nest
  146. statements within statements.  For example, to form the set of
  147. squares of all integers in the range 1..20 which are multiples of
  148. 5, enter the following statements.)
  149.  
  150. >      squares := {};
  151. >
  152. >      for x in {1..20} do
  153. >>         if x mod 5 = 0 then
  154. >>             squares := squares + { x * x };
  155. >>         end if;
  156. >>     end for;
  157. >
  158. >      squares;
  159. {25, 100, 225, 400};
  160. >
  161.  
  162. (However sets can also be formed in ISETL using expressions of the
  163. form
  164.  
  165.        { e(x) : x in s | p(x) };
  166.  
  167. where e(x) is an expression, s is a set, and p(x) is a predicate.
  168. Here is how we could use this approach to form the same set as
  169. described in the previous example.)
  170.  
  171. >      squares := {x * x : x in {1..20} | x mod 5 = 0 };
  172. >      squares;
  173. {25, 100, 225, 400};
  174. >
  175.  
  176. (Suppose we want to find all integers between 2 and 35 which divide
  177. 36.)
  178.  
  179. >      { x : x in {2..35} | 36 mod x = 0 };
  180. ...;
  181. >
  182.  
  183. (Sometimes we want to consider ordered collections of objects which
  184. can include duplicates.  These are called tuples and are provided
  185. by ISETL.)
  186.  
  187. >      t := [2, 3, 5, 2, 3];
  188. >      t;
  189. [2, 3, 5, 2, 3];
  190. >      2 in t;
  191. true;
  192. >      1 in t;
  193. false;
  194. >      #t;
  195. 5;
  196. >      u := [1..20];
  197. >      u;
  198. ...;
  199. >      #u;
  200. 20;
  201. >
  202.  
  203. (#t computes the number of objects in the tuple t.  t(i) is the ith
  204. object in the tuple t.)
  205.  
  206. >      t(2);
  207. 3;
  208. >      t(3);
  209. 5;
  210. >      [ t(k) : k in [1..#t] | t(k) mod 2 = 1];
  211. [3, 5, 3];
  212. >
  213.  
  214. (The last expression forms a tuple whose objects are the objects in
  215. t which are odd integers.
  216.  
  217. ISETL enables you to define functions.  For example, suppose we
  218. wish to define g to be the quadratic function which takes a number
  219. x and produces the value x*x - 5*x + 6.)
  220.  
  221. >      g := func (x);
  222. >>         return x * x - 5 * x + 6;
  223. >>     end func;
  224. >
  225.  
  226. (Now let's use this function.)
  227.  
  228. >      g(0);
  229. 6;
  230. >      g(1);
  231. 2;
  232. >      [ g(x) : x in [-2..2] ];
  233. [20, 12, 6, 2, 0];
  234. >
  235.  
  236. (The tuple [20, 12, 6, 2, 0] equals [g(-2),g(-1),g(0),g(1),g(2)].)
  237.  
  238. (We will now find all integers in the range [-10..10] which are
  239. solutions to the equation g(x) = 0.)
  240.  
  241. >      [x : x in [-10..10] | g(x) = 0];
  242. [2, 3];
  243. >
  244.  
  245. (Now let's define a function which takes an integer greater than 1
  246. and returns true or false depending upon whether it is prime.)
  247.  
  248. >      prime := func (x);
  249. >>         return forall k in [2..x-1] | x mod k /= 0;
  250. >>     end func;
  251. >
  252.  
  253. (An alternative way of defining this function would be to replace the
  254. second line by
  255. >>         return #{ k : k in [2..x-1] | x mod k = 0} = 0;
  256. Now we will use this function.)
  257.  
  258. >      prime (5);
  259. true;
  260. >      prime (15);
  261. false;
  262. >      [ x : x in [2..20] | prime (x) ];
  263. [2, 3, 5, 7, 11, 13, 17, 19];
  264. >
  265.  
  266. (The following function takes an integer greater than 1 and returns
  267. the set of all primes less than or equal to that integer.)
  268.  
  269. >      set_of_primes := func (n);
  270. >>         return { x : x in [2..n] | prime (x) };
  271. >>     end func;
  272. >
  273.  
  274. (We may use this function to create sets of prime numbers.)
  275.  
  276. >      primes50 := set_of_primes (50);
  277. >      primes50;
  278. ... ;
  279. >      #primes50;
  280. 15;
  281. >      primes100 := set_of_primes (100);
  282. >      #primes100;
  283. 25;
  284. >
  285.  
  286. (There are 15 primes less than 50 and 25 primes less than 100.
  287.  
  288. Exercise 1:  A prime pair is a pair of consecutive odd numbers
  289. which are both prime.  For example, [11, 13] is a prime pair.  Use
  290. ISETL to determine the number of prime pairs which are less than
  291. 100.)
  292.  
  293. (A binary relation r on a set a is a set of ordered pairs of
  294. members of a.  In the following, we define two relations r1 and r2
  295. on a set a1.)
  296.  
  297. >      a1 := {1..5};
  298. >      r1 := { [1,1], [1,2], [2,3], [3,2], [2,1] };
  299. >      r2 := r1 + { [1,4] };
  300. >
  301.  
  302. (The inverse of a relation r is the set of ordered pairs obtained
  303. by reversing the order of the elements of the pairs in r; that is,
  304. a pair [x,y] is in the inverse of r if and only if [y,x] is in r.
  305. We will now write a function that produces the inverse of a binary
  306. relation r on a set a.)
  307.  
  308. >      inverse := func (r, a);
  309. >>         return { [x,y] : x,y in a | [y,x] in r };
  310. >>     end func;
  311.  
  312. (A relation is said to be symmetric if it is equal to its inverse.)
  313.  
  314. >      inverse (r1, a1);
  315. ... ;
  316. >      inverse (r2, a1);
  317. ... ;
  318. >      r1 = inverse (r1, a1);
  319. true;
  320. >      r2 = inverse (r2, a1);
  321. false;
  322. >
  323.  
  324. (Thus we see that r1 is symmetric but r2 is not.
  325.  
  326. Exercise 2:  The symmetric closure of a relation r on a set a is
  327. the smallest symmetric relation on a which contains r.  For
  328. example, if a = {1, 2, 3} and r = {[1,1], [1,2]}, then the symmetric
  329. closure of r is {[1,1], [1,2], [2,1]}.  Write an ISETL function
  330. which produces the symmetric closure of a given relation r on a.
  331.  
  332. ISETL can be used to simulate random events.  The following
  333. function returns the result of selecting an integer at random from
  334. the set {1..n}.)
  335.  
  336. >      rand := func (n);
  337. >>         return arb ({1..n});
  338. >>     end func;
  339. >
  340.  
  341. (The next function simulates n tosses of a pair of dice.)
  342.  
  343. >      toss := func (n);
  344. >>         return [ rand (6) + rand (6) : k in [1..n] ];
  345. >>     end func;
  346. >
  347.  
  348. (Let's use this function to simulate 36 tosses of a pair of dice.)
  349.  
  350. >      results := toss (36);
  351. >      results;
  352. ... ;
  353. >      #[ results (k) : k in [1..36] | results (k) = 7 ];
  354. ... ;
  355. >
  356.  
  357. (The last expression counts the number of 7's which occurred in the
  358. 36 tosses.)
  359.  
  360. Let's generalize this by defining a function which produces an
  361. ordered sample obtained by selecting n objects at random, with
  362. replacement, from a set p.)
  363.  
  364. >      sample := func (n, p);
  365. >>         return [ arb (p) : k in [1..n] ];
  366. >>     end func;
  367. >
  368.  
  369. (The following function determines whether there are duplicate
  370. values in the tuple t.)
  371.  
  372. >      nodups := func (t);
  373. >>         return #t = #{ k : k in t };
  374. >>     end func;
  375. >
  376. >      tup := [2, 3, 4, 2, 4];
  377. >      set := { k : k in tup };
  378. >      set;
  379. {2, 3, 4};
  380. >      #set;
  381. 3;
  382. >      #tup;
  383. 5;
  384. >      nodups (tup);
  385. false;
  386. >      tup2 := [2, 4, 7, 6];
  387. >      nodups (tup2);
  388. true;
  389. >
  390.  
  391. (Suppose 10 numbers were selected at random, with replacement, from
  392. the set {1..20}.  What is the probability that the 10 numbers are
  393. distinct?  We could simulate this experiment in probability in ISETL. 
  394. The following expression has value true if the numbers are distinct 
  395. and has value false otherwise.)
  396.  
  397. >      nodups (sample (10, {1..20}));
  398. ... ;
  399. >
  400.  
  401. (Exercise 3:  Give an ISETL expression that simulates the
  402. experiment of examining a class of 35 students and determining
  403. whether or not two (or more) students share a common birthday.)
  404.  
  405. (While in ISETL, it is possible to enter text from either the
  406. terminal or from a disk file.  For example, there is a file on the 
  407. ISETL disk named math.stl  which defines the functions g,
  408. prime, set_of_primes, inverse, rand, toss, sample, and nodups as
  409. described in this tutorial.  This file also assigns values to the
  410. identifiers squares, t, u, primes50, primes100, a1, r1, r2, results,
  411. tup, set as described previously.  To enter these definitions from
  412. the disk file, type the following command.)
  413.  
  414. >      !include math.stl
  415. !include math.stl completed
  416. >
  417.  
  418. (Also defined in math.stl is a function called answer.
  419. After including math.stl, you may find the answer to
  420. Exercise k by typing answer (k).)
  421.  
  422. >      answer (1);
  423. ... ;
  424. >
  425.  
  426. (To exit ISETL, type !quit)
  427.  
  428. >      !quit
  429.  
  430. (You will then be asked to confirm that you really want to quit.
  431. Type Y to return to the system prompt or N to stay in ISETL.)
  432.  
  433. a>
  434.  
  435.  
  436. (This tutorial covers only a small subset of ISETL.  An example
  437. of a func which takes as input two funcs and returns a func appears
  438. in MATH.STL.  The .LPR files which are distributed with the ISETL
  439. interpreter provide a complete description of the language and
  440. instructive examples.)  
  441.  
  442.                         REFERENCES
  443.   
  444.  
  445. Baxter, Nancy et al., Learning Discrete Mathematics with ISETL. 
  446. New York: Springer-Verlag, 1989.
  447.  
  448. Schwartz, J. T. et al., Programming with Sets: An Introduction to
  449. SETL. New York: Springer-Verlag, 1986.
  450.  
  451.