본문으로 건너뛰기

서술 논리: 개념, 역할, 개체

📍 현재 위치: 2부 · 서술 논리 — 4장. 이전 장인 TBox와 ABox는 온톨로지를 일반 규칙의 스키마 상자와 근거 사실의 데이터 상자로 나누었습니다; 이제 우리는 그 스키마 상자를 열어, 그것이 미해결로 남겨 둔 물음을 던집니다 — 그 공리들은 정확히 어떤 언어로 쓰여 있으며, 그것들은 무엇을 뜻하는가?

온톨로지는 그 공리가 쓰인 언어만큼만 신뢰할 수 있습니다. 3장은 학계 세계를 TBox(스키마 — "교수는 연구자다" 같은 일반 규칙)와 ABox(데이터 — "alice는 교수다" 같은 근거 사실)로 나누었지만, 공리 자체는 그저 암시적인 산문으로 다루었습니다. 이 장은 그것들을 엄밀하게 만듭니다. 그 언어는 서술 논리(description logic)(DL)이며, 1차 논리(first-order logic)(FOL)의 작고 신중하게 골라낸 파편입니다. 그리고 그것이 작은 것은 의도적입니다: 세 가지 종류의 어휘, 그것들을 결합하는 몇 가지 방법, 그리고 기계가 모든 문장을 모델에 비추어 보고 반드시 따라 나와야 하는 것을 보고할 수 있을 만큼 정밀한 의미입니다.

쉽게 말하면

한 학과에 속한 모든 사람을 오직 세 가지 종류의 낱말만으로 묘사한다고 상상해 보십시오. 종류를 나타내는 명사 — "교수," "학생," "사람" — 각각이 사람들의 한 집합을 이름 붙입니다. 두 사람을 잇는 동사 — "지도한다," "인용한다" — 각각이 하나의 관계를 이름 붙입니다. 그리고 고유 명사 — "alice," "bob" — 각각이 한 특정한 사람을 가리킵니다. 이 세 가지 낱말 종류만으로, 그리고 그것들을 접합하는 두 가지 방법("어떤 학생을 지도하는 교수")만 더하면, 여러분은 아무런 모호함 없이 놀라울 만큼 많은 것을 말할 수 있습니다 — 그리고 기계는 모든 문장을 실제 명부에 견주어 확인하고 그 밖에 무엇이 성립해야 하는지를 알려 줄 수 있습니다. 그 규율 잡힌 세 낱말 언어가 바로 서술 논리입니다.

이 장에서 다루는 내용

  • 세 가지 어휘 — 개념 이름(개체들의 집합), 역할 이름(개체들 사이의 이항 관계), 개체 이름(사물 그 자체); 학계 세계는 정확히 10개의 개념과 6개의 역할을 선언합니다.
  • 구성자, 기호에 앞서 말로 풀어보기 — 논리곱 CDC \sqcap D(두 집합 모두에 동시에 속함), 존재 제한 r.C\exists r.C(rr로 어떤 CC와 관계 맺음), 그리고 두 극단인 ⊤(모든 것)와 ⊥(아무것도 아님).
  • 모델 이론적 의미 — 해석 I=(ΔI,I)\mathcal{I} = (\Delta^{\mathcal{I}}, \cdot^{\mathcal{I}})은 모든 개념을 하나의 집합으로, 모든 역할을 하나의 관계로 보내며, 각 구성자는 고정된 하나의 집합론적 읽기를 갖습니다.
  • 공리를 엄밀하게 만들기 — 일반 개념 포함 CDC \sqsubseteq DCIDIC^{\mathcal{I}} \subseteq D^{\mathcal{I}}일 때 정확히 어떤 모델 안에서 성립하고, 그것이 모든 모델에서 성립할 때 정확히 함의됩니다; 역할 포함과 역할 사슬도 한 단계 아래에서 똑같은 방식으로 읽힙니다.
  • 표층 구문 — 동반 코드의 And, Some, Sub, Chain, RoleSub 빌더가 Professor ⊑ ∃advises.Student 같은 공리를 중첩된 튜플로부터 어떻게 조립해 내는가.
  • 추론기가 계산하는 것 — 포섭, 충족 가능성, 분류, 인스턴스 검사라는 네 가지 표준 과제와, 동반 코드의 어느 줄이 각각에 답하는지.

