You are on page 1of 5

Programao lgica

Programao lgica um paradigma de programao que faz uso da lgica


matemtica. John McCarthy [1958] foi o primeiro a publicar uma proposta de
uso da lgica matemtica para programao.
A primeira linguagem de programao lgica foi a Planner, a qual permitia a
invocao orientada a padres de planos procedimentais de asseres e de
objetivos. Com a necessidade de adaptao aos sistemas de memria muito
limitada, que eram disponveis quando ela foi desenvolvida. A linguagem
Planner usava estruturas de controle de backtracking, de tal forma que apenas
um nico caminho computacional tinha que ser armazenado por vez. Em
seguida, o Prolog foi desenvolvido como uma simplificao do Planner que
permitia a invocao orientada a padres apenas a partir de objetivos (tambm
baseado em backtracking).
1

A partir do Planner, foram desenvolvidas as linguagens de programao QA-4,
Popler, Conniver, e QLISP. As linguagens de programao Mercury, Visual
Prolog, Oz e Frill, foram desenvolvidas a partir do Prolog. Atualmente existem
linguagens de programao lgica concorrente (no baseadas
em backtracking) derivadas do Planner (por exemplo, a Ether) e derivadas do
Prolog (ver Shapiro 1989 para um apanhado geral).
Histria
A programao lgica uma idia que tem sido investigada no contexto da
inteligncia artificial pelo menos desde o momento em que John McCarthy
[1958] props: "programas para manipular com sentenas instrumentais
comuns apropriadas linguagem formal (muito provavelmente uma parte do
clculo de predicado)". O programa bsico formar concluses imediatas a
partir de uma lista de premissas. Essas concluses sero tanto sentenas
declarativas quanto imperativas. Quando uma sentena imperativa deduzida,
o programa toma uma ao correspondente.

A lgica de programao tem como objetivo realizar funes ou esquemas
lgicos por meio de parmetros e metas.

Base na lgica matemtica
O sentido da programao lgica trazer o estilo da lgica matemtica
programao de computadores. Matemticos e filsofos encontram na lgica
uma ferramenta eficaz para desenvolvimento de teorias. Vrios problemas so
naturalmente expressos como teorias. Dizer que um problema precisa de
soluo frequentemente equivale a perguntar se uma nova hiptese
consistente com uma teoria existente ou se conseqncia dela. A lgica
proporciona uma maneira de demonstrar se uma questo verdadeira ou falsa.

O processo de construir uma demonstrao bem conhecido, portanto a lgica
um meio confivel de responder perguntas. Sistemas de programao lgica
automatizam este processo. A inteligncia artificial teve uma influncia
importante no desenvolvimento da programao lgica.
Prolog
Ver artigo principal: Prolog
A linguagem de programao Prolog foi explicitamente apresentada como
baseada na lgica matemtica. A base dessa alegao era que um programa
Prolog podia literalmente ser lido como um conjunto de frmulas em um
fragmento da lgica de primeira ordem, herdando o modelo de teoria e
demonstrao da lgica de primeira ordem.

Prolog foi desenvolvida em 1972 por Alain Colmerauer. Ela veio de uma
colaborao entre Colmerauer em Marselha e Robert Kowalski em Edinburgo.
Colmerauer estava trabalhando na compreenso da linguagem natural, usando
lgica para representar semnticas e usando resoluo para questionamento-
resposta. Durante o vero de 1971, Colmerauer e Kowalski descobriram que a
forma clausal da lgica poderia ser usada para representar gramticas formais
e que demonstraes do teorema da resoluo poderia ser usado para anlise
gramatical. Eles observaram que algumas demonstraes de teoremas, como
o da hiper-resoluo, comportavam-se como analisadores ascendentes e
outros, como resoluo-SL (1971), comportavam-se como analisadores
descendentes.

Durante o seguinte vero de 1972, Kowalski, novamente trabalhando com
Colmerauer, observou que resoluo-SL trata clusulas universalmente
quantificadas na forma declarativa de implicaes.
B
1
e e B
n
implica H

Como procedimentos de objetivo-reduo para mostrar/resolver H, mostrar/resolver B1 e e
Bn.
Essa interpretao dupla declarativa/procedimental depois foi formalizada na notao do
Prolog
H :- B
1
, , B
n
.
que pode ser lida (e usada) tanto declarativamente como procedimentalmente.
Tornou-se tambm claro que tais clusulas poderiam ser restringidas para
definir clusulas ouclusulas de Horn, em que H, B
1
, , B
n
so todos os
predicados atmicos, e que resoluo-SL poderia ser restrita (e gerada) para
LUSH ou resoluo-SLD.
Colmerauer, com Philippe Roussel, usou essa interpretao dupla de clusulas
assim como a base do Prolog, a qual foi implementada no vero e outono de
1972. O primeiro programa na linguagem, tambm escrito em 1972 e
implementado em Marseille, foi um sistema francs de pergunta-resposta. A
interpretao procedimental de Kowalski e LUSH foi depois descrita em um
memorando em 1973, publicado em 1974.
A relao prxima entre interpretao declarativa e processual resulta numa
caracterstica tpica das linguagens de programao lgica, embora a relao
se torne mais complexa quando h negao, disjuno e outros quantificadores
so permitidos em programas.

