Gödel (programming language)


Gödel is a declarative, general-purpose programming language that adheres to the logic programming paradigm. It is a strongly typed language, the type system being based on many-sorted logic with parametric polymorphism. It is named after logician Kurt Gödel.

Features

Gödel has a module system, and it supports arbitrary precision integers, arbitrary precision rationals, and also floating-point numbers. It can solve constraints over finite domains of integers and also linear rational constraints. It supports processing of finite sets. It also has a flexible computation rule and a pruning operator which generalises the commit of the concurrent logic programming languages.
Gödel's meta-logical facilities provide support for meta-programs that do analysis, transformation, compilation, verification, and debugging, among other tasks.

Sample code

The following Gödel module is a specification of the greatest common divisor of two numbers. It is intended to demonstrate the declarative nature of Gödel, not to be particularly efficient.
The CommonDivisor predicate says that if i and j are not zero, then d is a common divisor of i and j if it lies between 1 and the smaller of i and j and divides both i and j exactly.
The Gcd predicate says that d is a greatest common divisor of i and j if it is a common divisor of i and j, and there is no e that is also a common divisor of i and j and is greater than d.
MODULE GCD.
IMPORT Integers.

PREDICATE Gcd : Integer * Integer * Integer.
Gcd <-
CommonDivisor &
~ SOME .

PREDICATE CommonDivisor : Integer * Integer * Integer.
CommonDivisor <-
IF
THEN
d = Max,Abs)
ELSE
1 =< d =< Min,Abs) &
i Mod d = 0 &
j Mod d = 0.