D6.1 Simple drill grammar library


Contract No.: FP7-ICT-247914
Project full title: MOLTO - Multilingual Online Translation
Deliverable: D6.1. Simple Drill Grammar Library
Security (distribution level): Public
Contractual date of delivery: M18
Actual date of delivery: September 2011
Type: Prototype
Status & version: Final (evolving document)
Author(s): J. Saludes, et al.
Task responsible: UPC
Other contributors:


Abstract

The present paper is the cover of deliverable D6.1 as of WP6. It gives installation instructions for the Mathematical Grammar Library and a short manual.

1. How to get it

The living end of the library is publicly available using subversion as:

     svn co svn://molto-project.eu/mgl

A stable version can be found at:

    svn co svn://molto-project.eu/tags/D6.1

2. Library structure

The mgl library consists on the following files and directories:

  • One directory per language
  • abstract directory: For the abstract modules of the library
  • resources directory: Containing the general resource modules, incomplete concrete modules and generic lexicon.
  • server: Code for the mathbar demo.
  • test: Testing facilities and data
  • transfer: Haskell transfer modules.

2.1 Logical structure

At the same time, the library can be organized in three layers of increasing complexity:

  • Ground layer: it contains basic and atomic elements. Modules Ground and Variables.
  • OpenMath layer: the bulk of the library resides here: There is a module for each targeted OpenMath Content Dictionary, namely: Arith1, Arith2, Calculus1, Complex1, PlanGeo1, Fns1, Integer1, Integer2, Interval1, Limit1, LinAlg1, LinAlg2, Logic1, MinMax1, Nums1, Relation1, Rounding1, Set1, SetName1, Transc1, VecCalc1 and Quant1
  • Operations layer: the top layer is for expressing simple mathematical drills by combining an imperative (Compute, Prove, Find, etc.) with the productions of the OpenMath layer. There is also possible to express a sequence of simple computations and to set pre-conditions.

3. Compiling the library

Inside the mgl directory:

    make

will compile the top (Operations) layer and produce Test.pgf. To compile only the OpenMath layer:

    make om

4. Demo

An online version of the mathbar demo is http://www.grammaticalframework.org/demos/minibar/mathbar.html.

5. Testing

The library compiles for the following EU languages: Bulgarian, Catalan, English, Finnish, French, German, Italian, Polish, Romanian, Spanish, Swedish.

Regression testing of the OpenMath productions is possible through a treebank containing about 140 productions from this layer. At the present moment it contains linearizations for English, German, Polish and Spanish. At the time of writing this report, the entries of these languages (except for Polish) had been corrected by fluent speakers of the respective language. To allow for discrepancy, earlier corrections are also stored in the treebank, tagged with author and revision number.

The structure of the treebank is described in the evaluating document.

To test the library, make sure you have an up-to-date OpenMath.pgf. You can recreate it by issuing:

     make om

and then, on the test directory:

     ./tbm table

That will make a table indexed by treebank entry and testing language (English, German an Spanish), showing the number of differences between the actual linearization and the corrected one.

Each time a new revision is committed to the repository, the output of this command is saved into test/table. Comparing different revisions of this file allows to measure the progress of the bug-fixing effort.

To review the current defects for language L:

     ./tbm review -lL

It will walk all the defects showing the differences, the stored corrected concretes, the abstract and the current linearization. For a list of available sub-commands press

h

.

6. Acknowledgments

Krasimir Angelov, Olga Caprotti, Ramona Enache, Thomas Hallgren, Alba Hierro, Inari Listenmma, Aarne Ranta, Ares Ribo, Adam Slaski, Shafqat Virk and Sebastian Xambó.

A1. Current differences

English

  • (46) there {is → exists} x in C such that y divides x
  • (84) is x equal to x{→ ?}
  • (87) {it is →} not {true that →} p
  • (115) the set {with → whose} elements{→ are}y and z

