얕은 대 깊은 삽입


47

Coq 또는 Isabelle과 같은 교정 보조 장치로 논리를 인코딩 할 때는 얕은 삽입 과 깊은 삽입 중 하나를 선택해야합니다 . 얕은 포함 논리 수식은 정리 증명의 논리에 직접 작성되는 반면, 깊은 포함 논리 수식은 데이터 형식으로 표시됩니다.

  • 다양한 접근 방식의 장점과 한계는 무엇입니까?
  • 사용할 것을 결정하는 데 사용할 수있는 지침이 있습니까?
  • 체계적인 방식으로 두 표현 사이를 전환 할 수 있습니까?

동기 부여로서 다양한 보안 관련 논리를 Coq에 인코딩하고 다른 접근 방식의 장단점이 무엇인지 궁금합니다.

답변:


28

다양한 접근 방식의 장점과 한계는 무엇입니까?

  • 딥 임베딩의 장점 : 수식 구조를 유도하여 사물을 증명하고 정의 할 수 있습니다. 관심의 예는 공식의 크기입니다.

  • 딥 임베딩의 단점 : 변수 바인딩을 명시 적으로 처리했습니다. 그것은 보통 매우 힘들다.

사용할 것을 결정하는 데 사용할 수있는 지침이 있습니까?

얕은 포함은 개체 논리에서 입증 된 결과를 가져 오는 데 매우 유용합니다. 예를 들어 작은 논리 (예 : 분리 논리)로 무언가를 입증 한 경우 얕은 임베딩은 Coq.

다른 한편으로, 딥 임베딩은 객체 로직에 대한 메타 정리 (예를 들어 컷 제거)와 같은 메타 이론을 증명할 때 거의 필수입니다.

체계적인 방식으로 두 표현 사이를 전환 할 수 있습니까?

얕은 포함의 개념은 실제로 개체 수식의 모델에서 직접 작동하는 것입니다. 일반적으로 사람들은 객체 공식 P를 직접 (표기법을 사용하거나 직접 번역하여) Prop의 주민에게 매핑합니다. 물론 객체 논리의 공식을 포함하여 얻을 수없는 Prop의 주민도 있습니다. 그러므로 당신은 어떤 종류의 완전성을 잃습니다.

따라서 해석 기능을 통해 딥 임베딩 설정에서 얻은 모든 결과를 보낼 수 있습니다.

다음은 약간의 coq 예입니다.

유도 식 : 설정 : =
    Ftrue : 공식
  | 거짓 : 공식
  | 팬드 : 공식-> 공식-> 공식
  | : 공식-> 공식-> 공식.

고정 점 해석 (F : 공식) : Prop : = F와 일치 
    Ftrue => 참
  | 거짓 => 거짓
  | 팬드 ab => (a 해석) / \ (b 해석)
  | ab => (a 해석) \ / (b 해석)
 종료.

유도 유도 가능 : 공식-> 소품 : = 
    deep_axiom : 파생 가능한 Ftrue
  | deep_and : forall ab, 파생 가능 a-> 파생 가능 b-> 파생 가능 (Fand ab)
  | deep_or1 : forall ab, 파생 가능 a-> 파생 가능 (ab의 경우)
  | deep_or2 : forall ab, 파생 가능 b-> 파생 가능 (ab의 경우).

유도 성 분리 가능 : Prop-> Prop : = 
    shallow_axiom : 분리 가능한 True 
  | shallow_and : forall ab, 분리 가능 a-> 분리 가능 b-> 분리 가능 (a / \ b)
  | shallow_or1 : forall ab, 분리 가능 a-> 분리 가능 (a \ / b)
  | shallow_or2 : forall ab, 분리 가능 b-> 분리 가능 (a \ / b).

(* 다음과 같은 정리를 증명할 수 있습니다. *)
벼랑 shallow_deep : 
   forall F, 파생 가능 F-> 파생 가능 (F 해석)

(* 당신은 다음의 정리를 증명할 수 없습니다 : *)
렘마 t : 
   모든 P, 분리 가능한 P->가 F 인 경우 F = P를 해석합니다.

22

대략적으로 논리를 깊이 삽입하면 (1) 논리의 구문을 나타내는 데이터 유형을 정의하고 (2) 구문모델을 제공 하며 (3) 구문에 대한 공리가 적절한 지 증명합니다. 모델에. 얕은 포함을 사용하면 단계 (1)과 (2)를 건너 뛰고 모델부터 시작하여 수식 사이의 관계를 증명할 수 있습니다. 즉, 얕은 임베딩은 일반적으로 딥 임베딩으로 작업을 끝내는 작업을 나타 내기 때문에 일반적으로지면에서 벗어나는 작업이 적습니다.

