Suplemento 2016-10-03: Mezclé inducción-inducción e inducción-recursión (¡no la primera vez que hice eso!). Mis disculpas por el desastre. Actualicé la respuesta para cubrir ambos.
Encuentro las explicaciones en el artículo de Forsberg & Setzer Una axiomatización finita de definiciones inductivo-inductivas esclarecedoras.
Inducción-recursión
Una definición inductiva-recursiva es aquella en la que definimos un tipo UN y una familia de tipos B:A→Type simultáneamente de una manera especial:
- A se define como un tipo inductivo.
- B se define por la recursividad enA .
- Fundamentalmente, la definición de A puede utilizar B .
Sin el tercer requisito, primero podríamos definir A y luego B separado .
Aquí hay un ejemplo de bebé. Defina A inductivamente para tener los siguientes constructores:
- a:A
- ℓ:(∑x:AB(x))→A
El tipo de familia B se define por
- B(a)=bool
- B(ℓ(x,f))=nat
Aa:A.
B(a)boolℓ(a,false)
ℓ(a,true)
AB(ℓ(a,false))=B(ℓ(a,true))=natn:natℓ(ℓ(a,false),n):A
ℓ(ℓ(a,true),n):A
B(ℓ(ℓ(a,true),n))=nat
m:natℓ(ℓ(ℓ(a,true),n),m):A
ℓ(ℓ(ℓ(a,false),n),m):A
A
Inducción-inducción
AB:A→Type
- A
- BA
- AB
BB(c(…))=⋯
c(…)ABB
A
- a:A
- ℓ:(∑x:AB(x))→A
B
- Tru:B(a)
- Fal:B(a)
- x:Ay:B(x)Zer:B(ℓ(x,y))
- x:Ay:B(x)z:B(ℓ(x,y))Suc(z):B(ℓ(x,y))
BB(a)B(ℓ(x,y))