From 900c9200573a1f8b61a675683a5bbc3a26094388 Mon Sep 17 00:00:00 2001 From: "Jip J. Dekker" Date: Tue, 27 Jul 2021 23:38:21 +1000 Subject: [PATCH] Small corrections --- chapters/1_introduction.tex | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/chapters/1_introduction.tex b/chapters/1_introduction.tex index 719d4fa..965a6bb 100644 --- a/chapters/1_introduction.tex +++ b/chapters/1_introduction.tex @@ -29,11 +29,11 @@ Two \solvers{} designed to solve the same problem class can perform very differe \Cmls{} have been designed to tackle these issues. They serve as a level of abstraction between the modeller and the \solver{}. +The typical process of a \cml{} is visualized in \cref{fig:intro-cml-flow}. Instead of providing a flat list of \variables{} and \constraints{}, a modeller creates a \cmodel{} using the more natural syntax of the \cml{}. -A \cmodel{} can generally describe a class of problems through the use of \prbpars{}, values assigned by external input. +A \cmodel{} can generally describe a class of problems through the use of \prbpars{}: values assigned by external input. Once given a complete \gls{assignment} of the \prbpars{}, the \cmodel{} forms an \instance{}. -Central to the process of a \cml{}, the \instance{} is transformed, through \gls{rewriting}, into a \gls{slv-mod}, an encoding of the problem that can be used by the \solver{}. -This process is visualized in \cref{fig:intro-cml-flow}. +The \gls{rewriting} process of a \cml{} transforms a \cmodel{} into a \gls{slv-mod}: the encoding of the problem for the \solver{}. \begin{figure} \centering @@ -42,16 +42,16 @@ This process is visualized in \cref{fig:intro-cml-flow}. \end{figure} Traditional \cmls{}, such as \glsxtrshort{ampl} \autocite{fourer-2003-ampl}, \gls{essence} \autocite{frisch-2007-essence}, and \glsxtrshort{opl} \autocite{van-hentenryck-1999-opl}, offer the modeller an expressive language that can be used to target a great variety of \solvers{}. -However, these language lack a certain level of flexibility: the modeller is unable to capture common concepts used throughout a \cmodel{}; and the \solver{} cannot influence their way in which the problem is encoded. +However, these language lack a certain level of flexibility: the modeller is unable to capture common concepts used throughout a \cmodel{}, and the \solver{} cannot influence their way in which the problem is encoded. -This is a stark different to \gls{clp} languages, such Sictus Prolog \autocite{carlsson-1997-sicstus}, which are said to be the precursors to \cmls{}. +This is a stark difference to \gls{clp} languages, such as Sictus Prolog \autocite{carlsson-1997-sicstus}, which are said to be the precursors to \cmls{}. In these languages, the modeller is encouraged to create high-level concepts and declare the way in which they are rewritten into \gls{native} \constraints{}. The downside of \gls{clp} languages is that, because of its search mechanism, the \solver{} is tightly integrated within the \gls{rewriting}. These languages thus lack the \solver{}-independence of \cmls{}. \minizinc{} \autocite{nethercote-2007-minizinc} is a functional \cml{} that operates on a level in between these two types of languages. Like a traditional \cml{}, it is a \solver{}-independent \cml{}. -And like a \gls{clp} language, modellers can declare common concepts and control the encoding into the \gls{slv-mod} through the use of function definitions. +Similarly, like a \gls{clp} language, modellers can declare common concepts and control the encoding into the \gls{slv-mod} through the use of function definitions. Fundamentally, in its \gls{rewriting} process \minizinc{} is a functional language. It continuously evaluates the calls in a \minizinc{} \instance{} until it reaches \gls{native} \constraints{}. Like other functional languages, \minizinc{} allows recursion; it can be used as a fully Turing complete programming language. @@ -112,7 +112,7 @@ And, apart from changing the implementation of \glsxtrshort{opl} or \gls{essence \gls{clp}, as used for example in the Sictus Prolog language \autocite{carlsson-1997-sicstus}, offers a very different mechanism to create a \cmodel{}. In these languages, the modeller is encouraged to create high-level concepts and declare the way in which they are rewritten into \gls{native} \constraints{}. -For example, the concepts of one task preceding another and non-overlapping of tasks could be defined in Prolog as: +For example, the concepts of one task preceding another and non-overlapping of tasks could be defined in Prolog as follows. \begin{minted}[ autogobble=true,