Curry-Howard Isomorphism에서 발생하는 가장 흥미로운 등가물은 무엇입니까?


98

저는 프로그래밍 생애에서 비교적 늦게 Curry-Howard Isomorphism을 접하게 되었고 아마도 이것이 제가 완전히 매료 된 데 기여했을 것입니다. 이는 모든 프로그래밍 개념에 대해 형식 논리에 정확한 아날로그가 존재하며 그 반대의 경우도 있음을 의미합니다. 여기 내 머리 꼭대기에서 그러한 비유의 "기본"목록이 있습니다.

program/definition        | proof
type/declaration          | proposition
inhabited type            | theorem/lemma
function                  | implication
function argument         | hypothesis/antecedent
function result           | conclusion/consequent
function application      | modus ponens
recursion                 | induction
identity function         | tautology
non-terminating function  | absurdity/contradiction
tuple                     | conjunction (and)
disjoint union            | disjunction (or)          -- corrected by Antal S-Z
parametric polymorphism   | universal quantification

그래서, 제 질문에 : 이 동형의 더 흥미롭고 / 모호한 의미는 무엇입니까? 나는 논리학자가 아니기 때문에이 목록으로 표면을 긁어봤을 뿐이라고 확신합니다.

예를 들어, 논리에서 이름을 알지 못하는 몇 가지 프로그래밍 개념이 있습니다.

currying                  | "((a & b) => c) iff (a => (b => c))"
scope                     | "known theory + hypotheses"

그리고 여기에 제가 프로그래밍 용어로 고정하지 않은 몇 가지 논리적 개념이 있습니다.

primitive type?           | axiom
set of valid programs?    | theory

편집하다:

다음은 응답에서 수집 된 더 많은 등가물입니다.

function composition      | syllogism                -- from Apocalisp
continuation-passing      | double negation          -- from camccann

폐쇄 ~ = 공리 집합
Apocalisp 2010-06-04

+1이 질문과 모든 양질의 답변과 의견은 제가 인터넷을 통해 배울 수있는 것보다 CHI에 대해 더 많이 가르쳐주었습니다.
Alexandre C.

25
@Paul Nathan :goto | jumping to conclusions
Joey Adams

나는 모든 유효한 프로그램의 세트가있을 거라고 생각 모델
다닐

1
fst / snd | 결합 제거, 왼쪽 / 오른쪽 | 분리 소개
토니 모리스

답변:


34

가장 흥미롭고 모호한 것을 명시 적으로 요청했기 때문에 :

CH를 많은 흥미로운 논리 및 논리 공식화로 확장하여 매우 다양한 대응을 얻을 수 있습니다. 여기에서는 모호한 것보다 더 흥미로운 몇 가지와 아직 나오지 않은 몇 가지 근본적인 것들에 초점을 맞추려고 노력했습니다.

evaluation             | proof normalisation/cut-elimination
variable               | assumption
S K combinators        | axiomatic formulation of logic   
pattern matching       | left-sequent rules 
subtyping              | implicit entailment (not reflected in expressions)
intersection types     | implicit conjunction
union types            | implicit disjunction
open code              | temporal next
closed code            | necessity
effects                | possibility
reachable state        | possible world
monadic metalanguage   | lax logic
non-termination        | truth in an unobservable possible world
distributed programs   | modal logic S5/Hybrid logic
meta variables         | modal assumptions
explicit substitutions | contextual modal necessity
pi-calculus            | linear logic

편집 : CH의 확장에 대해 더 많이 배우는 데 관심이있는 모든 사람에게 추천 할 참조 :

"모달 논리의 판단적인 재구성" http://www.cs.cmu.edu/~fp/papers/mscs00.pdf- 이것은 첫 번째 원칙에서 시작하고 대부분이 비논 학자 / 언어 이론가가 이용할 수 있습니다. (나는 두 번째 저자이기 때문에 편견이 있습니다.)


덜 사소한 예를 제공 해주셔서 감사합니다 (실제로 원래 질문의 정신이었습니다). 비록이 중 몇 가지가 내 머리 위에 있음을 인정하지만 ... "필요성"과 "가능성"이라는 용어가 논리에 정확하게 정의되어 있습니까? 그들은 그들의 계산적 등가물로 어떻게 번역합니까?
Tom Crockett

