Lógica polissortida

A lógica polissortida pode refletir formalmente a nossa intenção de não lidar com o universo como um conjunto homogêneo de objetos, mas particionar isso de uma maneira que é semelhante aos de tipos em linguagens tipadas. Ambos funcionais e assertivas "partes do discurso" na linguagem da logica refletem essa partição tipificada do universo, mesmo no nível de sintaxe: substituição e argumento de passagem só pode ser feito em conformidade, respeitando os "tipos".

Há mais maneiras de formalizar a intenção acima mencionada; a Lógica polissortida é qualquer pacote de informação que o preenche. Na maioria dos casos, são os seguintes dados:

  • um conjunto de tipos, S
  • uma generalização adequada da noção de assinatura ara ser capaz de lidar com a informação adicional que vem com os tipos.

O universo de discurso de qualquer estrutura dessa assinatura é então fragmentada em subconjuntos dijuntos, um para cada tipo.

Exemplo

editar

Ao refletirmos sobre criaturas biológicas, é útil distinguir dois tipos:   and  . Enquanto uma função   faz sentido, uma função similar   usualmente não faz não faz. Lógica polissortida permite um ter termos como  , mas discartar termos como   como sintaticamente mal formado.

Álgebra

editar

A álgebra da lógica polissortida é explicada em um artigo de Caleiro e Gonçalves,[1] que generaliza a lógica algébrica abstrata para o caso polissortido, mas também pode ser usado como material introdutório.

Lógica ordem-sortida

editar

Enquanto Lógica polissortida requer dois diferentes tipos para ter conjuntos universo dijuntos, lógica ordem-sortida permite um tipo   para ser declarado como um subtipo de outro tipo.  , usualmente escrevendo  ou sintaxe similar. No exemplo abaixo, é desejável declarar

 ,
 ,
 ,
 ,
 ,
 ,

e assim por diante.

Onde um termo de um tipo   é requerido, um termo de qualquer subtipo   pode ser fornecido em seu lugar. Por exemplo, assumindo uma declaração de função  , e uma declaração constante  , o termo   é perfeitamente válido e tem o tipo  . A fim de fornecer as informações de que a mãe de um cão é um cão, por sua vez, uma nova declaração  pode ser emitida; isso é chamado de sobrecarga de funções , semelhante ao Polimorfismo em linguagens de programação.

Lógica ordem-sortida pode ser traduzida em lógica não sortida, usando um predicado unário   para cada tipo , e um axioma   para cada declaração de subtipo  . A abordagem inversa foi bem sucedido na prova de teoremas automatizado: em 1985, Christoph Walther poderia resolver um problema, então referência, traduzindo-a na lógica ordem-sortida, portando fazendo isso uma ordem de magnitude, assim como muitos predicados unários se transformaram em tipos.[2]

A fim de incorporar uma lógica classificados ordem em um teorema automatizado prover baseada em cláusulas, uma correspondente algoritmo de unificação ordem-sortida é necessário,que exige que para quaisquer dois tipos declarados   their intersection   ser declarados, para: se   e   é im tipo variável   e  , respectivamente, a equação   possui a solução  , onde  .

Smolka generalizou a lógica ordem-sortida para permitir polimorfismo paramétrico. [3][4] IEm seu quadro, declarações de subtipo são propagadas para expressões do tipo complexo. Como um exemplo de programação, um tipo paramétrico   pode ser declarado (with   sendo um tipo paramétrico como em um template C++), e de uma declaração de subtipo   a relação   é automaticamente inferida, significando que cada lista de inteiros é também uma lista de tipos float.

Schmidt-Schauß generalizou ordem-sortida para permitir a declaração de termos.[5] Como um exemplo, asumindo declarações de subtipos   e  , uma declaração de termo como   permite declarar uma propriedade de adição de inteiros que não pode ser expressada por poliformismo ordinário.

Referências

  1. Carlos Caleiro, Ricardo Gonçalves (2006). «On the algebraization of many-sorted logics». Proc. 18th int. conf. on Recent trends in algebraic development techniques (WADT) (PDF). [S.l.]: Springer. pp. 21–36. ISBN 978-3-540-71997-7 
  2. Walther, Christoph (1985). «A Mechanical Solution of Schubert's Steamroller by Many-Sorted Resolution» (PDF). Artif. Intell. 26 (2): 217–224. doi:10.1016/0004-3702(85)90029-3 
  3. Smolka, Gert (novembro de 1988). «Logic Programming with Polymorphically Order-Sorted Types». Int. Workshop Algebraic and Logic Programming. LNCS. 343. Springer. pp. 53–70 
  4. Smolka, Gert (maio de 1989), Logic Programming over Polymorphically Order-Sorted Types, Univ. Kaiserslautern, Germany 
  5. Schmidt-Schauß, Manfred (abril de 1988). Computational Aspects of an Order-Sorted Logic with Term Declarations. Col: LNAI. 395. [S.l.]: Springer 

Primeiros artigos sobre lógica de muitos tipos incluem:

Ligações externas

editar