German

  • (0) der inverse hyperbolische Kosinus des Produkts über {Gamma → Gamma,} wobei x von der Differenz von x und {von →} y bis dem Arcuskosinus von z läuft
  • (5) der absolute Wert des Bruches {von →} x über z
  • (25) das kartesische Produkt von A und {von →} B
  • (26) die Summe über x{→ aufgerundet,}wobei x {über →} die Menge B durchläuft {aufgerundet →}
  • (28) die komplexe Zahl mit polaren Koordinaten dem Quadrat von z und dem Produkt über {z → z,} wobei z von x bis y läuft
  • (38) das Integral des Arcussinus {auf dem → über das} Intervall {aus → von} dem Kubus von Pi {nach → bis} minus Gamma
  • (46) es gibt x in C so dass{→ x}y {durch x dividiert → teilt}
  • (53) für alle z {, → gilt} p
  • (54) für alle z in A {, → gilt} p
  • (55) der größte gemeinsame Teiler von x und {von →} y
  • (61) der Durchschnitt von A und {von →} B
  • (62) die {Funktion aus → Funktion, welche} y {nach der → auf die} Differenz von y und {von →} z{→ abbildet}
  • (63) das kleinste gemeinsame Vielfache von y und {von →} z
  • (65) die {Links-Inverse → linksinverse} Funktion der {Rechts-Inversen → rechtinversen} Funktion des hyperbolischen Kosinus
  • (69) die Menge {Werte → von Werten} der Form der Fakultät von {x → x,} so dass y in x in {A → A,} so dass r ist
  • (74) das maximale Element der Differenz von A und {von →} B
  • (75) der Mittelwert von z und {von →} y
  • (76) der Median von x , {von →} y und {von →} z
  • (78) die Differenz der ganzzahligen Division von x und {von →} z und der Summe über {Pi → Pi,} wobei x {über →} die Menge A durchläuft
  • (85) der Modus von x , {von →} y und {von →} z
  • (86) das siebte Moment von x , {von →} y und {von →} z {an der → über die} Differenz von Pi und {von →} x
  • (87) es ist nicht {wahr → wahr,} daß p
  • (96) die Summe von x und {von →} z
  • (97) y hoch die Summe über {z → z,} wobei z von x bis y läuft
  • (99) der Kubus des {Produkts über z → Produktes von z,} wobei z von x bis dem Kosekans von x läuft
  • (100) das Produkt über der Quadratwurzel von {z → z,} wobei z {über die Menge →} das linksseitige {geschlossene → abgeschlossene} Intervall von Gamma bis y durchläuft
  • (101) das{→ stetige}Intervall von Pi bis x ist eine echte Teilmenge des Definitionsbereiches des {Kosekans → Kosecans}
  • (102) die ganzzahlige Division von x und der Summe über {z → z,} wobei z von dem Argument von z bis dem Rest von x dividiert durch y läuft
  • (105) der Rest der ganzzahligen Division von Gamma und {von →} z dividiert durch Pi
  • (107) die {Rechts-Inverse → rechtinverse} Funktion der Ableitung des Tangens
  • (112) die standarde Abweichung von y und {von →} z
  • (116) der Quotient von x und {von →} Pi ist ein Element des {geschlossenen → abgeschlossenen} Intervalls von x bis z
  • (118) die Differenz der Differenz von A und {von →} B und des offenen Intervalls von z bis y
  • (127) die Größe des linksseitigen {geschlossenen → abgeschlossenen} Intervalls von y bis x
  • (130) die Summe über der fünften Wurzel von {x → x,} wobei x {über die Menge →} das ganzzahlige Intervall von z bis Pi durchläuft
  • (133) das Produkt von x und {von →} y
  • (136) die Summe über {y → y,} wobei y von der Kubikwurzel von x bis der inversen Zahl von Pi {läuft → läuft,} abgeschnitten
  • (138) die Vereinigung von A und {von →} B
  • (139) die Varianz von z und {von →} x
  • (143) das vektorielle Produkt des {Vektoren → Vektors} mit einzigen Komponente Gamma und {von →} v

