Na semântica da linguagem de programação, costuma-se ouvir as pessoas falando sobre significado e denotação . Eles parecem não ser os mesmos. Qual é a diferença? O primeiro está associado à semântica operacional e o segundo à semântica denotacional? Obrigado.
10
Respostas:
"Significado" é usado de maneira mais ampla do que a denotação.
A dicotomia original, herdada da lógica e da filosofia, está entre "sentido" e "denotação" (que os filósofos chamam de "referência").
Essa distinção pode ser ilustrada pelo exemplo original de Frege. Ele observou que as frases "a estrela da manhã" e "a estrela da noite" se referiam ao mesmo objeto - o planeta Vênus -, mas que a frase "a estrela da manhã e a estrela da noite são o mesmo planeta" na verdade transmite alguma informação para um leitor. Ele sugeriu que o significado de uma frase substantiva pode ir além do objeto real que indica, incluindo algo sobre como ela apresenta o objeto que indica.
Da mesma forma, em uma linguagem de programação, a expressão não é a mesma que a expressão , embora possam ser (deveriam ser!) Completamente indistinguíveis por qualquer programa cliente. Mas mesmo indistinguíveis , eles não são os mesmos - ao avaliar os dois programas, sua máquina faz uma multiplicação no primeiro caso, e não no segundo.8×7 56
Ao construir uma semântica denotacional, tentamos construir um modelo de uma linguagem na qual programas indistinguíveis denotam --- referem-se --- ao mesmo objeto matemático. O objetivo é simplificar o raciocínio sobre o comportamento dos programas, pois podemos raciocinar sobre as denotações e os objetos matemáticos, sem precisar nos preocupar com os detalhes de como o programa é apresentado. Isso evita a necessidade de lidar com aspectos do significado de programas que não são do nosso interesse.
A maneira como o sentido e a denotação se relacionam com a semântica operacional é mais complicada e diferente. Posso estender minha resposta mais tarde para cobrir isso, mas tenho que correr agora. :)
EDIT: Ok, eu estou estendendo esta resposta agora.
A conexão entre "denotação" e "referência" é bastante exata, e é exata porque as pessoas que inventaram a semântica denotacional (por exemplo, Scott e Strachey) estavam apropriadamente conscientemente se apropriando de idéias da lógica filosófica como parte de seu projeto.
Para entender como o significado e a semântica operacional se relacionam, é útil recordar a noção do filósofo Michael Dummett de uma "teoria do significado" e como ela difere de uma "teoria semântica".
Na terminologia de Dummett, uma teoria semântica é uma maneira composicional de relacionar sentenças para determinar objetos matemáticos. Na lógica, o significado de uma sentença é seu valor de verdade e é determinado a partir dos valores de verdade de seus constituintes. A semântica denotacional das linguagens de programação usa uma variedade muito maior de objetos matemáticos, mas funciona da mesma maneira - damos o significado de um termo de programa em termos do significado de seus subtermos. Assim, na terminologia de Dummett, a semântica denotacional oferece teorias semânticas das linguagens de programação.
Uma teoria do significado também é uma maneira composicional de relacionar sentenças a objetos matemáticos, mas, além disso, contém uma explicação do que justifica a relação entre a sentença e o objeto matemático. Ele desenvolveu essa idéia para entender como os matemáticos intuicionistas entendiam a noção de verdade. Em particular, eles tinham uma descrição composicional do significado dos conectivos lógicos, mas não lhes davam valores semânticos da mesma maneira que os lógicos clássicos. Por exemplo, no relato da lógica intuicionista de Brouwer-Heyting-Kolmogorov, a verdade é definida da seguinte maneira:
A proposição é dito ser verdade quando se é possível dar uma prova canônica .A A
Agora, observe que essa definição conecta proposições e valores de verdade, mas a conexão deve ser justificada pela possibilidade de fornecer provas canônicas.
A semântica operacional entra em cena através dessa noção de justificação. Uma semântica operacional é apenas uma descrição do que uma máquina abstrata faz. Depois de fornecer uma semântica denotacional, geralmente queremos mostrar que a semântica denotacional é fiel à semântica operacional. Essa propriedade é chamada de adequação (juntamente com a abstração completa do irmão mais velho ) e equivale exatamente a dar uma teoria de significado que conecta estados abstratos da máquina a objetos denotacionais, que é fechada sob a redução da máquina abstrata.
Na verdade, essa não é a história toda, pois o que expus aqui é como conectar abordagens operacionais e denotacionais por meio de um modelo de realização. As teorias de tipos também podem ter semântica teórica da prova (de fato, essa perspectiva era a que Dummett estava mais interessado), mas eu não expliquei essa conexão neste post.
fonte