Opaque context

From Wikipedia, the free encyclopedia

An opaque context is a linguistic context in which it is not possible to substitute co-referential terms while guaranteeing the preservation of semantic values.

The term is used in philosophical theories of reference, and is to be contrasted with "transparent context". For example:

  • Opacity: "Mary knows that Cicero is a great orator" is referentially opaque; although Cicero was also called Tully, we can't simply substitute "Tully" for "Cicero" in this context ("Mary knows that Tully is a great orator"), for Mary might not know that the names 'Tully' and 'Cicero' refer to one and the same thing. Of course, if Mary does know that Cicero is a great orator, then there is a sense in which Mary knows that Tully is a great orator, even if she does not know that 'Tully' and 'Cicero' corefer. It is the sense forced on us by direct theories of reference of proper names, i.e., those that maintain that the meaning of proper names just are their referents.
  • Transparency: "Cicero was a Roman orator" is referentially transparent; there is no problem substituting "Tully" here: "Tully was a Roman orator". Well, this is an oversimplified account as it may not hold in all circumstances, e.g., when, even though 'Tully' and 'Cicero' are grammatically proper names, their meanings are in part dependent on something other than their referents. This occurs, e.g., when someone has two separate personae that are referred to separately by two distinct proper names, and that, although referring to the same person, do so in significantly different ways that their substitutions into what are usually taken to be transparent contexts results in sentences with different truth values. For example, 'Clark Kent wooed the ladies', or 'Clark Kent was a great hero' are generally taken to be false even though they are true when 'Superman' is substituted for 'Clark Kent' in each.

Similar usage of the term applies for artificial languages such as programming languages and logics. The Cicero-Tully example above can be easily adapted. Let [x] be interpreted as a function symbol returning a "name" of the value of the variable x on a language L with domain M. Define a LengthIsSix predicate with the property that LengthIsSix([x]) is true if and only if [x] has 6 characters. Then [x] induces an opaque context, or is referentially opaque because LengthIsSix([Cicero]) is true while LengthIsSix([Tully]) is false. Programming languages often have richer semantics than logics' semantics of truth and falsity, and so an operator such as [x] may fail to be referentially transparent for other reasons if it is not a pure function.

[edit] See also

Languages