Loading AI tools
Da 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:
O universo de discurso de qualquer estrutura dessa assinatura é então fragmentada em subconjuntos dijuntos, um para cada tipo.
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.
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.
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.
Primeiros artigos sobre lógica de muitos tipos incluem:
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.