2
각각에 대해 출판 된 논문을 가리킬 수 있으므로 정확하게 정의됩니다. 모달 논리는 (아리스토텔레스 이래) 많은 연구가 이루어지며 다양한 진리 모드를 연관시킵니다. "A는 반드시 사실입니다"는 "모든 가능한 세계에서 A가 사실입니다"를 의미하고, "A는 아마도 사실입니다"는 "A가 하나의 가능한 세계에서 사실입니다"를 의미합니다. . "(필수 (A-> B) 및 가능하면 A)-> 가능하면 B"와 같은 것을 증명할 수 있습니다. 모달 추론 규칙은 CH에서 평소와 같이 표현식 구성, 입력 및 축소 규칙을 직접 생성합니다. 참조 : en.wikipedia.org/wiki/Modal_logiccs.cmu.edu/~fp/papers/mscs00.pdf
RD1

2
@pelotom : 다른 종류의 논리 에 대해 읽어보고 싶을 수 있습니다 . 평범한 고전적 논리는 종종이 맥락에서 유용하지 않습니다. 저는 제 대답에서 직관 론적 논리를 언급했지만, 모달선형 논리는 심지어 "이상하지만"정말 훌륭합니다.
CA McCann

1
포인터를 주셔서 감사합니다. 읽을 일이있는 것 같습니다!
Tom Crockett