Negao por falha
Micro-Planner teve uma construo, chamada "thnot", que quando aplicada a
uma expresso retorna o valor verdadeiro se (e somente se) a avaliao da
expresso falha. Um operador equivalente normalmente construdo em
implementaes do Prolog moderno e tem sido chamado "negao por falha".
Ele normalmente escrito como not(p), onde p um tomo cujas variveis
foram normalmente instanciadas no momento que not(p) invocado. Uma
sintaxe mais complexa (mas padro) \+ p . Literais de negao por falha
podem ocorrer como condies not(B
i
) no corpo das clusulas do programa.
Ainda que incompleta, a regra de negao como falha uma slida regra de
inferncia (sob certas restries) respeitando a concluso de um programa.
Concluso de um programa lgico foi inicialmente definida por Keith Clark
basicamente assemelhava-se a considerar o conjunto de todas as clusulas do
programa, com o mesmo predicado, do lado esquerdo.
H :- Corpo<sub>1</sub>

H :- Corpo<sub>k</sub>
Como uma nica frmula equivalente
H [[sse]] (Corpo<sub>1</sub> ou ou Corpo<sub>k</sub>)

Escrever o completamento tambm requer o uso explcito de predicado de
igualdade e a incluso de um conjunto de axiomas apropriados por igualdade.
A noo de concluso estreitamente relacionada tcnica
de circunscrio de McCarty para desenvolver um raciocnio no monotnico, e
a suposio de um mundo fechado.
Como uma alternativa para semnticas de completamento, negao por falha
tambm pode ser interpretada epistemologicamente, assim como na semntica
de modelo estvel do conjunto de respostas. Nesta interpretao, not(B
i
)
significa literalmente que B
i
no conhecido ou no acreditado. A
interpretao epistmica tem a vantagem que pode ser combinada muito
simplesmente com a negao clssica, assim como na "lgica de programao
estendida", para formalizar frases como "o contrrio no pode ser mostrado",
onde "contrario" est a negao clssica e "que no pode ser mostrado" a
interpretao epistmica da negao por falha.

Implementaes
A primeira implementao do Prolog foi a Marseille Prolog, desenvolvida em
1972. O uso do Prolog como uma linguagem de programao prtica teve seu
pice com o desenvolvimento de um compilador por David Warren em
Edinburgo, em 1977. Alguns experimentos demonstraram que o Edinburgh
Prolog podia competir com a velocidade de processamento de outras
linguagens de programao simblica tais como Lisp. O Edinburgh Prolog
tornou-se o padro de facto e influenciou a definio de Prolog padro ISO.

Limitaes do uso da lgica matemtica para a programao
John McCarthy props que a lgica matemtica fosse usada como o
fundamento para a epistemologia de sistemas de computadores. Sob a
liderana de Marvin Minsky e Seymour Papert, uma abordagem diferente
baseada em procedimentos processuais foi desenvolvida no MIT. Quando o
Planner foi desenvolvido, levantou-se o a questo sobre o relacionamento entre
as duas abordagens.

Robert Kowalski desenvolveu a tese que "computao pode concebida
deduo" teve boa aceitao ao citar o slogan "a computao uma deduo
controlada," que ele atribuiu a Pat Hayes em seu artigo de 1988 no incio da
histria do Prolog. Ao contrrio de Kowalski e Hayes, Carl Hewitt desenvolveu
a tese de que a deduo lgica era incapaz de executar computao
concorrente em sistemas abertos. A resposta questo sobre a relao entre
as abordagens lgica e procedimental que a abordagem procedimental tem
uma semntica matemtica diferente (ver semntica denotacional) da
semntica da lgica matemtica.
Programao lgica linear
Basear a programao lgica na lgica linear resultou no projeto de linguagens
de programao lgica que so consideravelmente mais custosas do que
aquelas baseadas na lgica clssica. Programas com clusulas de Horn
(Prolog) podem apenas representar uma mudana de estado pela mudana em
argumentos para predicados. Na programao lgica linear, pode-se usar a
lgica linear como ambiente para dar suporte mudana de estado. Alguns
projetos iniciais das linguagens de programao lgica baseadas na lgica
linear, incluem LO [Andreoli & Pareschi, 1991], Lolli [Hodas & Miller, 1994], ACL
[Kobayashi & Yonezawa, 1994], e Forum [Miller, 1996].O Frum proporciona a
interpretao direcionada a objetivos de toda a lgica linear.