Math talk: ทฤษฎีบทเกี่ยวกับระบบควบคุมการแก้ไขคอมไพล์?


19

ฉันต้องการพูดคุยทางคณิตศาสตร์เกี่ยวกับระบบควบคุมการแก้ไขคอมไพล์ ตอนนี้มันถูกใช้กันอย่างแพร่หลายในวิชาคณิตศาสตร์เช่นเดียวกับในอุตสาหกรรมวิทยาศาสตร์คอมพิวเตอร์ ตัวอย่างเช่นชุมชน HoTT (Homotopy Type Theory) ใช้มันและเป็นระบบไปสู่การแก้ไขร่วมกันของไฟล์ข้อความไม่ว่าจะเป็นซอร์สโค้ดหรือมาร์กอัปลาเท็กซ์

ฉันรู้ว่า git ใช้ความคิดของกราฟ acyclic โดยตรงซึ่งเป็นการเริ่มต้น อย่างไรก็ตามการพูดคุยทางคณิตศาสตร์ที่ดีกล่าวถึงบทพิสูจน์และทฤษฎีบท

ฉันสามารถพิสูจน์ทฤษฎีบทเกี่ยวกับคอมไพล์ที่เกี่ยวข้องกับการใช้งานจริงได้อย่างไร


1
ในขั้นต้นแรงจูงใจของฉันคือการแสดงให้เห็นว่าแนวความคิดทางคณิตศาสตร์มีผลบังคับใช้โดยใช้ git เป็นตัวอย่าง ประการที่สองคอมไพล์ค่อนข้างมีประโยชน์ในโลกคณิตศาสตร์เช่นเดียวกับในโลก CS ดังนั้นผู้ชมของฉันอาจได้เรียนรู้ว่ามันทำอะไรและทำไมจึงมีใครใช้
ThoralfSkolem

2
@RexButler - คอมไพล์มีประโยชน์ในวิชาคณิตศาสตร์เช่นเดียวกับดินสอ มันเป็นเครื่องมือทั่วไปที่นักคณิตศาสตร์บางคนใช้
Davor

1
คำถามนี้ทำให้ฉันนึกถึง"คำแนะนำเกี่ยวกับ GIT โดยใช้การเปรียบเทียบเชิงพื้นที่" (ลิงก์ไปยังเครื่อง Wayback เพราะเว็บไซต์ดูเหมือนจะไม่ทำงานในขณะนี้)
duplode


1
คำถามที่คล้ายกันเมื่อเร็ว ๆ นี้ปรากฏตัวขึ้นในวิทยาการคอมพิวเตอร์ : CS defn อย่างเป็นทางการของ VCS และรุ่นของไฟล์
vzn

คำตอบ:


16

พื้นที่เก็บข้อมูล git สามารถถูกคิดว่าเป็นชุดของการแก้ไขที่สั่งบางส่วน (โดยที่การแก้ไขหนึ่งครั้งนั้นเร็วกว่าที่อื่นในลำดับถ้ามันเป็นตัวตายตัวแทนโดยตรงหรือโดยอ้อมของอันก่อนหน้านี้) คำสั่งบางส่วนที่คุณได้รับจากที่เก็บ git มักจะมีความกว้างต่ำ (ขนาดของชุดการตรวจทานอิสระที่ใหญ่ที่สุด) เนื่องจากความกว้างเกี่ยวข้องโดยตรงกับจำนวนนักพัฒนาที่ใช้งานอยู่และจำนวนส้อมที่แตกต่างกัน บน.

จากพื้นฐานนี้ฉันขอแนะนำทฤษฎีบทของ Dilworthซึ่งระบุว่าความกว้างของคำสั่งบางส่วนเท่ากับจำนวนขั้นต่ำของโซ่ (ชุดย่อยที่สั่งทั้งหมด) จำเป็นต้องครอบคลุมทุกรุ่น และเพื่อให้เป็นหัวข้อสำหรับบอร์ดนี้คุณยังสามารถพูดถึงอัลกอริธึมการจับคู่กราฟที่ใช้สำหรับการคำนวณความกว้างและการค้นหาหน้าปกด้วยโซ่จำนวนน้อยที่สุดในเวลาพหุนาม

วิธีหนึ่งที่อาจเกี่ยวข้องกับการใช้งานจริงใน Git คือระบบการแสดงประวัติรุ่นของระบบ: ระบบการสร้างภาพ Git ส่วนใหญ่ที่ฉันเห็นเวลาวาดบนแกนตั้งและที่เก็บอิสระแนวนอนดังนั้น จะให้วิธีการจัดระเบียบการสร้างภาพข้อมูลให้เป็นแทร็กแนวตั้งอิสระจำนวนเล็กน้อย

หรือถ้าคุณต้องการอะไรที่ทะเยอทะยานและก้าวหน้ากว่านี้ลองใช้โครงสร้างข้อมูลต้นไม้โทษของ Demaine et al. ซึ่งได้แรงบันดาลใจโดยตรงจากการแก้ไขข้อขัดแย้งในระบบควบคุมเวอร์ชันเหมือน git


17

