**Declarative** creates declarative software systems.
These systems are highly flexible, robust and efficient solutions for
almost any application, including business, engineering, design, art and
software development.

### What is declarative sofware?

Most software is written using the imperative programming paradigm. An imperative program is a sequence of instructions that the computer follows in order to achieve some desired result, e.g. calculate something or find something.

The declarative approach is to specify the result that you want to achieve, and let the computer figure out how to achieve that result. A declarative specification describes the 'what' instead of the 'how'.

A declarative specification is not a computer program in the traditional sense, but it can be interpreted by a computer. Instead of
writing a computer program by hand that meets the specification, a generic computer program reads the declarative specification and produces
the desired results, which are called reaslisations.

A declarative modelling system is a program that allows you to create models of the real world problems that you want to solve (declarative specifications), and give you models of the solutions (realisations).

At

**Declararive**, we write the software that solves the problems that you specify. And we'll help you specify your problems declaratively too.

### Why go Declarative?

**Faster and safer development**
A declarative specification can be revised much more quickly and more safely than a computer program, because there are no side effects and every part of the specification can be modfied independently without unpredicatable consequences.

Delarative specifications are verifiable and have well-defined semantics, which means that the correctness of solutions can be verified, and the problem specification is unambiguous.

These properties of declarative specifications allow us to create robust, flexible, highly maintainable software. Declarative specification allows us to realize a fast, iterative development process with short cycles so that we can quickly incorparate new requirements from our clients in our software systems. As software requirements change over time, the product can
be easily adapted to meet your business needs.

**Creativity and innovation**
Creating a declarative specification is much closer to the process of design and engineering than traditional programming. A declarative specification is essentially a set of requirements, formulated in such a way that it can be processed automatically.

Declarative specifications can and should be created by users and domain experts, rather than programmers. Declarative languages can be taylor-made specifically for a particular domain, making them easy to learn, while remaining generic and flexible. Declarative specifications can also be created intuitively using interactive modelling techniques.

A declarative specification can have degrees of freedom and multiple solutions, which can be explored interactively using a declarative modelling system. Declarative modelling is a creative and explorative process, where variations can be explored while requirements and semantics are maintained.

A declarative modelling system doesn't solve one problem, or does the same thing the same way over and over. The software system is both the tool used for specifying the problem, and the tool that produces the solution.
It allows users to solve a whole range of problems and produce a whole range of solutions.

The inherent flexibilty in declarative software systems allows business to innovate since is allows for finding new and novel solutions for old problems and solutions for new problems. This also gives you flexibily in how you use the software to match you business process. Declarative software puts you back in control, rather than letting inflexible computer programs dictate how to run your business.

### Is the declarative approach suitable for my business?

Declarative systems are highly generic.
One system can solve a wide range of problems.

In fact, it's not that hard
to write one algorithm to solve all problems; simply write a test to
verify wheter an object is a solution to your problem
(in any language you like), and
exhaustively try every possible object, i.e. exhausitve search.
But this is of course too computationally expensive for all but
the simplest problems. But for specific problem domains,
efficient solving algorithms can be designed.

Declarative techniques are often dismissed because they are thought too computationally expensive. But if declarative is done right, this is not the case. If the problem domain is properly bounded and the algorithms are carefully choosen, a well performing system can be created for any practical application. A variety of different solvers are available for different problem domains: logic, numerical, algebraic, geometric, toplogical, constructive, etc. These solvers are combined in such a way that the application domain can be solved efficiently.

Our approach is to first
analyse your business, i.e. exactly describe the problem domain and determine sufficient boundaries to include all realistic applications.
We desribe this formally, as a class of declarative specifications, and determine
a suitable combination of algorithms to find realisations of such
specifications. Finally, the system is benchmarked
and further optimized for common problems.

Another issue is interactivity. The complete specification for a real application can be quite large and complex. The realisations of these
specifications are also large, complex objects. When interacting with a modelling system, the specification is essentially changed. Instead
of discarding the previous realisations and rebuilding them from scratch, we
use incremental solving algorithms to propagate changes in the specification to the realizations, as effciently as possible.

Existing declarative systems, because they tend to be used mostly in academia, are often not very intuitive; often the systems are text based,
and users require training in formal logic languages and computer programming.

**Declarative** creates easy to use, interactive, graphical systems that
can be used by any user with the proper knowlegde of their own business.
But our systems are also highly customizable. Users may graudually learn to use the more powerful features of the system and become experts, for example by learning a domain-specific language that is embedded in the modelling system.