하나의 정의역 위에서 해석된 서술 논리를 나타낸 3단 띠 다이어그램입니다. 어휘라는 레이블이 붙은 맨 위 띠는 세 개의 열을 보여줍니다: 개념 이름은 Professor, Student, Person이라는 레이블이 붙은 원으로, 역할 이름은 advises와 cites라는 레이블이 붙은 방향 화살표로, 개체 이름은 alice, bob, carol이라는 작고 속이 찬 점으로 그려져 있습니다. 구성자라는 레이블이 붙은 가운데 띠는 두 개의 접합 연산을 보여줍니다: 논리곱 Professor and Student는 두 원이 겹치는 부분으로 표현되고, 존재 제한 there exists advises dot Student는 Student 원 안에 도달하는 나가는 advises 화살표를 지닌 점으로 표현되며, 여기에 모든 것을 담는 큰 원으로서의 top 기호와 빈 원으로서의 bottom 기호가 더해집니다. 해석이라는 레이블이 붙은 맨 아래 띠는 정의역 delta를 나타내는 커다란 타원을 보여주는데, 개념 원들은 실제 부분집합으로, 역할 화살표는 실제 점들의 쌍으로 그려져 있고, 점선으로 된 사상 선들이 어휘 띠의 각 이름을 정의역 안의 그 집합, 관계, 또는 점 위로 끌고 내려와서, 일반 개념 포함이 한 원이 다른 원 안에 완전히 들어앉은 모습으로 그려지게 합니다. 하나의 그림 속 서술 논리: 개념 이름은 집합으로, 역할 이름은 관계로, 개체 이름은 정의역의 점으로 사상되며, 각 구성자와 각 포섭 관계는 그대로 하나의 평범한 집합론적 사실로 읽힙니다. 저자가 AI의 도움을 받아 직접 제작한 원본 도해.

세 가지 어휘

서술 논리는 서로 겹치지 않는 세 개의 알파벳에서 출발합니다 [1]. 개념 이름(concept name)은 개체들의 원자적 부류입니다 — 1차 논리에서의 단항 술어(unary predicate)에 대응하는 DL의 대응물로, 사물들의 집합입니다. 역할 이름(role name)은 원자적 이항 관계입니다 — 이항 술어(binary predicate)이며, 순서쌍들의 집합입니다. 개체 이름(individual name)은 하나의 특정한 사물을 가리키는 상수입니다. 1차 논리의 용어로 말하면, Professor는 술어 Professor(x)\text{Professor}(x)이고, advises는 술어 advises(x,y)\text{advises}(x,y)이며, alice는 상수 aa입니다. 서술 논리 전체는, FOL을 정확히 이 세 가지 재료와 그것들을 결합하는 고정된 메뉴로 제한했을 때 무엇을 만들고 결정할 수 있는지를 연구하는 학문입니다.

학계 세계는 자신의 두 스키마 수준 알파벳을 ontology.py에 평범한 파이썬 리스트로 고정해 둡니다(112–118번째 줄):

CONCEPTS = [
"Person", "Researcher", "Professor", "Student",
"Paper", "Institution", "Topic",
"Dean", "TenuredStudent", "TenuredStudentAdvisor",
]

ROLES = ["advises", "authored", "cites", "affiliated", "about", "grandAdvisor"]

그것이 데이터 위에 놓인 어휘 전부입니다: 10개의 이름 붙은 개념6개의 역할. 개체는 세 번째 알파벳이며, 손으로 작성한 목록이 아니라 1권의 사실들로부터 옵니다 — alice, bob, p1, mit 등 13개이며(3장은 ABox가 기계적으로 만들어져서 그것이 증명 가능하게 같은 세계임을 보여 주었습니다). 추론기가 결론짓는 모든 것은 오직 이 이름들만으로 진술됩니다; 나중에 정규화가 고안해 낼 새 기호 _N1, _N2는 내부 발판(scaffolding)일 뿐이며, 보고되는 어휘에서 의도적으로 제외됩니다.

