Open emilyriehl opened 1 year ago
Yes, thank you, I am looking at this!
I just opened a draft pull request (https://github.com/rzk-lang/sHoTT/pull/74). One direction is done so far. :-)
@TashiWalde and I were discussing the naive form of funext
NaiveFunExt : U
NaiveFunExt := (A : U) -> (B : A -> U) -> (f g : (x : A) -> B x) -> (p : (x : A) -> f x = g x) -> (f = g)
I incorrectly claimed that this was weaker than FunExt but I've discovered I was wrong.
Claim: @MatthiasHu's proof that FunExt -> WeakFunExt in fact shows that NaiveFunExt -> WeakFunExt.
So once he's completed the proof that WeakFunExt -> FunExt we should add NaiveFunExt to the repository (in the equivalences file) and prove the cycle of implications!
Oh, indeed! :smiley:
On a tangentially related note, I think that "unique unique choice" is a better name than "weak function extensionality" since it is much more descriptive (and more catchy :) ) . Not sure if its worth changing at this point, just throwing it out there...
I've got a proof of the remaining direction, including the discussion about naive-funext (just copying @MatthiasHu's proof as suggested). Things definitely need to be moved (e.g. NaiveFunExt) and renamed.
I spoke just now with Matthias Hutzler who plans to work on this issue, which I'll describe here.
In the contractibility file we define WeakFunExt. We should show that FunExt implies WeakFunExt and conversely.
We might consider cutting all the code
"
For future reference we add a variable we can assume.
Whenever a definition (implicitly) uses function extensionality, we write
#!rzk uses (weakfunext)
."
because we don't actually use the function
call-weakfunext
. We shouldn't state assumptions of either funext or weakfunext while demonstrating they are logically equivalent. Instead the goal is to fill in a proof of the followingand conversely.