Jestem zadowolony z odpowiedzi Adreja, ale chciałbym zgłębić sprawę.
Na początek semantyka denotacyjna chce powiedzieć coś w stylu „znaczenie tego zapisu jest takie”. Prawdziwy semantysta chciałby wyobrazić sobie, że znaczenia są tym, co istnieje w naszym umyśle, a zapisy są tylko sposobem wyrażenia tych znaczeń. Wynika z tego wymóg, że semantyka denotacyjna powinna być złożona. Jeśli znaczenia są pierwotne, a oznaczenia wtórne, nie mamy innego wyboru, jak zdefiniować znaczenie większych zapisów jako funkcje znaczeń ich składników.
Jeśli zaakceptujemy ten punkt widzenia, dobra semantyka denotacyjna musi uchwycić znaczenia, które, jak zakładamy, mamy w głowie. Każda semantyka kompozycji niekoniecznie pasowałaby do rachunku. Jeśli wymyślę kompozycyjną definicję semantyczną i nikt nie zgadza się z tym, że zawiera ona jakiekolwiek znaczenia, które mają w ich głowie, to jest to mało przydatne. W tej sytuacji znajduje się semantyka gier. Jest to definicja kompozycyjna i technicznie dość mocna, ale bardzo niewiele osób zgadza się, że ma to coś wspólnego ze znaczeniami, które mają na myśli.
To powiedziawszy, każda definicja składu ma różne zalety techniczne. Możemy go użyć do weryfikacji równoważności lub innych właściwości poprzez indukcję składni terminów. Możemy go użyć do zweryfikowania poprawności systemów dowodowych, ponownie poprzez indukcję składni terminów. Możemy zweryfikować poprawność kompilatorów lub technik analizy programów (które ze swej natury są zdefiniowane przez indukcję składni). W pełni abstrakcyjna definicja semantyczna ma jeszcze więcej zalet technicznych. Możesz go użyć, aby pokazać, że dwa programy nie są równoważne, czego nie można zrobić z dowolną semantyką kompozycji. W pełni definiowalna definicja semantyczna jest jeszcze lepsza. Tutaj domeny semantyczne mają dokładnie to, co możesz wyrazić w języku programowania (z pewnymi zastrzeżeniami). Możesz więc wyliczyć wartości w domenach, aby zobaczyć, jakie są wartości, co byłoby trudne do zrobienia z notacjami składniowymi. Z tych wszystkich względów semantyka gier osiąga znakomite wyniki.
Jednak z biegiem lat kompozycyjne definicje semantyczne traciły na znaczeniu. Robin Milner i Andy Pitts opracowali szereg technik „ rozumowania operacyjnego ”, które działają wyłącznie na składni, ale używają semantyki operacyjnej wszędzie tam, gdzie jest to potrzebne do mówienia o zachowaniu. Te operacyjne techniki wnioskowania są mało zaawansowane. Bez wymyślnej matematyki. Żadnych nieskończonych obiektów. Możemy nauczyć ich studentów i każdy może ich używać. Tak więc wiele osób zadaje pytanie, dlaczego w ogóle potrzebujemy semantyki denotacyjnej. (Martin Berger jest prawdopodobnie w tym obozie).
Osobiście nie mam problemu z posiadaniem wielu narzędzi w moim zestawie narzędzi. Techniki denotacyjne mogą uzyskać lepsze wyniki w przypadku niektórych problemów, a techniki operacyjne w przypadku innych. Badacze, którzy opracują teorię, mogą być lepiej przystosowani do jednego lub drugiego podejścia. Dość często możemy rozwijać spostrzeżenia w jednym podejściu i przenosić je w drugim podejściu. (Wiele prac Andy'ego Pittsa jest tego rodzaju. Parametryzacja relacyjna została opracowana w układzie denotacyjnym, ale jest on w stanie dowiedzieć się, jak przekształcić ją jako rozumowanie operacyjne. Kiedy patrzę na to, mówię „wow, nigdy bym nie myślałem, że to możliwe. ”Logika separacji również idzie w tym kierunku. Steve Brookes podał 60-stronicowy dowód na poprawność logiki równoczesnej separacji przy użyciu semantyki denotacyjnej.
Podejścia operacyjne oceniają również znakomicie, gdy języki programowania stają się bardzo fantazyjne, z wszelkiego rodzaju zapętlonymi typami wyższego rzędu. Możemy nie mieć pojęcia, jak modelować takie rzeczy matematycznie. Lub standardowe modele matematyczne mogą okazać się niespójne pod wpływem pętli. (Na przykład, zobacz „Reynolds nie określa teorii polimorfizmu”). Podejścia operacyjne, które działają wyłącznie na składni, mogą zgodzić się na wszystkie te problemy matematyczne.
Innym podejściem pośrednim między podejściem operacyjnym a denotacyjnym jest wykonalność . Zamiast pracować z terminami składniowymi, tak jak w podejściach operacyjnych, przechodzimy częściowo na denotację, używając innej formy przedstawicieli matematycznych. Przedstawiciele ci mogą nie zostać zakwalifikowani jako prawdziwe „znaczenia” denotacyjne, ale byliby przynajmniej nieco bardziej abstrakcyjni niż terminy składniowe. Na przykład w przypadku polimorficznego rachunku lambda możemy najpierw nadać znaczenie terminom bez typu (w pewnym modelu rachunku lambda bez typu), a następnie użyć ich jako reprezentantów („realizatorów”) w celu wykonania jakiejś formy „rozumowania operacyjnego” w nieco bardziej abstrakcyjny poziom.
Niech więc będzie pewna zdrowa konkurencja między podejściami denotacyjnymi, operacyjnymi i wykonalnościowymi. Nie ma szkody.
Z drugiej strony, między różnymi podejściami może pojawić się również „niezdrowa” konkurencja. Ludzie pracujący z jednym podejściem mogą być do niego tak mocno przywiązani, że mogą nie rozumieć sensu innych podejść. Idealnie powinniśmy wszyscy być świadomi mocnych i słabych stron różnych podejść i rozwijać naukowe podejście do nich, nawet jeśli nie są naszymi indywidualnymi ulubieńcami.