그래프 프로그램의 의미론: 구조적 연산적 접근과 유한 실패 메커니즘
GP는 그래프 변환 규칙을 기반으로 하는 비결정적 프로그래밍 언어이며, 본 논문은 GP의 핵심 네 구성(규칙 적용, 순차 합성, 분기, 반복)에 대한 구조적 연산적 의미론을 제시한다. 특히, 프로그램이 “유한히 실패”하는 경우를 이용해 강력한 조건 분기와 as‑long‑as‑possible 반복을 정의한다.
저자: Detlef Plump (The University of York), S, ra Steinert (The University of York)
이 논문은 그래프 변환을 위한 고수준 프로그래밍 언어 GP(Graph Programs)의 의미론을 구조적 연산적 의미론(Structural Operational Semantics, SOS) 방식으로 정형화한다. GP는 규칙 기반 비결정적 언어로, 프로그래머가 저수준 그래프 데이터 구조를 직접 다루지 않고도 복잡한 그래프 문제를 해결할 수 있게 설계되었다. 핵심 구문은 네 가지이며, 각각은 다음과 같은 역할을 한다.
1. **단일 단계 규칙 적용** – 조건부 그래프 변환 규칙 집합을 현재 그래프에 한 번 적용한다. 규칙은 이중 푸시아웃(double‑pushout) 접근법에 기반하며, 인터페이스 K를 통해 L에서 R로 변환한다. 적용 가능성은 ‘dangling condition’과 추가적인 술어 P(g) 로 판단한다.
2. **순차 합성** – 명령어들을 순차적으로 연결한다. 예를 들어 `P; Q`는 먼저 P를 실행하고, P가 성공적으로 종료된 뒤에 Q를 실행한다.
3. **조건 분기** – `if C then P else Q` 형태이며, 여기서 C는 일반적인 불리언 식이 아니라 임의의 GP 프로그램이다. C가 현재 그래프에서 **어떤** 실행 경로라도 성공하면 C는 성공(succeed)하고, 그 결과 그래프는 버려진 뒤 P가 실행된다. 반대로 C가 **모든** 실행 경로에서 실패하면 C는 ‘유한히 실패’(finite failure)하고, Q가 실행된다. 이 메커니즘은 논리 프로그래밍에서의 부정(negation as failure)과 유사하지만, 그래프 변환 맥락에 맞게 확장되었다.
4. **반복** – `!P` 구문은 “가능한 한 많이” P를 반복한다. P가 현재 그래프에 적용될 수 없게 되면(즉, P가 유한히 실패하면) 반복이 종료된다. 따라서 별도의 종료 조건을 명시하지 않아도 자연스럽게 루프가 정의된다.
GP 프로그램은 **조건 규칙 스키마**(conditional rule schemata)로 구성된다. 스키마는 변수와 표현식(정수·문자열 연산)을 포함할 수 있어, 라벨을 동적으로 생성한다. 스키마 정의는 다음 요소를 포함한다.
- 식별자와 형식 선언(예: `bridge(a,b,x,y,z:int)`)
- 왼쪽 그래프(L)와 오른쪽 그래프(R)의 구조, 인터페이스 노드 식별자(라벨이 없는 노드)
- 조건식(Boolean expression)으로 매치 가능성을 제한(예: `a >= 0 and b >= 0 and not edge(1,3)`)
스키마는 변수 할당 α에 의해 구체적인 규칙 rα = (Lα ← K → Rα, Pα) 로 전개된다. 여기서 Lα와 Rα는 라벨에 α를 적용한 결과이며, Pα는 조건식이 만족되는지 검사한다. 이 전개 과정은 무한히 많은 구체 규칙을 생성할 수 있지만, 의미론은 스키마 자체를 직접 다루어야 함을 보여준다.
논문은 의미론을 전이 규칙 형태로 제시한다. 상태는 (그래프 G, 명령열 C) 로 표현되며, 전이 규칙은 다음과 같이 구분된다.
- **규칙 적용 전이**: `G ⇒ rα H` 가 존재하면 `(G, rα; C) → (H, C)` 로 전이한다.
- **시퀀스 전이**: `(G, P; Q) → (G', Q)` 로, P가 한 단계 진행된 뒤 Q를 남긴다.
- **조건 전이**: `C` 가 성공하면 `(G, if C then P else Q) → (G, P)` 로, 실패하면 `(G, if C then P else Q) → (G, Q)` 로 전이한다. 여기서 ‘실패’는 C가 유한히 실패했을 때를 의미한다.
- **반복 전이**: `!P`는 `P; !P` 로 전이하고, P가 유한히 실패하면 `!P`는 `skip`(즉, 종료)으로 전이한다.
특히, 의미론은 **실패 전이**와 **성공 전이**를 명시적으로 구분함으로써, 비결정적 실행 경로와 그에 따른 그래프 집합을 정확히 기술한다. 프로그램 P와 입력 그래프 G에 대해 의미론이 정의하는 결과는 “P를 G에 실행했을 때 도달 가능한 모든 그래프 H의 집합”이다. 이는 프로그램 검증, 최적화, 그리고 구현 독립적인 정의에 유용하다.
논문은 또한 GP가 기존 그래프 변환 시스템(AGG, Fujaba, GrGen 등)과 차별화되는 점을 강조한다. 기존 시스템은 실용적인 구현을 제공하지만, 완전한 형식 의미론이 부재하거나 매우 복잡한 제어 흐름 다이어그램에 의존한다. 반면 GP는 간결한 구문과 명확한 SOS 기반 의미론을 제공한다.
마지막으로, 유한 실패 기반 제어 구조는 그래프뿐 아니라 문자열·용어 기반 재작성 언어에도 적용 가능함을 논의한다. 이는 조건식이 그래프 구조에 의존하지 않고, 프로그램 자체의 실행 결과에만 의존하기 때문이다. 향후 연구 과제로는 재귀적 절차 확장, 병렬 실행 모델, 그리고 정형 검증 도구와의 연계가 제시된다.
원본 논문
고화질 논문을 불러오는 중입니다...
댓글 및 학술 토론
Loading comments...
의견 남기기