Spanish

  • (5) el valor absoluto de la fracción {de →} x entre z
  • (25) el producto cartesiano de A y {de →} B
  • (26) el redondeo hacia arriba del sumatorio de x cuando x varía en {los elementos de →} B
  • (27) el número complejo con coordenadas cartesianas la fracción {de →} z entre y y el truncamiento de e
  • (37) la integral de la arcosecante sobre el intervalo abierto por la izquierda {de → desde} z {a → hasta} y
  • (38) la integral del arcoseno {sobre → desde} el {intervalo del →} cubo de pi {al → hasta el} opuesto de Gama
  • (42) el cociente {de → entre} x y {de →} la raíz cuadrada de y
  • (46) {hay → existe} x en C tal que y divide a x
  • (55) el máximo común divisor de x{→ e}y {de y →}
  • (61) la intersección de A y {de →} B
  • (62) la función {de → desde} y {a → hasta} la diferencia entre y {y → e} z
  • (63) el mínimo común múltiplo de y y {de →} z
  • (70) la matriz con una fila {con → de} componentes x e y y una fila {con → de} componentes y y x
  • (71) la matriz con una fila {con → de componente} única {componente →} x
  • (72) una fila {con → de} componentes x e y
  • (73) una fila {con → de componente} única {componente →} el elemento máximo de A
  • (74) el elemento máximo de la diferencia de A y {de →} B
  • (75) la media de z{→ e}y {de y →}
  • (76) la mediana de x , {de →} y y {de →} z
  • (77) el elemento mínimo del intervalo cerrado {de → desde} x {a → hasta} y
  • (78) la diferencia entre la división entera de x {y de → entre} z y el sumatorio de pi cuando x varía en {los elementos de →} A
  • (82) el intervalo abierto {de → desde} x {a → hasta} y no es un subconjunto propio de A
  • (83) el intervalo abierto por la izquierda {de → desde} y {a → hasta} x no es un subconjunto del intervalo abierto {de → desde} x {a → hasta} y
  • (85) la moda de x , {de →} y y {de →} z
  • (86) el séptimo momento de x , {de →} y y {de →} z en la diferencia entre pi y x
  • (96) la suma de x y {de →} z
  • (100) el producto de la raíz cuadrada de z cuando z varía en {los elementos del → el} intervalo cerrado por la izquierda {de → desde} Gama {a → hasta} y
  • (101) el intervalo {de → continuo desde} pi {a → hasta} x es un subconjunto propio del dominio de la cosecante
  • (102) la división entera de x {y del → entre el} sumatorio de z cuando z varía desde el argumento de z hasta el resto de x dividido por y
  • (105) el resto de la división entera de Gama {y de → entre} z dividida por pi
  • (112) la desviación estándar de y y {de →} z
  • (115) el conjunto {compuesto por los → de} elementos y y z
  • (116) el cociente {de → entre} x y {de →} pi es un elemento del intervalo cerrado {de → desde} x {a → hasta} z
  • (118) la diferencia {de → entre} la diferencia {de → entre} A y {de →} B y {del → el} intervalo abierto {de → desde} z {a → hasta} y
  • (127) el cardinal del intervalo cerrado por la izquierda {de → desde} y {a → hasta} x
  • (128) el intervalo abierto {de → desde} y {a → hasta} x es un subconjunto del intervalo abierto por la izquierda {de → desde} x {a → hasta} y
  • (129) z en {el → un} conjunto {con único elemento → de componente} x tal que r
  • (130) el sumatorio de la raíz quinta de x cuando x varía en {los elementos del → el} intervalo entero {de → desde} z {a → hasta} pi
  • (133) el producto de x{→ e}y {de y →}
  • (138) la unión de A y {de →} B
  • (139) la varianza de z y {de →} x
  • (140) el vector {con → de} componentes y y x
  • (141) el vector {con → de componente} única {componente →} el cardinal de A
  • (143) el producto vectorial del vector {con → de componente} única {componente →} Gama y {de →} v

