Czy kontekstowa równoważność języka z `quote`-`eval` jest trywialna, czy nie?

13

W [1] Mitchell Wand wykazał, że dodanie fexprs do czystego rachunku lambda trywializuje teorię równoważności kontekstowej, co oznacza, że ​​dwa terminy są równoważne kontekstowo, jeśli są zgodne. Badając pokrewną pracę, stwierdził: „nasz wynik rozszerza starą obserwację Alberta Meyera [2] i czyni banalną równoważność kontekstową”. Ale odnosząc się do [2], można znaleźć tylko następujące oświadczenie Meyera:αevalquote

Najpierw pomyślałem, że w językach z funkcją quote- evaltaką jak LISP [3] nie było rozróżnienia typów między obiektami składniowymi i wykonywalnymi. W rzeczywistości quote- evalwydaje się wystarczająco bezpieczny w LISP, ponieważ chociaż quotesyntaktycznie wygląda jak operator bona fi de, powiedzmy cond, tak naprawdę nie zachowuje się jak jeden (ma zachowanie tylko w czasie analizy, a nie w czasie wykonywania, np. Nie można przejść quotejako parametr procedury). Nadal jednak nie widziałem przekonujących przykładów, w których warto było skorzystać z funkcji quote- eval.

Niezależnie od jednej drobnej wady w tych komentarzach, która może wprowadzić czytelnika w błąd, aby wywnioskować, że condmożna go przekazać jako parametr procedury. Jeśli dobrze rozumiem, to, co powiedział Meyer „ quote- evalwydaje się wystarczająco bezpieczny” oznacza, że quote- evalmoże nie trywializować teorii równań, chociaż nie przedstawił dowodu.

EDYTOWAĆ:

Jak zasugerował Martin, ponieważ wszystkie trzy artykuły cytowały dotyczące języków rodzinnych LISP, postawmy pytanie w tym samym otoczeniu. Czy kontekstowa równoważność języka z quote- evalw szczególności LISP - na ziemi jest trywialna, czy nie?

[1] Różdżka Mitchella, teoria Fexprsa jest banalna . Lisp and Symbolic Computation 10 (3): 189-199 (1998).

[2] Albert Meyer, Warsztaty logiczne dotyczące programowania logicznego na temat formalnego tworzenia oprogramowania. 1984

[3] John McCarthy, rekurencyjne funkcje symbolicznego wyrazu i obliczeniach przez maszynę, część I . Komunikat ACM w kwietniu 1960 r.

dzień
źródło
1
Proponuję rozważyć, czy można uszczegółowić pytanie: istnieją różne sposoby implementacji konstrukcji typu eval / quote, a także różne opcje projektowania równoważników kontekstowych dla takich obliczeń. Interesującą, niedawno opublikowaną publikacją jest „ Rozumowanie programów wieloetapowych” autorstwa Inoue, Taha.
Martin Berger,
1
Kluczowym rozróżnieniem jest CTMP (meta-programowanie w czasie kompilacji, na przykład w Szablon Haskell, Lisp / Scheme / Racket and Converge ) i RTMP (meta-programowanie w czasie wykonywania, takie jak eval Javascript lub MetaOCaml). Innym parametrem jest pisanie . Tutaj znajduje się przegląd Dyskusja dałem kilka miesięcy wstecz na ten temat, dość płytko Obawiam chodzi równoważność kontekstowych, trochę prace zostały wykonane, głównie posiadaniem w stanie płynnym programowania wsparcie dla meta-programowania..
Martin Berger
1
@ plmday: BTW, idealizowany język programowania Wand formalizuje się w teorii The Fexprs Is Trivial, zupełnie różni się od metaprogramowania Lisp. Pierwszy to RTMP, drugi (w zależności od konkretnych wdrożeń) nie.
Martin Berger,
1
@MartinBerger: Czy możesz opublikować swoją rozmowę jako pdf?
Dave Clarke,
1
@ Dave Clarke, jasne, oto jest! Witamy mile widziane.
Martin Berger,

Odpowiedzi:

2

Po pierwsze, zależy to całkowicie od tego, co uważasz za swój zestaw kontekstów. Jeśli (quote [])jest kontekstem, to równoważność kontekstowa jest równoważnością składniową.

Tradycyjnie kontekstami równoważności kontekstu są konteksty, w których mogą pojawiać się „wyrażenia” w dowolnym znaczeniu, jakie ma język. Wyklucza to takie konteksty "[]", w których kontekst umieszcza swój argument w dosłownym ciągu znaków. Tego rodzaju konteksty zostały również, IIRC, wykluczone przez Quine'a, gdy pierwotnie opisywał przejrzystość referencyjną.

Z tej perspektywy myślę, że (quote [])również nie jest kontekstem. Zamiast tego konteksty to miejsca, w których potencjalnie może nastąpić ocena wyrażenia, na przykład w treści funkcji lub w argumencie aplikacji.

Potencjalnie problematycznie oznacza to, że w programie Lisp z makrami (lub w programie Racket lub Scheme) nie wiesz, jakie są konteksty, dopóki nie uruchomisz potencjalnie niekończącego się procesu ekspansji makr, ponieważ nawet nie wiesz, gdzie są wyrażenia są. To, czy uważasz, że jest to problem, czy nie, jest głównie pytaniem filozoficznym, a nie technicznym.

Sam Tobin-Hochstadt
źródło
I sądzę, że istnieje jeden sposób, aby wykluczyć (quote []), zamiast myślenia życzeniowego, jako kontekst: odrzucając ideę leczenia 'datumjak cukier dla składniowej (quote datum), a potem '[], jak "[]"już nie jest kontekst. Makra schematu i quotetak są zaciemnione .
dzień
Nie rozumiem twojego komentarza, @day. Dlaczego związek między czymś 'datumi (quote datum)coś zmienia?
Sam Tobin-Hochstadt
Jeśli quotejest konstrukcją językową i 'datumdesugaruje się do niej (quote datum), ludzie prawdopodobnie będą argumentować, że (quote [])to kontekst. Jeśli usuniemy quotez podstawowego języka, ale poprzemy dosłowną 'datumskładnię, to mniej prawdopodobne jest, że będą się kłócić, ponieważ podobny nie "[]"jest znany z kontekstu.
dzień
@day, to nieporozumienie. Nie ma jednej właściwej definicji „kontekstu”. Po prostu różne konteksty obsługują różne pojęcia równoważności kontekstowej. Na przykład białe znaki są znaczące semantycznie w "[]"kontekście, ale nie w (quote [])kontekście. To, co „ludzie” mogą spierać, nie jest ani tu, ani tam.
Sam Tobin-Hochstadt
Zgadzam się, że nie ma jednej właściwej definicji kontekstu. Ale istnieje jedna tradycyjna definicja oparta na abstrakcyjnej składni, ta, której Wand używa w swoim artykule, a Meyer w swoim artykule, aby zakwestionować status kontekstowej równoważności Lisp. Sugerowałeś zastąpienie tradycyjnej definicji kontekstu kontekstem oceny. To, co zasugerowałem, to zachowanie tradycyjnej definicji kontekstu, usunięcie quoteze składni abstrakcyjnej, ale wspieranie (konkretnej) dosłownej składni cytatu (nieistotnego dla przestrzeni). Z tego, co widzę, oba sposoby prowadzą do „nie” w stosunku do pierwotnego pytania.
dzień