数学の話:gitリビジョン管理システムに関する定理?


19

gitで数学の話をしたいと思いますリビジョン管理システムます。現在では、数学とコンピューターサイエンス業界で広く使用されています。たとえば、HoTT(Homotopy Type Theory)コミュニティはそれを使用しており、テキストファイルがソースコードまたはラテックスマークアップであるかどうかに関係なく、テキストファイルを共同編集するシステムです。

gitは、開始点である有向非循環グラフの概念を使用していることを知っています。ただし、優れた数学の話では、証明と定理に言及しています。

gitについて実際に使用に関連する定理を証明できますか?


1
主に、私の動機は、例としてgitを使用して、数学的概念が適用可能であることを実証することです。第二に、gitはCSの世界と同じように数学の世界でも非常に役立つので、私の聴衆はそれが何をするのか、そしてなぜそれを使うのかを学ぶかもしれません。
ThoralfSkolem

2
@RexButler-gitは、鉛筆と同じように数学で役立ちます。一部の数学者がたまたま使用する一般的なツールです。
-Davor

1
この質問は、「空間アナロジーを使用したGITのガイド」(サイトが現在ダウンしているように見えるため、Wayback Machineへのリンク)を思い出させます。
デュプロ


回答:


16

gitリポジトリは、部分的に順序付けられたリビジョンのセットと考えることができます(以前のリビジョンの直接または間接の後継である場合、1つのリビジョンは順序が他のリビジョンよりも前になります)。gitリポジトリから取得する半順序は、幅(相互に独立したリビジョンの最大セットのサイズ)が小さい傾向があります。これは、幅がアクティブな開発者の数と個々の開発者が作業している異なるフォークの数に直接関係するためですに。

この背景に基づいて、ディルワースの定理を提案します。これは、半順序の幅がすべてのバージョンをカバーするために必要なチェーン(完全に順序付けられたサブセット)の最小数に等しいことを示します。また、このボードでトピックにするために、幅を計算し、多項式時間で最小数のチェーンでカバーを見つけるためのアルゴリズムに基づいたグラフマッチングに言及することもできます。

これがGitでの実際の使用に関連する1つの方法は、システムのバージョン履歴を視覚化するシステムです。これまで見たほとんどのGit視覚化システムは、垂直軸に時間を描画し、視覚化を少数の独立した垂直トラックに整理する方法を提供します。

あるいは、もっと野心的で高度なものが必要な場合は、Demaine et al。の非難ツリーデータ構造を試してください。これは、Gitのようなバージョン管理システムでの競合解決によって直接動機付けられています。


17

興味深いことに、バージョン管理システムの初期の数学化がありますが、この時点ではGitに部分的にしか適用できません。これはパッチ理論 [1、2、3、4、5]と呼ばれ、DARCSバージョン管理システムのコンテキストで発生しました。それは分岐マージの抽象的な理論と見ることができます。最近、パッチ理論にHoTT [6]およびカテゴリ[7]の扱いが与えられました。

パッチ理論は進行中の作業であり、バージョン管理のすべての側面をカバーしているわけではありませんが、見ることができる多くの定理が含まれています。これは、「現実世界」に適用できる理論の明確な例です。パッチ理論は、非常に具体的なものの抽象化/単純化であるため、驚くことではありません。同時に、HoTTのような最先端の数学と接続します。


  1. J. Dagit、タイプ正しいの変更点-バージョン管理の実装にA安全なアプローチ
  2. G. Sittampalam、darcsパッチ理論のいくつかの特性
  3. I. Lynagh、キャンプパス理論。
  4. D. Roundy、darcsパッチ形式の実装...および検証。
  5. J.ジェイコブソン、逆半群を使用したDarcsパッチ理論の形式化
  6. C.アンギウリ、E。モアハウス、DRリカタ、R。ハーパー、ホモトピックパッチ理論
  7. S.ミムラム、C。ディジュスト、パッチのカテゴリー理論

4

もう1つの方法は、永続的な(または純粋に機能的な)データ構造を調べることです。Gitの内部データ構造は、合流的に永続的なツリーとして見ることができます。

永続データ構造とは、変更されたときに以前のバージョンを常に保持するデータ構造です。そのようなデータ構造は、その操作がその構造をインプレースで(目に見えるように)更新するのではなく、常に新しい更新された構造を常に生成するため、事実上不変です。

すべてのバージョンにアクセスできるが、最新バージョンのみが変更可能な場合、データ構造は部分的に永続的です。すべてのバージョンにアクセスして変更できる場合、データ構造は完全に永続的です。2つの以前のバージョンから新しいバージョンを作成できるmeldまたはmerge操作もある場合、データ構造はコンフルエントに永続的と呼ばれます。

この質問も関連しています。


1

はい、Gitの動作を数学的に定義できます。プリミティブなGit構造とGit操作を定義し、これらの操作を特定の方法で使用することで特定の高レベルの目標を達成することを証明する定理を持たせたり、そうでない状況を特徴付けたり定量化したりすることができます。(たとえば、Gitのハッシュへの依存は、エラーのわずかなマージンを残します。)

別のアイデアは、Subversionに対して同じことを行い、2つを比較する定理を作成することです。たとえば、Gitはマージの処理に優れているとよく言われます。定性的または定量的にこれを証明する定理を持つことができます。

有用性は、適切な抽象化を行うことに決定的に依存します。Gitソースコードの動作を詳細に数学的に説明することは無意味です。ソースコード自体は、はるかに効果的かつ簡潔にそれを行います。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.