[Abstract syntax] Gr ([MModule (CMCompl, MTInterface (Ident "SyntaxRomance"), MBody (Ext ([IAll (Ident "TypesRomance")]), OpenIn ([OName (Ident "Prelude"); OQual (QOCompl, Ident "CO", Ident "Coordination")]), [DefFlag ([FlagDefC (Ident "coding", Ident "utf8")]); DefOper ([DFull ([IdentName (Ident "CommNoun")], ESort (Sort_Type), ERecord ([LDDecl ([Ident "s"], ETType (EIdent (Ident "Number"), ESort (Sort_Str))); LDDecl ([Ident "g"], EIdent (Ident "Gender"))])); DDef ([IdentName (Ident "CommNounPhrase")], EIdent (Ident "CommNoun")); DFull ([IdentName (Ident "noun2CommNounPhrase")], EProd (DExp (EIdent (Ident "CommNounPhrase")), EIdent (Ident "CommNoun")), EAbstr ([BIdent (Ident "x")], EIdent (Ident "x"))); DFull ([IdentName (Ident "commonNounComp")], EProd (DExp (EIdent (Ident "CommNoun")), EProd (DExp (ESort (Sort_Str)), EIdent (Ident "CommNoun"))), EAbstr ([BIdent (Ident "numero"); BIdent (Ident "detelephone")], ERecord ([LDDef ([Ident "s"], ECTable ([BIdent (Ident "n")], EConcat (ESelect (EProj (EIdent (Ident "numero"), LIdent (Ident "s")), EIdent (Ident "n")), EIdent (Ident "detelephone")))); LDDef ([Ident "g"], EProj (EIdent (Ident "numero"), LIdent (Ident "g")))]))); DFull ([IdentName (Ident "ProperName")], ESort (Sort_Type), ERecord ([LDDecl ([Ident "s"], ESort (Sort_Str)); LDDecl ([Ident "g"], EIdent (Ident "Gender"))])); DFull ([IdentName (Ident "NounPhrase")], ESort (Sort_Type), EIdent (Ident "Pronoun")); DDeclC ([IdentName (Ident "nameNounPhrase")], EProd (DExp (EIdent (Ident "ProperName")), EIdent (Ident "NounPhrase"))); DFull ([IdentName (Ident "mkProperName")], EProd (DExp (ESort (Sort_Str)), EProd (DExp (EIdent (Ident "Gender")), EIdent (Ident "ProperName"))), EAbstr ([BIdent (Ident "jean"); BIdent (Ident "m")], ERecord ([LDDef ([Ident "s"], EIdent (Ident "jean")); LDDef ([Ident "g"], EIdent (Ident "m"))]))); DFull ([IdentName (Ident "mkNameNounPhrase")], EProd (DExp (ESort (Sort_Str)), EProd (DExp (EIdent (Ident "Gender")), EIdent (Ident "NounPhrase"))), EAbstr ([BIdent (Ident "jean"); BIdent (Ident "m")], EApp (EIdent (Ident "nameNounPhrase"), EApp (EApp (EIdent (Ident "mkProperName"), EIdent (Ident "jean")), EIdent (Ident "m"))))); DDeclC ([IdentName (Ident "nounPhraseOn")], EIdent (Ident "NounPhrase")); DFull ([IdentName (Ident "normalNounPhrase")], EProd (DExp (ETType (EIdent (Ident "CaseA"), ESort (Sort_Str))), EProd (DExp (EIdent (Ident "Gender")), EProd (DExp (EIdent (Ident "Number")), EIdent (Ident "NounPhrase")))), EAbstr ([BIdent (Ident "cs"); BIdent (Ident "g"); BIdent (Ident "n")], ERecord ([LDDef ([Ident "s"], ECTable ([BIdent (Ident "p")], ESelect (EIdent (Ident "cs"), EApp (EIdent (Ident "pform2case"), EIdent (Ident "p"))))); LDDef ([Ident "g"], EApp (EIdent (Ident "PGen"), EIdent (Ident "g"))); LDDef ([Ident "n"], EIdent (Ident "n")); LDDef ([Ident "p"], EIdent (Ident "P3")); LDDef ([Ident "c"], EIdent (Ident "Clit0"))]))); DFull ([IdentName (Ident "pronNounPhrase")], EProd (DExp (EIdent (Ident "Pronoun")), EIdent (Ident "NounPhrase")), EAbstr ([BIdent (Ident "pro")], EIdent (Ident "pro"))); DFull ([IdentName (Ident "Numeral")], ESort (Sort_Type), ERecord ([LDDecl ([Ident "s"], ETType (EIdent (Ident "Gender"), ESort (Sort_Str))); LDDecl ([Ident "n"], EIdent (Ident "Number")); LDDecl ([Ident "isNo"], EIdent (Ident "Bool"))])); DFull ([IdentName (Ident "pronWithNum")], EProd (DExp (EIdent (Ident "Pronoun")), EProd (DExp (EIdent (Ident "Numeral")), EIdent (Ident "Pronoun"))), EAbstr ([BIdent (Ident "nous"); BIdent (Ident "deux")], ERecord ([LDDef ([Ident "s"], ECTable ([BIdent (Ident "c")], EConcat (ESelect (EProj (EIdent (Ident "nous"), LIdent (Ident "s")), EIdent (Ident "c")), ESelect (EProj (EIdent (Ident "deux"), LIdent (Ident "s")), EApp (EIdent (Ident "pgen2gen"), EProj (EIdent (Ident "nous"), LIdent (Ident "g"))))))); LDDef ([Ident "g"], EProj (EIdent (Ident "nous"), LIdent (Ident "g"))); LDDef ([Ident "n"], EProj (EIdent (Ident "nous"), LIdent (Ident "n"))); LDDef ([Ident "p"], EProj (EIdent (Ident "nous"), LIdent (Ident "p"))); LDDef ([Ident "c"], EProj (EIdent (Ident "nous"), LIdent (Ident "c")))]))); DFull ([IdentName (Ident "noNum")], EIdent (Ident "Numeral"), ERecord ([LDDef ([Ident "s"], ECTable ([BWild], EEmpty)); LDDef ([Ident "n"], EIdent (Ident "Pl")); LDDef ([Ident "isNo"], EIdent (Ident "True"))])); DDeclC ([IdentName (Ident "existNounPhrase")], EProd (DExp (EIdent (Ident "NounPhrase")), EIdent (Ident "Clause"))); DFull ([IdentName (Ident "addSymbNounPhrase")], EProd (DExp (EIdent (Ident "NounPhrase")), EProd (DExp (ESort (Sort_Str)), EIdent (Ident "NounPhrase"))), EAbstr ([BIdent (Ident "np"); BIdent (Ident "x")], ERecord ([LDDef ([Ident "s"], ECTable ([BIdent (Ident "c")], EConcat (ESelect (EProj (EIdent (Ident "np"), LIdent (Ident "s")), EIdent (Ident "c")), EIdent (Ident "x")))); LDDef ([Ident "g"], EProj (EIdent (Ident "np"), LIdent (Ident "g"))); LDDef ([Ident "n"], EProj (EIdent (Ident "np"), LIdent (Ident "n"))); LDDef ([Ident "p"], EProj (EIdent (Ident "np"), LIdent (Ident "p"))); LDDef ([Ident "c"], EProj (EIdent (Ident "np"), LIdent (Ident "c")))]))); DFull ([IdentName (Ident "Determiner")], ESort (Sort_Type), ERecord ([LDDecl ([Ident "s"], ETType (EIdent (Ident "Gender"), ESort (Sort_Str))); LDDecl ([Ident "n"], EIdent (Ident "Number"))])); DFull ([IdentName (Ident "DeterminerNum")], ESort (Sort_Type), ERecord ([LDDecl ([Ident "s"], ETType (EIdent (Ident "Gender"), ESort (Sort_Str)))])); DFull ([IdentName (Ident "detNounPhrase")], EProd (DExp (EIdent (Ident "Determiner")), EProd (DExp (EIdent (Ident "CommNoun")), EIdent (Ident "NounPhrase"))), EAbstr ([BIdent (Ident "tout"); BIdent (Ident "homme")], EApp (EApp (EApp (EIdent (Ident "normalNounPhrase"), ECTable ([BIdent (Ident "c")], EConcat (EApp (EIdent (Ident "prepCase"), EIdent (Ident "c")), EConcat (ESelect (EProj (EIdent (Ident "tout"), LIdent (Ident "s")), EProj (EIdent (Ident "homme"), LIdent (Ident "g"))), ESelect (EProj (EIdent (Ident "homme"), LIdent (Ident "s")), EProj (EIdent (Ident "tout"), LIdent (Ident "n"))))))), EProj (EIdent (Ident "homme"), LIdent (Ident "g"))), EProj (EIdent (Ident "tout"), LIdent (Ident "n"))))); DFull ([IdentName (Ident "numDetNounPhrase")], EProd (DExp (EIdent (Ident "DeterminerNum")), EProd (DExp (EIdent (Ident "Numeral")), EProd (DExp (EIdent (Ident "CommNounPhrase")), EIdent (Ident "NounPhrase")))), EAbstr ([BIdent (Ident "tous"); BIdent (Ident "six"); BIdent (Ident "homme")], EApp (EApp (EApp (EIdent (Ident "normalNounPhrase"), ECTable ([BIdent (Ident "c")], EConcat (EApp (EIdent (Ident "prepCase"), EIdent (Ident "c")), EConcat (ESelect (EProj (EIdent (Ident "tous"), LIdent (Ident "s")), EProj (EIdent (Ident "homme"), LIdent (Ident "g"))), EConcat (ESelect (EProj (EIdent (Ident "six"), LIdent (Ident "s")), EProj (EIdent (Ident "homme"), LIdent (Ident "g"))), ESelect (EProj (EIdent (Ident "homme"), LIdent (Ident "s")), EProj (EIdent (Ident "six"), LIdent (Ident "n")))))))), EProj (EIdent (Ident "homme"), LIdent (Ident "g"))), EProj (EIdent (Ident "six"), LIdent (Ident "n"))))); DFull ([IdentName (Ident "justNumDetNounPhrase")], EProd (DExp (EIdent (Ident "DeterminerNum")), EProd (DExp (EIdent (Ident "Numeral")), EIdent (Ident "NounPhrase"))), EAbstr ([BIdent (Ident "tous"); BIdent (Ident "six")], EApp (EApp (EApp (EIdent (Ident "normalNounPhrase"), ECTable ([BIdent (Ident "c")], EConcat (EApp (EIdent (Ident "prepCase"), EIdent (Ident "c")), EConcat (ESelect (EProj (EIdent (Ident "tous"), LIdent (Ident "s")), EIdent (Ident "Masc")), ESelect (EProj (EIdent (Ident "six"), LIdent (Ident "s")), EIdent (Ident "Masc")))))), EIdent (Ident "Masc")), EProj (EIdent (Ident "six"), LIdent (Ident "n"))))); DFull ([IdentName (Ident "mkDeterminer")], EProd (DExp (EIdent (Ident "Number")), EProd (DExp (ESort (Sort_Str)), EProd (DExp (ESort (Sort_Str)), EIdent (Ident "Determiner")))), EAbstr ([BIdent (Ident "n"); BIdent (Ident "tous"); BIdent (Ident "toutes")], ERecord ([LDDef ([Ident "s"], EApp (EApp (EIdent (Ident "genForms"), EIdent (Ident "tous")), EIdent (Ident "toutes"))); LDDef ([Ident "n"], EIdent (Ident "n"))]))); DFull ([IdentName (Ident "mkDeterminer1")], EProd (DExp (EIdent (Ident "Number")), EProd (DExp (ESort (Sort_Str)), EIdent (Ident "Determiner"))), EAbstr ([BIdent (Ident "n"); BIdent (Ident "chaque")], EApp (EApp (EApp (EIdent (Ident "mkDeterminer"), EIdent (Ident "n")), EIdent (Ident "chaque")), EIdent (Ident "chaque")))); DFull ([IdentName (Ident "mkDeterminerNum")], EProd (DExp (ESort (Sort_Str)), EProd (DExp (ESort (Sort_Str)), EIdent (Ident "DeterminerNum"))), EAbstr ([BIdent (Ident "tous"); BIdent (Ident "toutes")], ERecord ([LDDef ([Ident "s"], ECTable ([BIdent (Ident "g")], ESelect (EApp (EApp (EIdent (Ident "genForms"), EIdent (Ident "tous")), EIdent (Ident "toutes")), EIdent (Ident "g"))))]))); DFull ([IdentName (Ident "indefNounPhrase")], EProd (DExp (EIdent (Ident "Number")), EProd (DExp (EIdent (Ident "CommNounPhrase")), EIdent (Ident "NounPhrase"))), EAbstr ([BIdent (Ident "n"); BIdent (Ident "mec")], EApp (EApp (EApp (EIdent (Ident "normalNounPhrase"), ECTable ([BIdent (Ident "c")], EConcat (EApp (EApp (EApp (EIdent (Ident "artIndef"), EProj (EIdent (Ident "mec"), LIdent (Ident "g"))), EIdent (Ident "n")), EIdent (Ident "c")), ESelect (EProj (EIdent (Ident "mec"), LIdent (Ident "s")), EIdent (Ident "n"))))), EProj (EIdent (Ident "mec"), LIdent (Ident "g"))), EIdent (Ident "n")))); DFull ([IdentName (Ident "indefNounPhraseNum")], EProd (DExp (EIdent (Ident "Numeral")), EProd (DExp (EIdent (Ident "CommNounPhrase")), EIdent (Ident "NounPhrase"))), EAbstr ([BIdent (Ident "nu"); BIdent (Ident "mec")], EApp (EApp (EApp (EIdent (Ident "normalNounPhrase"), ECTable ([BIdent (Ident "c")], ECase (EProj (EIdent (Ident "nu"), LIdent (Ident "isNo")), [CaseC ([AltP (PV (Ident "True"))], EConcat (EApp (EApp (EApp (EIdent (Ident "artIndef"), EProj (EIdent (Ident "mec"), LIdent (Ident "g"))), EIdent (Ident "Pl")), EIdent (Ident "c")), ESelect (EProj (EIdent (Ident "mec"), LIdent (Ident "s")), EIdent (Ident "Pl")))); CaseC ([AltP (PW)], EConcat (EApp (EIdent (Ident "prepCase"), EIdent (Ident "c")), EConcat (ESelect (EProj (EIdent (Ident "nu"), LIdent (Ident "s")), EProj (EIdent (Ident "mec"), LIdent (Ident "g"))), ESelect (EProj (EIdent (Ident "mec"), LIdent (Ident "s")), EProj (EIdent (Ident "nu"), LIdent (Ident "n"))))))]))), EProj (EIdent (Ident "mec"), LIdent (Ident "g"))), EProj (EIdent (Ident "nu"), LIdent (Ident "n"))))); DFull ([IdentName (Ident "defNounPhrase")], EProd (DExp (EIdent (Ident "Number")), EProd (DExp (EIdent (Ident "CommNounPhrase")), EIdent (Ident "NounPhrase"))), EAbstr ([BIdent (Ident "n"); BIdent (Ident "mec")], EApp (EApp (EApp (EIdent (Ident "normalNounPhrase"), ECTable ([BIdent (Ident "c")], EConcat (EApp (EApp (EApp (EIdent (Ident "artDef"), EProj (EIdent (Ident "mec"), LIdent (Ident "g"))), EIdent (Ident "n")), EIdent (Ident "c")), ESelect (EProj (EIdent (Ident "mec"), LIdent (Ident "s")), EIdent (Ident "n"))))), EProj (EIdent (Ident "mec"), LIdent (Ident "g"))), EIdent (Ident "n")))); DFull ([IdentName (Ident "defNounPhraseNum")], EProd (DExp (EIdent (Ident "Numeral")), EProd (DExp (EIdent (Ident "CommNounPhrase")), EIdent (Ident "NounPhrase"))), EAbstr ([BIdent (Ident "nu"); BIdent (Ident "mec")], EApp (EApp (EApp (EIdent (Ident "normalNounPhrase"), ECTable ([BIdent (Ident "c")], EConcat (EApp (EApp (EApp (EIdent (Ident "artDef"), EProj (EIdent (Ident "mec"), LIdent (Ident "g"))), EProj (EIdent (Ident "nu"), LIdent (Ident "n"))), EIdent (Ident "c")), EConcat (ESelect (EProj (EIdent (Ident "nu"), LIdent (Ident "s")), EProj (EIdent (Ident "mec"), LIdent (Ident "g"))), ESelect (EProj (EIdent (Ident "mec"), LIdent (Ident "s")), EProj (EIdent (Ident "nu"), LIdent (Ident "n"))))))), EProj (EIdent (Ident "mec"), LIdent (Ident "g"))), EProj (EIdent (Ident "nu"), LIdent (Ident "n"))))); DFull ([IdentName (Ident "indefNoun")], EProd (DExp (EIdent (Ident "Number")), EProd (DExp (EIdent (Ident "CommNounPhrase")), ESort (Sort_Str))), EAbstr ([BIdent (Ident "n"); BIdent (Ident "mec")], ESelect (EProj (EApp (EApp (EIdent (Ident "indefNounPhrase"), EIdent (Ident "n")), EIdent (Ident "mec")), LIdent (Ident "s")), EApp (EIdent (Ident "case2pform"), EIdent (Ident "nominative"))))); DFull ([IdentName (Ident "npGenDet")], EProd (DExp (EIdent (Ident "Number")), EProd (DExp (EIdent (Ident "NounPhrase")), EProd (DExp (EIdent (Ident "CommNounPhrase")), EIdent (Ident "NounPhrase")))), EAbstr ([BIdent (Ident "n"); BIdent (Ident "jeanne"); BIdent (Ident "mec")], ELet ([LDFull ([Ident "str"], ETType (EIdent (Ident "CaseA"), ESort (Sort_Str)), ECase (EProj (EIdent (Ident "jeanne"), LIdent (Ident "c")), [CaseC ([AltP (PV (Ident "Clit0"))], EApp (EApp (EApp (EIdent (Ident "npGenDe"), EIdent (Ident "n")), EIdent (Ident "jeanne")), EIdent (Ident "mec"))); CaseC ([AltP (PW)], EApp (EApp (EApp (EIdent (Ident "npGenPoss"), EIdent (Ident "n")), EIdent (Ident "jeanne")), EIdent (Ident "mec")))]))], EApp (EApp (EApp (EIdent (Ident "normalNounPhrase"), EIdent (Ident "str")), EProj (EIdent (Ident "mec"), LIdent (Ident "g"))), EIdent (Ident "n"))))); DFull ([IdentName (Ident "npGenDetNum")], EProd (DExp (EIdent (Ident "Numeral")), EProd (DExp (EIdent (Ident "NounPhrase")), EProd (DExp (EIdent (Ident "CommNounPhrase")), EIdent (Ident "NounPhrase")))), EAbstr ([BIdent (Ident "nu"); BIdent (Ident "jeanne"); BIdent (Ident "mec")], ELet ([LDFull ([Ident "str"], ETType (EIdent (Ident "CaseA"), ESort (Sort_Str)), ECase (EProj (EIdent (Ident "jeanne"), LIdent (Ident "c")), [CaseC ([AltP (PV (Ident "Clit0"))], EApp (EApp (EApp (EIdent (Ident "npGenDeNum"), EIdent (Ident "nu")), EIdent (Ident "jeanne")), EIdent (Ident "mec"))); CaseC ([AltP (PW)], EApp (EApp (EApp (EIdent (Ident "npGenPossNum"), EIdent (Ident "nu")), EIdent (Ident "jeanne")), EIdent (Ident "mec")))]))], EApp (EApp (EApp (EIdent (Ident "normalNounPhrase"), EIdent (Ident "str")), EProj (EIdent (Ident "mec"), LIdent (Ident "g"))), EProj (EIdent (Ident "nu"), LIdent (Ident "n")))))); DFull ([IdentName (Ident "npGenDe")], EProd (DExp (EIdent (Ident "Number")), EProd (DExp (EIdent (Ident "NounPhrase")), EProd (DExp (EIdent (Ident "CommNounPhrase")), ETType (EIdent (Ident "CaseA"), ESort (Sort_Str))))), EAbstr ([BIdent (Ident "n"); BIdent (Ident "jeanne"); BIdent (Ident "mec")], ECTable ([BIdent (Ident "c")], EConcat (EApp (EApp (EApp (EIdent (Ident "artDef"), EProj (EIdent (Ident "mec"), LIdent (Ident "g"))), EIdent (Ident "n")), EIdent (Ident "c")), EConcat (ESelect (EProj (EIdent (Ident "mec"), LIdent (Ident "s")), EIdent (Ident "n")), ESelect (EProj (EIdent (Ident "jeanne"), LIdent (Ident "s")), EApp (EIdent (Ident "case2pform"), EIdent (Ident "genitive")))))))); DFull ([IdentName (Ident "npGenDeNum")], EProd (DExp (EIdent (Ident "Numeral")), EProd (DExp (EIdent (Ident "NounPhrase")), EProd (DExp (EIdent (Ident "CommNounPhrase")), ETType (EIdent (Ident "CaseA"), ESort (Sort_Str))))), EAbstr ([BIdent (Ident "nu"); BIdent (Ident "jeanne"); BIdent (Ident "mec")], ECTable ([BIdent (Ident "c")], EConcat (EApp (EApp (EApp (EIdent (Ident "artDef"), EProj (EIdent (Ident "mec"), LIdent (Ident "g"))), EProj (EIdent (Ident "nu"), LIdent (Ident "n"))), EIdent (Ident "c")), EConcat (ESelect (EProj (EIdent (Ident "nu"), LIdent (Ident "s")), EProj (EIdent (Ident "mec"), LIdent (Ident "g"))), EConcat (ESelect (EProj (EIdent (Ident "mec"), LIdent (Ident "s")), EProj (EIdent (Ident "nu"), LIdent (Ident "n"))), ESelect (EProj (EIdent (Ident "jeanne"), LIdent (Ident "s")), EApp (EIdent (Ident "case2pform"), EIdent (Ident "genitive"))))))))); DDeclC ([IdentName (Ident "npGenPoss")], EProd (DExp (EIdent (Ident "Number")), EProd (DExp (EIdent (Ident "NounPhrase")), EProd (DExp (EIdent (Ident "CommNounPhrase")), ETType (EIdent (Ident "CaseA"), ESort (Sort_Str)))))); DDeclC ([IdentName (Ident "npGenPossNum")], EProd (DExp (EIdent (Ident "Numeral")), EProd (DExp (EIdent (Ident "NounPhrase")), EProd (DExp (EIdent (Ident "CommNounPhrase")), ETType (EIdent (Ident "CaseA"), ESort (Sort_Str)))))); DFull ([IdentName (Ident "nounThatSentence")], EProd (DExp (EIdent (Ident "CommNounPhrase")), EProd (DExp (EIdent (Ident "Sentence")), EIdent (Ident "CommNounPhrase"))), EAbstr ([BIdent (Ident "idee"); BIdent (Ident "x")], ERecord ([LDDef ([Ident "s"], ECTable ([BIdent (Ident "n")], EConcat (ESelect (EProj (EIdent (Ident "idee"), LIdent (Ident "s")), EIdent (Ident "n")), EConcat (EIdent (Ident "elisQue"), ESelect (EProj (EIdent (Ident "x"), LIdent (Ident "s")), EIdent (Ident "Ind")))))); LDDef ([Ident "g"], EProj (EIdent (Ident "idee"), LIdent (Ident "g")))]))); DDeclC ([IdentName (Ident "partitiveNounPhrase")], EProd (DExp (EIdent (Ident "Number")), EProd (DExp (EIdent (Ident "CommNounPhrase")), EIdent (Ident "NounPhrase")))); DFull ([IdentName (Ident "Adjective")], ESort (Sort_Type), EExtend (EIdent (Ident "Adj"), ERecord ([LDDecl ([Ident "p"], EIdent (Ident "Bool"))]))); DDef ([IdentName (Ident "adjPre")], EIdent (Ident "True")); DDef ([IdentName (Ident "adjPost")], EIdent (Ident "False")); DFull ([IdentName (Ident "AdjPhrase")], ESort (Sort_Type), EIdent (Ident "Adjective")); DFull ([IdentName (Ident "adj2adjPhrase")], EProd (DExp (EIdent (Ident "Adjective")), EIdent (Ident "AdjPhrase")), EAbstr ([BIdent (Ident "x")], EIdent (Ident "x"))); DFull ([IdentName (Ident "mkAdjective")], EProd (DExp (EIdent (Ident "Adj")), EProd (DExp (EIdent (Ident "Bool")), EIdent (Ident "Adjective"))), EAbstr ([BIdent (Ident "adj"); BIdent (Ident "p")], EExtend (EIdent (Ident "adj"), ERecord ([LDDef ([Ident "p"], EIdent (Ident "p"))])))); DDef ([IdentName (Ident "AdjDegr")], EExtend (EIdent (Ident "AdjComp"), ERecord ([LDDecl ([Ident "p"], EIdent (Ident "Bool"))]))); DFull ([IdentName (Ident "mkAdjDegr")], EProd (DExp (EIdent (Ident "AdjComp")), EProd (DExp (EIdent (Ident "Bool")), EIdent (Ident "AdjDegr"))), EAbstr ([BIdent (Ident "adj"); BIdent (Ident "p")], EExtend (EIdent (Ident "adj"), ERecord ([LDDef ([Ident "p"], EIdent (Ident "p"))])))); DFull ([IdentName (Ident "mkAdjDegrLong")], EProd (DExp (EIdent (Ident "Adj")), EProd (DExp (EIdent (Ident "Bool")), EIdent (Ident "AdjDegr"))), EAbstr ([BIdent (Ident "adj"); BIdent (Ident "p")], EExtend (EApp (EIdent (Ident "adjCompLong"), EIdent (Ident "adj")), ERecord ([LDDef ([Ident "p"], EIdent (Ident "p"))])))); DFull ([IdentName (Ident "positAdjPhrase")], EProd (DExp (EIdent (Ident "AdjDegr")), EIdent (Ident "AdjPhrase")), EAbstr ([BIdent (Ident "bon")], ERecord ([LDDef ([Ident "s"], ESelect (EProj (EIdent (Ident "bon"), LIdent (Ident "s")), EIdent (Ident "Pos"))); LDDef ([Ident "p"], EProj (EIdent (Ident "bon"), LIdent (Ident "p")))]))); DFull ([IdentName (Ident "comparAdjPhrase")], EProd (DExp (EIdent (Ident "AdjDegr")), EProd (DExp (EIdent (Ident "NounPhrase")), EIdent (Ident "AdjPhrase"))), EAbstr ([BIdent (Ident "bon"); BIdent (Ident "toi")], ERecord ([LDDef ([Ident "s"], ECTable ([BIdent (Ident "a")], EConcat (ESelect (ESelect (EProj (EIdent (Ident "bon"), LIdent (Ident "s")), EIdent (Ident "Comp")), EIdent (Ident "a")), EConcat (EIdent (Ident "comparConj"), ESelect (EProj (EIdent (Ident "toi"), LIdent (Ident "s")), EApp (EIdent (Ident "stressed"), EIdent (Ident "accusative"))))))); LDDef ([Ident "p"], EIdent (Ident "False"))]))); DDeclC ([IdentName (Ident "comparConj")], ESort (Sort_Str)); DFull ([IdentName (Ident "superlNounPhrase")], EProd (DExp (EIdent (Ident "AdjDegr")), EProd (DExp (EIdent (Ident "CommNoun")), EIdent (Ident "NounPhrase"))), EAbstr ([BIdent (Ident "bon"); BIdent (Ident "mec")], EApp (EApp (EApp (EIdent (Ident "normalNounPhrase"), ECTable ([BIdent (Ident "c")], EConcat (EApp (EApp (EApp (EIdent (Ident "artDef"), EProj (EIdent (Ident "mec"), LIdent (Ident "g"))), EIdent (Ident "Sg")), EIdent (Ident "c")), EApp (EApp (EApp (EApp (EIdent (Ident "if_then_else"), ESort (Sort_Str)), EProj (EIdent (Ident "bon"), LIdent (Ident "p"))), EConcat (ESelect (ESelect (EProj (EIdent (Ident "bon"), LIdent (Ident "s")), EIdent (Ident "Comp")), EApp (EApp (EIdent (Ident "AF"), EProj (EIdent (Ident "mec"), LIdent (Ident "g"))), EIdent (Ident "Sg"))), ESelect (EProj (EIdent (Ident "mec"), LIdent (Ident "s")), EIdent (Ident "Sg")))), EConcat (ESelect (EProj (EIdent (Ident "mec"), LIdent (Ident "s")), EIdent (Ident "Sg")), EConcat (EApp (EApp (EApp (EIdent (Ident "artDef"), EProj (EIdent (Ident "mec"), LIdent (Ident "g"))), EIdent (Ident "Sg")), EIdent (Ident "nominative")), ESelect (ESelect (EProj (EIdent (Ident "bon"), LIdent (Ident "s")), EIdent (Ident "Comp")), EApp (EApp (EIdent (Ident "AF"), EProj (EIdent (Ident "mec"), LIdent (Ident "g"))), EIdent (Ident "Sg"))))))))), EProj (EIdent (Ident "mec"), LIdent (Ident "g"))), EIdent (Ident "Sg")))); DFull ([IdentName (Ident "superlAdjPhrase")], EProd (DExp (EIdent (Ident "AdjDegr")), EIdent (Ident "AdjPhrase")), EAbstr ([BIdent (Ident "bon")], ERecord ([LDDef ([Ident "s"], ECTable ([BIdent (Ident "a")], EConcat (EApp (EApp (EApp (EIdent (Ident "artDef"), EApp (EIdent (Ident "genAForm"), EIdent (Ident "a"))), EApp (EIdent (Ident "numAForm"), EIdent (Ident "a"))), EIdent (Ident "nominative")), ESelect (ESelect (EProj (EIdent (Ident "bon"), LIdent (Ident "s")), EIdent (Ident "Comp")), EIdent (Ident "a"))))); LDDef ([Ident "p"], EProj (EIdent (Ident "bon"), LIdent (Ident "p")))]))); DFull ([IdentName (Ident "predAdjSent")], EProd (DExp (EExtend (EIdent (Ident "Adjective"), ERecord ([LDDecl ([Ident "mp"; Ident "mn"], EIdent (Ident "Mode"))]))), EProd (DExp (EIdent (Ident "Sentence")), EIdent (Ident "Clause"))), EAbstr ([BIdent (Ident "adj"); BIdent (Ident "ildort")], EApp (EIdent (Ident "sats2clause"), EApp (EApp (EIdent (Ident "insertExtrapos"), EApp (EApp (EIdent (Ident "mkSatsCopula"), EIdent (Ident "pronImpers")), ESelect (EProj (EIdent (Ident "adj"), LIdent (Ident "s")), EApp (EApp (EIdent (Ident "AF"), EIdent (Ident "Masc")), EIdent (Ident "Sg"))))), ECTable ([BIdent (Ident "b")], EConcat (EIdent (Ident "embedConj"), ESelect (EProj (EIdent (Ident "ildort"), LIdent (Ident "s")), EApp (EApp (EApp (EApp (EIdent (Ident "if_then_else"), EIdent (Ident "Mode")), EIdent (Ident "b")), EProj (EIdent (Ident "adj"), LIdent (Ident "mp"))), EProj (EIdent (Ident "adj"), LIdent (Ident "mn")))))))))); DFull ([IdentName (Ident "predAdjSent2")], EProd (DExp (EExtend (EIdent (Ident "AdjCompl"), ERecord ([LDDecl ([Ident "mp"; Ident "mn"], EIdent (Ident "Mode"))]))), EProd (DExp (EIdent (Ident "NounPhrase")), EExtend (EIdent (Ident "Adjective"), ERecord ([LDDecl ([Ident "mp"; Ident "mn"], EIdent (Ident "Mode"))])))), EAbstr ([BIdent (Ident "facile"); BIdent (Ident "jean")], EExtend (EApp (EApp (EIdent (Ident "complAdj"), EIdent (Ident "facile")), EIdent (Ident "jean")), ERecord ([LDDef ([Ident "mp"], EProj (EIdent (Ident "facile"), LIdent (Ident "mp"))); LDDef ([Ident "mn"], EProj (EIdent (Ident "facile"), LIdent (Ident "mn")))])))); DDeclC ([IdentName (Ident "pronImpers")], EIdent (Ident "NounPhrase")); DDef ([IdentName (Ident "Preposition")], ESort (Sort_Str)); DDef ([IdentName (Ident "Complement")], ERecord ([LDDecl ([Ident "s2"], EIdent (Ident "Preposition")); LDDecl ([Ident "c"], EIdent (Ident "CaseA"))])); DFull ([IdentName (Ident "complement")], EProd (DExp (ESort (Sort_Str)), EIdent (Ident "Complement")), EAbstr ([BIdent (Ident "par")], ERecord ([LDDef ([Ident "s2"], EIdent (Ident "par")); LDDef ([Ident "c"], EIdent (Ident "nominative"))]))); DFull ([IdentName (Ident "complementDir")], EIdent (Ident "Complement"), EApp (EIdent (Ident "complement"), EEmpty)); DFull ([IdentName (Ident "complementCas")], EProd (DExp (EIdent (Ident "CaseA")), EIdent (Ident "Complement")), EAbstr ([BIdent (Ident "c")], ERecord ([LDDef ([Ident "s2"], EEmpty); LDDef ([Ident "c"], EIdent (Ident "c"))]))); DDef ([IdentName (Ident "AdjCompl")], EExtend (EIdent (Ident "AdjPhrase"), EIdent (Ident "Complement"))); DFull ([IdentName (Ident "mkAdjCompl")], EProd (DExp (EIdent (Ident "Adj")), EProd (DExp (EIdent (Ident "Bool")), EProd (DExp (EIdent (Ident "Complement")), EIdent (Ident "AdjCompl")))), EAbstr ([BIdent (Ident "adj"); BIdent (Ident "p"); BIdent (Ident "c")], EExtend (EApp (EApp (EIdent (Ident "mkAdjective"), EIdent (Ident "adj")), EIdent (Ident "p")), EIdent (Ident "c")))); DFull ([IdentName (Ident "complAdj")], EProd (DExp (EIdent (Ident "AdjCompl")), EProd (DExp (EIdent (Ident "NounPhrase")), EIdent (Ident "AdjPhrase"))), EAbstr ([BIdent (Ident "relie"); BIdent (Ident "jean")], ERecord ([LDDef ([Ident "s"], ECTable ([BIdent (Ident "a")], EConcat (ESelect (EProj (EIdent (Ident "relie"), LIdent (Ident "s")), EIdent (Ident "a")), EConcat (EProj (EIdent (Ident "relie"), LIdent (Ident "s2")), ESelect (EProj (EIdent (Ident "jean"), LIdent (Ident "s")), EApp (EIdent (Ident "case2pform"), EProj (EIdent (Ident "relie"), LIdent (Ident "c")))))))); LDDef ([Ident "p"], EIdent (Ident "False"))]))); DFull ([IdentName (Ident "modCommNounPhrase")], EProd (DExp (EIdent (Ident "AdjPhrase")), EProd (DExp (EIdent (Ident "CommNounPhrase")), EIdent (Ident "CommNounPhrase"))), EAbstr ([BIdent (Ident "bon"); BIdent (Ident "mec")], ERecord ([LDDef ([Ident "s"], ECTable ([BIdent (Ident "n")], EApp (EApp (EApp (EApp (EIdent (Ident "if_then_else"), ESort (Sort_Str)), EProj (EIdent (Ident "bon"), LIdent (Ident "p"))), EConcat (ESelect (EProj (EIdent (Ident "bon"), LIdent (Ident "s")), EApp (EApp (EIdent (Ident "AF"), EProj (EIdent (Ident "mec"), LIdent (Ident "g"))), EIdent (Ident "n"))), ESelect (EProj (EIdent (Ident "mec"), LIdent (Ident "s")), EIdent (Ident "n")))), EConcat (ESelect (EProj (EIdent (Ident "mec"), LIdent (Ident "s")), EIdent (Ident "n")), ESelect (EProj (EIdent (Ident "bon"), LIdent (Ident "s")), EApp (EApp (EIdent (Ident "AF"), EProj (EIdent (Ident "mec"), LIdent (Ident "g"))), EIdent (Ident "n"))))))); LDDef ([Ident "g"], EProj (EIdent (Ident "mec"), LIdent (Ident "g")))]))); DFull ([IdentName (Ident "Function")], ESort (Sort_Type), EExtend (EIdent (Ident "CommNounPhrase"), EIdent (Ident "Complement"))); DFull ([IdentName (Ident "appFunComm")], EProd (DExp (EIdent (Ident "Function")), EProd (DExp (EIdent (Ident "NounPhrase")), EIdent (Ident "CommNounPhrase"))), EAbstr ([BIdent (Ident "mere"); BIdent (Ident "jean")], ERecord ([LDDef ([Ident "s"], ECTable ([BIdent (Ident "n")], EConcat (ESelect (EProj (EIdent (Ident "mere"), LIdent (Ident "s")), EIdent (Ident "n")), EConcat (EProj (EIdent (Ident "mere"), LIdent (Ident "s2")), ESelect (EProj (EIdent (Ident "jean"), LIdent (Ident "s")), EApp (EIdent (Ident "case2pform"), EProj (EIdent (Ident "mere"), LIdent (Ident "c")))))))); LDDef ([Ident "g"], EProj (EIdent (Ident "mere"), LIdent (Ident "g")))]))); DDef ([IdentName (Ident "Function2")], EExtend (EIdent (Ident "Function"), ERecord ([LDDecl ([Ident "s3"], EIdent (Ident "Preposition")); LDDecl ([Ident "c3"], EIdent (Ident "CaseA"))]))); DFull ([IdentName (Ident "appFun2")], EProd (DExp (EIdent (Ident "Function2")), EProd (DExp (EIdent (Ident "NounPhrase")), EIdent (Ident "Function"))), EAbstr ([BIdent (Ident "vol"); BIdent (Ident "paris")], ERecord ([LDDef ([Ident "s"], ECTable ([BIdent (Ident "n")], EConcat (ESelect (EProj (EIdent (Ident "vol"), LIdent (Ident "s")), EIdent (Ident "n")), EConcat (EProj (EIdent (Ident "vol"), LIdent (Ident "s2")), ESelect (EProj (EIdent (Ident "paris"), LIdent (Ident "s")), EApp (EIdent (Ident "case2pform"), EProj (EIdent (Ident "vol"), LIdent (Ident "c")))))))); LDDef ([Ident "g"], EProj (EIdent (Ident "vol"), LIdent (Ident "g"))); LDDef ([Ident "s2"], EProj (EIdent (Ident "vol"), LIdent (Ident "s3"))); LDDef ([Ident "c"], EProj (EIdent (Ident "vol"), LIdent (Ident "c3")))]))); DFull ([IdentName (Ident "funAsCommNounPhrase")], EProd (DExp (EIdent (Ident "Function")), EIdent (Ident "CommNounPhrase")), EAbstr ([BIdent (Ident "x")], EIdent (Ident "x"))); DFull ([IdentName (Ident "appFun")], EProd (DExp (EIdent (Ident "Bool")), EProd (DExp (EIdent (Ident "Function")), EProd (DExp (EIdent (Ident "NounPhrase")), EIdent (Ident "NounPhrase")))), EAbstr ([BIdent (Ident "coll"); BIdent (Ident "mere"); BIdent (Ident "jean")], ELetb ([LDDef ([Ident "n"], EProj (EIdent (Ident "jean"), LIdent (Ident "n"))); LDDef ([Ident "g"], EProj (EIdent (Ident "mere"), LIdent (Ident "g"))); LDDef ([Ident "nf"], EApp (EApp (EApp (EApp (EIdent (Ident "if_then_else"), EIdent (Ident "Number")), EIdent (Ident "coll")), EIdent (Ident "Sg")), EIdent (Ident "n")))], EVariants ([EApp (EApp (EIdent (Ident "defNounPhrase"), EIdent (Ident "nf")), EApp (EApp (EIdent (Ident "appFunComm"), EIdent (Ident "mere")), EIdent (Ident "jean"))); EApp (EApp (EApp (EIdent (Ident "npGenDet"), EIdent (Ident "nf")), EIdent (Ident "jean")), EIdent (Ident "mere"))]))))]); DefPar ([ParDefDir (Ident "VPForm", [ParConstrC (Ident "VPF", [DDExp (EIdent (Ident "Anteriority")); DDExp (EIdent (Ident "VF"))])]); ParDefDir (Ident "Anteriority", [ParConstrC (Ident "Simul", []); ParConstrC (Ident "Anter", [])]); ParDefDir (Ident "VIForm", [ParConstrC (Ident "VIInfinit", []); ParConstrC (Ident "VIImperat", [DDExp (EIdent (Ident "Bool")); DDExp (EIdent (Ident "Number"))]); ParConstrC (Ident "VIGerund", [])])]); DefOper ([DDef ([IdentName (Ident "VerbPhrase")], ERecord ([LDDecl ([Ident "s"], ETType (EIdent (Ident "VIForm"), ETType (EIdent (Ident "Gender"), ETType (EIdent (Ident "Number"), ETType (EIdent (Ident "Person"), ESort (Sort_Str))))))])); DDef ([IdentName (Ident "VerbClause")], ERecord ([LDDecl ([Ident "s"], ETType (EIdent (Ident "Bool"), ETType (EIdent (Ident "Anteriority"), ETType (EIdent (Ident "VIForm"), ETType (EIdent (Ident "Gender"), ETType (EIdent (Ident "Number"), ETType (EIdent (Ident "Person"), ESort (Sort_Str))))))))])); DFull ([IdentName (Ident "vpf2vf")], EProd (DExp (EIdent (Ident "VPForm")), EIdent (Ident "VF")), EAbstr ([BIdent (Ident "vpf")], ECase (EIdent (Ident "vpf"), [CaseC ([AltP (PC (Ident "VPF", [PW; PV (Ident "vf")]))], EIdent (Ident "vf"))]))); DDeclC ([IdentName (Ident "auxVerb")], EProd (DExp (EIdent (Ident "Verb")), EIdent (Ident "Verb"))); DFull ([IdentName (Ident "nombreVerbPhrase")], EProd (DExp (EIdent (Ident "VPForm")), EIdent (Ident "Number")), EAbstr ([BIdent (Ident "v")], ECase (EIdent (Ident "v"), [CaseC ([AltP (PC (Ident "VPF", [PW; PV (Ident "f")]))], EApp (EIdent (Ident "nombreVerb"), EIdent (Ident "f")))]))); DFull ([IdentName (Ident "personVerbPhrase")], EProd (DExp (EIdent (Ident "VPForm")), EIdent (Ident "Person")), EAbstr ([BIdent (Ident "v")], ECase (EIdent (Ident "v"), [CaseC ([AltP (PC (Ident "VPF", [PW; PV (Ident "f")]))], EApp (EIdent (Ident "personVerb"), EIdent (Ident "f")))]))); DFull ([IdentName (Ident "isNotImperative")], EProd (DExp (EIdent (Ident "VPForm")), EIdent (Ident "Bool")), EAbstr ([BIdent (Ident "v")], ECase (EIdent (Ident "v"), [CaseC ([AltP (PC (Ident "VPF", [PW; PC (Ident "VImper", [PW])]))], EIdent (Ident "False")); CaseC ([AltP (PW)], EIdent (Ident "True"))]))); DDeclC ([IdentName (Ident "negVerb")], EProd (DExp (ESort (Sort_Str)), ESort (Sort_Str))); DDeclC ([IdentName (Ident "copula")], EIdent (Ident "Verb")); DFull ([IdentName (Ident "complVerbAdj")], EProd (DExp (EIdent (Ident "AdjCompl")), EProd (DExp (EIdent (Ident "VerbPhrase")), EIdent (Ident "AdjPhrase"))), EAbstr ([BIdent (Ident "facile"); BIdent (Ident "ouvrir")], ERecord ([LDDef ([Ident "s"], ECTable ([BIdent (Ident "gn")], EConcat (ESelect (EProj (EIdent (Ident "facile"), LIdent (Ident "s")), EIdent (Ident "gn")), EConcat (EApp (EIdent (Ident "prepCase"), EProj (EIdent (Ident "facile"), LIdent (Ident "c"))), EConcat (EProj (EIdent (Ident "facile"), LIdent (Ident "s2")), ESelect (ESelect (ESelect (ESelect (EProj (EIdent (Ident "ouvrir"), LIdent (Ident "s")), EIdent (Ident "VIInfinit")), EIdent (Ident "Masc")), EIdent (Ident "Sg")), EIdent (Ident "P3"))))))); LDDef ([Ident "p"], EIdent (Ident "False"))]))); DFull ([IdentName (Ident "complVerbAdj2")], EProd (DExp (EIdent (Ident "Bool")), EProd (DExp (EIdent (Ident "AdjCompl")), EProd (DExp (EIdent (Ident "NounPhrase")), EProd (DExp (EIdent (Ident "VerbPhrase")), EIdent (Ident "AdjPhrase"))))), EAbstr ([BIdent (Ident "b"); BIdent (Ident "facile"); BIdent (Ident "lui"); BIdent (Ident "nager")], ERecord ([LDDef ([Ident "s"], ECTable ([BIdent (Ident "gn")], EConcat (ESelect (EProj (EIdent (Ident "facile"), LIdent (Ident "s")), EIdent (Ident "gn")), EConcat (ESelect (EProj (EIdent (Ident "lui"), LIdent (Ident "s")), EApp (EIdent (Ident "stressed"), EIdent (Ident "dative"))), EConcat (EApp (EIdent (Ident "prepCase"), EProj (EIdent (Ident "facile"), LIdent (Ident "c"))), EConcat (EProj (EIdent (Ident "facile"), LIdent (Ident "s2")), ESelect (ESelect (ESelect (ESelect (EProj (EIdent (Ident "nager"), LIdent (Ident "s")), EIdent (Ident "VIInfinit")), EApp (EIdent (Ident "pgen2gen"), EProj (EIdent (Ident "lui"), LIdent (Ident "g")))), EProj (EIdent (Ident "lui"), LIdent (Ident "n"))), EIdent (Ident "P3")))))))); LDDef ([Ident "p"], EIdent (Ident "False"))]))); DFull ([IdentName (Ident "TransVerb")], ESort (Sort_Type), EExtend (EIdent (Ident "Verb"), EIdent (Ident "Complement"))); DFull ([IdentName (Ident "complementOfTransVerb")], EProd (DExp (EIdent (Ident "TransVerb")), EIdent (Ident "Complement")), EAbstr ([BIdent (Ident "v")], ERecord ([LDDef ([Ident "s2"], EProj (EIdent (Ident "v"), LIdent (Ident "s2"))); LDDef ([Ident "c"], EProj (EIdent (Ident "v"), LIdent (Ident "c")))]))); DFull ([IdentName (Ident "verbOfTransVerb")], EProd (DExp (EIdent (Ident "TransVerb")), EIdent (Ident "Verb")), EAbstr ([BIdent (Ident "v")], ERecord ([LDDef ([Ident "s"], EProj (EIdent (Ident "v"), LIdent (Ident "s"))); LDDef ([Ident "aux"], EProj (EIdent (Ident "v"), LIdent (Ident "aux")))]))); DFull ([IdentName (Ident "isNounPhraseClit")], EProd (DExp (EIdent (Ident "NounPhrase")), EIdent (Ident "Bool")), EAbstr ([BIdent (Ident "n")], ECase (EProj (EIdent (Ident "n"), LIdent (Ident "c")), [CaseC ([AltP (PV (Ident "Clit0"))], EIdent (Ident "False")); CaseC ([AltP (PW)], EIdent (Ident "True"))]))); DDeclC ([IdentName (Ident "isClitCase")], EProd (DExp (EIdent (Ident "CaseA")), EIdent (Ident "Bool"))); DFull ([IdentName (Ident "isTransVerbClit")], EProd (DExp (EIdent (Ident "TransVerb")), EIdent (Ident "Bool")), EAbstr ([BIdent (Ident "v")], EApp (EIdent (Ident "isClitCase"), EProj (EIdent (Ident "v"), LIdent (Ident "c"))))); DFull ([IdentName (Ident "isDitransVerbClit")], EProd (DExp (EIdent (Ident "DitransVerb")), ETupTyp (EIdent (Ident "Bool"), EIdent (Ident "Bool"))), EAbstr ([BIdent (Ident "v")], ETuple ([TComp (EApp (EIdent (Ident "isClitCase"), EProj (EIdent (Ident "v"), LIdent (Ident "c")))); TComp (EApp (EIdent (Ident "isClitCase"), EProj (EIdent (Ident "v"), LIdent (Ident "c3"))))]))); DDeclC ([IdentName (Ident "reflPron")], ETType (EIdent (Ident "Number"), ETType (EIdent (Ident "Person"), ETType (EIdent (Ident "NPFormA"), ESort (Sort_Str))))); DFull ([IdentName (Ident "reflPronNounPhrase")], EProd (DExp (EIdent (Ident "Gender")), EProd (DExp (EIdent (Ident "Number")), EProd (DExp (EIdent (Ident "Person")), EIdent (Ident "NounPhrase")))), EAbstr ([BIdent (Ident "g"); BIdent (Ident "n"); BIdent (Ident "p")], ERecord ([LDDef ([Ident "s"], ESelect (ESelect (EIdent (Ident "reflPron"), EIdent (Ident "n")), EIdent (Ident "p"))); LDDef ([Ident "g"], EApp (EIdent (Ident "PGen"), EIdent (Ident "g"))); LDDef ([Ident "n"], EIdent (Ident "n")); LDDef ([Ident "p"], EIdent (Ident "p")); LDDef ([Ident "c"], EIdent (Ident "Clit1"))]))); DFull ([IdentName (Ident "adjPastPart")], EProd (DExp (EIdent (Ident "Verb")), EIdent (Ident "Adjective")), EAbstr ([BIdent (Ident "verb")], ERecord ([LDDef ([Ident "s"], ETable ([CaseC ([AltP (PC (Ident "AF", [PV (Ident "g"); PV (Ident "n")]))], ESelect (EProj (EIdent (Ident "verb"), LIdent (Ident "s")), EApp (EApp (EIdent (Ident "VPart"), EIdent (Ident "g")), EIdent (Ident "n")))); CaseC ([AltP (PV (Ident "AA"))], ESelect (EProj (EIdent (Ident "verb"), LIdent (Ident "s")), EApp (EApp (EIdent (Ident "VPart"), EIdent (Ident "Masc")), EIdent (Ident "Sg"))))])); LDDef ([Ident "p"], EIdent (Ident "False"))]))); DFull ([IdentName (Ident "mkTransVerb")], EProd (DExp (EIdent (Ident "Verb")), EProd (DExp (EIdent (Ident "Preposition")), EProd (DExp (EIdent (Ident "CaseA")), EIdent (Ident "TransVerb")))), EAbstr ([BIdent (Ident "v"); BIdent (Ident "p"); BIdent (Ident "c")], EExtend (EIdent (Ident "v"), ERecord ([LDDef ([Ident "s2"], EIdent (Ident "p")); LDDef ([Ident "c"], EIdent (Ident "c"))])))); DFull ([IdentName (Ident "mkTransVerbPrep")], EProd (DExp (EIdent (Ident "Verb")), EProd (DExp (EIdent (Ident "Preposition")), EIdent (Ident "TransVerb"))), EAbstr ([BIdent (Ident "passer"); BIdent (Ident "par")], EApp (EApp (EApp (EIdent (Ident "mkTransVerb"), EIdent (Ident "passer")), EIdent (Ident "par")), EIdent (Ident "accusative")))); DFull ([IdentName (Ident "mkTransVerbCas")], EProd (DExp (EIdent (Ident "Verb")), EProd (DExp (EIdent (Ident "CaseA")), EIdent (Ident "TransVerb"))), EAbstr ([BIdent (Ident "penser"); BIdent (Ident "a")], EApp (EApp (EApp (EIdent (Ident "mkTransVerb"), EIdent (Ident "penser")), EEmpty), EIdent (Ident "a")))); DFull ([IdentName (Ident "mkTransVerbDir")], EProd (DExp (EIdent (Ident "Verb")), EIdent (Ident "TransVerb")), EAbstr ([BIdent (Ident "aimer")], EApp (EApp (EIdent (Ident "mkTransVerbCas"), EIdent (Ident "aimer")), EIdent (Ident "accusative")))); DFull ([IdentName (Ident "transAsVerb")], EProd (DExp (EIdent (Ident "TransVerb")), EIdent (Ident "Verb")), EAbstr ([BIdent (Ident "love")], EIdent (Ident "love"))); DDef ([IdentName (Ident "DitransVerb")], EExtend (EIdent (Ident "TransVerb"), ERecord ([LDDecl ([Ident "s3"], EIdent (Ident "Preposition")); LDDecl ([Ident "c3"], EIdent (Ident "CaseA"))]))); DFull ([IdentName (Ident "mkDitransVerb")], EProd (DExp (EIdent (Ident "Verb")), EProd (DExp (EIdent (Ident "Preposition")), EProd (DExp (EIdent (Ident "CaseA")), EProd (DExp (EIdent (Ident "Preposition")), EProd (DExp (EIdent (Ident "CaseA")), EIdent (Ident "DitransVerb")))))), EAbstr ([BIdent (Ident "v"); BIdent (Ident "p1"); BIdent (Ident "c1"); BIdent (Ident "p2"); BIdent (Ident "c2")], EExtend (EIdent (Ident "v"), ERecord ([LDDef ([Ident "s2"], EIdent (Ident "p1")); LDDef ([Ident "c"], EIdent (Ident "c1")); LDDef ([Ident "s3"], EIdent (Ident "p2")); LDDef ([Ident "c3"], EIdent (Ident "c2"))])))); DDeclC ([IdentName (Ident "posNeg")], EProd (DExp (EIdent (Ident "Bool")), EProd (DDec ([BIdent (Ident "verb"); BIdent (Ident "compl")], ESort (Sort_Str)), ESort (Sort_Str)))); DDef ([IdentName (Ident "DitransVerbVerb")], EExtend (EIdent (Ident "TransVerb"), ERecord ([LDDecl ([Ident "c3"], EIdent (Ident "CaseA"))]))); DFull ([IdentName (Ident "Adverb")], ESort (Sort_Type), EIdent (Ident "SS")); DFull ([IdentName (Ident "advVerbPhrase")], EProd (DExp (EIdent (Ident "VerbPhrase")), EProd (DExp (EIdent (Ident "Adverb")), EIdent (Ident "VerbPhrase"))), EAbstr ([BIdent (Ident "chante"); BIdent (Ident "bien")], ERecord ([LDDef ([Ident "s"], ECTable ([BIdent (Ident "v"); BIdent (Ident "g"); BIdent (Ident "n"); BIdent (Ident "p")], EConcat (ESelect (ESelect (ESelect (ESelect (EProj (EIdent (Ident "chante"), LIdent (Ident "s")), EIdent (Ident "v")), EIdent (Ident "g")), EIdent (Ident "n")), EIdent (Ident "p")), EProj (EIdent (Ident "bien"), LIdent (Ident "s")))))]))); DFull ([IdentName (Ident "prepNounPhrase")], EProd (DExp (ERecord ([LDDecl ([Ident "s"], EIdent (Ident "Preposition")); LDDecl ([Ident "c"], EIdent (Ident "CaseA"))])), EProd (DExp (EIdent (Ident "NounPhrase")), EIdent (Ident "Adverb"))), EAbstr ([BIdent (Ident "dans"); BIdent (Ident "jean")], ERecord ([LDDef ([Ident "s"], EConcat (EProj (EIdent (Ident "dans"), LIdent (Ident "s")), ESelect (EProj (EIdent (Ident "jean"), LIdent (Ident "s")), EApp (EIdent (Ident "Ton"), EProj (EIdent (Ident "dans"), LIdent (Ident "c"))))))]))); DFull ([IdentName (Ident "justPrep")], EProd (DExp (EIdent (Ident "Preposition")), ERecord ([LDDecl ([Ident "s"], EIdent (Ident "Preposition")); LDDecl ([Ident "c"], EIdent (Ident "CaseA"))])), EAbstr ([BIdent (Ident "sans")], ERecord ([LDDef ([Ident "s"], EIdent (Ident "sans")); LDDef ([Ident "c"], EIdent (Ident "prepositional"))]))); DFull ([IdentName (Ident "justCase")], EProd (DExp (EIdent (Ident "CaseA")), ERecord ([LDDecl ([Ident "s"], EIdent (Ident "Preposition")); LDDecl ([Ident "c"], EIdent (Ident "CaseA"))])), EAbstr ([BIdent (Ident "nom")], ERecord ([LDDef ([Ident "s"], EEmpty); LDDef ([Ident "c"], EIdent (Ident "nom"))]))); DFull ([IdentName (Ident "advCommNounPhrase")], EProd (DExp (EIdent (Ident "CommNounPhrase")), EProd (DExp (EIdent (Ident "Adverb")), EIdent (Ident "CommNounPhrase"))), EAbstr ([BIdent (Ident "mec"); BIdent (Ident "aparis")], ERecord ([LDDef ([Ident "s"], ECTable ([BIdent (Ident "n")], EConcat (ESelect (EProj (EIdent (Ident "mec"), LIdent (Ident "s")), EIdent (Ident "n")), EProj (EIdent (Ident "aparis"), LIdent (Ident "s"))))); LDDef ([Ident "g"], EProj (EIdent (Ident "mec"), LIdent (Ident "g")))]))); DFull ([IdentName (Ident "advAdjPhrase")], EProd (DExp (EIdent (Ident "Adverb")), EProd (DExp (EIdent (Ident "AdjPhrase")), EIdent (Ident "AdjPhrase"))), EAbstr ([BIdent (Ident "trop"); BIdent (Ident "lent")], ERecord ([LDDef ([Ident "s"], ECTable ([BIdent (Ident "a")], EConcat (EProj (EIdent (Ident "trop"), LIdent (Ident "s")), ESelect (EProj (EIdent (Ident "lent"), LIdent (Ident "s")), EIdent (Ident "a"))))); LDDef ([Ident "p"], EProj (EIdent (Ident "lent"), LIdent (Ident "p")))]))); DFull ([IdentName (Ident "Sentence")], ESort (Sort_Type), EApp (EIdent (Ident "SS1"), EIdent (Ident "Mode")))]); DefPar ([ParDefDir (Ident "Tense", [ParConstrC (Ident "Present", []); ParConstrC (Ident "Past", []); ParConstrC (Ident "Future", []); ParConstrC (Ident "Condit", [])]); ParDefDir (Ident "ClForm", [ParConstrC (Ident "ClPres", [DDExp (EIdent (Ident "Anteriority")); DDExp (EIdent (Ident "Mode"))]); ParConstrC (Ident "ClImperf", [DDExp (EIdent (Ident "Anteriority")); DDExp (EIdent (Ident "Mode"))]); ParConstrC (Ident "ClPasse", [DDExp (EIdent (Ident "Anteriority"))]); ParConstrC (Ident "ClFut", [DDExp (EIdent (Ident "Anteriority"))]); ParConstrC (Ident "ClCondit", [DDExp (EIdent (Ident "Anteriority"))]); ParConstrC (Ident "ClInfinit", [DDExp (EIdent (Ident "Anteriority"))])])]); DefOper ([DFull ([IdentName (Ident "useClForm")], EProd (DExp (EIdent (Ident "Tense")), EProd (DExp (EIdent (Ident "Anteriority")), EProd (DExp (EIdent (Ident "Mode")), EIdent (Ident "ClForm")))), EAbstr ([BIdent (Ident "t"); BIdent (Ident "a"); BIdent (Ident "m")], ECase (EIdent (Ident "t"), [CaseC ([AltP (PV (Ident "Present"))], EApp (EApp (EIdent (Ident "ClPres"), EIdent (Ident "a")), EIdent (Ident "m"))); CaseC ([AltP (PV (Ident "Past"))], EApp (EApp (EIdent (Ident "ClImperf"), EIdent (Ident "a")), EIdent (Ident "m"))); CaseC ([AltP (PV (Ident "Future"))], EApp (EIdent (Ident "ClFut"), EIdent (Ident "a"))); CaseC ([AltP (PV (Ident "Condit"))], EApp (EIdent (Ident "ClCondit"), EIdent (Ident "a")))]))); DDef ([IdentName (Ident "Clause")], ERecord ([LDDecl ([Ident "s"], ETType (EIdent (Ident "Bool"), ETType (EIdent (Ident "ClForm"), ESort (Sort_Str))))])); DFull ([IdentName (Ident "SentenceVerb")], ESort (Sort_Type), EExtend (EIdent (Ident "Verb"), ERecord ([LDDecl ([Ident "mp"; Ident "mn"], EIdent (Ident "Mode"))]))); DFull ([IdentName (Ident "subordMode")], EProd (DExp (EIdent (Ident "SentenceVerb")), EProd (DExp (EIdent (Ident "Bool")), EIdent (Ident "Mode"))), EAbstr ([BIdent (Ident "verb"); BIdent (Ident "b")], EApp (EApp (EApp (EApp (EIdent (Ident "if_then_else"), EIdent (Ident "Mode")), EIdent (Ident "b")), EProj (EIdent (Ident "verb"), LIdent (Ident "mp"))), EProj (EIdent (Ident "verb"), LIdent (Ident "mn"))))); DFull ([IdentName (Ident "verbSent")], EProd (DExp (EIdent (Ident "Verb")), EProd (DExp (EIdent (Ident "Mode")), EProd (DExp (EIdent (Ident "Mode")), EIdent (Ident "SentenceVerb")))), EAbstr ([BIdent (Ident "v"); BIdent (Ident "mp"); BIdent (Ident "mn")], EExtend (EIdent (Ident "v"), ERecord ([LDDef ([Ident "mp"], EIdent (Ident "mp")); LDDef ([Ident "mn"], EIdent (Ident "mn"))])))); DDeclC ([IdentName (Ident "embedConj")], ESort (Sort_Str)); DFull ([IdentName (Ident "VerbVerb")], ESort (Sort_Type), EExtend (EIdent (Ident "Verb"), ERecord ([LDDecl ([Ident "c"], EIdent (Ident "CaseA"))]))); DFull ([IdentName (Ident "mkVerbVerbDir")], EProd (DExp (EIdent (Ident "Verb")), EIdent (Ident "VerbVerb")), EAbstr ([BIdent (Ident "v")], EExtend (EIdent (Ident "v"), ERecord ([LDDef ([Ident "c"], EIdent (Ident "accusative"))])))); DDef ([IdentName (Ident "ClauseSlashNounPhrase")], EExtend (EIdent (Ident "Clause"), EIdent (Ident "Complement"))); DFull ([IdentName (Ident "dummyNounPhrase")], EIdent (Ident "NounPhrase"), EApp (EApp (EIdent (Ident "mkNameNounPhrase"), EEmpty), EIdent (Ident "Masc"))); DFull ([IdentName (Ident "slashTransVerb")], EProd (DExp (EIdent (Ident "NounPhrase")), EProd (DExp (EIdent (Ident "TransVerb")), EIdent (Ident "ClauseSlashNounPhrase"))), EAbstr ([BIdent (Ident "np"); BIdent (Ident "v")], EExtend (EApp (EIdent (Ident "sats2clause"), EApp (EApp (EApp (EIdent (Ident "mkSatsObject"), EIdent (Ident "np")), EIdent (Ident "v")), EIdent (Ident "dummyNounPhrase"))), EApp (EIdent (Ident "complementOfTransVerb"), EIdent (Ident "v"))))); DFull ([IdentName (Ident "slashVerbVerb")], EProd (DExp (EIdent (Ident "NounPhrase")), EProd (DExp (EIdent (Ident "VerbVerb")), EProd (DExp (EIdent (Ident "TransVerb")), EIdent (Ident "ClauseSlashNounPhrase")))), EAbstr ([BIdent (Ident "subj"); BIdent (Ident "verb"); BIdent (Ident "tv")], EExtend (EApp (EIdent (Ident "sats2clause"), EApp (EApp (EIdent (Ident "insertExtrapos"), EApp (EApp (EIdent (Ident "mkSats"), EIdent (Ident "subj")), EIdent (Ident "verb"))), ECTable ([BWild], EConcat (EApp (EIdent (Ident "prepCase"), EProj (EIdent (Ident "verb"), LIdent (Ident "c"))), ESelect (EProj (EIdent (Ident "tv"), LIdent (Ident "s")), EIdent (Ident "VInfin")))))), EApp (EIdent (Ident "complementOfTransVerb"), EIdent (Ident "tv"))))); DFull ([IdentName (Ident "slashAdverb")], EProd (DExp (EIdent (Ident "Clause")), EProd (DExp (ERecord ([LDDecl ([Ident "s"], ESort (Sort_Str)); LDDecl ([Ident "c"], EIdent (Ident "CaseA"))])), EIdent (Ident "ClauseSlashNounPhrase"))), EAbstr ([BIdent (Ident "ilhabite"); BIdent (Ident "dans")], EExtend (EIdent (Ident "ilhabite"), ERecord ([LDDef ([Ident "s2"], EProj (EIdent (Ident "dans"), LIdent (Ident "s"))); LDDef ([Ident "c"], EProj (EIdent (Ident "dans"), LIdent (Ident "c")))]))))]); DefOper ([DFull ([IdentName (Ident "RelPron")], ESort (Sort_Type), ERecord ([LDDecl ([Ident "s"], ETType (EIdent (Ident "RelFormA"), ESort (Sort_Str))); LDDecl ([Ident "g"], EIdent (Ident "RelGen"))])); DFull ([IdentName (Ident "RelClause")], ESort (Sort_Type), ERecord ([LDDecl ([Ident "s1"], ETType (EIdent (Ident "Gender"), ETType (EIdent (Ident "Number"), ETType (EIdent (Ident "Person"), ESort (Sort_Str))))); LDDecl ([Ident "s2"], ETType (EIdent (Ident "Bool"), ETType (EIdent (Ident "ClForm"), ETType (EIdent (Ident "Gender"), ETType (EIdent (Ident "Number"), ETType (EIdent (Ident "Person"), ESort (Sort_Str))))))); LDDecl ([Ident "s3"], ETType (EIdent (Ident "Bool"), ESort (Sort_Str)))])); DFull ([IdentName (Ident "RelSentence")], ESort (Sort_Type), ERecord ([LDDecl ([Ident "s"], ETType (EIdent (Ident "Mode"), ETType (EIdent (Ident "Gender"), ETType (EIdent (Ident "Number"), ETType (EIdent (Ident "Person"), ESort (Sort_Str))))))])); DFull ([IdentName (Ident "mkGenRel")], EProd (DExp (EIdent (Ident "RelGen")), EProd (DExp (EIdent (Ident "Gender")), EIdent (Ident "Gender"))), EAbstr ([BIdent (Ident "rg"); BIdent (Ident "g")], ECase (EIdent (Ident "rg"), [CaseC ([AltP (PC (Ident "PGen", [PV (Ident "gen")]))], EIdent (Ident "gen")); CaseC ([AltP (PW)], EIdent (Ident "g"))]))); DDeclC ([IdentName (Ident "identRelPron")], EIdent (Ident "RelPron")); DDeclC ([IdentName (Ident "composRelPron")], EProd (DExp (EIdent (Ident "Gender")), EProd (DExp (EIdent (Ident "Number")), EProd (DExp (EIdent (Ident "CaseA")), ESort (Sort_Str))))); DDeclC ([IdentName (Ident "funRelPron")], EProd (DExp (EIdent (Ident "Function")), EProd (DExp (EIdent (Ident "RelPron")), EIdent (Ident "RelPron")))); DDeclC ([IdentName (Ident "allRelForms")], EProd (DExp (EIdent (Ident "RelPron")), EProd (DExp (EIdent (Ident "Gender")), EProd (DExp (EIdent (Ident "Number")), EProd (DExp (EIdent (Ident "CaseA")), ESort (Sort_Str)))))); DFull ([IdentName (Ident "relSlash")], EProd (DExp (EIdent (Ident "RelPron")), EProd (DExp (EIdent (Ident "ClauseSlashNounPhrase")), EIdent (Ident "RelClause"))), EAbstr ([BIdent (Ident "dont"); BIdent (Ident "jeparle")], ERecord ([LDDef ([Ident "s1"], ECTable ([BIdent (Ident "g"); BIdent (Ident "n"); BIdent (Ident "p")], EConcat (EProj (EIdent (Ident "jeparle"), LIdent (Ident "s2")), EApp (EApp (EApp (EApp (EIdent (Ident "allRelForms"), EIdent (Ident "dont")), EIdent (Ident "g")), EIdent (Ident "n")), EProj (EIdent (Ident "jeparle"), LIdent (Ident "c")))))); LDDef ([Ident "s2"], ECTable ([BIdent (Ident "b"); BIdent (Ident "cl"); BIdent (Ident "g"); BIdent (Ident "n"); BIdent (Ident "p")], ESelect (ESelect (EProj (EIdent (Ident "jeparle"), LIdent (Ident "s")), EIdent (Ident "b")), EIdent (Ident "cl")))); LDDef ([Ident "s3"], ECTable ([BWild], EEmpty))]))); DFull ([IdentName (Ident "relSuch")], EProd (DExp (EIdent (Ident "Clause")), EIdent (Ident "RelClause")), EAbstr ([BIdent (Ident "A")], ERecord ([LDDef ([Ident "s1"], ECTable ([BIdent (Ident "g"); BIdent (Ident "n"); BIdent (Ident "p")], EApp (EApp (EIdent (Ident "suchPron"), EIdent (Ident "g")), EIdent (Ident "n")))); LDDef ([Ident "s2"], ECTable ([BIdent (Ident "b"); BIdent (Ident "cl"); BIdent (Ident "g"); BIdent (Ident "n"); BIdent (Ident "p")], EConcat (EIdent (Ident "embedConj"), ESelect (ESelect (EProj (EIdent (Ident "A"), LIdent (Ident "s")), EIdent (Ident "b")), EIdent (Ident "cl"))))); LDDef ([Ident "s3"], ECTable ([BWild], EEmpty))]))); DDeclC ([IdentName (Ident "suchPron")], EProd (DExp (EIdent (Ident "Gender")), EProd (DExp (EIdent (Ident "Number")), ESort (Sort_Str)))); DFull ([IdentName (Ident "modRelClause")], EProd (DExp (EIdent (Ident "CommNounPhrase")), EProd (DExp (EIdent (Ident "RelSentence")), EIdent (Ident "CommNounPhrase"))), EAbstr ([BIdent (Ident "mec"); BIdent (Ident "quidort")], ERecord ([LDDef ([Ident "s"], ECTable ([BIdent (Ident "n")], EConcat (ESelect (EProj (EIdent (Ident "mec"), LIdent (Ident "s")), EIdent (Ident "n")), ESelect (ESelect (ESelect (ESelect (EProj (EIdent (Ident "quidort"), LIdent (Ident "s")), EIdent (Ident "Ind")), EProj (EIdent (Ident "mec"), LIdent (Ident "g"))), EIdent (Ident "n")), EIdent (Ident "P3"))))); LDDef ([Ident "g"], EProj (EIdent (Ident "mec"), LIdent (Ident "g")))]))); DFull ([IdentName (Ident "IntPron")], ESort (Sort_Type), ERecord ([LDDecl ([Ident "s"], ETType (EIdent (Ident "CaseA"), ESort (Sort_Str))); LDDecl ([Ident "g"], EIdent (Ident "Gender")); LDDecl ([Ident "n"], EIdent (Ident "Number"))])); DFull ([IdentName (Ident "funIntPron")], EProd (DExp (EIdent (Ident "Function")), EProd (DExp (EIdent (Ident "IntPron")), EIdent (Ident "IntPron"))), EAbstr ([BIdent (Ident "mere"); BIdent (Ident "qui")], ERecord ([LDDef ([Ident "s"], ECTable ([BIdent (Ident "c")], EConcat (EApp (EApp (EApp (EIdent (Ident "artDef"), EProj (EIdent (Ident "mere"), LIdent (Ident "g"))), EProj (EIdent (Ident "qui"), LIdent (Ident "n"))), EIdent (Ident "c")), EConcat (ESelect (EProj (EIdent (Ident "mere"), LIdent (Ident "s")), EProj (EIdent (Ident "qui"), LIdent (Ident "n"))), EConcat (EProj (EIdent (Ident "mere"), LIdent (Ident "s2")), ESelect (EProj (EIdent (Ident "qui"), LIdent (Ident "s")), EProj (EIdent (Ident "mere"), LIdent (Ident "c")))))))); LDDef ([Ident "g"], EProj (EIdent (Ident "mere"), LIdent (Ident "g"))); LDDef ([Ident "n"], EProj (EIdent (Ident "qui"), LIdent (Ident "n")))]))); DDeclC ([IdentName (Ident "nounIntPron")], EProd (DExp (EIdent (Ident "Number")), EProd (DExp (EIdent (Ident "CommNounPhrase")), EIdent (Ident "IntPron")))); DDeclC ([IdentName (Ident "intPronWho")], EProd (DExp (EIdent (Ident "Number")), EIdent (Ident "IntPron"))); DDeclC ([IdentName (Ident "intPronWhat")], EProd (DExp (EIdent (Ident "Number")), EIdent (Ident "IntPron"))); DDef ([IdentName (Ident "Utterance")], EIdent (Ident "SS")); DFull ([IdentName (Ident "indicUtt")], EProd (DExp (EIdent (Ident "Sentence")), EIdent (Ident "Utterance")), EAbstr ([BIdent (Ident "x")], EApp (EIdent (Ident "ss"), EConcat (ESelect (EProj (EIdent (Ident "x"), LIdent (Ident "s")), EIdent (Ident "Ind")), EString ("."))))); DFull ([IdentName (Ident "interrogUtt")], EProd (DExp (EIdent (Ident "QuestionSent")), EIdent (Ident "Utterance")), EAbstr ([BIdent (Ident "x")], EApp (EIdent (Ident "ss"), EConcat (ESelect (EProj (EIdent (Ident "x"), LIdent (Ident "s")), EIdent (Ident "DirQ")), EString ("?")))))]); DefPar ([ParDefDir (Ident "QuestForm", [ParConstrC (Ident "DirQ", []); ParConstrC (Ident "IndirQ", [])])]); DefOper ([DDef ([IdentName (Ident "Question")], ERecord ([LDDecl ([Ident "s"], ETType (EIdent (Ident "Bool"), ETType (EIdent (Ident "ClForm"), ETType (EIdent (Ident "QuestForm"), ESort (Sort_Str)))))])); DDef ([IdentName (Ident "QuestionSent")], ERecord ([LDDecl ([Ident "s"], ETType (EIdent (Ident "QuestForm"), ESort (Sort_Str)))])); DFull ([IdentName (Ident "questClause")], EProd (DExp (EIdent (Ident "Clause")), EIdent (Ident "Question")), EAbstr ([BIdent (Ident "cl")], ERecord ([LDDef ([Ident "s"], ECTable ([BIdent (Ident "b"); BIdent (Ident "c")], ETable ([CaseC ([AltP (PV (Ident "DirQ"))], ESelect (ESelect (EProj (EIdent (Ident "cl"), LIdent (Ident "s")), EIdent (Ident "b")), EIdent (Ident "c"))); CaseC ([AltP (PV (Ident "IndirQ"))], ESelect (ESelect (EProj (EIdent (Ident "cl"), LIdent (Ident "s")), EIdent (Ident "b")), EIdent (Ident "c")))])))]))); DDeclC ([IdentName (Ident "intSlash")], EProd (DExp (EIdent (Ident "IntPron")), EProd (DExp (EIdent (Ident "ClauseSlashNounPhrase")), EIdent (Ident "Question")))); DFull ([IdentName (Ident "intNounPhrase")], EProd (DExp (EIdent (Ident "IntPron")), EIdent (Ident "NounPhrase")), EAbstr ([BIdent (Ident "ip")], ERecord ([LDDef ([Ident "s"], ECTable ([BIdent (Ident "nf")], ESelect (EProj (EIdent (Ident "ip"), LIdent (Ident "s")), EApp (EIdent (Ident "pform2case"), EIdent (Ident "nf"))))); LDDef ([Ident "g"], EApp (EIdent (Ident "PGen"), EProj (EIdent (Ident "ip"), LIdent (Ident "g")))); LDDef ([Ident "n"], EProj (EIdent (Ident "ip"), LIdent (Ident "n"))); LDDef ([Ident "p"], EIdent (Ident "P3")); LDDef ([Ident "c"], EIdent (Ident "Clit0"))]))); DDef ([IdentName (Ident "IntAdverb")], EIdent (Ident "SS")); DFull ([IdentName (Ident "questAdverbial")], EProd (DExp (EIdent (Ident "IntAdverb")), EProd (DExp (EIdent (Ident "Clause")), EIdent (Ident "Question"))), EAbstr ([BIdent (Ident "quand"); BIdent (Ident "jeanDort")], ERecord ([LDDef ([Ident "s"], ECTable ([BIdent (Ident "b"); BIdent (Ident "cl")], ELetb ([LDDef ([Ident "jeandort"], ESelect (ESelect (EProj (EIdent (Ident "jeanDort"), LIdent (Ident "s")), EIdent (Ident "b")), EIdent (Ident "cl")))], ETable ([CaseC ([AltP (PV (Ident "DirQ"))], EConcat (EProj (EIdent (Ident "quand"), LIdent (Ident "s")), EIdent (Ident "jeandort"))); CaseC ([AltP (PV (Ident "IndirQ"))], EConcat (EProj (EIdent (Ident "quand"), LIdent (Ident "s")), EIdent (Ident "jeandort")))]))))]))); DDef ([IdentName (Ident "Imperative")], ERecord ([LDDecl ([Ident "s"], ETType (EIdent (Ident "Gender"), ETType (EIdent (Ident "Number"), ESort (Sort_Str))))])); DFull ([IdentName (Ident "imperVerbPhrase")], EProd (DExp (EIdent (Ident "Bool")), EProd (DExp (EIdent (Ident "VerbClause")), EIdent (Ident "Imperative"))), EAbstr ([BIdent (Ident "b"); BIdent (Ident "dormir")], ERecord ([LDDef ([Ident "s"], ECTable ([BIdent (Ident "g"); BIdent (Ident "n")], ESelect (ESelect (ESelect (ESelect (ESelect (ESelect (EProj (EIdent (Ident "dormir"), LIdent (Ident "s")), EIdent (Ident "b")), EIdent (Ident "Simul")), EApp (EApp (EIdent (Ident "VIImperat"), EIdent (Ident "b")), EIdent (Ident "n"))), EIdent (Ident "g")), EIdent (Ident "n")), EIdent (Ident "P2"))))]))); DFull ([IdentName (Ident "imperUtterance")], EProd (DExp (EIdent (Ident "Number")), EProd (DExp (EIdent (Ident "Imperative")), EIdent (Ident "Utterance"))), EAbstr ([BIdent (Ident "n"); BIdent (Ident "I")], EApp (EIdent (Ident "ss"), EConcat (ESelect (ESelect (EProj (EIdent (Ident "I"), LIdent (Ident "s")), EIdent (Ident "Masc")), EIdent (Ident "n")), EString ("!"))))); DFull ([IdentName (Ident "advClause")], EProd (DExp (EIdent (Ident "Clause")), EProd (DExp (EIdent (Ident "Adverb")), EIdent (Ident "Clause"))), EAbstr ([BIdent (Ident "yousing"); BIdent (Ident "well")], ERecord ([LDDef ([Ident "s"], ECTable ([BIdent (Ident "b"); BIdent (Ident "c")], EConcat (ESelect (ESelect (EProj (EIdent (Ident "yousing"), LIdent (Ident "s")), EIdent (Ident "b")), EIdent (Ident "c")), EProj (EIdent (Ident "well"), LIdent (Ident "s")))))]))); DFull ([IdentName (Ident "advSentence")], EProd (DExp (EIdent (Ident "SS")), EProd (DExp (EIdent (Ident "Sentence")), EIdent (Ident "Utterance"))), EAbstr ([BIdent (Ident "donc"); BIdent (Ident "ildort")], EApp (EIdent (Ident "ss"), EConcat (EProj (EIdent (Ident "donc"), LIdent (Ident "s")), EConcat (ESelect (EProj (EIdent (Ident "ildort"), LIdent (Ident "s")), EIdent (Ident "Ind")), EString (".")))))); DDef ([IdentName (Ident "Conjunction")], EExtend (EProj (EIdent (Ident "CO"), LIdent (Ident "Conjunction")), ERecord ([LDDecl ([Ident "n"], EIdent (Ident "Number"))]))); DDef ([IdentName (Ident "ConjunctionDistr")], EExtend (EProj (EIdent (Ident "CO"), LIdent (Ident "ConjunctionDistr")), ERecord ([LDDecl ([Ident "n"], EIdent (Ident "Number"))]))); DFull ([IdentName (Ident "ListSentence")], ESort (Sort_Type), ERecord ([LDDecl ([Ident "s1"; Ident "s2"], ETType (EIdent (Ident "Mode"), ESort (Sort_Str)))])); DFull ([IdentName (Ident "twoSentence")], EProd (DDec ([BWild; BWild], EIdent (Ident "Sentence")), EIdent (Ident "ListSentence")), EApp (EProj (EIdent (Ident "CO"), LIdent (Ident "twoTable")), EIdent (Ident "Mode"))); DFull ([IdentName (Ident "consSentence")], EProd (DExp (EIdent (Ident "ListSentence")), EProd (DExp (EIdent (Ident "Sentence")), EIdent (Ident "ListSentence"))), EApp (EApp (EProj (EIdent (Ident "CO"), LIdent (Ident "consTable")), EIdent (Ident "Mode")), EProj (EIdent (Ident "CO"), LIdent (Ident "comma")))); DFull ([IdentName (Ident "conjunctSentence")], EProd (DExp (EIdent (Ident "Conjunction")), EProd (DExp (EIdent (Ident "ListSentence")), EIdent (Ident "Sentence"))), EApp (EProj (EIdent (Ident "CO"), LIdent (Ident "conjunctTable")), EIdent (Ident "Mode"))); DFull ([IdentName (Ident "conjunctDistrSentence")], EProd (DExp (EIdent (Ident "ConjunctionDistr")), EProd (DExp (EIdent (Ident "ListSentence")), EIdent (Ident "Sentence"))), EApp (EProj (EIdent (Ident "CO"), LIdent (Ident "conjunctDistrTable")), EIdent (Ident "Mode"))); DFull ([IdentName (Ident "ListAdjPhrase")], ESort (Sort_Type), ERecord ([LDDecl ([Ident "s1"; Ident "s2"], ETType (EIdent (Ident "AForm"), ESort (Sort_Str))); LDDecl ([Ident "p"], EIdent (Ident "Bool"))])); DFull ([IdentName (Ident "twoAdjPhrase")], EProd (DDec ([BWild; BWild], EIdent (Ident "AdjPhrase")), EIdent (Ident "ListAdjPhrase")), EAbstr ([BIdent (Ident "x"); BIdent (Ident "y")], EExtend (EApp (EApp (EApp (EProj (EIdent (Ident "CO"), LIdent (Ident "twoTable")), EIdent (Ident "AForm")), EIdent (Ident "x")), EIdent (Ident "y")), ERecord ([LDDef ([Ident "p"], EApp (EApp (EIdent (Ident "andB"), EProj (EIdent (Ident "x"), LIdent (Ident "p"))), EProj (EIdent (Ident "y"), LIdent (Ident "p"))))])))); DFull ([IdentName (Ident "consAdjPhrase")], EProd (DExp (EIdent (Ident "ListAdjPhrase")), EProd (DExp (EIdent (Ident "AdjPhrase")), EIdent (Ident "ListAdjPhrase"))), EAbstr ([BIdent (Ident "xs"); BIdent (Ident "x")], EExtend (EApp (EApp (EApp (EApp (EProj (EIdent (Ident "CO"), LIdent (Ident "consTable")), EIdent (Ident "AForm")), EProj (EIdent (Ident "CO"), LIdent (Ident "comma"))), EIdent (Ident "xs")), EIdent (Ident "x")), ERecord ([LDDef ([Ident "p"], EApp (EApp (EIdent (Ident "andB"), EProj (EIdent (Ident "xs"), LIdent (Ident "p"))), EProj (EIdent (Ident "x"), LIdent (Ident "p"))))])))); DFull ([IdentName (Ident "conjunctAdjPhrase")], EProd (DExp (EIdent (Ident "Conjunction")), EProd (DExp (EIdent (Ident "ListAdjPhrase")), EIdent (Ident "AdjPhrase"))), EAbstr ([BIdent (Ident "c"); BIdent (Ident "xs")], EExtend (EApp (EApp (EApp (EProj (EIdent (Ident "CO"), LIdent (Ident "conjunctTable")), EIdent (Ident "AForm")), EIdent (Ident "c")), EIdent (Ident "xs")), ERecord ([LDDef ([Ident "p"], EProj (EIdent (Ident "xs"), LIdent (Ident "p")))])))); DFull ([IdentName (Ident "conjunctDistrAdjPhrase")], EProd (DExp (EIdent (Ident "ConjunctionDistr")), EProd (DExp (EIdent (Ident "ListAdjPhrase")), EIdent (Ident "AdjPhrase"))), EAbstr ([BIdent (Ident "c"); BIdent (Ident "xs")], EExtend (EApp (EApp (EApp (EProj (EIdent (Ident "CO"), LIdent (Ident "conjunctDistrTable")), EIdent (Ident "AForm")), EIdent (Ident "c")), EIdent (Ident "xs")), ERecord ([LDDef ([Ident "p"], EProj (EIdent (Ident "xs"), LIdent (Ident "p")))])))); DFull ([IdentName (Ident "ListNounPhrase")], ESort (Sort_Type), ERecord ([LDDecl ([Ident "s1"; Ident "s2"], ETType (EIdent (Ident "CaseA"), ESort (Sort_Str))); LDDecl ([Ident "g"], EIdent (Ident "PronGen")); LDDecl ([Ident "n"], EIdent (Ident "Number")); LDDecl ([Ident "p"], EIdent (Ident "Person"))])); DFull ([IdentName (Ident "twoNounPhrase")], EProd (DDec ([BWild; BWild], EIdent (Ident "NounPhrase")), EIdent (Ident "ListNounPhrase")), EAbstr ([BIdent (Ident "x"); BIdent (Ident "y")], EExtend (ERecord ([LDDef ([Ident "s1"], ECTable ([BIdent (Ident "c")], ESelect (EProj (EIdent (Ident "x"), LIdent (Ident "s")), EApp (EIdent (Ident "stressed"), EIdent (Ident "c"))))); LDDef ([Ident "s2"], ECTable ([BIdent (Ident "c")], ESelect (EProj (EIdent (Ident "y"), LIdent (Ident "s")), EApp (EIdent (Ident "stressed"), EApp (EIdent (Ident "conjunctCase"), EIdent (Ident "c"))))))]), ERecord ([LDDef ([Ident "n"], EApp (EApp (EIdent (Ident "conjNumber"), EProj (EIdent (Ident "x"), LIdent (Ident "n"))), EProj (EIdent (Ident "y"), LIdent (Ident "n")))); LDDef ([Ident "g"], EApp (EApp (EIdent (Ident "conjGender"), EProj (EIdent (Ident "x"), LIdent (Ident "g"))), EProj (EIdent (Ident "y"), LIdent (Ident "g")))); LDDef ([Ident "p"], EApp (EApp (EIdent (Ident "conjPers"), EProj (EIdent (Ident "x"), LIdent (Ident "p"))), EProj (EIdent (Ident "y"), LIdent (Ident "p"))))])))); DFull ([IdentName (Ident "consNounPhrase")], EProd (DExp (EIdent (Ident "ListNounPhrase")), EProd (DExp (EIdent (Ident "NounPhrase")), EIdent (Ident "ListNounPhrase"))), EAbstr ([BIdent (Ident "xs"); BIdent (Ident "x")], EExtend (ERecord ([LDDef ([Ident "s1"], ECTable ([BIdent (Ident "c")], EConcat (ESelect (EProj (EIdent (Ident "xs"), LIdent (Ident "s1")), EIdent (Ident "c")), EConcat (EProj (EIdent (Ident "CO"), LIdent (Ident "comma")), ESelect (EProj (EIdent (Ident "xs"), LIdent (Ident "s2")), EApp (EIdent (Ident "conjunctCase"), EIdent (Ident "c"))))))); LDDef ([Ident "s2"], ECTable ([BIdent (Ident "c")], ESelect (EProj (EIdent (Ident "x"), LIdent (Ident "s")), EApp (EIdent (Ident "stressed"), EApp (EIdent (Ident "conjunctCase"), EIdent (Ident "c"))))))]), ERecord ([LDDef ([Ident "n"], EApp (EApp (EIdent (Ident "conjNumber"), EProj (EIdent (Ident "xs"), LIdent (Ident "n"))), EProj (EIdent (Ident "x"), LIdent (Ident "n")))); LDDef ([Ident "g"], EApp (EApp (EIdent (Ident "conjGender"), EProj (EIdent (Ident "xs"), LIdent (Ident "g"))), EProj (EIdent (Ident "x"), LIdent (Ident "g")))); LDDef ([Ident "p"], EApp (EApp (EIdent (Ident "conjPers"), EProj (EIdent (Ident "xs"), LIdent (Ident "p"))), EProj (EIdent (Ident "x"), LIdent (Ident "p"))))])))); DDeclC ([IdentName (Ident "conjunctCase")], EProd (DExp (EIdent (Ident "CaseA")), EIdent (Ident "CaseA"))); DFull ([IdentName (Ident "conjunctNounPhrase")], EProd (DExp (EIdent (Ident "Conjunction")), EProd (DExp (EIdent (Ident "ListNounPhrase")), EIdent (Ident "NounPhrase"))), EAbstr ([BIdent (Ident "co"); BIdent (Ident "xs")], EExtend (ERecord ([LDDef ([Ident "s"], ECTable ([BIdent (Ident "c")], EConcat (ESelect (EProj (EIdent (Ident "xs"), LIdent (Ident "s1")), EApp (EIdent (Ident "pform2case"), EIdent (Ident "c"))), EConcat (EProj (EIdent (Ident "co"), LIdent (Ident "s")), ESelect (EProj (EIdent (Ident "xs"), LIdent (Ident "s2")), EApp (EIdent (Ident "pform2case"), EIdent (Ident "c")))))))]), ERecord ([LDDef ([Ident "n"], EApp (EApp (EIdent (Ident "conjNumber"), EProj (EIdent (Ident "co"), LIdent (Ident "n"))), EProj (EIdent (Ident "xs"), LIdent (Ident "n")))); LDDef ([Ident "g"], EProj (EIdent (Ident "xs"), LIdent (Ident "g"))); LDDef ([Ident "p"], EProj (EIdent (Ident "xs"), LIdent (Ident "p"))); LDDef ([Ident "c"], EIdent (Ident "Clit0"))])))); DFull ([IdentName (Ident "conjunctDistrNounPhrase")], EProd (DExp (EIdent (Ident "ConjunctionDistr")), EProd (DExp (EIdent (Ident "ListNounPhrase")), EIdent (Ident "NounPhrase"))), EAbstr ([BIdent (Ident "co"); BIdent (Ident "xs")], EExtend (ERecord ([LDDef ([Ident "s"], ECTable ([BIdent (Ident "c")], EConcat (EProj (EIdent (Ident "co"), LIdent (Ident "s1")), EConcat (ESelect (EProj (EIdent (Ident "xs"), LIdent (Ident "s1")), EApp (EIdent (Ident "pform2case"), EIdent (Ident "c"))), EConcat (EProj (EIdent (Ident "co"), LIdent (Ident "s2")), ESelect (EProj (EIdent (Ident "xs"), LIdent (Ident "s2")), EApp (EIdent (Ident "pform2case"), EIdent (Ident "c"))))))))]), ERecord ([LDDef ([Ident "n"], EApp (EApp (EIdent (Ident "conjNumber"), EProj (EIdent (Ident "co"), LIdent (Ident "n"))), EProj (EIdent (Ident "xs"), LIdent (Ident "n")))); LDDef ([Ident "g"], EProj (EIdent (Ident "xs"), LIdent (Ident "g"))); LDDef ([Ident "p"], EProj (EIdent (Ident "xs"), LIdent (Ident "p"))); LDDef ([Ident "c"], EIdent (Ident "Clit0"))])))); DFull ([IdentName (Ident "conjNumber")], EProd (DExp (EIdent (Ident "Number")), EProd (DExp (EIdent (Ident "Number")), EIdent (Ident "Number"))), EAbstr ([BIdent (Ident "m"); BIdent (Ident "n")], ECase (ETuple ([TComp (EIdent (Ident "m")); TComp (EIdent (Ident "n"))]), [CaseC ([AltP (PTup ([PTComp (PV (Ident "Sg")); PTComp (PV (Ident "Sg"))]))], EIdent (Ident "Sg")); CaseC ([AltP (PW)], EIdent (Ident "Pl"))]))); DFull ([IdentName (Ident "conjGen")], EProd (DExp (EIdent (Ident "Gender")), EProd (DExp (EIdent (Ident "Gender")), EIdent (Ident "Gender"))), EAbstr ([BIdent (Ident "m"); BIdent (Ident "n")], ECase (ETuple ([TComp (EIdent (Ident "m")); TComp (EIdent (Ident "n"))]), [CaseC ([AltP (PTup ([PTComp (PV (Ident "Fem")); PTComp (PV (Ident "Fem"))]))], EIdent (Ident "Fem")); CaseC ([AltP (PW)], EIdent (Ident "Masc"))]))); DFull ([IdentName (Ident "conjGender")], EProd (DExp (EIdent (Ident "PronGen")), EProd (DExp (EIdent (Ident "PronGen")), EIdent (Ident "PronGen"))), EAbstr ([BIdent (Ident "m"); BIdent (Ident "n")], ECase (ETuple ([TComp (EIdent (Ident "m")); TComp (EIdent (Ident "n"))]), [CaseC ([AltP (PTup ([PTComp (PC (Ident "PGen", [PV (Ident "Fem")])); PTComp (PC (Ident "PGen", [PV (Ident "Fem")]))]))], EApp (EIdent (Ident "PGen"), EIdent (Ident "Fem"))); CaseC ([AltP (PW)], EIdent (Ident "PNoGen"))]))); DFull ([IdentName (Ident "conjPers")], EProd (DExp (EIdent (Ident "Person")), EProd (DExp (EIdent (Ident "Person")), EIdent (Ident "Person"))), EAbstr ([BIdent (Ident "p"); BIdent (Ident "q")], ECase (ETuple ([TComp (EIdent (Ident "p")); TComp (EIdent (Ident "q"))]), [CaseC ([AltP (PTup ([PTComp (PV (Ident "P3")); PTComp (PV (Ident "P3"))]))], EIdent (Ident "P3")); CaseC ([AltP (PTup ([PTComp (PV (Ident "P1")); PTComp (PW)]))], EIdent (Ident "P1")); CaseC ([AltP (PTup ([PTComp (PW); PTComp (PV (Ident "P1"))]))], EIdent (Ident "P1")); CaseC ([AltP (PW)], EIdent (Ident "P2"))]))); DFull ([IdentName (Ident "ListAdverb")], ESort (Sort_Type), EIdent (Ident "SD2")); DFull ([IdentName (Ident "twoAdverb")], EProd (DDec ([BWild; BWild], EIdent (Ident "Adverb")), EIdent (Ident "ListAdverb")), EProj (EIdent (Ident "CO"), LIdent (Ident "twoSS"))); DFull ([IdentName (Ident "consAdverb")], EProd (DExp (EIdent (Ident "ListAdverb")), EProd (DExp (EIdent (Ident "Adverb")), EIdent (Ident "ListAdverb"))), EApp (EProj (EIdent (Ident "CO"), LIdent (Ident "consSS")), EProj (EIdent (Ident "CO"), LIdent (Ident "comma")))); DFull ([IdentName (Ident "conjunctAdverb")], EProd (DExp (EIdent (Ident "Conjunction")), EProd (DExp (EIdent (Ident "ListAdverb")), EIdent (Ident "Adverb"))), EAbstr ([BIdent (Ident "c"); BIdent (Ident "xs")], EApp (EIdent (Ident "ss"), EApp (EApp (EProj (EIdent (Ident "CO"), LIdent (Ident "conjunctX")), EIdent (Ident "c")), EIdent (Ident "xs"))))); DFull ([IdentName (Ident "conjunctDistrAdverb")], EProd (DExp (EIdent (Ident "ConjunctionDistr")), EProd (DExp (EIdent (Ident "ListAdverb")), EIdent (Ident "Adverb"))), EAbstr ([BIdent (Ident "c"); BIdent (Ident "xs")], EApp (EIdent (Ident "ss"), EApp (EApp (EProj (EIdent (Ident "CO"), LIdent (Ident "conjunctDistrX")), EIdent (Ident "c")), EIdent (Ident "xs"))))); DDef ([IdentName (Ident "Subjunction")], ERecord ([LDDecl ([Ident "s"], ESort (Sort_Str)); LDDecl ([Ident "m"], EIdent (Ident "Mode"))])); DFull ([IdentName (Ident "subjunctSentence")], EProd (DExp (EIdent (Ident "Subjunction")), EProd (DExp (EIdent (Ident "Sentence")), EProd (DExp (EIdent (Ident "Sentence")), EIdent (Ident "Sentence")))), EAbstr ([BIdent (Ident "si"); BIdent (Ident "A"); BIdent (Ident "B")], ERecord ([LDDef ([Ident "s"], ECTable ([BIdent (Ident "m")], EApp (EApp (EApp (EIdent (Ident "subjunctVariants"), EIdent (Ident "si")), EIdent (Ident "A")), ESelect (EProj (EIdent (Ident "B"), LIdent (Ident "s")), EIdent (Ident "m")))))]))); DFull ([IdentName (Ident "subjunctImperative")], EProd (DExp (EIdent (Ident "Subjunction")), EProd (DExp (EIdent (Ident "Sentence")), EProd (DExp (EIdent (Ident "Imperative")), EIdent (Ident "Imperative")))), EAbstr ([BIdent (Ident "si"); BIdent (Ident "A"); BIdent (Ident "B")], ERecord ([LDDef ([Ident "s"], ECTable ([BIdent (Ident "g"); BIdent (Ident "n")], EApp (EApp (EApp (EIdent (Ident "subjunctVariants"), EIdent (Ident "si")), EIdent (Ident "A")), ESelect (ESelect (EProj (EIdent (Ident "B"), LIdent (Ident "s")), EIdent (Ident "g")), EIdent (Ident "n")))))]))); DFull ([IdentName (Ident "subjunctQuestion")], EProd (DExp (EIdent (Ident "Subjunction")), EProd (DExp (EIdent (Ident "Sentence")), EProd (DExp (EIdent (Ident "QuestionSent")), EIdent (Ident "QuestionSent")))), EAbstr ([BIdent (Ident "si"); BIdent (Ident "A"); BIdent (Ident "B")], ERecord ([LDDef ([Ident "s"], ECTable ([BIdent (Ident "q")], EApp (EApp (EApp (EIdent (Ident "subjunctVariants"), EIdent (Ident "si")), EIdent (Ident "A")), ESelect (EProj (EIdent (Ident "B"), LIdent (Ident "s")), EIdent (Ident "q")))))]))); DFull ([IdentName (Ident "subjunctVariants")], EProd (DExp (EIdent (Ident "Subjunction")), EProd (DExp (EIdent (Ident "Sentence")), EProd (DExp (ESort (Sort_Str)), ESort (Sort_Str)))), EAbstr ([BIdent (Ident "si"); BIdent (Ident "A"); BIdent (Ident "B")], ELet ([LDDef ([Ident "As"], ESelect (EProj (EIdent (Ident "A"), LIdent (Ident "s")), EProj (EIdent (Ident "si"), LIdent (Ident "m"))))], EVariants ([EConcat (EProj (EIdent (Ident "si"), LIdent (Ident "s")), EConcat (EIdent (Ident "As"), EIdent (Ident "B"))); EConcat (EIdent (Ident "B"), EConcat (EProj (EIdent (Ident "si"), LIdent (Ident "s")), EIdent (Ident "As")))])))); DFull ([IdentName (Ident "useNounPhrase")], EProd (DExp (EIdent (Ident "NounPhrase")), EIdent (Ident "Utterance")), EAbstr ([BIdent (Ident "jean")], EApp (EApp (EIdent (Ident "postfixSS"), EString (".")), EApp (EIdent (Ident "defaultNounPhrase"), EIdent (Ident "jean"))))); DFull ([IdentName (Ident "useCommonNounPhrase")], EProd (DExp (EIdent (Ident "Number")), EProd (DExp (EIdent (Ident "CommNounPhrase")), EIdent (Ident "Utterance"))), EAbstr ([BIdent (Ident "n"); BIdent (Ident "mec")], EApp (EIdent (Ident "useNounPhrase"), EApp (EApp (EIdent (Ident "indefNounPhrase"), EIdent (Ident "n")), EIdent (Ident "mec"))))); DFull ([IdentName (Ident "verbUtterance")], EProd (DExp (EIdent (Ident "VerbPhrase")), EIdent (Ident "Utterance")), EAbstr ([BIdent (Ident "vp")], EApp (EIdent (Ident "ss"), ESelect (ESelect (ESelect (ESelect (EProj (EIdent (Ident "vp"), LIdent (Ident "s")), EIdent (Ident "VIInfinit")), EIdent (Ident "Masc")), EIdent (Ident "Sg")), EIdent (Ident "P3"))))); DFull ([IdentName (Ident "defaultNounPhrase")], EProd (DExp (EIdent (Ident "NounPhrase")), EIdent (Ident "SS")), EAbstr ([BIdent (Ident "jean")], EApp (EIdent (Ident "ss"), ESelect (EProj (EIdent (Ident "jean"), LIdent (Ident "s")), EApp (EIdent (Ident "stressed"), EIdent (Ident "nominative")))))); DFull ([IdentName (Ident "defaultQuestion")], EProd (DExp (EIdent (Ident "QuestionSent")), EIdent (Ident "SS")), EAbstr ([BIdent (Ident "quiesttu")], EApp (EIdent (Ident "ss"), ESelect (EProj (EIdent (Ident "quiesttu"), LIdent (Ident "s")), EIdent (Ident "DirQ"))))); DFull ([IdentName (Ident "defaultSentence")], EProd (DExp (EIdent (Ident "Sentence")), EIdent (Ident "SS")), EAbstr ([BIdent (Ident "x")], EApp (EIdent (Ident "ss"), ESelect (EProj (EIdent (Ident "x"), LIdent (Ident "s")), EIdent (Ident "Ind"))))); DDeclC ([IdentName (Ident "artDef")], EProd (DExp (EIdent (Ident "Gender")), EProd (DExp (EIdent (Ident "Number")), EProd (DExp (EIdent (Ident "CaseA")), ESort (Sort_Str))))); DDeclC ([IdentName (Ident "artIndef")], EProd (DExp (EIdent (Ident "Gender")), EProd (DExp (EIdent (Ident "Number")), EProd (DExp (EIdent (Ident "CaseA")), ESort (Sort_Str))))); DDeclC ([IdentName (Ident "genForms")], EProd (DExp (ESort (Sort_Str)), EProd (DExp (ESort (Sort_Str)), ETType (EIdent (Ident "Gender"), ESort (Sort_Str))))); DDeclC ([IdentName (Ident "pronJe"); IdentName (Ident "pronTu"); IdentName (Ident "pronIl"); IdentName (Ident "pronElle"); IdentName (Ident "pronNous"); IdentName (Ident "pronVous"); IdentName (Ident "pronIls"); IdentName (Ident "pronElles")], EIdent (Ident "Pronoun")); DDeclC ([IdentName (Ident "chaqueDet"); IdentName (Ident "quelDet"); IdentName (Ident "plupartDet")], EIdent (Ident "Determiner")); DDeclC ([IdentName (Ident "commentAdv"); IdentName (Ident "quandAdv"); IdentName (Ident "ouAdv"); IdentName (Ident "pourquoiAdv")], EIdent (Ident "Adverb")); DDeclC ([IdentName (Ident "etConj"); IdentName (Ident "ouConj")], EIdent (Ident "Conjunction")); DDeclC ([IdentName (Ident "etetConj"); IdentName (Ident "ououConj")], EIdent (Ident "ConjunctionDistr")); DDeclC ([IdentName (Ident "siSubj"); IdentName (Ident "quandSubj")], EIdent (Ident "Subjunction")); DDeclC ([IdentName (Ident "ouiPhr"); IdentName (Ident "noPhr")], EIdent (Ident "Utterance")); DFull ([IdentName (Ident "Sats")], ESort (Sort_Type), ERecord ([LDDecl ([Ident "s1"], ESort (Sort_Str)); LDDecl ([Ident "s3"], ESort (Sort_Str)); LDDecl ([Ident "s4"], ETType (EIdent (Ident "VF"), ESort (Sort_Str))); LDDecl ([Ident "s5"], ESort (Sort_Str)); LDDecl ([Ident "s6"], ESort (Sort_Str)); LDDecl ([Ident "s7"], ETType (EIdent (Ident "Bool"), ESort (Sort_Str))); LDDecl ([Ident "aux"], EIdent (Ident "VAux")); LDDecl ([Ident "g"; Ident "g2"], EIdent (Ident "Gender")); LDDecl ([Ident "n"; Ident "n2"], EIdent (Ident "Number")); LDDecl ([Ident "p"], EIdent (Ident "Person"))])); DFull ([IdentName (Ident "verbClForm")], EProd (DExp (EIdent (Ident "Verb")), EProd (DExp (EIdent (Ident "ClForm")), EProd (DExp (EIdent (Ident "Gender")), EProd (DExp (EIdent (Ident "Number")), EProd (DExp (EIdent (Ident "Person")), EProd (DExp (EIdent (Ident "Gender")), EProd (DExp (EIdent (Ident "Number")), ETupTyp (ESort (Sort_Str), ESort (Sort_Str))))))))), EAbstr ([BIdent (Ident "verb"); BIdent (Ident "cl"); BIdent (Ident "g"); BIdent (Ident "n"); BIdent (Ident "p"); BIdent (Ident "g2"); BIdent (Ident "n2")], ELetb ([LDDef ([Ident "aimee"], ESelect (EProj (EIdent (Ident "verb"), LIdent (Ident "s")), EApp (EApp (EIdent (Ident "VPart"), EIdent (Ident "g2")), EIdent (Ident "n2")))); LDDef ([Ident "auxv"], EProj (EApp (EIdent (Ident "auxVerb"), EIdent (Ident "verb")), LIdent (Ident "s"))); LDFull ([Ident "aime"], EProd (DExp (EIdent (Ident "TMode")), ESort (Sort_Str)), EAbstr ([BIdent (Ident "t")], ESelect (EProj (EIdent (Ident "verb"), LIdent (Ident "s")), EApp (EApp (EApp (EIdent (Ident "VFin"), EIdent (Ident "t")), EIdent (Ident "n")), EIdent (Ident "p"))))); LDFull ([Ident "avoir"], EProd (DExp (EIdent (Ident "TMode")), ESort (Sort_Str)), EAbstr ([BIdent (Ident "t")], ESelect (EIdent (Ident "auxv"), EApp (EApp (EApp (EIdent (Ident "VFin"), EIdent (Ident "t")), EIdent (Ident "n")), EIdent (Ident "p"))))); LDDef ([Ident "aimer"], ESelect (EProj (EIdent (Ident "verb"), LIdent (Ident "s")), EIdent (Ident "VInfin"))); LDDef ([Ident "avoirr"], ESelect (EIdent (Ident "auxv"), EIdent (Ident "VInfin")))], ECase (EIdent (Ident "cl"), [CaseC ([AltP (PC (Ident "ClPres", [PV (Ident "Simul"); PV (Ident "m")]))], ETuple ([TComp (EApp (EIdent (Ident "aime"), EApp (EIdent (Ident "VPres"), EIdent (Ident "m")))); TComp (EEmpty)])); CaseC ([AltP (PC (Ident "ClPres", [PV (Ident "a"); PV (Ident "m")]))], ETuple ([TComp (EApp (EIdent (Ident "avoir"), EApp (EIdent (Ident "VPres"), EIdent (Ident "m")))); TComp (EIdent (Ident "aimee"))])); CaseC ([AltP (PC (Ident "ClImperf", [PV (Ident "Simul"); PV (Ident "m")]))], ETuple ([TComp (EApp (EIdent (Ident "aime"), EApp (EIdent (Ident "VImperf"), EIdent (Ident "m")))); TComp (EEmpty)])); CaseC ([AltP (PC (Ident "ClImperf", [PV (Ident "a"); PV (Ident "m")]))], ETuple ([TComp (EApp (EIdent (Ident "avoir"), EApp (EIdent (Ident "VImperf"), EIdent (Ident "m")))); TComp (EIdent (Ident "aimee"))])); CaseC ([AltP (PC (Ident "ClPasse", [PV (Ident "Simul")]))], ETuple ([TComp (EApp (EIdent (Ident "aime"), EIdent (Ident "VPasse"))); TComp (EEmpty)])); CaseC ([AltP (PC (Ident "ClPasse", [PV (Ident "a")]))], ETuple ([TComp (EApp (EIdent (Ident "avoir"), EIdent (Ident "VPasse"))); TComp (EIdent (Ident "aimee"))])); CaseC ([AltP (PC (Ident "ClFut", [PV (Ident "Simul")]))], ETuple ([TComp (EApp (EIdent (Ident "aime"), EIdent (Ident "VFut"))); TComp (EEmpty)])); CaseC ([AltP (PC (Ident "ClFut", [PV (Ident "a")]))], ETuple ([TComp (EApp (EIdent (Ident "avoir"), EIdent (Ident "VFut"))); TComp (EIdent (Ident "aimee"))])); CaseC ([AltP (PC (Ident "ClCondit", [PV (Ident "Simul")]))], ETuple ([TComp (EApp (EIdent (Ident "aime"), EIdent (Ident "VCondit"))); TComp (EEmpty)])); CaseC ([AltP (PC (Ident "ClCondit", [PV (Ident "a")]))], ETuple ([TComp (EApp (EIdent (Ident "avoir"), EIdent (Ident "VCondit"))); TComp (EIdent (Ident "aimee"))])); CaseC ([AltP (PC (Ident "ClInfinit", [PV (Ident "Simul")]))], ETuple ([TComp (EIdent (Ident "aimer")); TComp (EEmpty)])); CaseC ([AltP (PC (Ident "ClInfinit", [PV (Ident "a")]))], ETuple ([TComp (EIdent (Ident "avoirr")); TComp (EIdent (Ident "aimee"))]))])))); DFull ([IdentName (Ident "mkSats")], EProd (DExp (EIdent (Ident "NounPhrase")), EProd (DExp (EIdent (Ident "Verb")), EIdent (Ident "Sats"))), EAbstr ([BIdent (Ident "subj"); BIdent (Ident "verb")], ELetb ([LDFull ([Ident "ifEsse"], EProd (DDec ([BIdent (Ident "T")], ESort (Sort_Type)), EProd (DExp (EIdent (Ident "T")), EProd (DExp (EIdent (Ident "T")), EIdent (Ident "T")))), EAbstr ([BIdent (Ident "T"); BIdent (Ident "e"); BIdent (Ident "h")], ECase (EProj (EIdent (Ident "verb"), LIdent (Ident "aux")), [CaseC ([AltP (PV (Ident "AEsse"))], EIdent (Ident "e")); CaseC ([AltP (PV (Ident "AHabere"))], EIdent (Ident "h"))])))], ERecord ([LDDef ([Ident "s1"], ESelect (EProj (EIdent (Ident "subj"), LIdent (Ident "s")), EApp (EIdent (Ident "unstressed"), EIdent (Ident "nominative")))); LDDef ([Ident "s3"], EEmpty); LDDef ([Ident "s4"], EProj (EIdent (Ident "verb"), LIdent (Ident "s"))); LDDef ([Ident "s5"; Ident "s6"], EEmpty); LDDef ([Ident "s7"], ECTable ([BWild], EEmpty)); LDDef ([Ident "aux"], EProj (EIdent (Ident "verb"), LIdent (Ident "aux"))); LDDef ([Ident "g"], EApp (EIdent (Ident "pgen2gen"), EProj (EIdent (Ident "subj"), LIdent (Ident "g")))); LDDef ([Ident "n"], EProj (EIdent (Ident "subj"), LIdent (Ident "n"))); LDDef ([Ident "p"], EProj (EIdent (Ident "subj"), LIdent (Ident "p"))); LDDef ([Ident "g2"], EApp (EApp (EApp (EIdent (Ident "ifEsse"), EIdent (Ident "Gender")), EApp (EIdent (Ident "pgen2gen"), EProj (EIdent (Ident "subj"), LIdent (Ident "g")))), EIdent (Ident "Masc"))); LDDef ([Ident "n2"], EApp (EApp (EApp (EIdent (Ident "ifEsse"), EIdent (Ident "Number")), EProj (EIdent (Ident "subj"), LIdent (Ident "n"))), EIdent (Ident "Sg")))])))); DFull ([IdentName (Ident "insertObject")], EProd (DExp (EIdent (Ident "Sats")), EProd (DExp (EIdent (Ident "CaseA")), EProd (DExp (ESort (Sort_Str)), EProd (DExp (EIdent (Ident "NounPhrase")), EIdent (Ident "Sats"))))), EAbstr ([BIdent (Ident "sats"); BIdent (Ident "c"); BIdent (Ident "prep"); BIdent (Ident "obj")], ELetb ([LDFull ([Ident "ifClit"], EProd (DDec ([BIdent (Ident "T")], ESort (Sort_Type)), EProd (DExp (EIdent (Ident "T")), EProd (DExp (EIdent (Ident "T")), EIdent (Ident "T")))), EAbstr ([BIdent (Ident "T")], EApp (EApp (EIdent (Ident "if_then_else"), EIdent (Ident "T")), EApp (EApp (EIdent (Ident "andB"), EApp (EIdent (Ident "isNounPhraseClit"), EIdent (Ident "obj"))), EApp (EIdent (Ident "isClitCase"), EIdent (Ident "c")))))); LDDef ([Ident "object"], ESelect (EProj (EIdent (Ident "obj"), LIdent (Ident "s")), EApp (EIdent (Ident "case2pformClit"), EIdent (Ident "c")))); LDDef ([Ident "clit"], EApp (EApp (EApp (EIdent (Ident "ifClit"), ESort (Sort_Str)), EIdent (Ident "object")), EEmpty)); LDDef ([Ident "np"], EApp (EApp (EApp (EIdent (Ident "ifClit"), ESort (Sort_Str)), EEmpty), EIdent (Ident "object")))], ERecord ([LDDef ([Ident "s1"], EProj (EIdent (Ident "sats"), LIdent (Ident "s1"))); LDDef ([Ident "s3"], EConcat (EProj (EIdent (Ident "sats"), LIdent (Ident "s3")), EIdent (Ident "clit"))); LDDef ([Ident "s4"], EProj (EIdent (Ident "sats"), LIdent (Ident "s4"))); LDDef ([Ident "s5"], EProj (EIdent (Ident "sats"), LIdent (Ident "s5"))); LDDef ([Ident "s6"], EConcat (EProj (EIdent (Ident "sats"), LIdent (Ident "s6")), EConcat (EIdent (Ident "prep"), EIdent (Ident "np")))); LDDef ([Ident "s7"], EProj (EIdent (Ident "sats"), LIdent (Ident "s7"))); LDDef ([Ident "aux"], EProj (EIdent (Ident "sats"), LIdent (Ident "aux"))); LDDef ([Ident "g"], EProj (EIdent (Ident "sats"), LIdent (Ident "g"))); LDDef ([Ident "n"], EProj (EIdent (Ident "sats"), LIdent (Ident "n"))); LDDef ([Ident "g2"], EApp (EApp (EApp (EIdent (Ident "ifClit"), EIdent (Ident "Gender")), EApp (EIdent (Ident "pgen2gen"), EProj (EIdent (Ident "obj"), LIdent (Ident "g")))), EProj (EIdent (Ident "sats"), LIdent (Ident "g2")))); LDDef ([Ident "n2"], EApp (EApp (EApp (EIdent (Ident "ifClit"), EIdent (Ident "Number")), EProj (EIdent (Ident "obj"), LIdent (Ident "n"))), EProj (EIdent (Ident "sats"), LIdent (Ident "n2")))); LDDef ([Ident "p"], EProj (EIdent (Ident "sats"), LIdent (Ident "p")))])))); DFull ([IdentName (Ident "insertExtrapos")], EProd (DExp (EIdent (Ident "Sats")), EProd (DExp (ETType (EIdent (Ident "Bool"), ESort (Sort_Str))), EIdent (Ident "Sats"))), EAbstr ([BIdent (Ident "sats"); BIdent (Ident "obj")], ERecord ([LDDef ([Ident "s1"], EProj (EIdent (Ident "sats"), LIdent (Ident "s1"))); LDDef ([Ident "s3"], EProj (EIdent (Ident "sats"), LIdent (Ident "s3"))); LDDef ([Ident "s4"], EProj (EIdent (Ident "sats"), LIdent (Ident "s4"))); LDDef ([Ident "s5"], EProj (EIdent (Ident "sats"), LIdent (Ident "s5"))); LDDef ([Ident "s6"], EProj (EIdent (Ident "sats"), LIdent (Ident "s6"))); LDDef ([Ident "s7"], EIdent (Ident "obj")); LDDef ([Ident "aux"], EProj (EIdent (Ident "sats"), LIdent (Ident "aux"))); LDDef ([Ident "g"], EProj (EIdent (Ident "sats"), LIdent (Ident "g"))); LDDef ([Ident "n"], EProj (EIdent (Ident "sats"), LIdent (Ident "n"))); LDDef ([Ident "g2"], EProj (EIdent (Ident "sats"), LIdent (Ident "g2"))); LDDef ([Ident "n2"], EProj (EIdent (Ident "sats"), LIdent (Ident "n2"))); LDDef ([Ident "p"], EProj (EIdent (Ident "sats"), LIdent (Ident "p")))]))); DFull ([IdentName (Ident "mkSatsObject")], EProd (DExp (EIdent (Ident "NounPhrase")), EProd (DExp (EIdent (Ident "TransVerb")), EProd (DExp (EIdent (Ident "NounPhrase")), EIdent (Ident "Sats")))), EAbstr ([BIdent (Ident "subj"); BIdent (Ident "verb"); BIdent (Ident "obj")], EApp (EApp (EApp (EApp (EIdent (Ident "insertObject"), EApp (EApp (EIdent (Ident "mkSats"), EIdent (Ident "subj")), EIdent (Ident "verb"))), EProj (EIdent (Ident "verb"), LIdent (Ident "c"))), EProj (EIdent (Ident "verb"), LIdent (Ident "s2"))), EIdent (Ident "obj")))); DFull ([IdentName (Ident "mkSatsCopula")], EProd (DExp (EIdent (Ident "NounPhrase")), EProd (DExp (ESort (Sort_Str)), EIdent (Ident "Sats"))), EAbstr ([BIdent (Ident "subj"); BIdent (Ident "obj")], EApp (EApp (EApp (EIdent (Ident "mkSatsObject"), EIdent (Ident "subj")), EApp (EIdent (Ident "mkTransVerbDir"), EIdent (Ident "copula"))), EApp (EIdent (Ident "nameNounPhrase"), EApp (EApp (EIdent (Ident "mkProperName"), EIdent (Ident "obj")), EIdent (Ident "Masc")))))); DFull ([IdentName (Ident "sats2clause")], EProd (DExp (EIdent (Ident "Sats")), EIdent (Ident "Clause")), EAbstr ([BIdent (Ident "sats")], ERecord ([LDDef ([Ident "s"], ECTable ([BIdent (Ident "b"); BIdent (Ident "cf")], ELetb ([LDDef ([Ident "je"], EProj (EIdent (Ident "sats"), LIdent (Ident "s1"))); LDDef ([Ident "lui"], EProj (EIdent (Ident "sats"), LIdent (Ident "s3"))); LDDef ([Ident "dire"], EApp (EApp (EApp (EApp (EApp (EApp (EApp (EIdent (Ident "verbClForm"), ERecord ([LDDef ([Ident "s"], EProj (EIdent (Ident "sats"), LIdent (Ident "s4"))); LDDef ([Ident "aux"], EProj (EIdent (Ident "sats"), LIdent (Ident "aux")))])), EIdent (Ident "cf")), EProj (EIdent (Ident "sats"), LIdent (Ident "g"))), EProj (EIdent (Ident "sats"), LIdent (Ident "n"))), EProj (EIdent (Ident "sats"), LIdent (Ident "p"))), EProj (EIdent (Ident "sats"), LIdent (Ident "g2"))), EProj (EIdent (Ident "sats"), LIdent (Ident "n2")))); LDDef ([Ident "ai"], EProj (EIdent (Ident "dire"), LIdent (Ident "p1"))); LDDef ([Ident "dit"], EProj (EIdent (Ident "dire"), LIdent (Ident "p2"))); LDDef ([Ident "toujours"], EProj (EIdent (Ident "sats"), LIdent (Ident "s5"))); LDDef ([Ident "directement"], EProj (EIdent (Ident "sats"), LIdent (Ident "s6"))); LDDef ([Ident "ne"], EApp (EApp (EApp (EIdent (Ident "if_then_Str"), EIdent (Ident "b")), EEmpty), EIdent (Ident "negNe"))); LDDef ([Ident "pas"], EApp (EApp (EApp (EIdent (Ident "if_then_Str"), EIdent (Ident "b")), EEmpty), EIdent (Ident "negPas"))); LDDef ([Ident "oui"], ESelect (EProj (EIdent (Ident "sats"), LIdent (Ident "s7")), EIdent (Ident "b")))], EConcat (EIdent (Ident "je"), EConcat (EIdent (Ident "ne"), EConcat (EIdent (Ident "lui"), EConcat (EIdent (Ident "ai"), EConcat (EIdent (Ident "toujours"), EConcat (EIdent (Ident "pas"), EConcat (EIdent (Ident "dit"), EConcat (EIdent (Ident "directement"), EIdent (Ident "oui"))))))))))))]))); DDeclC ([IdentName (Ident "negNe"); IdentName (Ident "negPas")], ESort (Sort_Str)); DFull ([IdentName (Ident "sats2quest")], EProd (DExp (EIdent (Ident "Sats")), EIdent (Ident "Question")), EAbstr ([BIdent (Ident "x")], ELetb ([LDDef ([Ident "cl"], EApp (EIdent (Ident "sats2clause"), EIdent (Ident "x")))], ERecord ([LDDef ([Ident "s"], ECTable ([BIdent (Ident "b"); BIdent (Ident "f"); BWild], ESelect (ESelect (EProj (EIdent (Ident "cl"), LIdent (Ident "s")), EIdent (Ident "b")), EIdent (Ident "f"))))])))); DFull ([IdentName (Ident "sats2rel")], EProd (DExp (EProd (DExp (EIdent (Ident "Gender")), EProd (DExp (EIdent (Ident "Number")), EProd (DExp (EIdent (Ident "Person")), EIdent (Ident "Sats"))))), EIdent (Ident "RelClause")), EAbstr ([BIdent (Ident "s")], ERecord ([LDDef ([Ident "s1"], ECTable ([BIdent (Ident "g"); BIdent (Ident "n"); BIdent (Ident "p")], ELetb ([LDDef ([Ident "sats"], EApp (EApp (EApp (EIdent (Ident "s"), EIdent (Ident "g")), EIdent (Ident "n")), EIdent (Ident "p")))], EProj (EIdent (Ident "sats"), LIdent (Ident "s1"))))); LDDef ([Ident "s2"], ECTable ([BIdent (Ident "b"); BIdent (Ident "cf"); BIdent (Ident "g"); BIdent (Ident "n"); BIdent (Ident "p")], ELetb ([LDDef ([Ident "sats"], EApp (EApp (EApp (EIdent (Ident "s"), EIdent (Ident "g")), EIdent (Ident "n")), EIdent (Ident "p"))); LDDef ([Ident "lui"], EProj (EIdent (Ident "sats"), LIdent (Ident "s3"))); LDDef ([Ident "dire"], EApp (EApp (EApp (EApp (EApp (EApp (EApp (EIdent (Ident "verbClForm"), ERecord ([LDDef ([Ident "s"], EProj (EIdent (Ident "sats"), LIdent (Ident "s4"))); LDDef ([Ident "aux"], EProj (EIdent (Ident "sats"), LIdent (Ident "aux")))])), EIdent (Ident "cf")), EProj (EIdent (Ident "sats"), LIdent (Ident "g"))), EProj (EIdent (Ident "sats"), LIdent (Ident "n"))), EProj (EIdent (Ident "sats"), LIdent (Ident "p"))), EProj (EIdent (Ident "sats"), LIdent (Ident "g2"))), EProj (EIdent (Ident "sats"), LIdent (Ident "n2")))); LDDef ([Ident "ai"], EProj (EIdent (Ident "dire"), LIdent (Ident "p1"))); LDDef ([Ident "toujours"], EProj (EIdent (Ident "sats"), LIdent (Ident "s5"))); LDDef ([Ident "dit"], EProj (EIdent (Ident "dire"), LIdent (Ident "p2"))); LDDef ([Ident "ne"], EApp (EApp (EApp (EIdent (Ident "if_then_Str"), EIdent (Ident "b")), EEmpty), EIdent (Ident "negNe"))); LDDef ([Ident "pas"], EApp (EApp (EApp (EIdent (Ident "if_then_Str"), EIdent (Ident "b")), EEmpty), EIdent (Ident "negPas")))], EConcat (EIdent (Ident "ne"), EConcat (EIdent (Ident "lui"), EConcat (EIdent (Ident "ai"), EConcat (EIdent (Ident "toujours"), EConcat (EIdent (Ident "pas"), EIdent (Ident "dit"))))))))); LDDef ([Ident "s3"], ECTable ([BIdent (Ident "b")], ELetb ([LDDef ([Ident "sats"], EApp (EApp (EApp (EIdent (Ident "s"), EIdent (Ident "Masc")), EIdent (Ident "Sg")), EIdent (Ident "P3"))); LDDef ([Ident "directement"], EProj (EIdent (Ident "sats"), LIdent (Ident "s6"))); LDDef ([Ident "oui"], ESelect (EProj (EIdent (Ident "sats"), LIdent (Ident "s7")), EIdent (Ident "b")))], EConcat (EIdent (Ident "directement"), EIdent (Ident "oui")))))]))); DFull ([IdentName (Ident "relNounPhrase")], EProd (DExp (EIdent (Ident "RelPron")), EProd (DExp (EIdent (Ident "Gender")), EProd (DExp (EIdent (Ident "Number")), EProd (DExp (EIdent (Ident "Person")), EIdent (Ident "NounPhrase"))))), EAbstr ([BIdent (Ident "r"); BIdent (Ident "g"); BIdent (Ident "n"); BIdent (Ident "p")], ERecord ([LDDef ([Ident "s"], ECTable ([BIdent (Ident "np")], ESelect (EProj (EIdent (Ident "r"), LIdent (Ident "s")), EApp (EIdent (Ident "npRelForm"), EIdent (Ident "np"))))); LDDef ([Ident "g"], EApp (EIdent (Ident "PGen"), EIdent (Ident "g"))); LDDef ([Ident "n"], EIdent (Ident "n")); LDDef ([Ident "p"], EIdent (Ident "p")); LDDef ([Ident "c"], EIdent (Ident "Clit0"))]))); DFull ([IdentName (Ident "sats2verbPhrase")], EProd (DExp (EIdent (Ident "Sats")), EIdent (Ident "VerbClause")), EAbstr ([BIdent (Ident "sats")], ERecord ([LDDef ([Ident "s"], ECTable ([BIdent (Ident "b"); BIdent (Ident "ant"); BIdent (Ident "vi"); BIdent (Ident "g"); BIdent (Ident "n"); BIdent (Ident "p")], ELetb ([LDDef ([Ident "lui"], EProj (EIdent (Ident "sats"), LIdent (Ident "s3"))); LDDef ([Ident "dire"], EApp (EApp (EApp (EApp (EApp (EApp (EApp (EApp (EIdent (Ident "verbVIForm"), ERecord ([LDDef ([Ident "s"], EProj (EIdent (Ident "sats"), LIdent (Ident "s4"))); LDDef ([Ident "aux"], EProj (EIdent (Ident "sats"), LIdent (Ident "aux")))])), EIdent (Ident "ant")), EIdent (Ident "vi")), EIdent (Ident "g")), EIdent (Ident "n")), EIdent (Ident "p")), EProj (EIdent (Ident "sats"), LIdent (Ident "g2"))), EProj (EIdent (Ident "sats"), LIdent (Ident "n2")))); LDDef ([Ident "ai"], EProj (EIdent (Ident "dire"), LIdent (Ident "p1"))); LDDef ([Ident "dit"], EProj (EIdent (Ident "dire"), LIdent (Ident "p2"))); LDDef ([Ident "toujours"], EProj (EIdent (Ident "sats"), LIdent (Ident "s5"))); LDDef ([Ident "directement"], EProj (EIdent (Ident "sats"), LIdent (Ident "s6"))); LDDef ([Ident "ne"], EApp (EApp (EApp (EIdent (Ident "if_then_Str"), EIdent (Ident "b")), EEmpty), EIdent (Ident "negNe"))); LDDef ([Ident "pas"], EApp (EApp (EApp (EIdent (Ident "if_then_Str"), EIdent (Ident "b")), EEmpty), EIdent (Ident "negPas"))); LDDef ([Ident "oui"], ESelect (EProj (EIdent (Ident "sats"), LIdent (Ident "s7")), EIdent (Ident "b")))], EConcat (EIdent (Ident "ne"), EConcat (EIdent (Ident "lui"), EConcat (EIdent (Ident "ai"), EConcat (EIdent (Ident "toujours"), EConcat (EIdent (Ident "pas"), EConcat (EIdent (Ident "dit"), EConcat (EIdent (Ident "directement"), EIdent (Ident "oui")))))))))))]))); DFull ([IdentName (Ident "verbVIForm")], EProd (DExp (EIdent (Ident "Verb")), EProd (DExp (EIdent (Ident "Anteriority")), EProd (DExp (EIdent (Ident "VIForm")), EProd (DExp (EIdent (Ident "Gender")), EProd (DExp (EIdent (Ident "Number")), EProd (DExp (EIdent (Ident "Person")), EProd (DExp (EIdent (Ident "Gender")), EProd (DExp (EIdent (Ident "Number")), ETupTyp (ESort (Sort_Str), ESort (Sort_Str)))))))))), EAbstr ([BIdent (Ident "verb"); BIdent (Ident "ant"); BIdent (Ident "cl"); BIdent (Ident "g"); BIdent (Ident "n"); BIdent (Ident "p"); BIdent (Ident "g2"); BIdent (Ident "n2")], ELetb ([LDFull ([Ident "aime"], EProd (DExp (EIdent (Ident "Number")), ESort (Sort_Str)), EAbstr ([BIdent (Ident "t")], ESelect (EProj (EIdent (Ident "verb"), LIdent (Ident "s")), EApp (EApp (EIdent (Ident "vImper"), EIdent (Ident "t")), EIdent (Ident "P2"))))); LDDef ([Ident "aimee"], ECase (EIdent (Ident "ant"), [CaseC ([AltP (PV (Ident "Simul"))], EEmpty); CaseC ([AltP (PW)], ESelect (EProj (EIdent (Ident "verb"), LIdent (Ident "s")), EApp (EApp (EIdent (Ident "VPart"), EIdent (Ident "Masc")), EIdent (Ident "Sg"))))])); LDDef ([Ident "finverb"], ECase (EIdent (Ident "ant"), [CaseC ([AltP (PV (Ident "Simul"))], EProj (EIdent (Ident "verb"), LIdent (Ident "s"))); CaseC ([AltP (PW)], EProj (EApp (EIdent (Ident "auxVerb"), EIdent (Ident "verb")), LIdent (Ident "s")))])); LDDef ([Ident "aimer"], ESelect (EIdent (Ident "finverb"), EIdent (Ident "VInfin"))); LDDef ([Ident "aimant"], ESelect (EIdent (Ident "finverb"), EIdent (Ident "VGer")))], ECase (EIdent (Ident "cl"), [CaseC ([AltP (PC (Ident "VIImperat", [PW; PV (Ident "n")]))], ETuple ([TComp (EApp (EIdent (Ident "aime"), EIdent (Ident "n"))); TComp (EEmpty)])); CaseC ([AltP (PV (Ident "VIGerund"))], ETuple ([TComp (EIdent (Ident "aimant")); TComp (EIdent (Ident "aimee"))])); CaseC ([AltP (PV (Ident "VIInfinit"))], ETuple ([TComp (EIdent (Ident "aimer")); TComp (EIdent (Ident "aimee"))]))])))); DFull ([IdentName (Ident "predVerb0")], EProd (DExp (EIdent (Ident "Verb")), EIdent (Ident "Clause")), EAbstr ([BIdent (Ident "rain")], EApp (EIdent (Ident "sats2clause"), EApp (EApp (EIdent (Ident "mkSats"), EApp (EIdent (Ident "pronNounPhrase"), EIdent (Ident "pronImpers"))), EIdent (Ident "rain"))))); DDeclC ([IdentName (Ident "progressiveSats")], EProd (DExp (EIdent (Ident "NounPhrase")), EProd (DExp (EIdent (Ident "VerbPhrase")), EIdent (Ident "Sats"))))])]))]) [Linearized tree] interface SyntaxRomance = TypesRomance ** open Prelude, (CO = Coordination) in { flags coding = utf8 ; oper CommNoun : Type = { s : Number => Str ; g : Gender }; CommNounPhrase = CommNoun ; noun2CommNounPhrase : CommNounPhrase -> CommNoun = \ x -> x ; commonNounComp : CommNoun -> Str -> CommNoun = \ numero, detelephone -> { s = \ \ n => numero . s ! n ++ detelephone ; g = numero . g }; ProperName : Type = { s : Str ; g : Gender }; NounPhrase : Type = Pronoun ; nameNounPhrase : ProperName -> NounPhrase ; mkProperName : Str -> Gender -> ProperName = \ jean, m -> { s = jean ; g = m }; mkNameNounPhrase : Str -> Gender -> NounPhrase = \ jean, m -> nameNounPhrase (mkProperName jean m) ; nounPhraseOn : NounPhrase ; normalNounPhrase : (CaseA => Str) -> Gender -> Number -> NounPhrase = \ cs, g, n -> { s = \ \ p => cs ! pform2case p ; g = PGen g ; n = n ; p = P3 ; c = Clit0 }; pronNounPhrase : Pronoun -> NounPhrase = \ pro -> pro ; Numeral : Type = { s : Gender => Str ; n : Number ; isNo : Bool }; pronWithNum : Pronoun -> Numeral -> Pronoun = \ nous, deux -> { s = \ \ c => nous . s ! c ++ deux . s ! pgen2gen nous . g ; g = nous . g ; n = nous . n ; p = nous . p ; c = nous . c }; noNum : Numeral = { s = \ \ _ => [] ; n = Pl ; isNo = True }; existNounPhrase : NounPhrase -> Clause ; addSymbNounPhrase : NounPhrase -> Str -> NounPhrase = \ np, x -> { s = \ \ c => np . s ! c ++ x ; g = np . g ; n = np . n ; p = np . p ; c = np . c }; Determiner : Type = { s : Gender => Str ; n : Number }; DeterminerNum : Type = { s : Gender => Str }; detNounPhrase : Determiner -> CommNoun -> NounPhrase = \ tout, homme -> normalNounPhrase (\ \ c => prepCase c ++ tout . s ! homme . g ++ homme . s ! tout . n) homme . g tout . n ; numDetNounPhrase : DeterminerNum -> Numeral -> CommNounPhrase -> NounPhrase = \ tous, six, homme -> normalNounPhrase (\ \ c => prepCase c ++ tous . s ! homme . g ++ six . s ! homme . g ++ homme . s ! six . n) homme . g six . n ; justNumDetNounPhrase : DeterminerNum -> Numeral -> NounPhrase = \ tous, six -> normalNounPhrase (\ \ c => prepCase c ++ tous . s ! Masc ++ six . s ! Masc) Masc six . n ; mkDeterminer : Number -> Str -> Str -> Determiner = \ n, tous, toutes -> { s = genForms tous toutes ; n = n }; mkDeterminer1 : Number -> Str -> Determiner = \ n, chaque -> mkDeterminer n chaque chaque ; mkDeterminerNum : Str -> Str -> DeterminerNum = \ tous, toutes -> { s = \ \ g => genForms tous toutes ! g }; indefNounPhrase : Number -> CommNounPhrase -> NounPhrase = \ n, mec -> normalNounPhrase (\ \ c => artIndef mec . g n c ++ mec . s ! n) mec . g n ; indefNounPhraseNum : Numeral -> CommNounPhrase -> NounPhrase = \ nu, mec -> normalNounPhrase (\ \ c => case nu . isNo of { True => artIndef mec . g Pl c ++ mec . s ! Pl ; _ => prepCase c ++ nu . s ! mec . g ++ mec . s ! nu . n } ) mec . g nu . n ; defNounPhrase : Number -> CommNounPhrase -> NounPhrase = \ n, mec -> normalNounPhrase (\ \ c => artDef mec . g n c ++ mec . s ! n) mec . g n ; defNounPhraseNum : Numeral -> CommNounPhrase -> NounPhrase = \ nu, mec -> normalNounPhrase (\ \ c => artDef mec . g nu . n c ++ nu . s ! mec . g ++ mec . s ! nu . n) mec . g nu . n ; indefNoun : Number -> CommNounPhrase -> Str = \ n, mec -> (indefNounPhrase n mec) . s ! case2pform nominative ; npGenDet : Number -> NounPhrase -> CommNounPhrase -> NounPhrase = \ n, jeanne, mec -> let { str : CaseA => Str = case jeanne . c of { Clit0 => npGenDe n jeanne mec ; _ => npGenPoss n jeanne mec } } in normalNounPhrase str mec . g n ; npGenDetNum : Numeral -> NounPhrase -> CommNounPhrase -> NounPhrase = \ nu, jeanne, mec -> let { str : CaseA => Str = case jeanne . c of { Clit0 => npGenDeNum nu jeanne mec ; _ => npGenPossNum nu jeanne mec } } in normalNounPhrase str mec . g nu . n ; npGenDe : Number -> NounPhrase -> CommNounPhrase -> CaseA => Str = \ n, jeanne, mec -> \ \ c => artDef mec . g n c ++ mec . s ! n ++ jeanne . s ! case2pform genitive ; npGenDeNum : Numeral -> NounPhrase -> CommNounPhrase -> CaseA => Str = \ nu, jeanne, mec -> \ \ c => artDef mec . g nu . n c ++ nu . s ! mec . g ++ mec . s ! nu . n ++ jeanne . s ! case2pform genitive ; npGenPoss : Number -> NounPhrase -> CommNounPhrase -> CaseA => Str ; npGenPossNum : Numeral -> NounPhrase -> CommNounPhrase -> CaseA => Str ; nounThatSentence : CommNounPhrase -> Sentence -> CommNounPhrase = \ idee, x -> { s = \ \ n => idee . s ! n ++ elisQue ++ x . s ! Ind ; g = idee . g }; partitiveNounPhrase : Number -> CommNounPhrase -> NounPhrase ; Adjective : Type = Adj ** { p : Bool }; adjPre = True ; adjPost = False ; AdjPhrase : Type = Adjective ; adj2adjPhrase : Adjective -> AdjPhrase = \ x -> x ; mkAdjective : Adj -> Bool -> Adjective = \ adj, p -> adj ** { p = p }; AdjDegr = AdjComp ** { p : Bool }; mkAdjDegr : AdjComp -> Bool -> AdjDegr = \ adj, p -> adj ** { p = p }; mkAdjDegrLong : Adj -> Bool -> AdjDegr = \ adj, p -> adjCompLong adj ** { p = p }; positAdjPhrase : AdjDegr -> AdjPhrase = \ bon -> { s = bon . s ! Pos ; p = bon . p }; comparAdjPhrase : AdjDegr -> NounPhrase -> AdjPhrase = \ bon, toi -> { s = \ \ a => bon . s ! Comp ! a ++ comparConj ++ toi . s ! stressed accusative ; p = False }; comparConj : Str ; superlNounPhrase : AdjDegr -> CommNoun -> NounPhrase = \ bon, mec -> normalNounPhrase (\ \ c => artDef mec . g Sg c ++ if_then_else Str bon . p (bon . s ! Comp ! AF mec . g Sg ++ mec . s ! Sg) (mec . s ! Sg ++ artDef mec . g Sg nominative ++ bon . s ! Comp ! AF mec . g Sg)) mec . g Sg ; superlAdjPhrase : AdjDegr -> AdjPhrase = \ bon -> { s = \ \ a => artDef (genAForm a) (numAForm a) nominative ++ bon . s ! Comp ! a ; p = bon . p }; predAdjSent : (Adjective ** { mp, mn : Mode } ) -> Sentence -> Clause = \ adj, ildort -> sats2clause (insertExtrapos (mkSatsCopula pronImpers (adj . s ! AF Masc Sg)) (\ \ b => embedConj ++ ildort . s ! if_then_else Mode b adj . mp adj . mn)) ; predAdjSent2 : (AdjCompl ** { mp, mn : Mode } ) -> NounPhrase -> Adjective ** { mp, mn : Mode } = \ facile, jean -> complAdj facile jean ** { mp = facile . mp ; mn = facile . mn }; pronImpers : NounPhrase ; Preposition = Str ; Complement = { s2 : Preposition ; c : CaseA }; complement : Str -> Complement = \ par -> { s2 = par ; c = nominative }; complementDir : Complement = complement [] ; complementCas : CaseA -> Complement = \ c -> { s2 = [] ; c = c }; AdjCompl = AdjPhrase ** Complement ; mkAdjCompl : Adj -> Bool -> Complement -> AdjCompl = \ adj, p, c -> mkAdjective adj p ** c ; complAdj : AdjCompl -> NounPhrase -> AdjPhrase = \ relie, jean -> { s = \ \ a => relie . s ! a ++ relie . s2 ++ jean . s ! case2pform relie . c ; p = False }; modCommNounPhrase : AdjPhrase -> CommNounPhrase -> CommNounPhrase = \ bon, mec -> { s = \ \ n => if_then_else Str bon . p (bon . s ! AF mec . g n ++ mec . s ! n) (mec . s ! n ++ bon . s ! AF mec . g n) ; g = mec . g }; Function : Type = CommNounPhrase ** Complement ; appFunComm : Function -> NounPhrase -> CommNounPhrase = \ mere, jean -> { s = \ \ n => mere . s ! n ++ mere . s2 ++ jean . s ! case2pform mere . c ; g = mere . g }; Function2 = Function ** { s3 : Preposition ; c3 : CaseA }; appFun2 : Function2 -> NounPhrase -> Function = \ vol, paris -> { s = \ \ n => vol . s ! n ++ vol . s2 ++ paris . s ! case2pform vol . c ; g = vol . g ; s2 = vol . s3 ; c = vol . c3 }; funAsCommNounPhrase : Function -> CommNounPhrase = \ x -> x ; appFun : Bool -> Function -> NounPhrase -> NounPhrase = \ coll, mere, jean -> let n = jean . n ; g = mere . g ; nf = if_then_else Number coll Sg n in variants { defNounPhrase nf (appFunComm mere jean) ; npGenDet nf jean mere }; param VPForm = VPF Anteriority VF ; Anteriority = Simul | Anter ; VIForm = VIInfinit | VIImperat Bool Number | VIGerund ; oper VerbPhrase = { s : VIForm => Gender => Number => Person => Str }; VerbClause = { s : Bool => Anteriority => VIForm => Gender => Number => Person => Str }; vpf2vf : VPForm -> VF = \ vpf -> case vpf of { VPF _ vf => vf }; auxVerb : Verb -> Verb ; nombreVerbPhrase : VPForm -> Number = \ v -> case v of { VPF _ f => nombreVerb f }; personVerbPhrase : VPForm -> Person = \ v -> case v of { VPF _ f => personVerb f }; isNotImperative : VPForm -> Bool = \ v -> case v of { VPF _ (VImper _) => False ; _ => True }; negVerb : Str -> Str ; copula : Verb ; complVerbAdj : AdjCompl -> VerbPhrase -> AdjPhrase = \ facile, ouvrir -> { s = \ \ gn => facile . s ! gn ++ prepCase facile . c ++ facile . s2 ++ ouvrir . s ! VIInfinit ! Masc ! Sg ! P3 ; p = False }; complVerbAdj2 : Bool -> AdjCompl -> NounPhrase -> VerbPhrase -> AdjPhrase = \ b, facile, lui, nager -> { s = \ \ gn => facile . s ! gn ++ lui . s ! stressed dative ++ prepCase facile . c ++ facile . s2 ++ nager . s ! VIInfinit ! pgen2gen lui . g ! lui . n ! P3 ; p = False }; TransVerb : Type = Verb ** Complement ; complementOfTransVerb : TransVerb -> Complement = \ v -> { s2 = v . s2 ; c = v . c }; verbOfTransVerb : TransVerb -> Verb = \ v -> { s = v . s ; aux = v . aux }; isNounPhraseClit : NounPhrase -> Bool = \ n -> case n . c of { Clit0 => False ; _ => True }; isClitCase : CaseA -> Bool ; isTransVerbClit : TransVerb -> Bool = \ v -> isClitCase v . c ; isDitransVerbClit : DitransVerb -> Bool * Bool = \ v -> < isClitCase v . c, isClitCase v . c3 > ; reflPron : Number => Person => NPFormA => Str ; reflPronNounPhrase : Gender -> Number -> Person -> NounPhrase = \ g, n, p -> { s = reflPron ! n ! p ; g = PGen g ; n = n ; p = p ; c = Clit1 }; adjPastPart : Verb -> Adjective = \ verb -> { s = table { AF g n => verb . s ! VPart g n ; AA => verb . s ! VPart Masc Sg }; p = False }; mkTransVerb : Verb -> Preposition -> CaseA -> TransVerb = \ v, p, c -> v ** { s2 = p ; c = c }; mkTransVerbPrep : Verb -> Preposition -> TransVerb = \ passer, par -> mkTransVerb passer par accusative ; mkTransVerbCas : Verb -> CaseA -> TransVerb = \ penser, a -> mkTransVerb penser [] a ; mkTransVerbDir : Verb -> TransVerb = \ aimer -> mkTransVerbCas aimer accusative ; transAsVerb : TransVerb -> Verb = \ love -> love ; DitransVerb = TransVerb ** { s3 : Preposition ; c3 : CaseA }; mkDitransVerb : Verb -> Preposition -> CaseA -> Preposition -> CaseA -> DitransVerb = \ v, p1, c1, p2, c2 -> v ** { s2 = p1 ; c = c1 ; s3 = p2 ; c3 = c2 }; posNeg : Bool -> (verb, compl : Str) -> Str ; DitransVerbVerb = TransVerb ** { c3 : CaseA }; Adverb : Type = SS ; advVerbPhrase : VerbPhrase -> Adverb -> VerbPhrase = \ chante, bien -> { s = \ \ v, g, n, p => chante . s ! v ! g ! n ! p ++ bien . s }; prepNounPhrase : { s : Preposition ; c : CaseA } -> NounPhrase -> Adverb = \ dans, jean -> { s = dans . s ++ jean . s ! Ton dans . c }; justPrep : Preposition -> { s : Preposition ; c : CaseA } = \ sans -> { s = sans ; c = prepositional }; justCase : CaseA -> { s : Preposition ; c : CaseA } = \ nom -> { s = [] ; c = nom }; advCommNounPhrase : CommNounPhrase -> Adverb -> CommNounPhrase = \ mec, aparis -> { s = \ \ n => mec . s ! n ++ aparis . s ; g = mec . g }; advAdjPhrase : Adverb -> AdjPhrase -> AdjPhrase = \ trop, lent -> { s = \ \ a => trop . s ++ lent . s ! a ; p = lent . p }; Sentence : Type = SS1 Mode ; param Tense = Present | Past | Future | Condit ; ClForm = ClPres Anteriority Mode | ClImperf Anteriority Mode | ClPasse Anteriority | ClFut Anteriority | ClCondit Anteriority | ClInfinit Anteriority ; oper useClForm : Tense -> Anteriority -> Mode -> ClForm = \ t, a, m -> case t of { Present => ClPres a m ; Past => ClImperf a m ; Future => ClFut a ; Condit => ClCondit a }; Clause = { s : Bool => ClForm => Str }; SentenceVerb : Type = Verb ** { mp, mn : Mode }; subordMode : SentenceVerb -> Bool -> Mode = \ verb, b -> if_then_else Mode b verb . mp verb . mn ; verbSent : Verb -> Mode -> Mode -> SentenceVerb = \ v, mp, mn -> v ** { mp = mp ; mn = mn }; embedConj : Str ; VerbVerb : Type = Verb ** { c : CaseA }; mkVerbVerbDir : Verb -> VerbVerb = \ v -> v ** { c = accusative }; ClauseSlashNounPhrase = Clause ** Complement ; dummyNounPhrase : NounPhrase = mkNameNounPhrase [] Masc ; slashTransVerb : NounPhrase -> TransVerb -> ClauseSlashNounPhrase = \ np, v -> sats2clause (mkSatsObject np v dummyNounPhrase) ** complementOfTransVerb v ; slashVerbVerb : NounPhrase -> VerbVerb -> TransVerb -> ClauseSlashNounPhrase = \ subj, verb, tv -> sats2clause (insertExtrapos (mkSats subj verb) (\ \ _ => prepCase verb . c ++ tv . s ! VInfin)) ** complementOfTransVerb tv ; slashAdverb : Clause -> { s : Str ; c : CaseA } -> ClauseSlashNounPhrase = \ ilhabite, dans -> ilhabite ** { s2 = dans . s ; c = dans . c }; oper RelPron : Type = { s : RelFormA => Str ; g : RelGen }; RelClause : Type = { s1 : Gender => Number => Person => Str ; s2 : Bool => ClForm => Gender => Number => Person => Str ; s3 : Bool => Str }; RelSentence : Type = { s : Mode => Gender => Number => Person => Str }; mkGenRel : RelGen -> Gender -> Gender = \ rg, g -> case rg of { PGen gen => gen ; _ => g }; identRelPron : RelPron ; composRelPron : Gender -> Number -> CaseA -> Str ; funRelPron : Function -> RelPron -> RelPron ; allRelForms : RelPron -> Gender -> Number -> CaseA -> Str ; relSlash : RelPron -> ClauseSlashNounPhrase -> RelClause = \ dont, jeparle -> { s1 = \ \ g, n, p => jeparle . s2 ++ allRelForms dont g n jeparle . c ; s2 = \ \ b, cl, g, n, p => jeparle . s ! b ! cl ; s3 = \ \ _ => [] }; relSuch : Clause -> RelClause = \ A -> { s1 = \ \ g, n, p => suchPron g n ; s2 = \ \ b, cl, g, n, p => embedConj ++ A . s ! b ! cl ; s3 = \ \ _ => [] }; suchPron : Gender -> Number -> Str ; modRelClause : CommNounPhrase -> RelSentence -> CommNounPhrase = \ mec, quidort -> { s = \ \ n => mec . s ! n ++ quidort . s ! Ind ! mec . g ! n ! P3 ; g = mec . g }; IntPron : Type = { s : CaseA => Str ; g : Gender ; n : Number }; funIntPron : Function -> IntPron -> IntPron = \ mere, qui -> { s = \ \ c => artDef mere . g qui . n c ++ mere . s ! qui . n ++ mere . s2 ++ qui . s ! mere . c ; g = mere . g ; n = qui . n }; nounIntPron : Number -> CommNounPhrase -> IntPron ; intPronWho : Number -> IntPron ; intPronWhat : Number -> IntPron ; Utterance = SS ; indicUtt : Sentence -> Utterance = \ x -> ss (x . s ! Ind ++ ".") ; interrogUtt : QuestionSent -> Utterance = \ x -> ss (x . s ! DirQ ++ "?") ; param QuestForm = DirQ | IndirQ ; oper Question = { s : Bool => ClForm => QuestForm => Str }; QuestionSent = { s : QuestForm => Str }; questClause : Clause -> Question = \ cl -> { s = \ \ b, c => table { DirQ => cl . s ! b ! c ; IndirQ => cl . s ! b ! c } }; intSlash : IntPron -> ClauseSlashNounPhrase -> Question ; intNounPhrase : IntPron -> NounPhrase = \ ip -> { s = \ \ nf => ip . s ! pform2case nf ; g = PGen ip . g ; n = ip . n ; p = P3 ; c = Clit0 }; IntAdverb = SS ; questAdverbial : IntAdverb -> Clause -> Question = \ quand, jeanDort -> { s = \ \ b, cl => let jeandort = jeanDort . s ! b ! cl in table { DirQ => quand . s ++ jeandort ; IndirQ => quand . s ++ jeandort } }; Imperative = { s : Gender => Number => Str }; imperVerbPhrase : Bool -> VerbClause -> Imperative = \ b, dormir -> { s = \ \ g, n => dormir . s ! b ! Simul ! VIImperat b n ! g ! n ! P2 }; imperUtterance : Number -> Imperative -> Utterance = \ n, I -> ss (I . s ! Masc ! n ++ "!") ; advClause : Clause -> Adverb -> Clause = \ yousing, well -> { s = \ \ b, c => yousing . s ! b ! c ++ well . s }; advSentence : SS -> Sentence -> Utterance = \ donc, ildort -> ss (donc . s ++ ildort . s ! Ind ++ ".") ; Conjunction = CO . Conjunction ** { n : Number }; ConjunctionDistr = CO . ConjunctionDistr ** { n : Number }; ListSentence : Type = { s1, s2 : Mode => Str }; twoSentence : (_, _ : Sentence) -> ListSentence = CO . twoTable Mode ; consSentence : ListSentence -> Sentence -> ListSentence = CO . consTable Mode CO . comma ; conjunctSentence : Conjunction -> ListSentence -> Sentence = CO . conjunctTable Mode ; conjunctDistrSentence : ConjunctionDistr -> ListSentence -> Sentence = CO . conjunctDistrTable Mode ; ListAdjPhrase : Type = { s1, s2 : AForm => Str ; p : Bool }; twoAdjPhrase : (_, _ : AdjPhrase) -> ListAdjPhrase = \ x, y -> CO . twoTable AForm x y ** { p = andB x . p y . p }; consAdjPhrase : ListAdjPhrase -> AdjPhrase -> ListAdjPhrase = \ xs, x -> CO . consTable AForm CO . comma xs x ** { p = andB xs . p x . p }; conjunctAdjPhrase : Conjunction -> ListAdjPhrase -> AdjPhrase = \ c, xs -> CO . conjunctTable AForm c xs ** { p = xs . p }; conjunctDistrAdjPhrase : ConjunctionDistr -> ListAdjPhrase -> AdjPhrase = \ c, xs -> CO . conjunctDistrTable AForm c xs ** { p = xs . p }; ListNounPhrase : Type = { s1, s2 : CaseA => Str ; g : PronGen ; n : Number ; p : Person }; twoNounPhrase : (_, _ : NounPhrase) -> ListNounPhrase = \ x, y -> { s1 = \ \ c => x . s ! stressed c ; s2 = \ \ c => y . s ! stressed (conjunctCase c) } ** { n = conjNumber x . n y . n ; g = conjGender x . g y . g ; p = conjPers x . p y . p }; consNounPhrase : ListNounPhrase -> NounPhrase -> ListNounPhrase = \ xs, x -> { s1 = \ \ c => xs . s1 ! c ++ CO . comma ++ xs . s2 ! conjunctCase c ; s2 = \ \ c => x . s ! stressed (conjunctCase c) } ** { n = conjNumber xs . n x . n ; g = conjGender xs . g x . g ; p = conjPers xs . p x . p }; conjunctCase : CaseA -> CaseA ; conjunctNounPhrase : Conjunction -> ListNounPhrase -> NounPhrase = \ co, xs -> { s = \ \ c => xs . s1 ! pform2case c ++ co . s ++ xs . s2 ! pform2case c } ** { n = conjNumber co . n xs . n ; g = xs . g ; p = xs . p ; c = Clit0 }; conjunctDistrNounPhrase : ConjunctionDistr -> ListNounPhrase -> NounPhrase = \ co, xs -> { s = \ \ c => co . s1 ++ xs . s1 ! pform2case c ++ co . s2 ++ xs . s2 ! pform2case c } ** { n = conjNumber co . n xs . n ; g = xs . g ; p = xs . p ; c = Clit0 }; conjNumber : Number -> Number -> Number = \ m, n -> case < m, n > of { < Sg, Sg > => Sg ; _ => Pl }; conjGen : Gender -> Gender -> Gender = \ m, n -> case < m, n > of { < Fem, Fem > => Fem ; _ => Masc }; conjGender : PronGen -> PronGen -> PronGen = \ m, n -> case < m, n > of { < PGen Fem, PGen Fem > => PGen Fem ; _ => PNoGen }; conjPers : Person -> Person -> Person = \ p, q -> case < p, q > of { < P3, P3 > => P3 ; < P1, _ > => P1 ; < _, P1 > => P1 ; _ => P2 }; ListAdverb : Type = SD2 ; twoAdverb : (_, _ : Adverb) -> ListAdverb = CO . twoSS ; consAdverb : ListAdverb -> Adverb -> ListAdverb = CO . consSS CO . comma ; conjunctAdverb : Conjunction -> ListAdverb -> Adverb = \ c, xs -> ss (CO . conjunctX c xs) ; conjunctDistrAdverb : ConjunctionDistr -> ListAdverb -> Adverb = \ c, xs -> ss (CO . conjunctDistrX c xs) ; Subjunction = { s : Str ; m : Mode }; subjunctSentence : Subjunction -> Sentence -> Sentence -> Sentence = \ si, A, B -> { s = \ \ m => subjunctVariants si A (B . s ! m) }; subjunctImperative : Subjunction -> Sentence -> Imperative -> Imperative = \ si, A, B -> { s = \ \ g, n => subjunctVariants si A (B . s ! g ! n) }; subjunctQuestion : Subjunction -> Sentence -> QuestionSent -> QuestionSent = \ si, A, B -> { s = \ \ q => subjunctVariants si A (B . s ! q) }; subjunctVariants : Subjunction -> Sentence -> Str -> Str = \ si, A, B -> let { As = A . s ! si . m } in variants { si . s ++ As ++ B ; B ++ si . s ++ As }; useNounPhrase : NounPhrase -> Utterance = \ jean -> postfixSS "." (defaultNounPhrase jean) ; useCommonNounPhrase : Number -> CommNounPhrase -> Utterance = \ n, mec -> useNounPhrase (indefNounPhrase n mec) ; verbUtterance : VerbPhrase -> Utterance = \ vp -> ss (vp . s ! VIInfinit ! Masc ! Sg ! P3) ; defaultNounPhrase : NounPhrase -> SS = \ jean -> ss (jean . s ! stressed nominative) ; defaultQuestion : QuestionSent -> SS = \ quiesttu -> ss (quiesttu . s ! DirQ) ; defaultSentence : Sentence -> SS = \ x -> ss (x . s ! Ind) ; artDef : Gender -> Number -> CaseA -> Str ; artIndef : Gender -> Number -> CaseA -> Str ; genForms : Str -> Str -> Gender => Str ; pronJe, pronTu, pronIl, pronElle, pronNous, pronVous, pronIls, pronElles : Pronoun ; chaqueDet, quelDet, plupartDet : Determiner ; commentAdv, quandAdv, ouAdv, pourquoiAdv : Adverb ; etConj, ouConj : Conjunction ; etetConj, ououConj : ConjunctionDistr ; siSubj, quandSubj : Subjunction ; ouiPhr, noPhr : Utterance ; Sats : Type = { s1 : Str ; s3 : Str ; s4 : VF => Str ; s5 : Str ; s6 : Str ; s7 : Bool => Str ; aux : VAux ; g, g2 : Gender ; n, n2 : Number ; p : Person }; verbClForm : Verb -> ClForm -> Gender -> Number -> Person -> Gender -> Number -> Str * Str = \ verb, cl, g, n, p, g2, n2 -> let aimee = verb . s ! VPart g2 n2 ; auxv = (auxVerb verb) . s ; aime : TMode -> Str = \ t -> verb . s ! VFin t n p ; avoir : TMode -> Str = \ t -> auxv ! VFin t n p ; aimer = verb . s ! VInfin ; avoirr = auxv ! VInfin in case cl of { ClPres Simul m => < aime (VPres m), [] > ; ClPres a m => < avoir (VPres m), aimee > ; ClImperf Simul m => < aime (VImperf m), [] > ; ClImperf a m => < avoir (VImperf m), aimee > ; ClPasse Simul => < aime VPasse, [] > ; ClPasse a => < avoir VPasse, aimee > ; ClFut Simul => < aime VFut, [] > ; ClFut a => < avoir VFut, aimee > ; ClCondit Simul => < aime VCondit, [] > ; ClCondit a => < avoir VCondit, aimee > ; ClInfinit Simul => < aimer, [] > ; ClInfinit a => < avoirr, aimee > }; mkSats : NounPhrase -> Verb -> Sats = \ subj, verb -> let ifEsse : (T : Type) -> T -> T -> T = \ T, e, h -> case verb . aux of { AEsse => e ; AHabere => h } in { s1 = subj . s ! unstressed nominative ; s3 = [] ; s4 = verb . s ; s5, s6 = [] ; s7 = \ \ _ => [] ; aux = verb . aux ; g = pgen2gen subj . g ; n = subj . n ; p = subj . p ; g2 = ifEsse Gender (pgen2gen subj . g) Masc ; n2 = ifEsse Number subj . n Sg }; insertObject : Sats -> CaseA -> Str -> NounPhrase -> Sats = \ sats, c, prep, obj -> let ifClit : (T : Type) -> T -> T -> T = \ T -> if_then_else T (andB (isNounPhraseClit obj) (isClitCase c)) ; object = obj . s ! case2pformClit c ; clit = ifClit Str object [] ; np = ifClit Str [] object in { s1 = sats . s1 ; s3 = sats . s3 ++ clit ; s4 = sats . s4 ; s5 = sats . s5 ; s6 = sats . s6 ++ prep ++ np ; s7 = sats . s7 ; aux = sats . aux ; g = sats . g ; n = sats . n ; g2 = ifClit Gender (pgen2gen obj . g) sats . g2 ; n2 = ifClit Number obj . n sats . n2 ; p = sats . p }; insertExtrapos : Sats -> (Bool => Str) -> Sats = \ sats, obj -> { s1 = sats . s1 ; s3 = sats . s3 ; s4 = sats . s4 ; s5 = sats . s5 ; s6 = sats . s6 ; s7 = obj ; aux = sats . aux ; g = sats . g ; n = sats . n ; g2 = sats . g2 ; n2 = sats . n2 ; p = sats . p }; mkSatsObject : NounPhrase -> TransVerb -> NounPhrase -> Sats = \ subj, verb, obj -> insertObject (mkSats subj verb) verb . c verb . s2 obj ; mkSatsCopula : NounPhrase -> Str -> Sats = \ subj, obj -> mkSatsObject subj (mkTransVerbDir copula) (nameNounPhrase (mkProperName obj Masc)) ; sats2clause : Sats -> Clause = \ sats -> { s = \ \ b, cf => let je = sats . s1 ; lui = sats . s3 ; dire = verbClForm { s = sats . s4 ; aux = sats . aux } cf sats . g sats . n sats . p sats . g2 sats . n2 ; ai = dire . p1 ; dit = dire . p2 ; toujours = sats . s5 ; directement = sats . s6 ; ne = if_then_Str b [] negNe ; pas = if_then_Str b [] negPas ; oui = sats . s7 ! b in je ++ ne ++ lui ++ ai ++ toujours ++ pas ++ dit ++ directement ++ oui }; negNe, negPas : Str ; sats2quest : Sats -> Question = \ x -> let cl = sats2clause x in { s = \ \ b, f, _ => cl . s ! b ! f }; sats2rel : (Gender -> Number -> Person -> Sats) -> RelClause = \ s -> { s1 = \ \ g, n, p => let sats = s g n p in sats . s1 ; s2 = \ \ b, cf, g, n, p => let sats = s g n p ; lui = sats . s3 ; dire = verbClForm { s = sats . s4 ; aux = sats . aux } cf sats . g sats . n sats . p sats . g2 sats . n2 ; ai = dire . p1 ; toujours = sats . s5 ; dit = dire . p2 ; ne = if_then_Str b [] negNe ; pas = if_then_Str b [] negPas in ne ++ lui ++ ai ++ toujours ++ pas ++ dit ; s3 = \ \ b => let sats = s Masc Sg P3 ; directement = sats . s6 ; oui = sats . s7 ! b in directement ++ oui }; relNounPhrase : RelPron -> Gender -> Number -> Person -> NounPhrase = \ r, g, n, p -> { s = \ \ np => r . s ! npRelForm np ; g = PGen g ; n = n ; p = p ; c = Clit0 }; sats2verbPhrase : Sats -> VerbClause = \ sats -> { s = \ \ b, ant, vi, g, n, p => let lui = sats . s3 ; dire = verbVIForm { s = sats . s4 ; aux = sats . aux } ant vi g n p sats . g2 sats . n2 ; ai = dire . p1 ; dit = dire . p2 ; toujours = sats . s5 ; directement = sats . s6 ; ne = if_then_Str b [] negNe ; pas = if_then_Str b [] negPas ; oui = sats . s7 ! b in ne ++ lui ++ ai ++ toujours ++ pas ++ dit ++ directement ++ oui }; verbVIForm : Verb -> Anteriority -> VIForm -> Gender -> Number -> Person -> Gender -> Number -> Str * Str = \ verb, ant, cl, g, n, p, g2, n2 -> let aime : Number -> Str = \ t -> verb . s ! vImper t P2 ; aimee = case ant of { Simul => [] ; _ => verb . s ! VPart Masc Sg }; finverb = case ant of { Simul => verb . s ; _ => (auxVerb verb) . s }; aimer = finverb ! VInfin ; aimant = finverb ! VGer in case cl of { VIImperat _ n => < aime n, [] > ; VIGerund => < aimant, aimee > ; VIInfinit => < aimer, aimee > }; predVerb0 : Verb -> Clause = \ rain -> sats2clause (mkSats (pronNounPhrase pronImpers) rain) ; progressiveSats : NounPhrase -> VerbPhrase -> Sats ; }