2
@ RD1 : 당신은 그것이 나쁘다고 생각합니다. 저는 Haskell에서 너무 많은 시간을 보냈기 때문에 조건 자 논리의 공식을 이해하기 전에 정신적으로 형식 서명으로 변환해야합니다. :( 배제 된 중간의 법칙이 정말로 혼란스럽고 아마도 의심스러워 보이기 시작한다는 것은 말할 것도 없습니다.
CA McCann

26

당신은 비 종결과 관련하여 약간의 혼란을 겪고 있습니다. 허위는 무인 유형 으로 표현되며 , 처음에 평가할 유형이 없기 때문에 정의에 따라 종결되지 않을 수 없습니다.

비 종결은 모순 ( 일관되지 않은 논리)을 나타냅니다 . 물론 일관성이없는 논리는 허위를 포함한 모든 것을 증명할 수있게합니다 .

불일치를 무시하고 유형 시스템은 일반적으로 직관 논리에 해당하며 필요에 따라 구성 주의자 입니다. 즉, 고전 논리의 특정 부분을 전혀 표현할 수 없다는 의미입니다. 반면에 이것은 유용합니다. 왜냐하면 타입이 유효한 건설적 증명이라면 그 타입의 용어 .

구성주의 풍미의 주요 특징은 이중 부정부정 이 아닌 것과 동등하지 않다는 것입니다. 사실, 부정 그래서 대신에 우리가 예를 들어, 거짓을 의미로 나타낼 수있는, 거의 형식 시스템의 기본입니다, not P이된다 P -> Falsity. 따라서 이중 부정은 유형이있는 함수가되며 (P -> Falsity) -> Falsity, 이는 유형 에 해당하지 않는 것이 분명합니다 P.

그러나 이것에 흥미로운 비틀기가 있습니다! 파라 메트릭 다형성이있는 언어에서 유형 변수는 무인 유형을 포함하여 가능한 모든 유형에 걸쳐 있으므로 ∀a. a어떤 의미에서는 거의 거짓 과 같은 완전 다형성 유형 입니다. 그렇다면 다형성을 사용하여 이중 거의 부정을 쓰면 어떨까요? 다음과 같은 유형을 얻습니다 ∀a. (P -> a) -> a.. 유형의 무언가와 동등 P합니까? 사실 그것은 단지 그것을 identity 함수에 적용하는 것입니다.

그러나 요점이 무엇입니까? 왜 그런 유형을 작성합니까? 그것은합니까 평균 용어를 프로그래밍에서 아무것도? 글쎄, 당신은 이미 P어딘가에 유형의 무언가 를 가지고 P있고, 최종 결과 유형에서 모든 것이 다형성 인 인수로 취하는 함수를 제공해야하는 함수로 생각할 수 있습니다 . 어떤 의미에서 이것은 일시 중단 된 계산을 나타내며 나머지가 제공되기를 기다리고 있습니다. 이러한 의미에서 이러한 일시 중단 된 계산은 함께 구성되고, 전달되고, 호출 될 수 있습니다. 이것은 Scheme 또는 Ruby와 같은 일부 언어의 팬에게 친숙하게 들리기 시작합니다. 이는 이중 부정이 연속 전달 스타일에 해당 한다는 것을 의미하기 때문 입니다., 그리고 사실 위에서 제가 준 타입은 정확히 Haskell의 연속 모나드입니다.


수정 해주셔서 감사합니다. 비 종결의 동의어로 "위조"를 제거했습니다. 이중 부정 <=> CPS의 경우 +1!
Tom Crockett

나는 ¬p를 P -> Falsity. 왜 작동하는지 이해하지만 (¬p ≡ p → ⊥) 코드 버전을 알 수 없습니다. 그렇지 않을 P -> ⊥때 정확하게 거주해야합니다 P. 그러나이 기능은 항상 사람이 있어야하지 않습니까? 또는 가능하지 않습니다. 실제로 ? 의 인스턴스를 반환 할 수 없기 때문입니다 . 나는 그것의 조건을 잘 모르겠습니다. 여기서 직감은 무엇입니까?
Antal Spector-Zabusky 2010 년

1
@Antal SZ : 직관은 물론 직관적 인 논리입니다! 그러나 예, 실제로 그러한 함수를 작성하는 것은 어렵습니다. 프로필에서 Haskell을 알고 계시다면 대수 데이터 유형과 패턴 일치를 생각하고 계십니까? 무인 유형 에는 생성자없어야 하므로 패턴 일치에 대해 아무것도 고려하지 마십시오 . 본문없이 "함수"를 작성해야하는데, 이는 합법적 인 Haskell이 아닙니다. 사실, 내가 아는 한, 런타임 예외 나 비 종료를 사용하지 않고 Haskell에서 부정형의 용어를 작성할 방법이 없습니다.
CA McCann

1
@Antal SZ : 반면에 등가 논리가 일관 적이면 모든 기능이 총체 여야합니다. 예를 들어 모든 패턴 일치는 완전해야합니다. 따라서 패턴이없는 함수를 작성하려면 매개 변수 유형에 생성자가 없어야합니다 (예 : 무인도). 따라서 그러한 함수는 합법적이며 따라서 자신의 유형이 거주하고있을 때 정확하고 그 주장이 사람이 없을 때만 가능합니다. 따라서 함수 P -> FalsityP거짓 과 동일합니다 .
CA McCann

아하, 알 것 같아요. 내가 즐겼던 버전은 f x = xiff 와 같이 인스턴스화 할 수 P = ⊥있었지만 분명히 충분히 일반적이지 않았습니다. 따라서 가치없는 유형 을 반환 하려면 본문이 필요하지 않습니다. 그러나 기능을 정의 할 수 있고 전체적으로하려면 케이스 가 필요하지 않습니다. 그래서 P사람이 살지 않으면 모든 것이 작동합니까? 조금 이상 하긴한데, 본 것 같아요. 그것은 Xor유형 에 대한 나의 정의와 다소 이상하게 상호 작용하는 것 같습니다 … 나는 그것에 대해 생각해야 할 것입니다. 감사!
Antal Spector-Zabusky 2010 년

15

귀하의 차트가 옳지 않습니다. 많은 경우 유형과 용어를 혼동했습니다.

function type              implication
function                   proof of implication
function argument          proof of hypothesis
function result            proof of conclusion
function application RULE  modus ponens
recursion                  n/a [1]
structural induction       fold (foldr for lists)
mathematical induction     fold for naturals (data N = Z | S N)
identity function          proof of A -> A, for all A
non-terminating function   n/a [2]
tuple                      normal proof of conjunction
sum                        disjunction
n/a [3]                    first-order universal quantification
parametric polymorphism    second-order universal quantification
currying                   (A,B) -> C -||- A -> (B -> C), for all A,B,C
primitive type             axiom
types of typeable terms    theory
function composition       syllogism
substitution               cut rule
value                      normal proof

[1] Turing-complete 함수 언어의 논리는 일치하지 않습니다. 재귀는 일관된 이론에서 일치하지 않습니다. 일관되지 않은 논리 / 불건전 한 증명 이론에서는 불일치 / 불건전 성을 유발하는 규칙이라고 부를 수 있습니다.

[2] 다시 말하지만 이것은 완전성의 결과입니다. 논리가 일관 적이라면 이것은 반 정리의 증거가 될 것입니다. 따라서 존재할 수 없습니다.

함수형 언어에는 존재하지 않습니다. 1 차 논리적 특징을 제거하기 때문입니다. 모든 정량화와 매개 변수화는 공식을 통해 이루어집니다. 먼저 차 기능을 가지고 있다면,보다 종류의 다른이있을 것 *, * -> *등; 담화 영역의 요소의 종류. 예를 들어 in Father(X,Y) :- Parent(X,Y), Male(X), Xand Yrange over the domain of discourse (call it Dom), and Male :: Dom -> *.


[1]-네, 좀 더 구체적이어야했습니다. 나는 제약없는 재귀 라기보다는 "구조적 재귀"를 의미했는데, "폴드"와 동일하다고 생각합니다. [3]-종속 유형 언어로 존재합니다
Tom Crockett

[1] 사실은 재귀 함수 호출 (modus ponens)로 인해 프로그램이 종료되지 않는 경우 호출 또는 환경에 제공되는 매개 변수 (가설)가 호출간에 달라야합니다. 따라서 재귀는 동일한 정리를 여러 번 적용하는 것입니다. 특별한 것이 있다면 일반적으로 숫자를 증가 / 감소 (유도 단계)하고 기존 케이스 (기본 케이스)로 확인하는 것으로-논리의 수학적 유도에 해당합니다.
Earth Engine

저는이 차트를 정말 좋아합니다.하지만 "n / a"라고 말하지는 않겠습니다. 마치 프로그램을 종료하는 것이 유일한 종류의 프로그램이 아닌 것처럼 일관된 논리가 유일한 종류의 논리가 아니기 때문입니다. 비 종결 함수는 "순환 인수"에 해당하며 Curry-Howard 동 형사상을 잘 보여줍니다.
Joey Adams


13

이 질문이 정말 마음에 듭니다. 나는 많이 알지 못하지만 몇 가지가 있습니다 ( 위키 백과 기사의 도움을 받아 깔끔한 테이블과 그 자체가 있습니다).

  1. 나는 합계 유형 / 조합 유형 ( :) data Either a b = Left a | Right b포괄적 분리 와 동일 하다고 생각합니다 . 그리고 나는 Curry-Howard에 대해 잘 알지는 못하지만 이것이 그것을 증명한다고 생각합니다. 다음 기능을 고려하십시오.

    andImpliesOr :: (a,b) -> Either a b
    andImpliesOr (a,_) = Left a
    

    내가 일을 올바르게 이해하면 유형은 ( a  ∧  b ) → ( a  ★  b )라고 말하고 정의는 이것이 사실이라고 말합니다. 여기서 ★는 포괄적이거나 배타적이거나 둘 중 하나를 Either나타냅니다. 귀하는 Either배타적 또는 ⊕; 그러나 ( a  ∧  b ) ↛ ( a  ⊕  b ). 예를 들어, ⊤ ∧ ⊤ ≡ ⊤, 그러나 ⊤ ⊕ ⊥ ≡ ⊥ 및 ⊤ ↛ ⊥. 즉, ab 가 모두 참이면 가설은 참이지만 결론은 거짓이므로이 의미는 거짓이어야합니다. 그러나 분명히 ( a  ∧  b ) → ( a  ∨ b ), ab 가 모두 참이면 적어도 하나는 참이기 때문입니다. 따라서 차별적 노조가 어떤 형태의 분리라면 포괄적 인 다양성이어야합니다. 나는 이것이 증거라고 생각하지만,이 개념에 대해 저를 반박 할 수 있습니다.

  2. 마찬가지로, 정체성 함수와 비 종결 함수로서의 팽팽함과 부조리에 대한 정의는 약간 틀립니다. 진정한 공식은 단 하나의 요소 ( ; 종종 철자 및 / 또는 함수형 프로그래밍 언어로) 만있는 유형 인 단위 유형으로 표시됩니다 . 이것은 의미가 있습니다. 그 유형은 거주 가 보장 되고 가능한 거주자가 한 명뿐이므로 사실이어야합니다. identity 함수는 a  →  a .data ⊤ = ⊤()Unit

    종료되지 않는 기능에 대한 귀하의 의견은 정확히 무엇을 의미하는지에 따라 더 꺼집니다. Curry-Howard는 유형 시스템에서 작동하지만 비 종결은 인코딩되지 않습니다. 에 따르면 위키 백과 , 비 종단 처리하는 것은 일관성이 논리를 만들어 추가하는 등의 문제 ( 예를 들면 , 내가 정의 할 수 있습니다 wrong :: a -> b에 의해 wrong x = wrong x"증명"따라서, 그  →  B 어떤을위한 및 B ). 이것이“부조리”가 의미하는 바라면 정확히 맞습니다. 대신 당신이 허위 진술을 의미하는 경우에, 당신이 대신 원하는 것은 어떤 사람이 살지 않는 유형이다 예를 들면 에 의해 정의 된 무언가를data ⊥즉, 구성 할 방법이없는 데이터 유형입니다. 이렇게하면 값이 전혀 없으므로 사람이 살지 않아야하며 이는 false와 동일합니다. 나는 당신이 아마도 사용할 수 있다고 생각 a -> b우리가 종료되지 않는 기능을,이 또한 무인되어 금지하면 때문에,하지만 확실히 100 % 아니에요.

  3. Wikipedia 는 Curry-Howard를 해석하는 방법에 따라 공리가 결합 자 또는 변수에서 두 가지 다른 방식으로 인코딩된다고 말합니다. 콤비 네이터 뷰는 우리에게 주어진 기본 함수가 기본적으로 말할 수있는 것을 인코딩한다는 것을 의미한다고 생각합니다 (함수 응용 프로그램이 원시이기 때문에 modus ponens가 공리 인 방식과 유사 함). 그리고 저는 변수 뷰가 실제로 같은 것을 의미 할 수 있다고 생각 합니다. 결합자는 결국 특정 함수 인 전역 변수 일뿐입니다. 프리미티브 타입에 관해서 : 내가 이것을 올바르게 생각한다면, 프리미티브 타입은 우리가 증명하려고하는 원시 객체 인 엔티티라고 생각합니다.

  4. 내 논리와 의미론에 따르면, ( a  ∧  b ) →  c  ≡  a  → ( b  →  c ) (또한 b  → ( a  →  c ))라는 사실은 적어도 자연 추론에서 수출 동등성 법칙이라고합니다. 증거. 나는 그것이 단지 카레라는 것을 그 당시에는 몰랐습니다. 멋있기 때문에 나는 그것을 가지고 싶었습니다!

  5. 이제 우리는 포괄적 인 분리를 표현할 방법이 있지만 배타적 인 다양성을 표현할 방법은 없습니다. 우리는 그것을 표현하기 위해 배타적 분리의 정의를 사용할 수 있어야합니다. a  ⊕  b  ≡ ( a  ∨  b ) ∧ ¬ ( a  ∧  b ). 나는 부정을 쓰는 방법을 모르지만 ¬ p  ≡  p  → ⊥, 함축과 거짓이 모두 쉽다 는 것을 알고 있습니다. 따라서 우리는 다음과 같은 방법으로 배타적 분리를 나타낼 수 있어야합니다.

    data ⊥
    data Xor a b = Xor (Either a b) ((a,b) -> ⊥)
    

    이것은 허위에 해당하는 값이없는 빈 유형으로 정의 됩니다. Xor다음 포함하도록 정의 모두 ( ) 또는 B ( 또는 )과 함수 ( 의미 에서) (a, b) ( 하부 형 (행) 거짓 ). 그러나 이것이 무엇을 의미 하는지 전혀 모릅니다 . ( 편집 1 : 이제 다음 단락을 참조하십시오!) 유형 값이 없기 때문에 프로그램에서 이것이 무엇을 의미하는지 이해할 수 없습니다. 이 정의 또는 다른 정의에 대해 생각하는 더 좋은 방법을 아는 사람이 있습니까?Either(a,b) -> ⊥ ( 편집 1 : 예, camccann .)

    편집 1 : 덕분에 camccann의 대답은 (특히, 그가 왼쪽 코멘트가 나를 도와), 나는 여기에 무슨 일이 일어나고 있는지 볼 생각합니다. 유형 값을 생성하려면 Xor a b두 가지를 제공해야합니다. 첫째, a또는 b첫 번째 인수로서의 요소의 존재에 대한 증인 ; 즉, Left a또는 Right b. 둘째, 유형 모두의 요소가 아니라는 것을 증명 a하고 b-에서 다른 단어, 증명 (a,b)무인-로 된 두 번째 인수. 사람이없는 (a,b) -> ⊥경우에만 함수를 작성할 수 있기 때문에 (a,b)그게 무슨 의미일까요? 이는 유형의 객체의 일부가(a,b)건설 할 수 없습니다. 즉, 가능성이 적어도 하나, 모두, 그 ab뿐만 아니라 무인된다! 이 경우, 패턴 매칭에 대해 생각하고 있다면 그러한 튜플에 대해 패턴 매칭을 할 수 없었습니다. b사람이 살지 않는다고 가정하면 그 튜플의 두 번째 부분과 일치 할 수있는 것은 무엇입니까? 따라서 우리는 패턴 매칭을 할 수 없으므로 이것이 왜 무인도를 만드는지 이해하는 데 도움이 될 수 있습니다. 이제 인수를받지 않는 전체 함수를 갖는 유일한 방법 (a,b)은 (무인 이기 때문에 필수이므로 ) 결과도 무인 유형이되는 것입니다. 패턴 일치 관점에서 이것을 생각한다면, 이는 함수에 케이스가 없더라도 가능한 본문 이 없음을 의미합니다. 둘 중 하나를 가질 수 있으므로 모든 것이 정상입니다.

이 중 많은 부분이 내가 소리내어 생각하고 / 즉석에서 (희망적으로) 무언가를 증명하지만 유용하기를 바랍니다. 나는 정말로 Wikipedia 기사를 추천 한다 ; 나는 어떤 종류의 세부 사항도 읽지 않았지만 표는 정말 멋진 요약이며 매우 철저합니다.


1
Either가 포괄적 또는임을 지적하는 +1. (하나의 aa)는 정리 (모든 a)입니다.
Apocalisp 2010 년

질문 다시. 2 (b) : 거주자가 종료되지 않는 기능 유형과 무인 기능 유형의 차이점은 무엇입니까? 예를 들어 생성자가없는 유형 B를 선언 한 다음 함수 A-> B를 다음과 같이 정의했습니다. fun (a : A) : B : = f (a) 이것은 많은 언어에서 유형 검사를합니다. B를 반환하는 것은 불가능합니다. 따라서 함수는 어떤 의미에서는 "거주자"이지만 그 "거주자"는 터무니 없습니다. 그래서 실제로는 전혀 거주하지 않습니다. 희망이 있습니다. :)
Tom Crockett

