{-# LANGUAGE DataKinds #-}
{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE MultiParamTypeClasses #-}

{-|
Module      : Analysis.Adjectives.Adjectives
Description : Adjectives lexicon.
Copyright   : (c) Julian Grove and Aaron Steven White, 2025
License     : MIT
Maintainer  : julian.grove@gmail.com
-}

module Analysis.Adjectives.Adjectives where

import Analysis.Adjectives.Signature
import Framework.Grammar.CCG
import Framework.Grammar.Lexica.SynSem
import Framework.Grammar.Lexica.SynSem.Convenience as Convenience
import Framework.Lambda

--------------------------------------------------------------------------------
-- * Lexica for adjectives

instance Interpretation Adjectives SynSem where
  combineR :: SynSem -> SynSem -> [SynSem]
combineR = SynSem -> SynSem -> [SynSem]
Convenience.combineR
  combineL :: SynSem -> SynSem -> [SynSem]
combineL = SynSem -> SynSem -> [SynSem]
Convenience.combineL
  
  lexica :: [Lexicon SynSem]
lexica = [Lexicon SynSem
lex]
    where lex :: Lexicon SynSem
lex = \case
            String
"soccer player" -> [ SynSem {
                                   syn :: Cat
syn = String -> Cat
Base String
"n",
                                   sem :: Typed
sem = Sig -> Term -> Typed
ty Sig
tauAdj (Term -> Term
purePP (Term -> Term -> Term
lam Term
x (Term -> Term -> Term
lam Term
i (String -> Term
sCon String
"soc_pla" Term -> Term -> Term
@@ Term
i Term -> Term -> Term
@@ Term
x))))
                                   } ]
            String
"linguist"      -> [ SynSem {
                                   syn :: Cat
syn = String -> Cat
Base String
"n",
                                   sem :: Typed
sem = Sig -> Term -> Typed
ty Sig
tauAdj (Term -> Term
purePP (Term -> Term -> Term
lam Term
x (Term -> Term -> Term
lam Term
i (Term -> Term
ling Term
i Term -> Term -> Term
@@ Term
x))))
                                   } ]
            String
"philosopher"   -> [ SynSem {
                                   syn :: Cat
syn = String -> Cat
Base String
"n",
                                   sem :: Typed
sem = Sig -> Term -> Typed
ty Sig
tauAdj (Term -> Term
purePP (Term -> Term -> Term
lam Term
x (Term -> Term -> Term
lam Term
i (Term -> Term
phil Term
i Term -> Term -> Term
@@ Term
x))))
                                   } ]
            String
"full"          -> [ SynSem {
                                   syn :: Cat
syn = String -> Cat
Base String
"ap" Cat -> Cat -> Cat
\\ String -> Cat
Base String
"deg",
                                   sem :: Typed
sem = Sig -> Term -> Typed
ty Sig
tauAdj (Term -> Term
purePP (Term -> Term -> Term
lam Term
d (Term -> Term -> Term
lam Term
x (Term -> Term -> Term
lam Term
i (String -> Term
sCon String
"(≥)" Term -> Term -> Term
@@ (String -> Term
sCon String
"height" Term -> Term -> Term
@@ Term
i Term -> Term -> Term
@@ Term
x) Term -> Term -> Term
@@ Term
d)))))
                                   }
                               , SynSem {
                                   syn :: Cat
syn = String -> Cat
Base String
"ap",
                                   sem :: Typed
sem = Sig -> Term -> Typed
ty Sig
tauAdj (Term -> Term -> Term
lam Term
s (Term -> Term
purePP (Term -> Term -> Term
lam Term
x (Term -> Term -> Term
lam Term
i (String -> Term
sCon String
"(≥)" Term -> Term -> Term
@@ (String -> Term
sCon String
"height" Term -> Term -> Term
@@ Term
i Term -> Term -> Term
@@ Term
x) Term -> Term -> Term
@@ (String -> Term
sCon String
"d_tall" Term -> Term -> Term
@@ Term
s)))) Term -> Term -> Term
@@ Term
s))
                                   } ]
            String
"tall"          -> [ SynSem {
                                   syn :: Cat
syn = String -> Cat
Base String
"ap" Cat -> Cat -> Cat
\\ String -> Cat
Base String
"deg",
                                   sem :: Typed
sem = Sig -> Term -> Typed
ty Sig
tauAdj (Term -> Term
purePP (Term -> Term -> Term
lam Term
d (Term -> Term -> Term
lam Term
x (Term -> Term -> Term
lam Term
i (String -> Term
sCon String
"(≥)" Term -> Term -> Term
@@ (String -> Term
sCon String
"height" Term -> Term -> Term
@@ Term
i Term -> Term -> Term
@@ Term
x) Term -> Term -> Term
@@ Term
d)))))
                                   }
                               , SynSem {
                                   syn :: Cat
syn = String -> Cat
Base String
"ap",
                                   sem :: Typed
sem = Sig -> Term -> Typed
ty Sig
tauAdj (Term -> Term -> Term
lam Term
s (Term -> Term
purePP (Term -> Term -> Term
lam Term
x (Term -> Term -> Term
lam Term
i (String -> Term
sCon String
"(≥)" Term -> Term -> Term
@@ (String -> Term
sCon String
"height" Term -> Term -> Term
@@ Term
i Term -> Term -> Term
@@ Term
x) Term -> Term -> Term
@@ (String -> Term
sCon String
"d_tall" Term -> Term -> Term
@@ Term
i)))) Term -> Term -> Term
@@ Term
s))
                                        } ]
            String
"jo"            -> [ SynSem {
                                   syn :: Cat
syn = String -> Cat
Base String
"np",
                                   sem :: Typed
sem = Sig -> Term -> Typed
ty Sig
tauAdj (Term -> Term
purePP (String -> Term
sCon String
"j"))
                                   }
                               , SynSem {
                                   syn :: Cat
syn = String -> Cat
Base String
"s" Cat -> Cat -> Cat
// (String -> Cat
Base String
"s" Cat -> Cat -> Cat
\\ String -> Cat
Base String
"np"),
                                   sem :: Typed
sem = Sig -> Term -> Typed
ty Sig
tauAdj (Term -> Term
purePP (Term -> Term -> Term
lam Term
x (Term
x Term -> Term -> Term
@@ String -> Term
sCon String
"j")))
                                   } ]
            String
"bo"            -> [ SynSem {
                                   syn :: Cat
syn = String -> Cat
Base String
"np",
                                   sem :: Typed
sem = Sig -> Term -> Typed
ty Sig
tauAdj (Term -> Term
purePP (String -> Term
sCon String
"b"))
                                   }
                               , SynSem {
                                   syn :: Cat
syn = String -> Cat
Base String
"s" Cat -> Cat -> Cat
// (String -> Cat
Base String
"s" Cat -> Cat -> Cat
\\ String -> Cat
Base String
"np"),
                                   sem :: Typed
sem = Sig -> Term -> Typed
ty Sig
tauAdj (Term -> Term
purePP (Term -> Term -> Term
lam Term
x (Term
x Term -> Term -> Term
@@ String -> Term
sCon String
"b")))
                                   } ]                  
            String
