diff --git a/examples/query/LexQuery.gf b/examples/query/LexQuery.gf new file mode 100644 index 000000000..9bbb67949 --- /dev/null +++ b/examples/query/LexQuery.gf @@ -0,0 +1,36 @@ +interface LexQuery = open Syntax in { + +oper + located_A : A ; + give_V3 : V3 ; + know_V2 : V2 ; + +-- structural words + about_Prep : Prep ; + all_NP : NP ; + also_AdV : AdV ; + also_AdA : AdA ; + as_Prep : Prep ; + at_Prep : Prep ; + that_RP : RP ; + + called_A : A ; + + participlePropCN : Prop -> CN -> CN ; + + vpAP : VP -> AP ; + + information_N : N ; + other_A : A ; + otherwise_AdV : AdV ; + otherwise_AdA : AdA ; + what_IQuant : IQuant ; + +-- lincats + Fun = {cn : CN ; prep : Prep} ; + Prop = {ap : AP ; vp : VP} ; + Rel = {ap : AP ; vp : VP ; prep : Prep} ; + + + +} diff --git a/examples/query/LexQueryEng.gf b/examples/query/LexQueryEng.gf new file mode 100644 index 000000000..74b3c860c --- /dev/null +++ b/examples/query/LexQueryEng.gf @@ -0,0 +1,32 @@ +instance LexQueryEng of LexQuery = + open SyntaxEng, (M = MakeStructuralEng), ParadigmsEng, ExtraEng, IrregEng in { + +oper + located_A : A = mkA "located" | mkA "situated" ; + + give_V3 : V3 = mkV3 give_V ; + know_V2 = mkV2 know_V ; + +-- structural words + about_Prep : Prep = mkPrep "about" ; + all_NP : NP = mkNP (mkPN "all") ; --- + also_AdV : AdV = mkAdV "also" ; + also_AdA : AdA = mkAdA "also" ; + as_Prep : Prep = mkPrep "as" ; + at_Prep : Prep = mkPrep "at" ; + that_RP = ExtraEng.that_RP ; + + participlePropCN : Prop -> CN -> CN = \p,k -> mkCN p.ap k ; + + vpAP = PartVP ; + + called_A : A = mkA "called" | mkA "named" ; + + information_N : N = mkN "information" ; + other_A : A = mkA "other" ; + otherwise_AdV : AdV = mkAdV "otherwise" ; + otherwise_AdA : AdA = mkAdA "otherwise" ; + what_IQuant : IQuant = M.mkIQuant "what" "what" ; + + +} diff --git a/examples/query/LexQuerySwe.gf b/examples/query/LexQuerySwe.gf new file mode 100644 index 000000000..8d95e840b --- /dev/null +++ b/examples/query/LexQuerySwe.gf @@ -0,0 +1,32 @@ +instance LexQuerySwe of LexQuery = + open SyntaxSwe, (M = MakeStructuralSwe), ParadigmsSwe, ExtraSwe, IrregSwe in { + +oper + located_A : A = compoundA (mkA "belägen" "beläget" "belägna" [] []) ; + + give_V3 : V3 = mkV3 giva_V ; + know_V2 = mkV2 veta_V ; + +-- structural words + about_Prep : Prep = mkPrep "om" ; + all_NP : NP = mkNP (mkPN "allt") ; --- + also_AdV : AdV = mkAdV "också" ; + also_AdA : AdA = mkAdA "även" ; + as_Prep : Prep = mkPrep "som" ; + at_Prep : Prep = mkPrep "på" ; --- | mkPrep "hos" | mkPrep "vid" ; + that_RP = which_RP ; + + participlePropCN : Prop -> CN -> CN = variants {} ; + + vpAP _ = mkAP (mkA "obefintlig") ; --- not used, see LexQuery.participlePropCN + + called_A : A = compoundA (mkA "kallad" "kallat" "kallade" "kallade" "kallade") ; + + information_N : N = mkN "information" "informationer" ; + other_A : A = compoundA (mkA "annan" "annat" "andra" "andra" "andra") ; + otherwise_AdV : AdV = mkAdV "annars" ; + otherwise_AdA : AdA = mkAdA "annars" ; + what_IQuant : IQuant = which_IQuant ; + + +} diff --git a/examples/query/QueryEng.gf b/examples/query/QueryEng.gf index 7ab5c2ef5..0cd9c74b7 100644 --- a/examples/query/QueryEng.gf +++ b/examples/query/QueryEng.gf @@ -1,6 +1,11 @@ --# -path=.:present -concrete QueryEng of Query = open +concrete QueryEng of Query = QueryI with + (Syntax = SyntaxEng), + (Lang = LangEng), + (LexQuery = LexQueryEng) ** +open + LexQueryEng, ParadigmsEng, IrregEng, SyntaxEng, @@ -10,193 +15,10 @@ concrete QueryEng of Query = open Prelude in { -lincat - Move = Utt ; ---- Text ; - Query = Utt ; - Answer = Cl ; -- Utt ; - Set = NP ; - Interrogative = IP ; - Function = {cn : CN ; prep : Prep} ; - Kind = CN ; - Property = {ap : AP ; vp : VP} ; - Relation = {ap : AP ; vp : VP ; prep : Prep} ; - Individual = NP ; - Name = NP ; - [Individual] = [NP] ; - -lin - MQuery q = q ; ---- mkText (mkPhr q) questMarkPunct ; - MAnswer a = mkUtt a ; ---- mkText (mkPhr a) fullStopPunct ; - - QSet s = - let - ss : NP = s - | mkNP (mkNP theSg_Det L.name_N) (mkAdv possess_Prep s) - | mkNP (mkNP thePl_Det L.name_N) (mkAdv possess_Prep s) - | mkNP (GenNP s) sgNum L.name_N - | mkNP (GenNP s) plNum L.name_N ; - in - mkUtt (mkImp (mkVP give_V3 ss (mkNP i_Pron))) - | mkUtt (mkQS (mkQCl (L.CompIP whatSg_IP) ss)) - | mkUtt (mkQS (mkQCl (L.CompIP (L.IdetIP (mkIDet which_IQuant))) ss)) - | mkUtt ss ; - - QWhere s = - mkUtt (mkQS (mkQCl where_IAdv s)) - | mkUtt (mkQS (mkQCl where_IAdv (mkCl s (mkA "located" | mkA "situated")))) ; - QWhat i p = mkUtt (mkQS (mkQCl i p.vp)) ; - QWhatWhat i j p = mkUtt (mkQS (QuestQVP i (AdvQVP p.vp (mkIAdv p.prep j)))) ; - QWhatWhere i p = mkUtt (mkQS (QuestQVP i (AdvQVP p.vp where_IAdv))) ; - QRelWhere s p = mkUtt (mkQS (mkQCl where_IAdv (mkCl s p.vp))) ; - - QFun r s = - mkUtt - (mkImp (mkVP give_V3 - (mkNP and_Conj s (mkNP (mkQuant they_Pron) plNum r.cn)) (mkNP i_Pron))) - | mkUtt (mkQS (mkQCl (mkIP what_IQuant plNum r.cn) s have_V2)) - | mkUtt (mkQS (mkQCl whatSg_IP - (mkClSlash (mkClSlash s have_V2) (mkAdv as_Prep (mkNP aPl_Det r.cn))))) ; - - QFunPair s f = - let - ss0 : NP = s - | mkNP (mkNP thePl_Det L.name_N) (mkAdv possess_Prep s) ; - ss : NP = mkNP and_Conj ss0 (mkNP (mkQuant they_Pron) plNum f.cn) - | mkNP ss0 (mkAdv with_Prep (mkNP (mkQuant they_Pron) plNum f.cn)) - in - mkUtt (mkImp (mkVP give_V3 ss (mkNP i_Pron))) - | mkUtt (mkQS (mkQCl (L.CompIP whatPl_IP) ss)) - | mkUtt (mkQS (mkQCl (L.CompIP (L.IdetIP (mkIDet which_IQuant))) ss)) - | mkUtt ss ; - - QInfo s = - let - info : NP = mkNP (all_NP | (mkNP information_N)) (mkAdv about_Prep s) ; - in - mkUtt (mkImp (mkVP give_V3 info (mkNP i_Pron))) - | mkUtt (mkQCl whatSg_IP - (mkClSlash (mkClSlash (mkNP youSg_Pron) (mkV2 know_V)) (mkAdv about_Prep s))) - | mkUtt info ; - - QCalled i = mkUtt (mkQS (mkQCl how_IAdv (mkCl i - (mkVP (also_AdV | otherwise_AdV) (mkVP called_A))))) ; - - QWhether a = mkUtt (mkQS a) ; - - AKind s k = (mkCl s (L.UseComp (L.CompCN k))) ; - AInd s i = (mkCl s i) ; - AName s n = (mkCl n (mkNP the_Det (mkCN L.name_N (mkAdv possess_Prep s)))) ; - AProp s p = (mkCl s p.vp) ; - - SAll k = mkNP all_Predet (mkNP aPl_Det k) | mkNP thePl_Det k ; - SFun s r = mkNP (GenNP s) plNum r.cn | mkNP (GenNP s) sgNum r.cn ; - SOne k = mkNP n1_Numeral k ; - SIndef k = mkNP a_Det k ; - SDef k = mkNP the_Det k ; - SPlural k = mkNP aPl_Det k ; - SOther k = mkNP aPl_Det (mkCN other_A k) ; - SInd i = i ; - SInds is = mkNP and_Conj is ; - - IWhich k = - mkIP what_IQuant (sgNum | plNum) k - | mkIP which_IQuant (sgNum | plNum) k ; - - IWho = whoSg_IP | whoPl_IP ; - IWhat = whatSg_IP | whatPl_IP ; - - KFunSet r s = - mkCN r.cn (mkAdv r.prep s) ; - - KFunsSet r q s = - mkCN (ConjCN and_Conj (BaseCN r.cn q.cn)) (mkAdv r.prep s) ; - - KFunKind k r s = - mkCN k (mkRS (mkRCl that_RP (mkVP (mkNP aPl_Det (mkCN r.cn (mkAdv r.prep s)))))) ; - - KFunPair k r = mkCN k (mkAdv with_Prep (mkNP (mkQuant they_Pron) plNum r.cn)) ; - KProp p k = - mkCN p.ap k - | mkCN k (mkRS (mkRCl that_RP p.vp)) ; - KFun r = r.cn ; - - IName n = n ; - - PCalled i = propCalled i ; - PCalleds is = propCalled (mkNP or_Conj is) ; - - PIs i = propVP (mkVP i) ; - - PRelation r s = { - ap = AdvAP r.ap (mkAdv r.prep s) ; - vp = mkVP r.vp (mkAdv r.prep s) - } ; - - BaseIndividual = mkListNP ; - ConsIndividual = mkListNP ; - -oper --- structural words - about_Prep = mkPrep "about" ; - all_NP = mkNP (mkPN "all") ; --- - also_AdV = mkAdV "also" ; - also_AdA = mkAdA "also" ; - as_Prep = mkPrep "as" ; - at_Prep = mkPrep "at" ; - called_A = mkA "called" | mkA "named" ; - give_V3 = mkV3 give_V ; - information_N = mkN "information" ; - other_A = mkA "other" ; - otherwise_AdV = mkAdV "otherwise" ; - otherwise_AdA = mkAdA "otherwise" ; - what_IQuant = M.mkIQuant "what" "what" ; - --- lexical constructors - mkName : Str -> NP = - \s -> mkNP (mkPN s) ; - mkFunction : Str -> {cn : CN ; prep : Prep} = - \s -> {cn = mkCN (mkN s) ; prep = possess_Prep} ; - - propAP : AP -> {ap : AP ; vp : VP} = \ap -> { - ap = ap ; - vp = mkVP ap - } ; - - propVP : VP -> {ap : AP ; vp : VP} = \vp -> { - ap = PartVP vp ; - vp = vp - } ; - - relAP : AP -> Prep -> {ap : AP ; vp : VP ; prep : Prep} = \ap,p -> { - ap = ap ; - vp = mkVP ap ; - prep = p - } ; - - relVP : VP -> Prep -> {ap : AP ; vp : VP ; prep : Prep} = \vp,p -> { - ap = PartVP vp ; - vp = vp ; - prep = p - } ; - - propCalled : NP -> {ap : AP ; vp : VP} = \i -> - propAP (mkAP (also_AdA | otherwise_AdA) (mkAP (mkA2 called_A []) i)) ; - - noPrep : Prep = mkPrep [] ; - -- lexicon -lincat - Country = {np : NP ; a : A} ; - JobTitle = CN ; lin - NCountry c = c.np ; - PCountry c = propAP (mkAP c.a) ; - - Located = - relAP (mkAP (mkA "located")) in_Prep - | relAP (mkAP (mkA "situated")) in_Prep - ; + Located = relAP (mkAP located_A) in_Prep ; In = relVP UseCopula in_Prep ; @@ -211,7 +33,7 @@ lin HaveTitle = relAP (mkAP (mkA "employed")) as_Prep - --- | relVP UseCopula noPrep + | relVP UseCopula noPrep | relVP (mkVP (mkV "work")) as_Prep | relVP (mkVP have_V2 (mkNP the_Det (mkCN (mkN2 (mkN "title"))))) possess_Prep ; @@ -275,4 +97,10 @@ oper mkCountry : Str -> Str -> {np : NP ; a : A} = \n,a -> {np = mkNP (mkPN n) ; a = mkA a} ; + mkName : Str -> NP = + \s -> mkNP (mkPN s) ; + mkFunction : Str -> Fun = + \s -> {cn = mkCN (mkN s) ; prep = possess_Prep} ; + + } diff --git a/examples/query/QueryI.gf b/examples/query/QueryI.gf new file mode 100644 index 000000000..16c8ba24c --- /dev/null +++ b/examples/query/QueryI.gf @@ -0,0 +1,180 @@ +incomplete concrete QueryI of Query = open + Syntax, + LexQuery, + Lang, + Prelude +in { + +lincat + Move = Utt ; ---- Text ; + Query = Utt ; + Answer = Cl ; -- Utt ; + Set = NP ; + Interrogative = IP ; + Function = Fun ; -- = {cn : CN ; prep : Prep} ; + Kind = CN ; + Property = Prop ; -- = {ap : AP ; vp : VP} ; + Relation = Rel ; -- = {ap : AP ; vp : VP ; prep : Prep} ; + Individual = NP ; + Name = NP ; + [Individual] = [NP] ; + +lin + MQuery q = q ; ---- mkText (mkPhr q) questMarkPunct ; + MAnswer a = mkUtt a ; ---- mkText (mkPhr a) fullStopPunct ; + + QSet s = + let + ss : NP = s + | mkNP (mkNP theSg_Det Lang.name_N) (mkAdv namePrep s) + | mkNP (mkNP thePl_Det Lang.name_N) (mkAdv namePrep s) +---- | mkNP (GenNP s) sgNum Lang.name_N +---- | mkNP (GenNP s) plNum Lang.name_N ; + in + mkUtt (mkImp (mkVP LexQuery.give_V3 ss (mkNP i_Pron))) + | mkUtt (mkQS (mkQCl (Lang.CompIP whatSg_IP) ss)) + | mkUtt (mkQS (mkQCl (Lang.CompIP (Lang.IdetIP (mkIDet which_IQuant))) ss)) + | mkUtt ss ; + + QWhere s = + mkUtt (mkQS (mkQCl where_IAdv s)) + | mkUtt (mkQS (mkQCl where_IAdv (mkCl s located_A))) ; + QWhat i p = mkUtt (mkQS (mkQCl i p.vp)) ; + QRelWhere s p = mkUtt (mkQS (mkQCl where_IAdv (mkCl s p.vp))) ; + + QFun r s = + mkUtt + (mkImp (mkVP LexQuery.give_V3 + (mkNP and_Conj s (detSet s r.cn)) (mkNP i_Pron))) + | mkUtt (mkQS (mkQCl (mkIP what_IQuant plNum r.cn) s have_V2)) + | mkUtt (mkQS (mkQCl whatSg_IP + (mkClSlash (mkClSlash s have_V2) (mkAdv as_Prep (mkNP aPl_Det r.cn))))) ; + + QFunPair s f = + let + ss0 : NP = s + | mkNP (mkNP thePl_Det Lang.name_N) (mkAdv namePrep s) ; + ss : NP = mkNP and_Conj ss0 (mkNP (mkQuant they_Pron) plNum f.cn) + | mkNP ss0 (mkAdv with_Prep (mkNP (mkQuant they_Pron) plNum f.cn)) + in + mkUtt (mkImp (mkVP LexQuery.give_V3 ss (mkNP i_Pron))) + | mkUtt (mkQS (mkQCl (Lang.CompIP whatPl_IP) ss)) + | mkUtt (mkQS (mkQCl (Lang.CompIP (Lang.IdetIP (mkIDet which_IQuant))) ss)) + | mkUtt ss ; + + QInfo s = + let + info : NP = mkNP (all_NP | (mkNP information_N)) (mkAdv about_Prep s) ; + in + mkUtt (mkImp (mkVP LexQuery.give_V3 info (mkNP i_Pron))) + | mkUtt (mkQCl whatSg_IP + (mkClSlash (mkClSlash (mkNP youSg_Pron) know_V2) (mkAdv about_Prep s))) + | mkUtt info ; + + QCalled i = mkUtt (mkQS (mkQCl how_IAdv (mkCl i + (mkVP (also_AdV | otherwise_AdV) (mkVP called_A))))) ; + + QWhether a = mkUtt (mkQS a) ; + + AInd s i = (mkCl s i) ; + AName s n = (mkCl n (mkNP the_Det (mkCN Lang.name_N (mkAdv namePrep s)))) ; + AProp s p = (mkCl s p.vp) ; + + SAll k = mkNP all_Predet (mkNP aPl_Det k) | mkNP thePl_Det k ; + SOne k = mkNP n1_Numeral k ; + SIndef k = mkNP a_Det k ; + SDef k = mkNP the_Det k ; + SPlural k = mkNP aPl_Det k ; + SOther k = mkNP aPl_Det (mkCN other_A k) ; + SInd i = i ; + SInds is = mkNP and_Conj is ; + + IWhich k = + mkIP what_IQuant (sgNum | plNum) k + | mkIP which_IQuant (sgNum | plNum) k ; + + IWho = whoSg_IP | whoPl_IP ; + IWhat = whatSg_IP | whatPl_IP ; + + KFunSet r s = + mkCN r.cn (mkAdv r.prep s) ; + + KFunKind k r s = + mkCN k (mkRS (mkRCl which_RP (mkVP (mkNP aPl_Det (mkCN r.cn (mkAdv r.prep s)))))) + | mkCN k (mkRS (mkRCl that_RP (mkVP (mkNP aPl_Det (mkCN r.cn (mkAdv r.prep s)))))) + ; + + KFunPair k r = mkCN k (mkAdv with_Prep (mkNP (mkQuant they_Pron) plNum r.cn)) ; + KProp p k = + participlePropCN p k + | mkCN k (mkRS (mkRCl which_RP p.vp)) + | mkCN k (mkRS (mkRCl that_RP p.vp)) + ; + KFun r = r.cn ; + + IName n = n ; + + PCalled i = propCalled i ; + PCalleds is = propCalled (mkNP or_Conj is) ; + + BaseIndividual = mkListNP ; + ConsIndividual = mkListNP ; + +-- these need new things in resource +lin + KFunsSet r q s = + mkCN (ConjCN and_Conj (BaseCN r.cn q.cn)) (mkAdv r.prep s) ; + SFun s r = mkNP (GenNP s) plNum r.cn | mkNP (GenNP s) sgNum r.cn ; + QWhatWhat i j p = mkUtt (mkQS (QuestQVP i (AdvQVP p.vp (mkIAdv p.prep j)))) ; + QWhatWhere i p = mkUtt (mkQS (QuestQVP i (AdvQVP p.vp where_IAdv))) ; + PIs i = propVP (mkVP i) ; + AKind s k = (mkCl s (Lang.UseComp (Lang.CompCN k))) ; + + PRelation r s = { + ap = AdvAP r.ap (mkAdv r.prep s) ; + vp = mkVP r.vp (mkAdv r.prep s) + } ; + +oper + namePrep : Prep = possess_Prep ; + + relVP : VP -> Prep -> Rel = \vp,p -> { + ap = vpAP vp ; + vp = vp ; + prep = p + } ; + + propVP : VP -> Prop = \vp -> { + ap = vpAP vp ; + vp = vp + } ; + + propAP : AP -> Prop = \ap -> { + ap = ap ; + vp = mkVP ap + } ; + + relAP : AP -> Prep -> Rel = \ap,p -> { + ap = ap ; + vp = mkVP ap ; + prep = p + } ; + + propCalled : NP -> Prop = \i -> + propAP (mkAP (also_AdA | otherwise_AdA) (mkAP (mkA2 called_A (mkPrep [])) i)) ; + + detSet : NP -> CN -> NP = \s,c -> + mkNP (mkQuant they_Pron) plNum c ; + + +-- lexicon + +lincat + Country = {np : NP ; a : A} ; + JobTitle = CN ; +lin + NCountry c = c.np ; + PCountry c = propAP (mkAP c.a) ; + +} + diff --git a/examples/query/QuerySwe.gf b/examples/query/QuerySwe.gf new file mode 100644 index 000000000..2b7aad0d0 --- /dev/null +++ b/examples/query/QuerySwe.gf @@ -0,0 +1,124 @@ +--# -path=.:present + +concrete QuerySwe of Query = QueryI - [namePrep, propCalled] with + (Syntax = SyntaxSwe), + (Lang = LangSwe), + (LexQuery = LexQuerySwe) ** +open + LexQuerySwe, + ParadigmsSwe, + IrregSwe, + SyntaxSwe, + ExtraSwe, + (L = LangSwe), + (M = MakeStructuralSwe), + Prelude +in { + +-- deviations from functor +oper +-- prep not "av" + namePrep = on_Prep ; +-- verb "heta" + propCalled : NP -> Prop = \i -> + propVP (mkVP (mkAdV "även") (mkVP (mkV2 (depV (mkV "kalla")) for_Prep) i)) + | propVP (mkVP (mkAdV "även") (mkVP (mkV2 "heter") i)) ; + + + +-- lexicon + +lin + Located = relAP (mkAP located_A) in_Prep ; + + In = relVP UseCopula in_Prep ; + + Employed = + relAP (mkAP (mkA "anställd" "anställt")) by8agent_Prep + | relAP (mkAP (mkA "betald" "betalt")) by8agent_Prep + | relAP (mkAP (mkA "aktiv")) at_Prep + | relAP (mkAP (mkA "professionellt aktiv")) at_Prep + | relVP (mkVP (mkV "arbeta")) at_Prep + | relVP (mkVP (mkV "jobba")) at_Prep + | relVP (mkVP (mkV "medarbeta")) at_Prep + ; + + HaveTitle = + relAP (mkAP (mkA "anställd" "anställt")) as_Prep + | relVP UseCopula noPrep + | relVP (mkVP (mkV "arbeta")) as_Prep + | relVP (mkVP (mkV "jobba")) as_Prep + | relVP (mkVP have_V2 (mkNP the_Det (mkCN (mkN2 (mkN "titel" "titlar") noPrep)))) + possess_Prep + ; + + EmployedAt s = + relAP (mkAP (mkA2 (mkA "anställd" "anställt") at_Prep) s) as_Prep + | relAP (mkAP (mkA2 (mkA "anställd" "anställt") by8agent_Prep) s) as_Prep + | relVP (mkVP (mkV2 (mkV "arbeta") at_Prep) s) as_Prep + | relVP (mkVP (mkV2 (mkV "jobba") at_Prep) s) as_Prep + ; + + HaveTitleAt t = + relAP (mkAP (mkA2 (mkA "anställd" "anställt") as_Prep) (mkNP t)) at_Prep + | relAP (mkAP (mkA2 (mkA "anställd" "anställt") as_Prep) (mkNP t)) by8agent_Prep + | relVP (mkVP (mkNP a_Det t)) at_Prep + | relVP (mkVP (mkV2 (mkV "arbeta") as_Prep) (mkNP t)) at_Prep + | relVP (mkVP (mkV2 (mkV "jobba") as_Prep) (mkNP t)) at_Prep + | relVP (mkVP have_V2 (mkNP the_Det (mkCN (mkN2 (mkN "titel" "titlar") noPrep) + (mkNP t)))) at_Prep + ; + + Named n = propAP (mkAP (mkA2 called_A (mkPrep [])) n) ; + Start n = propVP (mkVP (mkV2 "börja" with_Prep) n) ; + + Organization = mkCN (mkN "organisation" "organisationer") ; + Company = mkCN (mkN "företag" "företag") ; + Place = mkCN (mkN "plats" "platser") | mkCN (mkN "ställe" "ställen") ; + Person = + mkCN (mkN "person" "personen" "folk" "folket") + | mkCN (mkN "person" "personer") ; + + Location = mkFunctionP (mkN "läge" "lägen") possess_Prep ; + Region = mkFunctionP (mkN "region" "regioner") possess_Prep ; + Subregion = mkFunctionP (mkN "delregion" "delregioner") possess_Prep ; + FName = mkFunctionP (mkN "namn" "namn") on_Prep ; + FNickname = mkFunctionP (mkN "tilläggsnamn" "tilläggsnamn") on_Prep ; + FJobTitle = + mkFunctionP (mkN "jobb" "jobb") possess_Prep + | mkFunction "befattning" ; + + SJobTitle t = mkNP a_Det t ; + + USA = mkCountry "USA" "amerikansk" ; + Bulgaria = mkCountry "Bulgarien" "bulgarisk" ; + California = mkCountry "Kalifornien" "Kalifornisk" ; + OblastSofiya = mkName "Oblast Sofiya" ; + + CEO = mkCN (mkN "VD" "VD:ar") ; + ChiefInformationOfficer = mkCN (mkN "chefsinformatör" "chefsinformatörer") ; + + Microsoft = mkName "Microsoft" ; + Google = mkName "Google" ; + + SergeyBrin = mkName "Sergey Brin" ; + LarryPage = mkName "Larry Page" ; + EricSchmidt = mkName "Eric Schmidt" ; + MarissaMayer = mkName "Marissa Mayer" ; + UdiManber = mkName "Udi Manber" ; + CarlGustavJung = mkName "Carl Gustav Jung" ; + Jung = mkName "Jung" ; + BenFried = mkName "Ben Fried" ; + +oper + mkCountry : Str -> Str -> {np : NP ; a : A} = + \n,a -> {np = mkNP (mkPN n) ; a = mkA a} ; + + mkName : Str -> NP = + \s -> mkNP (mkPN s) ; + mkFunction : Str -> Fun = + \s -> {cn = mkCN (mkN s) ; prep = possess_Prep} ; + mkFunctionP : N -> Prep -> Fun = + \n,p -> {cn = mkCN n ; prep = p} ; + +}