3
바닥은 증거가 아닙니다. "알 수없고 불확실한 자들이 포함하고 결정해야한다고 생각하는 것은 어리 석고 불가능합니다." - Aristoteles
Apocalisp

2
@Tom : 비 종료에 대한 요점을 파악하기 위해 논리가 일관되면 모든 프로그램이 종료됩니다 . 비 종결은 일관성없는 논리를 나타내는 유형 시스템 또는 동등하게 Turing-complete 언어의 유형 시스템에서만 발생합니다.
CA McCann

1
Apocalisp : Either a a 정리가 아니어야합니다 : Either ⊥ ⊥여전히 무인입니다. Tom : camccann이 말했듯이 일관성은 종료를 의미합니다. 따라서 일관된 유형 시스템은 표현을 허용하지 않으므로 f :: a -> b유형은 사람이 살지 않습니다. 일치하지 않는 유형 시스템 유형에 대한 거주자를 가지지 만 종료되지는 않습니다. camccann : 튜링이 완전하지 않고 계층 구조에서 중간 지점을 차지하는 일관성없는 유형 시스템이 있습니까? 아니면 마지막 단계 (일반 재귀 또는 기타 추가)가 불일치와 정확히 동일합니까?
Antal Spector-Zabusky 2010 년

12

제가 놀랍게도 이전에 언급하지 않은 약간 모호한 것이 있습니다. "고전적인"기능적 반응 프로그래밍은 시간 논리에 해당합니다.