"every"         -> [ SynSem {
                                   syn :: Cat
syn = (String -> Cat
Base String
"s" Cat -> Cat -> Cat
\\ String -> Cat
Base String
"np") Cat -> Cat -> Cat
\\ (String -> Cat
Base String
"s" Cat -> Cat -> Cat
\\ String -> Cat
Base String
"np" Cat -> Cat -> Cat
// String -> Cat
Base String
"np") Cat -> Cat -> Cat
// String -> Cat
Base String
"n",
                                   sem :: Typed
sem = Sig -> Term -> Typed
ty Sig
tauAdj (Term -> Term
purePP (Term -> Term -> Term
lam Term
c (Term -> Term -> Term
lam Term
k (Term -> Term -> Term
lam Term
y (Term -> Term -> Term
lam Term
i (String -> Term
sCon String
"∀" Term -> Term -> Term
@@ (Term -> Term -> Term
lam Term
x (String -> Term
sCon String
"(⇒)" Term -> Term -> Term
@@ (Term
c Term -> Term -> Term
@@ Term
x Term -> Term -> Term
@@ Term
i) Term -> Term -> Term
@@ (Term
k Term -> Term -> Term
@@ Term
x Term -> Term -> Term
@@ Term
y Term -> Term -> Term
@@ Term
i)))))))))
                                   }
                               , SynSem {
                                   syn :: Cat
syn = String -> Cat
Base String
"s" Cat -> Cat -> Cat
// (String -> Cat
Base String
"s" Cat -> Cat -> Cat
\\ String -> Cat
Base String
"np") Cat -> Cat -> Cat
// String -> Cat
Base String
"n",
                                   sem :: Typed
sem = Sig -> Term -> Typed
ty Sig
tauAdj (Term -> Term
purePP (Term -> Term -> Term
lam Term
c (Term -> Term -> Term
lam Term
k (Term -> Term -> Term
lam Term
i (String -> Term
sCon String
"∀" Term -> Term -> Term
@@ (Term -> Term -> Term
lam Term
x (String -> Term
sCon String
"(⇒)" Term -> Term -> Term
@@ (Term
c Term -> Term -> Term
@@ Term
x Term -> Term -> Term
@@ Term
i) Term -> Term -> Term
@@ (Term
k Term -> Term -> Term
@@ Term
x Term -> Term -> Term
@@ Term
i))))))))
                                   }
                               , SynSem {
                                   syn :: Cat
syn = String -> Cat
Base String
"s" Cat -> Cat -> Cat
\\ (String -> Cat
Base String
"s" Cat -> Cat -> Cat
// String -> Cat
Base String
"np") Cat -> Cat -> Cat
// String -> Cat
Base String
"n",
                                   sem :: Typed
sem = Sig -> Term -> Typed
ty Sig
tauAdj (Term -> Term
purePP (Term -> Term -> Term
lam Term
c (Term -> Term -> Term
lam Term
k (Term -> Term -> Term
lam Term
i (String -> Term
sCon String
"∀" Term -> Term -> Term
@@ (Term -> Term -> Term
lam Term
x (String -> Term
sCon String
"(⇒)" Term -> Term -> Term
@@ (Term
c Term -> Term -> Term
@@ Term
x Term -> Term -> Term
@@ Term
i) Term -> Term -> Term
@@ (Term
k Term -> Term -> Term
@@ Term
x Term -> Term -> Term
@@ Term
i))))))))
                                   } ]
            String
