--# -path=.:present

concrete QuerySwe of Query = QueryI - [namePrep, propCalled, KFunPair] 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)) ;

lin
  KFunPair k r = mkCN k (mkAdv with_Prep (sina r.cn)) ;

oper
  sina : CN -> NP = \cn -> mkNP (M.mkPredet "sin" "sitt" "sina") (mkNP a_Quant plNum cn) ; ---- should be in ExtraSwe

-- lexicon

lin
  Located = relAP (mkAP located_A) in_Prep ;

  In = relVP UseCopula in_Prep ;

  Employed = 
      relAP (mkAP (mkA "anställd" "anställt")) at_Prep
--    | 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")) som_Prep
--    | relVP UseCopula noPrep
    | relVP (mkVP (mkV "arbeta")) som_Prep
    | relVP (mkVP (mkV "jobba")) som_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) som_Prep
--    | relAP (mkAP (mkA2 (mkA "anställd" "anställt") by8agent_Prep) s) som_Prep
    | relVP (mkVP (mkV2 (mkV "arbeta") at_Prep) s) som_Prep 
    | relVP (mkVP (mkV2 (mkV "jobba") at_Prep) s) som_Prep 
    ;

  HaveTitleAt t = 
      relAP (mkAP (mkA2 (mkA "anställd" "anställt") som_Prep) (mkNP t)) at_Prep
--    | relAP (mkAP (mkA2 (mkA "anställd" "anställt") som_Prep) (mkNP t)) by8agent_Prep
    | relVP (mkVP (mkNP a_Det t)) at_Prep
    | relVP (mkVP (mkV2 (mkV "arbeta") som_Prep) (mkNP t)) at_Prep 
    | relVP (mkVP (mkV2 (mkV "jobba") som_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 ;

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} ;

  som_Prep = mkPrep "som" ;

lin
-- JobTitles
  JobTitle1 = mkCN (mkN "'JobTitle1") ;
  JobTitle2 = mkCN (mkN "'JobTitle2") ;
  JobTitle3 = mkCN (mkN "'JobTitle3") ;
  JobTitle4 = mkCN (mkN "'JobTitle4") ;

-- Locations
  Location1 = mkName "'Location1" ;
  Location2 = mkName "'Location2" ;
  Location3 = mkName "'Location3" ;
  Location4 = mkName "'Location4" ;

-- Organizations
  Organization1 = mkName "'Organization1" ;
  Organization2 = mkName "'Organization2" ;
  Organization3 = mkName "'Organization3" ;
  Organization4 = mkName "'Organization4" ;

-- Persons
  Person1 = mkName "'Person1" ;
  Person2 = mkName "'Person2" ;
  Person3 = mkName "'Person3" ;
  Person4 = mkName "'Person4" ;

}
