Cálculo Kappa

Em lógica matemática, teoria das categorias, e ciência da computação, kappa cálculo é um sistema formal para a definição de funções de primeira ordem.

Ao contrário do cálculo lambda, o cálculo kappa não tem funções de ordem superior; as suas funções não são objetos de primeira classe. Kappa-cálculo pode ser considerado como "uma reformulação do fragmento de primeira-ordem do cálculo lambda tipado[1]".

Em razão do fato de que suas funções não são objetos de primeira classe, a avaliação de expressões de cálculo kappa não exige fechos.

Definição

A definição abaixo foi adaptada a partir de diagramas nas páginas 205 e 207 de Hasegawa.[2]

Gramática

Cálculo kappa consiste em tipos e expressões, dado pela gramática abaixo:

τ = 1 τ × τ {\displaystyle \tau =1\mid \tau \times \tau \mid \ldots }

e = x i d τ ! τ lift τ ( e ) e e κ x : 1 τ . e {\displaystyle e=x\mid id_{\tau }\mid !_{\tau }\mid \operatorname {lift} _{\tau }(e)\mid e\circ e\mid \kappa x:1{\to }\tau .e}

Em outras palavras,

  • 1 é um tipo
  • If τ 1 {\displaystyle \tau _{1}} and τ 2 {\displaystyle \tau _{2}} forem tipos então τ 1 × τ 2 {\displaystyle \tau _{1}\times \tau _{2}} é um tipo
  • Toda variável é uma expressão
  • Se τ {\displaystyle \tau } for um tipo então i d τ {\displaystyle id_{\tau }} é uma expressão
  • Se τ {\displaystyle \tau } for um tipo então ! τ {\displaystyle !_{\tau }} é uma expressão
  • Se τ {\displaystyle \tau } for um tipo e e {\displaystyle e} for uma expressão então lift τ ( e ) {\displaystyle \operatorname {lift} _{\tau }(e)} é uma expressão
  • Se e 1 {\displaystyle e_{1}} e e 2 {\displaystyle e_{2}} forem expressões então e 1 e 2 {\displaystyle e_{1}\circ e_{2}} é uma expressão
  • Se x {\displaystyle x} for uma variável, τ {\displaystyle \tau } for um tipo, e e {\displaystyle e} for uma expressão, então κ x : 1 τ . e {\displaystyle \kappa x{:}1{\to }\tau \;.\;e} é uma expressão

O tipo : 1 τ {\displaystyle :1{\to }\tau } e os índices de i d {\displaystyle id} , ! {\displaystyle !} , e lift {\displaystyle \operatorname {lift} } são às vezes omitidos quando eles podem ser inequivocamente determinados a partir do contexto.

Justaposição é frequentemente usada como uma abreviação para uma combinação de " lift {\displaystyle \operatorname {lift} } " e composição:

e 1 e 2 = d e f e 1 lift ( e 2 ) {\displaystyle e_{1}e_{2}{\overset {def}{=}}e_{1}\circ \operatorname {lift} (e_{2})}

Regras de tipagem

A apresentação aqui usa sequentes ( Γ e : τ {\displaystyle \Gamma \vdash e:\tau } ) em vez de julgamentos hipotéticos, a fim de facilitar a comparação com o cálculo lambda simplesmente tipado. Isso requer que a adição da regra Var, que não aparecem no Hasegawa[3]

No cálculo kappa existem dois tipos de expressões: o tipo de origem e o tipo de destino. A notação e : τ 1 τ 2 {\displaystyle e:\tau _{1}{\to }\tau _{2}} é usada para indicar que a expressão e {\displaystyle e} tem o tipo da fonte τ 1 {\displaystyle {\tau _{1}}} e o tipo de destino τ 2 {\displaystyle {\tau _{2}}} .

Expressões no cálculo kappa são tipos de atribuídos de acordo com as seguintes regras:

x : 1 τ Γ Γ x : 1 τ {\displaystyle {x{:}1{\to }\tau \;\in \;\Gamma } \over {\Gamma \vdash x:1{\to }\tau }} (Var)

i d τ : τ τ {\displaystyle {} \over {\vdash id_{\tau }\;:\;\tau \to \tau }} (Id)

