{"id":51,"date":"2012-11-06T09:40:00","date_gmt":"2012-11-06T09:40:00","guid":{"rendered":"https:\/\/sandrock.co.za\/carl\/2012\/11\/06\/the-pattern-of-intermediate-forms-and-the-social-construction-of-money\/"},"modified":"2012-11-06T09:40:00","modified_gmt":"2012-11-06T09:40:00","slug":"the-pattern-of-intermediate-forms-and-the-social-construction-of-money","status":"publish","type":"post","link":"https:\/\/sandrock.co.za\/carl\/2012\/11\/the-pattern-of-intermediate-forms-and-the-social-construction-of-money\/","title":{"rendered":"The pattern of intermediate forms (and the social construction of money)"},"content":{"rendered":"<p>Intermediate languages are often used when compiling computer code. In computer translation, this same concept is apparently known as a &#8220;pivot language&#8221;. I thought of this while I was thinking about the utility of money. I suspect that there is a deeper logic, driven by simple math, behind using intermediate forms, and that this pattern is applied widely.<\/p>\n<h2>\nCompilers<\/h2>\n<div>\nWhen you are writing a compiler for a computer programming, you are effectively writing a translater (T) from that computer language (L) to something that can run on the machine that you are targeting (M).<\/p>\n<div style=\"clear: both;text-align: center\">\n<a href=\"https:\/\/chart.googleapis.com\/chart?cht=gv:dot&amp;chl=digraph%7Bgraph%5Brankdir=LR%5D;L-%3EM%20%5Blabel=T%5D%7D&amp;chs=200x100\" style=\"margin-left: 1em;margin-right: 1em\"><img decoding=\"async\" border=\"0\" src=\"https:\/\/chart.googleapis.com\/chart?cht=gv:dot&amp;chl=digraph%7Bgraph%5Brankdir=LR%5D;L-%3EM%20%5Blabel=T%5D%7D&amp;chs=200x100\" \/><\/a><\/div>\n<p>\nAs there are many different machines, it may be necessary to write translators for all the different machines. Such is the life of the compiler writer.<\/p>\n<div style=\"clear: both;text-align: center\">\n<a href=\"https:\/\/chart.googleapis.com\/chart?cht=gv:dot&amp;chl=digraph%7Bgraph%5Brankdir=LR%5D;L-%3EM1%20%5Blabel=T1%5D;L-%3EM2%20%5Blabel=T2%5D;L-%3EM3%20%5Blabel=T3%5D;L-%3EM4%20%5Blabel=T4%5D;%7D&amp;chs=200x300\" style=\"margin-left: 1em;margin-right: 1em\"><img decoding=\"async\" border=\"0\" src=\"https:\/\/chart.googleapis.com\/chart?cht=gv:dot&amp;chl=digraph%7Bgraph%5Brankdir=LR%5D;L-%3EM1%20%5Blabel=T1%5D;L-%3EM2%20%5Blabel=T2%5D;L-%3EM3%20%5Blabel=T3%5D;L-%3EM4%20%5Blabel=T4%5D;%7D&amp;chs=200x300\" \/><\/a><\/div>\n<p>However, if you were to add another language to your compiler&#8217;s repertoire, you suddenly face a daunting task &#8211; you need to write as many translators as machines.<\/p>\n<div style=\"clear: both;text-align: center\">\n<a href=\"https:\/\/chart.googleapis.com\/chart?cht=gv:dot&amp;chl=digraph%7Bgraph%5Brankdir=LR%5D;L1-%3EM1%20%5Blabel=T11%5D;L1-%3EM2%20%5Blabel=T12%5D;L1-%3EM3%20%5Blabel=T13%5D;L1-%3EM4%20%5Blabel=T14%5D;L2-%3EM1%20%5Blabel=T21%5D;L2-%3EM2%20%5Blabel=T22%5D;L2-%3EM3%20%5Blabel=T23%5D;L2-%3EM4%20%5Blabel=T24%5D;%7D&amp;chs=200x300\" style=\"margin-left: 1em;margin-right: 1em\"><img decoding=\"async\" border=\"0\" src=\"https:\/\/chart.googleapis.com\/chart?cht=gv:dot&amp;chl=digraph%7Bgraph%5Brankdir=LR%5D;L1-%3EM1%20%5Blabel=T11%5D;L1-%3EM2%20%5Blabel=T12%5D;L1-%3EM3%20%5Blabel=T13%5D;L1-%3EM4%20%5Blabel=T14%5D;L2-%3EM1%20%5Blabel=T21%5D;L2-%3EM2%20%5Blabel=T22%5D;L2-%3EM3%20%5Blabel=T23%5D;L2-%3EM4%20%5Blabel=T24%5D;%7D&amp;chs=200x300\" \/><\/a><\/div>\n<p>\nIf there are&nbsp;<i>n<\/i>&nbsp;languages and&nbsp;<i>m<\/i>&nbsp;machines, there are&nbsp;<i>n\u00d7m<\/i>&nbsp;translators required.&nbsp;This combinatorial problem is usually broken by introducing an <a href=\"http:\/\/en.wikipedia.org\/wiki\/Intermediate_language\">intermediate language<\/a> (IL), with a &#8220;frontend&#8221; which goes from each language to the intermediate form and a &#8220;backend&#8221; which goes from the IL to each machine.<br \/>\nNow, we only need <i>n+m<\/i>&nbsp;translators. If both <i>n<\/i>&nbsp;and <i>m<\/i>&nbsp;are large, introducing the intermediate form is worthwhile.<\/p>\n<div style=\"clear: both;text-align: center\">\n<a href=\"https:\/\/chart.googleapis.com\/chart?cht=gv:dot&amp;chl=digraph%7Bgraph%5Brankdir=LR%5D;L1-%3EIL%20%5Blabel=F1%5D;L2-%3EIL%20%5Blabel=F2%5D;IL-%3EM1%20%5Blabel=B1%5D;IL-%3EM2%20%5Blabel=B2%5D;IL-%3EM3%20%5Blabel=B3%5D;IL-%3EM4%20%5Blabel=B4%5D;%7D&amp;chs=300x200\" style=\"margin-left: 1em;margin-right: 1em\"><img decoding=\"async\" border=\"0\" src=\"https:\/\/chart.googleapis.com\/chart?cht=gv:dot&amp;chl=digraph%7Bgraph%5Brankdir=LR%5D;L1-%3EIL%20%5Blabel=F1%5D;L2-%3EIL%20%5Blabel=F2%5D;IL-%3EM1%20%5Blabel=B1%5D;IL-%3EM2%20%5Blabel=B2%5D;IL-%3EM3%20%5Blabel=B3%5D;IL-%3EM4%20%5Blabel=B4%5D;%7D&amp;chs=300x200\" \/><\/a><\/div>\n<p><\/p>\n<h2>\nTranslation<\/h2>\n<\/div>\n<div>\nIt doesn&#8217;t take much of a stretch to see how similar this situation is to machine translation of human languages. They call it a &#8220;<a href=\"http:\/\/en.wikipedia.org\/wiki\/Pivot_language\">pivot language<\/a>&#8221; or &#8220;bridge language&#8221; and it supplies exactly the same benefits as with the computer language case.&nbsp; Of course, if you are trying to build a translator from <i>k<\/i> languages into every other one, the previous <i>n\u00d7m <\/i>sum reduces to <i>k(k-1)=k<\/i>\u00b2-<i>k<\/i> translators without a pivot language and 2<i>k<\/i> with one.<\/p>\n<div style=\"clear: both;text-align: center\">\n<img decoding=\"async\" border=\"0\" src=\"https:\/\/chart.googleapis.com\/chart?cht=gv:neato&amp;chl=graph%7BL1--L2--L3--L4;L1--L3;L1--L4;L2--L4%7D&amp;chs=300x250\" \/><br \/>\n<img decoding=\"async\" border=\"0\" src=\"https:\/\/chart.googleapis.com\/chart?cht=gv:neato&amp;chl=graph%7BL1--IL;L2--IL;L3--IL;L4--IL%7D&amp;chs=300x250\" \/>\n<\/div>\n<p>&nbsp;That looks like a bargain to me. Notice that there are no arrows (or that they are effectively pointing in both directions), unlike the one-way nature of the previous case. The same problem also pops up in <a href=\"http:\/\/en.wikipedia.org\/wiki\/Combinatorial_explosion_(communication)\">communication between entities<\/a>, and is solved in the same way.<\/p>\n<div>\n<\/div>\n<h2>\nMoney<\/h2>\n<div>\nMoney appears to solve a similar problem as the translation (among many others). If you had to rely on&nbsp; <a href=\"http:\/\/en.wikipedia.org\/wiki\/Barter\">barter<\/a> with <i>k<\/i> products, you would need to know <i>k<\/i>\u00b2-<i>k<\/i> exchange rates.<\/p>\n<p>\nNow, intuitively, you can&#8217;t choose all those rates completely independently. You would need constraints so that there weren&#8217;t positive cycles. By that I mean that a situation where you could trade one pig for two goats, two goats for five chickens and five chickens for two pigs would lead to problems in the market. Finding similar cycles between markets is called <a href=\"http:\/\/en.wikipedia.org\/wiki\/Arbitrage\">arbitrage<\/a>, and is actually possible in current markets. I suspect this is largely due to the proliferation of currencies. The lack of a central currency (although the dollar or the euro get pretty close) means that there are some extra exchange rates.<\/p>\n<p>\nHaving only 2<i>k<\/i> exchange rates (<i>k<\/i> selling prices and <i>k<\/i> buying prices) reduces the flexibility of the market, but also completely eliminates the possibility of positive cycles as long as buying prices are lower than selling prices. In fact, if buying prices were the same as selling prices, we would only need <i>k<\/i>&nbsp;rates. This is what happens with commodities.<\/p>\n<p><\/p>\n<h2>\nIs money socially constructed?<\/h2>\n<p>My thinking on this got started (as seems to happen quite often lately) by a Facebook conversation about the socially constructed nature of money. For those of you reading who don&#8217;t have degrees in philosophy, I think it is useful to point out that Ian Hacking (quoted in the <a href=\"http:\/\/en.wikipedia.org\/wiki\/Social_constructionism#Social_constructionist_analysis\">Wikipedia article on Social Constructionism<\/a>) argues that when something is said to be &#8220;socially constructed&#8221;, this is shorthand for at least the following two claims:<br \/>\n<\/p>\n<dl>\n<dd>(0) In the present state of affairs, X is taken for granted; X appears to be inevitable.<sup><a href=\"http:\/\/en.wikipedia.org\/wiki\/Social_constructionism#cite_note-4\"><\/a><\/sup><\/dd>\n<\/dl>\n<dl>\n<dd>(1) X need <i>not<\/i> have existed, or need <i>not<\/i> be at all as it is. X, or X as it is at present, is <i>not<\/i> determined by the nature of things; it is <i>not<\/i> inevitable.<sup><a href=\"http:\/\/en.wikipedia.org\/wiki\/Social_constructionism#cite_note-5\"><\/a><\/sup><\/dd>\n<\/dl>\n<p>\nNow, all this build-up was done so that I can argue that the idea of an intermediate form is actually not completely arbitrary. In effect, I am arguing against point (1) above. I&#8217;m saying that the mathematical reality of the combinatorial problems I discussed would lead to a very similar situation to the one we have now as long as we have the need to exchange goods.<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Intermediate languages are often used when compiling computer code. In computer translation, this same concept is apparently known as a &#8220;pivot language&#8221;. I thought of this while I was thinking about the utility of money. I suspect that there is a deeper logic, driven by simple math, behind using intermediate forms, and that this pattern [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_post_was_ever_published":false},"categories":[1],"tags":[],"class_list":["post-51","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/sandrock.co.za\/carl\/wp-json\/wp\/v2\/posts\/51","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/sandrock.co.za\/carl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/sandrock.co.za\/carl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/sandrock.co.za\/carl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/sandrock.co.za\/carl\/wp-json\/wp\/v2\/comments?post=51"}],"version-history":[{"count":0,"href":"https:\/\/sandrock.co.za\/carl\/wp-json\/wp\/v2\/posts\/51\/revisions"}],"wp:attachment":[{"href":"https:\/\/sandrock.co.za\/carl\/wp-json\/wp\/v2\/media?parent=51"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sandrock.co.za\/carl\/wp-json\/wp\/v2\/categories?post=51"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sandrock.co.za\/carl\/wp-json\/wp\/v2\/tags?post=51"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}