ผลงานบางส่วนของ Conor McBride, Diff , Dissect , เชื่อมโยงอนุพันธ์ของชนิดข้อมูลกับ "ชนิดของบริบทหนึ่งหลุม" ของพวกเขา นั่นคือถ้าคุณหาอนุพันธ์ของประเภทที่คุณเหลือด้วยชนิดข้อมูลซึ่งจะแสดงให้คุณเห็นว่าชนิดข้อมูลดูจากด้านใน ณ จุดใดก็ตาม
ตัวอย่างเช่นถ้าคุณมีรายการ (ใน Haskell)
data List a = [] | a : List a
สิ่งนี้สอดคล้องกับ
data List a = 1 + a * List a
และด้วยเวทมนตร์ทางคณิตศาสตร์เล็กน้อยอนุพันธ์คือ
data ListDeriv a = List a * List a
ซึ่งตีความว่าหมายความว่า ณ จุดใดในรายการจะมีรายการทางด้านซ้ายและรายการทางด้านขวา เราสามารถซิปผ่านรายการต้นฉบับโดยใช้โครงสร้างข้อมูลอนุพันธ์
ตอนนี้ฉันสนใจที่จะทำสิ่งที่คล้ายกับกราฟ การแสดงกราฟทั่วไปเป็นชุดของจุดยอดและขอบซึ่งอาจนำไปใช้อย่างไร้เดียงสากับชนิดข้อมูลเช่น:
data Gr a b i = Gr [(i,a)] [(i,i,b)]
หากฉันเข้าใจอย่างถูกต้องอนุพันธ์ของชนิดข้อมูลนี้ที่เกี่ยวกับดัชนีกราฟi
ควรเป็นอะไรที่คล้ายกัน
data GrDeriv a b i = d/di (Gr a b i)
= d\di ( [a*i] * [b*i^2] )
= (d\di [a*i]) * [b*i^2] ) + [a*i]*(d/di [b*i^2])
= (a* [a*i] * [a*i]) * [b*i^2] )
+ [a*i] * (2*b*i) *[b*i^2]*[b*i^2])
= InNodes { nodesLeft :: [(a,i)]
, nodeLbl :: a
, nodesRight :: [(a,i)]
, edges :: [(b,i,i)] }
| InEdges { nodes :: [(a,i)]
, adjNode :: Either (b,i) (b,i)
, edgesLeft :: [(b,i,i)]
, edgesRight :: [(b,i,i)] }
ฉันได้สิ่งนี้ผ่านการใช้กฎผลิตภัณฑ์และกฎลูกโซ่สำหรับอนุพันธ์และถึงแม้ว่าอาจมีข้อผิดพลาดบางอย่างดูเหมือนว่าจะเป็นไปตามรูปแบบทั่วไป ในโครงสร้างนี้คุณจะมุ่งเน้นไปที่โหนด (ตัวสร้าง InNodes) หรือขอบ (ในขอบ) และให้สถานที่ที่คุณจะเห็นข้อมูลที่เกี่ยวข้อง
แต่นี่ไม่ใช่สิ่งที่ฉันหวังไว้ ฉันหวังว่าจะสร้างสิ่งที่เกี่ยวข้องกับอินเทอร์เฟซของ Martin Erwigs Functional Graph Library มากขึ้น โดยเฉพาะฉันต้องการเห็นโหนดที่บริบทแสดงถึงเลเบลของโหนดและสองรายการ adjacency หนึ่งรายการสำหรับขาออกหนึ่งรายการสำหรับขาเข้า
Node a b = ([(i,b)],a,[(i,b)])
ฉันเห็นความหวังอย่างไรก็ตามเนื่องจากการเป็นตัวแทนของ adjacency มีบางคำที่เหมือนกันกับอนุพันธ์ lone lable a
ที่ตำแหน่งของแต่ละหลุมการแทน / การแยกของแต่ละขอบ
เนื่องจากอนุพันธ์ไม่ใช่ฟังก์ชันเดียวกับต้นฉบับ แต่การรวมกันของอนุพันธ์คือ (ชนิดของ) มีอะนาล็อกการรวมกลุ่มบางประเภทที่จะให้บริการเพื่อแปลงอนุพันธ์เป็นชุดของบริบทของโหนดหรือไม่ ไม่ใช่การบูรณาการโดยตรงเพื่อกู้คืนโครงสร้างเดิม แต่คุณต้องคำนึงถึงโครงสร้างที่เทียบเท่ากับโครงสร้างดั้งเดิม
หากมีฉันหวังว่าโครงสร้างชนิดความสัมพันธ์สามารถระบุได้ด้วยภาษา "ชุดจุดยอดและขอบ" แบบง่าย ๆ และฉันสามารถหาไลบรารีที่มีประสิทธิภาพสำหรับการทำงานกับโครงสร้างนั้นได้ การดำเนินการดังกล่าวสามารถใช้ในการศึกษาโครงสร้าง "เกินกว่าทฤษฎีกราฟ": กราฟไฮเปอร์คอมเพล็กซ์อย่างง่าย ...
ดังนั้น. แนวคิดนี้เป็นไปได้หรือไม่? มีประโยชน์หรือไม่ มีการศึกษาเกี่ยวกับสิ่งประเภทนี้ที่ฉันสามารถอ่านเพิ่มเติมเกี่ยวกับอะไร
ภาคผนวก
นี่ฉันค่อนข้างแน่ใจว่าสามารถแสดง (ทฤษฎีหมวดหมู่?) เป็น
หรือ
ฉันคิดว่ามันแสดงให้เห็นถึงคำสัญญาบางอย่าง แต่ฉันขาดความซับซ้อนที่จะไปไกลกว่านี้ ฉันรู้ว่าต้องมีผลงานออกมาสำรวจการเชื่อมต่อต่อไป
* ในกรณีที่ลิงค์แตกการอ้างอิง: Rhee, Injong และอื่น ๆ "DRAND: กระจายการกำหนดเวลา TDMA แบบสุ่มสำหรับเครือข่ายเฉพาะกิจไร้สาย" ธุรกรรม IEEE บนคอมพิวเตอร์มือถือ 8.10 (2009): 1384-1396