! τ : τ 1 {\displaystyle {} \over {\vdash !_{\tau }\;:\;\tau \to 1}} (Bang)

Γ e 1 : τ 1 τ 2 Γ e 2 : τ 2 τ 3 Γ e 2 e 1 : τ 1 τ 3 {\displaystyle {\Gamma \vdash e_{1}{:}\tau _{1}{\to }\tau _{2}\;\;\;\;\;\;\Gamma \vdash e_{2}{:}\tau _{2}{\to }\tau _{3}} \over {\Gamma \vdash e_{2}\circ e_{1}:\tau _{1}{\to }\tau _{3}}} (Comp)

Γ e : 1 τ 1 Γ lift τ 2 ( e ) : τ 2 ( τ 1 × τ 2 ) {\displaystyle {\Gamma \vdash e{:}1{\to }\tau _{1}} \over {\Gamma \vdash \operatorname {lift} _{\tau _{2}}(e)\;:\;\tau _{2}\to (\tau _{1}\times \tau _{2})}} (Lift)

Γ , x : 1 τ 1 e : τ 2 τ 3 Γ κ x : 1 τ 1 . e : τ 1 × τ 2 τ 3 {\displaystyle {\Gamma ,\;x{:}1{\to }\tau _{1}\;\vdash \;e:\tau _{2}{\to }\tau _{3}} \over {\Gamma \vdash \kappa x{:}1{\to }\tau _{1}\,.\,e\;:\;\tau _{1}\times \tau _{2}\to \tau _{3}}} (Kappa)

Em outras palavras,

  • Var: assumindo x : 1 τ {\displaystyle x:1{\to }\tau } permite você concluir que x : 1 τ {\displaystyle x:1{\to }\tau }
  • Id: para qualquer tipo , i d τ : τ τ {\displaystyle id_{\tau }:\tau {\to }\tau }
  • Bang: para qualquer tipo τ {\displaystyle \tau } , ! τ : τ 1 {\displaystyle !_{\tau }:\tau {\to }1}
  • Comp: se o tipo de destino corresponde ao tipo de origem , eles podem ser compostos para formar uma expressão com o tipo de origem de e o tipo de destido de e 2 {\displaystyle e_{2}}
  • Lift: se e : 1 τ 1 {\displaystyle e:1{\to }\tau _{1}} , então lift τ 2 ( e ) : τ 2 ( τ 1 × τ 2 ) {\displaystyle \operatorname {lift} _{\tau _{2}}(e):\tau _{2}{\to }(\tau _{1}\times \tau _{2})}
  • Kappa: se nós podemos concluir que sob a suposição que , então nós podemos concluir sem essa suposição que κ x : 1 τ 1 . e : τ 1 × τ 2 τ 3 {\displaystyle \kappa x{:}1{\to }\tau _{1}\,.\,e\;:\;\tau _{1}\times \tau _{2}\to \tau _{3}}

Igualdades

Cálculo kappa obedece as seguintes igualdades:

  • Neutralidade: Se f : τ 1 τ 2 {\displaystyle f:\tau _{1}{\to }\tau _{2}} então f i d τ 1 = f {\displaystyle f{\circ }id_{\tau _{1}}=f} e f = i d τ 2 f {\displaystyle f=id_{\tau _{2}}{\circ }f}
  • Associatividade: Se f : τ 1 τ 2 {\displaystyle f:\tau _{1}{\to }\tau _{2}} , g : τ 2 τ 3 {\displaystyle g:\tau _{2}{\to }\tau _{3}} , e h : τ 3 τ 4 {\displaystyle h:\tau _{3}{\to }\tau _{4}} , então ( h g ) f = h ( g f ) {\displaystyle (h{\circ }g){\circ }f=h{\circ }(g{\circ }f)} .
  • Terminalidade: Se e então f = g {\displaystyle f=g}
  • Redução de ascensor: ( κ x . f ) lift τ ( c ) = f [ c / x ] {\displaystyle (\kappa x.f)\circ \operatorname {lift} _{\tau }(c)=f[c/x]}
  • Redução Kappa: κ x . ( h lift τ ( x ) ) = h {\displaystyle \kappa x.(h\circ \operatorname {lift} _{\tau }(x))=h} se x não é livre em h

As últimas duas igualdades são regras de redução para os cálculos, reescrevendo da esquerda para direita

