Lógica polissortida

Origem: Wikipédia, a enciclopédia livre.

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 | editar código-fonte]

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 | editar código-fonte]

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 | editar código-fonte]

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 | editar código-fonte]