ที่น่าสนใจคือมีการคำนวณแบบใหม่ของระบบควบคุมเวอร์ชันแม้ว่า ณ จุดนี้จะสามารถใช้งานได้กับ Git เพียงบางส่วนเท่านั้น มันเรียกว่าทฤษฎีการปะแก้ [1, 2, 3, 4, 5] และเกิดขึ้นในบริบทของระบบควบคุมเวอร์ชัน DARCS มันสามารถมองเห็นเป็นทฤษฎีนามธรรมของการแตกแขนงและการควบรวมกิจการ เมื่อไม่นานมานี้มีการปรับปรุงทฤษฎีการแพตช์ HoTT [6] และหมวดหมู่ [7]

ทฤษฎี Patch กำลังทำงานอยู่และไม่ครอบคลุมทุกแง่มุมของการควบคุมเวอร์ชัน แต่มีหลายทฤษฎีที่คุณสามารถดูได้ มันเป็นตัวอย่างที่ชัดเจนของทฤษฎีที่ใช้กับ 'โลกแห่งความจริง' - ไม่น่าแปลกใจสำหรับทฤษฎีแพทช์คือสิ่งที่เป็นนามธรรม / การทำให้เข้าใจง่ายของสิ่งที่เป็นรูปธรรมมาก ในขณะเดียวกันมันก็เชื่อมต่อกับคณิตศาสตร์ล้ำสมัยอย่าง HoTT


  1. เจ Dagit, การเปลี่ยนแปลงประเภทที่ถูกต้อง - แนวทางความปลอดภัยในการดำเนินการควบคุมเวอร์ชัน
  2. G. Sittampalam, คุณสมบัติบางส่วนของทฤษฎีแพทช์ Darcs
  3. I. Lynagh ทฤษฎีเส้นทางค่าย
  4. D. Roundy, การใช้ระเบียบแบบแผนของแพทช์ Darcs ... และตรวจสอบมัน
  5. เจเจคอปสันFormalization ของ Darcs Patch ทฤษฎีการใช้ผกผัน Semigroups
  6. ซี Angiuli อี Morehouse, DR Licata, อาร์ฮาร์เปอร์Homotopical Patch ทฤษฎี
  7. เอส Mimram ซี Di Giusto, หมวดหมู่ทฤษฎีของแพทช์

4

อีกทางเลือกหนึ่งคือการดูโครงสร้างข้อมูลถาวร (หรือการทำงานอย่างหมดจด) โครงสร้างข้อมูลภายในของ Git สามารถมองเห็นได้ว่าเป็นต้นไม้ถาวรที่บรรจบกัน :

โครงสร้างข้อมูลถาวรคือโครงสร้างข้อมูลที่เก็บรักษาเวอร์ชันก่อนหน้าของตัวเองเสมอเมื่อมีการแก้ไข โครงสร้างข้อมูลดังกล่าวไม่สามารถเปลี่ยนแปลงได้อย่างมีประสิทธิภาพเนื่องจากการดำเนินการไม่ได้ (มองเห็นได้) ปรับปรุงโครงสร้างในสถานที่ แต่จะให้โครงสร้างที่ปรับปรุงใหม่เสมอ

โครงสร้างข้อมูลจะคงอยู่เพียงบางส่วนหากทุกรุ่นสามารถเข้าถึงได้ แต่สามารถแก้ไขได้เฉพาะเวอร์ชันล่าสุดเท่านั้น โครงสร้างข้อมูลจะคงอยู่อย่างสมบูรณ์หากทุกรุ่นสามารถเข้าถึงและแก้ไขได้ หากยังมีการดำเนินการรวมหรือผสานที่สามารถสร้างเวอร์ชันใหม่จากสองเวอร์ชันก่อนหน้านี้โครงสร้างข้อมูลจะถูกเรียกอย่างต่อเนื่องแบบบรรจบกัน

คำถามนี้มีความเกี่ยวข้องด้วย


1

ใช่คุณสามารถกำหนดทางคณิตศาสตร์ได้ว่า Git ทำงานอย่างไร คุณสามารถกำหนดโครงสร้าง Git ดั้งเดิมและการดำเนินการ Git กับพวกเขาแล้วมีทฤษฎีที่พิสูจน์ว่าการใช้การดำเนินการเหล่านี้ในรูปแบบที่เฉพาะเจาะจงบรรลุเป้าหมายในระดับสูงโดยเฉพาะหรือพยายามที่จะระบุลักษณะหรือปริมาณสถานการณ์ (เช่นการพึ่งพาแฮชของ Git ในการแฮชทำให้เกิดข้อผิดพลาดเล็กน้อย)

อีกแนวคิดหนึ่งคือทำสิ่งเดียวกันสำหรับการโค่นล้มจากนั้นสร้างทฤษฎีบทที่เปรียบเทียบทั้งสอง ยกตัวอย่างเช่นมักอ้างว่า Git นั้นดีกว่าในการจัดการกับการรวม คุณสามารถมีทฤษฎีบทที่พิสูจน์เรื่องนี้ได้ทั้งในเชิงคุณภาพและเชิงปริมาณ

ความมีประโยชน์จะเป็นช่วงที่สำคัญขึ้นอยู่กับการทำให้นามธรรมที่ถูกต้อง การอธิบายการทำงานของซอร์สโค้ด Git ในเชิงคณิตศาสตร์นั้นไม่มีจุดมุ่งหมายในทางคณิตศาสตร์: ซอร์สโค้ดเองทำอย่างมีประสิทธิภาพและรัดกุมมากขึ้น

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.