ONTOLOGY Pinetree Partners · GT·WT 진단 온톨로지 프로젝트 착수 교육
CHAPTER C · 추론 · GraphRAG

추론(Inference) — 새 사실은 자동으로 따라온다

온톨로지의 진짜 가치 — "입력 + 규칙" 으로 "내가 안 적은 사실"까지 자동으로 도출됩니다. 그게 DB와의 결정적 차이.

명시된 사실 + 규칙 = 새로운 사실 (Asserted → Inferred)

A · 입력
입력한 사실
Asserted Facts
예) "기어박스가 발전기에 영향"
+
B · 약속
의미와 규칙
Ontology + Rules
예) ":영향"은 이어진다
(Transitive)
추론 엔진
Reasoner
C ★ 도출
자동 따라오는 사실
Inferred Facts
"기어박스가 전력변환기까지"
한 번도 입력 안 함

→ DB는 적은 만큼만 답하지만, 온톨로지는 적은 것 + 규칙으로 따라오는 모든 것까지 답합니다.

🔬 직접 켜보세요 — 규칙이 켜지면 새 사실이 자동으로 생깁니다
:영향 :영향 = :파급 (전체 영향) = :파급 (전체 영향) :파급 (Transitive 추론) 기어박스 발전기 전력변환기
명시 (Asserted) 추론 (Inferred)
📋 온톨로지 규칙 — 켜고 끄기
✨ 추론 엔진(Reasoner)이 만든 사실 (Inferred)
(규칙을 켜보세요 — 추론 엔진이 새 사실을 찾아냅니다)

OWL과 추론 엔진 (HermiT, Pellet)

OWLDescription Logic을 기반으로 클래스 정의·제약·동치성을 형식적으로 표현하는 W3C 표준 언어. 이걸 입력받아 자동으로 새 사실을 도출·검증하는 엔진이 추론기(Reasoner) — HermiT·Pellet·ELK 등이 대표 구현체입니다.

OWL이 제공하는 6가지 표현력

각 표현력은 "이런 관계가 성립한다"를 공리로 선언하는 도구이며, 선언된 공리는 추론기가 자동으로 새 사실을 도출하는 근거가 됩니다.

subClassOf (⊑)

의미. "X는 Y의 일종이다" — X의 모든 인스턴스는 자동으로 Y의 인스턴스로도 분류됩니다.
예시. Mammal ⊑ Animal
"포유류(Mammal)는 동물(Animal)의 일종이다."
효과. :Tom a :Mammal만 입력해도 추론기가 :Tom a :Animal을 자동 도출.

equivalentClass (≡)

의미. "X와 Y는 동일한 클래스" — 어느 한쪽 멤버는 자동으로 다른 쪽 멤버.
예시. Author ≡ Person ⊓ ∃wrote.Book
"Author는 Person이면서 동시에 책을 쓴 적이 있는 개체와 같다."
효과. 책을 쓴 Person이 들어오면 추론기가 자동으로 Author로 분류.

disjointWith (⊓ = ∅)

의미. "X와 Y는 절대 겹칠 수 없다" — 교집합이 공집합.
예시. Male ⊓ Female = ∅
"남자(Male)와 여자(Female)는 동시에 될 수 없다."
효과. 같은 인스턴스가 두 클래스에 모두 속하면 추론기가 모순으로 자동 감지.

TransitiveProperty

의미. "A → B이고 B → C이면 A → C도 성립" — 전이성 관계.
예시. hasAncestor, :파급
"X의 조상의 조상도 X의 조상이다" / "영향의 영향도 영향이다."
효과. 1홉 관계만 입력하면 추론기가 모든 다단계 관계를 자동 도출.

FunctionalProperty

의미. "한 개체에 대해 이 관계는 단 하나의 값만 가능" — cardinality 1 제약.
예시. biologicalMother, :근본원인
"한 사람의 생물학적 어머니는 정확히 한 명" / "한 진단의 근본원인은 하나."
효과. 두 다른 값이 입력되면 추론기가 둘을 동일 개체로 추론하거나 일관성 오류로 보고.

InverseOf (↔)

의미. "X 관계의 반대 방향이 Y 관계" — 양방향 자동 매핑.
예시. :hasPart:partOf
"기어박스가 풍력터빈의 부품이면, 반대로 풍력터빈은 기어박스를 부품으로 가진다."
효과. 한쪽 트리플만 입력해도 추론기가 반대 방향 트리플을 자동 추가.

⚠ 함정 — Open World Assumption (OWA)
OWL은 "명시되지 않은 것은 거짓이 아니라 미지"로 취급합니다. "X에 자식이 없다"를 표현하려면 cardinality 제약을 명시해야 합니다 — SQL의 NULL 처리와 사고방식이 다릅니다.