그러나 깊이 포함하는 경우 일반적으로 반복되는 구문이있는 수식을 사용하므로 반사 결정 절차를 작성하는 것이 더 쉽습니다. 또한 모델이 이상하거나 복잡하면 일반적으로 의미와 직접 작업하기를 원하지 않습니다. (예를 들어, 생체 직교성을 사용하여 허용 가능한 폐쇄를 강요하거나 Kripke 스타일 모델을 사용하여 분리 논리 또는 유사한 게임에서 프레임 속성을 강요하는 경우) 깊게 임베딩하면 변수 바인딩 및 대체에 대해 많이 생각하게됩니다. (a) 사소한 일이며 (b) 끝없는 성가신 근원이기 때문에 마음을 화나게 할 것입니다.

올바른 순서는 다음과 같습니다. (1) 얕은 삽입을 시도하십시오. (2) 증기가 소진되면 전술과 견적을 사용하여 실행하려는 결정 절차를 실행하십시오. (3) 증기가 부족한 경우 딥 임베딩에 종속 형식 구문을 포기하고 사용하십시오.

  • 처음 방문하는 경우 (3)에 몇 달이 걸릴 계획입니다. 당신은 것입니다 멋진이 체류 제정신을 증명 조수의 기능에 익숙해 질 필요가있다. (그러나 이것은 일반적으로 지불 할 투자입니다.)
  • 교정 비서에 의존 유형이없는 경우 2 단계를 유지하십시오.
  • 객체 언어 자체가 종속적으로 입력 된 경우 레벨 2를 유지하십시오.

또한 사다리 위로 서서히 올라 가려고하지 마십시오. 복잡성 사다리를 오르기로 결정하면 한 번에 전체 단계를 수행하십시오. 비트 단위로 작업을 수행하면 이상하고 사용할 수없는 많은 이론이 생깁니다 (예를 들어, 여러 개의 반 구문 구문과 이상한 방식으로 구문과 의미를 혼합하는 이론이 나타납니다). 결국 버려야합니다.

편집 : 여기 사다리를 올라가는 것이 왜 그렇게 유혹적이고 왜 (일반적으로) 고통으로 이끄는 지 설명하는 의견이 있습니다.

ABIABBA(AB)CA(BC)(IA)(BC)A(B(CI))

이것은 사실이며 작동합니다! 그러나 결합도 ACUI이므로 분리도 마찬가지입니다. 따라서 다른 목록 데이터 유형을 사용하여 다른 증명에서 동일한 프로세스를 수행 한 다음 서로 다른 분리 논리 조각에 대한 세 가지 구문이 있으며 각각에 대한 메타 정리가 있어야합니다. 분리를 위해 결합을 분리 한 것으로 입증 된 메타 이론을 원한다면 구문을 혼합 한 다음 미치게됩니다.

합리적인 노력으로 처리 할 수있는 가장 큰 조각을 대상으로하는 것이 좋습니다.


이 훌륭한 답변에 감사드립니다, Neel. 나는 두 가지 답변을 수락 할 수 있기를 바랍니다 (다른 사람들의 투표에 따라 결정했습니다).
Dave Clarke

문제 없어요. 나는 점진적으로 가고 싶은 이유에 대해이 답변에 추가해야 할 것을 기억했습니다.
Neel Krishnaswami

ACUI 속성을 다루는 것은 항상 성가신 일입니다. 왜 Coq는 Maude의 책에서 잎을 꺼낼 수 없습니까?
Dave Clarke

14

깊고 얕은 스펙트럼이 있음을 이해하는 것이 중요합니다. 언어의 구성에 대한 귀납적 인 주장에 어떻게 든 참여해야하는 언어의 일부를 깊이 모델링하면 나머지는 논리의 기질에 대한 직접적인 의미를 얕게 보는 것이 좋습니다.

예를 들어 Hoare Logic에 대해 추론하고 싶을 때는 식 언어를 얕게 모델링 할 수 있지만 어휘 할당 언어의 개요는 구체적인 데이터 형식이어야합니다. x + y 또는 a <b의 구조를 입력 할 필요는 없지만 whileetc 로 작업해야합니다 .

다른 답변에서는 종속 유형에 대한 암시가있었습니다. 이것은 고대 언어가 바인더 를 사용하여 언어를 제정신으로 표현 하는 것이 가능한 한 얕지만 여전히 귀납적 인 주장을 인정한다는 점을 상기시킵니다. 제 생각에 배심원은 지난 10-20 년 동안 그 주제에 대해 등장한 다양한 접근법과 논문에 대해 여전히 판단하고 있습니다. 다른 증거 조수 커뮤니티에 대한 "POPLmark 과제"도 그 정도였습니다.

이상하게도, 종속 유형이 없는 고전적인 HOL에서 C. Urban의 HOL-Nominal 접근 방식은 이러한 프로그래밍 언어 공식화 커뮤니티에서 문화적 변화를 따라 가지 못했지만 얕은 바인딩에 대해서는 상당히 잘 작동했습니다.

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