PiSigma: por que 'desdobrar' vincula uma variável?

8

Estou tentando entender o documento ΠΣ: Tipos dependentes sem o Sugar , implementando um intérprete e um verificador de tipos para o idioma. Ao fazer isso, vi que a unfold t as x -> usintaxe para definições recursivas (a sintaxe é definida na Seção 2.1) vincula uma variável, mas não vejo por que isso é necessário. Nenhum dos exemplos do artigo realmente usa a variável de encadernação - todos eles usam um formato abreviado unfold t(significado unfold t as x -> x).

Eu não ver que o tipo de verificação regra para isso (da seção 5) usa a variável de ligação, mas eu não entendo as implicações desta. Tanto quanto eu posso dizer, unfold t as x -> ué totalmente equivalente a let x = unfold t in u.

Alguém pode fornecer um exemplo de quando a ligação de variável é útil ou necessária? Existe algum termo que verifica o tipo com o formato longo, unfoldmas não com o formato curto e let?

Steve Trout
fonte
Eu citaria a regra de verificação de tipo, mas meu conhecimento sobre o LaTeX é muito limitado. Algum editor gentil faria isso por mim? Obrigado!
Steve Trout

Respostas:

1

Eu não acho que haja qualquer razão mágica / necessária. Na IMO, está escrito dessa maneira para tornar mais óbvio que unfoldé uma regra de eliminação analítica / de verificação; assim como por que splitestá escrito do jeito que está, em vez de ser escrito como primeira e segunda projeções, e por que caseestá escrito do jeito que está, em vez de ser escrito como uneitherem Haskell.

No bit "analítico", observe como as outras regras de eliminação são sintéticas / inferenciais (beta) ou bidirecionais (bang)

wren romano
fonte
Ah, eu vejo a distinção lá. Essa é uma possível razão pela qual !xnão está escrito force x as y -> y. Independentemente de haver uma razão mais profunda, essa resposta satisfaz minha curiosidade. Obrigado!
Steve Trout