¿Puedo tener un "tipo de coproducto dependiente"?

14

Estoy leyendo el libro de HoTT y tengo una pregunta (probablemente muy ingenua) sobre las cosas en el capítulo uno.

El capítulo presenta el tipo de función y luego lo generaliza haciendo que dependa de y eso se llama el tipo de función dependiente .

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

Continuando, el capítulo presenta el tipo de producto y luego lo generaliza haciendo que dependa de B: A \ to \ mathcal {U}, \ qquad g: \ sum_ {x: A} B (x) y eso se llama el tipo de par dependiente .

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

Definitivamente puedo ver un patrón aquí.

Continuando, el capítulo luego presenta el coproducto tipo

f:A+si
y ... combobreaker ... no hay discusión sobre la versión dependiente de este tipo.

¿Hay alguna restricción fundamental sobre eso o simplemente es irrelevante para el tema del libro? En cualquier caso, ¿alguien puede ayudarme con la intuición de por qué funcionan y los tipos de productos? ¿Qué hace que esos dos sean tan especiales que se generalicen a tipos dependientes y luego se usen para construir todo lo demás?

Kostya
fuente

Respuestas:

18

La suma dependiente es una generalización común tanto de la cartesiano producto y el coproducto . Sucede que el libro HoTT introduce una suma dependiente generalizando , porque eso no requiere que el tipo booleano se defina primero.A + B A × BUN×si UN+siUN×si

El coproducto es un caso especial de suma dependiente. Tipos dados y , consideran el tipo de familia definida por y . La suma dependiente de es equivalente a . Por cierto, también puede obtener como producto dependiente .B P : b o o lU P ( f a l s e ) = A P ( t r u e ) = B b : b o o l P ( b ) A + B A × B b : b o o l P ( b )UNsiPAG:sioolUPAG(Funlsmi)=UNPAG(trtumi)=sisi:sioolPAG(si)UN+siUN×sisi:sioolPAG(si)

Pregunta qué tiene de especial los productos y los tipos de funciones. Hay muchas, muchas razones por las que y son "necesarios". En términos de lógica, son necesarios porque corresponden a y por la correspondencia de proposiciones como tipos (pero eso solo cambia la pregunta a "¿por qué son y necesarios?"). En términos de teoría de categorías, y son necesarios porque son los adjuntos izquierdo y derecho a la sustitución. Haga una pregunta más específica si desea saber más.

Andrej Bauer
fuente
Hola. ¿Puedo preguntar cómo puede mostrar que " y están a la izquierda y a la derecha junto a la sustitución"? ¿Qué categorías se usarían?
ChoMedit
Supongo que la sustitución es algo así como un functor diagonal y funciona como la categoría índice de la misma. Entonces, tal vez la categoría presunta es la categoría de tipos. UN
ChoMedit
1

Hablaré sobre esto más ingeniería de software.

¿Estás hablando de un tipo de coproducto cuyos últimos constructores pueden referirse a los anteriores (que se parece bastante a un producto cuyos últimos campos pueden referirse a los anteriores)? Esto es posible en Agda después de la introducción de HIT (en la versión 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

Siguiendo este documento , si su verificador de tipo verifica las definiciones definidas usando la sintaxis presentada en la figura "(26)", creo que es bastante simple admitir "coproductos dependientes".

ice1000
fuente