람다 미적분에서 알려지지 않은 함수에 대한 함수 방정식 풀기


14

람다 미적분에서 알려지지 않은 함수에 대한 함수 방정식을 푸는 기술이 있습니까?

ID 함수를 확장 적으로 정의했다고 가정 해보십시오.

Ix=x

(즉, 그 함수의 예상되는 동작을위한 식을 작성하여, 임) 지금은 그것을 해결하고자 그 함수의 식을 내포 얻을 일부 대수적 변환을 수행하여I

I=λx.x

그것은 함수가 정확히 무엇을 기대하는지 (즉, 람다 미적분에서 구현하는 방법)를 알려줍니다.

물론 항등 함수는 예제로 사용됩니다. 나는 그러한 방정식을 해결하는보다 일반적인 방법에 관심이 있습니다. 특히 다음 요구 사항을 충족 하는 함수 를 찾고 싶습니다 .B

Bf(λx.M)=(λx.fM)

즉, " body" (일부 람다 식) 앞에 있는 주어진 람다 함수 주어진 함수 를 "주입"하여 ,이를 분리하고 새로운 것을 구성함으로써 가능해졌습니다. 함수 가 적용되는 매개 변수 .f(λx.M)Mf

답변:


13

이것은 상위 주문 통합 으로 알려진 알려진 문제점 입니다.

불행히도,이 문제는 일반적으로 결정 불가능합니다. Miller 's Pattern Fragment로 알려진 결정 가능한 조각이 있습니다. 메타 변수 또는 패턴 일치를 사용하여 종속적으로 유형이 지정된 프로그램의 유형 검사에서 무엇보다 광범위하게 사용됩니다. 이 단편은 통합 변수가 고유 한 바운드 프로그램 변수에만 적용되는 위치입니다.

이 백서 는 고차원 통일이 어떻게 작동하는지에 대한 훌륭한 튜토리얼을 제공하고 (상대적으로) 간단한 구현을 안내합니다.

불행히도 함수 가이 패턴 조각에 빠지는 것처럼 보이지 않습니다. 즉, 내가보고있는 것은 함수 구성과 매우 유사합니다. 다음 기능이 귀하의 재산을 충족합니까?

B=λf g x .f (g x)

우리는 :

  • B f (λx.M)
  • α- 등가에의한 = B f ( λ y . [ y / x ] M )=B f (λy.[y/x]M)α
  • =λx.f ((λy.[y/x]M)x)
  • =λx.f ([x/y][y/x]M)
  • =λx.f M

1
우스운 것 같습니다 :) 재미있는 것은 거의 그 해결책을 얻었지만 어떤 이유로 든 을 호출 하면 표현이 엉망이 된다고 생각했습니다 . 변수를 외부에 바인딩 된 다른 변수로 대체 할 수 있습니다. (λx.M)
BarbaraKwarc

1
논문에 대한 링크도 감사합니다. 확인해 보겠습니다. 다른 사람들에게도 기회를주기 위해 며칠 안에 답변을 받아들입니다.
BarbaraKwarc

3
이 고차 통일입니까? 문제는 단순히 유형이 지정된 람다 미적분학이 아닌 유형화되지 않은 람다 미적분에 관한 것 같습니다.
피터 테일러

2

나는 정체성 함수를 가진 방정식과 관련하여 부분 답이 있다고 생각합니다.

Ix=x

우리는 대한 공식을 찾아서 풀기를 원합니다.이 공식 은 몸에 아직 알려지지 않은 표현 M 을 가진 형태 ( λ p . M ) 입니다 . 원래의 방정식에서 I 대신 그것을 사용합시다 :I(λp.M)MI

(λp.M)x=x

그런 다음 왼쪽의 에 함수를 적용하십시오 .x

M[p/x]=x

그러나 우리는 여기에 무엇을 가지고 있습니까? :>이 방정식은 식에 대한 공식이다 의 모든 발생을 대체 한 후, 우리가 찾고있는 페이지를 함께에 X , 그리고 그것이 나중에 오른쪽과 같이해야 :) 즉, 함수 우리 말한다 찾고 있었다 :Mpx

I=(λx.x)

물론 정답은 :)


콤비 네이터 의 공식을 찾기 위해 동일한 접근법을 시도해 봅시다 . 우리는 그것이 적용될 때 스스로 적용되는 방식으로 작동하기를 원합니다.ω

ωω=ωω

이제 아직 알려지지 않은 표현 M 에 대한 형식 ( λ x . M ) 인 대한 공식을 찾아 보자 . 이것을 방정식으로 대체하면 다음과 같습니다.ω(λx.M)M

(λx.M)ω=ωω

왼쪽의 매개 변수에 적용하면 공식이 나타납니다 .M

M[x/ω]=ωω

이 발생할 때마다 대체 후에 말한다 Mω 는 생산 ω를xMω 이므로치환하기 전에원래 식 M x 여야한다고추론 할 수 있습니다ωωM 이므로 찾고 있던 함수는 다음과 같아야합니다.xx

ω=(λx.xx)

실제로는 :)


하지만 오른쪽이 이미 찾고있는 형식이기 때문에 쉽게 얻을 수 있다는 느낌이 듭니다.


에서 알고리즘 방법이 있습니까?M[x/ω]=ωωω=(λx.xx)

이 두 가지 간단한 경우 – 그렇습니다. 단순히 대체를 뒤집습니다. 그러나 내가 말했듯이, 이러한 경우는 순수한 "행운"으로 작동 할 수 있습니다. 오른쪽은 이미 필요한 형식입니다. 좀 더 복잡한 예제로 시도했지만 작동하지 않았습니다. 그것은 내가 찾고있는 것입니다 : 알고리즘 방식.
BarbaraKwarc

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