물론, 당신이 철학자, 수학자 또는 강박적인 기능 프로그래머가 아니라면 아마도 몇 가지 더 많은 질문을 제기 할 것입니다.

자, 먼저 함수형 반응 프로그래밍이란 무엇입니까? 시간에 따라 변하는 값 으로 작업하는 선언적 방법 입니다. 이것은 사용자의 입력이 시간에 따라 변하는 값이기 때문에 사용자 인터페이스와 같은 것을 작성하는 데 유용합니다. "클래식"FRP에는 이벤트와 동작의 두 가지 기본 데이터 유형이 있습니다.

이벤트는 이산 시간에만 존재하는 값을 나타냅니다. 키 입력이 좋은 예입니다. 키보드의 입력을 주어진 시간에 문자로 생각할 수 있습니다. 그러면 각 키 누름은 키의 문자 및 누른 시간과 쌍을 이룹니다.

행동은 지속적으로 존재하지만 지속적으로 변할 수있는 가치입니다. 마우스 위치는 좋은 예입니다. x, y 좌표의 동작 일뿐입니다. 결국, 마우스는 항상 위치를 가지며 개념적으로이 위치 는 마우스를 움직일 때 계속 변경 됩니다. 결국 마우스를 움직이는 것은 일련의 개별 단계가 아니라 하나의 장기적인 동작입니다.

