diffs, patch 및 merging의 범주-이론적 처리?


14

대략 다음과 같은 패치 범주가 있습니까?

  • 객체는 기본 알파벳의 문자열입니다.
  • 형태는 문자열 사이의 편집 스크립트 ( "diffs"또는 "patches")입니다.

다음 질문에 관심이 있습니다.

  • 최소한의 편집 스크립트 라는 범주적인 개념이 있습니까? 패치 범주에 PO 세트가 풍부합니까?
  • 되어 병합 범주 형 pushout 패치?
  • 이것을 문자열에서 트리 (파일 시스템 또는 대수 데이터 유형)로 일반화하는 방법은 무엇입니까?


1
... 또는 "새로운 Darcs"를 만들기위한 비교적 최근의 시도 인 Pijul (그리고 그 대화에서 기억하는 한, 병합은 diff 범주의 "무료 완성"에서 푸시 아웃입니다 ...).
phipsgabler

답변:


15

Martin이 지적한 것처럼 패치의 범주 적 표현에 대한 작업이 있습니다. Mimram과 Di Giusto의 "패치 범주 이론"은에서 사용하는 편집 스크립트에 대한 가장 광범위한 범주 접근 방식 UNIX diff입니다.

:[][]:[]:[미디엄]에프:[][미디엄]. 복사본 서로 교차 하지 않는다는 것을 나타 내기 위해 주입 성과 증가가 있습니다 . 당신은 종이 에 모든 세부 사항을 찾을 수 있습니다 .

예, 병합은 위 카테고리의 무료 공동 완성에 대한 푸시 아웃으로 간주됩니다. 구성에 병합 충돌을 추가하려면 공동 완성이 필요합니다. 병합이 항상 존재하는 것은 아닙니다.

두 번째 질문에는 두 가지 주요 이유로 최소 편집 스크립트에 대한 범주 적 개념이 없습니다.

  1. 편집 스크립트는 모든 모양과 형태로 제공됩니다. 일부 저자는 삽입, 삭제 및 사본을 고려하고 일부 저자는 작업으로 대체를 추가하는 것을 좋아합니다. 끈에서 나무로 일반화하면 수많은 다른 연산이 가능해집니다.

  2. 그러나 가장 중요한 것은 최소 비용의 편집 스크립트가 고유하지 않다는 것입니다. 파일을 가져 가라패치를 작성하여 . 이 작업을 수행하는 최소 편집 스크립트는 무엇입니까? 두 가지가있다! 다시 한번, 나무로 일반화 할 때 "최소 성"이라는 개념이 의심스러운 더 많은 상황을 찾을 수 있습니다.

편집 스크립트를 트리로 일반화하는 작업이 많이있었습니다. 이것은 두 가지 주요 작업으로 나뉩니다.

  • 형식화되지 않은 나무 : s- 표현 만 생각하십시오. 두 나무 사이의 트리-편집-거리는 상기 나무의 선주문 순서 사이의 스트링-편집-거리이다. Demaine 등의 참고 문헌을 확인할 수 있습니다 . 또는 Pawlik 및 Augsten 입니다.

  • Typed Trees : 추상 구문 트리를 통한 패치 객체의 유형이 양호 함을 보장하는 패치, 즉 패치를 적용하면 항상 유효한 AST가 생성됩니다. 타이핑 된 우산 아래에는 고려할 수있는 편집 작업이 적습니다. 예를 들어 대체는 의미가 없습니다. 그럼에도 불구하고,이 존재 나무의 전순 주사를 통해 DIFF 에 의한 Lempsink 등을. 나중에 Vassena에 의해 확장되었습니다 . 나는 현재에 집중하고하는 등 앞서 지적한 바로 그 문제, 편집 스크립트에서 그 거리 그 자체에 접근 우리의 최신 작품 또는 일부 이전 작업 값이 "패치"되는 유형의 구조를 활용하려고합니다.

두 경우 모두 트리 구조 패치에 대한주의 깊은 범주 해석을 보지 못했습니다.


멋진 답변! 그러나 왜 최소한의 편집 스크립트가 독특하지 않기 때문에 범주 적 개념이 없어야합니까? (공) 한계는 독특하지 않으며 동형에만 해당됩니다.
Turion

우리는 공동 완성을 취하고 갈등을 포함 할 수 있다고 생각하거나 푸시 아웃이 항상 존재하지 않으며 존재하지 않을 때 병합이 없다고 말할 수 있습니까?
Turion

1
@Turion, 동형까지의 독창성은 꽤 강력합니다. 편집 스크립트에는 없습니다. 이 정의하는 것이 매우 어렵게 사이에 화살표를최소한의 편집 스크립트로 대신에 on은 diff최소한 을 찾았지만 모델은 편집 스크립트를 화살표로 간주합니다.. 예를 들어 구성은 또 다른 문제입니다. 최소 편집 스크립트의 구성이 최소로 보장되지는 않습니다. 다른 의견에서, 예, 일부 병합이 존재하지 않는다고 말할 수 있습니다. 그러나 diff3그것들을 계산합니다. 이것은 모델에서 충돌 처리를 완전히 제거합니다.
Victor Miraldo

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.