"a"             -> [ SynSem {
                                   syn :: Cat
syn = (String -> Cat
Base String
"s" Cat -> Cat -> Cat
\\ String -> Cat
Base String
"np") Cat -> Cat -> Cat
\\ (String -> Cat
Base String
"s" Cat -> Cat -> Cat
\\ String -> Cat
Base String
"np" Cat -> Cat -> Cat
// String -> Cat
Base String
"np") Cat -> Cat -> Cat
// String -> Cat
Base String
"n",
                                   sem :: Typed
sem = Sig -> Term -> Typed
ty Sig
tauAdj (Term -> Term
purePP (Term -> Term -> Term
lam Term
c (Term -> Term -> Term
lam Term
k (Term -> Term -> Term
lam Term
y (Term -> Term -> Term
lam Term
i (String -> Term
sCon String
"∃" Term -> Term -> Term
@@ (Term -> Term -> Term
lam Term
x (String -> Term
sCon String
"(∧)" Term -> Term -> Term
@@ (Term
c Term -> Term -> Term
@@ Term
x Term -> Term -> Term
@@ Term
i) Term -> Term -> Term
@@ (Term
k Term -> Term -> Term
@@ Term
x Term -> Term -> Term
@@ Term
y Term -> Term -> Term
@@ Term
i)))))))))
                                   }
                               , SynSem {
                                   syn :: Cat
syn = String -> Cat
Base String
"s" Cat -> Cat -> Cat
// (String -> Cat
Base String
"s" Cat -> Cat -> Cat
\\ String -> Cat
Base String
"np") Cat -> Cat -> Cat
// String -> Cat
Base String
"n",
                                   sem :: Typed
sem = Sig -> Term -> Typed
ty Sig
tauAdj (Term -> Term
purePP (Term -> Term -> Term
lam Term
c (Term -> Term -> Term
lam Term
k (Term -> Term -> Term
lam Term
i (String -> Term
sCon String
"∃" Term -> Term -> Term
@@ (Term -> Term -> Term
lam Term
x (String -> Term
sCon String
"(∧)" Term -> Term -> Term
@@ (Term
c Term -> Term -> Term
@@ Term
x Term -> Term -> Term
@@ Term
i) Term -> Term -> Term
@@ (Term
k Term -> Term -> Term
@@ Term
x Term -> Term -> Term
@@ Term
i))))))))
                                   }
                               , SynSem {
                                   syn :: Cat
syn = String -> Cat
Base String
"s" Cat -> Cat -> Cat
\\ (String -> Cat
Base String
"s" Cat -> Cat -> Cat
// String -> Cat
Base String
"np") Cat -> Cat -> Cat
// String -> Cat
Base String
"n",
                                   sem :: Typed
sem = Sig -> Term -> Typed
ty Sig
tauAdj (Term -> Term
purePP (Term -> Term -> Term
lam Term
c (Term -> Term -> Term
lam Term
k (Term -> Term -> Term
lam Term
i (String -> Term
sCon String
"∃" Term -> Term -> Term
@@ (Term -> Term -> Term
lam Term
x (String -> Term
sCon String
"(∧)" Term -> Term -> Term
@@ (Term
c Term -> Term -> Term
@@ Term
x Term -> Term -> Term
@@ Term
i) Term -> Term -> Term
@@ (Term
k Term -> Term -> Term
@@ Term
x Term -> Term -> Term
@@ Term
i))))))))
                                   }
                               , SynSem {
                                   syn :: Cat
syn = String -> Cat
Base String
"np" Cat -> Cat -> Cat
// String -> Cat
Base String
"n",
                                   sem :: Typed
sem = Sig -> Term -> Typed
ty Sig
tauAdj (Term -> Term
purePP (Term -> Term -> Term
lam Term
x Term
x))
                                   } ]
            String
