Czy mogę mieć „zależny typ koproduktu”?

14

Czytam poprzez książki hott i mam (prawdopodobnie bardzo naiwne) pytanie o rzeczy w jednym rozdziale.

Rozdział wprowadza typ funkcji a następnie uogólnia ją, uzależniając od i to się nazywa typ funkcji zależnej .B x : A B : A U ,

f:AB
Bx:A
B:AU,g:x:AB(x)

Przechodząc dalej, rozdział wprowadza następnie typ produktu a następnie uogólnia go, uzależniając od i to się nazywa typ pary zależnej .B x : A B : A U ,

f:A×B
Bx:A
B:AU,g:x:AB(x)

Zdecydowanie widzę tutaj wzór.

Przechodząc dalej, rozdział wprowadza typ koproduktu i ... combobreaker ... nie dyskutuje się o zależnej wersji tego typu.

f:A+B

Czy są jakieś zasadnicze ograniczenia w tym względzie, czy jest to po prostu nieistotne dla tematu książki? W każdym razie ktoś może mi pomóc z intuicją, dlaczego typy funkcji i produktów? Co sprawia, że ​​te dwa są tak wyjątkowe, że można je uogólnić na typy zależne, a następnie wykorzystać do zbudowania wszystkiego innego?

Kostya
źródło

Odpowiedzi:

18

A×B A+BA×B

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

Andrej Bauer
źródło
A
1

Opowiem o tym bardziej o inżynierii oprogramowania.

Czy mówisz o typie koproduktu, którego ostatni konstruktor może odnosić się do poprzednich (który wygląda dość podobnie do produktu, którego ostatnie pola mogą odnosić się do poprzednich)? Jest to możliwe w Agdzie po wprowadzeniu HIT (w wersji 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

Postępując zgodnie z tym artykułem , jeśli moduł sprawdzania typu sprawdza definicje zdefiniowane przy użyciu składni przedstawionej na rysunku „(26)”, uważam, że obsługa „zależnych koproduktów” jest dość prosta.

ice1000
źródło