구성자, 기호에 앞서 말로 풀어보기

개념 이름 그 자체만으로는 오직 종류를 이름 붙이는 것만 할 수 있습니다. 서술 논리의 힘은, 작은 구성자(constructor) 집합을 이용해 기존 개념들로부터 새로운, 이름 없는 개념을 만들어 낼 수 있다는 데 있습니다. 이 온톨로지가 살고 있는 EL 파편은 정확히 두 개의 구성자와 두 개의 상수만을 유지합니다. 먼저 말로, 그다음 기호로 살펴보겠습니다.

  • 논리곱(conjunction), CDC \sqcap D로 쓰고 "CC이면서 DD"로 읽습니다: 두 개념 모두에 동시에 속하는 개체들입니다. Professor ⊓ Student는 교수이면서 동시에 학생인 모든 사람입니다.
  • 존재 제한(existential restriction), r.C\exists r.C로 쓰고 "rr을 통해 어떤 CC와 관계 맺음"으로 읽습니다: CC 안에 놓인 rr-이웃을 적어도 하나 가지는 개체들입니다. ∃advises.Student는 적어도 한 명의 학생을 지도하는 모든 사람입니다. 역할 rr과 채움 개념(filler concept) CC는 둘 다 이 구성자의 일부이며, 둘 중 하나만 바뀌어도 집합이 바뀝니다.
  • 최상위(top), ⊤로 쓰고 "모든 것"으로 읽습니다: 모든 개체가 속하는 개념으로, owl:Thing에 대한 DL의 이름입니다.
  • 바닥(bottom), ⊥로 쓰고 "아무것도 아님"으로 읽습니다: 공허한 개념으로, owl:Nothing입니다. 어떤 개체도 결코 ⊥가 될 수 없으므로, 어떤 이름 붙은 개념이 ⊥에 포함된다고 도출하는 것이야말로 추론기가 "이 클래스는 불가능하다"고 보고하는 정확한 방식입니다.

이 네 가지는 자유롭게 결합되고 중첩됩니다: advises.(authored.Paper)\exists\text{advises}.(\exists\text{authored}.\text{Paper})는 "논문을 저술한 누군가를 지도한다"이며, 이 온톨로지가 실제로 사용하는 복합 개념입니다. EL이 의도적으로 결여하고 있는 것 — 부정 ¬C\lnot C, 논리합 CDC \sqcup D, 전칭 한정 r.C\forall r.C — 은 다음 장의 주제이며, 이것이 바로 이 장이 계산적으로 온순한 상태에 머무는 이유입니다.

모델 이론적 의미

의미론 없는 구문은 그저 장식일 뿐입니다. 서술 논리를 논리로 만들어 주는 것은, 그 기호들 하나하나가 모델(model)에 의해 부여되는 고정되고 기계적인 의미를 갖는다는 사실입니다 [2]. 그 의미는 집합론적이며, 단 하나의 대상에 달려 있습니다.

해석(interpretation)은 하나의 쌍 I=(ΔI,I)\mathcal{I} = (\Delta^{\mathcal{I}}, \cdot^{\mathcal{I}})입니다. 첫 번째 성분 ΔI\Delta^{\mathcal{I}}("델타-I"로 읽습니다)는 공허하지 않은 정의역(domain)입니다: 이 특정한 세계에 존재하는 모든 사물의 집합입니다. 두 번째 성분 I\cdot^{\mathcal{I}}("해석 함수"로 읽습니다)는 모든 기호를 그 정의역 안에 접지시키는 사전입니다:

  • 각 개념 이름 AA는 부분집합 AIΔIA^{\mathcal{I}} \subseteq \Delta^{\mathcal{I}}이 됩니다 — AA 사물들입니다;
  • 각 역할 이름 rr은 이항 관계 rIΔI×ΔIr^{\mathcal{I}} \subseteq \Delta^{\mathcal{I}} \times \Delta^{\mathcal{I}}가 됩니다 — 그 역할이 연결하는 쌍들입니다;
  • 각 개체 이름 aa는 하나의 원소 aIΔIa^{\mathcal{I}} \in \Delta^{\mathcal{I}}가 됩니다 — 그것이 이름 붙이는 사물입니다.