A2. RGL tickets for the MGL

#2: ! with imperative (completed)

Imperative mode forces "!" at the end?

Not what we want for exercises.


Test> l DoComputeF DefineV (Var2Fun f)

define f !


#21: x {hoch,gleigh} y (completed)

We want to express:

"x gleich y"

or

"x hoch y"


#38: Ger mkAdA (wont-fix)

mkAdA : Str → AdA


It doesn't exist

#39: Spa from_Prep must be "desde" (wont-fix)

#40: gilt/holds -- gilt nicht/does not hold (open)

Example

for all z , r , it isn't true that r and if p , then , it isn't true that r

für alle z, r , ist es nicht wahr daß r und wenn p dann ist es nicht wahr daß r


I think it would be better to write "gilt", "gilt nicht" (english "holds", "it does not hold") instead of "es ist nicht wahr", "es ist wahr", "it is true", "it isn't true":


for all z , r , r does not hold and if p , then , r does not hold

für alle z, r , r gilt nicht und wenn p dann r gilt nicht


#54: there is/exists (46) (wont-fix)

Abstract

exist (BaseVarNum x) (Var2Set C) (mkProp (divides (Var2Num y) (Var2Num x)))

Difference

there {is → exists} x in C such that y divides x

#56: set of values of the form ... (69) (completed)

Abstract

map y (factorial (Var2Num x)) (suchthat (Var2Set A) x r)

Difference

the set of values of the form {the →} factorial of x {such that → for} y {is → ranging} in{→ the set of elements}x {in → of} A such that r

#62: set whose elements (115) (wont-fix)

Abstract

set (BaseValNum (Var2Num y) (Var2Num z))

Difference

the set {of components → whose elements are} y and z

#67: hay → existe , divida (wont-fix)

l exist (BaseVarNum x) (Var2Set C) (mkProp (divides (Var2Num y) (Var2Num x)))

hay x en C tal que y divida a x


hay→existe

divida → divide

#74: part_Prep before vowel in Cat (assigned)

el conjunt amb element únic el cub de pi


DefNPwithbaseElem : CN → MathObj → MathObj =

\cn,o → DefSgNP (mkCN cn (prepAdv with_Prep (mkNP (mkCN (mkCN (mkA "únic") element_CN) o)))) ;


Problema:

No puc escriure "d'element únic" perquè si canvio el with_Prep per un possess_Prep o un part_Prep (of) , omet la preposició! Perquè?


#78: de a y b, no de a y de b (25) (wont-fix)

Abstract

cartesian_product (BaseValSet (Var2Set A) (Var2Set B))

Difference

el producto cartesiano de A y {de →} B

#88: Imaginärteil (58) (completed)

Abstract

imaginary (Var2Num y)

Difference

der {imaginäre Teil → Imaginärteil} von y

#90: kleinstes gemeinsames Vielfaches (63) (wont-fix)

Abstract

lcm (BaseValNum (Var2Num y) (Var2Num z))

Difference

das {am wenigstene gemeine → kleinstes gemeinsames} Vielfaches von y und z

#96: dem reele Teil (109) (completed)

Abstract

root2 (real (Var2Num x))

Difference

die quadratische Wurzel von dem {reellen → reele} Teil von x

#99: and_Conj "y" in spanish does not include the case "e" (wont-fix)

Problem: and_Conj in spanish does not include the case "e", for example for "x e y". It should be

and_Conj = {s1 = [] ; s2 = etConj.s ; n = Pl} ;

For the moment, we have created a new

myAnd_Conj=and_Conj; 
at MathI.gf and redefined it as
and_Conj = {s1 = [] ; s2 = etConj.s ; n = Pl} ;
at MathSpa.gf

This should be fixed at StructuralSpa.gf