Estou tentando entender a lógica linear para entender melhor os sistemas de tipos lineares. No entanto, quando li as regras, eu não conseguem obter uma intuição por trás dele como eu fiz na lógica modal - significa um é exigido como em Kripke quadros Um é necessário para cada mundo acessível [ ◊ A é A é possível mutatis mutandis]. Mas não consigo encontrar nenhuma explicação intuitiva para a dualidade e qual dos pares de conjunção / disjunção (se houver) corresponde a ∧ e ∨ .
lo.logic
type-theory
linear-logic
Maciej Piechotka
fonte
fonte
Respostas:
Não tenho certeza se essa pergunta é ideal para o CSTheory, mas, como já está recebendo votos, aqui está uma resposta que alguém poderia ter dado se a pergunta fosse publicada em cs.stackexchange .
A fim de compreender a noção de lógica linear da dualidade , que as forças de conjunção e disjunção além muito mais longe do que estamos acostumados na lógica convencional, eu recomendo não pensar em lógica linear em termos de recursos (embora esta é uma leitura importante ) Em vez disso, pense nas fórmulas lógicas lineares A como processos que se comunicam em uma porta / nome / canal. Essa interpretação foi desenvolvida primeiro em (1) com o melhor de meu conhecimento, mas já foi mencionada no trabalho original de Girard. Como uma imagem:(⋅)⊥ A
(Não sei ao certo como centralizar as imagens aqui.) A conjunção linear é interpretada como executando os processos A e B em paralelo . O processo A ⊗ B comunica pares ( a , b ) em sua porta, onde a vem de A e b é a comunicação de B.A⊗B A B A⊗B (a,b) a A b B
A dualização (que é a negação da lógica linear) alterna entrada e saída. Portanto, o dual de A ⊗ B é(.)⊥ A⊗B
Nesta leitura é o processo que comunica com . Um ⊗ BA⊥⅋B⊥ A⊗B
O equivalente da lógica linear à disjunção pode receber uma leitura teórica do processo semelhante. A fórmula
também devem ser vistos como dois processos e em paralelo, mas, em vez de enviar mensagens ativamente, eles esperam que o ambiente decida qual executar. Então fica lá, esperando em seu canal para um pouco de informação que decide se deve ser executado como ou como . Esta é uma versão 'paralela' do em linguagens seqüenciais de programação. O duplo de éB A e B A e B A b i f / t h e n / e l s e ( A e B ) ⊥ A e BA B A&B A&B A B if/then/else (A&B)⊥ A&B
pode ser visto como um processo que envia 1 bit de informação para , a saber: "continue como " ou "continue como ". Isso é semelhante ao estiver avaliando para enquanto estiver avaliando como , exceto que a escolha entre e agora é feita pelo ambiente.A B i f t r u e t h e n P e L s e Q P i f f um l s e t h e n P e L s e Q Q A BA&B A B if true then P else Q P if false then P else Q Q A B
O operador! Também possui uma interpretação teórica do processo: se é lido como um processo, então pode ser lido como executando infinitamente muitos processos em paralelo.! A ANeste ler o axiomas das lógicas tornam-se simples 'fios' lineares que encaminhar mensagens de processos para os processos . Essa interpretação dos axiomas já está nas redes de prova de Girard (3).A ⊥ AA⊢A A⊥ A
Essa interpretação teórica do processo foi influente e deu origem a muitos trabalhos de acompanhamento, como por exemplo (2) para tipos de sessão. No entanto, existem alguns casos extremos que o tornam um pouco estranho e, pelo que sei, não foi feito para funcionar perfeitamente para a lógica linear completa , mesmo em 2017.
1. S. Abramsky, Interpretações Computacionais de Lógica Linear .
2. P. Wadler, Proposições como sessões .
3. Wikipedia, Rede de prova .
fonte