그 토대로부터 두 개의 상수와 두 개의 구성자가 각각 하나의 방정식에 의해 강제됩니다. 상수는 두 극단입니다:

I=ΔI,I=.\top^{\mathcal{I}} = \Delta^{\mathcal{I}}, \qquad \bot^{\mathcal{I}} = \varnothing .

논리곱은 집합의 교집합이고, 존재 제한은 한 단계짜리 도달 가능성 집합입니다:

(CD)I  =  CIDI,(C \sqcap D)^{\mathcal{I}} \;=\; C^{\mathcal{I}} \cap D^{\mathcal{I}}, (r.C)I  =  {xΔI  :  there is a y with (x,y)rI and yCI}.(\exists r.C)^{\mathcal{I}} \;=\; \{\, x \in \Delta^{\mathcal{I}} \; : \; \text{there is a } y \text{ with } (x,y) \in r^{\mathcal{I}} \text{ and } y \in C^{\mathcal{I}} \,\}.

두 번째 것을 천천히 읽어 보십시오. 이것이 이 논리의 핵심이기 때문입니다. 중괄호 안의 콜론은 "~를 만족하는"으로 읽습니다; 전체 표현은 rr-엣지를 따라 CIC^{\mathcal{I}} 안에 놓인 적어도 하나yy로 갈 수 있는 모든 정의역 원소 xx를 모읍니다. 이것은 존재적입니다 — 목격하는 이웃 하나면 충분합니다 — 그리고 바로 이 때문에 이 구성자는 \exists로 쓰입니다. 이는 각 구성자를 순수한 집합론으로 풀어내므로, 기계는 어떤 해석에서든 어떤 복합 개념이라도 모호함 없이 평가할 수 있습니다. 아래 표가 전체 메뉴를 모아 놓았습니다.

구성자구문평범한 읽기의미론 (I\cdot^{\mathcal{I}})
최상위\top모든 것ΔI\Delta^{\mathcal{I}}
바닥\bot아무것도 아님\varnothing
논리곱CDC \sqcap DCC이면서 동시에 DDCIDIC^{\mathcal{I}} \cap D^{\mathcal{I}}
존재 제한r.C\exists r.C어떤 CCrr로 관계 맺음{x:y.(x,y)rIyCI}\{\, x : \exists y.\, (x,y) \in r^{\mathcal{I}} \wedge y \in C^{\mathcal{I}} \,\}

공리, 엄밀하게 다듬기

이제 그 결실을 거둘 차례입니다: 공리란 어떤 해석이 허용되는지에 대한 제약이며, 이것 역시 한 줄짜리 집합론적 의미를 갖습니다. 주력이 되는 공리는 일반 개념 포함(general concept inclusion, GCI)으로, CDC \sqsubseteq D로 쓰고 "CCDD에 포섭된다"로 읽습니다. 이는 왼쪽 집합이 오른쪽 집합 안에 완전히 놓일 때 정확히 어떤 해석에서 성립합니다:

I satisfies CD    CIDI.\mathcal{I} \text{ satisfies } C \sqsubseteq D \quad\iff\quad C^{\mathcal{I}} \subseteq D^{\mathcal{I}}.

TBox의 모든 공리를 충족시키는 해석은 그것의 모델(model)입니다. 그리고 추론기가 정말로 답하는 질문은 "이것이 어떤 한 모델에서 성립하는가"가 아니라 "이것이 모든 모델에서 성립하는가"입니다: TBox가 CDC \sqsubseteq D함의(entail)한다는 것은, TCD\mathcal{T} \models C \sqsubseteq D로 쓰며, T\mathcal{T}모든 모델 I\mathcal{I}에서 CIDIC^{\mathcal{I}} \subseteq D^{\mathcal{I}}일 때 정확히 성립합니다. 함의란 어떤 합법적인 세계도 빠져나갈 수 없는 포섭입니다 — "내가 그린 그림에서는 이 두 원이 우연히 겹쳐 놓인다"는 것과 "규칙에 부합하는 모든 그림에서 이 두 원은 반드시 겹쳐 놓여야 한다"는 것 사이의 차이입니다.

