<?xml version="1.0" encoding="utf-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Comments on: Why do they call it: Referentially transparent</title>
	<atom:link href="http://www.nobugs.org/blog/archives/2008/11/12/why-do-they-call-it-referentially-transparent/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.nobugs.org/blog/archives/2008/11/12/why-do-they-call-it-referentially-transparent/</link>
	<description>Thoughts of a software engineer</description>
	<lastBuildDate>Thu, 28 Feb 2013 19:36:51 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
	<item>
		<title>By: Uday Reddy</title>
		<link>http://www.nobugs.org/blog/archives/2008/11/12/why-do-they-call-it-referentially-transparent/comment-page-1/#comment-78108</link>
		<dc:creator>Uday Reddy</dc:creator>
		<pubDate>Sun, 25 Mar 2012 09:34:54 +0000</pubDate>
		<guid isPermaLink="false">http://www.nobugs.org/blog/?p=175#comment-78108</guid>
		<description><![CDATA[Very clear and honest post.  Well done!  The subject of &quot;referential transparency&quot; is quite complex, but the wooliness that people use to talk about doesn&#039;t help any one understand it any better.  Thanks for clarifying the issues.]]></description>
		<content:encoded><![CDATA[<p>Very clear and honest post.  Well done!  The subject of &#8220;referential transparency&#8221; is quite complex, but the wooliness that people use to talk about doesn&#8217;t help any one understand it any better.  Thanks for clarifying the issues.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Greg McIntyre</title>
		<link>http://www.nobugs.org/blog/archives/2008/11/12/why-do-they-call-it-referentially-transparent/comment-page-1/#comment-61672</link>
		<dc:creator>Greg McIntyre</dc:creator>
		<pubDate>Thu, 11 Mar 2010 13:19:29 +0000</pubDate>
		<guid isPermaLink="false">http://www.nobugs.org/blog/?p=175#comment-61672</guid>
		<description><![CDATA[Hurray for this blog entry. *like button*]]></description>
		<content:encoded><![CDATA[<p>Hurray for this blog entry. *like button*</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: ajs</title>
		<link>http://www.nobugs.org/blog/archives/2008/11/12/why-do-they-call-it-referentially-transparent/comment-page-1/#comment-61661</link>
		<dc:creator>ajs</dc:creator>
		<pubDate>Thu, 11 Mar 2010 02:14:40 +0000</pubDate>
		<guid isPermaLink="false">http://www.nobugs.org/blog/?p=175#comment-61661</guid>
		<description><![CDATA[Well, Quine was talking about natural language and its relation to philosophy, but he also wrote about logic and philosophy.  In particular, your &quot;contexts&quot; are functions, in the mathematical sense.  (Note that if &quot;x is blah&quot; and &quot;y is blah&quot; is the same sentence, then x is y, as a string of symbols.)  Equivalently, they&#039;re formulae/proofs, in a logic of some kind.  You sort of skimmed over that part, but acknowledged it -- the semantics of interpretation (the part where you check if the sentence you constructed from a context and value &quot;is true&quot;) remain the same under substitution of equivalents.  That&#039;s it.  This is the connection.

Functional programming languages have a different model of interpretation, but it&#039;s not so different from a proof language.  The biggest difference is the mechanism used to quantify over objects by property.  Strongly typed functional languages use primarily use types to categorize objects.  Logic languages sort objects by the predicates they satisfy.  And these approaches are pretty obviously equivalent.  A type represents a set of objects that satisfy some predicates/proofs/functions.  It is the extension of a predicate.

Heck, both of these approaches are equivalent to constructive set theory, under the same form of trivial transformation.]]></description>
		<content:encoded><![CDATA[<p>Well, Quine was talking about natural language and its relation to philosophy, but he also wrote about logic and philosophy.  In particular, your &#8220;contexts&#8221; are functions, in the mathematical sense.  (Note that if &#8220;x is blah&#8221; and &#8220;y is blah&#8221; is the same sentence, then x is y, as a string of symbols.)  Equivalently, they&#8217;re formulae/proofs, in a logic of some kind.  You sort of skimmed over that part, but acknowledged it &#8212; the semantics of interpretation (the part where you check if the sentence you constructed from a context and value &#8220;is true&#8221;) remain the same under substitution of equivalents.  That&#8217;s it.  This is the connection.</p>
<p>Functional programming languages have a different model of interpretation, but it&#8217;s not so different from a proof language.  The biggest difference is the mechanism used to quantify over objects by property.  Strongly typed functional languages use primarily use types to categorize objects.  Logic languages sort objects by the predicates they satisfy.  And these approaches are pretty obviously equivalent.  A type represents a set of objects that satisfy some predicates/proofs/functions.  It is the extension of a predicate.</p>
<p>Heck, both of these approaches are equivalent to constructive set theory, under the same form of trivial transformation.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Jan</title>
		<link>http://www.nobugs.org/blog/archives/2008/11/12/why-do-they-call-it-referentially-transparent/comment-page-1/#comment-43950</link>
		<dc:creator>Jan</dc:creator>
		<pubDate>Thu, 13 Nov 2008 03:56:14 +0000</pubDate>
		<guid isPermaLink="false">http://www.nobugs.org/blog/?p=175#comment-43950</guid>
		<description><![CDATA[Interesting article. I don&#039;t understand why choose such a name to describe &#039;referencially transparent&#039; too until now :)]]></description>
		<content:encoded><![CDATA[<p>Interesting article. I don&#8217;t understand why choose such a name to describe &#8216;referencially transparent&#8217; too until now <img src='http://www.nobugs.org/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Tom</title>
		<link>http://www.nobugs.org/blog/archives/2008/11/12/why-do-they-call-it-referentially-transparent/comment-page-1/#comment-43935</link>
		<dc:creator>Tom</dc:creator>
		<pubDate>Wed, 12 Nov 2008 22:45:13 +0000</pubDate>
		<guid isPermaLink="false">http://www.nobugs.org/blog/?p=175#comment-43935</guid>
		<description><![CDATA[I don&#039;t know if this is in any sense useful or insightful or just stupid, but anyway, here&#039;s how I think of it: the special thing about, say, the typed lambda calculus (and hence Haskell) is that its types completely coincide with its notion of computation; the type &quot;integer&quot; means (just, completely) &quot;a computation that results in an integer&quot;, and you need to use a different type (i.e. a monadic one) for a computation that does something more subtle. To me that&#039;s where the notion of transparency (or else &quot;substitutability&quot;) comes from: in these languages, the type tells you everything interesting about the computation, and so if you replace a computational value with an equal one (therefore of the same type), you&#039;re guaranteed to have not changed anything interesting.

Hence the basic reason that &quot;languages like Java and C++&quot; don&#039;t have this property is that their types aren&#039;t strong enough to capture everything about a computation; values only tell part of the story -- state in these languages, for example, proceeds entirely outside of the remit of the type system -- and the comparisons between values in these languages have that blindness baked in, so it&#039;s a category error to look at &quot;foo()&quot; and say that&#039;s the same as &quot;42&quot; in a computational sense. Those values don&#039;t contain enough information to decide whether they&#039;re equal and therefore substitutable.

Erm, I&#039;m not sure I&#039;ve said anything here, really! I mention it only because you managed to write a whole blog post about Haskell without saying anything about types, which is an astonishing piece of cunning.]]></description>
		<content:encoded><![CDATA[<p>I don&#8217;t know if this is in any sense useful or insightful or just stupid, but anyway, here&#8217;s how I think of it: the special thing about, say, the typed lambda calculus (and hence Haskell) is that its types completely coincide with its notion of computation; the type &#8220;integer&#8221; means (just, completely) &#8220;a computation that results in an integer&#8221;, and you need to use a different type (i.e. a monadic one) for a computation that does something more subtle. To me that&#8217;s where the notion of transparency (or else &#8220;substitutability&#8221;) comes from: in these languages, the type tells you everything interesting about the computation, and so if you replace a computational value with an equal one (therefore of the same type), you&#8217;re guaranteed to have not changed anything interesting.</p>
<p>Hence the basic reason that &#8220;languages like Java and C++&#8221; don&#8217;t have this property is that their types aren&#8217;t strong enough to capture everything about a computation; values only tell part of the story &#8212; state in these languages, for example, proceeds entirely outside of the remit of the type system &#8212; and the comparisons between values in these languages have that blindness baked in, so it&#8217;s a category error to look at &#8220;foo()&#8221; and say that&#8217;s the same as &#8220;42&#8243; in a computational sense. Those values don&#8217;t contain enough information to decide whether they&#8217;re equal and therefore substitutable.</p>
<p>Erm, I&#8217;m not sure I&#8217;ve said anything here, really! I mention it only because you managed to write a whole blog post about Haskell without saying anything about types, which is an astonishing piece of cunning.</p>
]]></content:encoded>
	</item>
</channel>
</rss>
