Деякі з творів Конора Макбріда " 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), або на Краях (В краях), і дасте місце, ви побачите відповідні дані.
Але на це я не сподівався. Я сподівався на конструкцію, більш тісну, пов’язану з інтерфейсом бібліотеки функціональних графіків Мартіна Ервігса. Зокрема, я хочу побачити на вузлі контекст, що представляє мітку вузла та два списки суміжності, один для вихідних, другий для вхідних.
Node a b = ([(i,b)],a,[(i,b)])
Я бачу надію, однак, оскільки представлення суміжності має деякі спільні риси з похідною, самотньою міткою a
, у кожному місці отвору, поданням / розсіченням кожного ребра.
Оскільки похідна не є такою ж функцією, як оригінал, але інтеграція похідної є (kindof), чи існує якийсь аналог інтеграції, який слугуватиме перетворенню похідної у набір контекстів вузлів? Зверніть увагу, не на пряму інтеграцію для відновлення початкової структури, а на структуру, еквівалентну оригіналу, але в більш алгоритмічному представленні.
Якщо є, я сподіваюся, що структури типів відносин можуть бути визначені легкою мовою "набір вершин і ребер", і я можу отримати ефективну бібліотеку для роботи з цією структурою. Така реалізація може бути використана для вивчення структур "поза теорією графів": гіперграфи, спрощені комплекси ...
Так. Чи здається ця ідея здійсненною? Корисно? Чи було якесь дослідження такого типу речей, про яке я міг би прочитати більше?
Додаток
Як коментує Кертіс F , набір вузлів і ребер не є точно графіком. Однак усі графіки можуть бути представлені такими, і я вважаю, що це досить поширене уявлення. Я бачив (дуже груба специфікація) використовується в дослідженнях, що застосовують теорію графіків для оптимізацій бездротових мереж різними способами. Ось приклад відкритого доступу, DRAND *. Це ставить питання про те, яка зв'язок між презентацією та як може бути впроваджене деяке програмне забезпечення на основі дослідження.
Це означає, що я не зовсім проти того, щоб змінити специфікацію входу з на щось інше. Наприклад, з урахуванням типу індексу , вузли мітки, і мітки ребер, . Тоді графік є (приблизно) функцією від індексів до списку міток та ребер.
Це, я впевнений, можна висловити (теорія категорій?) Як
або
які можна розглядати як набір вершин і ребер - дано достатньо застережень. Однак не ясно, чи є похідна значущою:
Я, напевно, думаю, що це демонструє певну обіцянку, але мені не вистачає витонченості йти далі. Я знаю, що там повинна бути якась робота над вивченням зв'язку.
* Якщо посилання коли-небудь перерветься, цитуйте: Rhee, Injong та ін. "DRAND: розподілений рандомізований графік TDMA для бездротових спеціальних мереж." Операції IEEE з мобільних обчислень 8.10 (2009): 1384-1396.