역할 공리는 한 단계 아래에서, 원소가 아니라 쌍에 대해 읽힙니다. 역할 포함(role inclusion) rsr \sqsubseteq srIsIr^{\mathcal{I}} \subseteq s^{\mathcal{I}}를 뜻합니다: 역할 rr이 연결하는 모든 쌍을 ss 역시 연결합니다. 역할 사슬(role chain) r1r2sr_1 \circ r_2 \sqsubseteq s(∘는 "~와 합성한"으로 읽습니다)는 다음을 뜻합니다

r1Ir2I  =  {(x,z):y.(x,y)r1I(y,z)r2I}    sI.r_1^{\mathcal{I}} \circ r_2^{\mathcal{I}} \;=\; \{\, (x,z) : \exists y.\, (x,y) \in r_1^{\mathcal{I}} \wedge (y,z) \in r_2^{\mathcal{I}} \,\} \;\subseteq\; s^{\mathcal{I}}.

학계 세계의 유일한 사슬인 advises ∘ advises ⊑ grandAdvisor가 바로 정확히 이것입니다: 지도 관계 엣지 두 개를 연달아 따라가면 grandAdvisor 엣지로 갈 수밖에 없습니다 — 1권이 전방 연쇄로 계산했던 것과 똑같은 두-홉 합성이며, 이제는 모든 모델을 구속하는 스키마 법칙으로 진술된 것입니다.

표층 구문: 공리는 어떻게 조립되는가

동반 코드는 이 공리들을 아주 작은 파이썬 표층 구문으로 씁니다 — 구성 요소마다 하나씩의 빌더를 두어서, 여러분이 읽는 코드 그 자체가 곧 표기법이 되도록 말입니다. 다음은 ontology.py(53–75번째 줄, 이어서 98–106번째 줄)에서 그대로 가져온 다섯 개의 빌더와 프리티-프린터(pretty-printer)입니다:

def And(*concepts) -> tuple:
"""The conjunction of two or more concepts: C ⊓ D ⊓ ..."""
return ("⊓", tuple(concepts))


def Some(role: str, concept) -> tuple:
"""The existential restriction ∃role.concept — "related by *role* to some *concept*"."""
return ("∃", role, concept)


def Sub(lhs, rhs) -> tuple:
"""A general concept inclusion (GCI): lhs ⊑ rhs."""
return ("⊑", lhs, rhs)


def Chain(r1: str, r2: str, s: str) -> tuple:
"""A role chain (complex role inclusion): r1 ∘ r2 ⊑ s."""
return ("∘⊑", (r1, r2), s)


def RoleSub(r: str, s: str) -> tuple:
"""A simple role inclusion: r ⊑ s."""
return ("r⊑", r, s)

모든 구성 요소는 태그 붙은 튜플(tagged tuple)입니다: 개념은 그냥 문자열 이름이거나, 첫 번째 원소가 유니코드 태그 ⊓ 또는 ∃인 쌍이며, 공리는 ⊑, ∘⊑, r⊑ 중 하나로 태그된 삼중항입니다. 공리 (4), Professor ⊑ ∃advises.Student가 스스로 조립되는 모습을 지켜보십시오. 이는 TBox 안에서 하나의 중첩된 호출로 쓰입니다(ontology.py 133번째 줄):

Sub("Professor", Some("advises", "Student")),

안에서 바깥으로: Some("advises", "Student")는 튜플 ("∃", "advises", "Student")를 반환합니다 — 복합 개념 advises.Student\exists\text{advises}.\text{Student}입니다. Sub는 그것을 ("⊑", "Professor", ("∃", "advises", "Student"))로 감쌉니다 — 왼쪽이 이름 Professor이고 오른쪽이 그 존재 제한인 GCI입니다. 아무것도 문자열로만 이루어진 산문이 아닙니다; 공리 그 자체가 추론기가 패턴 매칭을 할 자료 구조입니다. render 함수(98–106번째 줄)는 같은 튜플들을 거꾸로 훑어 내려가 교과서적 표기법으로 바꾸며, 논리곱 성분들을 ⊓로 이어 붙이고 존재 제한을 ∃role.filler로 출력합니다. 이 모듈을 실행하면 그 방식으로 TBox 전체가 출력됩니다 — 다음은 python3 ontology.py의 실제 커밋된 출력입니다:

