WIP Diaconescu's theorem
Currently I'm stuck defining the P family in suspension-lemma for the double merid case :(
@clayrat Cool! I'll try and have a look this weekend.
I've tried plugging that case with a filler like this:
def helper (A : type) (A/prop : is-prop A) (a : A) (i j : π) : type =
let AβU = ua A unit (prop/unit A A/prop a) in
let UβA = symm^1 type AβU in
comp 0 i (UβA j) [
| j=0 β UβA
| j=1 β AβU
]
but that spits up an mismatched top frames error.
@clayrat I think I have some idea of what is going on :smile:
@jonsterling Does this have something to do with the path/identity distinction, or is it something more prosaic? :)
@clayrat My guess is that it has to do with that issue I mentioned on IRC where you need some elim form to have the exact right boundary. Sorry I didn't have a chance to look at this on the weekend: there were some things happening in Pittsburgh that demanded my attention.
I've tried adding the motive, but now the hole became something like a j/k-square, where the j side involves a function on k, and vice versa the k side depends on j, and I'm no longer sure this is making sense :D
Hm, it looks like that hole should be pluggable by connection/both^1 type (uA a) (Au a) k j , but it gives me a "global variable name mismatch" Β―_(γ)_/Β―
EDIT: Nevermind, it involves a square with as on horizontals and bs on verticals, can be seen more easily with the code at https://github.com/RedPRL/redtt/pull/461
Ok I think I've narrowed down the construction of P to this helper :
def help (A : type)
(abx : π β A)
(aby : [k] A [k=0 β abx 0 | k=1 β abx 1])
(bax : [k] A [k=0 β abx 1 | k=1 β abx 0])
(bay : [k] A [k=0 β abx 1 | k=1 β abx 0])
(abxy : path (π β A) abx aby)
(baxy : path (π β A) bax bay)
: [i j] A [
| i=0 β aby j
| i=1 β bay j
| j=0 β abx i
| j=1 β bax i
]
= ?help
then merid-hole can be plugged with
help^1 type (uA a) (uA b) (Au a) (Au b) (Ξ» k β uA (A/prop a b k)) (Ξ» k β Au (A/prop a b k)) i j
but I can't figure out how to construct the helper square :(
In the place you are using helper, are the paths abxy and baxy actually of type path (path A (abx 0) (abx 1)) abx aby and path (path A (abx 1) (abx 0)) bax bay respectively? The way they are stated (as paths in π β A), they won't be useful in helper, as π β A is already contractible.
If they do have those stronger types, then this should work:
def help (A : type)
(abx : π β A)
(aby : path A (abx 0) (abx 1))
(bax : path A (abx 1) (abx 0))
(bay : path A (abx 1) (abx 0))
(abxy : path (path A (abx 0) (abx 1)) abx aby)
(baxy : path (path A (abx 1) (abx 0)) bax bay)
: [i j] A [
| i=0 β aby j
| i=1 β bay j
| j=0 β abx i
| j=1 β bax i
]
=
Ξ» i j β
comp 0 1 (connection/both A abx bax i j) [
| i=0 k β abxy k j
| i=1 k β baxy k j
| β[j] β refl
]
Otherwise, I think helper is not definable.
@ecavallo yeah, those are basically paths^1 between Aβunit and unitβA defined by univalence
@ecavallo Oh wow, I have been using that exact term and didn't realize the path types are wrong!!! Thanks!