Proriedades

O tipo 1 pode ser considerado como o tipo unitário. Devido a isso, quaisquer duas funções cujo tipo de argumento é o mesmo e cujo tipo de resultado é 1 deve ser igual - uma vez que existe apenas um único valor do tipo 1 as duas funções devem retornar esse valor para cada argumento (Terminalidade).

Expressões com tipo podem ser considerado como "constantes" ou valores de "tipo de base"; isto é porque o 1 é o tipo unitário e, portanto, uma função deste tipo é necessariamente uma função constante. Observe que o regra kappa permite abstrações apenas quando a variável que está sendo abstraída tem o tipo para alguns. Este é o mecanismo básico que garante que todas as funções são de primeira ordem.

Semântica categórica

Cálculo kappa destina-se a ser a linguagem interna de categorias completas contextualmente.

Exemplos

Expressões com múltiplos argumentos têm tipos fonte que são árvores binárias "desbalanceadas à direita". Por exemplo, uma função f {\displaystyle f} com três argumentos de tipos A , B , {\displaystyle A,B,} e C {\displaystyle C} e tipo do resultado for D {\displaystyle D} terá tipo

f : A × ( B × ( C × 1 ) ) D {\displaystyle f:A\times (B\times (C\times 1))\to D}

Se definirmos justaposição associativa-à-esquerda (f c) como uma abreviação para ( f lift ( c ) ) {\displaystyle (f\circ \operatorname {lift} (c))} , então – assumindo que a : 1 A {\displaystyle a:1{\to }A} , b : 1 B {\displaystyle b:1{\to }B} , e que c : 1 C {\displaystyle c:1{\to }C} – podemos aplicar essa função:

f a b c : 1 D {\displaystyle f\;a\;b\;c\;:\;1\to D}

Como a expressão f a b c {\displaystyle fabc} tem tipo fonte 1, ela é um "valor básico" e pode ser passado como um argumento para uma outra função. Se g : ( D × E ) F {\displaystyle g:(D\times E){\to }F} , então

g ( f a b c ) : E F {\displaystyle g\;(f\;a\;b\;c)\;:\;E\to F}

Bem semelhante a uma função "curryficada" de tipo A ( B ( C D ) ) {\displaystyle A{\to }(B{\to }(C{\to }D))} no lambda cálculo, aplicação parcial é possível:

f a : B × ( C × 1 ) D {\displaystyle f\;a\;:\;B\times (C\times 1)\to D}

Entretanto nenhum tipo de alta ordem (i.e. ( τ τ ) τ {\displaystyle (\tau {\to }\tau ){\to }\tau } ) está envolvido. Note que em razão do fato de que o tipo fonte de f a {\displaystyle fa} não é 1, a seguinte expressão não pode ser tipada sob as suposições mencionadas até aqui :

h ( f a ) {\displaystyle h\;(f\;a)}

Em razão do fato de que a aplicação sucessiva é usada para argumentos múltiplos não é necessário saber a aridade de uma função para determinar sua tipagem; por exemplo, se sabemos que c : 1 C {\displaystyle c:1{\to }C} então a expressão

j c {\displaystyle j\;c}

é bem tipada desde que j tenha tipo ( C × α ) β {\displaystyle (C\times \alpha ){\to }\beta } para algum α {\displaystyle \alpha } e algum β {\displaystyle \beta } . Essa propriedade é importante quando calculando o tipo principal de uma expressão, algo que pode ser difícil quando se tentar excluir funções de alta-ordem dos lambda-cálculos tipados restringindo a gramática de tipos.

História

Barendregt originalmente introduziu[4] o termo "completude funcional" no contexto da álgebra combinatória. O Kappa cálculo surgiu a partir de esforços de Lambek[5] para formular um análogo apropriado de completude funcional para categorias arbitrárias (ver Hermida & Jacobs,[6] section 1). Hasegawa mais tarde desenvolveu o kappa cálculo para uma linguagem de programação utilizável (embora simples) incluindo aritmética sobre números naturais e recursão primitiva.[1] Conexões a setas foram investigadas mais tarde[7] por Power, Thielecke, e outros.

Variantes