10 named concepts, 6 roles, 14 TBox axioms; ABox: 13 concept assertions, 18 role assertions over 13 individuals.

TBox:
Professor ⊑ Researcher
Student ⊑ Researcher
Researcher ⊑ Person
Professor ⊑ ∃advises.Student
∃advises.⊤ ⊑ Researcher
Professor ⊓ Student ⊑ ⊥
advises ∘ advises ⊑ grandAdvisor
Dean ⊑ Professor
Dean ⊑ ∃advises.Professor
TenuredStudent ⊑ Professor
TenuredStudent ⊑ Student
TenuredStudentAdvisor ⊑ ∃advises.TenuredStudent
∃advises.∃authored.Paper ⊑ Person
Person ⊓ ∃authored.Paper ⊑ Researcher

모든 줄은 세 가지 공리 형태 중 하나이며, 그 안의 모든 기호는 이제 앞의 두 절에서 다룬 정확한 의미론을 갖습니다. Professor ⊓ Student ⊑ ⊥는 교집합 ProfessorIStudentI\text{Professor}^{\mathcal{I}} \cap \text{Student}^{\mathcal{I}}가 모든 모델에서 공허해야 함을 말합니다 — 이것이 바로 일부러 망가뜨려 놓은 두 개념 TenuredStudentTenuredStudentAdvisor를 충족 불가능하게 만드는 서로소(disjointness) 관계입니다.

추론기가 계산하는 것

서술 논리 추론기는 답을 저장해 두는 데이터베이스가 아니라, 위의 의미론으로부터 답을 도출해 냅니다. 표준 과제는 네 가지이며, 그 하나하나는 함의 — "모든 모델에서 성립함" — 로 정의되므로, 각각은 단순한 조회가 아니라 진짜 연역입니다 [3].

  • 포섭(subsumption): TCD\mathcal{T} \models C \sqsubseteq D인가? 한 개념이 반드시 다른 개념의 부분집합인가? 이것이 원자적 질의이며, 나머지 과제들은 이로부터 만들어집니다.
  • 충족 가능성(satisfiability): CIC^{\mathcal{I}}가 공허하지 않은 어떤 모델이 있는가? 동등하게, CC \sqsubseteq \bot가 함의되지 않는가? 충족 불가능한 개념은 모델링 버그입니다 — 어떤 개체도 결코 가입할 수 없는 클래스입니다.
  • 분류(classification): 이름 붙은 개념들 사이의 모든 포섭 관계를 한꺼번에 계산하여, 개념 위계(단언된 엣지만이 아니라 추론된 위계)를 산출합니다.
  • 인스턴스 검사(instance checking): TAC(a)\mathcal{T} \cup \mathcal{A} \models C(a)인가? 이름 붙은 개체 aa가 개념 CC의 인스턴스일 수밖에 없는가? 이것이 ABox를 참조하는 유일한 과제이며, 데이터 수준으로 내려간 포섭의 대응물입니다.

동반 코드의 el_completion.py는 처음 세 과제에 대해, 포화된 자료 구조 S로부터 곧바로 답합니다. 여기서 S(A)A가 포섭되는 모든 개념 이름을 담고 있습니다. 그 분류 단계는 하나의 쌍조건문(biconditional)입니다(35–36번째 줄): "ABA \sqsubseteq B iff BS(A)B \in S(A); S(A)\bot \in S(A)인 개념은 충족 불가능하다." 값을 읽는 함수들은 이를 그대로 구현합니다 — subsumes(322–324번째 줄)는 소속 관계 sup in S.get(sub, ...)를 검사하고, unsatisfiable(273–276번째 줄)은 BOT in subs를 만족하는 모든 이름을 모읍니다. 아래 표는 각 과제를 그것에 답하는 줄에 고정해 둡니다.

