반사가있는


23

나는 반사 에 대한 추론 , 즉 실행중인 프로그램의 내성 및 조작에 대한 추론을 지원하는 간단한 미적분학을 찾고 있습니다.

지정되지 않은 거기에 변환을 가능하게 -calculus 확장 구문 적으로 조작 한 후 연속적으로 평가 될 수있는 형태로 -terms은?λλλ

미적분학에는 두 가지 주요 추가 항이 있다고 생각합니다.

  • v vreflect v : 소요 과 표현 생산 구문 조작에 수정할 수있는합니다.vv
  • eval v : 용어의 구문 표현을 사용하여 평가합니다.

반영을 지원하기 위해서는 용어의 구문 표현이 필요합니다. 다음과 같이 보일 것입니다 :

  • ( L M R ( E ) ) R ( E ) Eλx.e 용어로 표현된다 , 의 반사 버전 ,(LAM R(e))R(e)e
  • ( A P P R ( e ) R ( e ' ) )e e 는 용어 로 표시되며(APP R(e) R(e))
  • ( V A R x )x 는 됩니다.(VAR x)

이 표현으로 패턴 일치를 사용하여 용어를 조작 할 수 있습니다.

그러나 우리는 문제에 부딪쳤다. 및 은 패턴 일치와 마찬가지로 용어로 인코딩해야합니다. 이 문제를 다루는 것은 , 및 를 추가하는 것이 간단 해 보이지만 이러한 조작을 지원하기 위해 다른 용어를 추가해야합니까?e v a l R E F L E C T E V A L M A T C HreflectevalREFLECTEVALMATCH

디자인 선택이 필요합니다. 위에서 언급 한 함수는 및 의 본문과 어떤 관계가 있습니까? 이 본문을 변환 해야합니까 ?r e f l e c t e v a l R ( - )R()reflectevalR()

반사 자체를 연구하는 데별로 관심이 없기 때문에 미적분은 다른 연구의 수단이 될 것입니다. 바퀴를 재발 명하고 싶지 않습니다.

방금 설명한 것과 일치하는 기존 미적분이 있습니까?

내가 알 수있는 한, MetaML과 같은 계산법은 의견에서 제안했지만 먼 길을 갔지만 이미 작성된 코드 조각을 일치시키고 해체하는 기능은 포함하지 않았습니다.

내가 할 수있는 한 가지는 다음과 같습니다.

  • let x=λy.y in reflect x(LAM (VAR y) (VAR y))

그런 다음 결과에 대해 패턴 일치를 수행하여 완전히 다른 표현을 만듭니다.

이것은 확실히 -calculus에 대한 보수적 인 확장이 아니며 메타 이론은 추악한 것 같지만 이것은 내 응용 프로그램의 요점입니다. -abstractions를 분리 하고 싶습니다 .λλλ


MetaML은 REFLECT를 수행하는 브라케팅 연산자와 EVAL의 브라케팅을 해제하는 유형의 반사 언어입니다. 타이핑은 기본이지만 모달 S4에서 상속 된 프래그먼트 가이 문서 와 같은 방식으로 작동 하는 것을 볼 수 있습니다.
ex0du5

@ ex0du5 : 고맙지 만, 내가 알 수있는 한 이것은 충분하지 않습니다. 물론 다양한 단계로 코드를 작성할 수는 있지만 용어를 찢을 수는없는 것 같습니다. (내가 무엇을 놓쳤는 지보기 위해 더 자세히 읽을 것이다.)
Dave Clarke

구성표 (변경 가능성 및 기타 합병증없이)?
Gilles 'SO- 악한 중지'

@Gilles : Scheme은 미적분이 아니라 프로그래밍 언어입니다. 또한, 내가 원하는 것을 할 수 있다고 생각하지 않습니다.
Dave Clarke

@DaveClarke 프로그래밍 언어는 많은 사마귀가있는 미적분학입니다. Scheme 핵심은 언뜻보기에는 적합하지만 귀하의 요구 사항을 충분히 생각할 수는 없습니다. 당신은 어떻게 작동하지 않을 것이라고 생각합니까? ( 원하는 경우 채팅을 시작 하십시오.)
Gilles 'SO- 악의를 멈추십시오'

답변:


15

Jean Louis Krivine은 "Krivine Machine"을 매우 사소한 방식으로 확장하는 추상 미적분학을 도입했습니다 (Krivine 시스템은 이미 lisp의 콜 / CC 명령을 지원함).

그는에 "인용"연산자를 소개하고 이 글을 다음과 같이 정의 다음과 같은 경우 A는 λ의 -term, 참고 N φ 의 이미지 φ를 일부 전단 사 함수에 의해 π : Λ N을 자연수로 람다 측면에서. 참고 ¯ N 에 해당하는 교회 부호 N N . Krivine은 평가 규칙에 따라 연산자 χ 를 정의합니다 . χ ϕ ϕ ¯ n ϕϕλnϕϕπ:ΛNn¯nNχ

χ ϕϕ nϕ¯
나는 Kleene이 당신이 원하는 일을 할 수있는 충분한 것을 보여줍니다 마법 믿습니다 경우 즉, 견적 및 평가 연산자를 정의 계산할 수있다.π

Krivine은 읽기 어려운 것으로 악명 높으며 (Jean-Louis!이 기사를 읽으면 화 내지 마십시오!) 일부 연구자들은 기술 내용을 더 읽기 쉬운 방식으로 추출하려고하는 자선 활동을 수행했습니다. Christophe Raffali 의이 노트 를 보려고 시도 할 수 있습니다 .

이것이 도움이되기를 바랍니다!


Jay와 Kesner 의 Pure Pattern Calculus 는 패턴 미적분학을 나타내는 패턴에 대한 단순한 추상화를 변수에 대한 추상화로 확장 하는 -calculus 의 변형을 공식화합니다. 그 자체. 이것은 표현 적으로 표현 적이며 특히 응용 프로그램 자체를 해체 할 수 있습니다. 실수하지 않으면 용어는 다음과 같습니다.λ

(λ(x y).x)((λx.x x) (λy.y))

감소합니다 . x x . 다시 말하지만, 이것은 인용평가 연산자 를 구현하기에 충분하다는 것을 믿습니다 .λx.x x


이 겉보기에 합리적인 대답을지지하고 싶지만 질문에 대답하기 시작하는지 여부는 알 수 없습니다.
라파엘

@Raphael은 기사를 읽고 알아냅니다 :) 사실, 이것은 부분적인 대답 일뿐입니다. 기사는 실제로 람다 미적분학에서는 찾을 수없는 lisp의 중요한 기능, 즉 QUOTE 연산자를 공식화합니다. 메타 이론 이론에 대한 광범위한 연구는 없지만 복잡한 이론을 제시하기 위해 이상한 비 투명 계산을 표현하는 수단으로 소개합니다.
코디

1
(λx.x x) (λy.y)λy.y(x y)

1
quotereflectquote

8

합류를 포기하지 않고 불가능하지는 않지만 그렇게하는 것은 매우 어렵다. 다시 말해, 나는 당신이 털이 많은 메타 이론에 대해 옳다고 생각합니다. 반면, 모든 튜링 계산 기능을 표현할 수 있고 용어를 완전히 검사 할 수있는 결합기 미적분을 설계 할 수 있습니다. Jay 및 Give-Wilson을 참조하십시오 .

그러나이 능력을 가짐으로써 당신의 방정식 이론에는 나쁜 일들이 있다고 생각합니다. 특히, 알파가 동등 할 경우 두 값이 동일하다는 것을 증명할 수 있습니다.

나는 Krivine 논문 코디가 아직 링크되어 있지는 않지만 고전 논리에서는 본질적으로 진실과 거짓이라는 두 가지만을 가지고 있음에 주목해야합니다. 모든 것이 그 중 하나와 같습니다. 즉, 당신은 어쨌든 축소 된 방정식 이론을 갖는 경향이 있습니다.


1
Krivine 미적분학은 명제의 미적분학이 아니라 매우 사소한 방정식 이론을 가진 이들에 대한 실현자가 아닙니다.
cody

5

프로그래밍 언어 이론에서 사용자가 말하는 기능은 일반적으로 "인용"이라고합니다. 예를 들어, John Longley는 자신의 작업 중 일부에 대해이 글을 썼습니다 . 이 백서를 참조하십시오 .

이론적으로 고려한 직후에 (실제로 유용한 구현과는 대조적으로 ) , 인수의 고델 (Gödel) 코드를 반환하여 정수 유형으로 매핑 quote(또는 reflect호출 할 때)하는 방식으로 단순화 할 수 있습니다 nat. 그런 다음 추상 구문 트리에서와 같이 숫자를 분해 할 수 있습니다. 또한 eval언어로 구현할 수 있기 때문에 필요하지 않습니다. 기본적으로 언어의 해석기입니다.

nmφn(m)φnnλquote

당신이 무엇을하고 있는지 말해 주면 좀 더 구체적으로 언급 할 수 있습니다.

그건 그렇고, 여기에 열린 문제가 있습니다.

λquoteξ

ξ

e1e2λx.e1λx.e2
λλquotequote
e1e2quotee1quotee2,
quote((λx.x)y)quotey.
quoteλ

βquoteλξ

ξβ

다음 논문은 (ξ) 방정식의 몇 가지 문제를 보여줍니다. Lambda 미적분학은 Peter Selinger의 대수입니다. 흥미롭고, 내가 모르는 새로운 것! 시원한.
Transfinite Numbers

4

여기에 대안적인 대답이 있습니다. 여전히 실험적 인 공칭 접근법을 사용하는 대신 논문으로 돌아가는 더 확립 된 접근법이 있습니다.

LEAP : 평가와 다형성을 가진 언어
Frank Pfenning과 Peter Lee
https://www.cs.cmu.edu/~fp/papers/tapsoft89.pdf

종이는 다음과 같이 시작합니다.

이로 인해 우리는 레이놀즈가 처음으로 제기 한 강력한 유형의 언어가 메타 순환 해석기를 허용하는지에 대한 질문으로 이어졌습니다. 기존의 지혜는 그 대답이 "아니오"라는 것을 나타내는 것 같았습니다. 우리의 대답은 "거의"입니다.

LEAP는 OP가 원하는 것보다 훨씬 강합니다. 우선 입력합니다. 둘째, 그것은 메타 순환을 요구하는데, 이는 예를 들어 평가가 자신의 정의를 실행할 수 있음을 의미합니다. Prolog에서는 solve / 1에 대한 metacircularity를 ​​얻습니다.

solve(true).
solve((A,B)) :- solve(A), solve(B).
solve(H) :- clause(H,B), solve(B).

해결하기 위해 다음 절을 추가하면 / 1 :

solve(clause(H,B)) :- clause(H,B).

그리고 당신이 그것을 보시면, 그 절 / 2는 solve / 1의 절도 반환합니다. 그런 다음 solve (solve (...))를 호출하고 solve이 어떻게 실행되는지 확인할 수 있습니다.

자기 대표에 대한 질문은 여전히 ​​일부 연구를 유발합니다.

Girards System에서의 자기 표현 U
Matt Brown, Jens Palsberg
http://compilers.cs.ucla.edu/popl15/popl15-full.pdf


3

이 문제는 Coq 및 Isabelle / HOL과 같은 증거 조수의 친근감에서 확인됩니다. 약어 HOAS 아래에갑니다 . λ- 프롤로그에 대한 새로운 주장은 새로운 ∇ 수량자를 통해 그러한 일을 수행 할 수 있다는 주장이있다. 그러나 나는이 주장을 아직 파악할 수 없었다. 내가 지금까지 얻은 주요 통찰력은 명확한 접근법이 없다는 것입니다. 몇 가지 가능한 접근법이 있습니다.

아직 완성되지 않은 내 자신의 글은 폴슨 (Paulson) 이 고 델스 (Gödels)의 불완전 성을 증명 하는 최근 논문에서 영감을 얻은 것 입니다. 메타 수준 이름이있는 일부 데이터 구조와 관련하여 개체 수준 바인더를 사용합니다. 기본적으로 OP의 구조와 비슷하지만 구별되는 데이터 구조 및 의존적 유형에 관심이 있으므로 교회 코딩을 사용합니다.

datatype Expr = var Name                 /* written as n */
              | app Expr Expr            /* written as s t */
              | abs Name Expr Expr       /* written as λn:s.t */

메타 레벨 표현식은 변수 이름 n, m, .. 등을 사용하여 이름을 표시한다는 점에서 오브젝트 레벨 표현식과 구별 될 수 있습니다. 객체 레벨에서 변수 이름 x, y, .. 등을 사용합니다. 그러면 객체 로직에서 메타 용어의 해석은 다음과 같이 작동합니다. 공칭 문맥 σ에서 공칭 항 t의 해석을 위해 [t] σ를 쓰도록하자. 이것은 객체 항을 제공해야한다. 그러면 우리는 다음을 가질 것입니다.

 [n]σ = lookup σ n
 [s t]σ = [s]σ [t]σ
 [λn:s.t]σ = λx:[s]σ.[t]σ,n:x

위는 OP가 EVAL 함수를 호출하는 것을 정의합니다. Paulson과의 작은 차이점 인 σ는 유한 목록 일 뿐이며 기능적인 것은 아닙니다. 제 생각에는 REVALECT 기능이 아닌 EVAL 기능 만 도입하는 것이 가능할 것입니다. 객체 수준에서 다른 람다식이 동일하도록 일부 동등성을 가질 수 있습니다. 필요한 경우 eval을 사용하여 리플렉션에 대해 추론 할 수도 있습니다.

공칭과 비 공칭 사이의 벽을 찢고 싶다면 아무것도 확장되지 않은 Prolog와 같은 극단으로 가야합니다. 그러나 λ- 프롤로그 시스템의 예에서 알 수 있듯이, 고차의 경우에는 예를 들어 ∇ 수량 자와 같은 새로운 수단을 도입하여 논리적으로 만 극복 할 수있는 추가적인 문제가 있습니다!

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.