"likely"      -> [ SynSem {
                                 syn :: Cat
syn = String -> Cat
Base String
"s" Cat -> Cat -> Cat
\\ String -> Cat
Base String
"deg" Cat -> Cat -> Cat
// String -> Cat
Base String
"s",
                                 sem :: Typed
sem = Sig -> Term -> Typed
ty Sig
tauAdj (
                                     Term -> Term -> Term
lam Term
s (Term -> Term
purePP (Term -> Term -> Term
lam Term
p (Term -> Term -> Term
lam Term
d (Term -> Term -> Term
lam Term
i (
                                                                     String -> Term
sCon String
"(≥)" Term -> Term -> Term
@@ (
                                                                         Term -> Term
Pr (Term -> Term -> Term -> Term
let' Term
j (Term -> Term
CG Term
s) (Term -> Term
Return (Term
p Term -> Term -> Term
@@ ([String] -> Term -> Term -> Term
overwrite [String]
contextParams Term
i Term
j))))
                                                                         ) Term -> Term -> Term
@@ Term
d
                                                                     )))) Term -> Term -> Term
@@ Term
s)
                                     )
                                 } ]
            String
"how"         -> [ SynSem {
                                 syn :: Cat
syn =  String -> Cat
Base String
"qDeg" Cat -> Cat -> Cat
// (String -> Cat
Base String
"s" Cat -> Cat -> Cat
// String -> Cat
Base String
"ap") Cat -> Cat -> Cat
// (String -> Cat
Base String
"ap" Cat -> Cat -> Cat
\\ String -> Cat
Base String
"deg"),
                                 sem :: Typed
sem = Sig -> Term -> Typed
ty Sig
tauAdj (Term -> Term
purePP (Term -> Term -> Term
lam Term
x (Term -> Term -> Term
lam Term
y (Term -> Term -> Term
lam Term
z (Term
y Term -> Term -> Term
@@ (Term
x Term -> Term -> Term
@@ Term
z))))))
                                 }
                             , SynSem {
                                 syn :: Cat
syn = String -> Cat
Base String
"qDeg" Cat -> Cat -> Cat
// (String -> Cat
Base String
"s" Cat -> Cat -> Cat
\\ String -> Cat
Base String
"deg"),
                                 sem :: Typed
