Group Edge는 복수의 Node를 하나의 그룹으로 묶어 표현하는 Edge 타입이다.
패킷 구조
1st WORD (16비트)
┌───────────────────────┬───────────┐
│ Prefix │ GroupType │
│ 13비트 │ 3비트 │
└───────────────────────┴───────────┘
[1100 000 111 000] [TTT]
2nd WORD: Edge TID (16비트)
3rd+ WORD: 멤버 TID들 (가변)
마지막 WORD: 종결 마커 (0x0000)
| 필드 | 비트 | 설명 |
|---|---|---|
| Prefix | 13 | 1100 000 111 000 |
| GroupType | 3 | 그룹 종류 (8개) |
| Edge TID | 16 | 이 Edge의 고유 식별자 |
| 멤버 TID | 16×N | 그룹 멤버 참조 |
| 종결 마커 | 16 | 0x0000 |
최소 4워드(멤버 1개), 일반 5~6워드(멤버 2~3개), 최대 제한 없음.
GroupType (3비트 = 8개)
| 코드 | 타입 | 의미 | 멤버 수 |
|---|---|---|---|
| 000 | AND | 논리곱 (conjunction) | 2+ |
| 001 | OR | 논리합 (disjunction) | 2+ |
| 010 | XOR | 배타적 선택 | 2+ |
| 011 | LIST | 순서 있는 목록 | 1+ |
| 100 | SET | 순서 없는 집합 | 1+ |
| 101 | RANGE | 범위 (시작~끝) | 정확히 2 |
| 110 | PAIR | 순서쌍 | 정확히 2 |
| 111 | 확장 | 미래 확장 | - |
GroupType 상세
AND
모든 멤버가 동시에 참여한다. 예: “철수와 영희와 민수가 회의했다”
OR
멤버 중 하나 이상이 해당한다 (inclusive or). 예: “커피 또는 차를 주문하세요”
XOR
멤버 중 정확히 하나만 해당한다 (exclusive or). 예: “합격 또는 불합격 (둘 중 하나)”
LIST
순서가 의미 있는 목록이다. 순위, 시퀀스에 사용한다. 예: “1등 철수, 2등 영희, 3등 민수”
SET
순서가 무의미한 집합이다. 멤버십만 중요하다. 예: “참석자: 철수, 영희, 민수”
RANGE
연속 범위로 사이 값을 포함한다. 멤버는 정확히 2개(시작, 끝). 예: “1부터 10까지”
PAIR
단순 순서쌍이다. 멤버는 정확히 2개. 좌표, key-value 등에 사용한다. 예: “좌표 (3, 5)”
RANGE vs PAIR
| 타입 | 의미 | 사이 값 |
|---|---|---|
| RANGE | 연속 범위 | 포함 |
| PAIR | 단순 쌍 | 없음 |
RANGE [1, 5] → 1, 2, 3, 4, 5 (사이 값 존재). PAIR [1, 5] → (1, 5) (두 값만).
예시
“철수와 영희가 만났다”
1. Entity Node: 철수 (TID=0x0001)
2. Entity Node: 영희 (TID=0x0002)
3. Group Edge: AND (TID=0x0100)
1st: [1100 000 111 000] [000] = Prefix + AND
2nd: [0x0100] = Edge TID
3rd: [0x0001] = 철수
4th: [0x0002] = 영희
5th: [0x0000] = 종결
4. Verb Edge: meet
Subject: 0x0100 (그룹 참조)
총: 5워드
“좌표 (3, 5)”
1. Quantity Node: 3 (TID=0x0001)
2. Quantity Node: 5 (TID=0x0002)
3. Group Edge: PAIR (TID=0x0100)
1st: [1100 000 111 000] [110] = Prefix + PAIR
2nd: [0x0100]
3rd: [0x0001] = 첫 번째 (x)
4th: [0x0002] = 두 번째 (y)
5th: [0x0000]
총: 5워드
제약 조건
| GroupType | 최소 | 최대 |
|---|---|---|
| AND / OR / XOR | 2 | ∞ |
| LIST / SET | 1 | ∞ |
| RANGE / PAIR | 2 | 2 |
- 멤버 TID는 이미 선언된 Node/Edge를 참조해야 한다
- 자기 참조(순환) 불가
- TID=0x0000은 종결 마커로 예약