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.

Foi útil?

Solução

Eu acho que só temos algumas coisas em linha reta aqui:

  1. 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.
  2. 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".
  3. 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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a cs.stackexchange
scroll top