Logic Programming
논리프로그래밍은 선언적 (declarative) 프로그래밍 패러다임이다. 즉 해를 찾기 위한 일련의 단계들을 주목하기 보다는, 그 해가 가져야 하는 일련의 속성 (attribute) 들에 주목하는 것이다. 가장 널리 사용되는 논리프로그램 언어는 Prolog 이다. 요즈음의 그런 패러다임의 언어는 Mercury and Oz 가 있다. 대략 그 과정은 다음과 같이 표현된다.
관련되는 패러다임으로는 일련의 사실들 (facts) 로부터 일반 규칙 (general rule)을 찾으려고 시도하는 inductive logic programming 이 있다.
논리프로그래밍의 핵심은 컴퓨터 프로그래밍에 형식논리 (formal logic) 스타일을 적용한 것이다. 수학자와 철학자들은 이론을 개발하기 위한 도구로서 논리 (Logic) 을 찾는다. 많은 문제들이 하나의 이론으로서 자연스럽게 표현된다. 하나의 문제가 해법을 필요로 한다는 것은, 새로운 가설이 기존 이론과 모순되는지 아닌지를 묻는 것과 같다. 하나의 증명 (proof)을 구축하는 과정이 잘 알려진다면, 논리는 질문에 답하는 믿을 만한 방법으로 생각될 것이다. 논리프로그래밍 시스템은 이러한 과정을 자동화 한다. 인공지능 (Artificial Intelligence) 은 논리프로그래밍의 발전에 커다란 영향을 끼쳤다.
원숭이와 바나나 문제 (Monkey and Banana Problem) 은 논리프로그래밍 영역에서 연구되는 유명한 문제이다. 원숭이가 바나나에 다가가는 경로를 프로그래머가 명시적으로 나타내주지 않아도, 컴퓨터는 실제로 원숭이가 바나나에 이르는 가능한 길을 추론해 낸다.
논리프로그래밍은 문제가 존재하는 세계를 묘사하는 논리적 모델 (logic model)을 창조한다. 논리프로그래밍 접근방식이란 그 모델에 대한 새로운 문장 (statements)를 창조하는 것이다. 그 세계의 상태에 대한 지식은 매시간 확장된다. 하나의 문제는 일반적으로 단 하나의 가설로서 서술된다. 논리 프로그램은 그 가설이 실제로 그 모델에 대한 하나의 정리 (theorem) 인지를 증명함으로써 그 문제를 해결한다.
논리프로그래밍의 유명한 응용영역은 전문가시스템 (Expert System) 과 자동 정리증명 (Theorem Proving) (프로그램이 기존 이론을 확장하는 참신한 정리를 생성하는것) 이다. ... (Wikipedia : Logic Programming)
term :
논리프로그래밍 (Logic Programming) Prolog Robert A. Kowalski John A. Robinson 도출법 (Resolution)
paper :
제약논리 프로그래밍 (Constraint Logic Programming) : 이재규 외