그리고 시간 논리는 무엇입니까? 적절하게도 시간이 지남에 따라 정량화 된 제안을 처리하기위한 일련의 논리적 규칙입니다. 기본적으로 □ 및 ◇의 두 가지 한정자로 일반 1 차 논리를 확장합니다. 첫 번째는 "항상"을 의미합니다. □ φ를 "φ 항상 유지"로 읽습니다. 두 번째는 "결국"입니다. ◇ φ는 "φ가 결국 유지 될 것"을 의미합니다. 이것은 특정한 종류의 모달 논리 입니다. 다음 두 가지 법칙은 수량자를 관련시킵니다.

□φ ⇔ ¬◇¬φ
◇φ ⇔ ¬□¬φ

따라서 □와 ◇는 ∀과 ∃와 같은 방식으로 서로 이중입니다.

이 두 수량자는 FRP의 두 가지 유형에 해당합니다. 특히 □는 행동에 해당하고 ◇는 이벤트에 해당합니다. 이러한 유형이 어떻게 거주하는지 생각해 보면, 이것은 의미가있을 것입니다. 행동은 가능한 모든 시간에 거주 하는 반면 사건은 한 번만 발생합니다.


8

연속과 이중 부정의 관계와 관련하여 call / cc의 유형은 Peirce의 법칙입니다 http://en.wikipedia.org/wiki/Call-with-current-continuation

