Por que precisamos de um separadas notação para П-tipos?
-
29-09-2020 - |
Pergunta
Principal
Estou confuso sobre a motivação por trás da necessidade de outra notação para П-tipos, que você pode encontrar no tipo de sistemas de λ2 no.A resposta normalmente é assim - pense sobre como cada um pode representar uma assinatura de identidade de função - pode ser λa:type.λx:a.x
ou λb:type.λx:b.x
.A sutil parte, dizem eles, é que essas duas assinaturas não só not equal
, eles não são alfa-equivalente como variáveis do tipo a
e b
são variáveis livres dentro de suas abstrações correspondente.Por isso, para superar este traquinas sintática problema, apresentamos П fichário que joga muito bem com alfa-conversão.
Então, a pergunta:por que isso?Porque não basta corrigir a noção de alfa-equivalência?
ATUALIZAÇÃO z:
Oh, bobo de mim, λa:type.λx:a.x
e λb:type.λx:b.x
alfa são equivalentes.Mas por que a:type -> a -> a
e b:type -> b -> b
arent, em seguida,.
ATUALIZAÇÃO suc z:
Ah, interessante, eu acho que este é um perfeito exemplo de cegueira seletiva =D
Eu estou lendo o livro Escreva a Teoria e a Prova Formal, e no capítulo sobre a lambda2 autor motiva a existência de П
usando exatamente que tipo de argumentação - um não posso dizer que \t:*.\v:t.v
: * -> t -> t
porque isso faz dois alfa termos de equivalente-\t:*.\v:t.v
e \g:*.\v:g.v
temos diferentes tipos, como correspondente de tipos não são alfa-equivalente, onde os tipos de como t:* -> t -> t
são, na verdade, alfa-invariante. Mente a diferença entre t:* -> t -> t
e * -> t -> t
.Mas, não faz esse argumento um pouco trivial, e é até mesmo algo significativo para falar sobre o tipo de a -> b
onde a
e b
são independente por qualquer quantificadores variáveis.Andrej Bauer
apontado nos comentários que П
de fato, é semelhante a uma abstração lambda com alguns sinos e assobios adicionais.
Tudo em tudo, eu sou feito com que, obrigado a vocês.
Solução
Eu acho que só temos algumas coisas em linha reta aqui:
- Na expressão $\lambda a :\mathsf{tipo} .\lambda x :um .x$ a variável $a$ está ligado (pelo exterior $\lambda$).As expressões $\lambda a :\mathsf{tipo} .\lambda x :um .x$ e $\lambda b :\mathsf{tipo} .\lambda x :b .x$ são $\alpha$-igual.
- A expressão $\lambda a :\mathsf{tipo} .\lambda x :um .x$ é a identidade de função, é não a "assinatura da identidade de função".
- Se por "assinatura da função identity" você quer dizer "o tipo de função identity", então seria algo como $\Pi_{a :\mathsf{tipo}} .(a \a)$, ou se você quiser apenas tipos de produtos, então é $\Pi_{a :\mathsf{tipo}} \Pi_{x :a}$de.
Existe ainda uma pergunta?
Talvez isto ajude:
- o tipo da função identidade $\lambda x :um .x$ é $a \us$
- o tipo da função identidade $\lambda y :b .y$ é $b o b$
- funções $\lambda x :um .x$ e $\lambda y :b .y$ são diferentes
- os tipos $a \us$ e $b o b$ são diferentes
- o tipo de polimórficas identidade de função $\lambda c :\mathsf{tipo} .\lambda z :c .z$ é $\Pi_{c :\mathsf{tipo}} .c \c$.
- funções $\lambda a :\mathsf{tipo} .\lambda x :um .x$ e $\lambda c :\mathsf{tipo} .\lambda z :c .z$ são $\alpha$-igual
- os tipos $\Pi_{a :\mathsf{tipo}} .um \us$ e $\Pi_{c :\mathsf{tipo}} .c \c$ são $\alpha$-igual.
Suplementar: Depois de falar com Alex Simpson mais de uma xícara de chá, há mais uma coisa que eu posso dizer.Nós não necessidade separado $\lambda$ e $\Pi$ os construtores, já que ambos têm exatamente o mesmo sintático da forma (take dois argumentos, vincular uma variável).Na verdade, se a minha memória me serve direito, Automath usou a mesma notação para $\lambda$-abstrações e $\Pi$-tipos.Mas o ponto é que nós quer para utilizar dois tipos de construtores porque denotam diferentes conceitos.