Чи можу я мати "залежний тип копродукту"?


14

Я читаю книгу HoTT, і у мене є (мабуть, дуже наївне) питання про речі в першій главі.

У цій главі представлено тип функції а потім узагальнено, зробивши B залежним від x : A B : A U ,

f:AB
Bx:A і називаєтьсязалежним типом функції.
B:AU,g:x:AB(x)

Переходячи до цього розділу, тоді вводиться тип продукту а потім узагальнюється, роблячи B залежним від x : A B : A U ,

f:A×B
Bx:A і називаєтьсязалежним типом пари.
B:AU,g:x:AB(x)

Тут я точно можу побачити викрійку.

Переходячи до цього розділу, далі вводиться тип спільного продукту і ... комбі-прорив ... немає обговорення залежної версії цього типу.

f:A+B

Чи є якесь фундаментальне обмеження щодо цього чи це просто не має значення для теми книги? У будь-якому випадку хтось може допомогти мені з інтуїцією щодо того, чому функціонують та типи продуктів? Що робить цих двох настільки особливими, що їх можна узагальнити до залежних типів, а потім використати для створення всього іншого?

Відповіді:


18

A×B A+BA×B

ABP:boolUP(false)=AP(true)=Bb:boolP(b)A+BA×Bb:boolP(b)



A

1

Я розповім про це ще програмно-інженерне забезпечення.

Ви говорите про тип копродукту, чиї останні конструктори можуть посилатися на попередні (що, схоже, на продукт, чиї останні поля можуть стосуватися попередніх)? Це можливо в Agda після введення HIT (у версії 2.6.0):

-- Auxiliary definition: Nat
data Nat : Set where
  zero : Nat
  succ : Nat -> Nat

-- The HIT I was talking about
data Int : Set where
  positive : Nat -> Int
  negative : Nat -> Int
  -- Note this constructor uses `positive` and `negative`.
  zeroPath : positive zero ≡ negative zero

Дотримуючись цього документу , якщо ваша перевірка типу перевіряє визначення, визначені за допомогою синтаксису, представленого на рисунку "(26)", я вважаю, що досить просто підтримувати "залежні копродукти".

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.