home *** CD-ROM | disk | FTP | other *** search
/ Collection of Education / collectionofeducationcarat1997.iso / SCIENCE / CSA.ZIP / CSA.LSP < prev    next >
Lisp/Scheme  |  1987-05-21  |  34KB  |  783 lines

  1. ;************************************************************************
  2. ;*                                                                      *
  3. ;*  program :   CSA                                                     *
  4. ;*  author  :   Chris Lord                                              *
  5. ;*  version :   3.17 (5/21/87)                                          *
  6. ;*  date    :   February 18, 1987                                       *
  7. ;*                                                                      *
  8. ;*  Copyright (c) 1987 by Chris Lord                                    *
  9. ;*                                                                      *
  10. ;*  This program was written for a course in logic and lisp at FSC      *
  11. ;*  as a learning experience.  Having served its purpose, the author    *
  12. ;*  contributes this code to the public domain so that others may also  *
  13. ;*  learn.  I would be interested in any suggestions/improvements/bugs  *
  14. ;*  anyone finds.  Please address all comments to:                      *
  15. ;*                                                                      *
  16. ;*                                      Chris Lord                      *
  17. ;*                                      38 Main Street                  *
  18. ;*                                      Princeton, MA 01541             *
  19. ;*                                      DEC ENET RAINBO::LORD           *
  20. ;*                                                                      *
  21. ;************************************************************************
  22.  
  23. ;************************************************************************
  24. ;*                                                                      *
  25. ;*  program description                                                 *
  26. ;*                                                                      *
  27. ;*  This program is the first step in determining the validity of       *
  28. ;*  standard (and some non-standard) categorical syllogisms.  The       *
  29. ;*  the validity of a syllogism is based on a collection of eight       *
  30. ;*  rules, seven of which are implemented in this version.  See the     *
  31. ;*  accompanying manual for a completed description as well as a        *
  32. ;*  short tutorial in syllogism logic.                                  *
  33. ;*                                                                      *
  34. ;*  edit history                                                        *
  35. ;*                                                                      *
  36. ;*  3.15  add check for same premisses in main routine CSA to catch     *
  37. ;*        some other bad syllogism (ccl 5/13/87)                        *
  38. ;*  3.16  add further syllogism checks in function CSA (ccl 5/14/87)    *
  39. ;*  3.17  add heuristic for dealing with subjects that are single       *
  40. ;*        atoms to format_prop (ccl 5/21/87)                            *
  41. ;*  3.18  add list of atoms to strip from props when parsing such as    *
  42. ;*        (the an a) (not yet)                                          *
  43. ;*                                                                      *
  44. ;************************************************************************
  45.  
  46.  
  47. ;************************************************************************
  48. ;*                                                                      *
  49. ;*  data declarations                                                   *
  50. ;*                                                                      *
  51. ;*  these are global symbols that are currently used by only single     *
  52. ;*  functions -- this is likely to change.                              *
  53. ;*                                                                      *
  54. ;************************************************************************
  55.  
  56. ;+
  57. ;   this is the set of univeral-affirmative quantifiers that may appear
  58. ;   in the proposition.  Any member is replaced with the standard
  59. ;   quantifier ALL
  60. ;-
  61.  
  62. (setq universal_affirm '(all every any everything anything everyone
  63.                          anyone whoever whoso who whatever a an the))
  64.  
  65. ;+
  66. ;   this is the set of univeral-negative quantifiers that may appear
  67. ;   in the proposition.  Any member is replaced with the standard
  68. ;   quantifier NO
  69. ;-
  70.  
  71. (setq universal_neg '(no none nothing no-one))
  72.  
  73. ;+
  74. ;   this is the set of particular quantifiers (quality is determined
  75. ;   by the verb adjunct 'not') that may appear in the propostion.
  76. ;   Any member is replaced with the standard quantifier SOME
  77. ;-
  78.  
  79. (setq particular_quantifiers '(some most many few))
  80.  
  81. ;+
  82. ;   this is the set of words that precede a form of the verb 'to be'
  83. ;   an indicate (generally) that it is not the verb of the proposition
  84. ;   as in: all men who are green are frogs
  85. ;-
  86.  
  87. (setq non_verb_preds '(who whom that))
  88.  
  89. ;+
  90. ;   this is the error code table, each error has a code followed
  91. ;   by the actual error text
  92. ;-
  93.  
  94. (setq error_codes '(badprop "bad proposition encountered"
  95.                     badquan "bad quantifier encountered"
  96.                     badsubj "bad subject encountered"
  97.                     badverb "bad verb encountered"
  98.                     badpred "bad predicate encountered"
  99.                     badform "bad form encountered"
  100.                     badsyll "bad syllogism encountered"))
  101.  
  102. ;************************************************************************
  103. ;*                                                                      *
  104. ;*  rule base                                                           *
  105. ;*                                                                      *
  106. ;*  the following functions are each responsible for checking a given   *
  107. ;*  form against one of the rules for valid functions.  Rules return    *
  108. ;*  nil if they pass, something else otherwise.  Every rule is passed   *
  109. ;*  the form of the syllogism in (n x x x) form.                        *
  110. ;*                                                                      *
  111. ;************************************************************************
  112.  
  113. ;+
  114. ; the following are inherent characteristics of each type of syllogism
  115. ; used in creating the rules:
  116. ;
  117. ; type       quantity         quality       S   P
  118. ; ----      ----------      -----------    --- ---
  119. ;   A       universal       affirmative     D   U
  120. ;   E       universal       negative        D   D
  121. ;   I       particular      affirmative     U   U
  122. ;   O       particular      negative        U   D
  123. ;
  124. ;   where: U is undistributed   S is subject
  125. ;          D is distributed     P is predicate
  126. ;-
  127.  
  128. ;+
  129. ;   Rule  1: A categorical syllogism must contain three and only
  130. ;   three terms or it commits the fallacy of four terms.  
  131. ;
  132. ;   this rule cannot be implemented without an extensive knowledge of
  133. ;   english vocabulary.  It is in this rule that ambiguous class
  134. ;   descriptors and the misuse of synonyms are caught.  Often times
  135. ;   this rule is also used to catch syllogisms with no middle term.
  136. ;-
  137.  
  138. (defun rule_1 (form)
  139.     nil)
  140.  
  141. ;+
  142. ;   Rule  2:  The  middle term must be distributed at least once
  143. ;   or it commits the fallacy of undistributed middle.  
  144. ;-
  145.    
  146. (defun rule_2 (form)
  147.     (setq p1 (cadr form))   ; type of prop 1
  148.     (setq p2 (caddr form))  ; type of prop 2
  149.     (not (case (car form)
  150.         (1  (or (member p1 '(A E)) (member p2 '(E O))))
  151.         (2  (or (member p1 '(E O)) (member p2 '(E O))))
  152.         (3  (or (member p1 '(A E)) (member p2 '(A E))))
  153.         (4  (or (member p1 '(E O)) (member p2 '(A E)))))))
  154.  
  155. ;+
  156. ;   Rule  3:  No term may be distributed in the conclusion which
  157. ;   is  undistributed in the premisses or it commits the fallacy
  158. ;   of illicit major or minor.  
  159. ;
  160. ;   this rule is in two parts.  Part A checks for illicit major;
  161. ;   part B checks for illicit minor.
  162. ;-
  163.  
  164. (defun rule_3A (form)
  165.     (setq p1 (cadr form))   ; type of prop 1
  166.     (setq p2 (caddr form))  ; type of prop 2
  167.     (and
  168.     (member (cadddr form) '(E O))
  169.     (case (car form)
  170.         (1  (member p1 '(A I)))
  171.         (2  (member p1 '(I O)))
  172.         (3  (member p1 '(A I)))
  173.         (4  (member p1 '(I O))))))