Operações Lógicas
Existe uma equivalência entre operações lógicas e operações sobre conjuntos. Por exemplo, considere a seguinte declaração lógica:
“Está chovendo implica que há nuvens no céu.”
Não haveria chuva sem nuvens. Podemos pegar dois conjuntos de localizações, “o conjunto de locais onde está chovendo” e “o conjunto de locais onde há nuvens”, e mostrar que o primeiro conjunto está estritamente incluído no segundo conjunto.
Da mesma forma na ciência da computação, a inferência de tipos depende de operações lógicas entre tipos e um tipo pode ser considerado como o conjunto de todos os objetos que pertencem a esse tipo (se houver pelo menos um desses objetos, você pode dizer que o tipo é preenchido, caso contrário , é vazio. )
A inferência de tipos usa provas lógicas e visa encontrar tipos populados , pois os programas manipulam objetos dos quais queremos encontrar o tipo.
Por causa da equivalência acima, estarei ilustrando operações lógicas usando conjuntos no espírito de Boole . Cada operação em conjuntos será expressa usando um conector lógico e uma notação lógica.
Para a discussão, usarei dois intervalos sobre números inteiros A e B como conjuntos de entrada.
R: 0…10
B: 5…18
Complemento
Conector: não
O resultado contém todos os elementos que não estão em A .
¬A: …-1, 11…
União
Conector: ou
O resultado contém todos os elementos que estão em A ou B .
A ∨ B: 0…18
Interseção
Conector: e
O resultado contém apenas os elementos que estão em A e em B .
A ∧ B: 5…10
União Disjuntiva
Conector: senão (xor)
O resultado contém os elementos que estão apenas em A senão estão apenas em B .
A ⊕ B: 0…4, 11…18
Implicação
Conector: somente se (implica)
O resultado contém os elementos que estão em A somente se estiverem em B .
Isso é um pouco mais difícil de entender do que as operações anteriores. É fácil ver que o resultado contém a interseção dos dois conjuntos: seus elementos estão em A e em B , o que satisfaz a condição.
Mas e o resto de B ?
Você pode ver que os elementos de B fora da interseção não estão em A . Isso significa que eles satisfazem a condição? Depende de como você lê:
- O resultado contém os elementos que estão em A ( somente se estiverem em B ).
- O resultado contém os elementos (que estão em A somente se estiverem em B ).
A ⇒ B: …-1, 5…
Outro exemplo seria “Chove só se tiver nuvens”. Se existe um lugar onde chove mas não há nuvens então a condição não é satisfeita . A sentença não condiciona lugares onde não está chovendo, então podem estar nublados ou não, tudo bem.
Diferença
Conector: mas não
O resultado contém apenas os elementos que estão em A , mas não em B .
Curiosamente, não há leitura especial desta vez, mas a diferença é na verdade o complemento da implicação! Observe também que a ordem de A e B é importante.
A - B: 0…4





































![O que é uma lista vinculada, afinal? [Parte 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)