안녕하세요, 수잘갤러 여러분. 기말고사는 잘 보셨습니까?
아시는 분은 아시겠지만 저는 저만의 프로그래밍 언어를 개발 중인데요,
논리형 언어인 Prolog를 개량하여 Butterfly 언어를 만들고자 합니다.
자세한 설명은 여기에 있습니다:
http://gall.dcinside.com/mgallery/board/view/?id=github&no=760&search_head=30&page=1
즉, 한정사 없는 원자논리식 α_1, ..., α_n, β, φ과 변수들의 열 x에 대하여,
∀x (α_1 ∧ ... ∧ α_n → β) 꼴의 공리를 코딩하고 인터프리터에게 φ를 질의하면,
인터프리터는 코딩된 공리계 상에서 Φ가 언제 참인지를 답합니다.
다음 코드를 봅시다:
1 Nat -- 타입 Nat 정의.
2 {
3 zero( ) → "z". -- 0항 생성자 zero 정의.
4 succ( Nat ) → "s" 1. -- 1항 생성자 succ 정의.
5 }
6 Main( Nat ). -- 1항 술어 Main 선언.
7 / Main( zero( ) ). -- 식 Main( zero( ) )는 항상 참이다.
8 Main( n ) / Main( succ( n ) ). -- 식 Main( n )이 참일 때, 식 Main( succ( n ) )이 참이다.
수학적 귀납법에 의하여 임의의 n : Nat에 대하여 식 Main( n )은 항상 참이어야 합니다.
그러므로 다음은 위의 코드 상에서 가능한 질의와 응답입니다.
≪ Main( n )? -- 질의: 변수 n에 어떤 값이 배정될 때 식 Main( n )은 참인가?
≫ n : Nat. -- 응답: n의 타입이 Nat이기만 하면 된다.
모든 변수배정을 열거하게끔 인터프리터를 설계해도 되겠지만
그러면 모든 n을 나열할 수 없을 뿐만 아니라 큰 의미가 없는 구현이 되겠지요.
문제는 귀납법을 구현하기는 커녕 귀납법을 정의하는 것 조차 힘들다는 것입니다.
structural induction을 mutually recursive datatypes에 대해서도 적용할 수 있게끔 정의해야돼요.
그리고 인터프리터가 언제 귀납법을 적용할지 전략을 짜는 것도 힘듭니다.
그래서 이 두 가지를 여러분께 질문합니다.
공리 하나마다 귀납법을 어떻게 적용할지 평가하는 방법을 생각 중입니다.
난 프로그래밍에 대해서는 전혀 모르지만 수학적 귀납법을 배운 한에서 최대한 일반화 해보겠음 - dc App
감사합니다 ㅠㅠ
음..일단 X를 Y의 부분집합이라고 하고 X가 Y의 최소원 "0"(자연수가 아니어도 상관무) 을 원소로 가지고 ""n번째 원소"를 원소로 가질 때 "n+1번째 원소"를 원소로 가진다"고 하면 X=Y임 이게 수학적 귀납법 보면 Y가 well order 이어야 하겠고 Y가 자연수집합이 아니라면 전순서는 적당히 찾아야 함 - dc App
사실 이게 얼마나 도움이 될지는 모르겠지만 귀납법에 대해서는 내가 아는 전부다.. 난 이걸로 연습문제나 좀 증명할 수 있을 뿐임 ㅜ 귀납법을 일반화 하고자 한다면 전순서를 어떻게 잡을지가 가장 문제가 될거라 생각함. 아직 실수 전순서도 못찾았는데 이게 얼마나 어려운 작업인지 상상도 안간다 - dc App
well-ordering theorem에 의해 모든 집합은 전순서집합으로 만들 수 있긴 한데...선택공리같은걸 컴퓨터로 구현하거나 "적당한 전순서"라는걸 과연 만들수 있을지 모르겠음 - dc App
제 시스템에서도 전순서는 못 만들어요 ㅠㅠ
"모든 변수배정을 열거하게끔 인터프리터를 설계" 가 무슨 뜻인지 모르겠지만 아마 "순서를 내가 임의로 정해도 의미가 없다"랑 비슷한 뜻이라면..문제가 해결될 것 같지가 않음. 내 생각엔. - dc App
아무튼 신경 써주셔서 감사합니다
도움이 안된 것 같넹 내 밑천이다 ㅋㅋㅋ - dc App
아니요 신경 써주셔서 정말 감사합니다.
recursion theory 아심?
귀납적 증명은 일반적으로 inductive set의 구성에서 얻어짐 귀납적 정의는 일반적으로 recursive function theorem에서 얻어짐
저... 죄송하지만 다른 방법이 떠올랐습니다. 답변해 주셔서 감사합니다.
형식 문법처럼 n -> zero( ); n -> succ(n).하면 돼요.
내가 컴맹이라 좀 그렇지만 그건 자연수에 대한 귀납법 아님? 일반적인 게 아니라
사실 n을 모두 열거할 수 없어서 "모든 n에 대하여 성립한다"고 응답을 해야했었는데, 형식문법으로 응답하면 될 것 같아요.
뭔소린지는 모르겠고 암튼 귀납법은 그 책에서 나오는 용어로 구조체가 N이 아닌 경우에도 확장되니 해보셈
네, 알겠습니다.