Pensar
Foi durante a pandemia que conheci a linguagem de programação #Prolog. Criada na década de 1970 por Alain Colmerauer, Philippe Roussel e Robert Kowalski entre Montreal, Marselha e Edimburgo, o Prolog é muito diferente do C, R ou Python. De facto, não é uma linguagem de procedimentos, mas sim de declarações. Em vez de se dizer ao computador que tarefas e cálculos deve efetuar, descrevem-se os factos e regras sobre uma determinada realidade ou problema. Depois, colocam-se questões, um pouco como acontece com os chats dos modelos “grandes” de linguagem natural, e o Prolog fornece respostas, raciocinando por dedução. Aliás, a principal aplicação do Prolog é exatamente o tratamento de linguagem recorrendo a gramáticas. Eu uso-o para estudar a estrutura de redes urbanas e de bairros como o Areeiro, em Lisboa.
Sendo uma linguagem de programação em #lógica, o Prolog recorre a mecanismos de inferência assentes no modus ponnens do silogismo hipotético. Assim, as regras são definidas com recurso a relações de implicação do tipo: se A e B, então C. Obviamente, neste caso ou A é falso, ou B é falso, ou C é verdadeiro. Disjunções com apenas uma proposição verdadeira designam-se por cláusulas estritas de Horn. É nelas que o Prolog assenta, bem como no poderoso mecanismo de resolução. Desta forma, o Prolog recorre a inteligência artificial estruturada e não a modelos estatísticos como acontece com os referidos modelos “grandes” de linguagem e com a aprendizagem automática (machine learning) em geral.
O Prolog é como o micro-ondas ou o #Linux: depois de se usar, não se quer outra coisa. E é fácil de aprender. Um bom local para começar é o livro Learn Prolog Now! de Patrick Blackburn, Johan Bos e Kristina Striegnitz que tem uma versão on-line aberta, se bem que também possa ser adquirido em papel. A versão on-line tem o atrativo de se poder correr os exemplos do livro na plataforma SWISH que é uma espécie de JupyterLab ou Google Colab da implementação SWI-Prolog, criada por Jan Wielemaker, o Linus Torvalds das comunidades Prolog.