CH는 일반적으로 직관 논리와 프로그램 간의 대응으로 표시됩니다. 그러나 call-with-current-continuation (callCC) 연산자 (이 유형은 Peirce의 법칙에 해당)를 추가하면 고전 논리 와 callCC를 사용하는 프로그램 간의 대응 관계 를 얻습니다.


4

단순한 동형은 아니지만 건설적인 LEM에 대한이 논의 는 매우 흥미로운 결과입니다. 특히, 결론 섹션에서 Oleg Kiselyov는 구성 논리에서 이중 부정 제거를 얻기 위해 모나드를 사용하는 것이 계산적으로 결정 가능한 명제 (구성 적 설정에서 LEM이 유효 함)를 모든 명제와 구별하는 것과 어떻게 유사한 지 논의합니다. 모나드가 계산 효과를 포착한다는 개념은 오래되었지만 Curry-Howard 동형의이 사례는이를 원근감있게 표현하고 이중 부정이 실제로 "의미"하는 것을 얻는 데 도움이됩니다.



4
2-continuation           | Sheffer stoke
n-continuation language  | Existential graph
Recursion                | Mathematical Induction

중요하지만 아직 조사되지 않은 한 가지는 2- 연속 (2 개의 매개 변수를 사용하는 연속)과 Sheffer 뇌졸중의 관계 입니다. 고전적인 논리에서 Sheffer 스트로크는 자체적으로 완전한 논리 시스템을 형성 할 수 있습니다 (일부 비 운영자 개념 포함). 친숙한를 의미합니다 and, or, not단지 Sheffer의 스트로크 또는를 사용하여 구현 될 수있다 nand.

이것은 단일 유형 결합자를 사용하여 다른 모든 유형을 형성 할 수 있다는 메시지를 표시하기 때문에 프로그래밍 유형 대응의 중요한 사실입니다.

2 연속의 유형 서명은 (a,b) -> Void. 이 구현을 통해 1- 연속 (정상 연속)을 (a,a)-> Void, 제품 유형을 ((a,b)->Void,(a,b)->Void)->Void, 합계 유형을 ((a,a)->Void,(b,b)->Void)->Void. 이것은 우리에게 표현력의 힘에 대한 인상을줍니다.

더 자세히 살펴보면 Piece의 실존 적 그래프 가 유일한 데이터 유형이 n-continuation 인 언어와 동일 하다는 것을 알게 될 것입니다 . 그러나 기존 언어가이 형식으로되어있는 것을 보지 못했습니다. 그래서 하나를 발명하는 것이 흥미로울 수 있다고 생각합니다.

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