-
If this is answered in a paper somewhere, feel free to just point me to that. Perhaps this part of this is actually better suited for the Proof Assistant Stack Exchange? Let me know. I'm trying to understand the theoretical and practical relationship between extension types, cubical subtypes, and cofibration splits. My current understanding is this:
My feeling is that there is some overlap in the functionality of these concepts. Namely, it seems like extension types ought to be (almost?) expressible in terms of subtypes and splits, that is:
seems very similar to
They're clearly not exactly the same (the second has an extra argument), and in fact I can't get the second type to typecheck, it asks for annotations on the subtypes. On the other hand, these seem to actually be exactly the same:
and
I also see that subtypes have no codes, and extension types are only codes, which seem to be translated into something like I've written above by the function My two questions are:
|
Beta Was this translation helpful? Give feedback.
Replies: 1 comment 3 replies
-
Great question, and I don't think the answer is written down anywhere... As you noticed, terms of extension type are defined to be functions out of (n copies of) the interval into a cubical subtype. However, cubical subtypes are generally not Kan (in particular, do not in general support Here's my go-to example of why cubical subtypes can't always be Kan:
The above (illegal) coercion produces a path from |
Beta Was this translation helpful? Give feedback.
Great question, and I don't think the answer is written down anywhere...
As you noticed, terms of extension type are defined to be functions out of (n copies of) the interval into a cubical subtype. However, cubical subtypes are generally not Kan (in particular, do not in general support
coe
rcion), whereas our formation rule for extension types picks out the ones that are Kan. In cooltt, types are not assumed to be Kan in general; only types with codes in the Kan universe are Kan.Here's my go-to example of why cubical subtypes can't always be Kan:
i => {coe {j => sub bool {j=0 \/ j=1} [j=0 => true | j=1 => false]} 0 i true}
The above (illegal) coercion produces a path from
true
tofalse
.…