How is a new translation domain defined?

Here is a concrete example of how it can go on. Let's say you want to build a translator for arithmetic propositions. Then you build first of all an abstract syntax, which defines basic concepts such as the set of natural numbers, the properties "even" and "odd", and the relation "greater than"; properties and relations are functions from expressions to propositions. This is how the abstract syntax looks like in GF:



Nat : Set
Even : Exp -> Prop
Odd : Exp -> Prop
Gt : Exp -> Exp -> Prop
Sum : Exp -> Exp



The first concrete syntax is maybe English. You define it by giving examples of each of the new concepts, providing information similar to the following (in a text file, via a GUI, or by a web form with slots for each concept):



Nat = "number"
Even x = "x is even"
Odd x = "x is odd"
Gt x y = "x is greater than y"
Sum x = "the sum of x"


A German concrete syntax is given by a second set of examples:



Nat = "Zahl"
Even x = "x ist gerade"
Odd x = "x ist ungerade"
Gt x y = "x ist größer als y"
Sum x = "die Summe von x"



By using the English and German resource grammars, each example is generalized to the set of rules that is needed for using these concepts in all contexts and combinations. For instance, the resulting system enables the translation of every even number that is greater than 0 is the sum of two odd numbers as jede gerade Zahl, die größer als 0 ist, ist die Summe von zwei ungeraden Zahlen.