sem = Sig -> Term -> Typed
ty Sig
tauAdj (Term -> Term
purePP (Term -> Term -> Term
lam Term
x Term
x))
                                 } ]

            String
"is"            -> [ SynSem {
                                   syn :: Cat
syn = String -> Cat
Base String
"s" Cat -> Cat -> Cat
\\ String -> Cat
Base String
"np" Cat -> Cat -> Cat
// String -> Cat
Base String
"ap",
                                   sem :: Typed
sem = Sig -> Term -> Typed
ty Sig
tauAdj (Term -> Term
purePP (Term -> Term -> Term
lam Term
x Term
x))
                                   }
                               , SynSem {
                                   syn :: Cat
syn = String -> Cat
Base String
"s" Cat -> Cat -> Cat
\\ String -> Cat
Base String
"np" Cat -> Cat -> Cat
// String -> Cat
Base String
"np",
                                   sem :: Typed
sem = Sig -> Term -> Typed
ty Sig
tauAdj (Term -> Term
purePP (Term -> Term -> Term
lam Term
x Term
x))
                                   } ]
            String
"and"           -> [ SynSem {
                                   syn :: Cat
syn = String -> Cat
Base String
"s" Cat -> Cat -> Cat
// (String -> Cat
Base String
"s" Cat -> Cat -> Cat
\\ String -> Cat
Base String
"np") Cat -> Cat -> Cat
\\ (String -> Cat
Base String
"s" Cat -> Cat -> Cat
// (String -> Cat
Base String
"s" Cat -> Cat -> Cat
\\ String -> Cat
Base String
"np")) Cat -> Cat -> Cat
// (String -> Cat
Base String
"s" Cat -> Cat -> Cat
// (String -> Cat
Base String
"s" Cat -> Cat -> Cat
\\ String -> Cat
Base String
"np")),
                                   sem :: Typed
sem = Sig -> Term -> Typed
ty Sig
tauAdj (Term -> Term
purePP (Term -> Term -> Term
lam Term
m (Term -> Term -> Term
lam Term
n (Term -> Term -> Term
lam Term
k (Term -> Term -> Term
lam Term
i (String -> Term
sCon String
"(∧)" Term -> Term -> Term
@@ (Term
n Term -> Term -> Term
@@ Term
k Term -> Term -> Term
@@ Term
i) Term -> Term -> Term
@@ (Term
m Term -> Term -> Term
@@ Term
k Term -> Term -> Term
@@ Term
i)))))))
                                   }
                               , SynSem {
                                   syn :: Cat
syn = String -> Cat
Base String
"s" Cat -> Cat -> Cat
\\ (String -> Cat
Base String
"s" Cat -> Cat -> Cat
// String -> Cat
Base String
"np") Cat -> Cat -> Cat
\\ (String -> Cat
Base String
"s" Cat -> Cat -> Cat
\\ (String -> Cat
Base String
"s" Cat -> Cat -> Cat
// String -> Cat
Base String
"np")) Cat -> Cat -> Cat
// (String -> Cat
Base String
"s" Cat -> Cat -> Cat
\\ (String -> Cat
Base String
"s" Cat -> Cat -> Cat
// String -> Cat
Base String
"np")),
                                   sem :: Typed