과제질문S에서 읽어 낸 답동반 코드 함수
포섭TCD\mathcal{T} \models C \sqsubseteq D?DS(C)D \in S(C)subsumes (322–324)
충족 가능성CC가 언젠가 공허하지 않은가?S(C)\bot \notin S(C)unsatisfiable (273–276)
분류위계 전체모든 BS(A)B \in S(A)classify / subsumptions (279–319)
인스턴스 검사TAC(a)\mathcal{T}\cup\mathcal{A} \models C(a)?ABox 개체를 개념으로서(뒤로 미룸; ABox 추론, 4부 이후)

그 포화가 어떻게 계산되는지 — 네 가지 정규형으로의 정규화, 그리고 완성 규칙의 고정점 — 는 8장과 9장(정규화, 완성 규칙)의 주제입니다. 이 장에서는 답의 형태만 알면 됩니다: 네 과제 중 세 개는 S에서 단 하나의 소속 관계를 읽어 내는 것으로 환원되며, 그 환원이야말로 개념·역할·개체로 이루어진 작고 모델 이론적인 언어가 안겨 주는 바로 그것입니다.

아직 풀리지 않은 부분

이 장 전체의 정직한 긴장은, 어느 쪽도 공짜로 얻을 수 없는 거래입니다. 우리가 모든 기호에 부여한 의미는 집합론적이고 전역적입니다 — 모든 구성자는 모든 해석에서 평가됩니다 — 그러므로 원리적으로는 더 풍부한 구성자도 언제나 이용 가능합니다: 의미론 안의 그 무엇도 부정 ¬C\lnot C(집합 여집합), 논리합 CDC \sqcup D(집합 합집합), 전칭 한정 r.C\forall r.C("모든 rr-이웃이 CC이다")를 금지하지 않습니다. 함정은 의미가 아니라 비용에 있습니다. 그런 연산자들을 더하면 서술 논리의 복잡도 사다리를 오르게 됩니다: OWL 2 DL의 배후에 있는 표현력 풍부한 논리 SROIQ\mathcal{SROIQ}에서 포섭은 결정 가능하지만 N2ExpTime-완전이며, 최악의 경우 이중 지수적이어서, 이를 결정하는 추론기는 큰 온톨로지에서 멈춰 설 수 있습니다. 이 장이 선택한 두 구성자인 \sqcap\exists만을 유지하면 포섭은 다항 시간에 결정 가능한 상태로 남으며, 이것이 바로 같은 기계 장치가 수십만 개의 클래스를 지닌 의료 용어 체계를 분류할 수 있는 이유입니다. 따라서 어떤 구성자를 허용할 것인가는 취향의 문제가 아니라 이 분야의 핵심적인 공학적 결정이며, 이는 정말로 미해결입니다: 단 하나의 "옳은" 서술 논리란 없으며, 오직 표현력 대 다루기 쉬움(tractability)의 파레토 전선(Pareto frontier)만이 있을 뿐이고, 모든 응용은 그 위에서 자신의 지점을 골라야 합니다. 신경-기호(neuro-symbolic) 시스템이 나중에 부담을 느끼게 될 지점이 바로 그 선택이 이루어지는 곳인데, 학습된 구성 요소는 그 밑바탕 논리가 애초에 부여받은 적 없는 보장을 지킬 수 없기 때문입니다.

왜 중요한가