É possível explorar versões do kappa cálculo com tipos subestruturais tais como linear, afim, e tipos ordenados. Essas extensões requerem eliminar ou restringir a expressão ! τ {\displaystyle !_{\tau }} . Em tais circunstâncias o operador de tipo × {\displaystyle \times } não é um verdadeiro produto cartesiano, e é geralmente escrito {\displaystyle \otimes } para deixar isso claro.

Referências

  1. a b Hasegawa, Masahito (1995). Pitt, David; Rydeheard, David E.; Johnstone, Peter, eds. «Decomposing typed lambda calculus into a couple of categorical programming languages». Springer-Verlag Berlin Heidelberg. Category Theory and Computer Science: 6th International Conference, CTCS '95 Cambridge, United Kingdom, August 7–11, 1995 Proceedings. Lecture Notes in Computer Science. 953: 200–219. ISBN 978-3-540-60164-7. ISSN 0302-9743. doi:10.1007/3-540-60164-3_28. Resumo divulgativo – "Adam" answering "What are κ {\displaystyle \kappa } -categories?" on MathOverflow (31 de agosto de 2010) 
  2. Hasegawa, Masahito (1995). Pitt, David; Rydeheard, David E.; Johnstone, Peter, eds. «Decomposing typed lambda calculus into a couple of categorical programming languages». Springer-Verlag Berlin Heidelberg. Category Theory and Computer Science: 6th International Conference, CTCS '95 Cambridge, United Kingdom, August 7–11, 1995 Proceedings. Lecture Notes in Computer Science. 953: 200–219. ISBN 978-3-540-60164-7. ISSN 0302-9743. doi:10.1007/3-540-60164-3_28. Resumo divulgativo – "Adam" answering "What are κ {\displaystyle \kappa } -categories?" on MathOverflow (31 de agosto de 2010) 
  3. Hasegawa, Masahito (1995). Pitt, David; Rydeheard, David E.; Johnstone, Peter, eds. «Decomposing typed lambda calculus into a couple of categorical programming languages». Springer-Verlag Berlin Heidelberg. Category Theory and Computer Science: 6th International Conference, CTCS '95 Cambridge, United Kingdom, August 7–11, 1995 Proceedings. Lecture Notes in Computer Science. 953: 200–219. ISBN 978-3-540-60164-7. ISSN 0302-9743. doi:10.1007/3-540-60164-3_28. Resumo divulgativo – "Adam" answering "What are κ {\displaystyle \kappa } -categories?" on MathOverflow (31 de agosto de 2010) 
  4. Barendregt, Hendrik Pieter, ed. (1 de outubro de 1984). «The Lambda Calculus: Its Syntax and Semantics» Revised ed. Amsterdam, North Holland: Elsevier Science. Studies in Logic and the Foundations of Mathematics. 103. ISBN 0-444-87508-5 
  5. Lambek, Joachim (1 de agosto de 1973). «Functional completeness of cartesian categories». Amsterdam, North Holland: North-Holland Publishing Company (publicado em março de 1974). Annals of Mathematical Logic. 6 (3-4): 259-292. ISSN 0003-4843. doi:10.1016/0003-4843(74)90003-5. Resumo divulgativo – "Adam" answering "What are κ {\displaystyle \kappa } -categories?" on MathOverflow (31 de agosto de 2010) 
  6. Hermida, Claudio; Jacobs, Bart (dezembro de 1995). «Fibrations with indeterminates: contextual and functional completeness for polymorphic lambda calculi». Cambridge, England: Cambridge University Press. Mathematical Structures in Computer Science. 5 (4): 501–531. ISSN 1469-8072. doi:10.1017/S0960129500001213 
  7. Power, John; Thielecke, Hayo (1999). Wiedermann, Jiří; van Emde Boas, Peter; Nielsen, Mogens, eds. «Closed Freyd- and κ {\displaystyle \kappa } -Categories». Springer-Verlag Berlin Heidelberg. Automata, Languages and Programming: 26th International Colloquium, ICALP’99 Prague, Czech Republic, July 11–15, 1999 Proceedings. Lecture Notes in Computer Science. 1644: 625–634. ISBN 978-3-540-66224-2. ISSN 0302-9743. doi:10.1007/3-540-48523-6_59 

Erro de citação: Elemento <ref> definido em <references> não tem um atributo de nome.