sem = Sig -> Term -> Typed
ty Sig
tauAdj (Term -> Term
purePP (Term -> Term -> Term
lam Term
m (Term -> Term -> Term
lam Term
n (Term -> Term -> Term
lam Term
k (Term -> Term -> Term
lam Term
i (String -> Term
sCon String
"(∧)" Term -> Term -> Term
@@ (Term
n Term -> Term -> Term
@@ Term
k Term -> Term -> Term
@@ Term
i) Term -> Term -> Term
@@ (Term
m Term -> Term -> Term
@@ Term
k Term -> Term -> Term
@@ Term
i)))))))
                                   }
                               , SynSem {
                                   syn :: Cat
syn = (String -> Cat
Base String
"s" Cat -> Cat -> Cat
\\ String -> Cat
Base String
"np") Cat -> Cat -> Cat
\\ (String -> Cat
Base String
"s" Cat -> Cat -> Cat
\\ String -> Cat
Base String
"np" Cat -> Cat -> Cat
// String -> Cat
Base String
"np") Cat -> Cat -> Cat
\\ ((String -> Cat
Base String
"s" Cat -> Cat -> Cat
\\ String -> Cat
Base String
"np") Cat -> Cat -> Cat
\\ (String -> Cat
Base String
"s" Cat -> Cat -> Cat
\\ String -> Cat
Base String
"np" Cat -> Cat -> Cat
// String -> Cat
Base String
"np")) Cat -> Cat -> Cat
// ((String -> Cat
Base String
"s" Cat -> Cat -> Cat
\\ String -> Cat
Base String
"np") Cat -> Cat -> Cat
\\ (String -> Cat
Base String
"s" Cat -> Cat -> Cat
\\ String -> Cat
Base String
"np" Cat -> Cat -> Cat
// String -> Cat
Base String
"np")),
                                   sem :: Typed
sem = Sig -> Term -> Typed
ty Sig
tauAdj (Term -> Term
purePP (Term -> Term -> Term
lam Term
m (Term -> Term -> Term
lam Term
n (Term -> Term -> Term
lam Term
k (Term -> Term -> Term
lam Term
x (Term -> Term -> Term
lam Term
i (String -> Term
sCon String
"(∧)" Term -> Term -> Term
@@ (Term
n Term -> Term -> Term
@@ Term
k Term -> Term -> Term
@@ Term
x Term -> Term -> Term
@@ Term
i) Term -> Term -> Term
@@ (Term
m Term -> Term -> Term
@@ Term
k Term -> Term -> Term
@@ Term
x Term -> Term -> Term
@@ Term
i))))))))
                                   }
                               , SynSem {
                                   syn :: Cat
syn = String -> Cat
Base String
"s" Cat -> Cat -> Cat
\\ String -> Cat
Base String
"s" Cat -> Cat -> Cat
// String -> Cat
Base String
"s",
                                   sem :: Typed
sem = Sig -> Term -> Typed
ty Sig
tauAdj (Term -> Term
purePP (Term -> Term -> Term
lam Term
m (Term -> Term -> Term
lam Term
n (Term -> Term -> Term
lam Term
i (String -> Term
sCon String
"(∧)" Term -> Term -> Term
@@ (Term
n Term -> Term -> Term
@@ Term
i) Term -> Term -> Term
@@ (Term
m Term -> Term -> Term
@@ Term
i))))))
                                   }
                               , SynSem {
                                   syn :: Cat
syn = String -> Cat
Base String
"s" Cat -> Cat -> Cat
\\ String -> Cat
Base String
"np" Cat -> Cat -> Cat
\\ (String -> Cat
Base String
"s" Cat -> Cat -> Cat
\\ String -> Cat
Base String
"np") Cat -> Cat -> Cat
// (String -> Cat
Base String
"s" Cat -> Cat -> Cat
\\ String -> Cat
Base String
"np"),
                                   sem :: Typed
sem = Sig -> Term -> Typed
ty Sig
tauAdj (Term -> Term
purePP (Term -> Term -> Term
lam Term
m (Term -> Term -> Term
lam Term
n (Term -> Term -> Term
lam Term
x (Term -> Term -> Term
lam Term
i (String -> Term
sCon String
"(∧)" Term -> Term -> Term
@@ (Term
n Term -> Term -> Term
@@ Term
x Term -> Term -> Term
@@ Term
i) Term -> Term -> Term
@@ (Term
m Term -> Term -> Term
@@ Term
x Term -> Term -> Term
@@ Term
i)))))))
                                   }
                               , SynSem {
                                   syn :: Cat
syn = String -> Cat
Base String
"s" Cat -> Cat -> Cat
\\ String -> Cat
Base String
"np" Cat -> Cat -> Cat
// String -> Cat
Base String
"np" Cat -> Cat -> Cat
\\ (String -> Cat
Base String
"s" Cat -> Cat -> Cat
\\ String -> Cat
Base String
"np" Cat -> Cat -> Cat
// String -> Cat
Base String
"np") Cat -> Cat -> Cat
// (String -> Cat
Base String
"s" Cat -> Cat -> Cat
\\ String -> Cat
Base String
"np" Cat -> Cat -> Cat
// String -> Cat
Base String
"np"),
                                   sem :: Typed
