Back
Close

Functional Modelling System

IngmarDasseville
5,061 views

Syntax Overview

This document should serve as a quick overview of the statements which are possible in IDP4.

Directives

Directives are always of the form # directiveName number.

Supported directives are:

  • nbModels, determines the number of models which need to be printed
  • printFullStructure, determines whether the full ASP structure needs to be outputted to the model or not
  • printASP, determines whether the full ASP source needs to be printed or not
  • constrain, determines whether you want to see all the structures given the definitions or only the models
  • inline, determines whether the inliner does its work
  • pushNegs, determines whether negations are pushed

Scripts

It is possible to directly write external functions scripts for use in clingo. These are not conform the other directives. (See the example for more info about these)

Imports

Import statements are of the form: import "filename.fml".

A file containing only definitions is considered a library file and can be imported. Some useful symbols are predefined in the stdlib which is implicitly imported.

Declarations

It is possible to introduce a new symbol in a few ways:

  • a := expression., which defines the new symbol a to have the interpretation of the expressions.
  • a :: subset of expression., which introduces a to be a subset of the set determined by the expression.
  • a :: element of expression., same as the previous one but a will be a single element instead of the full set
  • a :: function to expression., which introduces a to be a unary function with codomain the set determined by the expression
  • a :: predicate., which introduces a to be a predicate (a unary function to booleans).
  • a :: proposition., introduces a to be a proposition
  • a\2 :: constructor., introduces the binary constructor function a
  • a\2 :: external function., introduces the binary external function a, this should only be used in conjunction with a script directive

Expressions

Expressions are based on the lambda calculus:

  • ! set predicate is used to say that the function predicate should hold for every member of set set.
  • ? set predicate same as ! but existential.
  • Arithmetic operators over integers + - / * are supported.
  • Comparison operators over integers < =< >= > = ~= are supported
  • Boolean operators & | ~ <=> => <= are supported
  • Integers and strings can be used 1 "Hello World"
  • let a := 1 ; b := 2 in a+b. is used to locally define a and b so this expressions evaluates to 3
  • {x,y || a <- {{1,2},{3,4}}, x <- a, x != 1, y := x + 1} the set consisting of the x and y's, such that a is an element of the set {{1,2},{3,4}}, x is an element of a, x is not equal to 1, and y is one larger than x.
  • if p then a else b represents is equal to a if boolean p is true, and b otherwise.

Patterns

  • variableName
  • constructor [arg1 arg2 ...]
  • 5, "a"
  • <5
  • >5
  • _
Create your playground on Tech.io
This playground was created on Tech.io, our hands-on, knowledge-sharing platform for developers.
Go to tech.io
codingame x discord
Join the CodinGame community on Discord to chat about puzzle contributions, challenges, streams, blog articles - all that good stuff!
JOIN US ON DISCORD
Online Participants