<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-7173751</id><updated>2010-04-30T21:24:04.794-07:00</updated><title type='text'>Numbering Peano</title><subtitle type='html'>Collaborative articulation of how abstraction and language is employed in the computational manifestation of numbers -- including analysis of the role of syntax, semantics, and meaning in the specification and use of software interfaces.</subtitle><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7173751/posts/default'/><link rel='alternate' type='text/html' href='http://miser-theory.info/astraendo/pn/default.asp'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/7173751/posts/default?start-index=26&amp;max-results=25'/><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://miser-theory.info/astraendo/pn/pn-atom.xml'/><author><name>orcmid</name><uri>http://www.blogger.com/profile/15720194709820430236</uri><email>noreply@blogger.com</email></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>54</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-7173751.post-4648990316086885463</id><published>2010-04-30T21:17:00.001-07:00</published><updated>2010-04-30T21:18:22.590-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='blog development'/><title type='text'>Republishing before Silence</title><content type='html'>&lt;p&gt;The &lt;strong&gt;&lt;em&gt;nfoCentrale&lt;/em&gt;&lt;/strong&gt; blogs, including &lt;em&gt;Numbering Peano&lt;/em&gt;, were published through Blogger via FTP transfer to my web sites.  That service is ending.&lt;/p&gt;&lt;p&gt;As part of the migration, I am republishing this blog in the latest stable template format.  &lt;/p&gt;&lt;p&gt;Then there will be silence as Blogger is unhooked, although the pages will remain.&lt;/p&gt;&lt;p&gt;No new posts or comments will work until I updated the web site to use its own blog engine.  Once that migration is completed, posting will resume here, with details about what to know about the transition and any breakage that remains to be repaired.&lt;/p&gt;&lt;p&gt;Meanwhile, if you are curious to watch how this works out, check on &lt;a href="http://orcmid.com/BlunderDome/wingnut/"&gt;Spanner Wingnut’s Muddleware Lab&lt;/a&gt;.  It may be in various stages of disrepair, but that blog will come under new custodianship first.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7173751-4648990316086885463?l=miser-theory.info%2Fastraendo%2Fpn%2Fdefault.asp' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/7173751/4648990316086885463/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=7173751&amp;postID=4648990316086885463' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7173751/posts/default/4648990316086885463'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7173751/posts/default/4648990316086885463'/><link rel='alternate' type='text/html' href='http://miser-theory.info/astraendo/pn/2010/04/republishing-before-silence.asp' title='Republishing before Silence'/><author><name>orcmid</name><uri>http://www.blogger.com/profile/15720194709820430236</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='17038397636421592587'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7173751.post-6676924264409251446</id><published>2009-11-13T09:34:00.001-08:00</published><updated>2009-11-13T09:54:13.553-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='implementation note'/><category scheme='http://www.blogger.com/atom/ns#' term='oMiser'/><title type='text'>Friday Miser Note: Interchanging Code</title><content type='html'>&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:432cd869-12cd-4bd4-b084-66fbdbb81eb7" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/Miser+Project" rel="tag"&gt;Miser Project&lt;/a&gt;, &lt;a href="http://technorati.com/tags/oMiser" rel="tag"&gt;oMiser&lt;/a&gt;, &lt;a href="http://technorati.com/tags/XML" rel="tag"&gt;XML&lt;/a&gt;, &lt;a href="http://technorati.com/tags/persistent+object+interchange" rel="tag"&gt;persistent object interchange&lt;/a&gt;&lt;/div&gt; &lt;p&gt;While I think and post mainly about the theoretical abstractions that are important in getting Miser and the Frugal language done properly, I am also thinking ahead to the way the Miser engine can be delivered as a platform component (Windows DLL, .NET assembly, etc.) that hosts Miser on behalf of a software application.&amp;nbsp; I have in mind that any kind of Frugalese user interface for a console application, including any interactive development environment (IDE), would be built atop a hosted oMiser engine as an important first case.&lt;/p&gt; &lt;p&gt;Because the Miser model is platform independent, it would be nice to have a platform-independent way to save, load, and interchange Miser “codes” in a neutral, highly-interchangeable format.&lt;/p&gt; &lt;p&gt;XML comes to mind.&amp;nbsp;&amp;nbsp; Although XML is not a compact binary format, it is a well-known, standard format for which a great number of problems are already solved, including versioning, the ability to deal with extensions gracefully, the complete hiding of the storage structure, and harmony with my intention that the Miser abstraction be universally comprehended.&amp;nbsp; (That is to say, it shall seem as if there is only one oMiser in the world, and the fact that implementations are distributed and replicated is as invisible as can be practically achieved.)&amp;nbsp; In the oMiser case, the XML stream would also be highly compressible using widely-available compression techniques.&lt;/p&gt; &lt;p&gt;The interchangeable “object code” among all oMiser implementations will be standardized in an XML stream.&amp;nbsp; &lt;/p&gt; &lt;p&gt;I propose to abuse the purity of XML for this purpose.&amp;nbsp;&amp;nbsp; The XML will be well-formed but it won’t be the way XML would be naturally used to communicate a persistent format for oMiser Obs.&lt;/p&gt; &lt;p&gt;My basic plan is that the loadable Ob will be coded in a reverse-Polish notation conveyed in XML.&amp;nbsp;&amp;nbsp; The notation will have a syntactic structure that conforms to a BNF grammar such as&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;〈ob〉::= 〈term〉 | 〈ob〉 〈un-op〉 | 〈ob〉 〈ob〉 〈bin-op〉&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;allowing the bottom-up build-up of an internal Ob representation as the XML stream is being read.&amp;nbsp; Not every &lt;a href="http://miser-theory.info/astraendo/pn/2007/11/miser-hacks-ii-hole-to-bind-them.asp"&gt;Ob operation&lt;/a&gt; needs to be implemented, only those needed for constructing constant Obs:&amp;nbsp; &lt;/p&gt; &lt;ul&gt; &lt;li&gt;Here 〈term〉 entries will specify individuals or links to Obs defined earlier in the stream.&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp; &lt;/li&gt; &lt;li&gt;There will be unary〈un-op〉operations, including one for &lt;strong&gt;ob.e&lt;/strong&gt;(&lt;em&gt;ob&lt;/em&gt;) and one for labeling an Ob so that it can be referenced later in the stream.&amp;nbsp; Linking to already-expressed Obs is indispensible for simplifying repetitive introduction of the same Ob in the interior of a larger Ob.&amp;nbsp; I intend to make use of &lt;font face="monospace"&gt;&lt;strong&gt;xml:id&lt;/strong&gt;&lt;/font&gt; for this purpose.&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/li&gt; &lt;li&gt;There will be binary 〈bin-op〉operations, including one for &lt;strong&gt;ob.c&lt;/strong&gt;(&lt;em&gt;ob&lt;/em&gt;, &lt;em&gt;ob&lt;/em&gt;).&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp; &lt;/li&gt; &lt;li&gt;There will be additional mark-up, but this is the essential structure.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;XML streams for the loadable format will be supported at the core level of an oMiser implementation.&amp;nbsp; Given a handle on an Ob, there is an interface that will emit the XML stream for persistent representation of that Ob for any interchange purpose.&amp;nbsp; Likewise, there is a low-level interface on every oMiser engine by which an XML stream is accepted and a handle for the corresponding Ob returned for use in the hosting application.&lt;/p&gt; &lt;p&gt;The XML representation will be flat.&amp;nbsp; That is, the &lt;font face="monospace"&gt;&lt;strong&gt;&amp;lt;oMiser:ob&amp;gt;&lt;/strong&gt;&lt;/font&gt; XML element contains a flat sequence of &lt;font face="monospace"&gt;&lt;strong&gt;&amp;lt;&lt;em&gt;term&lt;/em&gt; /&amp;gt;&lt;/strong&gt;&lt;/font&gt;, &lt;font face="monospace"&gt;&lt;strong&gt;&amp;lt;&lt;em&gt;un-op&lt;/em&gt; /&amp;gt;&lt;/strong&gt;&lt;/font&gt;, and &lt;font face="monospace"&gt;&lt;strong&gt;&amp;lt;&lt;em&gt;bin-op&lt;/em&gt; /&amp;gt;&lt;/strong&gt;&lt;/font&gt; elements.&amp;nbsp; It is easy to process such a flat structure, and it is easy to ensure that such a structure is well-formed according to the grammar for〈ob〉given above. &lt;/p&gt; &lt;p&gt;There are three interesting challenges for this structure.&amp;nbsp; These need to be explored to ensure that the choice of a reverse-polish Ob-loading is as practical as I intend for it to be:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;It is more difficult to produce the loadable format than it is to consume it.&amp;nbsp; This desirable trade-off has to be a containable problem.&amp;nbsp; In particular, we need storage-efficient techniques for emitting the bottom-up reverse-polish construction of any Ob that we are given a handle to.&lt;br&gt;&amp;nbsp; &lt;/li&gt; &lt;li&gt;Because &lt;a href="http://miser-theory.info/astraendo/pn/2008/01/miser-immutability-of-obs.asp"&gt;Obs are inherently immutable&lt;/a&gt;, sharing of common parts is an important storage economizer in oMiser implementations.&amp;nbsp;&amp;nbsp; Taking advantage of opportunities for sharing of substructure in a running implementation is an interesting challenge.&amp;nbsp; Preserving or even enhancing sharing in an exported loader format is an additional opportunity.&amp;nbsp; (It may well be the case that improved sharing and the consequent logical compression of the persistent form is better done by a separate post-processing optimization utility.)&lt;br&gt;&amp;nbsp;&amp;nbsp; &lt;/li&gt; &lt;li&gt;While the run-time validation of a well-formed reverse-Polish sequence of elements is trivial, its expression as a constraint on an XML schema is not so easy.&amp;nbsp; We don’t need an XML schema to implement a consumer of the format (and we can use namespace and DTD rules to signify that the format constraints apply).&amp;nbsp; Just the same, it is valuable to have some sort of schema that expresses the reverse-Polish constraint on the sequence of content elements within an XML &lt;font face="monospace"&gt;&lt;strong&gt;&amp;lt;oMiser:ob&amp;gt;&lt;/strong&gt;&lt;/font&gt; element.&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;I was reminded of all of this when I recently read the 2009-09-29 &lt;a href="http://www.oreillynet.com/pub/au/1712"&gt;Rick Jelliffe&lt;/a&gt; post on &lt;a href="http://broadcast.oreilly.com/2009/09/now-i-have-seen-everything.html"&gt;context-free XML&lt;/a&gt;.&amp;nbsp;&amp;nbsp; The shoe-horning of the context-free reverse-Polish flat stream for〈ob〉as content for an XML &lt;font face="monospace"&gt;&lt;strong&gt;&amp;lt;oMiser:ob&amp;gt;&lt;/strong&gt;&lt;/font&gt; element creates a context-sensitive problem for expression in some sort of XML schema.&amp;nbsp; This post is intended to elaborate on the &lt;a href="http://broadcast.oreilly.com/2009/09/now-i-have-seen-everything.html#comment-2181806"&gt;comment&lt;/a&gt; that Rick’s post inspired from me.&amp;nbsp; I trust this is useful context for that.&amp;nbsp; (As usual, your mileage may vary.)&lt;/p&gt; &lt;p&gt;Discussing oMiser implementation considerations is long overdue in any case.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7173751-6676924264409251446?l=miser-theory.info%2Fastraendo%2Fpn%2Fdefault.asp' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/7173751/6676924264409251446/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=7173751&amp;postID=6676924264409251446' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7173751/posts/default/6676924264409251446'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7173751/posts/default/6676924264409251446'/><link rel='alternate' type='text/html' href='http://miser-theory.info/astraendo/pn/2009/11/friday-miser-note-interchanging-code.asp' title='Friday Miser Note: Interchanging Code'/><author><name>orcmid</name><uri>http://www.blogger.com/profile/15720194709820430236</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='17038397636421592587'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7173751.post-4151539654988523497</id><published>2009-06-23T08:22:00.001-07:00</published><updated>2009-06-23T08:22:32.263-07:00</updated><title type='text'>Alan Turing Birthday: July 23, Centenary: 2012</title><content type='html'>&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:3fa10f98-35f1-4c38-b45c-4aa5e2a6bdb6" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/Alan+Turing" rel="tag"&gt;Alan Turing&lt;/a&gt;, &lt;a href="http://technorati.com/tags/Turing+Machine" rel="tag"&gt;Turing Machine&lt;/a&gt;, &lt;a href="http://technorati.com/tags/Turing+Test" rel="tag"&gt;Turing Test&lt;/a&gt;, &lt;a href="http://technorati.com/tags/Bletchley+Park" rel="tag"&gt;Bletchley Park&lt;/a&gt;, &lt;a href="http://technorati.com/tags/Turing+Centenary" rel="tag"&gt;Turing Centenary&lt;/a&gt;, &lt;a href="http://technorati.com/tags/computation+theory" rel="tag"&gt;computation theory&lt;/a&gt;&lt;/div&gt; &lt;p&gt;I just learned that July 23, 1912 is Alan Turing’s birth date.&amp;nbsp; &lt;/p&gt; &lt;p&gt;There will be a &lt;a href="http://www.turingcentenary.eu/"&gt;centenary celebration&lt;/a&gt; throughout 2012 with UK events held in Cambridge, Manchester, and Bletchley Park.&amp;nbsp; There are already many interesting links on the site and among the Turing Centenary Advisory Committee.&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.bletchleypark.org.uk/"&gt;Bletchley Park&lt;/a&gt;, where the work on cryptography was instrumental in the conduct of World War II, has fallen into disrepair and neglect.&amp;nbsp; One hopes that renewed attention on the life of Alan Turing may bolster support through 2012 and beyond.&lt;/p&gt; &lt;p&gt;[I’m thinking maybe this is an interesting way to finally meet-up with &lt;a href="http://miser-theory.info/astraendo/pn/2008/06/turing-arrives-petzold-on-arithmetic.asp"&gt;Charles Petzold&lt;/a&gt;.&amp;nbsp; I might even have more to offer on insights about computation that I have gained from the Miser Project by then.&amp;nbsp; This year is the time to renew my attention on that.]&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7173751-4151539654988523497?l=miser-theory.info%2Fastraendo%2Fpn%2Fdefault.asp' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/7173751/4151539654988523497/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=7173751&amp;postID=4151539654988523497' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7173751/posts/default/4151539654988523497'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7173751/posts/default/4151539654988523497'/><link rel='alternate' type='text/html' href='http://miser-theory.info/astraendo/pn/2009/06/alan-turing-birthday-july-23-centenary.asp' title='Alan Turing Birthday: July 23, Centenary: 2012'/><author><name>orcmid</name><uri>http://www.blogger.com/profile/15720194709820430236</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='17038397636421592587'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7173751.post-2893168823866300421</id><published>2008-06-16T11:54:00.001-07:00</published><updated>2008-06-17T09:20:26.752-07:00</updated><title type='text'>Miser: Interpretations of Identity</title><content type='html'>&lt;p&gt;&lt;/p&gt; &lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:fa1ec7de-bcd4-4780-9eea-452868932dd4" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/formalized%20theories" rel="tag"&gt;formalized theories&lt;/a&gt;, &lt;a href="http://technorati.com/tags/interpretations%20of%20theories" rel="tag"&gt;interpretations of theories&lt;/a&gt;, &lt;a href="http://technorati.com/tags/FOL=" rel="tag"&gt;FOL=&lt;/a&gt;, &lt;a href="http://technorati.com/tags/first-order%20logic" rel="tag"&gt;first-order logic&lt;/a&gt;, &lt;a href="http://technorati.com/tags/equational%20identities" rel="tag"&gt;equational identities&lt;/a&gt;, &lt;a href="http://technorati.com/tags/identification" rel="tag"&gt;identification&lt;/a&gt;, &lt;a href="http://technorati.com/tags/distinction" rel="tag"&gt;distinction&lt;/a&gt;&lt;/div&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;[&lt;strong&gt;update 2008-06-17T16:08Z:&lt;/strong&gt; I added t0' because I couldn't stand not to show the better refactoring of t0.&amp;nbsp; I added mention of equivalence classes in an interpretation and also came up with conditions other than invalidity for finding an interpretation unusable.]&lt;/p&gt; &lt;p&gt;In &lt;a href="http://miser-theory.info/astraendo/pn/2008/05/miser-logic-of-it.asp"&gt;The Logic of Ot&lt;/a&gt;, I said that I would use informal expressions of &lt;strong&gt;Ot&lt;/strong&gt;, the logical theory that applies to Miser Obs.&amp;nbsp;&amp;nbsp; Now that there has been some use of the special characters and notations of First-Order Logic with equality, I want to take advantage of that to talk about interpretations of identity in models of &lt;strong&gt;Ot&lt;/strong&gt;.&amp;nbsp; The ability to identify and distinguish has great bearing on computational systems, and identity as an interpretation is particularly useful to explore.&lt;/p&gt; &lt;h3&gt;= as Equivalence Relation&lt;/h3&gt; &lt;p&gt;With FOL=, identity and the relational operator, "=", are taken as given, and the following hold:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;=1: ∀&lt;em&gt;x&lt;/em&gt;(&lt;em&gt;x&lt;/em&gt; = &lt;em&gt;x&lt;/em&gt;)&lt;/p&gt; &lt;p&gt;=2: ∀&lt;em&gt;x&lt;/em&gt;∀&lt;em&gt;y&lt;/em&gt;(&lt;em&gt;x&lt;/em&gt; = &lt;em&gt;y → y = x&lt;/em&gt;)&lt;/p&gt; &lt;p&gt;=3: ∀&lt;em&gt;x&lt;/em&gt;∀&lt;em&gt;y&lt;/em&gt;∀&lt;em&gt;z&lt;/em&gt;(&lt;em&gt;x&lt;/em&gt; = &lt;em&gt;y&lt;/em&gt;&amp;nbsp; ∧&lt;em&gt; y = z&amp;nbsp; → x = z&lt;/em&gt;)&lt;/p&gt; &lt;p&gt;≠0: ∀&lt;em&gt;x&lt;/em&gt;∀&lt;em&gt;y&lt;/em&gt;(&lt;em&gt;x&lt;/em&gt; ≠ &lt;em&gt;y ↔ ¬(x = y&lt;/em&gt;))&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;The first three are the common properties of equivalence relationships: "=" is reflexive (=1), symmetrical (=2), and transitive (=3).&amp;nbsp;&amp;nbsp; The final condition is essentially the definition of "≠" in terms of "=".&lt;/p&gt; &lt;h3&gt;What Are We Talking About?&lt;/h3&gt; &lt;p&gt;In a first-order logical theory, the variables (&lt;em&gt;x&lt;/em&gt;, &lt;em&gt;y&lt;/em&gt;, and &lt;em&gt;z&lt;/em&gt; as seen in ∀&lt;em&gt;x&lt;/em&gt;∀&lt;em&gt;y&lt;/em&gt;∀&lt;em&gt;z) &lt;/em&gt;are understood to refer to objects in the &lt;strong&gt;domain of discourse&lt;/strong&gt;.&amp;nbsp; We only know what there is to know about that domain from the introduction of constants and expression of conditions that are theoretically required to be satisfied over that domain.&amp;nbsp; For FOL=, we are given an equivalence relation (expressed with the symbol "="), which tells us very few things about conditions under which variables can be taken as referring to the same object of the domain of discourse.&lt;/p&gt; &lt;p&gt;It should be apparent that having "=" doesn't tell us much about the theoretical objects, although it is more than not having "=" (and its partner, "≠").&lt;/p&gt; &lt;p&gt;An intended interpretation could well be that objects in the domain of discourse be identifiable (we can tell when we are referring to the same one) and discernable (we can tell when we aren't).&amp;nbsp;&amp;nbsp; Let's see how that might work.&lt;/p&gt; &lt;h3&gt;A Tiny Domain&lt;/h3&gt; &lt;p&gt;To provide some practice with ideas of practical interpretation, consider the logical theory obtained by adding the following conditions:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;t0: ∃&lt;em&gt;x&lt;/em&gt;∃&lt;em&gt;y&lt;/em&gt;∃&lt;em&gt;z&lt;/em&gt;∀&lt;em&gt;u&lt;/em&gt;( &lt;em&gt;x &lt;/em&gt;≠ &lt;em&gt;y&lt;/em&gt; ∧&amp;nbsp; &lt;em&gt;y &lt;/em&gt;≠ &lt;em&gt;z&lt;/em&gt; ∧ &lt;em&gt;x &lt;/em&gt;≠ &lt;em&gt;z&lt;/em&gt; ∧ (&lt;em&gt;u &lt;/em&gt;= &lt;em&gt;x&lt;/em&gt; ∨ &lt;em&gt;u &lt;/em&gt;= &lt;em&gt;y&lt;/em&gt; ∨ &lt;em&gt;u &lt;/em&gt;= &lt;em&gt;z&lt;/em&gt;) )&lt;/p&gt; &lt;p&gt;&lt;u&gt;or the equivalent,&lt;/u&gt;&lt;/p&gt; &lt;p&gt;&lt;u&gt;t0': ∃&lt;em&gt;x&lt;/em&gt;∃&lt;em&gt;y&lt;/em&gt;∃&lt;em&gt;z&lt;/em&gt;( &lt;em&gt;x &lt;/em&gt;≠ &lt;em&gt;y&lt;/em&gt; ∧&amp;nbsp; &lt;em&gt;y &lt;/em&gt;≠ &lt;em&gt;z&lt;/em&gt; ∧ &lt;em&gt;x &lt;/em&gt;≠ &lt;em&gt;z&lt;/em&gt; ∧ ∀&lt;em&gt;u&lt;/em&gt;(&lt;em&gt;u &lt;/em&gt;= &lt;em&gt;x&lt;/em&gt; ∨ &lt;em&gt;u &lt;/em&gt;= &lt;em&gt;y&lt;/em&gt; ∨ &lt;em&gt;u &lt;/em&gt;= &lt;em&gt;z&lt;/em&gt;) )&lt;/u&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;The intended reading of this is as&lt;/p&gt; &lt;ol&gt; &lt;ol&gt; &lt;li&gt;There are at least three different objects in the domain of discourse, and  &lt;li&gt;Any object in the domain of discourse is one of those&lt;/li&gt;&lt;/ol&gt;&lt;/ol&gt; &lt;p&gt;which is to say, there are exactly three objects in the domain of discourse.&lt;/p&gt; &lt;p&gt;If we only have that one additional condition (t0) in our logical theory, we know nothing beyond that.&amp;nbsp; &lt;/p&gt; &lt;p&gt;Notice that we have not labeled the three theoretical objects in any way.&amp;nbsp;&amp;nbsp; All we have provided for is that there be exactly three.&lt;/p&gt; &lt;p&gt;It will be useful to appear to be more specific by naming them:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;t1: A ≠ B ∧&amp;nbsp; B ≠ C ∧ A ≠ C&lt;/p&gt; &lt;p&gt;t2: ∀&lt;em&gt;u&lt;/em&gt;(&lt;em&gt;u &lt;/em&gt;= A ∨ &lt;em&gt;u &lt;/em&gt;= B ∨ &lt;em&gt;u &lt;/em&gt;= C)&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Here, A, B, and C are constants for objects in the domain of discourse.&amp;nbsp;&amp;nbsp; We haven't provided much more than what (t0) assures us of, although if there is more to say about the ways that the three objects differ, having the constants to refer to may be useful.&lt;/p&gt; &lt;h3&gt;Illustrative Interpretations&lt;/h3&gt; &lt;p&gt;The first interpretation will be in terms of numbers.&amp;nbsp; Assume the system of numbers and arithmetic.&amp;nbsp; Take that system as separate from the logical theory consisting of FOL= plus t0 and t1.&amp;nbsp; (t2 is actually a consequence of that much.)&lt;/p&gt; &lt;p&gt;One interpretation of our tiny theory in number theory would be by saying that the interpretation of A is any &lt;em&gt;n&lt;/em&gt; &amp;lt; 0, the interpretation of B is 0, and the interpretation of C is any &lt;em&gt;n&lt;/em&gt; &amp;gt; 0.&amp;nbsp;&amp;nbsp; We could be specific, say, with interpretation of A as -1, B as 0, and C as +1.&amp;nbsp;&amp;nbsp; We could also say that A is all &lt;em&gt;n&lt;/em&gt; &amp;lt; 0, B is 0 only, and C is all &lt;em&gt;n&lt;/em&gt; &amp;gt; 0.&amp;nbsp; That is, A, B, and C correspond to distinct classes.&amp;nbsp; &lt;u&gt;Since they have no members in common, these are known as equivalence classes.&amp;nbsp; We'll explore that further when we return to exploration of &lt;strong&gt;Ot&lt;/strong&gt;.&lt;/u&gt;&lt;/p&gt; &lt;p&gt;It doesn't matter, here, how the interpretation is chosen, so long as, having made it, we stick to it.&amp;nbsp; The system in which we make the interpretation is a model (in the loose sense of &lt;a href="http://miser-theory.info/astraendo/pn/2008/05/reality-is-model_29.asp"&gt;Reality is the Model&lt;/a&gt;) provided that all deductions in our logical theory hold in the interpretation.&lt;/p&gt; &lt;p&gt;Because the logical theory says nothing about aspects of the model that are not accounted for in the logical theory, those matters are irrelevant to the conditions of the logical theory.&amp;nbsp; It does not matter how many different ways the interpretation could be made in the model, so long as when one is made, the logical theory is seen to hold for the interpretation.&amp;nbsp; There is a common fallacy involving reasoning about extra-theoretical characteristics of the model to argue that the theory is incorrect or inapplicable, when the disagreement is &lt;u&gt;more-appropriately viewed as one&lt;/u&gt; over choice of interpretation.&amp;nbsp;&amp;nbsp; It helps to carefully separate the theory from its interpretations and models to avoid that pitfall.&amp;nbsp; The abstract theory and the logical formalism is helpful in that regard, even if it feels quite unnatural.&lt;/p&gt; &lt;h3&gt;"="/"≠" Are Interpreted Too&lt;/h3&gt; &lt;p&gt;It is easy to overlook one important feature of an interpretation of our tiny theory: There must be an interpretation for "="/"≠" in the model as well.&amp;nbsp; That comes along too easily in our choice of interpretations in the system of numbers and arithmetic and it is easy to overlook.&amp;nbsp; When we dig into computational systems and the details of Miser, the ability to discriminate "="/"≠" in particular interpretations becomes very important.&lt;/p&gt; &lt;p&gt;Finally, as an interpretation in reality: let A be earth, B be wind, and C be fire.&amp;nbsp; This is a questionable interpretation quite apart from the omission of water.&amp;nbsp; The difficulty is assuring that these are cleanly distinguishable concepts.&amp;nbsp; What do we do with flaming molten lava and the sucking wind of a forest fire?.&amp;nbsp;&amp;nbsp; We will stumble here at least in an effort to have well-determined "="/"≠" and understandable communication of the conditions that others can accept and apply.&amp;nbsp; The simple, practical conclusion may be that the interpretation is invalid &lt;u&gt;(or simply meaningless/useless)&lt;/u&gt; and the theory is inapplicable in that case.&amp;nbsp; &lt;/p&gt; &lt;p&gt;In other cases, a certain conceptual sloppiness, if carefully circumscribed, may be tolerable in having useful interpretations in reality.&amp;nbsp; It remains to be seen whether that is ever very workable.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7173751-2893168823866300421?l=miser-theory.info%2Fastraendo%2Fpn%2Fdefault.asp' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/7173751/2893168823866300421/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=7173751&amp;postID=2893168823866300421' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7173751/posts/default/2893168823866300421'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7173751/posts/default/2893168823866300421'/><link rel='alternate' type='text/html' href='http://miser-theory.info/astraendo/pn/2008/06/miser-interpretations-of-identity.asp' title='Miser: Interpretations of Identity'/><author><name>orcmid</name><uri>http://www.blogger.com/profile/15720194709820430236</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='17038397636421592587'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7173751.post-5663634924236088349</id><published>2008-06-14T11:00:00.001-07:00</published><updated>2008-06-14T11:14:53.454-07:00</updated><title type='text'>Turing Arrives: Petzold on Arithmetic</title><content type='html'>&lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:227435f3-e379-4ce6-bc4d-85105ff588c6" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/Charles%20Petzold" rel="tag"&gt;Charles Petzold&lt;/a&gt;, &lt;a href="http://technorati.com/tags/The%20Annotated%20Turing" rel="tag"&gt;The Annotated Turing&lt;/a&gt;, &lt;a href="http://technorati.com/tags/Alan%20Turing" rel="tag"&gt;Alan Turing&lt;/a&gt;, &lt;a href="http://technorati.com/tags/Andrew%20Hodges" rel="tag"&gt;Andrew Hodges&lt;/a&gt;, &lt;a href="http://technorati.com/tags/Keith%20Devlin" rel="tag"&gt;Keith Devlin&lt;/a&gt;, &lt;a href="http://technorati.com/tags/Mathematical%20Realism" rel="tag"&gt;Mathematical Realism&lt;/a&gt;&lt;/div&gt; &lt;blockquote&gt; &lt;blockquote&gt; &lt;dl&gt; &lt;dt&gt;&lt;em&gt;previously:&lt;/em&gt;  &lt;dd&gt;2008-05-26: &lt;a href="http://miser-theory.info/astraendo/pn/2008/05/catching-up-with-turing.asp"&gt;Catching Up with Turing&lt;/a&gt;&lt;br&gt;2007-11-22: &lt;a href="http://miser-theory.info/astraendo/pn/2007/11/more-annotated-turing.asp"&gt;More Annotated Turing&lt;/a&gt;&lt;br&gt;2007-11-04: &lt;a href="http://miser-theory.info/astraendo/pn/2007/11/petzold-annotates-turing.asp"&gt;Petzold Annotates Turing!&lt;/a&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;dt&gt;&lt;em&gt;related:&lt;/em&gt;  &lt;dd&gt;2007-11-17: &lt;a href="http://miser-theory.info/astraendo/pn/2007/11/different-universal-computation-models.asp"&gt;Different (Universal) Computation Models&lt;/a&gt;&lt;br&gt;2008-02-29: &lt;a href="http://miser-theory.info/astraendo/pn/2008/02/miser-frugalese-for-applicative.asp"&gt;Miser: Frugalese for Applicative Operations&lt;/a&gt;&lt;br&gt;2008-05-06: &lt;a href="http://miser-theory.info/astraendo/pn/2008/05/miser-logic-of-it.asp"&gt;Miser: The Logic of Ot&lt;/a&gt;&lt;br&gt;2008-05-29: &lt;a href="http://miser-theory.info/astraendo/pn/2008/05/reality-is-model_29.asp"&gt;Reality Is the Model&lt;/a&gt;&lt;/dd&gt;&lt;/dl&gt;&lt;/blockquote&gt;&lt;/blockquote&gt; &lt;p&gt;I pre-ordered my copy of Charles Petzold's &lt;a href="http://www.theannotatedturing.com/"&gt;The Annotated Turing&lt;/a&gt; on November 22, 2007.&amp;nbsp; On May 24, I had to authorize a delay in the estimated ship date.&amp;nbsp; I waited patiently.&amp;nbsp; When I saw that Petzold &lt;a href="http://www.charlespetzold.com/blog/2008/06/Hot-Off-the-Presses.html"&gt;had his copies&lt;/a&gt;, I wondered if my order would fall through the cracks.&amp;nbsp; The amazon.com site listed the book as in stock, but I had no word.&amp;nbsp; That was resolved this Monday, June 9, when I received notice of shipment.&amp;nbsp; The book arrived two days later by postal mail. &lt;/p&gt; &lt;p&gt;The problem with actually having &lt;em&gt;The Annotated Turing&lt;/em&gt; in my possession is deciding when to start and clearing the time to do it.&amp;nbsp; I did start reading at the end of the book, and I have nosed into a few other sections.&amp;nbsp; Naturally, the book arrived at a moment when all of my projects are behind and I am already starting an important new one.&amp;nbsp; A systematic reading is yet to come.&amp;nbsp; I know I will love it if only for the historical threads and connections that Petzold traces in the book.&amp;nbsp; &lt;/p&gt; &lt;p&gt;As part of the tracing of connections, Petzold has been &lt;a href="http://www.charlespetzold.com/blog/2008/06/Reading-Hodges-One-to-Nine.html"&gt;reading&lt;/a&gt; &lt;em&gt;One to Nine&lt;/em&gt; by Turing's biographer, Andrew Hodges.&amp;nbsp; There are numerous connections traced there, and I like it that Petzold finds himself arguing with Hodges as he works through the book.&lt;/p&gt; &lt;p&gt;Yesterday, Petzold &lt;a href="http://www.charlespetzold.com/blog/2008/06/Memorizing-the-Multiplication-Tables.html"&gt;comments&lt;/a&gt; on Hodges' objection to memorization of arithmetic with recognition of his own experience in learning the multiplication tables.&amp;nbsp; The interesting idiosyncrasy is how Petzold failed to have automatic memory of certain multiplication combinations and he would solve those cases by algebraic deduction when needed.&amp;nbsp; That resonated for me.&amp;nbsp; There are many cases where I did not remember a rule, but I could and did recreate it on demand.&amp;nbsp; I also share Petzold's having done that long after simply memorizing the result would have been more productive.&amp;nbsp; (This shows up in other activities of mine too, including re-inspection of already-written code to remind myself that it is sound and what the context is before adding more to it.)&amp;nbsp; &lt;/p&gt; &lt;p&gt;I wonder how much this ability to have abstracted an applicable principle (in my case, remembering the times-11 and times-12 cases in terms of times-10 plus times-1 or times-2) leads to algebraic facility and the handy use of identities and mathematical induction well before I developed anything like a fundamental understanding of number theory over the course of my adult years.&amp;nbsp; I recall re-derivation as being valuable in test-taking and yet it is not as direct as having embodied the result for immediate availability.&amp;nbsp; &lt;/p&gt; &lt;p&gt;I can't tell you how many times I have verified for myself what the correct formula for the sum of the first &lt;em&gt;n&lt;/em&gt; integers is by redoing the constructive derivation.&amp;nbsp; My doubt is always between n(n+1)/2 and n(n-1)/2 and it is, of course [easy for me to say], the former.&amp;nbsp; I say that not because I have memorized it but because I know how to tell quickly another way, the first way I ever saw it "proved."&amp;nbsp; I suspect that I have just sped that up for myself by looking at it anew this time.&amp;nbsp; Then there's the one about the sum of the first &lt;em&gt;n&lt;/em&gt; powers of 2 and what it looks like in binary, etc.&amp;nbsp; I suspect that our diminished respect for the teaching of arithmetic and how to verify arithmetic results is causing trouble for students and their teachers when it is time to approach algebra where one can't avoid dealing with ratios and fractions by using a calculator.&lt;/p&gt; &lt;p&gt;Seeing this latest post from Petzold has me thinking of the connection with a recent paper by &lt;a href="http://www.stanford.edu/~kdevlin/"&gt;Keith Devlin&lt;/a&gt; (via &lt;a href="http://www.ucalgary.ca/~rzach/logblog/2008/06/towards-new-epistemology-of-mathematics.html"&gt;Richard Zack&lt;/a&gt;), "&lt;a href="http://www.lib.uni-bonn.de/PhiMSAMP/GAP6/"&gt;The Useful and Reliable Illusion of Reality in Mathematics&lt;/a&gt;."&amp;nbsp; Two connections that come to mind: how we might come to exercise our capacity for abstract, conceptual thinking as we develop our facility with language, and the tendency to see mathematical conceptions as real.&amp;nbsp; In the second case, Petzold has observed that Turing's machine was his idea for a "real" computer, and I am surprised by that.&amp;nbsp; There are deeper connections in the Devlin paper with how we end up regarding mathematical objects, and that is worthy of separate discussion with regard to what makes computers so successful and so devilishly difficult to deal with.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7173751-5663634924236088349?l=miser-theory.info%2Fastraendo%2Fpn%2Fdefault.asp' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/7173751/5663634924236088349/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=7173751&amp;postID=5663634924236088349' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7173751/posts/default/5663634924236088349'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7173751/posts/default/5663634924236088349'/><link rel='alternate' type='text/html' href='http://miser-theory.info/astraendo/pn/2008/06/turing-arrives-petzold-on-arithmetic.asp' title='Turing Arrives: Petzold on Arithmetic'/><author><name>orcmid</name><uri>http://www.blogger.com/profile/15720194709820430236</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='17038397636421592587'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7173751.post-667300400251075377</id><published>2008-05-29T14:46:00.001-07:00</published><updated>2008-05-29T14:46:53.662-07:00</updated><title type='text'>Reality Is the Model</title><content type='html'>&lt;p&gt;&lt;/p&gt; &lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:8c62570e-11c8-4567-85e1-7a56b6569885" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/physics" rel="tag"&gt;physics&lt;/a&gt;, &lt;a href="http://technorati.com/tags/formalized%20theories" rel="tag"&gt;formalized theories&lt;/a&gt;, &lt;a href="http://technorati.com/tags/interpretations%20of%20theories" rel="tag"&gt;interpretations of theories&lt;/a&gt;, &lt;a href="http://technorati.com/tags/models%20of%20theories" rel="tag"&gt;models of theories&lt;/a&gt;, &lt;a href="http://technorati.com/tags/reductionism" rel="tag"&gt;reductionism&lt;/a&gt;, &lt;a href="http://technorati.com/tags/empiricism" rel="tag"&gt;empiricism&lt;/a&gt;&lt;/div&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;[&lt;strong&gt;cross-posted to &lt;a href="http://orcmid.com/blog/2008/05/reality-is-model.asp"&gt;Orcmid's Lair&lt;/a&gt;&lt;/strong&gt;.&amp;nbsp; This is at a level of abstract speculation that is more appropriate here than there.&amp;nbsp; However, I would like a broader audience, and reactions, to what strikes me as having practical importance in how we develop successful computer-based systems.]&lt;/p&gt; &lt;p&gt;During my regular Tuesday buddy call with colleague &lt;a href="http://praxis101.com/blog/"&gt;Bill Anderson&lt;/a&gt;, it suddenly occurred to me that I could account for reductionism, an error that scientists and others (software technologists and their masters, for example) make.&amp;nbsp; It is all captured in the following statement:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&amp;nbsp;&lt;em&gt;Theories don't model reality; reality is the model.&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;I don't recall what prompted my exclamation on the subject during the call, unless it was something about how objectionable "code is the model," "code rules," and other developer slogans are, where the implementation of something becomes the specification, denying us access to any useful answer to the question "implementation of what?"&lt;/p&gt; &lt;p&gt;Now, it is not a new thing for Bill and I to be discussing these issues, including this view of the role of theory.&amp;nbsp;&amp;nbsp; What hadn't landed so sharply was how viewing theories as models for reality is the very pitfall that engenders reductionism. &lt;/p&gt; &lt;p&gt;There's much more careful development required as part of arguing for the usefulness of "reality is the model."&amp;nbsp;&amp;nbsp; I have been looking at that in a setting where I am conducting a theory-driven implementation of some software in the Miser Project.&amp;nbsp; Bill and I discuss this even more where it matters a lot to information technology, in contrasting What Computers Know with what Programmers Know to Do and how there is an essential gap between how computer systems are built, the requirements that those systems are meant to satisfy, and the world of opportunity in which those systems are instruments of human purpose. &lt;/p&gt; &lt;p&gt;For now, I want to look at the statement in the context of how we appear to arrive at theories and then apply them as given.&lt;/p&gt; &lt;p&gt;A word of warning: the value of "reality is the model" is not that it is "true."&amp;nbsp; The value to be found is in having a more useful and powerful way of looking at what we do with theories in contrast with the limitations of imagining our theories to be modeling reality.&lt;/p&gt; &lt;h3&gt;Where Theories Come From&lt;/h3&gt; &lt;p&gt;There seems little doubt that theories started out as explanations of the regularity in our experience of reality, of the world.&amp;nbsp; Some of these theories were, and still are, very pre-scientific (as theories about theorizing might be as well, and that won't stop me).&lt;/p&gt; &lt;p&gt;At some point in the course of the &lt;a href="http://en.wikipedia.org/wiki/Scientific_revolution"&gt;scientific revolution&lt;/a&gt;, say around 1600, typified by the work of &lt;a href="http://en.wikipedia.org/wiki/Francis_Bacon#Baconian_Philosophy"&gt;Frances Bacon&lt;/a&gt;, there was an important move to development of scientific theories via inductive generalization from observations of nature, not deduction from some principles of cause.&amp;nbsp; The reliance on experimental confirmation and empirical observation became important.&amp;nbsp;&amp;nbsp; A consistent case of contradictory results could show where the theory is inapplicable or even completely incorrect.&amp;nbsp; One risk is that expression of a generalized (abstracted) theory might be taken as an explanation of the nature of nature as in "objects at rest tend to remain at rest."&amp;nbsp; &lt;/p&gt; &lt;p&gt;Emergence of mathematical sciences, illustrated in the achievements of Isaac Newton, had a profound impact.&amp;nbsp; It permitted the deduction of consequences by calculation or proof, and it permitted the experimental confirmation of those deductions by natural experiments.&amp;nbsp; Notice, however, that the deduction occurs inside the theory, as it were, and the correspondence of the conclusion with reality is an empirical matter.&lt;/p&gt; &lt;h3&gt;Theories on Their Own&lt;/h3&gt; &lt;p&gt;The mathematical formulation of important theories, and the computational applications of those theories, are removed from reality.&amp;nbsp; Once we are operating in the formal, mathematical theory of a science, there is no reality there.&amp;nbsp; The connection to the reality is accomplished by &lt;em&gt;our interpretation&lt;/em&gt; of the mathematical theory as being about reality.&amp;nbsp; Being about something, especially reality, is not a feature of mathematical systems.&amp;nbsp; Being about something is how we interpret results in the mathematical formulation as applying to the world in accord with a scientific thesis.&amp;nbsp; In other words, the scientific thesis part is not expressed in the mathematical formulation.&amp;nbsp; That is what we add ourselves (even though it is what led us to the formulation and why it might be of any value to us).&amp;nbsp;&amp;nbsp; Some of these interpretations have been so reliable and so useful, we tend to speak of the expressions of the theories as laws (&lt;em&gt;E&lt;/em&gt; = &lt;em&gt;mc&lt;/em&gt;&lt;sup&gt;2&lt;/sup&gt; being a popular one, force being proportional to rate of change of momentum being less familiar, although we experience its confirmation every day).&amp;nbsp; &lt;/p&gt; &lt;p&gt;There is a combination of deductive process (predicting via calculation, say) and inductive formulation in this approach.&amp;nbsp; We might say that (empirical) experience has shown that the interpreted deductions are reliable and that the theory is a good one in that sense.&lt;/p&gt; &lt;p&gt;The pitfall is to think of the theory as the truth, as somehow explaining how it is that the interpretation of findings in the theory align.&amp;nbsp; Perhaps the most current conceit of this nature has to do with confusion of what nature does as computation because computational processes have some similar characteristics.&lt;/p&gt; &lt;h3&gt;Interpreting Theories and the Reductionism Pitfall&lt;/h3&gt; &lt;p&gt;There is an area of mathematics called "model theory" or what, here, we might call the model-theoretic view of mathematically-expressed theories.&amp;nbsp; &lt;/p&gt; &lt;p&gt;In model theory, the idea is that a mathematical theory, expressed in a formal, logical way, is given an interpretation by identifying its mathematical elements with those in some other system (usually some other kind of mathematical one).&amp;nbsp; If the interpretation is such that deductions in the first theory have results that are true in the interpretation, we say that the interpretation is valid, and that the interpretation is a model of the theory.&amp;nbsp; The model satisfies the theory.&amp;nbsp; I am omitting many technicalities (and probably abusing model theory) in order to appropriate the basic idea for application to interpretations in the world in mathematical sciences.&lt;/p&gt; &lt;p&gt;An important feature of this view is that the theory need not account for everything in the model.&amp;nbsp; For the model to be a model everything that is true of the theory is true in the interpretation, but the model is not otherwise constrained.&amp;nbsp; The interpretation is only for that aspect of the model that corresponds to the theory.&amp;nbsp; There may many other features and aspects to the model that are simply not captured by the interpretation (and hence the theory).&amp;nbsp;&amp;nbsp; Under the particular interpretation, at least, however valid (in either a mathematical or an empirical sense, as the case might be), the theory has nothing to offer about those other matters.&amp;nbsp; In particular, we are free from concluding that the theory explains the model or dictates its "working."&amp;nbsp; We are also free, in the case of the world and many mathematical and logical theories, of having quite different interpretations in reality for models of the same theory.&amp;nbsp; (Interpreting objects and phenomena as numbers is something we are able to do in innumerable ways.&amp;nbsp; I had to say that.)&lt;/p&gt; &lt;p&gt;The reductionist pitfall is treating the theory as the model (and therefore comprehensive), and claiming the theory to be "about" the world.&amp;nbsp; In that case, there is no way to countenance there being anything else about the world and even the obvious becomes inaccessible.&amp;nbsp; There's some other kind of pitfall in faulting a theory for not embracing all of reality in its interpretations, but I am less concerned about that, although "reality is the model" avoids that too.&lt;/p&gt; &lt;h3&gt;Computational Manifestations of Theories&lt;/h3&gt; &lt;p&gt;This apparently-backward way of looking at theories is about the application of theories in ways that are useful in approaching reality.&amp;nbsp; The perspective is also contrary to using computation as embodiments of theories and seeing them as somehow modeling the world.&amp;nbsp; Theories may have computational models (as interpretations).&amp;nbsp; This doesn't make the computation model a model of the world any more than the theory is, in this view.&amp;nbsp; I say that there is a computation model of the theory, and there may be an intended interpretation in the world that is a model, but that does not make the computational model a model of the world any more than the theory is.&lt;/p&gt; &lt;p&gt;I find this a very fruitful way to look at a variety of aspects of information technology as it is developed and used.&amp;nbsp; My continuing duty is to articulate this value in less-abstract and directly valuable terms.&amp;nbsp; One curiosity is how this view can still allow for the notion that the act of programming a computer is a case of theory building.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7173751-667300400251075377?l=miser-theory.info%2Fastraendo%2Fpn%2Fdefault.asp' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/7173751/667300400251075377/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=7173751&amp;postID=667300400251075377' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7173751/posts/default/667300400251075377'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7173751/posts/default/667300400251075377'/><link rel='alternate' type='text/html' href='http://miser-theory.info/astraendo/pn/2008/05/reality-is-model_29.asp' title='Reality Is the Model'/><author><name>orcmid</name><uri>http://www.blogger.com/profile/15720194709820430236</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='17038397636421592587'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7173751.post-1125503987918990599</id><published>2008-05-26T20:17:00.001-07:00</published><updated>2008-05-29T09:27:42.120-07:00</updated><title type='text'>Catching Up with Turing</title><content type='html'>&lt;p&gt;&lt;/p&gt; &lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:2ca592f2-770c-49f7-b791-60ede3db0b0c" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/Charles%20Petzold" rel="tag"&gt;Charles Petzold&lt;/a&gt;, &lt;a href="http://technorati.com/tags/Alan%20Turing" rel="tag"&gt;Alan Turing&lt;/a&gt;, &lt;a href="http://technorati.com/tags/Turing%20Machine" rel="tag"&gt;Turing Machine&lt;/a&gt;, &lt;a href="http://technorati.com/tags/Universal%20Turing%20Machine" rel="tag"&gt;Universal Turing Machine&lt;/a&gt;, &lt;a href="http://technorati.com/tags/UTM" rel="tag"&gt;UTM&lt;/a&gt;, &lt;a href="http://technorati.com/tags/Church-Turing%20Thesis" rel="tag"&gt;Church-Turing Thesis&lt;/a&gt;, &lt;a href="http://technorati.com/tags/Computation%20Theory" rel="tag"&gt;Computation Theory&lt;/a&gt;, &lt;a href="http://technorati.com/tags/On%20Computable%20Numbers" rel="tag"&gt;On Computable Numbers&lt;/a&gt;, &lt;a href="http://technorati.com/tags/Mathematical%20Platonism" rel="tag"&gt;Mathematical Platonism&lt;/a&gt;, &lt;a href="http://technorati.com/tags/Brouwer" rel="tag"&gt;Brouwer&lt;/a&gt;, &lt;a href="http://technorati.com/tags/infinities" rel="tag"&gt;infinities&lt;/a&gt;&lt;/div&gt; &lt;p&gt;&lt;/p&gt;&lt;small&gt; &lt;p&gt;[&lt;strong&gt;update 2008-05-29T16:15Z:&lt;/strong&gt; Added Petzold's 2008-05-28 post with its nice tie-in of logic and Turing.]&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;strong&gt;update 2008-05-27T16:03Z:&lt;/strong&gt; A little tweaking in my comment on Petzold's 2008-05-25 essay.]&lt;/p&gt;&lt;/small&gt; &lt;p&gt;I received an amazon.com e-mail warning announcing that Charles Petzold's &lt;em&gt;&lt;a href="http://miser-theory.info/astraendo/pn/2007/11/more-annotated-turing.asp"&gt;The Annotated Turing&lt;/a&gt;&lt;/em&gt; is delayed and I needed to approve the shipping delay from May 23 to June 23.&amp;nbsp; A number of times, I will receive one of these announcements only to have it followed by my order shipping immediately.&amp;nbsp; Since &lt;a href="http://www.charlespetzold.com/blog/blog.xml"&gt;Petzold's site&lt;/a&gt; reports the book is scheduled to launch on June 16, I will be content to wait.&amp;nbsp; &lt;/p&gt; &lt;p&gt;Meanwhile, Petzold has been posting interesting tid-bits that attracted his attention while working on the book.&amp;nbsp; In many cases, there will be deeper coverage when the text is available.&amp;nbsp; Here are some that I am particularly keen to dig further into:&lt;/p&gt; &lt;dl&gt; &lt;dt&gt;2008-05-28: &lt;a href="http://www.charlespetzold.com/blog/2008/05/Babies-Are-Illogical.html"&gt;Babies Are Illogical: The "Lost" "Chapter" of "Code"&lt;/a&gt;  &lt;dd&gt;Starting out with a look at logical puzzles, Petzold looks at questions about truth, how connected to logic, and related challenges that did not make it into his book, &lt;em&gt;Code: The Hidden Language of Computer Hardware and Software&lt;/em&gt; (recommended).&amp;nbsp; In this essay, Petzold illustrates Charles Dodgson's 1896 &lt;em&gt;Symbolic Logic&lt;/em&gt; approach using George Boole's original 1854 notation and will tie it back to computability in Chapter 12 of &lt;em&gt;The Annotated Turing&lt;/em&gt;.&lt;br&gt;&amp;nbsp;&amp;nbsp; &lt;dt&gt;2008-05-25: &lt;a href="http://www.charlespetzold.com/blog/2008/05/Reading-Brian-Rotmans-Ad-Infinitum.html"&gt;Reading Brian Rotman's "Ad Infinitum..."&lt;/a&gt;  &lt;dd&gt;There is an interesting tension between computations that do not stop but in the limit ( as we were inclined to say when I was a school student) the output &lt;strike&gt;approaches&lt;/strike&gt; &lt;u&gt;converges to&lt;/u&gt; some computable real number.&amp;nbsp; Turing allowed such cases, and then demonstrated that there are still far more real numbers that cannot be computed than those that can.&amp;nbsp;&amp;nbsp; The way this is arrived at leaves some questions about how many real numbers we think there should be and whether we are mistaken in where conventional set theory takes us in that regard.&lt;br&gt;&amp;nbsp;&amp;nbsp; Although I am not read&lt;u&gt;y&lt;/u&gt; to concede to Petzold that any kind of Platonic commitment is &lt;u&gt;necessary&lt;/u&gt; in conception of the transfinite, I definitely find this accompanying statement worthy of careful appraisal:&lt;br&gt;&amp;nbsp;&amp;nbsp; "We like to pretend that mathematics is the most 'objective' and least human-bound intellectual endeavor, but our view of the natural numbers reveals mathematics to be founded on a very human metaphysical conceit. The natural numbers are not, in fact, "natural" — that is, intrinsically part of nature — but arise out of human discourse."&lt;br&gt;&amp;nbsp;&amp;nbsp; In this essay, Petzold explores Brian Rotman's effort to avoid conception of the completed natural numbers (and certainly, in that case, the completed reals).&amp;nbsp; The focus is on tying Turing's work to philosophical issues regarding the foundation of mathematics, an unexpected connection and one that Turing did not explore over-much.&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;dt&gt;2008-05-22: &lt;a href="http://www.charlespetzold.com/blog/2008/05/Turing-and-Brouwer.html"&gt;Turing and Brouwer: The Unexplored Connection&lt;/a&gt;  &lt;dd&gt;Not expecting to find a connection between the work of Turing and L.E.J Brouwer, Petzold was startled to find one in the short Correction that Turing made to his original paper.&amp;nbsp; Accounting for this leads to a chapter on "Conceiving the Continuum" in &lt;em&gt;The Annotated Turing&lt;/em&gt; and this delightful essay on how that all unfolded.&amp;nbsp; This is more on the issue of infinitudes.&lt;br&gt;&amp;nbsp;&amp;nbsp; &lt;dt&gt;2008-05-18: &lt;a href="http://www.charlespetzold.com/blog/2008/05/Turing-Machines-That-Run-Forever.html"&gt;Turing Machines that Run Forever&lt;/a&gt;  &lt;dd&gt;From the beginning, Petzold has intimated that he wants to illuminate the Turing Machine as Alan Turing conceived of it, with it being acceptable for the machine to run forever.&amp;nbsp; This is not the ordinary formulation that has survived into contemporary computation theory.&amp;nbsp; Turing wants to bring the full Turing characterization to our attention.&amp;nbsp; This essay motivates the difference and the historical context at the time of Turing's formulation and the subsequent revisions.&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;dt&gt;2008-05-10: &lt;a href="http://www.charlespetzold.com/blog/toc.html"&gt;The 300 Page Ideal&lt;/a&gt;  &lt;dd&gt;Considering some of the later blog posts, it is amusing to see this use of "ideal."&amp;nbsp; This is a wonderful essay on the quirky fascination with attempting to produce a 300-page book, since Petzold has never managed to keep one that short.&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp; &lt;dt&gt;2008-05-09: &lt;a href="http://www.charlespetzold.com/blog/2008/05/Letting-Go-of-the-Book.html"&gt;Letting Go of the Book&lt;/a&gt;  &lt;dd&gt;This is a touching essay on &lt;em&gt;The Annotated Turing&lt;/em&gt; now being on its way to print, with no more opportunities for changes or misgivings.&amp;nbsp; We are reminded that Petzold had been working on the book since 1999.&lt;br&gt;&amp;nbsp;&amp;nbsp; &lt;dt&gt;2008-03-27: &lt;a href="http://www.charlespetzold.com/blog/2008/03/270714.html"&gt;"The Annotated Turing" Typographical Triumph&lt;/a&gt;  &lt;dd&gt;Petzold provides an account of what he went through to reset the Turing paper so that he could match Turing's symbols and typeface when elements of the Turing paper are discussed in the "annotations."&amp;nbsp; This is something that Donald Knuth will love, since the desired result was obtained (as the editor confides in a comment) by using LaTeX.&amp;nbsp; It is delightful how the reset Turing paper was proofed against the original printing.&lt;br&gt;&amp;nbsp;&amp;nbsp; &lt;dt&gt;2008-03-01: &lt;a href="http://www.charlespetzold.com/blog/2008/02/Mr-Turings-Computing-Machine.html"&gt;Of a Book Entitled "Mr. Turing's Computing Machine"&lt;/a&gt;  &lt;dd&gt;Petzold provide an account of his 1999 inspiration to produce The Annotated Turing, and the project's early life.&lt;/dd&gt;&lt;/dl&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7173751-1125503987918990599?l=miser-theory.info%2Fastraendo%2Fpn%2Fdefault.asp' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/7173751/1125503987918990599/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=7173751&amp;postID=1125503987918990599' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7173751/posts/default/1125503987918990599'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7173751/posts/default/1125503987918990599'/><link rel='alternate' type='text/html' href='http://miser-theory.info/astraendo/pn/2008/05/catching-up-with-turing.asp' title='Catching Up with Turing'/><author><name>orcmid</name><uri>http://www.blogger.com/profile/15720194709820430236</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='17038397636421592587'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7173751.post-1952329498677864173</id><published>2008-05-06T19:58:00.001-07:00</published><updated>2008-05-07T10:36:22.448-07:00</updated><title type='text'>Miser: The Logic of Ot</title><content type='html'>&lt;p&gt;&lt;/p&gt; &lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:94644b1e-917e-42e3-9279-687653d46328" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/orcmid" rel="tag"&gt;orcmid&lt;/a&gt;, &lt;a href="http://technorati.com/tags/Miser" rel="tag"&gt;Miser&lt;/a&gt;, &lt;a href="http://technorati.com/tags/computation%20models" rel="tag"&gt;computation models&lt;/a&gt;, &lt;a href="http://technorati.com/tags/theoretical%20structures" rel="tag"&gt;theoretical structures&lt;/a&gt;, &lt;a href="http://technorati.com/tags/FOL=" rel="tag"&gt;FOL=&lt;/a&gt;, &lt;a href="http://technorati.com/tags/first-order%20logic" rel="tag"&gt;first-order logic&lt;/a&gt;, &lt;a href="http://technorati.com/tags/equational%20identities" rel="tag"&gt;equational identities&lt;/a&gt;, &lt;a href="http://technorati.com/tags/first-order%20theory" rel="tag"&gt;first-order theory&lt;/a&gt;&lt;/div&gt; &lt;p&gt;&lt;/p&gt; &lt;p align="right"&gt;In the narrow sense, logic is the theory of valid arguments&lt;br&gt;or the theory of deductive inference.&lt;br&gt;&amp;nbsp; A slightly broader sense includes the theory of definition. ...&lt;br&gt;-- Patrick Suppes, preface to &lt;em&gt;Introduction to Logic&lt;/em&gt; [&lt;a href="#i5"&gt;5&lt;/a&gt;:p.xiv]&lt;/p&gt; &lt;p align="left"&gt;Miser demonstrates a model of computation.&amp;nbsp; The specification of Miser establishes the functional requirements for a computing machine (the mechanism).&amp;nbsp; The machines are typically implemented by software programs operated on conventional digital computers.&amp;nbsp;&amp;nbsp; That this can be done at all is a demonstration of how well digital computers are useful for manifestation of abstractions.&lt;/p&gt; &lt;p&gt;While it is appropriate to think of a Miser as a machine with a variety of physical realizations, there is a mathematical theory that dictates the essential characteristics that each realization is expected to manifest.&amp;nbsp; This is by design.&amp;nbsp; We want Miser to be amenable to mathematical reasoning and analysis. The mathematical theory determines the correct behavior of Miser implementations.&amp;nbsp; Even so, no result in the mathematical theory can ever be a proof about a Miser implementation.&amp;nbsp;&amp;nbsp; We want to develop an appreciation for how this is so and how there remains an useful connection between theories and concrete realizations even though the connection is a bridge that the theory can never cross.&lt;/p&gt; &lt;p&gt;The mathematical theory is essentially pure logic applied to a simple subject matter: the Miser Obs and functions over them.&amp;nbsp; It is also the case that Miser procedures perform in logic-resembling ways and can achieve what is known as a computational logic.&amp;nbsp; Both of these conditions require that we be careful about our demands on logic and how they will be expressed.&amp;nbsp; We need to look at how the theory for Miser is expressed as a logical theory as well as how logic is expressed in Miser procedures (that is, by computational means).&lt;/p&gt; &lt;p&gt;This reliance on a logical theory will assist our differentiation among computation, logic, and mathematics.&amp;nbsp; This will, in turn, help us clarify the relationship between procedures and functions and algorithms for functions as we look more closely at the Miser computational model.&lt;/p&gt; &lt;p&gt;The logical theory for oMiser, the foundation system, is symbolized &lt;strong&gt;Ot&lt;/strong&gt;, short for &lt;em&gt;Ob theory&lt;/em&gt;.&amp;nbsp; It is an application of First-Order Logic.&lt;/p&gt; &lt;h3&gt;1. First-Order Logic&lt;/h3&gt; &lt;p&gt;The logical theory for Miser is mostly expressed in an informal style.&amp;nbsp;&amp;nbsp; Most of the assertions under the theory are in the form of equations or identities: equalities and inequalities.&amp;nbsp; &lt;/p&gt; &lt;p&gt;Although there is not much need for a full-up expression in a formal logic, there is always an equivalent formal expression using First-Order Logic with equality (FOL=).&amp;nbsp; The FOL= logical symbolism employs the following forms:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;em&gt;x &lt;/em&gt;= &lt;em&gt;y&lt;/em&gt; equality: read as "&lt;em&gt;x&lt;/em&gt; equals &lt;em&gt;y&lt;/em&gt;"&lt;/p&gt; &lt;p&gt;&lt;em&gt;x &lt;/em&gt;≠ &lt;em&gt;y&lt;/em&gt; inequality: read as "&lt;em&gt;x&lt;/em&gt; not-equal-to &lt;em&gt;y&lt;/em&gt;"&lt;/p&gt;&lt;/blockquote&gt; &lt;blockquote&gt; &lt;p&gt;∀&lt;em&gt;u&lt;/em&gt;(&lt;em&gt;p&lt;/em&gt;) universal quantification, read as "for all &lt;em&gt;u&lt;/em&gt;, &lt;em&gt;p&lt;/em&gt;"&lt;/p&gt; &lt;p&gt;∃&lt;em&gt;u&lt;/em&gt;(&lt;em&gt;p&lt;/em&gt;) existential quantification, read as "there exists u such that p"&lt;/p&gt; &lt;p&gt;¬&lt;em&gt;p&lt;/em&gt; negation: read as "not &lt;em&gt;p&lt;/em&gt;", also seen as "~&lt;em&gt;p&lt;/em&gt;" and "-&lt;em&gt;p&lt;/em&gt;"&lt;/p&gt; &lt;p&gt;&lt;em&gt;p &lt;/em&gt;∧ &lt;em&gt;q&lt;/em&gt; conjunction: read as "&lt;em&gt;p&lt;/em&gt; and &lt;em&gt;q&lt;/em&gt;", also seen as "&lt;em&gt;p&lt;/em&gt;&amp;amp;&lt;em&gt;q&lt;/em&gt;"&lt;/p&gt; &lt;p&gt;&lt;em&gt;p &lt;/em&gt;∨&lt;em&gt;q &lt;/em&gt;disjunction: read as "&lt;em&gt;p&lt;/em&gt; or &lt;em&gt;q&lt;/em&gt;"&lt;/p&gt; &lt;p&gt;&lt;em&gt;p &lt;/em&gt;→ &lt;em&gt;q&lt;/em&gt; conditional: read as "if &lt;em&gt;p&lt;/em&gt; then &lt;em&gt;q&lt;/em&gt;" or "&lt;em&gt;p&lt;/em&gt; implies &lt;em&gt;q&lt;/em&gt;", also seen as "&lt;em&gt;p&lt;/em&gt;⇒&lt;em&gt;q&lt;/em&gt;" or "&lt;em&gt;p&lt;/em&gt;⊃&lt;em&gt;q&lt;/em&gt;"&lt;/p&gt; &lt;p&gt;&lt;em&gt;p &lt;/em&gt;↔ &lt;em&gt;q&lt;/em&gt; biconditional: read as "&lt;em&gt;p&lt;/em&gt; if and only if q" or "&lt;em&gt;p&lt;/em&gt; equivalent &lt;em&gt;q&lt;/em&gt;", also seen as "&lt;em&gt;x&lt;/em&gt;⇔&lt;em&gt;y&lt;/em&gt;" or "&lt;em&gt;x&lt;/em&gt;≡&lt;em&gt;y&lt;/em&gt;"&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;A common order of precedence of the operations is indicated in the progression.&amp;nbsp; The components of the equality and inequalities can be constants, variables, and expressions involving functions of operands that are the same kind of components.&amp;nbsp; These are not applicative expressions and should not be read as &lt;a href="http://miser-theory.info/astraendo/pn/2008/02/miser-frugalese-for-applicative.asp"&gt;Frugalese applicative operations&lt;/a&gt; (just yet, if ever).&lt;/p&gt; &lt;p&gt;A basic introduction to FOL notation is available on-line in the MIT Open Courseware [&lt;a href="#i2"&gt;2&lt;/a&gt;].&amp;nbsp;&amp;nbsp;&amp;nbsp; There are other on-line descriptions [&lt;a href="#i4"&gt;4&lt;/a&gt;, &lt;a href="#i6"&gt;6&lt;/a&gt;].&amp;nbsp; These should provide enough background to be able to read the formalisms of &lt;strong&gt;Ot&lt;/strong&gt;.&lt;/p&gt; &lt;p&gt;The specific form used here is that described in the &lt;em&gt;Handbook of Mathematical Logic&lt;/em&gt; [&lt;a href="#i1"&gt;1&lt;/a&gt;].&amp;nbsp; Leisurely expositions with many examples and exercises are available in the books by Lemmon [&lt;a href="#i3"&gt;3&lt;/a&gt;] and Suppes [&lt;a href="#i5"&gt;5&lt;/a&gt;].&lt;/p&gt; &lt;h3&gt;2. Informal Expression&lt;/h3&gt; &lt;p&gt;The informal expression allows us to avoid heavy use of special symbols.&amp;nbsp; For example, an axiom of equality,&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;∀&lt;em&gt;x&lt;/em&gt;∀&lt;em&gt;y&lt;/em&gt;∀&lt;em&gt;z&lt;/em&gt; (&lt;em&gt;x&lt;/em&gt; = &lt;em&gt;y&lt;/em&gt; ∧ &lt;em&gt;y&lt;/em&gt; = &lt;em&gt;z&lt;/em&gt; → &lt;em&gt;x&lt;/em&gt; = &lt;em&gt;z&lt;/em&gt;)&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;could be expressed informally for &lt;strong&gt;Ot&lt;/strong&gt; as&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;"For Obs &lt;em&gt;x&lt;/em&gt;, &lt;em&gt;y&lt;/em&gt;, &lt;em&gt;z&lt;/em&gt;, if &lt;em&gt;x&lt;/em&gt; = &lt;em&gt;y&lt;/em&gt; and &lt;em&gt;y&lt;/em&gt; = &lt;em&gt;z&lt;/em&gt;, then &lt;em&gt;x&lt;/em&gt; = &lt;em&gt;z&lt;/em&gt;."&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;There are further examples to be found among the posts on &lt;em&gt;Numbering Peano&lt;/em&gt; and in other Miser Project materials.&lt;/p&gt; &lt;h3&gt;3. Ot as a Logical Theory&lt;/h3&gt; &lt;p&gt;For &lt;strong&gt;Ot&lt;/strong&gt;, there are additional constants to be introduced (e.g., &lt;font face="sans-serif"&gt;&lt;strong&gt;ob_A&lt;/strong&gt;&lt;/font&gt;, &lt;strong&gt;&lt;font face="sans-serif"&gt;ob_B&lt;/font&gt;&lt;/strong&gt;).&amp;nbsp; We also presume a variety of functions (e.g., &lt;strong&gt;ob.a&lt;/strong&gt;, &lt;strong&gt;ob.b&lt;/strong&gt;, &lt;strong&gt;ob.ap&lt;/strong&gt;).&amp;nbsp; These and other additions to FOL=&amp;nbsp; constitute &lt;strong&gt;Ot&lt;/strong&gt;.&amp;nbsp; &lt;/p&gt; &lt;p&gt;In particular, we assume that the variables of quantifiers (&lt;em&gt;x&lt;/em&gt; and &lt;em&gt;y&lt;/em&gt; in ∀&lt;em&gt;x&lt;/em&gt;, ∃&lt;em&gt;y&lt;/em&gt;) refer to Obs.&lt;/p&gt; &lt;p&gt;Because the domain of discourse, as it is known, is the Obs and only the Obs, how functions are represented in &lt;strong&gt;Ot&lt;/strong&gt; becomes an interesting topic.&amp;nbsp; The same is true for additional predicates (i.e., beyond the predicate implicitly associated with "=").&amp;nbsp; We will explore these matters in further posts and articles of the Miser Project.&amp;nbsp; &lt;/p&gt; &lt;p&gt;For now it is useful to point out that there is no direct way to express something about all/any functions or all/any predicates using FOL= (a consequence of being first-order).&amp;nbsp; When we speak in such a way, it will have to be informally and outside of &lt;strong&gt;Ot&lt;/strong&gt;.&amp;nbsp; That situation is also to be explored further.&lt;/p&gt; &lt;hr&gt; &lt;small&gt; &lt;dl&gt; &lt;dt&gt;[&lt;strong&gt;update 2008-05-07T17:29Z:&lt;/strong&gt; I couldn't resist changing the title from "The Logic of It" to "The Logic of Ot," a bad-pun opportunity which I hadn't noticed until making a diary entry about having completed the post.&amp;nbsp; It is an apt phrasing, besides.&amp;nbsp; As long as I am here, I also append a little more content to section 3.] &lt;dt&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;dt&gt;[&lt;a href="#i1" name="i1"&gt;1&lt;/a&gt;] Jon Barwise: An Introduction to First-Order Logic.&amp;nbsp; Chapter A.1 (pp. 5-46) in &lt;em&gt;&lt;a href="http://orcmid.com/readings/logic.htm#Barwise1977"&gt;Handbook of Mathematical Logic&lt;/a&gt;&lt;/em&gt;, Jon Barwise (ed). Studies in Logic and the Foundations of Mathematics, volume 90, Elsevier (Amsterdam: 1977).&amp;nbsp; ISBN 0-444-86388-5 pbk.  &lt;dd&gt;The concerns I have expressed over &lt;em&gt;Handbook&lt;/em&gt; do not apply to this chapter (although I just found a typo in the first example in section 3), which is tidy and makes useful connection to model-theoretic considerations.&amp;nbsp; Our notational symbols are those used here.&lt;br&gt;&amp;nbsp;&amp;nbsp; &lt;dt&gt;[&lt;a href="#i2" name="i2"&gt;2&lt;/a&gt;] Leslie Kaelbling: First-Order Logic (lecture notes), Lecture 5,&amp;nbsp; MIT Course &lt;a href="http://ocw.mit.edu/OcwWeb/Electrical-Engineering-and-Computer-Science/6-825Techniques-in-Artificial-IntelligenceFall2002/CourseHome/index.htm"&gt;6.825 Techniques in Artificial Intelligence&lt;/a&gt;, Fall 2002.&amp;nbsp; Open Courseware &lt;a href="http://ocw.mit.edu/NR/rdonlyres/Electrical-Engineering-and-Computer-Science/6-825Techniques-in-Artificial-IntelligenceFall2002/16189334-0143-4820-9EEF-5AC63CBA4B4E/0/Lecture5FinalPart1Save.pdf"&gt;PDF file&lt;/a&gt;.&amp;nbsp; accessed 2008-04-17.  &lt;dd&gt;These notes provide a leisurely and elementary introduction to FOL= notation with understandable applications to every-day logical situations.&lt;br&gt;&amp;nbsp;&amp;nbsp; &lt;dt&gt;[&lt;a href="#i3" name="i3"&gt;3&lt;/a&gt;] E. J. Lemmon: &lt;em&gt;Beginning Logic&lt;/em&gt;.&amp;nbsp; Van Nostrand Reinhold (Great Britain: 1965), modest revision edited by George W. D. Berry, Hackett Publishing (Indianapolis: 1978).&amp;nbsp; ISBN 0-915144-50-6 pbk.  &lt;dd&gt;One advantage of this text, considered by its author to be more elementary than Suppes[&lt;a href="#i5"&gt;5&lt;/a&gt;], with which it matches its notation, is that it is still used as a textbook and the author's insider remarks are entertaining.&amp;nbsp; The Bibliography notes are recommended.&lt;br&gt;&amp;nbsp;&amp;nbsp; &lt;dt&gt;[&lt;a href="#i4" name="i4"&gt;4&lt;/a&gt;] PlanetMath: &lt;a href="http://planetmath.org/encyclopedia/FirstOrderLogic.html"&gt;First-order logic&lt;/a&gt;.&amp;nbsp; (article) accessed 2008-04-17.  &lt;dd&gt;This is a good place to find a summary of the notation without all of the subtleties and accompanying discourse.&amp;nbsp; For a deeper look into how formal logic and logical theories work, Lemmon and Suppes will be rewarding [&lt;a href="#i3"&gt;3&lt;/a&gt;, &lt;a href="#i5"&gt;5&lt;/a&gt;].&lt;br&gt;&amp;nbsp;&amp;nbsp; &lt;dt&gt;[&lt;a href="#i5" name="i5"&gt;5&lt;/a&gt;] Patrick Suppes: &lt;em&gt;Introduction to Logic&lt;/em&gt;.&amp;nbsp; Van Nostrand Reinhold (New York: 1957), Dover unabridged republication (New York: 1999).&amp;nbsp; ISBN 0-486-40687-3 pbk.  &lt;dd&gt;Recommended for its gradual progression and build-up of first-order logic with useful examples and exercises.&amp;nbsp; Chapter 11, on Functions, is a valuable bonus (as well as slightly contrary to what we have to say about functions in the context of the Miser Project).&lt;br&gt;&amp;nbsp;&amp;nbsp; &lt;dt&gt;[&lt;a href="#i6" name="i6"&gt;6&lt;/a&gt;] Wikipedia: &lt;a href="http://en.wikipedia.org/wiki/First_order_logic"&gt;First-order logic&lt;/a&gt;.&amp;nbsp; (article)&amp;nbsp; &lt;a href="http://en.wikipedia.org/w/index.php?title=First-order_logic&amp;amp;oldid=201715084"&gt;accessed&lt;/a&gt; 2008-04-17.  &lt;dd&gt;This article appears designed to frighten the uninitiated.&amp;nbsp; It can be useful for its sources.&lt;/small&gt; &lt;/dd&gt;&lt;/dl&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7173751-1952329498677864173?l=miser-theory.info%2Fastraendo%2Fpn%2Fdefault.asp' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/7173751/1952329498677864173/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=7173751&amp;postID=1952329498677864173' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7173751/posts/default/1952329498677864173'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7173751/posts/default/1952329498677864173'/><link rel='alternate' type='text/html' href='http://miser-theory.info/astraendo/pn/2008/05/miser-logic-of-it.asp' title='Miser: The Logic of Ot'/><author><name>orcmid</name><uri>http://www.blogger.com/profile/15720194709820430236</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='17038397636421592587'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7173751.post-679770270442271121</id><published>2008-02-29T19:44:00.001-08:00</published><updated>2008-05-06T18:33:53.837-07:00</updated><title type='text'>Miser: Frugalese for Applicative Operations</title><content type='html'>&lt;p&gt;&lt;/p&gt; &lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:2c333d55-95ae-4b33-a571-17561dd420ea" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/models%20of%20computation" rel="tag"&gt;models of computation&lt;/a&gt;, &lt;a href="http://technorati.com/tags/Miser" rel="tag"&gt;Miser&lt;/a&gt;, &lt;a href="http://technorati.com/tags/Frugal" rel="tag"&gt;Frugal&lt;/a&gt;, &lt;a href="http://technorati.com/tags/Frugalese" rel="tag"&gt;Frugalese&lt;/a&gt;, &lt;a href="http://technorati.com/tags/applicative%20notation" rel="tag"&gt;applicative notation&lt;/a&gt;, &lt;a href="http://technorati.com/tags/functional%20programming" rel="tag"&gt;functional programming&lt;/a&gt;&lt;/div&gt; &lt;p&gt;&lt;/p&gt;&lt;small&gt; &lt;p&gt;[&lt;strong&gt;update 2008-05-06T01:23Z:&lt;/strong&gt; I corrected a small typo before linking to this post from another one in this series on Miser notions.&amp;nbsp; I also included a reference to the work of Church where he introduces f(x, y) as equivalent to (f x) y.]&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;strong&gt;update 2008-04-12T17:49Z:&lt;/strong&gt; I am still niggling with this post.&amp;nbsp; There will be a separate post on some of these ideas, but I wanted to add something about being committed to treating functions as definite mathematical objects and viewing procedures as algorithms for (some of) them, even though we don't have a way to uniquely identify and distinguish functions (or procedures, for that matter).&amp;nbsp; I think I'm content with this for now.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;strong&gt;update 2008-04-12T02:45Z:&lt;/strong&gt; After completing this post, I realized that all expressions that stand for functions are ones that characterize functions, but none of them "are" the function.&amp;nbsp; I have revamped the post, today, to emphasize the introduction of functions by characterizing them.&amp;nbsp; This makes some of the prose very awkward, especially if you just wanted to learn Frugal and use a Miser engine to produce something useful.&amp;nbsp; It seems like a necessary foundational exercise for me, to ensure that I have successfully wrestled the relevant concepts to the ground.&amp;nbsp; I took this occasion to do some tweaking to make some other points more clear, although adding the fuss about functions only being known by their characterization is probably a net loss. -- dh.]&lt;/p&gt;&lt;/small&gt; &lt;p&gt;On occasion, I mention that Miser is an applicative-programming system.&amp;nbsp; There is a connection with the notion of functional programming.&amp;nbsp; I want to clarify that terminology and, especially, illustrate the impact it has on notations for programming in applicative style.&lt;/p&gt; &lt;ol&gt; &lt;ol&gt; &lt;ol&gt; &lt;li&gt;&lt;a href="#1.0c"&gt;The Basic Idea: Application as Fundamental&lt;/a&gt;&lt;br&gt;1.1 &lt;a href="#1.1c"&gt;The logico-mathematical view of functions&lt;/a&gt;&lt;br&gt;1.2 &lt;a href="#1.2c"&gt;The λ-calculus view of applicative functions&lt;/a&gt;  &lt;li&gt;&lt;a href="#2.0c"&gt;Be Ye Operand or Operator?&lt;/a&gt;  &lt;li&gt;&lt;a href="#3.0c"&gt;And in Frugalese?&lt;/a&gt;  &lt;li&gt;&lt;a href="#4.0c"&gt;Streamlining Applicative Notation&lt;/a&gt;  &lt;li&gt;&lt;a href="#5.0c"&gt;What About Multiple Parameters?&lt;/a&gt;  &lt;li&gt;&lt;a href="#6.0c"&gt;Left-Right, Left-Right, (Cha-cha-cha) Right-Left&lt;/a&gt;  &lt;li&gt;&lt;a href="#7.0c"&gt;Ah, Sugar, Sugar&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/ol&gt;&lt;/ol&gt; &lt;h3&gt;&lt;a href="#1.0c" target="_top" name="1.0c"&gt;1&lt;/a&gt;. The Basic Idea: Application as Fundamental&lt;/h3&gt; &lt;p&gt;The key idea of applicative systems is that the fundamental operation is one of application of functions and their arguments or operands.&amp;nbsp; &lt;u&gt;This also involves the notion that functions are definite (mathematical) objects&lt;/u&gt;.&lt;/p&gt; &lt;p&gt;Consider, for example, the familiar notation &lt;em&gt;f&lt;/em&gt;(&lt;em&gt;x&lt;/em&gt;) from mathematics.&amp;nbsp; In mathematics, this notation tends to be used&lt;/p&gt; &lt;ol&gt; &lt;li&gt;when the function is &lt;em&gt;being used&lt;/em&gt; &lt;u&gt;(that is, mentioned)&lt;/u&gt; in some larger expression and &lt;br&gt;&amp;nbsp;&amp;nbsp; &lt;li&gt;when it is &lt;em&gt;being described&lt;/em&gt; &lt;u&gt;or &lt;strong&gt;&lt;em&gt;characterized&lt;/em&gt;&lt;/strong&gt;&lt;/u&gt; in terms of some essential relationships:&lt;/li&gt;&lt;/ol&gt; &lt;blockquote&gt; &lt;p&gt;(1)&amp;nbsp;&amp;nbsp;&amp;nbsp; ( &lt;em&gt;f&lt;/em&gt;(&lt;em&gt;x&lt;/em&gt;&lt;sub&gt;2&lt;/sub&gt;) - &lt;em&gt;f&lt;/em&gt;(&lt;em&gt;x&lt;/em&gt;&lt;sub&gt;1&lt;/sub&gt;) ) / (&lt;em&gt;x&lt;/em&gt;&lt;sub&gt;2&lt;/sub&gt; - &lt;em&gt;x&lt;/em&gt;&lt;sub&gt;1&lt;/sub&gt;)&lt;/p&gt; &lt;p&gt;(2)&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;em&gt;f&lt;/em&gt;(&lt;em&gt;i&lt;/em&gt;) = &lt;em&gt;f&lt;/em&gt;(&lt;em&gt;i&lt;/em&gt;-1) + &lt;em&gt;f&lt;/em&gt;(&lt;em&gt;i&lt;/em&gt;-2); &lt;em&gt;i&lt;/em&gt; &amp;gt; 1&lt;/p&gt; &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;em&gt;f&lt;/em&gt;(1) = 1; &lt;em&gt;f&lt;/em&gt;(0) = 0&amp;nbsp;&amp;nbsp; &lt;/p&gt; &lt;p&gt;&lt;u&gt;illustrating the respective cases&lt;/u&gt;.&amp;nbsp; &lt;u&gt;In (2), f(n) is known as the n-th Fibonacci Number; we will allow ourselves to say that function f determines the &lt;a href="http://en.wikipedia.org/wiki/Fibonacci_number"&gt;Fibonacci Numbers&lt;/a&gt;.&lt;/u&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;h4&gt;&lt;a href="#1.1c" target="_top" name="1.1c"&gt;1.1&lt;/a&gt; The Logico-Mathematical View of Functions&lt;/h4&gt; &lt;p&gt;In logic and mathematics, the mixture of usages to &lt;u&gt;define/represent/characterize&lt;/u&gt; a function and to appeal to a function is commonplace.&amp;nbsp; It is generally rare to consider &lt;em&gt;f &lt;/em&gt;as identifying the function itself, as if functions have an independent existence, with &lt;em&gt;f&lt;/em&gt;(&lt;em&gt;x&lt;/em&gt;) as separately identifying an application of it.&amp;nbsp; &lt;/p&gt; &lt;p&gt;In modern mathematics (i.e., that of the last 100 years or so), it has become useful to consider functions more directly.&amp;nbsp; It happens&lt;/p&gt; &lt;ol&gt; &lt;li&gt;when defining the type of the function and &lt;br&gt;&amp;nbsp;&amp;nbsp; &lt;li&gt;when characterizing the function in the form of an independent entity:&lt;/li&gt;&lt;/ol&gt; &lt;blockquote&gt; &lt;p&gt;(&lt;a href="#1.1p1c" target="_top" name="1.1p1c"&gt;1&lt;/a&gt;) &lt;em&gt;f&lt;/em&gt;: &lt;em&gt;N&lt;/em&gt; → &lt;em&gt;N&lt;/em&gt;&lt;/p&gt; &lt;p&gt;(&lt;a href="#1.1p2c" target="_top" name="1.1p2c"&gt;2&lt;/a&gt;) &lt;em&gt;f&lt;/em&gt; = λ&lt;em&gt;i&lt;/em&gt;.(&lt;strong&gt;if&lt;/strong&gt; &lt;em&gt;i&lt;/em&gt; &amp;gt; 1 &lt;strong&gt;then&lt;/strong&gt; &lt;em&gt;f&lt;/em&gt;(&lt;em&gt;i&lt;/em&gt;-1) + &lt;em&gt;f&lt;/em&gt;(&lt;em&gt;i&lt;/em&gt;-2) &lt;strong&gt;else&lt;/strong&gt; 1)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;(&lt;a href="#1.1p3c" target="_top" name="1.1p3c"&gt;3&lt;/a&gt;) &lt;em&gt;g&lt;/em&gt; = &lt;strong&gt;Y &lt;/strong&gt;λ&lt;em&gt;f&lt;/em&gt;λ&lt;em&gt;i&lt;/em&gt;.(&lt;strong&gt;if&lt;/strong&gt; &lt;em&gt;i&lt;/em&gt; &amp;gt; 1 &lt;strong&gt;then&lt;/strong&gt; &lt;em&gt;f&lt;/em&gt;(&lt;em&gt;i&lt;/em&gt;-1) + &lt;em&gt;f&lt;/em&gt;(&lt;em&gt;i&lt;/em&gt;-2) &lt;strong&gt;else&lt;/strong&gt; 1)&lt;br&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;The form (1) asserts that the function &lt;em&gt;f&lt;/em&gt; has its domain of arguments in the natural numbers, &lt;em&gt;N &lt;/em&gt;(according to the usual convention),&amp;nbsp; and its range of results (→) is also in the natural numbers, &lt;em&gt;N&lt;/em&gt;. &lt;/p&gt; &lt;p&gt;It is very easy to think of functions as depicting operations that produce something, thanks to the prevalence of computation in modern life, in teaching, and in our learning arithmetic (computation) before algebra and higher mathematics.&amp;nbsp; &lt;u&gt;Programming languages use "function" in their codes and their descriptions in a way that adds to this collapsing-together of functions, algorithms, procedures, and program code.&lt;/u&gt;&lt;/p&gt; &lt;p&gt;A more abstract way to think of individual functions is as specific relationships or correspondences of each distinct member of the domain with at most one member of the range.&amp;nbsp; An element of the range may stand in the functional relationship to multiple members of the domain, but never &lt;em&gt;vice versa&lt;/em&gt;.&amp;nbsp; It is also possible that a function might not be defined at all, have no corresponding member of the range, for a given member of the domain.&lt;/p&gt; &lt;p&gt;Although this sense of functions as correspondences is &lt;u&gt;perhaps&lt;/u&gt; more contemporary, our ordinary way of speaking is in terms of actions that determine results from given arguments.&amp;nbsp; It is easy to &lt;strike&gt;add&lt;/strike&gt; &lt;u&gt;presume&lt;/u&gt; causality, speaking as if functions produce members of the range from members of the domain.&amp;nbsp;&amp;nbsp; The notations used in computer programming encourage this confusion of relationship and action or procedure.&amp;nbsp; I notice that I tend to speak of the member of the range being determined by the function together with the selection of a member of the domain.&amp;nbsp; &lt;/p&gt; &lt;p&gt;&lt;u&gt;Computer folk can also think of this correspondence/relation characterization of functions as being realized by a database table with unique keys, each row having a field for the range value that is determined for the domain value represented by each key.&amp;nbsp; This works in the case of finite domains and ranges, but we need something else when there is no such limitation (as is often the mathematical case).&lt;/u&gt;&lt;/p&gt; &lt;p&gt;&lt;u&gt;In all of the forms that we've shown, the function is not being exhibited, it is being characterized.&amp;nbsp; There are many characterizations of the same function and many different ways to characterize functions (as we are seeing here).&amp;nbsp; There is no way to see or get your hands on "the function" because the concept is, in effect, abstracted from the relationship that it embodies (abstractly speaking).&amp;nbsp; Nevertheless, we seem to be able to grasp what many functional relationships are from succinct characterizations of them.&lt;/u&gt;&amp;nbsp; We rely on functional relationships in day-to-day use of mathematical entities (such as numbers) without having to think about all of this very much.&lt;/p&gt; &lt;p&gt;&lt;u&gt;I'm bringing up this cloudy subject now because digging into the foundations of computing require that we have a sharper notion about functions and what it takes to trace the relationships from domain to range by computation.&lt;/u&gt;&lt;/p&gt; &lt;h4&gt;&lt;a href="#1.2c" target="_top" name="1.2c"&gt;1.2&lt;/a&gt; The λ-calculus View of Applicative Functions&lt;/h4&gt; &lt;p&gt;The form &lt;a href="#1.1p2c"&gt;1.1(2)&lt;/a&gt; involves a λ-expression (pronounced lambda-expression).&amp;nbsp;&amp;nbsp; This particular one, &lt;u&gt;interpreted as the characterization of a function,&lt;/u&gt;&amp;nbsp; happens to refer to the function that the expression is intended to characterize (singled out on the left) in the characterizing expression itself (on the right).&amp;nbsp; The given characterization of &lt;em&gt;f&lt;/em&gt; is recursive.&lt;/p&gt; &lt;p&gt;The form &lt;a href="#1.1p3c"&gt;1.1(3)&lt;/a&gt; specifies the same function in a way that has the characterization be completely accomplished in the right-hand side expression, with no appeal to the name of the function on the right-hand side of the equation.&amp;nbsp; The special &lt;strong&gt;Y&lt;/strong&gt;-operator is a function which transforms other functions into ones that operate recursively.&amp;nbsp; In this case, &lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;em&gt;g&lt;/em&gt;(&lt;em&gt;n&lt;/em&gt;) = (&lt;strong&gt;Y &lt;/strong&gt;λ&lt;em&gt;f&lt;/em&gt;λ&lt;em&gt;i&lt;/em&gt;.(&lt;strong&gt;if&lt;/strong&gt; &lt;em&gt;i&lt;/em&gt; &amp;gt; 1 &lt;strong&gt;then&lt;/strong&gt; &lt;em&gt;f&lt;/em&gt;(&lt;em&gt;i&lt;/em&gt;-1) + &lt;em&gt;f&lt;/em&gt;(&lt;em&gt;i&lt;/em&gt;-2) &lt;strong&gt;else&lt;/strong&gt; 1)) &lt;em&gt;n&lt;/em&gt;&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = &lt;strong&gt;if&lt;/strong&gt; &lt;em&gt;n&lt;/em&gt; &amp;gt; 1 &lt;strong&gt;then&lt;/strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (&lt;strong&gt;Y &lt;/strong&gt;λ&lt;em&gt;f&lt;/em&gt;λ&lt;em&gt;i&lt;/em&gt;.(&lt;strong&gt;if&lt;/strong&gt; &lt;em&gt;i&lt;/em&gt; &amp;gt; 1 &lt;strong&gt;then&lt;/strong&gt; &lt;em&gt;f&lt;/em&gt;(&lt;em&gt;i&lt;/em&gt;-1) + &lt;em&gt;f&lt;/em&gt;(&lt;em&gt;i&lt;/em&gt;-2) &lt;strong&gt;else&lt;/strong&gt; 1))(&lt;em&gt;n&lt;/em&gt;-1) &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; + (&lt;strong&gt;Y &lt;/strong&gt;λ&lt;em&gt;f&lt;/em&gt;λ&lt;em&gt;i&lt;/em&gt;.(&lt;strong&gt;if&lt;/strong&gt; &lt;em&gt;i&lt;/em&gt; &amp;gt; 1 &lt;strong&gt;then&lt;/strong&gt; &lt;em&gt;f&lt;/em&gt;(&lt;em&gt;i&lt;/em&gt;-1) + &lt;em&gt;f&lt;/em&gt;(&lt;em&gt;i&lt;/em&gt;-2) &lt;strong&gt;else&lt;/strong&gt; 1))(&lt;em&gt;n&lt;/em&gt;-2) &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;else&lt;/strong&gt; 1&lt;/p&gt;&lt;/blockquote&gt; &lt;h1&gt;&lt;/h1&gt; &lt;p&gt;illustrating that applications of functions having functions as operands can transform functions to other functions (as characterized).&lt;/p&gt; &lt;p&gt;The λ-calculus is important in Frugalese and for Miser.&amp;nbsp; It is used here to emphasize that there are ways to characterize functions via self-contained λ-expressions.&amp;nbsp; These λ-expressions can appear anywhere in the left or right of application operations, whether as functions, as in&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;(&lt;strong&gt;Y &lt;/strong&gt;λ&lt;em&gt;f&lt;/em&gt;λ&lt;em&gt;i&lt;/em&gt;.(&lt;strong&gt;if&lt;/strong&gt; &lt;em&gt;i&lt;/em&gt; &amp;gt; 1 &lt;strong&gt;then&lt;/strong&gt; &lt;em&gt;f&lt;/em&gt;(&lt;em&gt;i&lt;/em&gt;-1) + &lt;em&gt;f&lt;/em&gt;(&lt;em&gt;i&lt;/em&gt;-2) &lt;strong&gt;else&lt;/strong&gt; 1)) &lt;em&gt;n&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;or as operands, as &lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;λ&lt;em&gt;f&lt;/em&gt;λ&lt;em&gt;i&lt;/em&gt;.(&lt;strong&gt;if&lt;/strong&gt; &lt;em&gt;i&lt;/em&gt; &amp;gt; 1 &lt;strong&gt;then&lt;/strong&gt; &lt;em&gt;f&lt;/em&gt;(&lt;em&gt;i&lt;/em&gt;-1) + &lt;em&gt;f&lt;/em&gt;(&lt;em&gt;i&lt;/em&gt;-2) &lt;strong&gt;else&lt;/strong&gt; 1)&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;is in&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;strong&gt;Y &lt;/strong&gt;λ&lt;em&gt;f&lt;/em&gt;λ&lt;em&gt;i&lt;/em&gt;.(&lt;strong&gt;if&lt;/strong&gt; &lt;em&gt;i&lt;/em&gt; &amp;gt; 1 &lt;strong&gt;then&lt;/strong&gt; &lt;em&gt;f&lt;/em&gt;(&lt;em&gt;i&lt;/em&gt;-1) + &lt;em&gt;f&lt;/em&gt;(&lt;em&gt;i&lt;/em&gt;-2) &lt;strong&gt;else&lt;/strong&gt; 1).&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;&lt;u&gt;The use of "=" with regard to formulae that characterize functions is a bit different than the "=" where we tend to think that a unique determination is happening.&amp;nbsp; To remove any confusion between uniquelly-expressible mathematical entities (such as natural numbers) and the more-ellusive functions, we could have used "≡" or "∽" or some other indicator of equivalence. We won't be so fussy. So how do we determine that two characterizations that are not identical are still for the same function?&lt;/u&gt;&lt;/p&gt; &lt;p&gt;&lt;u&gt;The usual approach is some version of the following procedure.&lt;/u&gt;&lt;/p&gt; &lt;p&gt;&lt;u&gt;If it can be shown that &lt;em&gt;f&lt;/em&gt;(&lt;em&gt;x&lt;/em&gt;) = &lt;em&gt;g&lt;/em&gt;(&lt;em&gt;y&lt;/em&gt;) whenever &lt;em&gt;x&lt;/em&gt; = &lt;em&gt;y&lt;/em&gt;, then &lt;em&gt;f&lt;/em&gt; = &lt;em&gt;g&lt;/em&gt;, and &lt;em&gt;vice versa&lt;/em&gt;.&amp;nbsp; (We are begging some questions here, but that is the gist of it.)&lt;/u&gt;&lt;/p&gt; &lt;h3&gt;&lt;a href="#2.0c" target="_top" name="2.0c"&gt;2&lt;/a&gt;. Be Ye Operand or Operator?&lt;/h3&gt; &lt;p&gt;What you shouldn't miss in the above, is this: &lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;strong&gt;In applicative systems functions are treated as definite mathematical entities that are equally usable as operands (something a function can be applied to) and as functions (something that can be applied to an operand).&lt;/strong&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;That is,&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;λ&lt;em&gt;f&lt;/em&gt;λ&lt;em&gt;i&lt;/em&gt;.(&lt;strong&gt;if&lt;/strong&gt; &lt;em&gt;i&lt;/em&gt; &amp;gt; 1 &lt;strong&gt;then&lt;/strong&gt; &lt;em&gt;f&lt;/em&gt;(&lt;em&gt;i&lt;/em&gt;-1) + &lt;em&gt;f&lt;/em&gt;(&lt;em&gt;i&lt;/em&gt;-2) &lt;strong&gt;else&lt;/strong&gt; 1) &lt;em&gt;g&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;for some &lt;em&gt;g&lt;/em&gt;: &lt;em&gt;N&lt;/em&gt; → &lt;em&gt;N&lt;/em&gt;&lt;/p&gt; &lt;p&gt;characterizes the same function as whatever&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;λ&lt;em&gt;i&lt;/em&gt;.(&lt;strong&gt;if&lt;/strong&gt; &lt;em&gt;i&lt;/em&gt; &amp;gt; 1 &lt;strong&gt;then&lt;/strong&gt; &lt;em&gt;g&lt;/em&gt;(&lt;em&gt;i&lt;/em&gt;-1) + &lt;em&gt;g&lt;/em&gt;(&lt;em&gt;i&lt;/em&gt;-2) &lt;strong&gt;else&lt;/strong&gt; 1)&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;does.&amp;nbsp; And &lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;λ&lt;em&gt;g&lt;/em&gt;λ&lt;em&gt;j&lt;/em&gt;.( &lt;em&gt;g&lt;/em&gt;(&lt;em&gt;g&lt;/em&gt;(&lt;em&gt;j&lt;/em&gt;)) ) (&lt;strong&gt;Y &lt;/strong&gt;λ&lt;em&gt;f&lt;/em&gt;λ&lt;em&gt;i&lt;/em&gt;.(&lt;strong&gt;if&lt;/strong&gt; &lt;em&gt;i&lt;/em&gt; &amp;gt; 1 &lt;strong&gt;then&lt;/strong&gt; &lt;em&gt;f&lt;/em&gt;(&lt;em&gt;i&lt;/em&gt;-1) + &lt;em&gt;f&lt;/em&gt;(&lt;em&gt;i&lt;/em&gt;-2) &lt;strong&gt;else&lt;/strong&gt; 1))&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;characterizes a function that is very nasty to compute &lt;em&gt;(using the formula as a rule of computation)&lt;/em&gt; for increasing values of its natural-number operand.&lt;/p&gt; &lt;p&gt;By having functions be first-class candidates for use as operands and as functions, we have great freedom in characterizing functions, including in terms of&amp;nbsp; application of functions in the establishment of other functions.&lt;/p&gt; &lt;p&gt;Although this seems pretty esoteric, it is useful to keep in mind that programming languages and compilers are literally embodiments of functions that derive &lt;u&gt;(procedure codes for algorithms for)&lt;/u&gt; functions from their data (the source-program texts).&amp;nbsp; There is a deep connection with some of the fundamental power of digital computers, and Miser is one way to explore that.&lt;/p&gt; &lt;h3&gt;&lt;a href="#3.0c" target="_top" name="3.0c"&gt;3&lt;/a&gt;. And in Frugalese ... ?&lt;/h3&gt; &lt;p&gt;Frugalese is a language for expressing computations carried out by applicative systems such as Miser.&amp;nbsp; Miser is a computational system, not a mathematical one.&amp;nbsp; &lt;u&gt;There is a mathematical connection, and that motivates our giving so much attention to the business of characterizing functions and what that does and does not accomplish.&lt;/u&gt;&lt;/p&gt; &lt;p&gt;For Miser and Frugalese, the fundamental operation is called "apply."&amp;nbsp; Apply has two operands.&amp;nbsp; Both operands are Obs.&amp;nbsp; The first Ob is interpreted as a coding for the procedure to be followed.&amp;nbsp; The second Ob is the data that the procedure will manipulate in some way.&amp;nbsp; &lt;/p&gt; &lt;p&gt;&lt;u&gt;We need to be clear, here, about what we mean by computation of a function.&amp;nbsp; We mean that in the usual sense.&amp;nbsp; I have here an operand, the representation of of a (definite) member of the function's domain, and I want to know the (definite) member of the function's range that the function determines, what we commonly refer to as "the result" of the function.&amp;nbsp; An algorithm for a function, if we know one, is a (computational) procedure for arriving at the function-determined result given any valid operand.&amp;nbsp; A coding of the procedure is an expression as data in a form that a computer can follow.&lt;/u&gt;&lt;/p&gt; &lt;p&gt;&lt;u&gt;What puts the "functional programming" and "applicative-programming" into Miser and Frugalese is that one kind of computation of a function gives rise to the code for a procedure which can itself be used in the computation of another function, and so on.&amp;nbsp; This doesn't change the computational idea, it just includes some very powerful and important cases at the heart of the power of digital computers.&lt;/u&gt;&lt;/p&gt; &lt;p&gt;Because of the connection between functions and procedures for their calculation, we re-use the mathematical notions as computational ones:&lt;/p&gt; &lt;p&gt;The Frugalese notation &lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;em&gt;p&lt;/em&gt; &lt;em&gt;a&lt;/em&gt;&amp;nbsp; &lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;signifies an apply operation, where&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;em&gt;p&lt;/em&gt; determines the Ob used as the first operand (the procedure code) and&lt;/p&gt;&lt;/blockquote&gt; &lt;blockquote&gt; &lt;p&gt;&lt;em&gt;a&lt;/em&gt; determines the Ob taken as the apply's second operand (the data to the procedure).&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Apply operations are the Miser embodiment of the stored program principle:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Every Miser Ob can be used as either first or second operand of an apply.&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;li&gt;Programs can treat data as programs and programs as data.&lt;br&gt;&amp;nbsp;&amp;nbsp; &lt;li&gt;Programs can produce data results that works as programs.&amp;nbsp; &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;The sense in which an Ob is being used as program or data is entirely determined by context.&amp;nbsp; The same Ob may be used one way or the other at any instant.&lt;/p&gt; &lt;p&gt;Note that the apply operation is signified by simple juxtaposition of the term signifying the procedure and the term signifying the data.&lt;/p&gt; &lt;p&gt;&lt;u&gt;What justifies our appropriating the mathematical notion of functional application as a notation for computation?&lt;/u&gt;&lt;/p&gt; &lt;p&gt;&lt;u&gt;It is this connection.&lt;/u&gt;&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;u&gt;If we can show that (Frugalese)&amp;nbsp; (p a) = (q b) whenever a = b (a and b are the same Obs), then Obs p and q code (not necessarily the same) procedures for the same function: the same function is computed. &lt;/u&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;&lt;u&gt;We cannot go so far as to say that p = q, because the codes can be different.&amp;nbsp; Because we are here using "=" for identity of Obs, we would need a different symbol to signify that two obs taken as procedures are procedures for the same function.&amp;nbsp; There is no such symbol in Frugalese, however.&amp;nbsp; One motivation of the Miser Project is to sharpen our understanding of why there cannot be such a determination by computational means.&lt;/u&gt;&lt;/p&gt; &lt;p&gt;&lt;u&gt;The vice versa case always applies in Miser and Frugalese, of course.&amp;nbsp; If (as Obs), &lt;em&gt;p&lt;/em&gt; = &lt;em&gt;q&lt;/em&gt;, then (&lt;em&gt;p&lt;/em&gt; &lt;em&gt;a&lt;/em&gt;) = (&lt;em&gt;p&lt;/em&gt; &lt;em&gt;b&lt;/em&gt;) whenever (as Obs) &lt;em&gt;a&lt;/em&gt; = &lt;em&gt;b&lt;/em&gt; (and a result is determined by whatever &lt;em&gt;p&lt;/em&gt; is, taken as code of a Miser procedure).&lt;/u&gt;&lt;/p&gt; &lt;p&gt;The Miser apply operation is also called &lt;strong&gt;ob.ap. &lt;/strong&gt;It has been &lt;a href="http://miser-theory.info/astraendo/pn/2008/01/cybersmith-how-many-functions-am-i.asp"&gt;sketched&lt;/a&gt; a little in &lt;a href="http://miser-theory.info/astraendo/pn/2007/11/hark-is-that-idiom-that-i-see-before-me.asp"&gt;earlier posts&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;From now on, we are illustrating Frugalese, not mathematical notation.&lt;/p&gt; &lt;h3&gt;&lt;a href="#4.0c" target="_top" name="4.0c"&gt;4&lt;/a&gt;. Streamlining Applicative Notation&lt;/h3&gt; &lt;p&gt;Parentheses are used when it is necessary to control grouping into the operands for an apply operation:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;em&gt;p&lt;/em&gt; &lt;em&gt;a&lt;/em&gt;&amp;nbsp; &lt;/p&gt;&lt;/blockquote&gt; &lt;blockquote&gt; &lt;p&gt;&lt;em&gt;p&lt;/em&gt;(&lt;em&gt;a&lt;/em&gt;)&lt;/p&gt; &lt;p&gt;(&lt;em&gt;p&lt;/em&gt;) &lt;em&gt;a&lt;/em&gt;&lt;/p&gt; &lt;p&gt;(&lt;em&gt;p&lt;/em&gt;)(&lt;em&gt;a&lt;/em&gt;)&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;all work.&lt;/p&gt; &lt;p&gt;In general,&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;em&gt;p&lt;/em&gt; &lt;em&gt;q&lt;/em&gt; &lt;em&gt;r&lt;/em&gt; &lt;em&gt;a&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;and&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;em&gt;p&lt;/em&gt;( &lt;em&gt;q&lt;/em&gt;( &lt;em&gt;r&lt;/em&gt;(&lt;em&gt;a&lt;/em&gt;) ) )&lt;/p&gt; &lt;p&gt;express the same applicative operations.&amp;nbsp; We will often use variations of the streamlined form, &lt;em&gt;p&lt;/em&gt; &lt;em&gt;q&lt;/em&gt; &lt;em&gt;r&lt;/em&gt; &lt;em&gt;a&lt;/em&gt;.&lt;/p&gt; &lt;p&gt;These are &lt;em&gt;not&lt;/em&gt; equivalent to &lt;em&gt;p&lt;/em&gt; &lt;em&gt;q&lt;/em&gt; &lt;em&gt;r&lt;/em&gt; &lt;em&gt;a&lt;/em&gt;:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;(&lt;em&gt;p&lt;/em&gt; &lt;em&gt;q&lt;/em&gt; &lt;em&gt;r&lt;/em&gt;) &lt;em&gt;a&lt;/em&gt;&lt;/p&gt; &lt;p&gt;(&lt;em&gt;p&lt;/em&gt; &lt;em&gt;q&lt;/em&gt;)(&lt;em&gt;r&lt;/em&gt; &lt;em&gt;a&lt;/em&gt;)&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;[&lt;strong&gt;Historical Note:&lt;/strong&gt; Some applicative systems have &lt;em&gt;p&lt;/em&gt; &lt;em&gt;q&lt;/em&gt; &lt;em&gt;r&lt;/em&gt; &lt;em&gt;a&lt;/em&gt; be equivalent to ((&lt;em&gt;p&lt;/em&gt; &lt;em&gt;q&lt;/em&gt;) &lt;em&gt;r&lt;/em&gt;) &lt;em&gt;a&lt;/em&gt;.&amp;nbsp; That is not the case for Frugalese.&amp;nbsp; If you want that form, you will have to write it that way (or use the alternative form introduced below).&amp;nbsp; If you run into one of these systems, you will have to be careful when transliterating between that notation, Frugalese, and &lt;em&gt;vice versa&lt;/em&gt;.]&lt;/p&gt; &lt;h3&gt;&lt;a href="5.0c" target="_top" name="5.0c"&gt;5&lt;/a&gt;. What About Multiple Parameters? &lt;/h3&gt; &lt;p&gt;In Frugalese there are no additional operands in a single apply operation.&amp;nbsp; In Miser terms, there's one Ob for the procedure and one Ob for the data.&amp;nbsp; That's it.&amp;nbsp; One way to introduce multiple-operands of functions is by multiple apply operations:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;em&gt;p&lt;/em&gt;(&lt;em&gt;q&lt;/em&gt;, &lt;em&gt;r&lt;/em&gt;, &lt;em&gt;a&lt;/em&gt;) is equivalent to ((&lt;em&gt;p&lt;/em&gt; &lt;em&gt;q&lt;/em&gt;) &lt;em&gt;r&lt;/em&gt;) &lt;em&gt;a&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;&lt;u&gt;keeping in mind that however p is constructed, it has to be such that we end up with what we have in mind for &lt;em&gt;p&lt;/em&gt;(&lt;em&gt;q&lt;/em&gt;, &lt;em&gt;r&lt;/em&gt;, &lt;em&gt;a&lt;/em&gt;).&lt;/u&gt;&lt;/p&gt; &lt;p&gt;In general,&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;em&gt;f&lt;/em&gt;(&lt;em&gt;x&lt;/em&gt;&lt;sub&gt;1&lt;/sub&gt;, &lt;em&gt;x&lt;/em&gt;&lt;sub&gt;2&lt;/sub&gt;, ..., &lt;em&gt;x&lt;/em&gt;&lt;sub&gt;&lt;em&gt;n&lt;/em&gt;&lt;/sub&gt;) &lt;/p&gt;&lt;/blockquote&gt; &lt;blockquote&gt; &lt;p&gt;= &lt;em&gt;f&lt;/em&gt;(&lt;em&gt;x&lt;/em&gt;&lt;sub&gt;1&lt;/sub&gt;) (&lt;em&gt;x&lt;/em&gt;&lt;sub&gt;2&lt;/sub&gt;, ..., &lt;em&gt;x&lt;/em&gt;&lt;sub&gt;&lt;em&gt;n&lt;/em&gt;&lt;/sub&gt;)&lt;/p&gt; &lt;p&gt;= &lt;em&gt;f&lt;/em&gt;(&lt;em&gt;x&lt;/em&gt;&lt;sub&gt;1&lt;/sub&gt;, &lt;em&gt;x&lt;/em&gt;&lt;sub&gt;2&lt;/sub&gt;) (..., &lt;em&gt;x&lt;/em&gt;&lt;sub&gt;&lt;em&gt;n&lt;/em&gt;&lt;/sub&gt;)&lt;/p&gt; &lt;p&gt;= &lt;em&gt;f&lt;/em&gt;(&lt;em&gt;x&lt;/em&gt;&lt;sub&gt;1&lt;/sub&gt;, &lt;em&gt;x&lt;/em&gt;&lt;sub&gt;2&lt;/sub&gt;, ...) (&lt;em&gt;x&lt;/em&gt;&lt;sub&gt;&lt;em&gt;n&lt;/em&gt;&lt;/sub&gt;)&lt;/p&gt; &lt;p&gt;= (... (&lt;em&gt;f&lt;/em&gt; &lt;em&gt;x&lt;/em&gt;&lt;sub&gt;1&lt;/sub&gt;) &lt;em&gt;x&lt;/em&gt;&lt;sub&gt;2&lt;/sub&gt;) ...) &lt;em&gt;x&lt;/em&gt;&lt;sub&gt;&lt;em&gt;n&lt;/em&gt;&lt;/sub&gt;.&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;This particular device was introduced by Alonzo Church, the inventor of the λ-calculus [&lt;a href="#h1"&gt;1&lt;/a&gt;].&amp;nbsp; The basic idea is as follows.&lt;/p&gt; &lt;p&gt;In an applicative expression such as &lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;plus(1, 2)&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;the 1 and 2 are not two operands of the function plus, the applicative interpretation is &lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;plus(1) 2&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;where plus(1) is a new procedure that is then applied to to 2 to determine the result.&amp;nbsp; &lt;/p&gt; &lt;p&gt;If we're very serious about wanting to have a procedure that works on several elements of data at once, rather than deliver intermediate procedures, we can bundle several operand values into a list which is then used as a single data operand in the apply operation:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;sum[1, 2, 3]&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;has the single operand [1, 2, 3], which is a list of the individual operand values 1, 2, and 3.&amp;nbsp; &lt;/p&gt; &lt;p&gt;The choice between an applicative evaluation such as &lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;plus(plus(1, 2), 3)&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;and&amp;nbsp;&amp;nbsp;&amp;nbsp; sum[1, 2, 3]&lt;/p&gt; &lt;p&gt;will depend on the context and whether it is important to single out plus(plus(1,2)), say, as an important intermediate function.&amp;nbsp; &lt;u&gt;(This is a trivial case meant to illustrate a broader useful practice.)&lt;/u&gt;&lt;/p&gt; &lt;h3&gt;&lt;a href="#6.0c" target="_top" name="6.0c"&gt;6&lt;/a&gt;. Left-Right, Left-Right, &lt;u&gt;(Cha-cha-cha)&lt;/u&gt; Right-Left&lt;/h3&gt; &lt;p&gt;In the previous section, there is an additional shorthand that needs to be explained.&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;em&gt;p&lt;/em&gt; &lt;em&gt;q&lt;/em&gt; &lt;em&gt;r&lt;/em&gt; &lt;em&gt;a&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;is&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;em&gt;p&lt;/em&gt;( &lt;em&gt;q&lt;/em&gt;( &lt;em&gt;r&lt;/em&gt;(&lt;em&gt;a&lt;/em&gt;) ) )&lt;/p&gt; &lt;p&gt;but&amp;nbsp; &lt;em&gt;p&lt;/em&gt; &lt;em&gt;q&lt;/em&gt;(&lt;em&gt;r&lt;/em&gt;) &lt;em&gt;a&lt;/em&gt;&lt;/p&gt; &lt;p&gt;is&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;em&gt;p&lt;/em&gt;((&lt;em&gt;q&lt;/em&gt; &lt;em&gt;r&lt;/em&gt;) &lt;em&gt;a&lt;/em&gt;) or &lt;em&gt;p&lt;/em&gt; &lt;em&gt;q&lt;/em&gt;(&lt;em&gt;r&lt;/em&gt;, &lt;em&gt;a&lt;/em&gt;)&lt;/p&gt; &lt;p&gt;and not &lt;em&gt;p&lt;/em&gt;( &lt;em&gt;q&lt;/em&gt;( (&lt;em&gt;r&lt;/em&gt;)(&lt;em&gt;a&lt;/em&gt;))).&lt;/p&gt; &lt;p&gt;The rule is that bracketed elements are data of the procedure immediately to the left, if any.&amp;nbsp; This is worked out in left-to-right order.&amp;nbsp; For example,&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;em&gt;s&lt;/em&gt; &lt;em&gt;p&lt;/em&gt;(&lt;em&gt;q&lt;/em&gt;)(&lt;em&gt;r&lt;/em&gt;) &lt;em&gt;a&lt;/em&gt;&lt;/p&gt; &lt;p&gt;= &lt;em&gt;s&lt;/em&gt;( ((&lt;em&gt;p&lt;/em&gt; &lt;em&gt;q&lt;/em&gt;) &lt;em&gt;r&lt;/em&gt;) &lt;em&gt;a&lt;/em&gt; )&lt;/p&gt; &lt;p&gt;= &lt;em&gt;s&lt;/em&gt; &lt;em&gt;p&lt;/em&gt;(&lt;em&gt;q&lt;/em&gt;, &lt;em&gt;r&lt;/em&gt;, &lt;em&gt;a&lt;/em&gt;)&lt;/p&gt; &lt;p&gt;= &lt;em&gt;s&lt;/em&gt; &lt;em&gt;p&lt;/em&gt;(&lt;em&gt;q&lt;/em&gt;, &lt;em&gt;r&lt;/em&gt;) &lt;em&gt;a&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;among others.&amp;nbsp; The choice of particular form depends on the circumstances, &lt;u&gt;the need for parentheses to control essential grouping&lt;/u&gt;, and how one might want the features of the applicative expression to stand out.&lt;/p&gt; &lt;p&gt;This rule also applies for list-shaped operands:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;em&gt;s&lt;/em&gt; &lt;em&gt;p&lt;/em&gt;[&lt;em&gt;x&lt;/em&gt;,&lt;em&gt;y&lt;/em&gt;](&lt;em&gt;r&lt;/em&gt;) &lt;em&gt;a&lt;/em&gt;&lt;/p&gt; &lt;p&gt;= &lt;em&gt;s&lt;/em&gt;( ((&lt;em&gt;p&lt;/em&gt;[&lt;em&gt;x&lt;/em&gt;,&lt;em&gt;y&lt;/em&gt;]) &lt;em&gt;r&lt;/em&gt;) &lt;em&gt;a&lt;/em&gt; )&lt;/p&gt; &lt;p&gt;= &lt;em&gt;s&lt;/em&gt; &lt;em&gt;p&lt;/em&gt;([&lt;em&gt;x&lt;/em&gt;,&lt;em&gt;y&lt;/em&gt;], &lt;em&gt;r&lt;/em&gt;) &lt;em&gt;a&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;h3&gt;&lt;a href="#7.0c" target="_top" name="7.0c"&gt;7&lt;/a&gt;. Ah, Sugar, Sugar&lt;/h3&gt; &lt;p&gt;For Miser, all of these variations are simply syntactic sugar, &lt;u&gt;a sweetening of expression sequence and bracketed groupings that always boils down to a particular combination of apply operations&lt;/u&gt;.&amp;nbsp; The many different ways to group in applicative expressions is a way to express some sense of what the purpose of the expression is.&amp;nbsp; At some point, there are variants of the notation that I find myself using quite naturally and in preference to conventional functional notation.&lt;/p&gt; &lt;p&gt;The grouping rules are straightforward but it is easy to make mistakes with them.&amp;nbsp; Small differences can have a big impact.&amp;nbsp; For example, it is inappropriate to rewrite&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;em&gt;s&lt;/em&gt; &lt;em&gt;p&lt;/em&gt;(&lt;em&gt;q&lt;/em&gt;, &lt;em&gt;r&lt;/em&gt;) &lt;em&gt;a&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;as&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;em&gt;s&lt;/em&gt; (&lt;em&gt;p)(&lt;/em&gt;&lt;em&gt;q, &lt;/em&gt;&lt;em&gt;r&lt;/em&gt;) &lt;em&gt;a&lt;/em&gt;&lt;/p&gt; &lt;p&gt;which is the same as &lt;em&gt;s&lt;/em&gt;(&lt;em&gt;p&lt;/em&gt;, &lt;em&gt;q&lt;/em&gt;, &lt;em&gt;r&lt;/em&gt;) &lt;em&gt;a&lt;/em&gt; instead &lt;u&gt;of &lt;em&gt;s&lt;/em&gt;(&lt;em&gt;p&lt;/em&gt;(&lt;em&gt;q&lt;/em&gt;, &lt;em&gt;r&lt;/em&gt;) &lt;em&gt;a&lt;/em&gt;)&lt;/u&gt;.&lt;/p&gt; &lt;p&gt;So long as everything is an Ob in the use of Frugalese notation for Miser, there is very little to help detect unintended combinations.&amp;nbsp; The beauty of Miser is that everything is an Ob and Obs are interchangeable as data and as procedure (codes).&amp;nbsp; The difficulty of Miser is that there is no such thing as an inadmissible apply combination.&amp;nbsp; &lt;/p&gt; &lt;p&gt;This also means that there is no perfect way to pretty-print any Miser applicative expression, although using a pretty-printer transformation into some sort of standard form might reveal an unintended consequence.&amp;nbsp; That's something worth looking at.&lt;/p&gt; &lt;p&gt;There are more notational features in Frugalese.&amp;nbsp; The focus here has been on the different ways that apply operations can be expressed for carrying out in a Miser implementation.&amp;nbsp; The purpose, beside taking a try at explaining it, is to equip ourselves to start putting the notation to good use.&lt;/p&gt; &lt;hr&gt; &lt;small&gt; &lt;dl&gt; &lt;dt&gt;[&lt;a href="#h1" name="h1"&gt;1&lt;/a&gt;] Alonzo Church: &lt;a href="http://orcmid.com/readings/logic.htm#Church1936"&gt;An Unsolvable Problem of Elementary Number Theory&lt;/a&gt;.&amp;nbsp; &lt;em&gt;American Journal of Mathematics&lt;/em&gt; &lt;strong&gt;&lt;em&gt;58&lt;/em&gt;&lt;/strong&gt; (1936), 345-363.&amp;nbsp; Reprinted in pp. 88-107 of &lt;em&gt;&lt;a href="http://orcmid.com/readings/logic.htm#Davis1965"&gt;The Undecidable: Basic Papers on Undecidable Propositions, Unsolvable Problems and Computable Functions&lt;/a&gt;&lt;/em&gt;, Martin Davis (ed.), Raven Press (New York: 1965), ISBN 0-911216-01-4.  &lt;dd&gt;Here Church introduces λ-expressions as part of exploring a bigger question with regard to the unavailability of effective procedures for an infinitely large set of problems.&amp;nbsp; The original formulation of Church's Thesis is a footnote in this paper.&lt;br&gt;&amp;nbsp;&amp;nbsp; Church's tendency was to bracket formulae for functions in {...} and for operands in (...), stating: "A formula {&lt;em&gt;&lt;strong&gt;F&lt;/strong&gt;&lt;/em&gt;}(&lt;em&gt;&lt;strong&gt;X&lt;/strong&gt;&lt;/em&gt;) may be abbreviated as &lt;em&gt;&lt;strong&gt;F&lt;/strong&gt;&lt;/em&gt;(&lt;em&gt;&lt;strong&gt;X&lt;/strong&gt;&lt;/em&gt;) in any case where &lt;em&gt;&lt;strong&gt;F&lt;/strong&gt;&lt;/em&gt; is or is represented by a single symbol.&amp;nbsp; A formula {{&lt;em&gt;&lt;strong&gt;F&lt;/strong&gt;&lt;/em&gt;}(&lt;em&gt;&lt;strong&gt;X&lt;/strong&gt;&lt;/em&gt;)}(&lt;em&gt;&lt;strong&gt;Y&lt;/strong&gt;&lt;/em&gt;) may be abbreviated as {&lt;em&gt;&lt;strong&gt;F&lt;/strong&gt;&lt;/em&gt;}(&lt;em&gt;&lt;strong&gt;X&lt;/strong&gt;&lt;/em&gt;,&amp;nbsp; &lt;em&gt;&lt;strong&gt;Y&lt;/strong&gt;&lt;/em&gt;), or, if &lt;em&gt;&lt;strong&gt;F&lt;/strong&gt;&lt;/em&gt; is represented by a single symbol, as &lt;em&gt;&lt;strong&gt;F&lt;/strong&gt;&lt;/em&gt;(&lt;em&gt;&lt;strong&gt;X&lt;/strong&gt;&lt;/em&gt;, &lt;em&gt;&lt;strong&gt;Y&lt;/strong&gt;&lt;/em&gt;).&amp;nbsp; And ... ."&amp;nbsp; Here Church is careful to use &lt;strong&gt;&lt;em&gt;F&lt;/em&gt;&lt;/strong&gt;, &lt;strong&gt;&lt;em&gt;X&lt;/em&gt;&lt;/strong&gt;, &lt;strong&gt;&lt;em&gt;Y&lt;/em&gt;&lt;/strong&gt;, etc., as variables for formulas that may be substituted in the given forms.&lt;/dd&gt;&lt;/dl&gt;&lt;/small&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7173751-679770270442271121?l=miser-theory.info%2Fastraendo%2Fpn%2Fdefault.asp' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/7173751/679770270442271121/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=7173751&amp;postID=679770270442271121' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7173751/posts/default/679770270442271121'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7173751/posts/default/679770270442271121'/><link rel='alternate' type='text/html' href='http://miser-theory.info/astraendo/pn/2008/02/miser-frugalese-for-applicative.asp' title='Miser: Frugalese for Applicative Operations'/><author><name>orcmid</name><uri>http://www.blogger.com/profile/15720194709820430236</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='17038397636421592587'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7173751.post-1783273681873236269</id><published>2008-02-16T09:13:00.001-08:00</published><updated>2008-02-17T14:57:42.104-08:00</updated><title type='text'>SeaFunc: 2008-02-20 Functional Programming Meetup</title><content type='html'>&lt;p&gt;&lt;/p&gt; &lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:5af31b99-6d5a-4de3-9165-f0a4776fbd75" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/SeaFunc" rel="tag"&gt;SeaFunc&lt;/a&gt;, &lt;a href="http://technorati.com/tags/Seattle" rel="tag"&gt;Seattle&lt;/a&gt;, &lt;a href="http://technorati.com/tags/Northwest" rel="tag"&gt;Northwest&lt;/a&gt;, &lt;a href="http://technorati.com/tags/Functional%20Programming" rel="tag"&gt;Functional Programming&lt;/a&gt;, &lt;a href="http://technorati.com/tags/Lisp" rel="tag"&gt;Lisp&lt;/a&gt;, &lt;a href="http://technorati.com/tags/F#" rel="tag"&gt;F#&lt;/a&gt;, &lt;a href="http://technorati.com/tags/Haskell" rel="tag"&gt;Haskell&lt;/a&gt;, &lt;a href="http://technorati.com/tags/OCaml" rel="tag"&gt;OCaml&lt;/a&gt;, &lt;a href="http://technorati.com/tags/Scheme" rel="tag"&gt;Scheme&lt;/a&gt;&lt;/div&gt; &lt;p&gt;&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;strong&gt;Who:&lt;/strong&gt; &lt;a href="http://tech.groups.yahoo.com/group/SeaFunc/"&gt;SeaFunc&lt;/a&gt;, the Seattle area Functional Programming interest meet-up &lt;/p&gt;&lt;/blockquote&gt; &lt;blockquote&gt; &lt;p&gt;&lt;strong&gt;When:&lt;/strong&gt; 8:00 pm, Wednesday, February 20&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Where:&lt;/strong&gt; Ralph's Grocery Deli&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2035 4th Avenue&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Seattle, WA 98121&lt;br&gt;&lt;br&gt;We will be meeting in the cafe area against the South wall.&amp;nbsp; The Seattle web logger meetup will also be congregating at Ralph's, starting at 7:00 pm.&amp;nbsp; Yes, there is free WiFi.&lt;/p&gt; &lt;p&gt;These are informal gatherings with the discussion following whatever topics the attendees are interested in and fascinated by at the moment.&lt;/p&gt; &lt;p&gt;Anyone interested in the application, extension, or construction of advanced programming languages, functional or not, is encouraged to come.&lt;/p&gt; &lt;p&gt;Although there is a shared interest in functional-programming systems and their languages (Haskell, Scheme, Lisp, ML, OCaml, Scala, F#, ..., &amp;lt;your favorite here&amp;gt;), the attendees also share interest in general advanced programming-language concepts.&amp;nbsp; Many of these have historical ties to functional programming:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Interactive development systems and dynamic debuggers  &lt;li&gt;DSLs: Domain Specific Languages  &lt;li&gt;Declarative Programming  &lt;li&gt;Dynamic typing and Dynamic scripting languages  &lt;li&gt;Generic programming  &lt;li&gt;Garbage-collection systems and automatic management of dynamic objects  &lt;li&gt;Parallel programming  &lt;li&gt;Logic programming  &lt;li&gt;Program verification and correctness checking systems  &lt;li&gt;Model-based program development and maintenance&lt;/li&gt;&lt;/ul&gt;&lt;/blockquote&gt; &lt;p&gt;SeaFunc began informal meetings in June 2004.&amp;nbsp; There is a low-volume &lt;a href="http://tech.groups.yahoo.com/group/SeaFunc/"&gt;Yahoo! Group&lt;/a&gt; used primarily for meeting notices and notices about related groups that form from time to time (such as LispSEA, a Lisp-programming interest and advocacy group), interspersed with occasional technical questions and other announcements.&amp;nbsp; There are no dues or other formalities.&amp;nbsp; It's all volunteer-driven and self-organizing.&lt;/p&gt; &lt;p&gt;Recently, SeaFunc began alternating meetings in the central Seattle area and the East Side (Bellevue-Redmond) area.&amp;nbsp;&amp;nbsp; The February 20 meeting is the &lt;strike&gt;third&lt;/strike&gt; &lt;u&gt;fourth&lt;/u&gt; gathering of 2008.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;em&gt;Also of Interest:&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;The initial meeting of a &lt;strong&gt;Northwest Functional Programming Interest Group&lt;/strong&gt; is being held at the Seattle Central Library, 1000 4th Avenue, Seattle, from 5:00 - 6:00 pm, also on February 20.&amp;nbsp; This get-together is an opportunity to meet others interested in the subject and also ponder the prospects for meetings based around presentations and guest speakers.&amp;nbsp; A functional-programming interest double-header!&lt;/p&gt; &lt;p&gt;For further information, contact L. G. Meredith at Biosimilarity LLC, +1 206.650.3740.&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;I'll be at both events to see how we might achieve critical mass together.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7173751-1783273681873236269?l=miser-theory.info%2Fastraendo%2Fpn%2Fdefault.asp' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/7173751/1783273681873236269/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=7173751&amp;postID=1783273681873236269' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7173751/posts/default/1783273681873236269'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7173751/posts/default/1783273681873236269'/><link rel='alternate' type='text/html' href='http://miser-theory.info/astraendo/pn/2008/02/seafunc-2008-02-20-functional.asp' title='SeaFunc: 2008-02-20 Functional Programming Meetup'/><author><name>orcmid</name><uri>http://www.blogger.com/profile/15720194709820430236</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='17038397636421592587'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7173751.post-8899515438553248493</id><published>2008-01-28T22:34:00.001-08:00</published><updated>2008-02-08T12:31:37.461-08:00</updated><title type='text'>Miser: The Immutability of Obs</title><content type='html'>&lt;p&gt;&lt;/p&gt; &lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:e57174da-5673-4688-8913-54daa4c486e8" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/PLT%20Scheme" rel="tag"&gt;PLT Scheme&lt;/a&gt;, &lt;a href="http://technorati.com/tags/immutable%20objects" rel="tag"&gt;immutable objects&lt;/a&gt;, &lt;a href="http://technorati.com/tags/models%20of%20computation" rel="tag"&gt;models of computation&lt;/a&gt;, &lt;a href="http://technorati.com/tags/distributed%20computation" rel="tag"&gt;distributed computation&lt;/a&gt;, &lt;a href="http://technorati.com/tags/manifest%20mathematical%20objects" rel="tag"&gt;manifest mathematical objects&lt;/a&gt;, &lt;a href="http://technorati.com/tags/Miser" rel="tag"&gt;Miser&lt;/a&gt;, &lt;a href="http://technorati.com/tags/oMiser" rel="tag"&gt;oMiser&lt;/a&gt;&lt;/div&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;In the &lt;a href="http://miser-theory.info/sketch/osketch.htm"&gt;Miser formulation&lt;/a&gt; of a functional/applicative computing machine, the fundamental data structures, the obs, are immutable.&amp;nbsp; There is no operation that can change an ob.&amp;nbsp;&amp;nbsp; Obs behave very much as mathematical objects (as opposed to the object-oriented programming sort), and mathematical reasoning is applicable to obs and the operations defined on obs.&amp;nbsp;&amp;nbsp; This is a very strict condition.&amp;nbsp;&amp;nbsp; It is intended that the computer manifestation of obs be as indistinguishable from the mathematical as possible given the realities of computational speed and memory-capacity limitations.&lt;/p&gt; &lt;p&gt;There is no way to alter an ob.&amp;nbsp; It is as if obs are neither created nor destroyed, they are merely found.&amp;nbsp; It takes some work to maintain such an illusion, especially in a computation distributed across multiple computers, but it is critical to the formulation of Miser that it be made so.&lt;/p&gt; &lt;p&gt;This immutability also prevents the appearance of cyclic ob structures except for the special cases of singletons and only singletons being immutably self-cyclic [&lt;a href="#2"&gt;2&lt;/a&gt;].&amp;nbsp;&amp;nbsp; Immutability also allows a single, well-defined equality relation, signified in the usual way by "=".&lt;/p&gt; &lt;h3&gt;Immutability First, Mutability Another Way&lt;/h3&gt; &lt;p&gt;The purpose has been to start with a "pure" system in this way.&amp;nbsp; When mutability is finally entertained, it will be in ways that are strictly-confined and that do not alter the immutability of obs in any way whatsoever.&lt;/p&gt; &lt;p&gt;This can be done with Miser simply by breaking its connection with those functional-programming systems, especially Lisp and Scheme, that have allowed relatively unrestricted mutability of their fundamental data structure from the beginning.&amp;nbsp; I don't know if it was a mistake to have done that, although I long thought so.&amp;nbsp; I do know that it would be a mistake for that to be done with Miser.&amp;nbsp; Although later functional-programming systems have been more generous with immutability, I want to take a fresh look that begins with immutability as a given.&lt;/p&gt; &lt;h3&gt;Snatching from the Jaws of Mutability&lt;/h3&gt; &lt;p&gt;Meanwhile, serious, practical interest has arisen in having immutable data structures where that was not the natural state of affairs before.&amp;nbsp; &lt;/p&gt; &lt;p&gt;&lt;a href="http://lambda-the-ultimate.org/node/2631"&gt;Really un-mutable Scheme&lt;/a&gt;.&amp;nbsp; It was amusing to see that version 4.0 of PLT Scheme is going to have the fundamental pairing operation for list structures (the Lisp cons[&lt;em&gt;x&lt;/em&gt;; &lt;em&gt;y&lt;/em&gt;]) involve immutable structures [&lt;a href="#1"&gt;1&lt;/a&gt;].&amp;nbsp; This is part of a shift from mutability as the default to mutability as the exception.&amp;nbsp; There will be mutable forms of the data structures, but new operations are required for using them.&amp;nbsp; In &lt;a href="http://blog.plt-scheme.org/2007/11/getting-rid-of-set-car-and-set-cdr.html#c8263836778853855303"&gt;a comment&lt;/a&gt;, it is revealed that the opportunity to rely on a single "=" is not being taken just yet.&lt;/p&gt; &lt;p&gt;There is also interest in operating with immutable structures in object-oriented systems.&amp;nbsp; Eric Lippert provides a key element to the basis for such interest [&lt;a href="#3"&gt;3&lt;/a&gt;]:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;"Objects which are truly madly deeply immutable have a lot of great properties. They are 100% thread safe, for example, since obviously there will be no conflicts between readers and (non-existent) writers. They are easier to reason about than objects which can change. But their strict requirements may be more than we need, or more than is practical to achieve."&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Lippert is exploring ways to have deeply immutable objects when they are really useful, but not having that be fundamental or always be required.&amp;nbsp; His programming examples that are used to tease out deep immutability for practical situations are very challenging and useful to explore.&amp;nbsp;&amp;nbsp; A systematic approach and further examples can be found in the work of Chris Okasaki [&lt;a href="#4"&gt;4&lt;/a&gt;, &lt;a href="#6"&gt;6&lt;/a&gt;].&lt;/p&gt; &lt;p&gt;Although thread safety is an important benefit, there are others:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Immutable data structures are inherently distributable, whether completely or partially, and they can be replicated without concern for synchronization since they never change.&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;li&gt;Partitioning of a problem and introduction of parallel processing can sometimes be extremely efficient with&amp;nbsp; quasi-immutable data structures [&lt;a href="#5"&gt;5&lt;/a&gt;].&amp;nbsp; &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Interest in immutability seems to be arriving hand-in-hand with awakening interest in functional programming as well.&lt;/p&gt; &lt;p&gt;The inherent distributability and thread safety, as well as the amenability to mathematical treatment, are the motivations for persisting in immutability-first for Miser.&lt;/p&gt; &lt;hr&gt; &lt;small&gt; &lt;dl&gt; &lt;dt&gt;[&lt;a name="1"&gt;1&lt;/a&gt;] Matthew Flatt: &lt;a href="http://blog.plt-scheme.org/2007/11/getting-rid-of-set-car-and-set-cdr.html"&gt;Getting rid of set-car! and set-cdr!&lt;/a&gt;&amp;nbsp; &lt;em&gt;PLT Scheme&lt;/em&gt; (web log), 2007-11-12. &lt;dd&gt;&amp;nbsp;&amp;nbsp; &lt;dt&gt;[&lt;a name="2"&gt;2&lt;/a&gt;] Dennis E. Hamilton: &lt;a href="http://miser-theory.info/astraendo/pn/2007/11/miser-hacks-ii-hole-to-bind-them.asp"&gt;Miser Hacks II: A Hole to Bind Them&lt;/a&gt;.&amp;nbsp; Numbering Peano (web log), 2007-11-04. &lt;dd&gt;&amp;nbsp;&amp;nbsp; &lt;dt&gt;[&lt;a name="3"&gt;3&lt;/a&gt;] Eric Lippert: &lt;a href="http://blogs.msdn.com/ericlippert/archive/2008/01/22/immutability-in-c-part-10-a-double-ended-queue.aspx"&gt;Immutability in C# Part 10: A double-ended queue&lt;/a&gt;.&amp;nbsp; Fabulous Adventures in Coding (web log), &lt;em&gt;msdn.com&lt;/em&gt;, 2008-01-22.&lt;/DT?&lt;dd&gt;The ongoing series is under the &lt;a href="http://blogs.msdn.com/ericlippert/archive/tags/Immutability/default.aspx"&gt;immutability&lt;/a&gt; category.&amp;nbsp; The initial posting provides a nice classification of immutability &lt;em&gt;du&lt;/em&gt; &lt;em&gt;jour&lt;/em&gt;, and an earlier series develops some interesting data structures for an &lt;a href="http://blogs.msdn.com/ericlippert/archive/tags/AStar/default.aspx"&gt;A* search algorithm&lt;/a&gt;.&lt;br&gt;&amp;nbsp;&amp;nbsp; &lt;dt&gt;[&lt;a name="4"&gt;4&lt;/a&gt;] Chris Okasaki: &lt;em&gt;&lt;a href="http://miser-theory.info/readings/funprog.htm#[Okasaki1998]"&gt;Purely Functional Data Structures&lt;/a&gt;&lt;/em&gt;.&amp;nbsp; Cambridge University Press (Cambridge: 1998), ISBN 0-521-66350-4 pbk. &lt;dd&gt;An earlier version of the material, with some differences in coverage, can be found in &lt;a href="http://citeseer.ist.psu.edu/okasaki98purely.html"&gt;Okasaki's 1996 thesis&lt;/a&gt;.&lt;br&gt;&amp;nbsp;&amp;nbsp; &lt;dt&gt;[&lt;a name="5"&gt;5&lt;/a&gt;] Jeffrey Dean and Sanjay Ghemawat: &lt;a href="http://mags.acm.org/communications/200801/?pg=109&amp;amp;pm=1&amp;amp;u1=friend"&gt;MapReduce: Simplified Data Processing on Large Clusters&lt;/a&gt;.&amp;nbsp; &lt;em&gt;&lt;/em&gt;&lt;a href="http://doi.acm.org/10.1145/1327452.1327492"&gt;Comm. ACM 51, 1&lt;/a&gt; (January 2008), 107-113.&amp;nbsp; &lt;dd ?THE href="http://research.google.com/archive/mapreduce.html" &gt;&lt;a  2004 original&gt;The original 2004 &lt;a href="http://research.google.com/archive/mapreduce.html"&gt;Google Research publication&lt;/a&gt; is available on-line.&lt;br&gt;&amp;nbsp;&amp;nbsp; &lt;dt&gt;[&lt;a name="6"&gt;6&lt;/a&gt;] Chris Okasaki: &lt;a href="http://okasaki.blogspot.com/2008/02/ten-years-of-purely-functional-data.html"&gt;Ten Years of Purely Functional Data Structures&lt;/a&gt;.&amp;nbsp; &lt;em&gt;Teaching, Playing, and Programming&lt;/em&gt; (web log), 2008-02-08 (via &lt;a href="http://lambda-the-ultimate.org/node/2665"&gt;Lambda the Ultimate&lt;/a&gt;). &lt;dd&gt;A wonderful retrospective on functional data structures, the anguish of immutability, and how it is overcome.&amp;nbsp; It will be interesting to see how some of the remedies fail or survive under distribution of the data structures.&lt;br&gt;&amp;nbsp;&amp;nbsp; &lt;/dd&gt;&lt;/dl&gt; &lt;p&gt;[&lt;strong&gt;update 2008-02-08T12:13 -0800:&lt;/strong&gt; I was bowled over to see that Chris Okasaki is blogging and now his reflections on &lt;em&gt;Purely Functional Data Structures&lt;/em&gt; have been posted in a wonderfully literate essay.&amp;nbsp; That is reflected in the update here.&amp;nbsp; I finally remembered that the &lt;em&gt;C.ACM&lt;/em&gt; version of [&lt;a href="#5"&gt;5&lt;/a&gt;] is available on-line and I now link to it here.&amp;nbsp; I finally realized that my use of relative links to fragments in these posts is problematic on the front pages of my blogs.&amp;nbsp; I am not going to do anything about that.&amp;nbsp; It's a great example of &lt;a href="http://orcmid.com/BlunderDome/clueless/2008/02/cybersmith-10-golden-rules-for-mastery.asp"&gt;failing to consider the overall system&lt;/a&gt;, though.]&lt;/p&gt;&lt;/small&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7173751-8899515438553248493?l=miser-theory.info%2Fastraendo%2Fpn%2Fdefault.asp' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/7173751/8899515438553248493/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=7173751&amp;postID=8899515438553248493' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7173751/posts/default/8899515438553248493'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7173751/posts/default/8899515438553248493'/><link rel='alternate' type='text/html' href='http://miser-theory.info/astraendo/pn/2008/01/miser-immutability-of-obs.asp' title='Miser: The Immutability of Obs'/><author><name>orcmid</name><uri>http://www.blogger.com/profile/15720194709820430236</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='17038397636421592587'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7173751.post-4726139780046774820</id><published>2008-01-17T17:47:00.001-08:00</published><updated>2008-01-18T12:22:51.086-08:00</updated><title type='text'>Computer Science Classics: Your Picks?</title><content type='html'>&lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:e798e5cb-138c-44f5-9e97-3348d93ee9bb" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/Computer%20Science" rel="tag"&gt;Computer Science&lt;/a&gt;, &lt;a href="http://technorati.com/tags/ACM" rel="tag"&gt;ACM&lt;/a&gt;, &lt;a href="http://technorati.com/tags/Computer%20Science%20Classics" rel="tag"&gt;Computer Science Classics&lt;/a&gt;, &lt;a href="http://technorati.com/tags/ACM%20Downloads" rel="tag"&gt;ACM Downloads&lt;/a&gt;&lt;/div&gt; &lt;p&gt;Some time ago, I participated in an on-line discussion and poll for identifying those out-of-print Computer Science Classics that are the favorites of ACM members.&amp;nbsp; The polling was distilled down to the 25-book &lt;a href="http://www.acm.org/classics"&gt;ACM Classic Books Series&lt;/a&gt; with arrangements to make the books again available.&lt;/p&gt; &lt;p&gt;Thanks to &lt;a href="http://www.mcjones.org/dustydecks/archives/2008/01/15/66/"&gt;Paul McJones&lt;/a&gt;, I see that twelve classics are now available as PDF downloads.&amp;nbsp; If you do not have an ACM Subscriber membership, you can register to receive limited free service by following the link at the top of the Classics page.&amp;nbsp; That is all you need to download the Classics PDFs.&amp;nbsp; &lt;/p&gt; &lt;p&gt;McJones lists all of the PDFs that are available but for Aho and Ullman's &lt;em&gt;Theory of Parsing, Translation, and Compiling&lt;/em&gt;.&amp;nbsp; &lt;a href="http://lambda-the-ultimate.org/node/2609"&gt;Ehud Lamm&lt;/a&gt; mentions four of likely interest to programming-language enthusiasts (also omitting Aho and Ullman, having me wonder if this is a more-recent addition to PDFs).&lt;/p&gt; &lt;h3&gt;My Selections&lt;/h3&gt; &lt;p&gt;Here are the ones that I downloaded or have alternatives to:&lt;br&gt;&amp;nbsp;&amp;nbsp; &lt;/p&gt; &lt;ul&gt; &lt;li&gt;E. F. Codd.&amp;nbsp; &lt;em&gt;The Relational Model for Database Management: Version 2&lt;/em&gt; (1990).&amp;nbsp; Not downloaded.&amp;nbsp; I had this book at one time.&amp;nbsp; Currently, I find the original foundation papers and the analysis by Chris Date to be more useful.&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;li&gt;C. A. R. Hoare and C. B. Jones (editor).&amp;nbsp; &lt;em&gt;Essays in Computing Science&lt;/em&gt; (1989).&amp;nbsp; Here are 22 essays starting with Sir Tony's Turing Award Lecture, "The Emperor's Old Clothes," and including his analysis of the Quicksort algorithm, the unfortunately never-adopted "Contribution to the Development of ALGOL" (with Niklaus Wirth), a complete bibliography (up to the time of publication), and much more.&amp;nbsp; It's great to have so many of these in one place, those I recall and those I must remedy my neglect of.&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;li&gt;Dorothy Elizabeth Robling Denning.&amp;nbsp; &lt;em&gt;Cryptography and Data Security&lt;/em&gt; (1982).&amp;nbsp; A basic reference that I missed as I delved into computer systems security in my M.Sc in IT studies.&lt;br&gt;&amp;nbsp;&amp;nbsp; &lt;li&gt;Seymour Papert.&amp;nbsp; &lt;em&gt;Mindstorms:&lt;/em&gt; &lt;em&gt;Children, Computers, and Powerful Ideas&lt;/em&gt; (1980).&amp;nbsp; Not anything that I had read before.&amp;nbsp; I am curious about for Papert's influence on the One Laptop Per Child program and its initial XO-1 computer system and it seems useful to review this work.&lt;br&gt;&amp;nbsp;&amp;nbsp; &lt;li&gt;Alfred V. Aho and Jeffrey D. Ullman.&amp;nbsp; &lt;em&gt;The Theory of Parsing, Translation, and Compiling&lt;/em&gt; (1972).&amp;nbsp; I've never owned this book, but it is a fundamental reference and now I have it.&lt;br&gt;&amp;nbsp;&amp;nbsp; &lt;li&gt;O.-J. Dahl, E. W. Dijkstra, and C. A. R. Hoare.&amp;nbsp; &lt;em&gt;Structured Programming&lt;/em&gt; (1972).&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp; &lt;li&gt;John F. Hopcroft and Jeffrey D. Ullman.&amp;nbsp; &lt;em&gt;Formal Languages and Their Relation to Automata&lt;/em&gt; (1969) was not downloaded, because I have the 2001 edition of &lt;em&gt;Introduction to Automata Theory, Languages, and Computation&lt;/em&gt;.&amp;nbsp; I may be mistaken in the adequacy of the latter's coverage of the latest thinking on material in the former, but I can wait to find that out.&amp;nbsp; I also think this is a book that I had once before and let slip away.&lt;br&gt;&amp;nbsp;&amp;nbsp; &lt;li&gt;IBM.&amp;nbsp; &lt;em&gt;IBM System/360 Principles of Operation&lt;/em&gt; (1964).&amp;nbsp; An amazing achievement at the time, there is much to be learned from the Principles of Operation approach to many current elements of computing.&amp;nbsp; Something for review and taking lessons from.&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;On reviewing the list just now, I retrieved one other:&lt;br&gt;&amp;nbsp;&amp;nbsp; &lt;/p&gt; &lt;ul&gt; &lt;li&gt;Apple.&amp;nbsp; &lt;em&gt;Macintosh Human Interface Guidelines&lt;/em&gt; (1992).&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp; &lt;/li&gt;&lt;/ul&gt; &lt;h3&gt;What I Yearn For&lt;/h3&gt; &lt;p&gt;And if there were PDFs available, I would have added these:&lt;br&gt;&amp;nbsp;&amp;nbsp; &lt;/p&gt; &lt;ul&gt; &lt;li&gt;Jon Louis Bentley.&amp;nbsp; &lt;em&gt;Writing Efficient Programs&lt;/em&gt; (1982)&lt;br&gt;&amp;nbsp;&amp;nbsp; &lt;li&gt;Edsger W. Dijkstra.&amp;nbsp; &lt;em&gt;Selected Writings on Computing: A Personal Perspective&lt;/em&gt; (1982)&lt;br&gt;&amp;nbsp;&amp;nbsp; &lt;li&gt;Edward Nash Yourdon (ed.).&amp;nbsp; &lt;em&gt;Classics in Software Engineering&lt;/em&gt; (1979).&amp;nbsp; I have no idea why I let this book get away from me.&lt;br&gt;&amp;nbsp;&amp;nbsp; &lt;li&gt;John Allen.&amp;nbsp; &lt;em&gt;Anatomy of LISP&lt;/em&gt; (1978).&amp;nbsp; See previous comment.&lt;br&gt;&amp;nbsp;&amp;nbsp; &lt;li&gt;Kathleen Jensen, Niklaus Wirth, &lt;em&gt;et.al&lt;/em&gt;.&amp;nbsp; &lt;em&gt;PASCAL User Manual and Report&lt;/em&gt; (1974).&amp;nbsp; Well, I don't miss my copy that much, but I bet there's more to learn by having it to refer back to now.&lt;br&gt;&amp;nbsp;&amp;nbsp; &lt;li&gt;Kenneth E. Iverson.&amp;nbsp; &lt;em&gt;A Programming Language&lt;/em&gt; (1962).&amp;nbsp; Along with the John Allen book, I miss this one the most.&lt;/li&gt;&lt;/ul&gt; &lt;h3&gt;OK, What Are Your Picks?&lt;/h3&gt; &lt;p&gt;It will be interesting to see what the download statistics will be for these books.&amp;nbsp; Meanwhile, what are your picks?&lt;/p&gt; &lt;hr&gt; &lt;small&gt; &lt;p&gt;[&lt;strong&gt;update 2008-01-18T20:20Z&lt;/strong&gt; I added a missing word and took the opportunity to clean up a few of my lengthy sentences.]&lt;/p&gt;&lt;/small&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7173751-4726139780046774820?l=miser-theory.info%2Fastraendo%2Fpn%2Fdefault.asp' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/7173751/4726139780046774820/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=7173751&amp;postID=4726139780046774820' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7173751/posts/default/4726139780046774820'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7173751/posts/default/4726139780046774820'/><link rel='alternate' type='text/html' href='http://miser-theory.info/astraendo/pn/2008/01/computer-science-classics-your-picks.asp' title='Computer Science Classics: Your Picks?'/><author><name>orcmid</name><uri>http://www.blogger.com/profile/15720194709820430236</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='17038397636421592587'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7173751.post-7562243028729664382</id><published>2008-01-07T14:20:00.001-08:00</published><updated>2008-01-07T14:27:51.067-08:00</updated><title type='text'>Cybersmith: How Many Functions Am I Holding Up?</title><content type='html'>&lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:7202acac-5f0d-4ec2-a097-928218240f4e" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/programming%20idioms" rel="tag"&gt;programming idioms&lt;/a&gt;, &lt;a href="http://technorati.com/tags/programming%20style" rel="tag"&gt;programming style&lt;/a&gt;, &lt;a href="http://technorati.com/tags/functional%20programming" rel="tag"&gt;functional programming&lt;/a&gt;, &lt;a href="http://technorati.com/tags/object-oriented%20styles" rel="tag"&gt;object-oriented styles&lt;/a&gt;, &lt;a href="http://technorati.com/tags/oMiser" rel="tag"&gt;oMiser&lt;/a&gt;, &lt;a href="http://technorati.com/tags/cybersmith" rel="tag"&gt;cybersmith&lt;/a&gt;&lt;/div&gt; &lt;p&gt;This post is intended to accomplish three things:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;Find a decent way to have Windows Live Writer produce pretty-printed code that appears cleanly on both blog pages and in my RSS feeds.&lt;br&gt;&amp;nbsp;&amp;nbsp; &lt;li&gt;Refine my definition of a function that has a critical role in the Miser Project.&lt;br&gt;&amp;nbsp;&amp;nbsp; &lt;li&gt;Object to a strange set of commandments about the size and other characteristics of "functions," exploring how to make them work in functional programming while recognizing the compromises involved.&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;&lt;a href="http://blog.objectmentor.com/articles/2007/10/29/how-big-should-a-function-be"&gt;How Big Should a Function Be?&lt;/a&gt;&amp;nbsp; When I first saw the commandment to describe computational functions in around 5 lines, I thought it was a joke.&amp;nbsp; With little consideration for the language or the situation, I found the injunction about keeping function descriptions small (as opposed to functional) simply bizarre.&amp;nbsp; Yet it is from a very smart fellow [&lt;a href="#1"&gt;1&lt;/a&gt;], and I was stopped in my tracks.&amp;nbsp; Although Martin concedes that this is situational, there is no guidance about that.&amp;nbsp; I worry that budding cybersmiths will take this as gospel and a commandment not to be broken.&lt;/p&gt; &lt;p&gt;The echo chamber in the comments, and the dismissal of those who objected to context-free generalizations is surprising.&amp;nbsp; That supports my concern.&amp;nbsp;&amp;nbsp; There's too much fussiness over indentation, nesting of conditionals and other layout considerations.&amp;nbsp;&amp;nbsp; This seemed to flaunt the principled sophistication of guidelines that I favor, such as the &lt;em&gt;C++ Coding Standards&lt;/em&gt; of Sutter and Alexandrescu [&lt;a href="#2"&gt;2&lt;/a&gt;].&lt;/p&gt; &lt;h3&gt;Breaking the Rules on Principle&lt;/h3&gt; &lt;p&gt;Here's the test case that came to mind as soon as I read Martin's article. &lt;/p&gt; &lt;p&gt;The programming notation is Frugalese, an informal, unimplemented language that I use to illustrate functional-programming concepts.&amp;nbsp; That's unimportant.&amp;nbsp; It is important that it is neither Java nor C# and it is completely functional.&amp;nbsp; Frugalese is an applicative notation for computation: the fundamental operation consists of carrying out a procedure described by one operand against the data represented by the second.&amp;nbsp;&amp;nbsp; &lt;/p&gt; &lt;p&gt;The operation &lt;font color="#008000"&gt;ob.ap&lt;/font&gt;[&lt;em&gt;f&lt;/em&gt;, &lt;em&gt;x&lt;/em&gt;] defines the basic interpretive process of oMiser[&lt;a href="#3"&gt;3&lt;/a&gt;].&amp;nbsp; The operand &lt;em&gt;f&lt;/em&gt; is taken as a program and the operand &lt;em&gt;x&lt;/em&gt; is taken as data which the program is to process.&amp;nbsp; In oMiser these are both data structures called obs.&amp;nbsp; The Frugalese example is an applicative expression of the oMiser interpreter's basic applicative operation.&amp;nbsp; (That is, we are using an applicative-language notation to describe the implementation of an applicative-machine interpreter.&amp;nbsp; There's no harm in that and there is no chicken-and-egg problem: the oMiser implementation used by oFrugal is not implemented in oFrugal or any higher-level Frugalese language.&amp;nbsp; But &lt;font color="#008000"&gt;ob.ap&lt;/font&gt;, below, is a faithful simulation, capturing the essential behavior and functionality.)&lt;/p&gt; &lt;p&gt;I choose this example because I am in the process of rethinking its formulation and how to present it in a direct way.&amp;nbsp; It struck me that this definition illustrates the difficulties and trade-offs of arbitrarily choosing smaller function (procedure) definitions over larger ones. &lt;/p&gt; &lt;p&gt;In this example, there is only the one function, ob.ap, that is defined for use from elsewhere.&amp;nbsp;&amp;nbsp; There are 23 lines, not counting blank lines introduced for layout purposes:&lt;/p&gt; &lt;blockquote&gt;&lt;pre style="border-right: 1px solid; border-top: 1px solid; border-left: 1px solid; border-bottom: 1px solid"&gt;&lt;font face="Lucida Console, Monospace, monospace, Courier New, Courier"&gt;&lt;br&gt;  1:  &lt;font color="#0000ff"&gt;&lt;strong&gt;defrec&lt;/strong&gt;&lt;/font&gt;         &lt;font color="#c40000"&gt;&lt;strong&gt;/* SELF-CONTAINED SINGLE FUNCTION DEFINITION */&lt;/strong&gt;&lt;/font&gt;&lt;br&gt;  2: &lt;br&gt;  3:     &lt;font color="#008000"&gt;ob.ap&lt;/font&gt;[&lt;em&gt;f&lt;/em&gt;, &lt;em&gt;x&lt;/em&gt;]         &lt;font color="#c40000"&gt;/* Apply the procedure defined by f to operand x */&lt;/font&gt;&lt;br&gt;  4:&lt;br&gt;  5:        =  &lt;font color="#0000ff"&gt;&lt;strong&gt;if&lt;/strong&gt;&lt;/font&gt;    &lt;font color="#800080"&gt;is-individual&lt;/font&gt;(&lt;em&gt;f&lt;/em&gt;)  &lt;font color="#c40000"&gt;/* Atomic (single-instruction) operation */&lt;/font&gt;&lt;br&gt;  6:&lt;br&gt;  7:           &lt;strong&gt;&lt;font color="#0000ff"&gt;then&lt;/font&gt;&lt;/strong&gt;  &lt;strong&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;/strong&gt;    &lt;em&gt;f&lt;/em&gt; = &lt;font color="#ff00ff"&gt;&lt;strong&gt;ob_A&lt;/strong&gt;&lt;/font&gt;  &lt;strong&gt;&lt;font color="#0000ff"&gt;then&lt;/font&gt;&lt;/strong&gt;  &lt;font color="#800080"&gt;ob.a&lt;/font&gt; &lt;em&gt;x&lt;/em&gt;      &lt;font color="#c40000"&gt;/* a-part of x */&lt;/font&gt;&lt;br&gt;  8:&lt;br&gt;  9:                  &lt;strong&gt;&lt;font color="#0000ff"&gt;elif&lt;/font&gt;&lt;/strong&gt; &lt;em&gt;f&lt;/em&gt; = &lt;font color="#ff00ff"&gt;&lt;strong&gt;ob_B&lt;/strong&gt;&lt;/font&gt;  &lt;strong&gt;&lt;font color="#0000ff"&gt;then&lt;/font&gt;&lt;/strong&gt;  &lt;font color="#800080"&gt;ob.b&lt;/font&gt; &lt;em&gt;x&lt;/em&gt;      &lt;font color="#c40000"&gt;/* b-part of x */&lt;/font&gt;&lt;br&gt; 10:&lt;br&gt; 11:                  &lt;strong&gt;&lt;font color="#0000ff"&gt;elif&lt;/font&gt;&lt;/strong&gt; &lt;em&gt;f&lt;/em&gt; = &lt;strong&gt;&lt;font color="#ff00ff"&gt;ob_E&lt;/font&gt;&lt;/strong&gt;  &lt;strong&gt;&lt;font color="#0000ff"&gt;then&lt;/font&gt;&lt;/strong&gt;  &lt;font color="#800080"&gt;ob.e&lt;/font&gt; &lt;em&gt;x&lt;/em&gt;        &lt;font color="#c40000"&gt;/* enquote x */&lt;/font&gt;&lt;br&gt; 12:&lt;br&gt; 13:                  &lt;strong&gt;&lt;font color="#0000ff"&gt;else&lt;/font&gt;&lt;/strong&gt; &lt;font color="#800080"&gt;ob.c&lt;/font&gt;(&lt;em&gt;f&lt;/em&gt;, &lt;em&gt;x&lt;/em&gt;)           &lt;font color="#c40000"&gt;/* prefix f to x, etc. */&lt;br&gt;&lt;/font&gt; 14:&lt;br&gt; 15:           &lt;strong&gt;&lt;font color="#0000ff"&gt;elif&lt;/font&gt;&lt;/strong&gt;  &lt;font color="#800080"&gt;is-singleton&lt;/font&gt;(&lt;em&gt;f&lt;/em&gt;) &lt;font color="#0000ff"&gt;&lt;strong&gt;then&lt;/strong&gt;&lt;/font&gt;  &lt;font color="#800080"&gt;ob.a&lt;/font&gt; &lt;em&gt;f&lt;/em&gt;      &lt;font color="#c40000"&gt;/* quoted constant */&lt;/font&gt;&lt;br&gt; 16: &lt;br&gt; 17:           &lt;strong&gt;&lt;font color="#0000ff"&gt;else&lt;/font&gt;&lt;/strong&gt;  &lt;font color="#008000"&gt;eval&lt;/font&gt; &lt;em&gt;f&lt;/em&gt;                     &lt;font color="#c40000"&gt;/* Evaluate applicative form f */&lt;/font&gt;&lt;br&gt; 18:&lt;br&gt; 19:                  &lt;strong&gt;&lt;font color="#0000ff"&gt;where rec&lt;/font&gt;&lt;/strong&gt; &lt;font color="#008000"&gt;eval&lt;/font&gt; &lt;em&gt;p&lt;/em&gt;  &lt;br&gt; 20: &lt;br&gt; 21:                          =  &lt;strong&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;/strong&gt;    &lt;font color="#800080"&gt;is-singleton&lt;/font&gt;(&lt;em&gt;p&lt;/em&gt;)   &lt;font color="#c40000"&gt;/* argument reference */&lt;/font&gt;&lt;br&gt; 22:&lt;br&gt; 23:                             &lt;strong&gt;&lt;font color="#0000ff"&gt;then if&lt;/font&gt;&lt;/strong&gt;      &lt;em&gt;p&lt;/em&gt; = &lt;font color="#ff00ff"&gt;&lt;strong&gt;ob_ARG&lt;/strong&gt;&lt;/font&gt;     &lt;strong&gt;&lt;font color="#0000ff"&gt;then&lt;/font&gt;&lt;/strong&gt;  &lt;em&gt;x&lt;/em&gt;&lt;br&gt; 24:&lt;br&gt; 25:                                   &lt;strong&gt;&lt;font color="#0000ff"&gt;elif&lt;/font&gt;&lt;/strong&gt;   &lt;em&gt;p&lt;/em&gt; = &lt;font color="#ff00ff"&gt;&lt;strong&gt;ob_SELF&lt;/strong&gt;&lt;/font&gt;    &lt;font color="#0000ff"&gt;&lt;strong&gt;then&lt;/strong&gt;&lt;/font&gt;  &lt;em&gt;f&lt;/em&gt;&lt;br&gt; 26:&lt;br&gt; 27:                                   &lt;strong&gt;&lt;font color="#0000ff"&gt;else&lt;/font&gt;&lt;/strong&gt;   &lt;font color="#800080"&gt;ob.a&lt;/font&gt; &lt;em&gt;p&lt;/em&gt;   &lt;font color="#c40000"&gt;/* or (quoted) literal */&lt;/font&gt;&lt;br&gt; 28:&lt;br&gt; 29:                             &lt;font color="#0000ff"&gt;&lt;strong&gt;else&lt;/strong&gt;  &lt;strong&gt;let&lt;/strong&gt;&lt;/font&gt;   &lt;em&gt;op&lt;/em&gt; = &lt;font color="#800080"&gt;ob.a&lt;/font&gt; &lt;em&gt;p&lt;/em&gt;,&lt;br&gt; 30:&lt;br&gt; 31:                                         &lt;em&gt;arg&lt;/em&gt; = &lt;font color="#800080"&gt;ob.b&lt;/font&gt; &lt;em&gt;p&lt;/em&gt;&lt;br&gt; 32:&lt;br&gt; 33:                                    &lt;strong&gt;&lt;font color="#0000ff"&gt;in&lt;/font&gt;&lt;/strong&gt; &lt;strong&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;/strong&gt;   &lt;em&gt;op&lt;/em&gt; = &lt;font color="#ff00ff"&gt;&lt;strong&gt;ob_C&lt;/strong&gt;&lt;/font&gt;     &lt;font color="#c40000"&gt;/* pairing form */&lt;/font&gt;&lt;br&gt; 34:                                       &lt;strong&gt;&lt;font color="#0000ff"&gt;then&lt;/font&gt;&lt;/strong&gt; &lt;font color="#800080"&gt;ob.c&lt;/font&gt;( &lt;font color="#008000"&gt;eval&lt;/font&gt; &lt;font color="#800080"&gt;ob.a&lt;/font&gt; &lt;em&gt;arg&lt;/em&gt;,&lt;br&gt; 35:                                                   &lt;font color="#008000"&gt;eval&lt;/font&gt; &lt;font color="#800080"&gt;ob.b&lt;/font&gt; &lt;em&gt;arg&lt;/em&gt; )&lt;br&gt; 36:&lt;br&gt; 37:                                       &lt;strong&gt;&lt;font color="#0000ff"&gt;elif&lt;/font&gt;&lt;/strong&gt; &lt;em&gt;op&lt;/em&gt; = &lt;font color="#ff00ff"&gt;&lt;strong&gt;ob_D&lt;/strong&gt;  &lt;font color="#c40000"&gt;/* comparison form */&lt;/font&gt;&lt;/font&gt;&lt;br&gt; 38:                                       &lt;strong&gt;&lt;font color="#0000ff"&gt;then&lt;/font&gt;&lt;/strong&gt; &lt;font color="#800080"&gt;ob.d&lt;/font&gt;( &lt;font color="#008000"&gt;eval&lt;/font&gt; &lt;font color="#800080"&gt;ob.a&lt;/font&gt; &lt;em&gt;arg&lt;/em&gt;,&lt;br&gt; 39:                                                   &lt;font color="#008000"&gt;eval&lt;/font&gt; &lt;font color="#800080"&gt;ob.b&lt;/font&gt; &lt;em&gt;arg&lt;/em&gt; )&lt;br&gt; 40:                                                       &lt;font color="#c40000"&gt;/* applicative form */&lt;/font&gt;&lt;br&gt; 41:                                       &lt;strong&gt;&lt;font color="#0000ff"&gt;else&lt;/font&gt;&lt;/strong&gt; &lt;font color="#008000"&gt;ob.ap&lt;/font&gt;&lt;font color="#000000"&gt;[&lt;/font&gt; &lt;font color="#008000"&gt;eval&lt;/font&gt; &lt;em&gt;op&lt;/em&gt;, &lt;font color="#008000"&gt;eval&lt;/font&gt; &lt;em&gt;arg &lt;/em&gt;];&lt;br&gt;   &lt;br&gt; &lt;br&gt;&lt;/font&gt;&lt;/pre&gt;&lt;/blockquote&gt;
&lt;h3&gt;The Principle Function&lt;/h3&gt;
&lt;p&gt;There are at least two functions defined above.&amp;nbsp; The main one is &lt;font color="#008000"&gt;ob.ap&lt;/font&gt;&lt;font color="#000000"&gt;[&lt;/font&gt;&lt;em&gt;f&lt;/em&gt;, &lt;em&gt;x&lt;/em&gt;].&amp;nbsp; This definition is self-referential (signified by &lt;font color="#0000ff"&gt;&lt;strong&gt;defrec&lt;/strong&gt;&lt;/font&gt;), where the defined function is referenced within its definition at line 41.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; The operation of evaluating this function can lead to multiple recursive evaluations using the same function. The essence of the function is this simple structure:&lt;/p&gt;
&lt;blockquote&gt;&lt;pre style="border-right: 1px solid; border-top: 1px solid; border-left: 1px solid; border-bottom: 1px solid"&gt;&lt;font face="Lucida Console, Monospace, monospace, Courier New, Courier"&gt;&lt;br&gt;  1:  &lt;strong&gt;&lt;font color="#0000ff"&gt;defrec&lt;/font&gt;&lt;/strong&gt;&lt;br&gt;  2: &lt;br&gt;  3:     &lt;font color="#008000"&gt;ob.ap&lt;/font&gt;[&lt;em&gt;f&lt;/em&gt;, &lt;em&gt;x&lt;/em&gt;]         &lt;font color="#c40000"&gt;/* Apply the procedure defined by f to operand x */&lt;/font&gt;&lt;br&gt;  4:&lt;br&gt;  5:        =  &lt;font color="#0000ff"&gt;&lt;strong&gt;if&lt;/strong&gt;&lt;/font&gt;    &lt;font color="#800080"&gt;is-individual&lt;/font&gt;(&lt;em&gt;f&lt;/em&gt;)  &lt;br&gt;  6:&lt;br&gt;  7:           &lt;strong&gt;&lt;font color="#0000ff"&gt;then&lt;/font&gt;&lt;/strong&gt;  &lt;font color="#c40000"&gt;/* do the simple cases for f being simple */&lt;/font&gt;&lt;br&gt; &lt;br&gt;&lt;br&gt; 17:           &lt;strong&gt;&lt;font color="#0000ff"&gt;else&lt;/font&gt;&lt;/strong&gt;  &lt;font color="#008000"&gt;eval&lt;/font&gt; &lt;em&gt;f&lt;/em&gt;  &lt;font color="#c40000"&gt;/* handle the case of f being a composed form */&lt;/font&gt;&lt;br&gt;    &lt;br&gt;   &lt;br&gt;&lt;/font&gt;&lt;/pre&gt;&lt;/blockquote&gt;
&lt;h3&gt;But Wait, There's More&lt;/h3&gt;
&lt;p&gt;The function for the composed-form evaluation, &lt;font color="#008000"&gt;eval&lt;/font&gt;(&lt;em&gt;f&lt;/em&gt;), is defined in the following lines.&amp;nbsp; Here's the key definition:&lt;/p&gt;
&lt;blockquote&gt;&lt;pre style="border-right: 1px solid; border-top: 1px solid; border-left: 1px solid; border-bottom: 1px solid"&gt;&lt;font face="Lucida Console, Monospace, monospace, Courier New, Courier"&gt;&lt;br&gt;  1:  &lt;strong&gt;&lt;font color="#0000ff"&gt;defrec&lt;/font&gt;&lt;/strong&gt;&lt;br&gt;  2: &lt;br&gt;  3:     &lt;font color="#008000"&gt;ob.ap&lt;/font&gt;[&lt;em&gt;f&lt;/em&gt;, &lt;em&gt;x&lt;/em&gt;]          &lt;font color="#c40000"&gt;/* Apply the procedure defined by f to operand x */&lt;br&gt; &lt;br&gt; &lt;font color="#404040"&gt;...&lt;/font&gt;&lt;br&gt;  &lt;/font&gt;&lt;font color="#c40000"&gt;&lt;br&gt;&lt;/font&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt; 19:                  &lt;strong&gt;&lt;font color="#0000ff"&gt;where rec&lt;/font&gt;&lt;/strong&gt; &lt;font color="#008000"&gt;eval&lt;/font&gt; &lt;em&gt;p&lt;/em&gt;          &lt;font color="#c40000"&gt;/* Evaluate applicative form p */&lt;/font&gt;&lt;br&gt; 20: &lt;br&gt; 21:                          =  &lt;strong&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;/strong&gt;    &lt;font color="#800080"&gt;is-singleton&lt;/font&gt;(&lt;em&gt;p&lt;/em&gt;)   &lt;font color="#c40000"&gt;/* argument reference */&lt;/font&gt;&lt;br&gt; 22:&lt;br&gt; 23:                             &lt;strong&gt;&lt;font color="#0000ff"&gt;then if&lt;/font&gt;&lt;/strong&gt;      &lt;em&gt;p&lt;/em&gt; = &lt;font color="#ff00ff"&gt;&lt;strong&gt;ob_ARG&lt;/strong&gt;&lt;/font&gt;     &lt;strong&gt;&lt;font color="#0000ff"&gt;then&lt;/font&gt;&lt;/strong&gt;  &lt;em&gt;x&lt;/em&gt;&lt;br&gt; 24:&lt;br&gt; 25:                                   &lt;strong&gt;&lt;font color="#0000ff"&gt;elif&lt;/font&gt;&lt;/strong&gt;   &lt;em&gt;p&lt;/em&gt; = &lt;font color="#ff00ff"&gt;&lt;strong&gt;ob_SELF&lt;/strong&gt;&lt;/font&gt;    &lt;font color="#0000ff"&gt;&lt;strong&gt;then&lt;/strong&gt;&lt;/font&gt;  &lt;em&gt;f&lt;/em&gt;&lt;br&gt; 26:&lt;br&gt; 27:                                   &lt;strong&gt;&lt;font color="#0000ff"&gt;else&lt;/font&gt;&lt;/strong&gt;   &lt;font color="#800080"&gt;ob.a&lt;/font&gt; &lt;em&gt;p&lt;/em&gt;   &lt;font color="#c40000"&gt;/* or (quoted) literal */&lt;/font&gt;&lt;br&gt; 28:&lt;br&gt; 29:                             &lt;font color="#0000ff"&gt;&lt;strong&gt;else&lt;/strong&gt;  &lt;font color="#c40000"&gt;/* cases for composite p */&lt;br&gt; &lt;/font&gt;&lt;br&gt;&lt;/font&gt; 41:                                       &lt;strong&gt;&lt;font color="#0000ff"&gt;...&lt;/font&gt;&lt;/strong&gt; &lt;font color="#008000"&gt;ob.ap&lt;/font&gt;&lt;font color="#000000"&gt;[&lt;/font&gt; &lt;font color="#008000"&gt;eval&lt;/font&gt; &lt;em&gt;op&lt;/em&gt;, &lt;font color="#008000"&gt;eval&lt;/font&gt; &lt;em&gt;arg &lt;/em&gt;];&lt;br&gt;   &lt;br&gt;   &lt;br&gt;&lt;/font&gt;&lt;/pre&gt;&lt;/blockquote&gt;
&lt;p&gt;This function is being defined &lt;strong&gt;local to the fragment&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;&lt;pre style="border-right: 1px solid; border-top: 1px solid; border-left: 1px solid; border-bottom: 1px solid"&gt;&lt;font face="Lucida Console, Monospace, monospace, Courier New, Courier"&gt;&lt;br&gt;&lt;br&gt; &lt;br&gt;&lt;br&gt; 17:           &lt;strong&gt;&lt;font color="#0000ff"&gt;else&lt;/font&gt;&lt;/strong&gt;  &lt;font color="#008000"&gt;eval&lt;/font&gt; &lt;em&gt;f&lt;/em&gt;  &lt;font color="#c40000"&gt;/* handle the case of f being a composed form */&lt;/font&gt;&lt;br&gt;    &lt;br&gt;   &lt;br&gt;&lt;/font&gt;&lt;/pre&gt;&lt;/blockquote&gt;
&lt;p&gt;That is, the function is only usable (and only defined for use) in conjunction with the expression &lt;font color="#008000"&gt;eval&lt;/font&gt; &lt;em&gt;f&lt;/em&gt;.&amp;nbsp;&amp;nbsp; &lt;/p&gt;
&lt;p&gt;The &lt;strong&gt;&lt;font color="#0000ff"&gt;where&lt;/font&gt;&lt;/strong&gt; introduces a local definition and it introduces it right there.&amp;nbsp; This establishes that this is the only place that definition is required.&amp;nbsp; This makes the dependency exactly clear in both directions: &lt;font color="#008000"&gt;ob.ap&lt;/font&gt;(&lt;em&gt;f&lt;/em&gt;, &lt;em&gt;x&lt;/em&gt;) only requires &lt;font color="#008000"&gt;eval&lt;/font&gt; in that one place and &lt;font color="#008000"&gt;eval&lt;/font&gt; is only used in one way (other than the ways that &lt;font color="#008000"&gt;eval&lt;/font&gt; is recursive).&amp;nbsp; &lt;/p&gt;
&lt;p&gt;Equally important is the fact that &lt;font color="#008000"&gt;eval&lt;/font&gt; &lt;strong&gt;depends on the parameters of&lt;/strong&gt; &lt;font color="#008000"&gt;ob.ap&lt;/font&gt;[&lt;em&gt;f&lt;/em&gt;, &lt;em&gt;x&lt;/em&gt;].&amp;nbsp; This is at lines 23 and 25.&amp;nbsp; This is another isolated dependency.&amp;nbsp; It is global to &lt;font color="#008000"&gt;eval&lt;/font&gt; yet local to the instance of &lt;font color="#008000"&gt;ob.ap&lt;/font&gt;[&lt;em&gt;f&lt;/em&gt;, &lt;em&gt;x&lt;/em&gt;] in which line 17 is reached.&amp;nbsp;&amp;nbsp; In &lt;em&gt;effect&lt;/em&gt;, the definition of &lt;font color="#008000"&gt;eval&lt;/font&gt;(&lt;em&gt;p&lt;/em&gt;) occurs dynamically in each instance of&amp;nbsp; &lt;font color="#008000"&gt;ob.ap&lt;/font&gt;[&lt;em&gt;f&lt;/em&gt;, &lt;em&gt;x&lt;/em&gt;] evaluation.&amp;nbsp;&amp;nbsp; That instance-specific definition is reused for all recursions of the defined &lt;font color="#008000"&gt;eval&lt;/font&gt;.&amp;nbsp; &lt;/p&gt;
&lt;p&gt;These kinds of "inner function" have been around since the introductions of the LISP and ALGOL 60 programming languages.&amp;nbsp; &lt;/p&gt;
&lt;p&gt;This use of the inner function, a recursive one at that, is very economical.&amp;nbsp; It may not the clearest, but it emphasizes locality and cohesion that are important for this particular algorithm.&lt;/p&gt;
&lt;h3&gt;Breaking Up Is Maybe Not So Hard To Do?&lt;/h3&gt;
&lt;p&gt;It is possible to break out the subfunctions used in defining &lt;font color="#008000"&gt;ob.ap&lt;/font&gt;[&lt;em&gt;f&lt;/em&gt;, &lt;em&gt;x&lt;/em&gt;].&amp;nbsp; These considerations must be weighed:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The contracted interface and definition is that of &lt;font color="#008000"&gt;ob.ap&lt;/font&gt;[&lt;em&gt;f&lt;/em&gt;, &lt;em&gt;x&lt;/em&gt;].&amp;nbsp; Everything else is incidental and the definition can be replaced by anything that preserves the required behavior.&amp;nbsp; In one sense, this makes refactoring of the interior of the definition permissible.&amp;nbsp; But,&lt;br&gt;&amp;nbsp;&amp;nbsp; &lt;li&gt;The exposure of additional interfaces creates a separation of concerns that is not required by the definition of &lt;font color="#008000"&gt;ob.ap&lt;/font&gt;[&lt;em&gt;f&lt;/em&gt;, &lt;em&gt;x&lt;/em&gt;].&amp;nbsp; When a subfunction is no longer local, there is the problem of the maintenance of the dependency with &lt;font color="#008000"&gt;ob.ap&lt;/font&gt;[&lt;em&gt;f&lt;/em&gt;, &lt;em&gt;x&lt;/em&gt;].&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;li&gt;The extraction of a subfunction requires expansion of variability beyond that required by locally-incorporated subfunctions.&amp;nbsp; This makes the extracted subfunction &lt;strong&gt;more complex&lt;/strong&gt; than the embedded one.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;To see what's involved, pull the definition of &lt;font color="#008000"&gt;eval&lt;/font&gt; &lt;em&gt;p&lt;/em&gt; outside of the definition of &lt;font color="#008000"&gt;ob.ap&lt;/font&gt;[&lt;em&gt;f&lt;/em&gt;, &lt;em&gt;x&lt;/em&gt;]:&lt;/p&gt;
&lt;blockquote&gt;&lt;pre style="border-right: 1px solid; border-top: 1px solid; border-left: 1px solid; border-bottom: 1px solid"&gt;&lt;font face="Lucida Console, Monospace, monospace, Courier New, Courier"&gt;&lt;br&gt;  1:  &lt;strong&gt;&lt;font color="#0000ff"&gt;defrec&lt;/font&gt;&lt;/strong&gt;&lt;br&gt;  2: &lt;br&gt;  3:     &lt;font color="#008000"&gt;ob.ap&lt;/font&gt;[&lt;em&gt;f&lt;/em&gt;, &lt;em&gt;x&lt;/em&gt;]         &lt;font color="#c40000"&gt;/* Apply the procedure defined by f to operand x */&lt;/font&gt;&lt;br&gt;  4:&lt;br&gt;  5:        =  &lt;font color="#0000ff"&gt;&lt;strong&gt;if&lt;/strong&gt;&lt;/font&gt;    &lt;font color="#800080"&gt;is-individual&lt;/font&gt;(&lt;em&gt;f&lt;/em&gt;)  &lt;font color="#c40000"&gt;/* Atomic (single-instruction) operation */&lt;/font&gt;&lt;br&gt;  6:&lt;br&gt;  7:           &lt;strong&gt;&lt;font color="#0000ff"&gt;then&lt;/font&gt;&lt;/strong&gt;  &lt;strong&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;/strong&gt;    &lt;em&gt;f&lt;/em&gt; = &lt;font color="#ff00ff"&gt;&lt;strong&gt;ob_A&lt;/strong&gt;&lt;/font&gt;  &lt;strong&gt;&lt;font color="#0000ff"&gt;then&lt;/font&gt;&lt;/strong&gt;  &lt;font color="#800080"&gt;ob.a&lt;/font&gt; &lt;em&gt;x&lt;/em&gt;      &lt;font color="#c40000"&gt;/* a-part of x */&lt;/font&gt;&lt;br&gt;  8:&lt;br&gt;  9:                  &lt;strong&gt;&lt;font color="#0000ff"&gt;elif&lt;/font&gt;&lt;/strong&gt; &lt;em&gt;f&lt;/em&gt; = &lt;font color="#ff00ff"&gt;&lt;strong&gt;ob_B&lt;/strong&gt;&lt;/font&gt;  &lt;strong&gt;&lt;font color="#0000ff"&gt;then&lt;/font&gt;&lt;/strong&gt;  &lt;font color="#800080"&gt;ob.b&lt;/font&gt; &lt;em&gt;x&lt;/em&gt;      &lt;font color="#c40000"&gt;/* b-part of x */&lt;/font&gt;&lt;br&gt; 10:&lt;br&gt; 11:                  &lt;strong&gt;&lt;font color="#0000ff"&gt;elif&lt;/font&gt;&lt;/strong&gt; &lt;em&gt;f&lt;/em&gt; = &lt;strong&gt;&lt;font color="#ff00ff"&gt;ob_E&lt;/font&gt;&lt;/strong&gt;  &lt;strong&gt;&lt;font color="#0000ff"&gt;then&lt;/font&gt;&lt;/strong&gt;  &lt;font color="#800080"&gt;ob.e&lt;/font&gt; &lt;em&gt;x&lt;/em&gt;        &lt;font color="#c40000"&gt;/* enquote x */&lt;/font&gt;&lt;br&gt; 12:&lt;br&gt; 13:                  &lt;strong&gt;&lt;font color="#0000ff"&gt;else&lt;/font&gt;&lt;/strong&gt; &lt;font color="#800080"&gt;ob.c&lt;/font&gt;(&lt;em&gt;f&lt;/em&gt;, &lt;em&gt;x&lt;/em&gt;)           &lt;font color="#c40000"&gt;/* prefix f to x, etc. */&lt;br&gt;&lt;/font&gt; 14:&lt;br&gt; 15:           &lt;strong&gt;&lt;font color="#0000ff"&gt;elif&lt;/font&gt;&lt;/strong&gt;  &lt;font color="#800080"&gt;is-singleton&lt;/font&gt;(&lt;em&gt;f&lt;/em&gt;) &lt;font color="#0000ff"&gt;&lt;strong&gt;then&lt;/strong&gt;&lt;/font&gt;  &lt;font color="#800080"&gt;ob.a&lt;/font&gt; &lt;em&gt;f&lt;/em&gt;      &lt;font color="#c40000"&gt;/* quoted constant */&lt;/font&gt;&lt;br&gt; 16: &lt;br&gt; 17:           &lt;strong&gt;&lt;font color="#0000ff"&gt;else&lt;/font&gt;&lt;/strong&gt;  &lt;font color="#008000"&gt;ev&lt;/font&gt;&lt;font color="#404040"&gt;[&lt;em&gt;f&lt;/em&gt;,&lt;em&gt;x&lt;/em&gt;]&lt;/font&gt; &lt;em&gt;f,&lt;/em&gt;                  &lt;font color="#c40000"&gt;/* Evaluate applicative form f */&lt;/font&gt;&lt;br&gt; 18:&lt;br&gt; 19:     &lt;font color="#008000"&gt;ev&lt;/font&gt;&lt;font color="#404040"&gt;[&lt;em&gt;f&lt;/em&gt;,&lt;em&gt;x&lt;/em&gt;]&lt;/font&gt; &lt;em&gt;p&lt;/em&gt;  &lt;br&gt; 20: &lt;br&gt; 21:        =  &lt;strong&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;/strong&gt;    &lt;font color="#800080"&gt;is-singleton&lt;/font&gt;(&lt;em&gt;p&lt;/em&gt;)   &lt;font color="#c40000"&gt;/* argument reference */&lt;/font&gt;&lt;br&gt; 22:&lt;br&gt; 23:           &lt;strong&gt;&lt;font color="#0000ff"&gt;then if&lt;/font&gt;&lt;/strong&gt;      &lt;em&gt;p&lt;/em&gt; = &lt;font color="#ff00ff"&gt;&lt;strong&gt;ob_ARG&lt;/strong&gt;&lt;/font&gt;     &lt;strong&gt;&lt;font color="#0000ff"&gt;then&lt;/font&gt;&lt;/strong&gt;  &lt;em&gt;x&lt;/em&gt;&lt;br&gt; 24:&lt;br&gt; 25:                 &lt;strong&gt;&lt;font color="#0000ff"&gt;elif&lt;/font&gt;&lt;/strong&gt;   &lt;em&gt;p&lt;/em&gt; = &lt;font color="#ff00ff"&gt;&lt;strong&gt;ob_SELF&lt;/strong&gt;&lt;/font&gt;    &lt;font color="#0000ff"&gt;&lt;strong&gt;then&lt;/strong&gt;&lt;/font&gt;  &lt;em&gt;f&lt;/em&gt;&lt;br&gt; 26:&lt;br&gt; 27:                 &lt;strong&gt;&lt;font color="#0000ff"&gt;else&lt;/font&gt;&lt;/strong&gt;   &lt;font color="#800080"&gt;ob.a&lt;/font&gt; &lt;em&gt;p&lt;/em&gt;   &lt;font color="#c40000"&gt;/* or (quoted) literal */&lt;/font&gt;&lt;br&gt; 28:&lt;br&gt; 29:           &lt;font color="#0000ff"&gt;&lt;strong&gt;else&lt;/strong&gt;  &lt;strong&gt;... &lt;/strong&gt;&lt;/font&gt;&lt;font color="#c40000"&gt;/* &lt;strong&gt;UH OH&lt;/strong&gt; */&lt;/font&gt;&lt;br&gt; 30:&lt;br&gt;    &lt;br&gt;   &lt;br&gt;&lt;/font&gt;&lt;/pre&gt;&lt;/blockquote&gt;
&lt;p&gt;We have succeeded in pulling out &lt;font color="#008000"&gt;ev&lt;/font&gt;&lt;font color="#404040"&gt;[&lt;em&gt;f&lt;/em&gt;, &lt;em&gt;x&lt;/em&gt;] &lt;em&gt;p&lt;/em&gt;&lt;/font&gt; in place of the internal &lt;font color="#008000"&gt;eval&lt;/font&gt; &lt;em&gt;p&lt;/em&gt; definition.&amp;nbsp; &lt;/p&gt;
&lt;p&gt;The additional parameters, &lt;font color="#404040"&gt;[&lt;em&gt;f&lt;/em&gt;, &lt;em&gt;x&lt;/em&gt;]&lt;/font&gt;, are required because we are no longer in any context where those variables are visible globally.&amp;nbsp; In effect, it is necessary to replace &lt;font color="#008000"&gt;eval&lt;/font&gt; everywhere in the definition of &lt;font color="#008000"&gt;eval&lt;/font&gt; &lt;em&gt;p&lt;/em&gt; with &lt;font color="#008000"&gt;ev&lt;/font&gt;&lt;font color="#404040"&gt;[&lt;em&gt;f&lt;/em&gt;, &lt;em&gt;x&lt;/em&gt;]&lt;/font&gt;.&amp;nbsp; &lt;/p&gt;
&lt;p&gt;I don't want to write a redundant &lt;font color="#008000"&gt;ev&lt;/font&gt;&lt;font color="#404040"&gt;[&lt;em&gt;f&lt;/em&gt;, &lt;em&gt;x&lt;/em&gt;]&lt;/font&gt; for every &lt;font color="#008000"&gt;eval&lt;/font&gt; in the original version.&amp;nbsp; There is not meant to be any variability here, so I choose another approach.&amp;nbsp; This involves &lt;strong&gt;defining a third function&lt;/strong&gt;.&amp;nbsp; There are many other ways to introduce that third function.&amp;nbsp; My choice takes advantage of the fact that a &lt;font color="#0000ff"&gt;&lt;strong&gt;let&lt;/strong&gt;&lt;/font&gt; &lt;strong&gt;... &lt;strong&gt;&lt;font color="#0000ff"&gt;in&lt;/font&gt;&lt;/strong&gt;&lt;/strong&gt; form is equivalent to introduction of a function definition and application:&lt;/p&gt;
&lt;blockquote&gt;&lt;pre style="border-right: 1px solid; border-top: 1px solid; border-left: 1px solid; border-bottom: 1px solid"&gt;&lt;font face="Lucida Console, Monospace, monospace, Courier New, Courier"&gt;&lt;br&gt;  1:  &lt;strong&gt;&lt;font color="#0000ff"&gt;defrec&lt;/font&gt;&lt;/strong&gt;     &lt;font color="#c40000"&gt;&lt;strong&gt;/* INTER-DEPENDENT MULTIPLE-FUNCTION DEFINITION */&lt;/strong&gt;&lt;/font&gt;&lt;br&gt;  2: &lt;br&gt;  3:     &lt;font color="#008000"&gt;ob.ap&lt;/font&gt;[&lt;em&gt;f&lt;/em&gt;, &lt;em&gt;x&lt;/em&gt;]         &lt;font color="#c40000"&gt;/* Apply the procedure defined by f to operand x */&lt;/font&gt;&lt;br&gt;  4:&lt;br&gt;  5:        =  &lt;font color="#0000ff"&gt;&lt;strong&gt;if&lt;/strong&gt;&lt;/font&gt;    &lt;font color="#800080"&gt;is-individual&lt;/font&gt;(&lt;em&gt;f&lt;/em&gt;)  &lt;font color="#c40000"&gt;/* Atomic (single-instruction) operation */&lt;/font&gt;&lt;br&gt;  6:&lt;br&gt;  7:           &lt;strong&gt;&lt;font color="#0000ff"&gt;then&lt;/font&gt;&lt;/strong&gt;  &lt;strong&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;/strong&gt;    &lt;em&gt;f&lt;/em&gt; = &lt;font color="#ff00ff"&gt;&lt;strong&gt;ob_A&lt;/strong&gt;&lt;/font&gt;  &lt;strong&gt;&lt;font color="#0000ff"&gt;then&lt;/font&gt;&lt;/strong&gt;  &lt;font color="#800080"&gt;ob.a&lt;/font&gt; &lt;em&gt;x&lt;/em&gt;      &lt;font color="#c40000"&gt;/* a-part of x */&lt;/font&gt;&lt;br&gt;  8:&lt;br&gt;  9:                  &lt;strong&gt;&lt;font color="#0000ff"&gt;elif&lt;/font&gt;&lt;/strong&gt; &lt;em&gt;f&lt;/em&gt; = &lt;font color="#ff00ff"&gt;&lt;strong&gt;ob_B&lt;/strong&gt;&lt;/font&gt;  &lt;strong&gt;&lt;font color="#0000ff"&gt;then&lt;/font&gt;&lt;/strong&gt;  &lt;font color="#800080"&gt;ob.b&lt;/font&gt; &lt;em&gt;x&lt;/em&gt;      &lt;font color="#c40000"&gt;/* b-part of x */&lt;/font&gt;&lt;br&gt; 10:&lt;br&gt; 11:                  &lt;strong&gt;&lt;font color="#0000ff"&gt;elif&lt;/font&gt;&lt;/strong&gt; &lt;em&gt;f&lt;/em&gt; = &lt;strong&gt;&lt;font color="#ff00ff"&gt;ob_E&lt;/font&gt;&lt;/strong&gt;  &lt;strong&gt;&lt;font color="#0000ff"&gt;then&lt;/font&gt;&lt;/strong&gt;  &lt;font color="#800080"&gt;ob.e&lt;/font&gt; &lt;em&gt;x&lt;/em&gt;        &lt;font color="#c40000"&gt;/* enquote x */&lt;/font&gt;&lt;br&gt; 12:&lt;br&gt; 13:                  &lt;strong&gt;&lt;font color="#0000ff"&gt;else&lt;/font&gt;&lt;/strong&gt; &lt;font color="#800080"&gt;ob.c&lt;/font&gt;(&lt;em&gt;f&lt;/em&gt;, &lt;em&gt;x&lt;/em&gt;)           &lt;font color="#c40000"&gt;/* prefix f to x, etc. */&lt;br&gt;&lt;/font&gt; 14:&lt;br&gt; 15:           &lt;strong&gt;&lt;font color="#0000ff"&gt;elif&lt;/font&gt;&lt;/strong&gt;  &lt;font color="#800080"&gt;is-singleton&lt;/font&gt;(&lt;em&gt;f&lt;/em&gt;) &lt;font color="#0000ff"&gt;&lt;strong&gt;then&lt;/strong&gt;&lt;/font&gt;  &lt;font color="#800080"&gt;ob.a&lt;/font&gt; &lt;em&gt;f&lt;/em&gt;      &lt;font color="#c40000"&gt;/* quoted constant */&lt;/font&gt;&lt;br&gt; 16: &lt;br&gt; 17:           &lt;strong&gt;&lt;font color="#0000ff"&gt;else&lt;/font&gt;&lt;/strong&gt;  &lt;font color="#008000"&gt;ev&lt;/font&gt;&lt;font color="#404040"&gt;[&lt;em&gt;f&lt;/em&gt;,&lt;em&gt;x&lt;/em&gt;]&lt;/font&gt; &lt;em&gt;f,&lt;/em&gt;                  &lt;font color="#c40000"&gt;/* Evaluate applicative form f */&lt;/font&gt;&lt;br&gt; 18:&lt;br&gt; 19:     &lt;font color="#008000"&gt;ev&lt;/font&gt;&lt;font color="#404040"&gt;[&lt;em&gt;f&lt;/em&gt;,&lt;em&gt;x&lt;/em&gt;]&lt;/font&gt; &lt;em&gt;p&lt;/em&gt;  &lt;br&gt; 20: &lt;br&gt; 21:        =  &lt;strong&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;/strong&gt;    &lt;font color="#800080"&gt;is-singleton&lt;/font&gt;(&lt;em&gt;p&lt;/em&gt;)   &lt;font color="#c40000"&gt;/* argument reference */&lt;/font&gt;&lt;br&gt; 22:&lt;br&gt; 23:           &lt;strong&gt;&lt;font color="#0000ff"&gt;then if&lt;/font&gt;&lt;/strong&gt;      &lt;em&gt;p&lt;/em&gt; = &lt;font color="#ff00ff"&gt;&lt;strong&gt;ob_ARG&lt;/strong&gt;&lt;/font&gt;     &lt;strong&gt;&lt;font color="#0000ff"&gt;then&lt;/font&gt;&lt;/strong&gt;  &lt;em&gt;x&lt;/em&gt;&lt;br&gt; 24:&lt;br&gt; 25:                 &lt;strong&gt;&lt;font color="#0000ff"&gt;elif&lt;/font&gt;&lt;/strong&gt;   &lt;em&gt;p&lt;/em&gt; = &lt;font color="#ff00ff"&gt;&lt;strong&gt;ob_SELF&lt;/strong&gt;&lt;/font&gt;    &lt;font color="#0000ff"&gt;&lt;strong&gt;then&lt;/strong&gt;&lt;/font&gt;  &lt;em&gt;f&lt;/em&gt;&lt;br&gt; 26:&lt;br&gt; 27:                 &lt;strong&gt;&lt;font color="#0000ff"&gt;else&lt;/font&gt;&lt;/strong&gt;   &lt;font color="#800080"&gt;ob.a&lt;/font&gt; &lt;em&gt;p&lt;/em&gt;   &lt;font color="#c40000"&gt;/* or (quoted) literal */&lt;/font&gt;&lt;br&gt; 28:&lt;br&gt; 29:           &lt;font color="#0000ff"&gt;&lt;strong&gt;else&lt;/strong&gt; &lt;font color="#008000"&gt;evform&lt;/font&gt;(&lt;font color="#008000"&gt;ev&lt;/font&gt;&lt;font color="#404040"&gt;[&lt;em&gt;f&lt;/em&gt;,&lt;em&gt;x&lt;/em&gt;]&lt;/font&gt;, &lt;/font&gt;&lt;font color="#800080"&gt;ob.a&lt;/font&gt; &lt;em&gt;p&lt;/em&gt;, &lt;font color="#800080"&gt;ob.b&lt;/font&gt; &lt;em&gt;p&lt;/em&gt;),&lt;br&gt; 30:&lt;br&gt; 31:     &lt;font color="#0000ff"&gt;&lt;font color="#008000"&gt;evform&lt;/font&gt;(&lt;font color="#008000"&gt;eval&lt;/font&gt;&lt;/font&gt;&lt;font color="#404040"&gt;, &lt;em&gt;op&lt;/em&gt;&lt;/font&gt;, &lt;em&gt;arg&lt;/em&gt;)&lt;br&gt; 32:&lt;br&gt; 33:        =  &lt;strong&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;/strong&gt;   &lt;em&gt;op&lt;/em&gt; = &lt;font color="#ff00ff"&gt;&lt;strong&gt;ob_C&lt;/strong&gt;&lt;/font&gt;     &lt;font color="#c40000"&gt;/* pairing form */&lt;/font&gt;&lt;br&gt; 34:           &lt;strong&gt;&lt;font color="#0000ff"&gt;then&lt;/font&gt;&lt;/strong&gt; &lt;font color="#800080"&gt;ob.c&lt;/font&gt;( &lt;font color="#008000"&gt;eval&lt;/font&gt; &lt;font color="#800080"&gt;ob.a&lt;/font&gt; &lt;em&gt;arg&lt;/em&gt;,&lt;br&gt; 35:                       &lt;font color="#008000"&gt;eval&lt;/font&gt; &lt;font color="#800080"&gt;ob.b&lt;/font&gt; &lt;em&gt;arg&lt;/em&gt; )&lt;br&gt; 36:&lt;br&gt; 37:           &lt;strong&gt;&lt;font color="#0000ff"&gt;elif&lt;/font&gt;&lt;/strong&gt; &lt;em&gt;op&lt;/em&gt; = &lt;font color="#ff00ff"&gt;&lt;strong&gt;ob_D&lt;/strong&gt;  &lt;font color="#c40000"&gt;/* comparison form */&lt;/font&gt;&lt;/font&gt;&lt;br&gt; 38:           &lt;strong&gt;&lt;font color="#0000ff"&gt;then&lt;/font&gt;&lt;/strong&gt; &lt;font color="#800080"&gt;ob.d&lt;/font&gt;( &lt;font color="#008000"&gt;eval&lt;/font&gt; &lt;font color="#800080"&gt;ob.a&lt;/font&gt; &lt;em&gt;arg&lt;/em&gt;,&lt;br&gt; 39:                       &lt;font color="#008000"&gt;eval&lt;/font&gt; &lt;font color="#800080"&gt;ob.b&lt;/font&gt; &lt;em&gt;arg&lt;/em&gt; )&lt;br&gt; 40:                           &lt;font color="#c40000"&gt;/* applicative form */&lt;/font&gt;&lt;br&gt; 41:           &lt;strong&gt;&lt;font color="#0000ff"&gt;else&lt;/font&gt;&lt;/strong&gt; &lt;font color="#008000"&gt;ob.ap&lt;/font&gt;&lt;font color="#000000"&gt;[&lt;/font&gt; &lt;font color="#008000"&gt;eval&lt;/font&gt; &lt;em&gt;op&lt;/em&gt;, &lt;font color="#008000"&gt;eval&lt;/font&gt; &lt;em&gt;arg &lt;/em&gt;];&lt;br&gt;   &lt;br&gt;   &lt;br&gt;&lt;/font&gt;&lt;/pre&gt;&lt;/blockquote&gt;
&lt;p&gt;This refactoring works easily because&amp;nbsp; &lt;font color="#008000"&gt;ev&lt;/font&gt;&lt;font color="#404040"&gt;[&lt;em&gt;f&lt;/em&gt;, &lt;em&gt;x&lt;/em&gt;]&lt;/font&gt; is a legitimate intermediate result that can be defined and used as an individual operand.&amp;nbsp; &lt;/p&gt;
&lt;p&gt;The use of&amp;nbsp; &lt;font color="#0000ff"&gt;&lt;font color="#008000"&gt;evform&lt;/font&gt;(&lt;font color="#008000"&gt;ev&lt;/font&gt;&lt;font color="#404040"&gt;[&lt;em&gt;f&lt;/em&gt;, &lt;em&gt;x&lt;/em&gt;]&lt;/font&gt;, &lt;/font&gt;&lt;font color="#800080"&gt;ob.a&lt;/font&gt; &lt;em&gt;p&lt;/em&gt;, &lt;font color="#800080"&gt;ob.b&lt;/font&gt; &lt;em&gt;p&lt;/em&gt;) in the definition of &lt;font color="#008000"&gt;ev&lt;/font&gt;&lt;font color="#404040"&gt;[&lt;em&gt;f&lt;/em&gt;, &lt;em&gt;x&lt;/em&gt;]&lt;/font&gt; &lt;em&gt;p&lt;/em&gt; is very much like saying&lt;/p&gt;
&lt;blockquote&gt;&lt;pre style="border-right: 1px solid; border-top: 1px solid; border-left: 1px solid; border-bottom: 1px solid"&gt;&lt;font face="Lucida Console, Monospace, monospace, Courier New, Courier"&gt;&lt;br&gt; 29:           &lt;font color="#0000ff"&gt;&lt;strong&gt;else let&lt;/strong&gt; &lt;font color="#008000"&gt;eval&lt;/font&gt; = &lt;font color="#008000"&gt;ev&lt;/font&gt;&lt;font color="#404040"&gt;[&lt;em&gt;f&lt;/em&gt;,&lt;em&gt;x&lt;/em&gt;]&lt;/font&gt;&lt;/font&gt;,&lt;br&gt; 30:                       &lt;em&gt;op&lt;/em&gt; = &lt;font color="#800080"&gt;ob.a&lt;/font&gt; &lt;em&gt;p&lt;/em&gt;,&lt;br&gt; 31:                      &lt;em&gt;arg&lt;/em&gt; = &lt;font color="#800080"&gt;ob.b&lt;/font&gt; &lt;em&gt;p&lt;/em&gt;&lt;br&gt; 32:&lt;br&gt; 33:                  &lt;strong&gt;&lt;font color="#0000ff"&gt;in if&lt;/font&gt;&lt;/strong&gt;   &lt;em&gt;op&lt;/em&gt; = &lt;font color="#ff00ff"&gt;&lt;strong&gt;ob_C&lt;/strong&gt;&lt;/font&gt;     &lt;font color="#c40000"&gt;/* pairing form */&lt;/font&gt;&lt;br&gt; 34:                     &lt;strong&gt;&lt;font color="#0000ff"&gt;then&lt;/font&gt;&lt;/strong&gt; &lt;font color="#800080"&gt;ob.c&lt;/font&gt;( &lt;font color="#008000"&gt;eval&lt;/font&gt; &lt;font color="#800080"&gt;ob.a&lt;/font&gt; &lt;em&gt;arg&lt;/em&gt;,&lt;br&gt; 35:                                 &lt;font color="#008000"&gt;eval&lt;/font&gt; &lt;font color="#800080"&gt;ob.b&lt;/font&gt; &lt;em&gt;arg&lt;/em&gt; )&lt;br&gt; 36:&lt;br&gt; 37:                     &lt;strong&gt;&lt;font color="#0000ff"&gt;elif&lt;/font&gt;&lt;/strong&gt; &lt;em&gt;op&lt;/em&gt; = &lt;font color="#ff00ff"&gt;&lt;strong&gt;ob_D&lt;/strong&gt;  &lt;font color="#c40000"&gt;/* comparison form */&lt;/font&gt;&lt;/font&gt;&lt;br&gt; 38:                     &lt;strong&gt;&lt;font color="#0000ff"&gt;then&lt;/font&gt;&lt;/strong&gt; &lt;font color="#800080"&gt;ob.d&lt;/font&gt;( &lt;font color="#008000"&gt;eval&lt;/font&gt; &lt;font color="#800080"&gt;ob.a&lt;/font&gt; &lt;em&gt;arg&lt;/em&gt;,&lt;br&gt; 39:                                 &lt;font color="#008000"&gt;eval&lt;/font&gt; &lt;font color="#800080"&gt;ob.b&lt;/font&gt; &lt;em&gt;arg&lt;/em&gt; )&lt;br&gt; 40:                                     &lt;font color="#c40000"&gt;/* applicative form */&lt;/font&gt;&lt;br&gt; 41:                     &lt;strong&gt;&lt;font color="#0000ff"&gt;else&lt;/font&gt;&lt;/strong&gt; &lt;font color="#008000"&gt;ob.ap&lt;/font&gt;&lt;font color="#000000"&gt;[&lt;/font&gt; &lt;font color="#008000"&gt;eval&lt;/font&gt; &lt;em&gt;op&lt;/em&gt;, &lt;font color="#008000"&gt;eval&lt;/font&gt; &lt;em&gt;arg &lt;/em&gt;];&lt;br&gt;   &lt;br&gt;   &lt;br&gt;&lt;/font&gt;&lt;/pre&gt;&lt;/blockquote&gt;
&lt;p&gt;This second form preserves locality at the cost of additional indentation and coupling directly into the superior function.&amp;nbsp; At the same time, it avoids surfacing a function that is only needed in one place.&lt;/p&gt;
&lt;h3&gt;Confessions and Compromise&lt;/h3&gt;
&lt;p&gt;It is intriguing that the form with definitions of three functions satisfies Martin's requirements[&lt;a href="#1"&gt;1&lt;/a&gt;].&amp;nbsp; &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Confession:&lt;/strong&gt; When I &lt;em&gt;explain&lt;/em&gt; the operation of &lt;font color="#008000"&gt;ob.ap&lt;/font&gt;[&lt;em&gt;f&lt;/em&gt;, &lt;em&gt;x&lt;/em&gt;], I do so using auxiliary function definitions[&lt;a href="#3"&gt;3&lt;/a&gt;].&amp;nbsp; I use more of them than the three factored out here.&amp;nbsp; One important reason for additional functions is the prospect that some of them are extended as more features are added to the system.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Compromise:&lt;/strong&gt; When I want to control the coupling among functions, it is important to have an explicit way to reflect that.&amp;nbsp; Locality of auxiliary function definitions allows that.&amp;nbsp; My compromise version would preserve the three functions for explanatory purposes in this locality-controlling form:&lt;/p&gt;
&lt;blockquote&gt;&lt;pre style="border-right: 1px solid; border-top: 1px solid; border-left: 1px solid; border-bottom: 1px solid"&gt;&lt;font face="Lucida Console, Monospace, monospace, Courier New, Courier"&gt;&lt;br&gt;  1:  &lt;strong&gt;&lt;font color="#0000ff"&gt;defrec&lt;/font&gt;&lt;/strong&gt;    &lt;font color="#c40000"&gt;&lt;strong&gt;/* SELF-CONTAINED WITH AUXILARY FUNCTION DEFINITIONS */&lt;/strong&gt;&lt;/font&gt;&lt;br&gt;  2: &lt;br&gt;  3:     &lt;font color="#008000"&gt;ob.ap&lt;/font&gt;[&lt;em&gt;f&lt;/em&gt;, &lt;em&gt;x&lt;/em&gt;]         &lt;font color="#c40000"&gt;/* Apply the procedure defined by f to operand x */&lt;/font&gt;&lt;br&gt;  4:&lt;br&gt;  5:     =  &lt;font color="#0000ff"&gt;&lt;strong&gt;if&lt;/strong&gt;&lt;/font&gt;    &lt;font color="#800080"&gt;is-individual&lt;/font&gt;(&lt;em&gt;f&lt;/em&gt;)  &lt;font color="#c40000"&gt;/* Atomic (single-instruction) operation */&lt;/font&gt;&lt;br&gt;  6:&lt;br&gt;  7:        &lt;strong&gt;&lt;font color="#0000ff"&gt;then&lt;/font&gt;&lt;/strong&gt;  &lt;strong&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;/strong&gt;    &lt;em&gt;f&lt;/em&gt; = &lt;font color="#ff00ff"&gt;&lt;strong&gt;ob_A&lt;/strong&gt;&lt;/font&gt;  &lt;strong&gt;&lt;font color="#0000ff"&gt;then&lt;/font&gt;&lt;/strong&gt;  &lt;font color="#800080"&gt;ob.a&lt;/font&gt; &lt;em&gt;x&lt;/em&gt;      &lt;font color="#c40000"&gt;/* a-part of x */&lt;/font&gt;&lt;br&gt;  8:&lt;br&gt;  9:               &lt;strong&gt;&lt;font color="#0000ff"&gt;elif&lt;/font&gt;&lt;/strong&gt; &lt;em&gt;f&lt;/em&gt; = &lt;font color="#ff00ff"&gt;&lt;strong&gt;ob_B&lt;/strong&gt;&lt;/font&gt;  &lt;strong&gt;&lt;font color="#0000ff"&gt;then&lt;/font&gt;&lt;/strong&gt;  &lt;font color="#800080"&gt;ob.b&lt;/font&gt; &lt;em&gt;x&lt;/em&gt;      &lt;font color="#c40000"&gt;/* b-part of x */&lt;/font&gt;&lt;br&gt; 10:&lt;br&gt; 11:               &lt;strong&gt;&lt;font color="#0000ff"&gt;elif&lt;/font&gt;&lt;/strong&gt; &lt;em&gt;f&lt;/em&gt; = &lt;strong&gt;&lt;font color="#ff00ff"&gt;ob_E&lt;/font&gt;&lt;/strong&gt;  &lt;strong&gt;&lt;font color="#0000ff"&gt;then&lt;/font&gt;&lt;/strong&gt;  &lt;font color="#800080"&gt;ob.e&lt;/font&gt; &lt;em&gt;x&lt;/em&gt;        &lt;font color="#c40000"&gt;/* enquote x */&lt;/font&gt;&lt;br&gt; 12:&lt;br&gt; 13:               &lt;strong&gt;&lt;font color="#0000ff"&gt;else&lt;/font&gt;&lt;/strong&gt; &lt;font color="#800080"&gt;ob.c&lt;/font&gt;(&lt;em&gt;f&lt;/em&gt;, &lt;em&gt;x&lt;/em&gt;)           &lt;font color="#c40000"&gt;/* prefix f to x, etc. */&lt;br&gt;&lt;/font&gt; 14:&lt;br&gt; 15:        &lt;strong&gt;&lt;font color="#0000ff"&gt;elif&lt;/font&gt;&lt;/strong&gt;  &lt;font color="#800080"&gt;is-singleton&lt;/font&gt;(&lt;em&gt;f&lt;/em&gt;) &lt;font color="#0000ff"&gt;&lt;strong&gt;then&lt;/strong&gt;&lt;/font&gt;  &lt;font color="#800080"&gt;ob.a&lt;/font&gt; &lt;em&gt;f&lt;/em&gt;      &lt;font color="#c40000"&gt;/* quoted constant */&lt;/font&gt;&lt;br&gt; 16: &lt;br&gt; 17:        &lt;strong&gt;&lt;font color="#0000ff"&gt;else&lt;/font&gt;&lt;/strong&gt;  &lt;font color="#008000"&gt;ev&lt;/font&gt;&lt;font color="#404040"&gt;[&lt;em&gt;f&lt;/em&gt;,&lt;em&gt;x&lt;/em&gt;]&lt;/font&gt; &lt;em&gt;f,&lt;/em&gt;                  &lt;font color="#c40000"&gt;/* Evaluate applicative form f */&lt;/font&gt;&lt;br&gt; 18:&lt;br&gt; 19:     &lt;strong&gt;&lt;font color="#0000ff"&gt;where &lt;/font&gt;&lt;/strong&gt;&lt;font color="#008000"&gt;ev&lt;/font&gt;&lt;font color="#404040"&gt;[&lt;em&gt;f&lt;/em&gt;,&lt;em&gt;x&lt;/em&gt;]&lt;/font&gt; &lt;em&gt;p&lt;/em&gt;  &lt;br&gt; 20: &lt;br&gt; 21:     =  &lt;strong&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;/strong&gt;    &lt;font color="#800080"&gt;is-singleton&lt;/font&gt;(&lt;em&gt;p&lt;/em&gt;)   &lt;font color="#c40000"&gt;/* argument reference */&lt;/font&gt;&lt;br&gt; 22:&lt;br&gt; 23:        &lt;strong&gt;&lt;font color="#0000ff"&gt;then if&lt;/font&gt;&lt;/strong&gt;      &lt;em&gt;p&lt;/em&gt; = &lt;font color="#ff00ff"&gt;&lt;strong&gt;ob_ARG&lt;/strong&gt;&lt;/font&gt;     &lt;strong&gt;&lt;font color="#0000ff"&gt;then&lt;/font&gt;&lt;/strong&gt;  &lt;em&gt;x&lt;/em&gt;&lt;br&gt; 24:&lt;br&gt; 25:              &lt;strong&gt;&lt;font color="#0000ff"&gt;elif&lt;/font&gt;&lt;/strong&gt;   &lt;em&gt;p&lt;/em&gt; = &lt;font color="#ff00ff"&gt;&lt;strong&gt;ob_SELF&lt;/strong&gt;&lt;/font&gt;    &lt;font color="#0000ff"&gt;&lt;strong&gt;then&lt;/strong&gt;&lt;/font&gt;  &lt;em&gt;f&lt;/em&gt;&lt;br&gt; 26:&lt;br&gt; 27:              &lt;strong&gt;&lt;font color="#0000ff"&gt;else&lt;/font&gt;&lt;/strong&gt;   &lt;font color="#800080"&gt;ob.a&lt;/font&gt; &lt;em&gt;p&lt;/em&gt;   &lt;font color="#c40000"&gt;/* or (quoted) literal */&lt;/font&gt;&lt;br&gt; 28:&lt;br&gt; 29:        &lt;font color="#0000ff"&gt;&lt;strong&gt;else&lt;/strong&gt; &lt;font color="#008000"&gt;evform&lt;/font&gt;(&lt;font color="#008000"&gt;ev&lt;/font&gt;&lt;font color="#404040"&gt;[&lt;em&gt;f&lt;/em&gt;,&lt;em&gt;x&lt;/em&gt;]&lt;/font&gt;, &lt;/font&gt;&lt;font color="#800080"&gt;ob.a&lt;/font&gt; &lt;em&gt;p&lt;/em&gt;, &lt;font color="#800080"&gt;ob.b&lt;/font&gt; &lt;em&gt;p&lt;/em&gt;),&lt;br&gt; 30:&lt;br&gt; 31:     &lt;strong&gt;&lt;font color="#0000ff"&gt;where&lt;/font&gt;&lt;/strong&gt; &lt;font color="#0000ff"&gt;&lt;font color="#008000"&gt;evform&lt;/font&gt;(&lt;font color="#008000"&gt;eval&lt;/font&gt;&lt;/font&gt;&lt;font color="#404040"&gt;, &lt;em&gt;op&lt;/em&gt;&lt;/font&gt;, &lt;em&gt;arg&lt;/em&gt;)&lt;br&gt; 32:&lt;br&gt; 33:     =  &lt;strong&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;/strong&gt;   &lt;em&gt;op&lt;/em&gt; = &lt;font color="#ff00ff"&gt;&lt;strong&gt;ob_C&lt;/strong&gt;&lt;/font&gt;     &lt;font color="#c40000"&gt;/* pairing form */&lt;/font&gt;&lt;br&gt; 34:        &lt;strong&gt;&lt;font color="#0000ff"&gt;then&lt;/font&gt;&lt;/strong&gt; &lt;font color="#800080"&gt;ob.c&lt;/font&gt;( &lt;font color="#008000"&gt;eval&lt;/font&gt; &lt;font color="#800080"&gt;ob.a&lt;/font&gt; &lt;em&gt;arg&lt;/em&gt;,&lt;br&gt; 35:                    &lt;font color="#008000"&gt;eval&lt;/font&gt; &lt;font color="#800080"&gt;ob.b&lt;/font&gt; &lt;em&gt;arg&lt;/em&gt; )&lt;br&gt; 36:&lt;br&gt; 37:        &lt;strong&gt;&lt;font color="#0000ff"&gt;elif&lt;/font&gt;&lt;/strong&gt; &lt;em&gt;op&lt;/em&gt; = &lt;font color="#ff00ff"&gt;&lt;strong&gt;ob_D&lt;/strong&gt;  &lt;font color="#c40000"&gt;/* comparison form */&lt;/font&gt;&lt;/font&gt;&lt;br&gt; 38:        &lt;strong&gt;&lt;font color="#0000ff"&gt;then&lt;/font&gt;&lt;/strong&gt; &lt;font color="#800080"&gt;ob.d&lt;/font&gt;( &lt;font color="#008000"&gt;eval&lt;/font&gt; &lt;font color="#800080"&gt;ob.a&lt;/font&gt; &lt;em&gt;arg&lt;/em&gt;,&lt;br&gt; 39:                    &lt;font color="#008000"&gt;eval&lt;/font&gt; &lt;font color="#800080"&gt;ob.b&lt;/font&gt; &lt;em&gt;arg&lt;/em&gt; )&lt;br&gt; 40:                        &lt;font color="#c40000"&gt;/* applicative form */&lt;/font&gt;&lt;br&gt; 41:        &lt;strong&gt;&lt;font color="#0000ff"&gt;else&lt;/font&gt;&lt;/strong&gt; &lt;font color="#008000"&gt;ob.ap&lt;/font&gt;&lt;font color="#000000"&gt;[&lt;/font&gt; &lt;font color="#008000"&gt;eval&lt;/font&gt; &lt;em&gt;op&lt;/em&gt;, &lt;font color="#008000"&gt;eval&lt;/font&gt; &lt;em&gt;arg &lt;/em&gt;];&lt;br&gt;   &lt;br&gt;  &lt;/font&gt;&lt;/pre&gt;&lt;/blockquote&gt;
&lt;p&gt;The use of &lt;strong&gt;&lt;font color="#0000ff"&gt;where&lt;/font&gt;&lt;/strong&gt; at the "top level" is a bit like saying &lt;strong&gt;&lt;font color="#0000ff"&gt;private&lt;/font&gt;&lt;/strong&gt; in the method declarations for a class.&amp;nbsp; But we do not need to introduce classes, saving us from having to consider the interactions between access specifiers and inheritance.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;More confession:&lt;/strong&gt; I just made up this additional use of &lt;strong&gt;&lt;font color="#0000ff"&gt;where&lt;/font&gt;&lt;/strong&gt; as an "access" specifier similar to use of &lt;font color="#0000ff"&gt;&lt;strong&gt;rec&lt;/strong&gt;&lt;/font&gt;&lt;font color="#000000"&gt; to impose self-reference in definitions.&amp;nbsp;&amp;nbsp; I invented it on the spot.&amp;nbsp; (The internal form of &lt;/font&gt;&lt;strong&gt;&lt;font color="#0000ff"&gt;where&lt;/font&gt;&lt;/strong&gt; clause has been known at least since the work of Burge and Landin[&lt;a href="#4"&gt;4&lt;/a&gt;, &lt;a href="#5"&gt;5&lt;/a&gt;] and was used by Strachey)&amp;nbsp; I introduced this specifier flavor because I am jealous of the improved readability of the interdependent multi-function definition form. &lt;/p&gt;
&lt;p&gt;I will pay a penalty in the complication of the Frugalese grammar and in explanation of how this use of &lt;font color="#0000ff"&gt;&lt;strong&gt;where&lt;/strong&gt;&lt;/font&gt;&lt;font color="#000000"&gt; impacts the definitions in a definition list where it occurs.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color="#000000"&gt;This device is not going to assure that Martin's injunction can or should be satisfied in all cases[&lt;a href="#1"&gt;1&lt;/a&gt;].&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; I'm pleased that I can take advantage of that style without surrendering localization of interdependencies among function definitions.&amp;nbsp;&amp;nbsp; I'm going to use this Frugalese feature much more before I am satisfied that it carries the day well enough.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;In testing Martin's guidelines against a specific example of my own, I found a way where following the rules slavishly would surrender other qualities of functional definitions.&amp;nbsp; Since I have the privilege of defining the Frugalese notation, I am able to adopt a compromise approach that keeps auxiliary functions auxiliary while flattening the layout and the presentation.&amp;nbsp; It remains to be determined whether this addition is a significant improvement overall.&lt;/p&gt;
&lt;hr&gt;

&lt;dl&gt;
&lt;dt&gt;[&lt;a name="1"&gt;1&lt;/a&gt;] Robert C. Martin: &lt;a href="http://blog.objectmentor.com/articles/2007/10/29/how-big-should-a-function-be"&gt;How Big Should a Function Be?&lt;/a&gt;&amp;nbsp; Uncle Bob's Blatherings (web log), &lt;em&gt;Object Mentor&lt;/em&gt;, 2007-10-29 (via &lt;a href="http://blog.objectmentor.com/articles/2007/10/29/how-big-should-a-function-be"&gt;Hans Martin Kern&lt;/a&gt;). 
&lt;dd&gt;"Functions should be small. Very small. A well written function might be 4, 5, perhaps 8 lines long; but no longer.&amp;nbsp; ... Specifically, functions that &lt;em&gt;process information&lt;/em&gt; as part of an &lt;em&gt;algorithm&lt;/em&gt; should be very small."&amp;nbsp; The &lt;font color="#008000"&gt;ob.ap&lt;/font&gt;[&lt;em&gt;f&lt;/em&gt;, &lt;em&gt;x&lt;/em&gt;] definition is definitely that of an algorithm that processes information, so it is not at all clear to me how that fact correlates with having to be small, to have a brief description.&amp;nbsp; Even though I manage to break out the subfunctions, I could not be satisfied without also enforcing their auxiliary nature.&amp;nbsp;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp; "High level functions should be followed by lower level functions that should be followed by still lower level functions. The calls should all point downwards in the source file if possible."&amp;nbsp; This is certainly satisfied in the definition of &lt;font color="#008000"&gt;ob.ap&lt;/font&gt;[&lt;em&gt;f&lt;/em&gt;, &lt;em&gt;x&lt;/em&gt;] in all of the variations shown.&lt;br&gt;&amp;nbsp;&amp;nbsp; "Of course these rules cannot be followed 100% of the time, but they are good rules nonetheless. Our goal, as programmers, is to write programs that humans can understand and maintain." is a reasonable statement, but for its sequel that seems to suggest there is an obvious boundary between "good" and "bad":&amp;nbsp; "Remember, a product that works, but that has a bad internal structure &lt;em&gt;is a bad product.&lt;/em&gt;"&amp;nbsp;&amp;nbsp; I suppose my view can be summarized as a willingness to support such practices along with a reluctance to enforce them.&lt;br&gt;&amp;nbsp;&amp;nbsp; &lt;dt&gt;[&lt;a name="2"&gt;2&lt;/a&gt;] Herb Sutter and Andrei Alexandrescu: &lt;em&gt;&lt;a href="http://www.gotw.ca/publications/c++cs.htm"&gt;C++ Coding Standards -- 101 Rules, Guidelines, and Best Practices&lt;/a&gt;&lt;/em&gt;.&amp;nbsp; Addison-Wesley (Boston: 2005), ISBN 0-321-11358-6 pbk. 
&lt;dd&gt;The principle that struck me in this context was "0.&amp;nbsp; Don't sweat the small stuff."&amp;nbsp; Some others that apply to this example are "5. Give one entity one cohesive responsibility," "10.&amp;nbsp; Minimize global and shared data," "18. Declare variables as locally as possible," and "20. Avoid long functions.&amp;nbsp; Avoid deep nesting" (with statement of the principle involved).&amp;nbsp; You can decide how well "6. Correctness, simplicity, and clarity come first."&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;dt&gt;[&lt;a name="3"&gt;3&lt;/a&gt;] Dennis E. Hamilton: &lt;a href="http://miser-theory.info/notes/2002/06/N020600b.htm"&gt;oMiser Sketch [latest]&lt;/a&gt;, Miser Theory Notes page N020600f 0.05 2007-05-03. 
&lt;dd&gt;I am in the process of shrinking and correcting much of this material, my motivation for finding a succinct statement of &lt;font color="#008000"&gt;ob.ap&lt;/font&gt;(&lt;em&gt;f&lt;/em&gt;, &lt;em&gt;x&lt;/em&gt;).&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;dt&gt;[&lt;a name="4"&gt;4&lt;/a&gt;] William H. Burge: &lt;em&gt;Recursive Programming Techniques&lt;/em&gt;. Addison-Wesley (Reading, MA: 1975). ISBN &lt;a href="http://www.amazon.com/Recursive-Programming-Techniques-Systems-programming/dp/0201144506"&gt;0-201-14450-8&lt;/a&gt;.
&lt;dd&gt;I rely on this approach to functional programming for many idioms and test cases for Frugalese.&amp;nbsp; The structure of Frugalese is different from ISWIM in several respects, although it is generally easy to translate between the notations. &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;dt&gt;[&lt;a name="5"&gt;5&lt;/a&gt;] Peter J. Landin: &lt;a href="http://www.cs.utah.edu/~eeide/compilers/old/papers/p157-landin.pdf"&gt;The Next 700 Programming Languages&lt;/a&gt;. &lt;em&gt;Comm. ACM &lt;strong&gt;9&lt;/strong&gt;&lt;/em&gt;, 3 (March 1966), pp. 157-164.
&lt;dd&gt;The refactoring performed between my variations of &lt;font color="#008000"&gt;ob.ap&lt;/font&gt;[&lt;em&gt;f&lt;/em&gt;, &lt;em&gt;x&lt;/em&gt;] definition is based on a few of the rewriting cases described by Peter Landin in this paper.&amp;nbsp; Although I also use indentation heavily when writing Frugalese, that is not essential to the language (so far).&amp;nbsp; &lt;/dd&gt;&lt;/dl&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7173751-7562243028729664382?l=miser-theory.info%2Fastraendo%2Fpn%2Fdefault.asp' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/7173751/7562243028729664382/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=7173751&amp;postID=7562243028729664382' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7173751/posts/default/7562243028729664382'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7173751/posts/default/7562243028729664382'/><link rel='alternate' type='text/html' href='http://miser-theory.info/astraendo/pn/2008/01/cybersmith-how-many-functions-am-i.asp' title='Cybersmith: How Many Functions Am I Holding Up?'/><author><name>orcmid</name><uri>http://www.blogger.com/profile/15720194709820430236</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='17038397636421592587'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7173751.post-2094246906873751101</id><published>2007-11-22T21:45:00.001-08:00</published><updated>2007-11-22T21:45:46.900-08:00</updated><title type='text'>More Annotated Turing</title><content type='html'>&lt;p&gt;&lt;/p&gt; &lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:b0262ddf-b592-43cc-a3ae-854eed2064aa" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/Charles%20Petzold" rel="tag"&gt;Charles Petzold&lt;/a&gt;, &lt;a href="http://technorati.com/tags/Alan%20Turing" rel="tag"&gt;Alan Turing&lt;/a&gt;, &lt;a href="http://technorati.com/tags/Turing%20Machine" rel="tag"&gt;Turing Machine&lt;/a&gt;, &lt;a href="http://technorati.com/tags/Universal%20Turing%20Machine" rel="tag"&gt;Universal Turing Machine&lt;/a&gt;, &lt;a href="http://technorati.com/tags/UTM" rel="tag"&gt;UTM&lt;/a&gt;, &lt;a href="http://technorati.com/tags/Church-Turing%20Thesis" rel="tag"&gt;Church-Turing Thesis&lt;/a&gt;, &lt;a href="http://technorati.com/tags/Computation%20Theory" rel="tag"&gt;Computation Theory&lt;/a&gt;, &lt;a href="http://technorati.com/tags/On%20Computable%20Numbers" rel="tag"&gt;On Computable Numbers&lt;/a&gt;, &lt;a href="http://technorati.com/tags/orcmid" rel="tag"&gt;orcmid&lt;/a&gt;&lt;/div&gt; &lt;p&gt;&lt;/p&gt; &lt;h3&gt;&lt;em&gt;&lt;a title="Charles Petzold's Annotated Turing Web Page" href="http://www.charlespetzold.com/AnnotatedTuring/index.html"&gt;&lt;img style="margin: 0px 10px 5px 0px" src="http://yoi4oa.bay.livefilestore.com/y1pSnwPiUtxyHcnniXq6xYriiYkUwQv4PkTlT4DRvZJWAJaeFH56Y0aNeagG-Vc1fPXgYlnY1XeTuRXmY_CKGvtGg" align="left"&gt;&lt;/a&gt;&lt;/img&gt;&lt;/em&gt;A Book's Progress&lt;/h3&gt; &lt;p align="center"&gt;&lt;em&gt;Before digital computers could do much of anything, &lt;br&gt;Alan Turing demonstrated what they could never do....&lt;/em&gt;&lt;/p&gt; &lt;p&gt;I fancy the tag line that Charles Petzold has placed on his &lt;a href="http://www.charlespetzold.com/AnnotatedTuring/index.html"&gt;new page&lt;/a&gt; about his forthcoming book, &lt;em&gt;&lt;a href="http://www.wiley.com/WileyCDA/WileyTitle/productCd-0470229055.html"&gt;The Annotated Turing&lt;/a&gt;&lt;/em&gt;.&amp;nbsp; &lt;/p&gt; &lt;p&gt;It is now possible to pre-order the book.&amp;nbsp; I placed my order on &lt;a href="http://www.amazon.com/Annotated-Turing-Charles-Petzold/dp/0470229055"&gt;amazon.com&lt;/a&gt; (US).&amp;nbsp; I think the provisional cover illustration is marvelous and I'm holding onto this copy of the image just in case they decide to change it (but please don't).&lt;/p&gt; &lt;p&gt;I'm eager to have the book and follow Petzold's narrative through Turing's paper.&lt;/p&gt; &lt;h3&gt;The Mathematical-Logic Connection&lt;/h3&gt; &lt;p&gt;For those who want more on the context of this activity, there are some other useful books on the mathematical-logic and computability aspects of Turing's work.&amp;nbsp; Here are some selections:&lt;/p&gt; &lt;dl&gt; &lt;dt&gt;Berlinski, David.  &lt;dd&gt;&lt;em&gt;&lt;a href="http://orcmid.com/readings/philosophy.htm#[Berlinski2000]"&gt;The Advent of the Algorithm: The Idea that Rules the World&lt;/a&gt;.&lt;/em&gt; Harcourt (New York: 2000), ISBN 0-15-100338-6.&amp;nbsp; A poetic excursion into Liebniz's dream and the quest that led to the digital computer and more.&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;dd&gt;Davis, Martin.  &lt;dd&gt;&lt;a href="http://orcmid.com/readings/logic.htm#[Davis2000]"&gt;Engines of Logic: Mathematicians and the Origin of the Computer&lt;/a&gt;.&amp;nbsp; W.W. Norton (New York: 2000), ISBN 0-393-32229-7 pbk.&amp;nbsp; An account of the contributors from Liebniz to Turing, to the modern digital computer and the puzzling questions raised around who we are and how we operate as we do.&amp;nbsp; There is a careful non-mathematical illustration of Turing Machines and some of the key ideas associated with them.&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;dd&gt;Davis, Martin (ed.)  &lt;dd&gt;&lt;em&gt;&lt;a href="http://orcmid.com/readings/logic.htm#[Davis1965]"&gt;The Undecidable: Basic Papers on Undecidable Propositions, Unsolvable Problems and Computable Functions&lt;/a&gt;&lt;/em&gt;.&amp;nbsp; Raven Press (New York: 1965), ISBN 0-911216-01-4.&amp;nbsp; A valuable collection of fundamental papers including those of Gödel, Church, and Turing.&amp;nbsp; The Petzold book will be an useful introduction to this kind of mathematical approach and the related work.&amp;nbsp; The Turing paper is here.&lt;/dd&gt;&lt;/dl&gt; &lt;p&gt;There are texts on &lt;a href="http://en.wikipedia.org/wiki/Computability_theory_%28computer_science%29"&gt;Computation&lt;/a&gt; and &lt;a href="http://en.wikipedia.org/wiki/Recursion_theory"&gt;Computability&lt;/a&gt; theory.&amp;nbsp; The Wikipedia treatments provide a general sense of the different focuses that have followed from the work of Turing and others.&lt;/p&gt; &lt;h3&gt;Turing the Person&lt;/h3&gt; &lt;p&gt;About &lt;a href="http://en.wikipedia.org/wiki/Alan_Turing"&gt;Alan Mathison Turing&lt;/a&gt;, there is the work of his &lt;a href="http://www.turing.org.uk/turing/"&gt;biographer&lt;/a&gt;, Andrew Hodges, as well as the &lt;a href="http://www.turingarchive.org/"&gt;Turing Digital Archive&lt;/a&gt;, where Turing's publications can be found along with unpublished materials and memorabilia.&amp;nbsp; The Turing paper that is the subject of Petzold's book can also be examined on-line there.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;dl&gt; &lt;dd&gt;&amp;nbsp; &lt;/dd&gt;&lt;/dl&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7173751-2094246906873751101?l=miser-theory.info%2Fastraendo%2Fpn%2Fdefault.asp' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/7173751/2094246906873751101/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=7173751&amp;postID=2094246906873751101' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7173751/posts/default/2094246906873751101'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7173751/posts/default/2094246906873751101'/><link rel='alternate' type='text/html' href='http://miser-theory.info/astraendo/pn/2007/11/more-annotated-turing.asp' title='More Annotated Turing'/><author><name>orcmid</name><uri>http://www.blogger.com/profile/15720194709820430236</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='17038397636421592587'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7173751.post-194914000201772929</id><published>2007-11-17T15:47:00.001-08:00</published><updated>2007-11-23T10:47:47.919-08:00</updated><title type='text'>Different (Universal) Computation Models</title><content type='html'>&lt;p&gt;&lt;/p&gt; &lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:e63c0044-5498-4fed-ad57-7c05d0abef71" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/Stephen%20Wolfram" rel="tag"&gt;Stephen Wolfram&lt;/a&gt;, &lt;a href="http://technorati.com/tags/Alex%20Smith" rel="tag"&gt;Alex Smith&lt;/a&gt;, &lt;a href="http://technorati.com/tags/Foundations%20of%20Mathematics" rel="tag"&gt;Foundations of Mathematics&lt;/a&gt;, &lt;a href="http://technorati.com/tags/FOM" rel="tag"&gt;FOM&lt;/a&gt;, &lt;a href="http://technorati.com/tags/Universal%20Turing%20Machine" rel="tag"&gt;Universal Turing Machine&lt;/a&gt;, &lt;a href="http://technorati.com/tags/Alternative%20Computation%20Models" rel="tag"&gt;Alternative Computation Models&lt;/a&gt;, &lt;a href="http://technorati.com/tags/Miser%20Project" rel="tag"&gt;Miser Project&lt;/a&gt;&lt;/div&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;On October 24, 2007, &lt;a href="http://en.wikipedia.org/w/index.php?title=Stephen_Wolfram&amp;amp;oldid=170736846"&gt;Stephen Wolfram&lt;/a&gt; &lt;a href="http://blog.wolfram.com/2007/10/the_prize_is_won_the_simplest.html"&gt;announced&lt;/a&gt; the awarding of a $250,000 prize for a proof that a particular 2-state 3-color Turing Machine is indeed universal.&amp;nbsp; [I selected a &lt;a href="http://en.wikipedia.org/w/index.php?title=Stephen_Wolfram&amp;amp;oldid=170736846"&gt;specific Wikipedia page&lt;/a&gt; on &lt;a href="http://www.stephenwolfram.com/about-sw/"&gt;Wolfram&lt;/a&gt; because it covers the prize and the ensuing discussion on FOM in a form that is accurate enough at this point.&amp;nbsp; It is unimportant to this post how later developments may be reported &lt;a href="http://en.wikipedia.org/wiki/Stephen_Wolfram"&gt;there&lt;/a&gt;.]&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;strong&gt;update 2007-11-22:&lt;/strong&gt; The challenging and testing of the (2,3)-TM's universality is continuing.&amp;nbsp; I have added some additional links and I am now going to take my attention off of this activity.&amp;nbsp;&amp;nbsp; The (2,3)-TM is interesting as a simple test case for demonstration simulation of TMs with other computational mechanisms, but I am not going to pay anything but glancing future attention to (2,3)-TM universality questions and the connection with Wolfram's thesis, the principle of computational equivalence.&amp;nbsp; Resolution of these matters seem irrelevant to the particular focus of the Miser Project.&lt;/p&gt;&lt;/blockquote&gt; &lt;h3&gt;Controversy and Problems of Definition&lt;/h3&gt; &lt;p&gt;Ignoring the controversy around the metaphysical aspects of &lt;em&gt;A New Kind of Science&lt;/em&gt;, there is now a new controversy around the way this prize was awarded, the definition of the conditions for the prize, and also the conditions to be satisfied under which the (2,3)-TM achieves UTM-hood, demonstration of Universal Turing Machine capability.&amp;nbsp;&amp;nbsp; Considering that the machine has only two states, for a total of six rules with a three-mark alphabet, most of the work is knowing how to prepare the input and then how to recognize "the answer" of any of its computations.&lt;/p&gt; &lt;p&gt;On the Foundations of Mathematics discussion list, &lt;a href="http://www.cs.nyu.edu/mailman/listinfo/fom"&gt;FOM&lt;/a&gt;, there is ongoing discussion on how universality is to be understood, how one knows that a terminating computation has indeed been completed (there being no halt state), and how one encodes the initial tape and starting condition before setting the machine loose.&amp;nbsp; In particular, it might be unfair to require some other universal machine to create the initial tape for the (2,3)-TM, and it is not clear whether that is the case or not.&amp;nbsp; There is also some concern for the apparent requirement that the tape may require an infinite extent of initial markings and how difficult that may be to accomplish.&lt;/p&gt; &lt;p&gt;This questioning will play itself out.&amp;nbsp; On the FOM list, award-winner &lt;a href="http://www.wolframscience.com/prizes/tm23/alex_smith_bio.html"&gt;Alex Smith&lt;/a&gt;, Stephen Wolfram, and others are testing, clarifying, and testing again with a variety of examples and speculations, all designed to narrow down the discussion and conclude how the (2,3)-TM fits into the universality pantheon, and just exactly where.&lt;/p&gt; &lt;p&gt;To help frame the discussion, some useful resources have been pointed out:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Martin Davis points to &lt;a href="http://www.cs.nyu.edu/pipermail/fom/2007-October/012136.html"&gt;two historical articles&lt;/a&gt; on the definition of Universal Turing Machine.&lt;br&gt;&amp;nbsp;&amp;nbsp; &lt;li&gt;Damien Woods provides &lt;a href="http://www.cs.nyu.edu/pipermail/fom/2007-October/012168.html"&gt;some background&lt;/a&gt; and a reference on a variety of small Universal Turing Machines, and the variability in universality conditions.&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;li&gt;Vaughn Pratt, in a reply to Alex Smith, &lt;a href="http://www.cs.nyu.edu/pipermail/fom/2007-November/012192.html"&gt;provides a nice rundown&lt;/a&gt; on the topics of universality and non-halting computations as they have been addressed in what might be termed the mainstream development of computation theory.&amp;nbsp; Pratt, in his cataloguing of contributions, mentions that some have come to advocate more-abstract axioms for recursion theory (the test case for equivalent universality in the Church-Turing convergence).&amp;nbsp; This led some responders to a new topic (below).&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp; &lt;li&gt;On &lt;a href="http://www.cs.nyu.edu/pipermail/fom/2007-November/012296.html" target="_blank"&gt;November 17&lt;/a&gt;, Vaughn Pratt looks over some earlier discussion and summarizes that "incomparable conventions for small Turing machines yield incomparable results."&amp;nbsp; Pratt goes on to object to certain machines which can be shown as equivalent to being two-counter machines, and hence prospectively universal.&amp;nbsp; [This has me think of this as a rudimentary Turing-Machine counterpart of the von Neumann quality, where two registers (what instruction location, what data location) are prominent, a distant reach from (2,3)-TMs.]&lt;br&gt;&amp;nbsp;&amp;nbsp; &lt;li&gt;&lt;a href="http://www.cs.nyu.edu/pipermail/fom/2007-November/012306.html" target="_blank"&gt;On November 19&lt;/a&gt;, discussant Bob Hearn provides some comments from Marvin Minsky and returns to the two-counter machine consideration with "Incidentally, the reduction chain from arbitrary Turing machines to cyclic 2-tag systems to Wolfram's (2,3) machine proceeds via two- counter machines."&amp;nbsp; [This is not, I think, a smoking gun, but something to comprehend more carefully.]&lt;br&gt;&amp;nbsp; &lt;li&gt;On &lt;a href="http://www.cs.nyu.edu/pipermail/fom/2007-November/012318.html"&gt;November 21&lt;/a&gt;, Alex Smith proposes a "nested-universality" criterion and I think it is safe to say that what we have here is very much a work in progress and that a sharp universality criterion for the (2,3)-TM is in need of considerable work.&amp;nbsp; This is valuable for those who find the question important, although there is here before us the potent pitfall (and danger to all scientific investigations) of changing the criteria until the predetermined candidate is included.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Although it is not crucial to the analysis of the (2,3)-TM and agreement on the way in which it is to be accepted as universal, the demonstration of such universality is claimed by Wolfram to be evidence for his thesis, the &lt;a href="http://mathworld.wolfram.com/PrincipleofComputationalEquivalence.html"&gt;Principle of Computational Equivalence&lt;/a&gt; (PCE).&amp;nbsp; Wolfram's argument is that "most systems are computationally equivalent. For example, the workings of the human brain or the evolution of weather systems can, in principle, compute the same things as a computer. Computation is therefore simply a question of translating inputs and outputs from one system to another."&amp;nbsp; This principle should not be confused with the Church-Turing thesis, which does not suggest where computation models are manifest, merely what the limitation of any of their powers seems to be.&amp;nbsp; Wolfram accepts the Church-Turing thesis to the extent that the PCE claims an equivalent ceiling on what these ubiquitous computational mechanisms can achieve and the UTM is its exemplar.&amp;nbsp; [It strikes me as ludicrous to consider it a simple matter to arrange "inputs"&amp;nbsp; --conditions on the planet -- by which the weather system carries out an arbitrary desired computation.&amp;nbsp; It is interesting that there are, at this point, also concerns over how inputs for the (2,3)-TM are to be arranged.]&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Kovas Boguta (at Wolfram Research) &lt;a href="http://www.cs.nyu.edu/pipermail/fom/2007-November/012186.html"&gt;points out&lt;/a&gt; that the PCE is not a mathematical claim but an empirical one so refutation in the mathematical sense is inappropriate.&amp;nbsp; [The same holds for the Church-Turing thesis, but the two theses are not equivalent, as I've already mentioned.]&lt;br&gt;&amp;nbsp;&amp;nbsp; &lt;li&gt;On &lt;a href="http://www.cs.nyu.edu/pipermail/fom/2007-November/012305.html" target="_blank"&gt;November 19&lt;/a&gt;, Boguta follows up with a "Principles of Computational Equivalence" that goes into greater detail, contrasting PCE with the Church-Turing Thesis (CTT) and relates PCE (versa CTT) with regard to equivalence between complexity of behavior, equivalence between different computations, and equivalence between computational processes and physical processes.&amp;nbsp; [This for me reveals the degree to which adoption of PCE can slide into metaphysical acceptance of incomparables and incomensurables.]&lt;br&gt;&amp;nbsp;&amp;nbsp; &lt;li&gt;On &lt;a href="http://www.cs.nyu.edu/pipermail/fom/2007-November/012313.html"&gt;November 20&lt;/a&gt;, Wolfram Research's Todd Rowland provided additional commentary on PCE and how it is observable: "if you see something in nature that is complicated, then that thing is likely to be universal" and "if you search a space of computational rules starting from the simplest cases, then you will quickly find examples of simple rules that are universal."&amp;nbsp; There are links to further material.&amp;nbsp; It is clear that we will be circling around these informal observations about universality and ponder how one can have a sharp criterion in the face of such widely different empirical settings.&lt;/li&gt;&lt;/ul&gt; &lt;h3&gt;Higher-Level and Practical Computation-Model Formulations&lt;/h3&gt; &lt;p&gt;Meanwhile, Richard Heck, noticing Vaughn Pratt's rundown, &lt;a href="http://www.cs.nyu.edu/pipermail/fom/2007-November/012195.html"&gt;asks for more&lt;/a&gt; about more-abstract axioms for recursion theory.&amp;nbsp; Further contributions accumulate: &lt;/p&gt; &lt;ul&gt; &lt;li&gt;Andrej Bauer &lt;a href="http://www.cs.nyu.edu/pipermail/fom/2007-November/012198.html"&gt;provides a recap&lt;/a&gt; of different ways computability (and computation) theory is being taken more abstract, with a nice collection of thumbnails and references.&lt;br&gt;&amp;nbsp;&amp;nbsp; &lt;li&gt;Vladik Kreinovich &lt;a href="http://www.cs.nyu.edu/pipermail/fom/2007-November/012200.html"&gt;suggests&lt;/a&gt; that &lt;a href="http://www.eecs.umich.edu/gasm/"&gt;Abstract State Machines&lt;/a&gt; be added to Bauer's survey.&amp;nbsp; Bauer, who is familiar with the model, &lt;a href="http://www.cs.nyu.edu/pipermail/fom/2007-November/012201.html"&gt;wonders&lt;/a&gt; whether ASMs have been used in computability theory.&lt;br&gt;&amp;nbsp;&amp;nbsp; &lt;li&gt;Yuri Gurevich &lt;a href="http://www.cs.nyu.edu/pipermail/fom/2007-November/012203.html"&gt;responds&lt;/a&gt; to Bauer's question via Kreinovich, citing papers in his &lt;a href="http://research.microsoft.com/~gurevich/annotated.html"&gt;extensive annotated bibliography&lt;/a&gt; that bear on that and related questions. &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;And we find ourselves at an interesting point of practical application (e.g., algorithms) of abstract (universal?) computation models.&amp;nbsp; I find Gurevich's work to be interesting, especially because of the way it is being applied.&amp;nbsp; (The Miser Project is not anywhere close to being able to address computation at that level.) &lt;/p&gt; &lt;p&gt;Meanwhile, &lt;/p&gt; &lt;ul&gt; &lt;li&gt;John McCarthy quietly &lt;a href="http://www.cs.nyu.edu/pipermail/fom/2007-October/012142.html"&gt;slipped in&lt;/a&gt; a straightforward observation that establishes the simple beauty of practice tied to theory.&lt;/li&gt;&lt;/ul&gt; &lt;hr&gt; &lt;small&gt; &lt;p&gt;[&lt;strong&gt;update 2007-11-22&lt;/strong&gt;: I added some of the latest FOM material and I think that is more than enough.&amp;nbsp; I am satisfied to have shown how the discussion is going (and how this level of scrutiny should have preceded awarding of the prize, just as for the Millenium Challenge prizes.&amp;nbsp; I don't think my interests in universal computation in the limited context of the Miser Project are impacted by this struggle universality and the principle of computational equivalence.&amp;nbsp;&amp;nbsp; The topic of higher-level and practical computation models remains of interest to me for later.] &lt;br&gt;&amp;nbsp;&lt;strong&gt;update 2007-11-20:&lt;/strong&gt; I added a few more links suggesting how this exploration wanders on and off of unexpected territories.]&lt;/p&gt;&lt;/small&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7173751-194914000201772929?l=miser-theory.info%2Fastraendo%2Fpn%2Fdefault.asp' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/7173751/194914000201772929/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=7173751&amp;postID=194914000201772929' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7173751/posts/default/194914000201772929'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7173751/posts/default/194914000201772929'/><link rel='alternate' type='text/html' href='http://miser-theory.info/astraendo/pn/2007/11/different-universal-computation-models.asp' title='Different (Universal) Computation Models'/><author><name>orcmid</name><uri>http://www.blogger.com/profile/15720194709820430236</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='17038397636421592587'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7173751.post-7604596668486257474</id><published>2007-11-15T22:42:00.001-08:00</published><updated>2007-11-15T22:42:50.708-08:00</updated><title type='text'>2007-11-14: SeaFunc Meet-Up</title><content type='html'>&lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:213fd4a5-ccf1-4349-b3cd-0f235eb69c60" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/orcmid" rel="tag"&gt;orcmid&lt;/a&gt;, &lt;a href="http://technorati.com/tags/functional%20programming" rel="tag"&gt;functional programming&lt;/a&gt;, &lt;a href="http://technorati.com/tags/SeaFunc" rel="tag"&gt;SeaFunc&lt;/a&gt;, &lt;a href="http://technorati.com/tags/meetup" rel="tag"&gt;meetup&lt;/a&gt;&lt;/div&gt; &lt;p&gt;Four of us turned up for the Wednesday, November 14 meeting of &lt;a href="http://tech.groups.yahoo.com/group/SeaFunc/"&gt;SeaFunc&lt;/a&gt;, the Seattle Functional Programming informality.&amp;nbsp; I was here because &lt;a href="http://tech.groups.yahoo.com/group/SeaFunc/message/666"&gt;I said I would&lt;/a&gt;.&amp;nbsp; Just in case no one bested the rainy evening, I brought my laptop and started composing some blog posts (including this one).&lt;/p&gt; &lt;p&gt;Daniel, Stephen, and Nico showed up near 8pm and we jawed until 10pm.&amp;nbsp; Nico is the second person at a SeaFunc meeting that owns a Symbolics Lisp machine.&amp;nbsp; He talked a little about his efforts to install a larger hard drive and create a clean base system.&amp;nbsp; Apparently there is a lot of source code available (in Common Lisp) and Nico wants to learn from it.&amp;nbsp; There was some discussion of the power of the IDE and interest in how it might contrast with Smalltalk.&lt;/p&gt; &lt;p&gt;Daniel and Stephen are both with Microsoft.&amp;nbsp; Daniel and I ended up talking about functional-programming a bit and he explained the trampoline idea to me (since I am interested in Henry Baker's Cheney Copy on the run-time stack technique).&amp;nbsp; We managed to include discussion of the One Laptop per Child machine (&lt;a href="http://orcmid.spaces.live.com/blog/cns!33894F6489994BA7!603.entry"&gt;XO&lt;/a&gt;), &lt;a href="http://orcmid.com/blog/2007/11/whs-fascination-and-social-grid.asp"&gt;WHS&lt;/a&gt;, &lt;a href="http://dev.live.com/"&gt;Windows Live Services&lt;/a&gt; (and the webcasts I've been watching). &lt;/p&gt; &lt;p&gt;I didn't take any photographs.&amp;nbsp; I was having too much fun jabbering.&amp;nbsp; As recompense I offer the following tidbits:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;In the November 14 issue of the &lt;em&gt;Dr. Dobb's Report&lt;/em&gt; newsletter (don't know that it appears on the web), editor Jonathan Erickson leads off with "Functional Languages: Into the Real World."&amp;nbsp; The signal, to Erickson, is the announcement that Microsoft F# is to "become a first-class citizen of .NET and run on the Common Language Runtime."&amp;nbsp; Jonathan provides a link to the John Hughes paper, "&lt;a href="http://www.md.chalmers.se/~rjmh/Papers/whyfp.html"&gt;Why Functional Programming Matters&lt;/a&gt;."&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;li&gt;As evidence of Microsoft's intention, Don Syme of Microsoft Research Cambridge just posted &lt;a href="http://blogs.msdn.com/dsyme/archive/2007/11/15/f-brought-to-you-by-luke.aspx"&gt;his welcome&lt;/a&gt; to Luke Hoban, the Program Manager for F#.&amp;nbsp; Although no promises have been made, it is useful to know that Luke was involved in the creation of C# 2005 Express Edition.&lt;br&gt;&amp;nbsp; &lt;li&gt;Over on &lt;a href="http://cs.hubfs.net/forums/default.aspx"&gt;hubFS&lt;/a&gt;, the forum for F#, there is regular discussion and advice on running F# on Mono.&amp;nbsp; That means it should not be difficult to have F# (and Moonlight, the Mono counterpart to Silverlight) running on XO.&amp;nbsp; You knew I'd end up here, right?&lt;/li&gt;&lt;/ul&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7173751-7604596668486257474?l=miser-theory.info%2Fastraendo%2Fpn%2Fdefault.asp' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/7173751/7604596668486257474/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=7173751&amp;postID=7604596668486257474' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7173751/posts/default/7604596668486257474'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7173751/posts/default/7604596668486257474'/><link rel='alternate' type='text/html' href='http://miser-theory.info/astraendo/pn/2007/11/2007-11-14-seafunc-meet-up.asp' title='2007-11-14: SeaFunc Meet-Up'/><author><name>orcmid</name><uri>http://www.blogger.com/profile/15720194709820430236</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='17038397636421592587'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7173751.post-6883388936020019405</id><published>2007-11-10T13:17:00.001-08:00</published><updated>2007-11-10T13:17:52.418-08:00</updated><title type='text'>Miser Project: Repaving Kick-Off</title><content type='html'>&lt;p&gt;&lt;/p&gt; &lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:37912731-4def-4834-b048-c679801b2062" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/Miser%20Project" rel="tag"&gt;Miser Project&lt;/a&gt;, &lt;a href="http://technorati.com/tags/site%20repaving" rel="tag"&gt;site repaving&lt;/a&gt;, &lt;a href="http://technorati.com/tags/web%20presence" rel="tag"&gt;web presence&lt;/a&gt;, &lt;a href="http://technorati.com/tags/site%20infrastructure" rel="tag"&gt;site infrastructure&lt;/a&gt;, &lt;a href="http://technorati.com/tags/Progressive%20Development" rel="tag"&gt;Progressive Development&lt;/a&gt;&lt;/div&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;I mentioned that there is an important need for housekeeping when I proposed &lt;a href="http://miser-theory.info/astraendo/pn/2007/11/whither-peano.asp"&gt;Whither Peano&lt;/a&gt;.&amp;nbsp; The site has become seriously out of step with regard to my latest approach to organization and construction.&amp;nbsp; In addition, I need to make a systematic review of the site to correct any broken links that resulted from moving to a site with case-sensitive HTTP resource names.&amp;nbsp; There must be some broken links as well as outdated material.&lt;/p&gt; &lt;p&gt;I will be repaving.&amp;nbsp; It won't have anything to do with the technical content, but it will show up as editorial changes to the content.&amp;nbsp; Also, new technical content will be provided under the new regime.&lt;/p&gt; &lt;p&gt;As repaving progresses, you will see evidence of it in the pages that you visit and especially if you happen to visit any of the &lt;a href="http://miser-theory.info/index.htm"&gt;construction structure&lt;/a&gt; of the site.&amp;nbsp;&amp;nbsp; The construction structure, as for all of my sites, has materials that account for the construction of the site itself.&amp;nbsp; One project in that material will be the repaving project.&amp;nbsp; There will be ways to see what the current stage is and also see where the changes are occurring.&lt;/p&gt; &lt;p&gt;Although it is not critical to the technical content, these changes do support the accountability, dependability, and transparency that I want to provide in every aspect of the Miser Project.&amp;nbsp; There will be occasional progress reports. &lt;/p&gt; &lt;p&gt;This activity will not inhibit the posting of more technical articles on the themes of Numbering Peano.&amp;nbsp; Sometimes I may appear to be A.W.O.L. when I am actually down in the sewers fixing the plumbing.&lt;/p&gt; &lt;hr&gt; &lt;small&gt; &lt;p&gt;The model for the updated organization is exhibited in the &lt;a href="http://odma.info/dev/"&gt;ODMdev: ActiveODMA Development Framework&lt;/a&gt; site's &lt;a href="http://odma.info/dev/index.htm"&gt;Construction Structure&lt;/a&gt;.&amp;nbsp; I shall introduce a corresponding structure and organization for the Miser Project.&lt;/p&gt; &lt;p&gt;What I call Smart Librarianship Rules apply to this change.&amp;nbsp; The idea is that, when changing a system of organization (such as a catalog system), new material (accessions) are brought in under the new scheme, with older materials converted as it becomes important, possibly because of intended new usage or updates.&amp;nbsp; Other changes are left to opportunistic treatment on a whenever-I-get-around-to-it basis.&lt;/p&gt; &lt;p&gt;The first changes provide an on-ramp for the progressive introduction of further changes.&amp;nbsp; For the Miser Project, there is urgent need to revise two major portions of the site on which most other material depends: the front porch consisting of those pages at the root of the &lt;a href="http://miser-theory.info/"&gt;http://miser-theory.info/&lt;/a&gt; URL, and the &lt;a href="http://miser-theory.info/construction/"&gt;Construction Material&lt;/a&gt; section having all of the bits used in carrying out the repaving.&amp;nbsp; The first is the anchor for expanding changes to the construction structure and the content materials requiring the next-immediate attention.&amp;nbsp; The second can be done piece-meal, but it must start out organized well enough that major disruptions in this material will not be coming later.&amp;nbsp; In particular, a document for tracking the repaving itself is maintained in the Construction Material section, which also holds templates used on pages throughout the site.&lt;/p&gt; &lt;p&gt;The first changes only deal with plumbing of the site.&amp;nbsp; Another change, after the plumbing is refitted, is to provide Creative Commons license information on the pages of the site, in the same way as done for ODMdev.&amp;nbsp; I might stick with the Attribution 2.5 for now just to have the changes be accomplished as quickly as possible.&lt;/p&gt; &lt;p&gt;Because the changes are piece-meal, there is a problem about knowing the status of changes in different parts of the site.&amp;nbsp; I also need to tell quickly where the repaving is completed.&amp;nbsp; This is accomplished by leaving placeholders in various construction structure and construction work-item pages on the site.&amp;nbsp; This is for my own sanity in noticing where there are opportunities to do a little repaving while I am working on a portion of the site, and to know that I don't have anything new to do in other places.&lt;/p&gt; &lt;p&gt;My urgency about this is my pent-up urge to create a large number of new items for Miser Project.&amp;nbsp;&amp;nbsp; I need a way to avoid rework for the new material and to accomplish the repaving while there is not so much existing material to repair.&amp;nbsp; &lt;/p&gt;&lt;/small&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7173751-6883388936020019405?l=miser-theory.info%2Fastraendo%2Fpn%2Fdefault.asp' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/7173751/6883388936020019405/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=7173751&amp;postID=6883388936020019405' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7173751/posts/default/6883388936020019405'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7173751/posts/default/6883388936020019405'/><link rel='alternate' type='text/html' href='http://miser-theory.info/astraendo/pn/2007/11/miser-project-repaving-kick-off.asp' title='Miser Project: Repaving Kick-Off'/><author><name>orcmid</name><uri>http://www.blogger.com/profile/15720194709820430236</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='17038397636421592587'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7173751.post-968227280181229767</id><published>2007-11-07T15:47:00.001-08:00</published><updated>2007-11-29T11:45:17.032-08:00</updated><title type='text'>Hark! Is That an Idiom That I See Before Me?</title><content type='html'>&lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:3b1dda70-b675-4e7a-b34d-d041abca073a" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/orcmid" rel="tag"&gt;orcmid&lt;/a&gt;, &lt;a href="http://technorati.com/tags/Miser%20Project" rel="tag"&gt;Miser Project&lt;/a&gt;, &lt;a href="http://technorati.com/tags/programming%20idioms" rel="tag"&gt;programming idioms&lt;/a&gt;, &lt;a href="http://technorati.com/tags/idioms" rel="tag"&gt;idioms&lt;/a&gt;, &lt;a href="http://technorati.com/tags/Frugalese" rel="tag"&gt;Frugalese&lt;/a&gt;, &lt;a href="http://technorati.com/tags/Alan%20Perlis" rel="tag"&gt;Alan Perlis&lt;/a&gt;&lt;/div&gt; &lt;blockquote&gt; &lt;p align="right"&gt;"Get into a rut early: Do the same processes the same way.&lt;br&gt;Accumulate idioms. Standardize. The only difference (!) between&lt;br&gt;Shakespeare and you was the size of his idiom list&lt;br&gt;- not the size of his vocabulary."&lt;br&gt;&lt;em&gt;-- &lt;a href="http://en.wikiquote.org/wiki/Alan_Perlis"&gt;Alan Perlis&lt;/a&gt;, Epigrams on Programming (1982)&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p align="left"&gt;I mentioned, in &lt;a href="http://miser-theory.info/astraendo/pn/2007/11/miser-hacks-ii-hole-to-bind-them.asp"&gt;Miser Hacks II&lt;/a&gt;, that I fancy having abundant idiomatic usage of the Miser Ob structures and the constants that elicit particular operations of the standard Miser machine.&amp;nbsp; This was my justification for having the primitive functions on obs be total in &lt;a href="http://miser-theory.info/astraendo/pn/2006/08/miser-hacks-i-floating-along-ground.asp"&gt;Miser Hacks I&lt;/a&gt;.&lt;/p&gt; &lt;p align="left"&gt;This is a desirable quality of a machine-language organization and design: having instructions and fundamental data elements that can be used in a variety of ways that allow introduction of unexpected computational flexibility.&amp;nbsp; And, as a practical development, oMiser is a synthetic computing machine.&amp;nbsp; Even though it is constructed atop a conventional digital computer platform, attention to the opportunity for valuable idioms in the "machine language" for Miser matters from the standpoint of economical expression and efficiency of operation.&amp;nbsp; &lt;/p&gt; &lt;p align="left"&gt;&lt;a href="http://en.wikipedia.org/wiki/Alan_Perlis"&gt;Alan Perlis&lt;/a&gt; woke me up to idioms in programming in a &lt;a href="http://portal.acm.org/toc.cfm?id=800136&amp;amp;type=proceeding&amp;amp;coll=portal&amp;amp;dl=ACM&amp;amp;CFID=7789624&amp;amp;CFTOKEN=70943235"&gt;conference-break&lt;/a&gt; conversation about work on APL idioms &lt;a href="http://www.cs.yale.edu/research/techreports.html#1977"&gt;reported&lt;/a&gt; with one of his students.&amp;nbsp; In this case, the language was APL, a language whose functional and operator characteristics provided an abundance (including map-reduce and others) of the kind we seek for Miser programming.&lt;/p&gt; &lt;p align="left"&gt;A common idiom, one that programmers of the earlier Fortran systems knew by heart is on the lines of the statement&lt;/p&gt; &lt;blockquote&gt; &lt;p align="left"&gt;&lt;font face="monospace"&gt;&lt;strong&gt;N = I-(I/J)*J&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p align="left"&gt;for computing the remainder of the division of &lt;font face="monospace"&gt;&lt;strong&gt;I&lt;/strong&gt;&lt;/font&gt; by J.&amp;nbsp; I'm not going to explain this beyond pointing out that it once worked in Python and it still works in C and C++ except now we have the more-explicit&lt;/p&gt; &lt;blockquote&gt; &lt;p align="left"&gt;&lt;font face="monospace"&gt;&lt;strong&gt;N = I%J;&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p align="left"&gt;There are many programming idioms and they are to be treasured.&amp;nbsp; As one can see, idioms can cost something in understandability.&amp;nbsp; Yet when you know the idiom, you can spot it's usage immediately.&amp;nbsp; One which I use regularly is&lt;/p&gt; &lt;blockquote&gt; &lt;p align="left"&gt;&lt;font face="monospace"&gt;&lt;strong&gt;(I+J-1)/J&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p align="left"&gt;for the number of containers of size &lt;font face="monospace"&gt;&lt;strong&gt;J&lt;/strong&gt;&lt;/font&gt; that are required to hold &lt;font face="monospace"&gt;&lt;strong&gt;I&lt;/strong&gt;&lt;/font&gt; objects. &lt;/p&gt; &lt;p align="left"&gt;In a way, programming-language idioms (including machine-language ones) are miniature implementation patterns for common situations.&amp;nbsp; They presage the higher-level understanding of design patterns and they are a significant element in fluency of master programmers.&lt;/p&gt; &lt;p align="left"&gt;An example of an idiom in oMiser is a common choice for representing small numbers.&amp;nbsp; In Frugalese, the structure&lt;/p&gt; &lt;blockquote&gt; &lt;p align="left"&gt;&lt;font face="monospace"&gt;&lt;strong&gt;'(ob-B ob-B ob-B ... ob-B ob-ARG)&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p align="left"&gt;where there are exactly &lt;em&gt;n&lt;/em&gt; occurrences of individual &lt;font face="monospace"&gt;&lt;strong&gt;ob-B&lt;/strong&gt;&lt;/font&gt; (with &lt;em&gt;n&lt;/em&gt; = 0 OK), is equivalent to the ob&lt;/p&gt; &lt;blockquote&gt; &lt;p align="left"&gt;&lt;strong&gt;ob.c&lt;/strong&gt;(&lt;strong&gt;&lt;font face="monospace"&gt;ob-B&lt;/font&gt;&lt;/strong&gt;, &lt;strong&gt;ob.c&lt;/strong&gt;(&lt;font face="monospace"&gt;&lt;strong&gt;ob-B&lt;/strong&gt;&lt;/font&gt;, &lt;strong&gt;ob.c&lt;/strong&gt;(&lt;font face="monospace"&gt;&lt;strong&gt;ob-B&lt;/strong&gt;&lt;/font&gt;, ... &lt;strong&gt;ob.c&lt;/strong&gt;(&lt;font face="monospace"&gt;&lt;strong&gt;ob-B&lt;/strong&gt;&lt;/font&gt;, &lt;font face="monospace"&gt;&lt;strong&gt;ob-ARG&lt;/strong&gt;&lt;/font&gt;) ... )))&lt;/p&gt;&lt;/blockquote&gt; &lt;p align="left"&gt;And that ob (called ob-&lt;em&gt;n&lt;/em&gt; for short), &lt;em&gt;taken as a program&lt;/em&gt;, has the useful result that&lt;/p&gt; &lt;blockquote&gt; &lt;p align="left"&gt;&lt;strong&gt;ob.ap&lt;/strong&gt;(ob-&lt;em&gt;n&lt;/em&gt;, &lt;em&gt;x&lt;/em&gt;) = &lt;strong&gt;ob.b&lt;/strong&gt;(&lt;strong&gt;ob.b&lt;/strong&gt;(&lt;strong&gt;ob.b&lt;/strong&gt;( ... (&lt;strong&gt;ob.b&lt;/strong&gt;(&lt;em&gt;x&lt;/em&gt;) ... )))&lt;/p&gt;&lt;/blockquote&gt; &lt;p align="left"&gt;where there are exactly &lt;em&gt;n&lt;/em&gt; &lt;strong&gt;ob.b&lt;/strong&gt; operations on the right.&amp;nbsp; For those playing along at home, here are related characteristics that are part of why it works that way: &lt;/p&gt; &lt;blockquote&gt; &lt;p align="left"&gt;&lt;strong&gt;ob.ap&lt;/strong&gt;(&lt;font face="monospace"&gt;&lt;strong&gt;ob-B&lt;/strong&gt;&lt;/font&gt;, &lt;em&gt;x&lt;/em&gt;) = &lt;strong&gt;ob.b&lt;/strong&gt;(&lt;em&gt;x&lt;/em&gt;)&lt;/p&gt; &lt;p align="left"&gt;&lt;strong&gt;ob.ap&lt;/strong&gt;(&lt;font face="monospace"&gt;&lt;strong&gt;ob-ARG&lt;/strong&gt;&lt;/font&gt;, &lt;em&gt;x&lt;/em&gt;) = &lt;em&gt;x&lt;/em&gt;&lt;/p&gt; &lt;p align="left"&gt;&lt;strong&gt;ob.ap&lt;/strong&gt;(&lt;strong&gt;ob.c&lt;/strong&gt;(&lt;em&gt;rator&lt;/em&gt;, &lt;em&gt;rand&lt;/em&gt;), &lt;em&gt;x&lt;/em&gt;) = &lt;strong&gt;ob.ev&lt;/strong&gt;[&lt;strong&gt;ob.c&lt;/strong&gt;(&lt;em&gt;rator&lt;/em&gt;, &lt;em&gt;rand&lt;/em&gt;), &lt;em&gt;x&lt;/em&gt;] &lt;strong&gt;ob.c&lt;/strong&gt;(&lt;em&gt;rator&lt;/em&gt;, &lt;em&gt;rand&lt;/em&gt;)&lt;/p&gt; &lt;p align="left"&gt;&lt;strong&gt;ob.ev&lt;/strong&gt;[&lt;em&gt;f&lt;/em&gt;, &lt;em&gt;x&lt;/em&gt;] &lt;strong&gt;ob.c&lt;/strong&gt;(&lt;em&gt;rator&lt;/em&gt;, &lt;em&gt;rand&lt;/em&gt;) = &lt;strong&gt;ob.ap&lt;/strong&gt;(&lt;strong&gt;ob.ev&lt;/strong&gt;[&lt;em&gt;f&lt;/em&gt;, &lt;em&gt;x&lt;/em&gt;] &lt;em&gt;rator&lt;/em&gt;, &lt;strong&gt;ob.ev&lt;/strong&gt;[&lt;em&gt;f&lt;/em&gt;, &lt;em&gt;x&lt;/em&gt;] &lt;em&gt;rand&lt;/em&gt;)&lt;/p&gt; &lt;p align="left"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -- where no exceptions to the above rule arise in this context&lt;/p&gt; &lt;p align="left"&gt;&lt;strong&gt;ob.ev&lt;/strong&gt;[&lt;em&gt;f&lt;/em&gt;, &lt;em&gt;x&lt;/em&gt;] &lt;font face="monospace"&gt;&lt;strong&gt;ob-B&lt;/strong&gt;&lt;/font&gt; = &lt;font face="monospace"&gt;&lt;strong&gt;ob-B&lt;/strong&gt;&lt;/font&gt;,&lt;/p&gt; &lt;p align="left"&gt;&lt;strong&gt;ob.ev&lt;/strong&gt;[&lt;em&gt;f&lt;/em&gt;, &lt;em&gt;x&lt;/em&gt;] &lt;font face="monospace"&gt;&lt;strong&gt;ob-ARG&lt;/strong&gt;&lt;/font&gt; = &lt;em&gt;x&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p align="left"&gt;[&lt;strong&gt;Update 2007-11-29:&lt;/strong&gt; I realized that the original brief sequence was a little too brief.&amp;nbsp; I added some intermediate steps and adjusted the notation a little to at least make this coherent no matter how opaque it remains.&amp;nbsp; I will provide a more-complete definition of &lt;strong&gt;ob.ap&lt;/strong&gt;(&lt;em&gt;f&lt;/em&gt;, &lt;em&gt;x&lt;/em&gt;) in a forthcoming post, and the "Frugalese" notation being used will also be unfolded in later posts.]&lt;/p&gt; &lt;p align="left"&gt;That is, the structure, ob-&lt;em&gt;n&lt;/em&gt; is a program (or a sequence) of &lt;em&gt;n&lt;/em&gt; &lt;strong&gt;ob.c&lt;/strong&gt;'s that has the effect of diminishing any ob (treated as a sequence) by removing the first &lt;em&gt;n&lt;/em&gt; beads but no more than there are.&amp;nbsp; Because all singletons have &lt;strong&gt;ob.b&lt;/strong&gt;(&lt;em&gt;x&lt;/em&gt;) = &lt;em&gt;x&lt;/em&gt;, the technique is assured not to remove a terminal singleton (such as the &lt;font face="monospace"&gt;&lt;strong&gt;ob-ARG&lt;/strong&gt;&lt;/font&gt; individual at the end of some ob-&lt;em&gt;m&lt;/em&gt;).&lt;/p&gt; &lt;p align="left"&gt;That is,&lt;/p&gt; &lt;blockquote&gt; &lt;p align="left"&gt;&lt;strong&gt;ob.ap&lt;/strong&gt;(ob-&lt;em&gt;n&lt;/em&gt;, ob-&lt;em&gt;m&lt;/em&gt;) = ob-(&lt;em&gt;m &lt;/em&gt;∸ &lt;em&gt;n&lt;/em&gt;)&lt;/p&gt;&lt;/blockquote&gt; &lt;p align="left"&gt;where &lt;em&gt;m&lt;/em&gt; ∸ &lt;em&gt;n&lt;/em&gt; (read: &lt;em&gt;m&lt;/em&gt; dot-minus &lt;em&gt;n&lt;/em&gt;) is the &lt;strong&gt;diminish operation&lt;/strong&gt; for non-negative natural numbers, resulting in max(0, &lt;em&gt;m&lt;/em&gt;-&lt;em&gt;n&lt;/em&gt;).&amp;nbsp; [Note: dot-minus is a special Unicode character that may not render in your browser.&amp;nbsp; See if it makes a difference to force the encoding to be understood as Unicode UTF-8.]&lt;/p&gt; &lt;p align="left"&gt;This is part of a Miser idiom for small numbers and using them for counting down (and decapitating obs taken as sequences).&amp;nbsp; So we will often see operations of the following sort:&lt;/p&gt; &lt;blockquote&gt; &lt;p align="left"&gt;&lt;strong&gt;ob.c&lt;/strong&gt;(&lt;font face="monospace"&gt;&lt;strong&gt;ob-B&lt;/strong&gt;&lt;/font&gt;, ob-&lt;em&gt;n&lt;/em&gt;) = ob-(&lt;em&gt;n&lt;/em&gt;+1)&lt;/p&gt; &lt;p align="left"&gt;&lt;strong&gt;ob.b&lt;/strong&gt;(ob-&lt;em&gt;n&lt;/em&gt;) = ob-(&lt;em&gt;n &lt;/em&gt;∸ 1)&lt;/p&gt;&lt;/blockquote&gt; &lt;p align="left"&gt;and constructions that are tantamount to&lt;/p&gt; &lt;blockquote&gt; &lt;p align="left"&gt;b-count-of(&lt;em&gt;x&lt;/em&gt;) &lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = &lt;font face="monospace"&gt;&lt;strong&gt;ob-ARG&lt;/strong&gt;&lt;/font&gt;, when is-singleton(&lt;em&gt;x&lt;/em&gt;)&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = &lt;strong&gt;ob.c&lt;/strong&gt;(&lt;font face="monospace"&gt;&lt;strong&gt;ob-B&lt;/strong&gt;&lt;/font&gt;, b-count-of(&lt;strong&gt;ob.b&lt;/strong&gt;(&lt;em&gt;x&lt;/em&gt;))), otherwise.&lt;/p&gt;&lt;/blockquote&gt; &lt;p align="left"&gt;When you consider how unnatural Miser is as even a machine language, it is no wonder that without little idioms that are easily reused (and Miser makes reuse amazingly easy) no programs of reasonable complexity could be created "by hand", as when creating the first programs for making writing the programs easier.&lt;/p&gt; &lt;p align="left"&gt;Because oMiser is such a rudimentary applicative system, kept that way to see how we can first comprehend and then transcend its puristic sandbox with &lt;em&gt;x&lt;/em&gt;Miser extensions, it is appropriate to end with another Perlis epigram (but not the last word on the subject):&lt;/p&gt; &lt;p align="right"&gt;"Purely applicative languages are poorly applicable."&lt;/p&gt; &lt;hr&gt; &lt;small&gt; &lt;p align="left"&gt;[&lt;strong&gt;update 2007-11-29:&lt;/strong&gt; I added some intermediate steps in the ob.ap process so that the evaluation of an ob-&lt;em&gt;n &lt;/em&gt;application can be followed, although the unfamiliarity of the Frugalese notation may take some giving up of preconceptions about how to read these formulas.&amp;nbsp; I have to reread them regularly to remind myself that I got it right, and that is what led to this "improvement."&amp;nbsp; I also tweaked one of my sentences about the value of idioms, because I was here and I could.]&lt;/p&gt; &lt;p align="left"&gt;&lt;/p&gt;&lt;/small&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7173751-968227280181229767?l=miser-theory.info%2Fastraendo%2Fpn%2Fdefault.asp' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/7173751/968227280181229767/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=7173751&amp;postID=968227280181229767' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7173751/posts/default/968227280181229767'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7173751/posts/default/968227280181229767'/><link rel='alternate' type='text/html' href='http://miser-theory.info/astraendo/pn/2007/11/hark-is-that-idiom-that-i-see-before-me.asp' title='Hark! Is That an Idiom That I See Before Me?'/><author><name>orcmid</name><uri>http://www.blogger.com/profile/15720194709820430236</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='17038397636421592587'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7173751.post-2712363853930281261</id><published>2007-11-05T16:41:00.001-08:00</published><updated>2007-11-10T13:23:34.975-08:00</updated><title type='text'>Whither Peano?</title><content type='html'>&lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:0c67ee75-054e-43d4-ad72-91db2c6cae4b" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/Miser%20Project" rel="tag"&gt;Miser Project&lt;/a&gt;, &lt;a href="http://technorati.com/tags/Numbering%20Peano" rel="tag"&gt;Numbering Peano&lt;/a&gt;, &lt;a href="http://technorati.com/tags/SeaFunc" rel="tag"&gt;SeaFunc&lt;/a&gt;, &lt;a href="http://technorati.com/tags/Chris%20Diggins" rel="tag"&gt;Chris Diggins&lt;/a&gt;, &lt;a href="http://technorati.com/tags/Charles%20Petzold" rel="tag"&gt;Charles Petzold&lt;/a&gt;, &lt;a href="http://technorati.com/tags/Computer%20Science" rel="tag"&gt;Computer Science&lt;/a&gt;, &lt;a href="http://technorati.com/tags/Functional%20Programming" rel="tag"&gt;Functional Programming&lt;/a&gt;, &lt;a href="http://technorati.com/tags/Computation%20Theory" rel="tag"&gt;Computation Theory&lt;/a&gt;, &lt;a href="http://technorati.com/tags/Henry%20Baker" rel="tag"&gt;Henry Baker&lt;/a&gt;, &lt;a href="http://technorati.com/tags/Chicken%20Scheme" rel="tag"&gt;Chicken Scheme&lt;/a&gt;&lt;/div&gt; &lt;p&gt;I have been very neglectful of Numbering Peano and the other elements of the Miser Project. Although I continue to make notes and follow other activities, I am much too silent and there is no velocity to the work. &lt;/p&gt; &lt;p&gt;I also have other commitments, and those are challenging for me, even though they will train me when it comes time to lay down some code for a reference implementation or three of the Miser engine. I trust that the heavy lifting done there, on practical middleware and its deployment, will provide for a sound implementation of distributed-Miser operation.&lt;/p&gt; &lt;h3&gt;A Renaissance&lt;/h3&gt; &lt;p&gt;Amid all of that, it is the Miser Project that arouses my passion, even if only for episodes connected to inspiration generated through interactions over the work of others. Charles Petzold's &lt;em&gt;&lt;/em&gt;&lt;a href="http://miser-theory.info/astraendo/pn/2007/11/petzold-annotates-turing.asp"&gt;Annotated Turing announcement&lt;/a&gt; has been one of those inspiring situations. I intend to take that as a lever for re-launching activity on Miser and visibility on Numbering Peano.&lt;/p&gt; &lt;p&gt;How will I balance that? Every day, the Miser Project will be my after-dinner dessert. It is my reward for completing my other commitments and re-energizing with attention to the Miser Project. I don't know if there will always be visible output, but my intention is that there will be some sort of post almost daily. Sometimes the posts aren't here but on a blog, such as &lt;a href="http://orcmid.com/BlunderDome/clueless"&gt;Professor von Clueless&lt;/a&gt;, or on a site such as &lt;a href="http://trosting.org/"&gt;TROST&lt;/a&gt; or &lt;strong&gt;&lt;em&gt;&lt;a href="http://nfoware.com/"&gt;nfoWare&lt;/a&gt;&lt;/em&gt;&lt;/strong&gt;. However it shows up, it will be building toward delivery of working &lt;a href="http://miser-theory.info/"&gt;Miser Project&lt;/a&gt; software. &lt;/p&gt; &lt;p&gt;I notice that the sand runs out of my hour glass in the evening and I don't have the energy for some of my other commitments. Yet work on the Miser Project is, at this point, energizing. When it ceases to be inspiring and energizing I will re-assess how to maintain the momentum. There are parts that are difficult for me and I will need to be sharp and alert to work on them. That will probably require some fresh-faced morning-hour concentration. I will adapt.&lt;/p&gt; &lt;h3&gt;Housekeeping&lt;/h3&gt; &lt;p&gt;There are some housekeeping chores that need to be done here. The bits of the site, and the blog too, have some dry rot and repairs are required. Some of this is related to a change of hosting services which, along with big improvements and great economy, introduce case-sensitive folder and resource (web-page) names.&amp;nbsp; &lt;em&gt;See also&lt;/em&gt;, 2007-11-10 &lt;a href="http://miser-theory.info/astraendo/pn/2007/11/miser-project-repaving-kick-off.asp"&gt;Miser Project: Repaving Kick-Off&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;I need to be diligent about the housekeeping so that the site works with all of the refinements that I have learned and developed on sites that are more current. I want to get that done here while the amount of material is modest. Ultimately, the housekeeping will spill over to my &lt;a href="http://orcmid.com/"&gt;Orcmid's Lair&lt;/a&gt; site, since my bibliographic compilations are there. Those have been neglected too, especially regarding materials on mathematical logic and programming systems, especially functional-programming.&lt;/p&gt; &lt;p&gt;Some related housekeeping involves uploading photographs from events that are connected to the work here. &lt;/p&gt; &lt;h3&gt;Focus on Content&lt;/h3&gt; &lt;p&gt;Speaking of bit rot, the &lt;a href="http://miser-theory.info/sketch/osketch.htm"&gt;oMiser Sketch&lt;/a&gt; is in terrible shape and there are some serious errors in the content, ones that will derail a newcomer to the material. I have also refined my ideas about some parts, and that is being reflected in posts here. But it is time to merge all of my pent-up changes into a refactored, simplified sketch. That will also involve moving material to sections of the site where it can be given focused treatment and expanded supporting development. The idea is that the sketch will shrink to sketch-sized digestible material as an appropriate overview of material that is expanded elsewhere.&lt;/p&gt; &lt;p&gt;I also want to start merging in references to related material, attention to other blogs and work such as that of Christopher Diggins on his cat language and his provision of interesting tools. It will also be interesting to get to the point where I can adapt Henry Baker's Cheney copy technique as it is incorporated in Chicken Scheme, returning me to techniques first explored in the original Heathkit H-8 demonstration of a prototypical Miser implementation almost 25 years ago. These are all pent-up affections that I need to channel along with many of the additional ideas that arise each time I expand on any single one of them. My job jar is already larger just because I finally set down an account of &lt;a href="http://miser-theory.info/astraendo/pn/2007/11/miser-hacks-ii-hole-to-bind-them.asp"&gt;Miser Hacks II&lt;/a&gt;.&lt;/p&gt; &lt;h3&gt;But What About Numbering Peano?&lt;/h3&gt; &lt;p&gt;The last hints about the original inspiration for this blog were published in 2004:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;a href="http://miser-theory.info/astraendo/pn/2004/10/compiling-numjava-01x.asp"&gt;Compiling &lt;span style="font-family: monospace"&gt;Num.java&lt;/span&gt; 0.1x&lt;/a&gt; (2004-10-06) I have much more proficiency with Java now and I need to pick up the demonstration again.  &lt;li&gt;&lt;a href="http://miser-theory.info/astraendo/pn/2004/06/fine-kettle-of-fish.asp"&gt;A Fine Kettle of Fish&lt;/a&gt; (2004-06-05) I also have a "specification" of &lt;span style="font-family: monospace"&gt;&lt;strong&gt;Num.java&lt;/strong&gt;&lt;/span&gt; that nails down the contract and also ties it to the Peano axioms for arithmetic. &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;There is more to be done here, especially without wending such a turtuous route. The idea is to make a very simple demonstration of how we are able to manifest abstractions in the behavior of computer programs, and how interface contracts support that. There is much to be learned from this simple example and its progressive development, and I won't resist the opportunity to resurrect it for very long.&lt;/p&gt; &lt;h3&gt;And Focus, How About Focus?&lt;/h3&gt; &lt;p&gt;This blog has been a catchall for abstraction- and computation-theoretical material in an odd combination. I don't mind that so much. There is room under the &lt;span style="font-family: monospace"&gt;&lt;strong&gt;&lt;a href="http://miser-theory.info/astraendo"&gt;/astraendo&lt;/a&gt;&lt;/strong&gt;&lt;/span&gt; marquee for other blogs beside &lt;em&gt;Numbering Peano&lt;/em&gt;. I can imagine ones for &lt;span style="font-family: monospace"&gt;&lt;strong&gt;/Turing&lt;/strong&gt;&lt;/span&gt;, &lt;span style="font-family: monospace"&gt;&lt;strong&gt;/Church&lt;/strong&gt;&lt;/span&gt; (maybe), and &lt;span style="font-family: monospace"&gt;&lt;strong&gt;/Gödel&lt;/strong&gt;&lt;/span&gt;, as peer branches for Peano (here, &lt;span style="font-family: monospace"&gt;&lt;strong&gt;/pn&lt;/strong&gt;&lt;/span&gt;). There could even be a wiki or two. I'm not in a hurry about any of that.&lt;/p&gt; &lt;hr&gt; &lt;small&gt; &lt;p&gt;[&lt;strong&gt;update 2007-11-10&lt;/strong&gt;: I added a link to the just-starting repaving activity in the Housekeeping discussion.]&lt;/p&gt;&lt;/small&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7173751-2712363853930281261?l=miser-theory.info%2Fastraendo%2Fpn%2Fdefault.asp' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/7173751/2712363853930281261/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=7173751&amp;postID=2712363853930281261' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7173751/posts/default/2712363853930281261'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7173751/posts/default/2712363853930281261'/><link rel='alternate' type='text/html' href='http://miser-theory.info/astraendo/pn/2007/11/whither-peano.asp' title='Whither Peano?'/><author><name>orcmid</name><uri>http://www.blogger.com/profile/15720194709820430236</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='17038397636421592587'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7173751.post-3737703940697183152</id><published>2007-11-04T21:28:00.001-08:00</published><updated>2007-11-12T12:58:54.782-08:00</updated><title type='text'>Miser Hacks II: A Hole to Bind Them</title><content type='html'>&lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:d5fe8145-5c13-4cce-807a-77112376355a" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/orcmid" rel="tag"&gt;orcmid&lt;/a&gt;, &lt;a href="http://technorati.com/tags/Andrew%20Appel" rel="tag"&gt;Andrew Appel&lt;/a&gt;, &lt;a href="http://technorati.com/tags/FLoC2006" rel="tag"&gt;FLoC2006&lt;/a&gt;, &lt;a href="http://technorati.com/tags/Miser" rel="tag"&gt;Miser&lt;/a&gt;, &lt;a href="http://technorati.com/tags/Lisp" rel="tag"&gt;Lisp&lt;/a&gt;, &lt;a href="http://technorati.com/tags/primitive%20operations" rel="tag"&gt;primitive operations&lt;/a&gt;, &lt;a href="http://technorati.com/tags/computational%20model" rel="tag"&gt;computational model&lt;/a&gt;, &lt;a href="http://technorati.com/tags/abstract%20data" rel="tag"&gt;abstract data&lt;/a&gt;, &lt;a href="http://technorati.com/tags/array%20theory" rel="tag"&gt;array theory&lt;/a&gt;, &lt;a href="http://technorati.com/tags/axiomatic%20data%20structures" rel="tag"&gt;axiomatic data structures&lt;/a&gt;, &lt;a href="http://technorati.com/tags/Trenchard%20More" rel="tag"&gt;Trenchard More&lt;/a&gt;&lt;/div&gt; &lt;h3&gt;Context&lt;/h3&gt; &lt;p&gt;In &lt;a href="http://miser-theory.info/astraendo/pn/2006/08/miser-hacks-i-floating-along-ground.asp"&gt;Miser Hacks I: Floating Along the Ground&lt;/a&gt; (2006-08-21), I described how the Miser Ob data type has an equivalent structure to the fundamental data structure of Lisp.&amp;nbsp; &lt;/p&gt; &lt;p&gt;Lisp has a supply of atoms, the cons[&lt;em&gt;x&lt;/em&gt;;&lt;em&gt;y&lt;/em&gt;] pair operation, and the access functions car[&lt;em&gt;z&lt;/em&gt;] and cdr[&lt;em&gt;z&lt;/em&gt;].&amp;nbsp; &lt;/p&gt; &lt;p&gt;In Lisp, the structure is completed by equal[&lt;em&gt;x&lt;/em&gt;;&lt;em&gt;y&lt;/em&gt;] and by atom[&lt;em&gt;x&lt;/em&gt;], the "oracle" that informs us when some &lt;em&gt;z&lt;/em&gt; is not a cons[&lt;em&gt;x&lt;/em&gt;;&lt;em&gt;y&lt;/em&gt;] and for which car[&lt;em&gt;z&lt;/em&gt;] and cdr[&lt;em&gt;z&lt;/em&gt;] are consequently undefined (and, in modern implementations, these are invalid operations).&amp;nbsp; Lisp is defined with another oracular operation, eq[&lt;em&gt;x&lt;/em&gt;;&lt;em&gt;y&lt;/em&gt;] that for atoms, reports whether or not &lt;em&gt;x&lt;/em&gt; and &lt;em&gt;y&lt;/em&gt; are determined to be the same atom (or not).&lt;/p&gt; &lt;p&gt;Lisp is computationally universal and profoundly interesting by virtue of a specified universal function by which all computable functions on these structures can be carried out using programs coded in such structures.&lt;/p&gt; &lt;p&gt;Miser uses a similar approach, having a supply of individuals and corresponding functions &lt;strong&gt;ob.c&lt;/strong&gt;(x, y), &lt;strong&gt;ob.a&lt;/strong&gt;(z), and &lt;strong&gt;ob.b&lt;/strong&gt;(z), with "=" for equality among obs.&amp;nbsp; (There is a function &lt;strong&gt;ob.d&lt;/strong&gt;(&lt;em&gt;x&lt;/em&gt;, &lt;em&gt;y&lt;/em&gt;) that determines equality/inequality within the computational model of the system.&amp;nbsp; That is different than "=" since there are no obs that are recognized as true/false although there are idioms that tend to serve that purpose.&amp;nbsp; That's another hack to be described, and it is an elegant one although I once muddied it by adding more hack than needed.) &lt;/p&gt; &lt;h3&gt;The Story So Far&lt;/h3&gt; &lt;p&gt;For Miser Ob, the functions &lt;strong&gt;ob.a&lt;/strong&gt; and &lt;strong&gt;ob.b&lt;/strong&gt; are &lt;em&gt;total&lt;/em&gt;.&amp;nbsp; Whether or not ob &lt;em&gt;z&lt;/em&gt; can be formed by some &lt;strong&gt;ob.c&lt;/strong&gt;(&lt;em&gt;x&lt;/em&gt;,&lt;em&gt;y&lt;/em&gt;), &lt;strong&gt;ob.a&lt;/strong&gt;(&lt;em&gt;z&lt;/em&gt;) and &lt;strong&gt;ob.b&lt;/strong&gt;(&lt;em&gt;z&lt;/em&gt;) always determine obs.&amp;nbsp; The Miser individual is the counterpart of the Lisp atom.&amp;nbsp; It is the case that &lt;em&gt;z&lt;/em&gt; is an individual if and only if &lt;strong&gt;ob.a&lt;/strong&gt;(&lt;em&gt;z&lt;/em&gt;) = &lt;em&gt;z&lt;/em&gt;.&amp;nbsp;&amp;nbsp; Technically, the oracular power necessary to distinguish atoms has been moved entirely to "=" in Miser.&amp;nbsp; This works because it is impossible, in Miser, that there be any &lt;em&gt;z&lt;/em&gt; such that &lt;strong&gt;ob.c&lt;/strong&gt;(&lt;em&gt;z&lt;/em&gt;, &lt;em&gt;x&lt;/em&gt;) = &lt;em&gt;z&lt;/em&gt;, even when &lt;strong&gt;ob.a&lt;/strong&gt;(&lt;em&gt;z&lt;/em&gt;)&amp;nbsp; = &lt;em&gt;z&lt;/em&gt;.&amp;nbsp; So we can &lt;em&gt;define&lt;/em&gt; our equivalent of atom[&lt;em&gt;z&lt;/em&gt;] as simply&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;is-individual(&lt;em&gt;z&lt;/em&gt;) = (&lt;em&gt;z&lt;/em&gt; = &lt;strong&gt;ob.a&lt;/strong&gt;(&lt;em&gt;z&lt;/em&gt;))&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;If is-individual(&lt;em&gt;z&lt;/em&gt;), it is also the case that &lt;em&gt;z&lt;/em&gt; = &lt;strong&gt;ob.b&lt;/strong&gt;(&lt;em&gt;z&lt;/em&gt;), but &lt;em&gt;z &lt;/em&gt;= &lt;strong&gt;ob.a&lt;/strong&gt;(&lt;em&gt;z&lt;/em&gt;) is sufficient to discriminate all individuals.&lt;/p&gt; &lt;p&gt;In Miser Hacks I, I argued that having a structural distinction that discriminates atoms (i.e., individuals) entirely within the system is no more of a problem than having to condition certain statements and derivations depending on the presence of atoms.&amp;nbsp;&amp;nbsp; The guarding of deductions about Miser with is-individual conditions is no different than the need to be guarded with atom conditions in Lisp.&lt;/p&gt; &lt;h3&gt;Clinging to Idioms&lt;/h3&gt; &lt;p&gt;I claim that having structural features for discrimination is advantageous in the ease with which useful idioms become available, idioms that don't require us to have to be cautious against performance of undefined or invalid operations.&amp;nbsp; So I am clinging to this idiomatic power in Miser.&amp;nbsp; There will be many manifestations of such idioms.&lt;/p&gt; &lt;p&gt;An example of an idiomatic usage of Lisp is in the notion of list.&amp;nbsp; In pure Lisp with no additional types (pretty much ditto for oMiser), there are only atoms and cons pairs.&amp;nbsp; The fundamental data structure is a binary tree.&amp;nbsp; (We ignore the prospect of cycles among cons-pairs, permitted in Lisp but impossible in Miser.)&amp;nbsp; The representation of lists in Lisp is by transiting the cdr-path all the way until an atom (the &lt;font face="monospace"&gt;&lt;strong&gt;NUL&lt;/strong&gt;&lt;/font&gt;) is reached.&amp;nbsp; At each point, starting with the whole list, and excluding the terminal atom, the list elements are the car-values at each cons-pair node along that cdr-taken path.&amp;nbsp; That is so useful it is the default sense of the Lisp data structure in common usage.&amp;nbsp; It is the typical representation of Lisp symbolic expressions (SEXPRs).&lt;/p&gt; &lt;h3&gt;Singletons and Enclosures&lt;/h3&gt; &lt;p&gt;In my preference for idiomatic cases and my yearning for additional representation opportunities, I take advantage of another &lt;em&gt;structural&lt;/em&gt; distinction in defining the Miser Ob structure.&amp;nbsp; &lt;/p&gt; &lt;p&gt;&lt;img height="219" alt="The permitted forms of Miser obs can be regarded as views into concrete storage structures implemented using pointers.  The cells that point to themselves must be created that way, and there is no other way in which apparent cycles are allowed." src="http://miser-theory.info/notes/2002/06/N020600f5.png" width="254" align="left" border="0"&gt;&lt;strong&gt;Singletons&lt;/strong&gt;.&amp;nbsp; Any ob, z, for which &lt;strong&gt;ob.b&lt;/strong&gt;(&lt;em&gt;z&lt;/em&gt;) = z is a &lt;em&gt;singleton&lt;/em&gt;.&amp;nbsp; &lt;/p&gt; &lt;p&gt;Individuals are singletons. In the diagram, the ob identified as &lt;em&gt;x&lt;/em&gt; and found at both &lt;strong&gt;ob.a&lt;/strong&gt;(&lt;em&gt;z&lt;/em&gt;) and &lt;strong&gt;ob.a&lt;/strong&gt;(&lt;strong&gt;ob.b&lt;/strong&gt;(&lt;em&gt;z&lt;/em&gt;)) is an individual and a singleton.&amp;nbsp; This is a structural quality.&amp;nbsp; The names chosen for these qualities has to do with an intended usage, but it is not necessitated by the structure.&amp;nbsp; So we are fashioning idioms and metaphors already. &lt;/p&gt; &lt;p&gt;&lt;strong&gt;Enclosures&lt;/strong&gt;.&amp;nbsp; The other kind of singleton is an &lt;em&gt;enclosure&lt;/em&gt;.&amp;nbsp; An enclosure satisfies the condition&lt;/p&gt; &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; is-enclosure(&lt;em&gt;z&lt;/em&gt;) = is-singleton(&lt;em&gt;z&lt;/em&gt;) &lt;strong&gt;and not&lt;/strong&gt; is-individual(&lt;em&gt;z&lt;/em&gt;)&lt;/p&gt; &lt;p&gt;where is-singleton(&lt;em&gt;z&lt;/em&gt;) = (&lt;strong&gt;ob.b&lt;/strong&gt;(&lt;em&gt;z&lt;/em&gt;) = &lt;em&gt;z&lt;/em&gt;)&lt;/p&gt; &lt;p&gt;as expected.&amp;nbsp; In the diagram, &lt;strong&gt;ob.b&lt;/strong&gt;(&lt;em&gt;z&lt;/em&gt;) is the enclosure, &lt;em&gt;y&lt;/em&gt;, defined as &lt;strong&gt;ob.e&lt;/strong&gt;(&lt;em&gt;x&lt;/em&gt;).&lt;/p&gt; &lt;p&gt;Now, just as for individuals, it is impossible for there to be an &lt;strong&gt;ob.c&lt;/strong&gt;(&lt;em&gt;x&lt;/em&gt;, &lt;em&gt;y&lt;/em&gt;) such that &lt;strike&gt;&lt;strong&gt;ob.b&lt;/strong&gt;(&lt;strong&gt;ob.c&lt;/strong&gt;(&lt;em&gt;x&lt;/em&gt;, &lt;em&gt;y&lt;/em&gt;)) = &lt;em&gt;y&lt;/em&gt;&lt;/strike&gt; &lt;strong&gt;ob.c&lt;/strong&gt;(&lt;em&gt;x&lt;/em&gt;, y) = &lt;strong&gt;ob.e&lt;/strong&gt;(&lt;em&gt;x&lt;/em&gt;).&amp;nbsp; It can't happen that &lt;strong&gt;ob.b&lt;/strong&gt;(&lt;strong&gt;ob.c&lt;/strong&gt;(&lt;em&gt;x&lt;/em&gt;, &lt;em&gt;y&lt;/em&gt;)) = &lt;strong&gt;ob.c&lt;/strong&gt;(&lt;em&gt;x&lt;/em&gt;, &lt;em&gt;y&lt;/em&gt;) ever.&amp;nbsp; That means in theory it is impossible and in practice it is forbidden and prevented: there is no way to achieve such a situation with a Miser computation.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Making enclosures with ob.e&lt;/strong&gt;.&amp;nbsp; We've managed to finesse where individuals come from (there being guaranteed to be at least one, designated &lt;font face="monospace"&gt;&lt;strong&gt;ob-null&lt;/strong&gt;&lt;/font&gt;), and here comes a completely-separate breed of ob.&amp;nbsp; The Miser function &lt;strong&gt;ob.e&lt;/strong&gt;(&lt;em&gt;x&lt;/em&gt;) takes any ob and provides an enclosure of it.&amp;nbsp; That is,&amp;nbsp; &lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;strong&gt;ob.b&lt;/strong&gt;(&lt;strong&gt;ob.e&lt;/strong&gt;(&lt;em&gt;x&lt;/em&gt;)) = &lt;strong&gt;ob.e&lt;/strong&gt;(&lt;em&gt;x&lt;/em&gt;),&amp;nbsp; &lt;strong&gt;ob.a&lt;/strong&gt;(&lt;strong&gt;ob.e&lt;/strong&gt;(&lt;em&gt;x&lt;/em&gt;)) = &lt;em&gt;x&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;blockquote&gt; &lt;p&gt;and&amp;nbsp;&amp;nbsp; &lt;strong&gt;ob.e&lt;/strong&gt;(&lt;em&gt;x&lt;/em&gt;) = &lt;strong&gt;ob.e&lt;/strong&gt;(&lt;em&gt;y&lt;/em&gt;) if and only if &lt;em&gt;x&lt;/em&gt; = &lt;em&gt;y&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Idiomatically, an ob enclosure can be viewed as a container that wraps up an ob and distinguishes it as a singleton.&amp;nbsp; One might choose to use it, in a Miser application, as a way to separate out enclosures for treatments like individuals rather than a continuation of some represented data structure, such as a tree or a list.&amp;nbsp; Also, notice how one might consider to treat individuals as literals: singletons that enclose themselves (metaphorically of course: no individual is an enclosure).&lt;/p&gt; &lt;p&gt;The use of enclosures for various practical purposes is not determined by the the Ob-structure theory.&lt;/p&gt; &lt;h3&gt;Enclosures as Quotations&lt;/h3&gt; &lt;p&gt;There is a place where enclosures (and individuals and &lt;strong&gt;ob.c&lt;/strong&gt; constructions) are interpreted in a particular way.&amp;nbsp; That is in the context of the standard oMiser universal function.&amp;nbsp; That function, &lt;strong&gt;ob.ap&lt;/strong&gt;(&lt;em&gt;f&lt;/em&gt;, &lt;em&gt;x&lt;/em&gt;), and its companion, &lt;strong&gt;ob.ev&lt;/strong&gt;(&lt;em&gt;f&lt;/em&gt;, &lt;em&gt;x&lt;/em&gt;, &lt;em&gt;p&lt;/em&gt;), treat enclosures as quotations.&amp;nbsp; &lt;strong&gt;ob.e&lt;/strong&gt;(&lt;em&gt;x&lt;/em&gt;) is Miser's structural counterpart to the Lisp use of cons[&lt;font face="monospace"&gt;&lt;strong&gt;QUOTE&lt;/strong&gt;&lt;/font&gt;; &lt;em&gt;x&lt;/em&gt;] in the standard Lisp universal function.&lt;/p&gt; &lt;p&gt;To illustrate (but not explain) how this works for Miser, &lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;strong&gt;ob.ap&lt;/strong&gt;(&lt;strong&gt;ob.e&lt;/strong&gt;(&lt;em&gt;k&lt;/em&gt;), &lt;em&gt;x&lt;/em&gt;) = &lt;em&gt;k&lt;/em&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; but&amp;nbsp; &lt;strong&gt;ob.ap&lt;/strong&gt;(&lt;strong&gt;ob.c&lt;/strong&gt;(&lt;em&gt;m&lt;/em&gt;, &lt;em&gt;n&lt;/em&gt;), &lt;em&gt;x&lt;/em&gt;) = &lt;strong&gt;ob.ev&lt;/strong&gt;(&lt;strong&gt;ob.c&lt;/strong&gt;(&lt;em&gt;m&lt;/em&gt;, &lt;em&gt;n&lt;/em&gt;), x, &lt;strong&gt;ob.c&lt;/strong&gt;(&lt;em&gt;m&lt;/em&gt;, &lt;em&gt;n&lt;/em&gt;))&lt;/p&gt; &lt;p&gt;&lt;strong&gt;ob.ev&lt;/strong&gt;(&lt;em&gt;f&lt;/em&gt;, &lt;em&gt;x&lt;/em&gt;, &lt;strong&gt;ob.e&lt;/strong&gt;(&lt;em&gt;k&lt;/em&gt;)) = &lt;em&gt;k&lt;/em&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; but&amp;nbsp; &lt;strong&gt;ob.ev&lt;/strong&gt;(&lt;em&gt;f&lt;/em&gt;, &lt;em&gt;x&lt;/em&gt;, &lt;strong&gt;ob.c&lt;/strong&gt;(&lt;em&gt;s&lt;/em&gt;, &lt;em&gt;t&lt;/em&gt;)) = &lt;strong&gt;ob.ap&lt;/strong&gt;(&lt;strong&gt;ob.ev&lt;/strong&gt;(&lt;em&gt;f&lt;/em&gt;, &lt;em&gt;x&lt;/em&gt;, &lt;em&gt;s&lt;/em&gt;), &lt;strong&gt;ob.ev&lt;/strong&gt;(&lt;em&gt;f&lt;/em&gt;, &lt;em&gt;x&lt;/em&gt;, &lt;em&gt;t&lt;/em&gt;))&lt;/p&gt; &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [ignoring the few cases when &lt;em&gt;s &lt;/em&gt;is an individual that marks occurrence of a special operation]&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Other features of oMiser and the Frugal processor (which provides a way to input and operate Miser programs) reinforce the enclosure-as-quotation interpretation.&amp;nbsp;&amp;nbsp; It is not the only interpretation, any more than a Lisp occurrence of the &lt;font face="monospace"&gt;&lt;strong&gt;QUOTE&lt;/strong&gt;&lt;/font&gt; atom is compelled to have anything to do with quotation in the context of the Lisp universal function.&amp;nbsp; &lt;/p&gt; &lt;p&gt;It is very handy to have a structural form of quotation that is completely separate from the use of atoms or individuals as markers.&amp;nbsp; The use of enclosures in Miser accomplishes that.&amp;nbsp; There will also be use of distinct individuals as special markers in &lt;strong&gt;ob.ev&lt;/strong&gt; operation but those hacks come up later.&amp;nbsp; Other markers are introduced in &lt;em&gt;ad hoc&lt;/em&gt; conventions such as ones for ascribing types to enclosures.&amp;nbsp; Those practices are unrelated to the definition of the universal oMiser function and the axiomatic theory of ob structures.&lt;/p&gt; &lt;h3&gt;Justifying the Hack&lt;/h3&gt; &lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;The main purpose of enclosures is to provide a structural mechanism that is easily used to control the depth to which various procedures intrude into the structure of an ob (&lt;strong&gt;ob.ap&lt;/strong&gt; and &lt;strong&gt;ob.ev&lt;/strong&gt; procedures being two examples).&amp;nbsp; Enclosures are a simple, primitive device that supports this need for quotation by structural means along.&lt;/p&gt; &lt;p&gt;There is precedent for a structural quotation feature.&amp;nbsp; It matters in array theory where one wants sub-arrays or sub-something as elements of the arrays that contain them.&amp;nbsp; In this respect, the Miser nomenclature around individuals and singletons honors the array-theory work of Trenchard More.&amp;nbsp; &lt;/p&gt; &lt;p&gt;Another precedent, and the one that I learned first, has to do with stratified strings:&amp;nbsp; strings that can have strings as their individual "beads."&amp;nbsp; This sort of string was defined for ALGOL 60, which introduced a notation for strings as elements (not sub-strings) of containing strings.&amp;nbsp; Although the mechanism did not survive ALGOL 60 where it was seriously under-developed, it offered an existence case for an use of quotation to make string elements out of entire strings.&lt;/p&gt; &lt;p&gt;Christopher Strachey developed a general-purpose macro processor (affectionately known as McG in one implementation) that relied upon stratified strings in a way quite similar to the use of enclosure in the Miser universal function.&amp;nbsp; It was recognition of an omission that prevented universality over such strings that started me on the road that led to the current formulation of oMiser.&lt;/p&gt; &lt;p&gt;Finally, it is useful in theory-focused settings to notice that introduction of enclosures does not in any way extend the cardinality of Ob, the set of all obs.&amp;nbsp; That is, Ob with enclosures is just as denumerable as Ob without them.&amp;nbsp; In this sense, enclosures do not add any inherent power to Miser, yet they simplify the expression of certain kinds of data representations and provide a simpler expression of a universal function.&amp;nbsp; The way that this miniature feature facilitates expressiveness is an useful subject of study and analysis.&lt;/p&gt; &lt;p&gt;Finally, as you can tell, I am infatuated with this feature and will not surrender it lightly.&amp;nbsp; There are enclosures and they harmonize in the play of singletons and individuals and obs composed via &lt;strong&gt;ob.c&lt;/strong&gt;.&amp;nbsp; I like it that way.&lt;/p&gt; &lt;h3&gt;Gone Too Far Yet?&lt;/h3&gt; &lt;p&gt;What has me look at enclosure as a Miser &lt;em&gt;hack&lt;/em&gt; is the degree to which their possibility complicates reasoning about ob structures, the concern that Andrew Appel raised over having &lt;strong&gt;ob.a&lt;/strong&gt; and &lt;strong&gt;ob.b&lt;/strong&gt; be total and defined on individuals.&amp;nbsp; I don't think it complicates reasoning about the universal function much at all.&amp;nbsp; It singles out quotation for the added attention I think it deserves, and however quotation is handled (such as in Lisp) it has to be singled out in the universal function.&amp;nbsp; It is the means by which data is embedded in procedure embedded in data embedded in ... , and it demonstrates that quite simply.&amp;nbsp; Since this is a fundamental matter in computing and its quasi-linguistic character, enclosures seem like an useful idea.&lt;/p&gt; &lt;p&gt;The introduction of enclosures does add cases that must be accounted for in the low-level derivation of proofs about algorithms on obs and the correctness of representations of one kind or another.&amp;nbsp; I haven't found that to be a problem at the low-level so far.&amp;nbsp; I expect that, when one moves up to higher levels of abstraction, any complication due to enclosures becomes irrelevant and disappears.&amp;nbsp; I am open to challenge as I move along.&amp;nbsp; I would be surprised to have to abandon enclosures at some future time.&lt;/p&gt; &lt;h3&gt;But Wait, There's More!&lt;/h3&gt; &lt;p&gt;There is another hack that qualifies for my ugliest language-theory hack ever.&amp;nbsp; I was proud of that one too until I found the counter-example that defeated the whole enterprise.&amp;nbsp; To show that I am not totally unwilling to reconsider my pet features, I'll show you the hack I'm too embarrassed to keep around even though no substitute is particularly pleasant.&lt;/p&gt; &lt;p&gt;Stay tuned ...&lt;/p&gt; &lt;hr&gt; &lt;small&gt; &lt;p&gt;I know it's been a long time since Miser Hack I and the inspiration that I took out of FLoC 2006 and the subsequent ICFP 2006 in Portland, Oregon.&amp;nbsp; I have been working along silently and infrequently.&amp;nbsp; Meanwhile, I on a different commitment unrelated to functional programming and applicative systems such as Miser.&amp;nbsp; Some of that work is useful as preparation for a Miser implementation.&amp;nbsp; I think I have found an appropriate way to break out of my silence and proceed in parallel with that other work.&lt;/p&gt; &lt;p&gt;This break in my prolonged silence was inspired by &lt;a href="http://www.charlespetzold.com/blog/2007/11/040721.html"&gt;Charles Petzold's announcement&lt;/a&gt; of his forthcoming book, &lt;em&gt;The Annotated Turing&lt;/em&gt;.&amp;nbsp; Without knowing anything about how that work will unfold, I feel kinship with the spirit of that effort and this is my offering from the chorus, uh ... peanut gallery, oh uh ... rooting section.&lt;/p&gt; &lt;p&gt;[&lt;strong&gt;update 2007-11-12&lt;/strong&gt; There is a completely incorrect and misleading statement that I had to repair.&amp;nbsp; I have stricken out the bogus statement and replaced it with an appropriate one around how no &lt;strong&gt;ob.c&lt;/strong&gt;(&lt;em&gt;x&lt;/em&gt;, &lt;em&gt;y&lt;/em&gt;) can ever be a singleton.]&lt;/p&gt;&lt;/small&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7173751-3737703940697183152?l=miser-theory.info%2Fastraendo%2Fpn%2Fdefault.asp' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/7173751/3737703940697183152/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=7173751&amp;postID=3737703940697183152' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7173751/posts/default/3737703940697183152'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7173751/posts/default/3737703940697183152'/><link rel='alternate' type='text/html' href='http://miser-theory.info/astraendo/pn/2007/11/miser-hacks-ii-hole-to-bind-them.asp' title='Miser Hacks II: A Hole to Bind Them'/><author><name>orcmid</name><uri>http://www.blogger.com/profile/15720194709820430236</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='17038397636421592587'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7173751.post-7964738676516571030</id><published>2007-11-04T12:12:00.001-08:00</published><updated>2007-11-22T09:56:32.582-08:00</updated><title type='text'>Petzold Annotates Turing!</title><content type='html'>&lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:0759c1a6-c564-45a1-995e-1a5330376f9c" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/Charles%20Petzold" rel="tag"&gt;Charles Petzold&lt;/a&gt;, &lt;a href="http://technorati.com/tags/Alan%20Turing" rel="tag"&gt;Alan Turing&lt;/a&gt;, &lt;a href="http://technorati.com/tags/Turing%20Machine" rel="tag"&gt;Turing Machine&lt;/a&gt;, &lt;a href="http://technorati.com/tags/Universal%20Turing%20Machine" rel="tag"&gt;Universal Turing Machine&lt;/a&gt;, &lt;a href="http://technorati.com/tags/UTM" rel="tag"&gt;UTM&lt;/a&gt;, &lt;a href="http://technorati.com/tags/Church-Turing%20Thesis" rel="tag"&gt;Church-Turing Thesis&lt;/a&gt;, &lt;a href="http://technorati.com/tags/Computation%20Theory" rel="tag"&gt;Computation Theory&lt;/a&gt;, &lt;a href="http://technorati.com/tags/On%20Computable%20Numbers" rel="tag"&gt;On Computable Numbers&lt;/a&gt;, &lt;a href="http://technorati.com/tags/orcmid" rel="tag"&gt;orcmid&lt;/a&gt;&lt;/div&gt; &lt;p&gt;&lt;a href="http://en.wikipedia.org/wiki/Charles_Petzold"&gt;Charles Petzold&lt;/a&gt;, author of highly-regarded books on programming for Microsoft Windows, is turning his attention to a work of love: creating an &lt;a href="http://www.charlespetzold.com/blog/2007/11/040721.html"&gt;annotated treatment&lt;/a&gt; of &lt;a href="http://en.wikipedia.org/wiki/Alan_turing"&gt;Alan Turing&lt;/a&gt;'s &lt;a href="http://www.abelard.org/turpap2/tp2-ie.asp"&gt;famous paper&lt;/a&gt; that set the foundation for a mathematical theory of computation and what it is possible for a computational mechanism to accomplish.&lt;/p&gt; &lt;p&gt;Another highly-respected Petzold book, &lt;em&gt;&lt;a href="http://www.amazon.com/Code-Language-Computer-Hardware-Software/dp/0735611319"&gt;Code: The Hidden Language of Computer Hardware and Software&lt;/a&gt;&lt;/em&gt;, illustrates Petzold's devotion to promoting popular understanding of the principles behind computing.&amp;nbsp; Delving into the fundamental theory established by Turing is a welcome sequel.&amp;nbsp; At one point, Petzold &lt;a href="http://www.charlespetzold.com/blog/2007/03/280150.html"&gt;lacked a publisher&lt;/a&gt; for this project.&amp;nbsp; It is exciting to learn that Wiley is publishing the book, a detour from Petzold's consistent presence as a Microsoft Press author.&amp;nbsp; Wiley Executive Editor Chris Webb has posted &lt;a href="http://ckwebb.com/authors/working-with-charles-petzold/"&gt;more information&lt;/a&gt; about the book on his blog.&amp;nbsp; I'm as enthusiastic as Chris is that he is working with Petzold.&lt;/p&gt; &lt;p&gt;The Miser Project comes at the principles of computation from the Church- side (or, more precisely, the John McCarthy side)of the Church-Turing thesis, because I find applicative systems more comprehensible and more easily shown to be applicable to conventional computing problems.&amp;nbsp; But that is not to shun the Turing side of the picture and the contribution it made by giving computation an intense definiteness.&amp;nbsp; In fact, it is always important to understand the mutual equivalence in terms of capabilities and other characteristics, the basis for speaking of a Church-Turing thesis in the first place.&lt;/p&gt; &lt;p&gt;I look forward to Petzold's posting of further details along with tidbits on the by-ways that don't fit entirely into the coverage of the book but do inspire coverage on his blog.&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;strong&gt;Update 2007-11-22:&lt;/strong&gt; Petzold has added a &lt;a href="http://www.charlespetzold.com/AnnotatedTuring/" target="_blank"&gt;section about the book&lt;/a&gt; to his web site.&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;I notice one gift that I've received from Petzold's newest book project.&amp;nbsp; In my excitement over this development, I am committed to tidying up the &lt;a href="http://miser-theory.info/synopsis.htm"&gt;Miser Project&lt;/a&gt; and &lt;a href="http://miser-theory.info/astraendo/"&gt;Numbering Peano&lt;/a&gt; for more regular use and usefulness.&amp;nbsp; Consider it my holiday-season present (along with the Windows Home Server that I am gifting myself here in Orcmid's Liar).&amp;nbsp; I have some other commitments around middleware and ODMA.&amp;nbsp; That means I must throw more coal under all of it and get those boilers steaming.&amp;nbsp; &lt;a href="http://miser-theory.info/astraendo/pn/2007/11/whither-peano.asp"&gt;I'm overdue&lt;/a&gt;.&lt;/p&gt; &lt;hr&gt; &lt;small&gt; &lt;p&gt;[&lt;strong&gt;update 2007-11-07T11:30 -0800:&lt;/strong&gt; It appears that Blogger wooziness may have been related to &lt;a href="http://blogger-status.blogspot.com/2007/11/blogger-is-currently-having-trouble.html"&gt;this&lt;/a&gt;.&amp;nbsp; It seems to have been fixed.&lt;br&gt;&amp;nbsp;&lt;strong&gt;update 2007-11-05T21:42 -0800:&lt;/strong&gt; Added the link that I learned from Chris Webb in a comment that has reached me but is not on this page.&amp;nbsp; It seems that Blogger is having some wooziness today.&amp;nbsp; I linked forward to my plan for revamping Numbering Peano too.]&lt;/p&gt;&lt;/small&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7173751-7964738676516571030?l=miser-theory.info%2Fastraendo%2Fpn%2Fdefault.asp' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/7173751/7964738676516571030/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=7173751&amp;postID=7964738676516571030' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7173751/posts/default/7964738676516571030'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7173751/posts/default/7964738676516571030'/><link rel='alternate' type='text/html' href='http://miser-theory.info/astraendo/pn/2007/11/petzold-annotates-turing.asp' title='Petzold Annotates Turing!'/><author><name>orcmid</name><uri>http://www.blogger.com/profile/15720194709820430236</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='17038397636421592587'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7173751.post-1644642021286586688</id><published>2007-05-02T17:07:00.000-07:00</published><updated>2007-05-02T17:07:02.312-07:00</updated><title type='text'></title><content type='html'>&lt;h2&gt;Hazard Warning: Much Site Breakage&lt;/h2&gt;
&lt;p&gt;I&amp;rsquo;ve just noticed how much damage there is on the &lt;a href="http://miser-theory.info/"&gt;Miser Project&lt;/a&gt; site as a result of my transfer to an Apache server.&amp;nbsp; The previous Windows server did not treat URLs as case-sensitive.&amp;nbsp; On Linux, Apache servers are case-sensitive.&amp;nbsp; This has made problems with cross-references within the site and into the site.&amp;nbsp; I am slowly repairing the cross-references within the site.&amp;nbsp; Bookmarks into the site may end up being broken.&amp;nbsp; The difference is usually around changes in capitalization in URLs.&amp;nbsp; &lt;/p&gt;
&lt;p&gt;Fortunately, this is a relatively small site.&amp;nbsp; I will be repair internal links and provide some&amp;nbsp;redirects for frequently-attempted broken external links over time.&amp;nbsp; For now, I just want to offer this warning.&lt;/p&gt;&lt;div class="bjtags"&gt;Tags:  &lt;a rel="tag" href="http://technorati.com/tag/orcmid"&gt;orcmid&lt;/a&gt;, &lt;a rel="tag" href="http://technorati.com/tag/Apache"&gt;Apache&lt;/a&gt;, &lt;a rel="tag" href="http://technorati.com/tag/case+sensitivity"&gt;case+sensitivity&lt;/a&gt;, &lt;a rel="tag" href="http://technorati.com/tag/broken+URLs"&gt;broken+URLs&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7173751-1644642021286586688?l=miser-theory.info%2Fastraendo%2Fpn%2Fdefault.asp' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/7173751/1644642021286586688/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=7173751&amp;postID=1644642021286586688' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7173751/posts/default/1644642021286586688'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7173751/posts/default/1644642021286586688'/><link rel='alternate' type='text/html' href='http://miser-theory.info/astraendo/pn/2007/05/hazard-warning-much-site-breakage-i.asp' title=''/><author><name>orcmid</name><uri>http://www.blogger.com/profile/15720194709820430236</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='17038397636421592587'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7173751.post-116495123287521550</id><published>2006-11-30T21:33:00.000-08:00</published><updated>2006-11-30T21:33:52.880-08:00</updated><title type='text'>Tweaking Technorati</title><content type='html'>&lt;p&gt;This is a maintenance post.&amp;nbsp; It&amp;rsquo;s sole purpose is to drive out a fresh main page using an updated Technorati claim.&amp;nbsp; I&amp;rsquo;ll not explain that further.&amp;nbsp; &lt;/p&gt;&lt;p&gt;I do have a need for the Professor&amp;rsquo;s assistance though.&amp;nbsp; I need to hack up some tools to change the links that are already embedded in existing archive pages.&amp;nbsp; I make it a policy to never republish the site but to let it reflect the differences that applied at different times in its development.&amp;nbsp; Hence the need to do something more subtle.&amp;nbsp;&amp;nbsp; I have no idea when or how I will get around to that. &lt;/p&gt;&lt;p&gt;Tah &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7173751-116495123287521550?l=miser-theory.info%2Fastraendo%2Fpn%2Fdefault.asp' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/7173751/116495123287521550/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=7173751&amp;postID=116495123287521550' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7173751/posts/default/116495123287521550'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7173751/posts/default/116495123287521550'/><link rel='alternate' type='text/html' href='http://miser-theory.info/astraendo/pn/2006/11/tweaking-technorati.asp' title='Tweaking Technorati'/><author><name>orcmid</name><uri>http://www.blogger.com/profile/15720194709820430236</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='17038397636421592587'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7173751.post-116215540934300015</id><published>2006-10-29T12:56:00.000-08:00</published><updated>2006-10-29T17:30:45.486-08:00</updated><title type='text'>... feeling unlucky ...</title><content type='html'>&lt;p&gt;I am having trouble posting to the other three blogs. All four, including this one, posted via Blogger to the new official sites yesterday, but now there is a problem.&lt;/p&gt;&lt;p&gt;I am making an off-topic attempt here to see if the problem is domain-name specific. Let&amp;rsquo;s see.&lt;/p&gt;&lt;p&gt;[&lt;strong&gt;update 2006-10-29-20:51Z&lt;/strong&gt; Well, this post isn&amp;rsquo;t going well either. I could try a different ftp account, but I don't think that's it. If this post doesn't make it now, I'll check with Blogger support.]&lt;/p&gt;&lt;p&gt;[&lt;strong&gt;update 2006&amp;ndash;10&amp;ndash;30&amp;ndash;01:17Z:&lt;/strong&gt; Blogger posting via ftp to my official sites is working again, and the appearance of this post should confirm it.&amp;nbsp; There is more of this saga on &lt;a href="http://orcmid.com/BlunderDome/clueless/2006/10/switching-oxygen-supplies.asp"&gt;Professor von Clueless&lt;/a&gt;.&amp;nbsp;&amp;nbsp;It is not particularly satisfying to have one more piece of evidence for &amp;ldquo;&lt;a href="http://orcmid.com/blog/2006/09/it-was-best-of-webs-worst-of-webs.asp"&gt;It Was the Best of Webs, the Worst of Webs&lt;/a&gt;.&amp;rdquo;]&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7173751-116215540934300015?l=miser-theory.info%2Fastraendo%2Fpn%2Fdefault.asp' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/7173751/116215540934300015/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=7173751&amp;postID=116215540934300015' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7173751/posts/default/116215540934300015'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7173751/posts/default/116215540934300015'/><link rel='alternate' type='text/html' href='http://miser-theory.info/astraendo/pn/2006/10/feeling-unlucky.asp' title='... feeling unlucky ...'/><author><name>orcmid</name><uri>http://www.blogger.com/profile/15720194709820430236</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='17038397636421592587'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7173751.post-116209244642946703</id><published>2006-10-28T20:27:00.000-07:00</published><updated>2006-10-28T20:27:27.250-07:00</updated><title type='text'>Hanging by a Branch</title><content type='html'>&lt;p&gt;I have changed my Blogger setup.&amp;nbsp; This post will appear at&amp;nbsp;the official&amp;nbsp;&lt;a href="http://miser-theory.info/astraendo/pn"&gt;Numbering Peano&lt;/a&gt; blog location.&amp;nbsp; It will &lt;em&gt;not&lt;/em&gt; be reflected at &lt;a href="http://nfocentrale.net/miser/astraendo/pn"&gt;http://nfoCentrale.net/miser/astraendo/pn&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;The same is true for the site feeds.&amp;nbsp; Only the official one will carry this post.&lt;/p&gt;&lt;p&gt;There&amp;rsquo;s a certain amount of frustration with developing on systems that have case-insensitive file systems and&amp;nbsp;moving content to a case-sensitive file system.&amp;nbsp; This leads to odd breakages that are difficult to repair in simple ways.&amp;nbsp; I will persevere, but there will be breakage related to mismatched case-sensitive names that were previously not a problem.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7173751-116209244642946703?l=miser-theory.info%2Fastraendo%2Fpn%2Fdefault.asp' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/7173751/116209244642946703/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=7173751&amp;postID=116209244642946703' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7173751/posts/default/116209244642946703'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7173751/posts/default/116209244642946703'/><link rel='alternate' type='text/html' href='http://miser-theory.info/astraendo/pn/2006/10/hanging-by-branch.asp' title='Hanging by a Branch'/><author><name>orcmid</name><uri>http://www.blogger.com/profile/15720194709820430236</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='17038397636421592587'/></author><thr:total>0</thr:total></entry></feed>
