{"title":"Parallel Recursion","authors":"","doi":"10.1145/3568325.3568334","DOIUrl":"https://doi.org/10.1145/3568325.3568334","url":null,"abstract":"Role of recursion and induction in parallel computations We in computer science are extremely fortunate that recursion is applicable for descriptions and induc tion for analysis of sequential programs. In fact, they are indispensable tools in programming. Sequentiality is inherent in mathematics. The Peano axioms define natural numbers in a sequential fashion, starting with 0 and defining each num ber as the successor of the previous one. One can see its counterpart in Haskell; the fundamental data structure, list, is either empty, corresponding to 0, or one formed by appending a single element to a smaller list. Naturally, induction is the major tool for analyzing programs on lists. There is no counterpart of parallelism in classical mathematics because tradi tional mathematics is not concerned about mechanisms of computations, sequen tial or parallel. Any possible parallel structure is sequentialized (or serialized) so that traditional mathematical tools, including induction, can be used for its analy sis. Therefore, most parallel recursive algorithms are typically described iteratively, one parallel step at a time. The mathematical properties of the algorithms are rarely evident from these descriptions. Parallel Recursion","PeriodicalId":302246,"journal":{"name":"Effective Theories in Programming Practice","volume":"22 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"1900-01-01","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"121110961","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
{"title":"Set Theory, Logic and Proofs","authors":"","doi":"10.1145/3568325.3568328","DOIUrl":"https://doi.org/10.1145/3568325.3568328","url":null,"abstract":"This chapter covers set theory and logic at an elementary level as background material. I assume that the reader has already been exposed to these topics at some level. Therefore, the treatment of this material is terse. The readers familiar with these topics may look through this chapter for the notations used for logical expres sions and the style of rendering proofs, which I employ in the rest of the book; in","PeriodicalId":302246,"journal":{"name":"Effective Theories in Programming Practice","volume":"46 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"1900-01-01","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"122801981","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
{"title":"Reasoning About Programs","authors":"G. Hutton","doi":"10.1145/3568325.3568330","DOIUrl":"https://doi.org/10.1145/3568325.3568330","url":null,"abstract":"using words, pictures and mathematical formulae, and verification is often carried out empirically, perhaps on a model of the real product. The underly ing mathematical and physical theories from which the specification notation and design principles are derived (e.g., structural design principles for bridge design) constitute a major part of the study in the associated discipline. Verification and analysis are especially important for computer programs because they tend to be some of the most complex artifacts designed by humans. A car manufacturer demands assurance about the quality of the software control ling its cars and its real-time response. Authorities demand a much greater level of assurance for the software controlling a nuclear power plant and for commer cial aviation because the cost of error in logic or performance is astronomical. The software controlling the Mars rover Curiosity, for instance, must never fail1 because there are very few options for human controllers on earth to overcome a major soft ware problem. In fact, our society has come to rely on computer programs to such an extent that faulty software may be the most expensive aspect of any engineering design. Testing a design is a time-honored way of gaining confidence in the eventual product. Testing is used extensively in all engineering disciplines. Physical testing Reasoning About Programs","PeriodicalId":302246,"journal":{"name":"Effective Theories in Programming Practice","volume":"49 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"1900-01-01","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"134056734","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
{"title":"Recursive and Dynamic Programming","authors":"","doi":"10.1145/3568325.3568333","DOIUrl":"https://doi.org/10.1145/3568325.3568333","url":null,"abstract":"is easier to solve if its solution is known or if it is an instance of the original problem but over a smaller data set. For example, if you have to sum eight numbers, you may divide the task into two subtasks of summing four numbers each, and then add the two results. Each subtask may be further divided into two subtasks of adding a pair of numbers. A problem is typically divided into subproblems of the same kind in recursive programming, and the same solution procedure is applied to each of the subprob lems, further subdividing them. A recursive program has to specify the method of problem decomposition and solution combination and also the solutions for the very smallest subproblems that cannot be decomposed any further. The theoretical justification of recursive programming is mathematical induc tion. In fact, recursion and induction are so closely linked that they are often mentioned in the same breath; we ought to have used the term “inductive pro gramming” for this style of programming.","PeriodicalId":302246,"journal":{"name":"Effective Theories in Programming Practice","volume":"13 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"1900-01-01","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"125599442","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}