sem = Sig -> Term -> Typed
ty Sig
tauAdj (Term -> Term
purePP (Term -> Term -> Term
lam Term
m (Term -> Term -> Term
lam Term
n (Term -> Term -> Term
lam Term
x (Term -> Term -> Term
lam Term
y (Term -> Term -> Term
lam Term
i (String -> Term
sCon String
"(∧)" Term -> Term -> Term
@@ (Term
n Term -> Term -> Term
@@ Term
x Term -> Term -> Term
@@ Term
y Term -> Term -> Term
@@ Term
i) Term -> Term -> Term
@@ (Term
m Term -> Term -> Term
@@ Term
x Term -> Term -> Term
@@ Term
y Term -> Term -> Term
@@ Term
i))))))))
                                   } ]
            String
"that"        -> [ SynSem {
                                 syn :: Cat
syn = String -> Cat
Base String
"s" Cat -> Cat -> Cat
// String -> Cat
Base String
"s",
                                 sem :: Typed
sem = Sig -> Term -> Typed
ty Sig
tauAdj (Term -> Term
purePP (Term -> Term -> Term
lam Term
x Term
x))
                                 } ]


--------------------------------------------------------------------------------
-- * Priors and response functions

-- | Prior to be used for the scale-norming example.
scaleNormingPrior :: Term
scaleNormingPrior :: Term
scaleNormingPrior = Term -> Term
Return (Term -> Term -> Term
upd_CG Term
cg' Term
ϵ)
  where cg' :: Term
cg' = Term -> Term -> Term -> Term
let' Term
b (Term -> Term
Bern (Double -> Term
dCon Double
0.5)) (Term -> Term -> Term -> Term
let' Term
x (Term -> Term -> Term
normal Term
0 Term
1) (Term -> Term -> Term -> Term
let' Term
y (Term -> Term -> Term
normal Term
0 Term
1) Term
j'))
        j' :: Term
j'  = Term -> Term
Return (Term -> Term -> Term
UpdHeight (Term -> Term -> Term
lam Term
z (Term -> Term -> Term -> Term
ITE (Term -> Term
SocPla Term
i' Term -> Term -> Term
@@ Term
z) Term
x Term
y)) Term
i')
        i' :: Term
i'  = Term -> Term -> Term
UpdSocPla (Term -> Term -> Term
lam Term
x Term
b) Term
_0

-- | Prior to be used for the likelihood example.
likelihoodPrior :: Term
likelihoodPrior :: Term
likelihoodPrior = Term -> Term
Return (Term -> Term -> Term
upd_CG Term
cg' Term
ϵ)
  where cg' :: Term
cg' = Term -> Term -> Term -> Term
let' Term
x (Term -> Term -> Term
normal Term
0 Term
1) (Term -> Term -> Term -> Term
let' Term
y (Term -> Term -> Term
normal Term
0 Term
1) (Term -> Term -> Term -> Term
let' Term
w (Term -> Term -> Term
LogitNormal Term
0 Term
1) (Term -> Term -> Term -> Term
let' Term
b (Term -> Term
Bern Term
w) (Term -> Term
Return (String -> Term -> Term -> Term
Upd String
"d_tall" Term
x (String -> Term -> Term -> Term
Upd String
"height" (Term -> Term -> Term
lam Term
z Term
y) (String -> Term -> Term -> Term
Upd String
"soc_pla" (Term -> Term -> Term
lam Term
z Term
b) Term
_0)))))))

-- | Respones function to be used for adjective examples.
adjectivesRespond :: Term -> Term -> Term
adjectivesRespond :: Term -> Term -> Term
adjectivesRespond = Term -> Term -> Term -> Term
respond (Term -> Term -> Term
lam Term
x (Term -> Term -> Term
Normal Term
x (String -> Term
Var String
"sigma")))