Estou lendo as palestras sobre a teoria dos tipos cúbicos neste repositório do github . Na aula 1, o autor define a extensionalidade da função da seguinte maneira:
funExt (A B : U) (f g : A -> B)
(p : (x : A) -> Path B (f x) (g x)) :
Path (A -> B) f g = <i> \(a : A) -> (p a) @ i
e escreve
To see that this makes sense compute the end-points of the path:
(<i> \(a : A) -> (p a) @ i) @ 0 = \(a : A) -> (p a) @ 0
= \(a : A) -> f a
= f
Eu não sigo. Especificamente, quando substituímos (p a) @ 0
por f a
minha mente, usamos o seguinte fato: \(a : A) -> (p a) @ 0 = f a
para reescrever (vamos dar nomes para os lados esquerdo e direito) fpa = \(a : A) -> (p a) @ 0
em fa = \(a : A) -> f a
. Mas não é isso, por si só, usando extensionalidade de função f = fpa, g = fa
?
Se não me engano, esse argumento é circular. Alguém pode esclarecer?
fonte
(p a) @ 0
é julgadormente igual a(f a)
nós, podemos reescrevê-lo dentro da lambda? Portanto, a diferença é igualdade de julgamento versus caminho. Faz sentido para mim.0
ou1
é julgadoramente igual ao ponto final correspondente do caminho, mesmo que arbitrariamentei
você não saiba o valor.