신경-기호 AI에게 서술 논리의 가치는, 학습기를 그에 견주어 측정할 수 있는 선명한 선을 그어 준다는 데 있습니다. 모든 개념이 하나의 집합을 가리키고 모든 공리가 하나의 집합 포함 관계이므로, "CDC \sqsubseteq D가 따라 나오는가?"에 대한 답은 그 배후에 증명을 지닌 단호한 예/아니오이며 — 이는 견고하지만 불투명한 신경망 모델이 개념을 벡터로 임베딩하고 그럴듯함(plausibility)을 점수 매길 때 근사하려고 애쓰는 바로 그 정답(ground truth)입니다. 신경망 링크 예측기는 TenuredStudent를 그럴듯한 클래스로 순위 매길지도 모릅니다; 서술 논리는 그것이 충족 불가능함을 증명하고 그 이유를 말할 수 있습니다. 그 둘 — 증명 가능한 포섭과 학습된 추측 — 을 나란히 놓고 볼 수 있는 것은 오직 기호적 쪽이 먼저 정밀하고 모델 이론적인 의미에 헌신했기 때문에 가능합니다. 이 둘을 융합하는 이후의 모든 권은 이 장의 규율에 기대고 있습니다: 여러분은 결코 적어 두지 않은 명세에 대해 추측을 검증할 수는 없습니다.

핵심 용어

  • 서술 논리(Description logic, DL) — 개념(단항 술어), 역할(이항 술어), 개체(상수)로부터 세워지고, 고정된 구성자 메뉴 아래에서 닫혀 있는, 1차 논리의 결정 가능한 파편입니다.
  • 개념 이름 / 역할 이름 / 개체 이름 — 서로 겹치지 않는 세 개의 알파벳: 개체들의 집합, 이항 관계, 그리고 하나의 사물을 가리키는 상수입니다.
  • 구성자(Constructor) — 복합 개념을 만드는 방법입니다: 논리곱 CDC \sqcap D, 존재 제한 r.C\exists r.C, 그리고 상수 ⊤(모든 것)와 ⊥(아무것도 아님)입니다.
  • 해석 I=(ΔI,I)\mathcal{I} = (\Delta^{\mathcal{I}}, \cdot^{\mathcal{I}}) — 공허하지 않은 정의역과, 각 개념을 부분집합으로, 각 역할을 관계로, 각 개체를 원소로 보내는 함수입니다.
  • 모델(Model) — TBox의 모든 공리를 충족시키는 해석입니다.
  • 일반 개념 포함(General concept inclusion, GCI) CDC \sqsubseteq D — 주력이 되는 공리로, CIDIC^{\mathcal{I}} \subseteq D^{\mathcal{I}}일 때 I\mathcal{I}에서 충족되고, 그것이 모든 모델에서 성립할 때 함의됩니다.
  • 역할 포함 / 역할 사슬rsr \sqsubseteq s(모든 rr-쌍은 ss-쌍이기도 합니다)와 r1r2sr_1 \circ r_2 \sqsubseteq s(두 역할을 연달아 따라가면 세 번째가 강제됩니다)입니다.
  • 함의 Tα\mathcal{T} \models \alphaα\alpha가 TBox의 모든 모델에서 성립함; 그림을 증명으로 바꾸어 주는 "모든 세계에서"라는 한정사입니다.
  • 네 가지 추론 과제 — 포섭, 충족 가능성, 분류, 인스턴스 검사이며, 각각 함의로 정의되고 각각 완성 구조 S로부터 계산 가능합니다.

이 장이 이끄는 곳

이제 우리는 언어를 갖추었습니다: 세 가지 어휘, 두 개의 구성자, 모든 기호에 대한 집합론적 의미, 그리고 추론기가 계산할 수 있는 네 가지 과제입니다. 다음 물음은 그 언어 중 어느 조각을 실제로 사용할 것인가입니다 — 구성자의 선택이 추론이 빠른가 아니면 가망 없는가에 관한 모든 것을 결정하기 때문입니다. 정확히 논리곱 \sqcap과 존재 제한 \exists만을 택하고 그 밖에는 아무것도 택하지 않는 것이 EL 계열(EL family)을 정의하는데, 이는 의도적으로 빈약하게 만든 논리이면서도 지금까지 만들어진 가장 큰 온톨로지들을 분류해 냅니다. 다음 장인 EL 계열: 작은 논리, 큰 온톨로지는 그 내기를 정밀하게 다듬고 학계 세계 위에서 실제로 실행하여, 단 세 라운드 만에 고정점까지 포화시키고 정확히 8개의 이름 붙은 포섭 관계와 2개의 충족 불가능한 개념을 읽어 냅니다.