수학 이야기 : 자식 수정 제어 시스템에 대한 정리?


19

git 개정 제어 시스템 에 대해 수학 이야기를하고 싶습니다 . 이제는 컴퓨터 과학 산업뿐만 아니라 수학에서도 널리 사용됩니다. 예를 들어 HoTT (Homotopy Type Theory) 커뮤니티에서는이를 사용하며 소스 코드이든 라텍스 마크 업이든 텍스트 파일을 공동으로 편집하기위한 시스템으로 이동합니다.

나는 git이 시작 된 방향성 비순환 그래프의 개념을 사용한다는 것을 알고있다. 그러나 좋은 수학 강의는 증거와 정리를 언급합니다.

실제로 사용과 관련된 git에 대해 어떤 정리를 증명할 수 있습니까?


1
기본적으로 필자는 git을 예로 사용하여 수학적 개념을 적용 할 수 있음을 보여 주려고합니다. 둘째로, git은 CS 세계 에서처럼 수학 세계에서 매우 유용하기 때문에 청중은 그것이 무엇을하고 왜 그것을 사용할 수 있는지 배울 수 있습니다.
ThoralfSkolem

2
@RexButler-자식은 연필과 같은 방식으로 수학에 유용합니다. 일부 수학자들이 사용하는 일반적인 도구입니다.
Davor

1
이 질문은 "공간 유추를 사용하는 GIT 가이드"를 상기시켜줍니다 (사이트가 현재 다운 된 것처럼 보이기 때문에 Wayback Machine 링크).
duplode


1
비슷한 질문이 최근 컴퓨터 과학 에 나타났습니다 : VCS 및 파일 버전의 공식 CS defn
vzn

답변:


16

git 저장소는 부분적으로 정렬 된 개정 세트로 생각할 수 있습니다 (이전 개정의 직간접 후임 인 경우 한 개정이 다른 개정보다 우선합니다). git 저장소에서 얻는 부분 주문은 너비가 활성 개발자 수 및 개별 개발자가 작업 할 수있는 다른 포크 수와 직접 관련되어 있기 때문에 너비가 낮은 경향이 있습니다 (상호 독립적 개정의 가장 큰 세트의 크기). 의 위에.

이 배경을 바탕으로 Dilworth의 정리를 제안 합니다. 부분 순서의 너비는 모든 버전을 포괄하는 데 필요한 최소 체인 수 (완전히 정렬 된 하위 집합)와 같습니다. 또한이 보드를 주제별로 다루기 위해 폭을 계산하고 다항식 시간으로 최소 체인 수로 커버를 찾는 그래프 일치 기반 알고리즘을 언급 할 수도 있습니다.

이것이 Git에서의 실제 사용과 관련이있는 한 가지 방법은 시스템의 버전 ​​히스토리를 시각화하기위한 시스템입니다 : 수직 축에서 그리기 시간을 보았던 대부분의 Git 시각화 시스템과 저장소의 독립적 인 버전을 수평으로 보았습니다. 시각화를 적은 수의 독립적 인 수직 트랙으로 구성 할 수있는 방법을 제공합니다.

더 야심 차고 진보 된 것을 원한다면 git-like version control systems의 충돌 해결에 의해 직접적으로 유발되는 Demaine et al.의 blame tree data structure를 시도해보십시오 .


17

흥미롭게도, 버전 제어 시스템의 초기 수학 화가 있지만이 시점에서는 Git에만 부분적으로 적용 할 수 있습니다. 이것을 패치 이론 [1, 2, 3, 4, 5]이라고하며 DARCS 버전 관리 시스템의 맥락에서 일어났습니다. 그것은 분기병합에 대한 추상적 인 이론으로 볼 수 있습니다 . 최근 패치 이론에 HoTT [6] 및 범주 형 [7] 처리가 제공되었습니다.

패치 이론은 현재 진행 중이며 버전 제어의 모든 측면을 다루지는 않지만 볼 수있는 많은 이론이 포함되어 있습니다. '실제 세계'에 적용 할 수있는 이론의 분명한 예입니다. 패치 이론은 매우 구체적인 무언가의 추상화 / 단순화입니다. 동시에 HoTT와 같은 최첨단 수학과 연결됩니다.


  1. J. Dagit, 형식이 올바른 변경 사항-버전 제어 구현에 대한 안전한 접근 방식 .
  2. G. Sittampalam, darcs 패치 이론의 일부 속성 .
  3. I. Lynagh, 캠프 경로 이론.
  4. D. Roundy, darcs 패치 형식을 구현하고 확인합니다.
  5. J. Jacobson, 역반 그룹을 이용한 Darcs 패치 이론의 형식화 .
  6. C. Angiuli, E. Morehouse, DR Licata, R. Harper, 동종 패치 이론 .
  7. S. Mimram, C. Di Giusto, 패치 범주 이론 .

4

또 다른 대안은 지속적 (또는 순전히 기능적인) 데이터 구조를 보는 것입니다. Git의 내부 데이터 구조는 지속적으로 지속적인 트리 로 볼 수 있습니다 .

지속적 데이터 구조는 수정 될 때 항상 이전 버전 자체를 유지하는 데이터 구조입니다. 이러한 데이터 구조는 작업이 구조를 전체적으로 업데이트하지 않고 항상 업데이트 된 새 구조를 생성하므로 사실상 불변입니다.

모든 버전에 액세스 할 수 있지만 최신 버전 만 수정할 수있는 경우 데이터 구조는 부분적으로 영구적입니다. 모든 버전에 액세스하고 수정할 수있는 경우 데이터 구조는 영구적입니다. 두 개의 이전 버전에서 새 버전을 생성 할 수있는 통합 또는 병합 작업이있는 경우 데이터 구조를 합류 적으로 영구적이라고합니다.

질문 도 관련이 있습니다.


1

예, Git 작동 방식을 수학적으로 정의 할 수 있습니다. 원시 Git 구조와 Git 오퍼레이션을 정의한 다음 특정 방식으로 이러한 오퍼레이션을 사용하면 특정 상위 레벨 목표를 달성하거나 그렇지 않은 상황을 특성화하거나 수량화하려고 시도하는 이론을 가질 수 있습니다. (예를 들어 Git의 해시에 의존하면 오류가 거의 없습니다.)

또 다른 아이디어는 Subversion에 대해 동일한 작업을 수행 한 다음이 둘을 비교하는 정리를 생성하는 것입니다. 예를 들어, Git이 병합을 다루는 것이 더 낫다는 주장이 종종 있습니다. 이것을 정 성적으로 또는 양적으로 증명하는 정리를 가질 수 있습니다.

유용성은 올바른 추상화를 만드는 데 결정적으로 달려 있습니다. Git 소스 코드의 작업을 수학적으로 자세히 설명하는 것은 의미가 없습니다. 소스 코드 자체가 훨씬 더 효과적이고 간결하게 수행합니다.

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