--# -path=.:../prelude:../common -- --1 A Simple Greek Resource Morphology -- -- Based on E.Bornemann/E.Risch: Griechische Grammatik, 2.Auflage 1978 (2008) -- (referred to as BR ) www.diesterweg.de, ISBN 978-3-425-06850-3 -- Author: Hans Leiss, LMU Munich, CIS Aug.2012, Dec.2015 -- This resource morphology contains definitions needed in the resource -- syntax. To build a lexicon, it is better to use $ParadigmsGrc$, which -- gives a higher-level access to this module. resource MorphoGrc = ResGrc ** open Prelude, (P=Predef), (Ph=PhonoGrc) in { flags optimize=noexpand ; -- --2 Phonology -- -- See PhonGrc.gf -- -- For $ParadigmsGer$. -- --2 Nouns -- -- See ResGrc.gf. (Default case should be in ResGrc, the others be moved here.) -- --3 Proper names -- -- See ResGrc.gf. (Default case should be in ResGrc, the others be moved here.) --2 Determiners oper -- Determiner : Type = {s : Gender => Case => Str ; n : Number} ; mkDeterminer : Number -> (Case => Str) -> (Case => Str) -> (Case => Str) -> Determiner = \n,mc,fc,nc -> {s = table{ Masc => mc ; Fem => fc ; Neutr => nc } ; n = n} ; mkDeterminer2 : Number -> (Case => Str) -> (Case => Str) -> Determiner = \n,mc,nc -> {s = table{ Masc|Fem => mc ; Neutr => nc } ; n = n} ; -- Used in StructuralGrc: -- cc mkDeterminer2 Sg (cases "tis" "tina'" "tino's*" "tini'") (cases "ti" "ti" "tino's*" "tini'") detLikeAdj = overload { detLikeAdj : Number -> Str -> Determiner = detLikeAdj1 ; detLikeAdj : Number -> Str -> Str -> Determiner = detLikeAdj2 ; } ; detLikeAdj2 : Number -> Str -> Str -> Determiner = \n,pas,pantos -> let adj:Adj = adj3 pas pantos in {s = \\g,c => adj.s ! AF g n c ; n = n } ; detLikeAdj1 : Number -> Str -> Determiner = \n,oligos -> let adj:Adj = adjAO oligos in {s = \\g,c => adj.s ! AF g n c ; n = n } ; --2 Pronouns -- Personal pronouns have different forms, depending on whether they are -- emphasized or not, e.g. "e)moy~" vs. "moy". Possessive pronouns are -- used like adjectives, not like determiners. -- A Pron here combines personal and possessive forms. Pron : Type = { s : PronForm => Str ; a : Agr } ; mkPron : Gender -> Number -> Person -> Pron = \g,n,p -> let pers = mkPersPron g n p ; poss = mkPossPron g n p in { s = table { NPCase t c => pers ! t ! c ; NPPoss g' n' c => poss.s ! AF g' n' c } ; a = Ag g n p } ; mkPersPron : Gender -> Number -> Person -> (Tonicity => Case => Str) = \g,n,p -> case of { <_,Sg,P1> => table{Ton => cases "e)gw'" "e)me'" "e)moy~" "e)moi'" ; Aton => cases "" "me" "moy" "moi"}; <_,Sg,P2> => table{Ton => cases "sy'" "se'" "soy~" "soi'" ; Aton => cases "" "se" "soy" "soi"} ; <_,Pl,P1> => table{Ton => cases "h(mei~s*" "h(ma~s*" "h(mw~n" "h(mi~n" ; Aton => cases "" "" "h(mw~n" "h(~min"} ; <_,Pl,P2> => table{Ton => cases "y(mei~s*" "y(ma~s*" "y(mw~n" "y(mi~n" ; Aton => cases "" "" "y(mw~n" "y(mi~n"} ; <_,Dl,P1> => table{Ton => cases "nw'" "nw'" "nw|~n" "nw|~n" ; -- BR 74.3 Aton => cases "" "" "nw|~n" "nw|~n"} ; <_,Dl,P2> => table{Ton => cases "sfw'" "sfw'" "sfw|~n" "sfw|~n" ; -- BR 74.3 Aton => cases "" "" "" ""} ; => table{Ton => cases "oy(~tos*" "toy~ton" "toy'toy" "toy'tw|" ; Aton => cases "" "ay)to'n" "ay)toy~" "ay)tw|" } ; => table{Ton => cases "ay)'th" "tay'thn" "tay'ths*" "tay'th|" ; Aton => cases "" "ay)th'n" "ay)th~s*" "ay)th|" } ; => table{Ton => cases "toy~to" "toy~to" "toy'toy" "toy'tw|" ; Aton => cases "" "ay)to'" "ay)toy~" "ay)tw|" } ; => table{Ton => cases "oy(~toi" "toy'toys*" "toy'twn" "toy'tois*" ; Aton => cases "" "ay)toy's*" "ay)tw~n" "ay)toi~s*" } ; => table{Ton => cases "ay(~tai" "tay'tas*" "toy'wn" "tay'tais*" ; Aton => cases "" "ay)ta's*" "ay)tw~n" "ay)tai~s*" } ; => table{Ton => cases "tay~ta" "tay~ta" "toy'twn" "toy'tois*" ; Aton => cases "" "ay)ta'" "ay)tw~n" "ay)toi~s" } ; <_,Dl,P3> => table{Ton => cases "" "" "" "" ; -- TODO (not in BR) Aton => cases "" "" "" "" } -- TODO (not in BR) } ; -- emphasized, non-reflexive possessive pronoun BR 67 mkPossPron : Gender -> Number -> Person -> { s : AForm => Str } = \g,n,p -> case of { => (adjAO "e)mo's") ; => (adjAO "so's") ; => (adj2AO "h(me'teros" "h(mete'ra_s") ; => (adj2AO "y(me'teros" "y(mete'ra_s") ; => {s = \\_ => houtos_Quantifier.s!n!g!Gen } ; -- BR 67 2, or: "ekei~noy|hs" -- => (adj2AO "sfe'teros" "sfete'ra_s") ; -- reflexive -- else undefined ; _ => { s = \\_ => "---" } } ; -- dual -- TODO: add reflexive forms (i.e. he sees his own child) vs. his=John's ReflPron.Gen -- ATon: use postponed persPron.Gen: o filos moy -- Other forms of pronouns have different types: reflPron : Agr => Case => Str = -- BR 66 let dAsp : Str -> Str = \str -> case str of { "ay)" + r => "ay" + r ; _ => str } in table { Ag g Sg P1 => \\c => "e)m"+ dAsp(autos.s ! g ! Sg ! c) ; Ag g Sg P2 => \\c => "se" + dAsp(autos.s ! g ! Sg ! c) ; Ag g Sg P3 => \\c => "e(" + dAsp(autos.s ! g ! Sg ! c) ; Ag g Pl P3 => \\c => "e(" + dAsp(autos.s ! g ! Pl ! c) ; Ag g n p => \\c => (mkPersPron g n p) ! Ton ! c ++ autos.s ! g ! Pl ! c } ; reciPron : Gender => Case => Str = -- BR 65 (cf. ExtraGrc.gf) table { Masc => table { Acc => "a)llh'loys*" ; Gen => "a)llh'lwn" ; Dat => "a)llh'lois*" ; _ => [] } ; Fem => table { Acc => "a)llh'la_s*" ; Gen => "a)llh'lwn" ; Dat => "a)llh'lais*" ; _ => [] } ; Neutr => table { Acc => "a)llh'la" ; Gen => "a)llh'lwn" ; Dat => "a)llh'lois*" ; _ => [] } } ; -- Interrogative and indefinite pronouns: iPron : Number => Gender => Case => Str = -- BR 70 table { Sg => table { Masc | Fem => cases "ti's*" "ti'na" "ti'nos*" "ti'ni" ; Neutr => cases "ti'" "ti'" "ti'nos*" "ti'ni" } ; Pl | Dl => -- do dual forms exist? table { Masc | Fem => cases "ti'nes*" "ti'nas*" "ti'nwn" "ti'si" ; -- ti'sin Neutr => cases "ti'na*" "ti'na" "ti'nwn" "ti'si" } -- tisi'n } ; indefPron : Number => Gender => Case => Str = -- BR 70 table { Sg => table { Masc | Fem => cases "tis*" "tina'" "tino's*" "tini'" ; Neutr => cases "ti" "ti" "tino's*" "tini'" } ; Pl | Dl => -- do dual forms exist? table { Masc | Fem => cases "tine's*" "tina's*" "tinw~n" "tisi'" ; -- tisi'n Neutr => cases "tina*" "tina" "tinwn" "tisi" } -- tisi'n } ; iPronNP : Gender -> Number -> { s : Case => Str ; a : Agr ; isPron : Prelude.Bool } = \g,n -> { s = iPron ! n ! g ; a = Ag g n P3 ; isPron = True } ; indefPronNP : Gender -> Number -> { s : Case => Str ; a : Agr ; isPron : Prelude.Bool ; e : Case => Str } = \g,n -> { s = indefPron ! n ! g ; a = Ag g n P3 ; isPron = True ; e = indefPron ! n ! g } ; -- emphasized form? -- Moved to RelativeGrc: relPronSg, relPronPl : Gender => Case => Str mkIP : Number -> Gender -> { s : Case => Str ; n : Number } = \n,g -> { s = iPron ! n ! g ; n = n } ; -- g : gender? -- ti's, ti' can be used attributetively, too, so g should not be inherent -- Demonstrative pronouns: BR 68 1. o'de, 2. oy~tos, 3. ekei~nos see ExtraGrc.gf --2 Adjectives -- -- There are `two-ending' adjectives, where masculine and feminine forms are the same, -- and `three-ending' ones, with separate endings for masculine, feminine and neuter. -- -- Adj = {s : AForm => Str} ; -- -- Adjectives inflect according to gender, number and case, and follow largely the -- noun declension classes, i.e. are like the combination of a masculine, a feminine -- and a neuter noun (of the same declension). -- -- However, there are separate accentuation rules (like BR 45.3, that the accent -- in adjectives whose stem ends in -n is as far to the left as consistent with -- the general accent rules). -- -- See the beginning in ResGrc -- --2 Verbs -- -- Depending on a vowel insertion between stem and endings, one distinguishes -- thematic conjugation = w-conjugation (paideyw) = mkVerbW from -- athematic conjugation = mi-conjugation (didwmi) = mkVerbMi -- -- The forms of a greek verb are derived from 7 aspect/tempus-stems: BR 80 2 -- -- asp/tempus-stem w- mi- conjucation form: -- act|med|pass Pres : paideyw didwmi VAct (VPres VInd) Sg P1 -- act|med Fut : paideysw dwsw VAct (VFut FInd) Sg P1 -- act|med Aor : epaideysa edwka VAct (VAor VInd) Sg P1 -- act Perf : pepaideyka dedwka VAct (VPerf VInd) Sg P1 -- med|pass Perf : pepaideymai dedomai VMed (VPerf VInd) Sg P1 -- pass Aor : epaideyvhn edothn VPass (VAor VInd) Sg P1 -- VAdj : paideytos dotos VAdj Masc Sg Nom -- The verbal adjective VAdj may be missing. -- The aspect/tempus stems are usually derived from a common verb stem by -- ablaut, initial reduplication, or suffixes. -- *Weak* stems resp. tempora are those where the tempus stem is obtained by adding -- a specific consonant, *strong* stems/tempora those without such a consonant. -- Conjugation classes depend on how the following tempus stems are formed: -- weak(I)/strong(II) act|med Aor, -- weak(I)/strong(II) pass Aor, -- weak(I)/strong(II) act Perf. param tempType = weak | strong ; -- Show the row of guessed verb stems (use a tuple with fields ordered as in verbstems; -- a record with field names would be reordered lexicographically) -- Memo: gf > cc -list verbstems oper verbstems = <"PresAct", "FutAct", "AorAct", "PerfAct", "PerfMedPass", "AorPass", "VAdj"> ; guessVerbstems : Str -> Str * Str * Str * Str * Str * Str * Str = \verb -> case verb of { _ + "w" => guessVerbstemsW verb ; _ + "mi" => guessVerbstemsMi verb ; _ => P.error "Use -w or -mi" }; -- tempusstems: BR 80 2 (weak: by adding tempus marker) -- act|med|pass Pres : paideyw VAct (VPres VInd) Sg P1 -- act|med Fut : paideysw VAct (VFut FInd) Sg P1 -- act|med Aor : epaideysa VAct (VAor VInd) Sg P1 -- act Perf : pepaideyka VAct (VPerf VInd) Sg P1 -- med|pass Perf : pepaideymai VMed (VPerf VInd) Sg P1 -- pass Aor : epaideyvhn VPass (VAor VInd) Sg P1 -- VAdj : paideytos VAdj Masc Sg Nom -- verbal adjective (may be missing) -- Easier handling of accents: a3 : Str -> Str = \str -> addAccent (Acute 3) str ; a2 : Str -> Str = \str -> addAccent (Acute 2) str ; dA : Str -> Str = \str -> dropAccent str ; menos : Number -> Str = \n -> (case n of { Sg => "me'nos*" ; _ => "me'noi" }) ; --3 W-conjugation: -------------------------------------------------------- -- BR distinguish 7 classes of present stems (see below), the first two of -- which are subdivided into -- -- (a) verba vocalia, i.e. verbal stem ends in a vowel -- expl: paideyw_V, timaw_V, poiew_V, doylow_V -- (b) verba muta, i.e. verbal stem ends in muta consonant (p,b,f | t,d,v | k,g,c) -- expl: leipw_V -- (c) verba liquida, i.e. verbal stem ends in liq.consonant (l,r) or nasal (m,n,(n)g) -- expl: derw_V mkVerbW1 : Str -> Verb = \paidey'w -> case paidey'w of { x + (#Ph.diphthong | #Ph.vowel) + (""| #Ph.accent) + "w" => mkVerbW1voc paidey'w ; x + (("p"|"k"|"t") |("f"|"c"|"v")|("b"|"g"|"d")|"z") + "w" => mkVerbW1mut paidey'w ; x + (#Ph.vowel) + (""| #Ph.accent) + ("r"|"l"|"m"|"n"|"mn") + "w" => mkVerbW1liq paidey'w ; -- BR 103.1 x + "ll" + "w" => mkVerbW1liq paidey'w ; -- BR 103.2a x + (("ai'"|"ei'"|"i_"|"y_")+("n"|"r")) + "w" => mkVerbW1liq paidey'w ; -- BR 103.2b _ => mkVerbW1voc paidey'w -- default } ; mkVerbW7 : (ActPresIndSgP1, ActFutSgP1, ActAorSgP1, ActPerfSgP1, MedPerfSgP1, PassAorSgP1, VAdj1 : Str) -> Verb = \paidey'w, paidey'sw, epai'deysa, pepai'deyka, pepai'deymai, epaidey'vhn, paideyto's -> case paidey'w of { _ + (#Ph.vowel|#Ph.diphthong) + (#Ph.accent|"") + "w" => mkVerbW7voc paidey'w paidey'sw epai'deysa pepai'deyka pepai'deymai epaidey'vhn paideyto's ; _ + (#Ph.labial|#Ph.guttural|#Ph.dental|"z") + "w" => mkVerbW7mut paidey'w paidey'sw epai'deysa pepai'deyka pepai'deymai epaidey'vhn paideyto's ; _ + (#Ph.liquid|#Ph.nasal) + "w" => mkVerbW7liq paidey'w paidey'sw epai'deysa pepai'deyka pepai'deymai epaidey'vhn paideyto's ; _ => P.error "insufficient case in MorphoGrc.mkVerbW7" } ; -- w-conjugation with weak tempus-stems: see BR 91 - 107 -- Show the row of stemforms, for weak w-conjugation: -- BR 91, 92 guessVerbstemsW : Str -> Str * Str * Str * Str * Str * Str * Str = \paidey'w -> let paidey' = P.tk 1 paidey'w ; -- BR: Praesensstamm epaidey' = augment paidey' ; epai'dey = a2 epaidey' ; -- check syllability? pepaidey' = reduplicate paidey' ; pepai'dey = a2 pepaidey' ; -- check syllability? in ; -- Active endings: actPresInd = endingsV <"w", "eis*", "ei", "omen", "ete", "oysi", "eton", "eton"> ; actPresConj= endingsV <"w", "h|s*", "h|", "wmen", "hte", "wsi", "hton", "hton"> ; actPresOpt = endingsV <"oimi", "ois*", "oi", "oimen", "oite", "oien", "oiton", "oi'thn"> ; actImpfInd = endingsV <"on", "es*", "e", "omen", "ete", "on", "eton", "e'thn"> ; actAorInd = endingsV <"a", "as*", "e", "amen", "ate", "an", "aton", "a'thn"> ; actAorOpt = endingsV <"aimi", "ais*", "ai", "aimen", "aite", "aien", "aiton", "ai'thn"> ; actPerfInd = endingsV <"a", "as*", "e", "amen", "ate", "asi", "aton", "aton"> ; actPlqmInd = endingsV <"ein", "eis*", "ei", "emen", "ete", "esan", "eton", "e'thn"> ; -- contracted future actFutInd = endingsV <"w~", "ei~s*", "ei~", "oy~men", "ei~te", "oy~si", "ei~ton", "ei~ton"> ; -- BR 104.1 (dual:HL) actFutOpt = endingsV <"oi~mi", "oi~s*", "oi~", "oi~men", "oi~te", "oi~en", "oiton", "oi'thn"> ; -- BR 104.1 -- Medium endings: medPresInd = endingsV <"omai", "h|", "etai", "o'meva", "esve", "ontai", "esvon", "esvon"> ; medPresConj = endingsV <"wmai", "h|", "htai", "w'meva", "hsve", "wntai", "hsvon", "hsvon"> ; medPresOpt = endingsV <"oi'mhn","oio","oito","oi'meva","oisve","ointo","oisvon","oi'svhn"> ; medImpfInd = endingsV <"o'mhn", "oy", "eto", "o'meva", "esve", "onto", "esvon", "e'svhn"> ; medAorInd = endingsV <"a'mhn", "w", "ato", "a'meva", "asve", "anto", "asvon", "a'svhn"> ; medAorOpt = endingsV <"ai'mhn","aio","aito","ai'meva","aisve","ainto","aisvon","ai'svhn"> ; medPerfInd = endingsV <"mai", "sai", "tai", "meva", "sve", "ntai", "svon", "svon"> ; medPerfConj = endingsV <"w)~", "h|)~s", "h|)~", "w)~men", "h)~te", "w)~si", "h~ton", "h~ton"> ; -- Dual BR 138/141 medPerfOpt = endingsV <"ei)'hn", "ei)'hs", "ei)'h", "ei)~men", "ei)~te", "ei)~en", "ei)~ton", "ei)~ton"> ; -- Dual BR 138, 141 medPlqmInd = endingsV <"mhn", "so", "to", "meva", "sve", "nto", "svon", "svhn"> ; -- contracted future: medFutInd = endingsV <"oy~mai", "h|~", "ei~tai", "oy'meva", "ei~sve", "oy~ntai", "ei~svon", "ei~svon"> ; -- BR 104.1 medFutOpt = endingsV <"oi'mhn","oi~o","oi~to","oi'meva","oi~sve","oi~nto", "oi~svon","oi'svhn"> ; -- BR 104.1 -- Passive endings: passFutInd = endingsV <"h'somai","h'sh|","h'setai","hso'meva","h'sesve","h'sontai", "h~svon","h~svon"> ; passAorInd = endingsV <"hn","hs*","h","hmen","hte","hsan","hton","h'thn"> ; passAorConj= endingsV <"w~","h|~s*","h|~","w~men","h~te","w~si","h~ton","h'thn"> ; passAorOpt = endingsV <"ei'hn","ei'hs*","ei'h","ei~men","ei~te","ei~en","ei~ton","ei'thn"> ; -- Imperative endings: actPresImp = endingsImp <"e","e'tw","ete","o'ntwn"> ; actAorImp = endingsImp <"on","a'tw","ate","a'ntwn"> ; medPresImp = endingsImp <"oy","e'svw","esve","e'svwn"> ; medAorImp = endingsImp <"ai","a'svw","asve","a'svwn"> ; medPerfImp = endingsImp <"so","svw","sve","svwn"> ; passAorImp = endingsImp <"vhti","vh'tw","vhte","ve'ntwn"> ; -- We define mkVerbW in such a way that each full form depends on only one of the -- 7 aspect/tense stems, so that we can use mkVerbW for weak and strong verbs. -- (Strong verbs are treated in (d) BR 108 - 115.) -- Done: act|med VAor weak|strong BR 109 -- act VPerf|VPlqm strong -a BR 112 (anything to do?) -- TODO: act VAor "wurzelaorist" BR 110 -- pass VAor|VFut strong BR 111 -- act VPerf|VPlqm strong -a BR 112.1 ge-graf-[k]a: omit k after consonant-stem -- TODO: cover monosyllabic stems, cover medium future in active verbs -- We split the construction of verb paradigms into active, medium and passive -- constructions, so that intransitive verbs, deponentia and the similarity of medium -- and passive can be defined more easily. mkActW : (ActPresIndSgP1, ActFutSgP1, ActAorSgP1, ActPerfSgP1 : Str) -> Vform => Str = \paidey'w, paidey'sw, epai'deysa, pepai'deyka -> let -- present stem: paidey (used for VPres(VInd|VConj|VOpt), -- VImpf, VImp, VInf GPres, partDiathPres) paidey' = P.tk 1 paidey'w ; pai'dey = a2 paidey'; -- check syllability? paidey = dA paidey' ; epaidey' = augment paidey' ; epaidey = dA epaidey' ; epai'dey = a2 epaidey ; -- check syllability? -- future stem: paideys paidey's = P.tk 1 paidey'sw ; paideys = dA paidey's ; -- weak/strong: s/- -- act|med aorist stem: paideys -- e-paideys-a / e-bal-on aor : tempType = -- e-li(ps)-a / TODO case epai'deysa of { stm + "on" => strong ; _ => weak } ; -- BR 109 actAorInd' = case aor of { weak => actAorInd ; strong => actImpfInd } ; actAorOpt' = case aor of { weak => actAorOpt ; strong => actPresOpt } ; epai'deys : Str = case aor of { weak => P.tk 1 epai'deysa ; strong => P.tk 2 epai'deysa } ; epaideys = dA epai'deys ; epaidey's = a3 epai'deys ; pai'deyS = unaugment epai'deys ; -- aorist-stem =/= future-stem paidey'S = a3 pai'deyS ; paideyS = dA pai'deyS ; -- act perfect stem: pepaideyk -- weak/strong: k/- pepai'deyk = P.tk 1 pepai'deyka ; -- for VAct (VPerf|VPlqm) pepaideyk = dA pepai'deyk; -- pepai'dey-k-a / ge'graph-a pepaidey'k = a3 pepaideyk ; -- inflection: strong=weak BR 112 epepaidey'k = augment pepaidey'k ; -- perhaps ablaut,aspiration for Wlab,Wmut -- to cover verba contracta ending in -a.'w, -e'w, -o'w, -- apply contractVowels to the forms of the present stem: BR 93 cV : Str -> Str -> Str = case paidey' of { -- "a'" is short by convention _ + ("a'" | "e'" | "o'") => Ph.contractVowels ; -- cV2 _ => \w1,w2 -> w1+w2 } ; -- participles as adjectives (don't use adj3nt for each of the 4x45 af's): partPres = (adj3nt (paidey' + "wn") (paidey' + "ontos")) ; partFut = (adj3nt (paidey's + "wn") (paidey's + "ontos")) ; partAor = (case aor of { -- BR 109 weak => adj3nt (paidey'S + "a_s") (paidey'S + "antos") ; strong => adj3nt (paideyS + "w~n" ) (paideyS + "o'ntos") }) ; partPerf = (adj3d (pepaideyk + "w's") (pepaideyk + "o'tos")) ; -- BR 44.6 (fem: kyi~a) in table { -- accents ok Fin (VPres VInd) n p => cV paidey' (actPresInd n p) ; Fin (VPres VConj) n p => cV paidey' (actPresConj n p) ; Fin (VPres VOpt) n p => case of { => cV paidey (actPresOpt n p) ; _ => cV paidey' (actPresOpt n p) } ; Fin VImpf n p => case of { => cV epaidey' (actImpfInd n p) ; => cV epaidey' (actImpfInd n p) ; => cV epaidey' (actImpfInd n p) ; => cV epaidey' (actImpfInd n p) ; => cV epaidey (actImpfInd n p) ; _ => cV epai'dey (actImpfInd n p) } ; Fin (VFut FInd) n p => paidey's + actPresInd n p ; Fin (VFut FOpt) n p => case of { => paideys + actPresOpt n p ; _ => paidey's + actPresOpt n p } ; Fin (VPerf VInd) n p => case n of { Sg => pepai'deyk + actPerfInd n p ; _ => pepaidey'k + actPerfInd n p } ; Fin (VPerf VConj) n p => pepaidey'k + actPresConj n p ; Fin (VPerf VOpt) n p => case of { => pepaideyk + actPresOpt n p ; _ => pepaidey'k + actPresOpt n p } ; Fin (VAor VInd) n p => case of { | => epai'deys + actAorInd' n p ; => epaideys + actAorInd' n p ; _ => epaidey's + actAorInd' n p } ; Fin (VAor VConj) n p => paidey'S + actPresConj n p ; Fin (VAor VOpt) n p => case of { => paideyS + actAorOpt' n p ; _ => paidey'S + actAorOpt' n p } ; Fin VPlqm n p => case of { => dA epepaidey'k + actPlqmInd n p ; _ => epepaidey'k + actPlqmInd n p } ; Imp IPres np => cV (case np of { SgP2 => pai'dey ; PlP2 => paidey'; _ => paidey }) (actPresImp np) ; Imp IAor np => case np of { SgP2 => pai'deyS ; PlP2 => paidey'S; _ => paideyS } + actAorImp np ; Imp IPerf np => nonExist ; Inf GPres => cV paidey' "ein" ; Inf GFut => paidey's + "ein" ; Inf GAor => case aor of { weak => addAccent (Circum 2) (paidey'S + "ai") ; strong => paideyS + "ei~n" } ; -- BR 109 Inf GPerf => pepaideyk + "e'nai" ; Part GPres af => Ph.contractVowels (partPres.s ! af) ; -- TODO poioyy'shs etc Part GFut af => partFut.s ! af ; Part GAor af => partAor.s ! af ; Part GPerf af => partPerf.s ! af } ; mkMedW : (MedPresIndSgP1, MedFutSgP1, MedAorSgP1, MedPerfIndSgP1 : Str) -> Vform => Str = \paidey'omai, paidey'somai, epaideysa'mhn, pepai'deymai -> let -- present stem: paidey, used for VPres VInd|VConj|VOpt, -- VImpf, VImp, VInfPres, partDiathPres paidey' : Str = P.tk 4 paidey'omai ; paidey = dA paidey' ; epaidey' = augment paidey' ; epaidey = dA epaidey' ; -- future stem: paideys -- aorist-stem =/= future-stem paidey's = P.tk 4 paidey'somai ; paideys = dA paidey's ; -- act|med aorist stem: paideyS -- weak/strong: s/- aor : tempType = -- e-paidey-s-amhn / e-bal-omhn case epaideysa'mhn of { stm + "o'mhn" => strong ; _ => weak } ; -- BR 109 medAorInd' = case aor of { weak => medAorInd ; strong => medImpfInd } ; medAorOpt' = case aor of { weak => medAorOpt ; strong => medPresOpt } ; epaideyS = P.tk 5 epaideysa'mhn ; epaidey'S = a3 epaideyS ; epai'deyS = case (toWord epaideyS).s of { Multi => a2 epaideyS ; _ => a3 epaideyS } ; pai'deyS = unaugment epai'deyS ; paidey'S = a3 pai'deyS ; paideyS = dA pai'deyS ; -- med|pass perfect stem: pepaidey pepai'dey = P.tk 3 pepai'deymai ; pepaidey = dA pepai'dey ; pepaidey' = a3 pepaidey ; -- pepaidey'= reduplicate paidey' ; epepaidey'= augment pepaidey'; epepai'dey = a2 epepaidey' ; -- to cover verba contracta ending in -a.'w, -e'w, -o'w, -- apply contractVowels to the forms of the present stem: BR 93 cV : Str -> Str -> Str = case paidey' of { -- "a'" is short by convention _ + ("a'" | "e'" | "o'") => Ph.contractVowels ; -- cV2 _ => \w1,w2 -> w1+w2 } ; partPres = (adj2AO (paidey + "o'menos") (paidey + "ome'nhs")) ; -- BR 82.2b, 91 partFut = (adj2AO (paideys + "o'menos") (paideys + "ome'nhs")) ; partAor = (adj2AO (paideyS + "a'menos") (paideyS + "ame'nhs")) ; partPerf = (adj2AO (pepaidey + "me'nos") (pepaidey + "me'nhs")) ; in table { -- accents ok Fin (VPres VInd) n p => case of { | => cV paidey (medPresInd n p) ; _ => cV paidey' (medPresInd n p) } ; Fin (VPres VConj) n p => case of { | => cV paidey (medPresConj n p) ; _ => cV paidey' (medPresConj n p) } ; Fin (VPres VOpt) n p => case of { <_,P1> | => cV paidey (medPresOpt n p) ; _ => cV paidey' (medPresOpt n p) } ; Fin VImpf n p => case of { <_,P1> | => cV epaidey (medImpfInd n p) ; _ => cV epaidey'(medImpfInd n p) } ; Fin (VFut FInd) n p => case of { | => paideys + medPresInd n p ; _ => paidey's + medPresInd n p } ; Fin (VFut FOpt) n p => case of { <_,P1> | => paideys + medPresOpt n p ; _ => paidey's + medPresOpt n p } ; Fin (VPerf VInd) n p => case of { | => pepaidey' + medPerfInd n p ; _ => pepai'dey + medPerfInd n p } ; Fin (VPerf VConj) n p => pepaidey + (menos n) ++ medPerfConj n p ; Fin (VPerf VOpt) n p => pepaidey + (menos n) ++ medPerfOpt n p ; Fin (VAor VInd) n p => case of { | | | => epaideyS + medAorInd' n p ; _ => epaidey'S + medAorInd' n p } ; Fin (VAor VConj) n p => case of { | => paideyS + medPresConj n p ; _ => paidey'S + medPresConj n p } ; Fin (VAor VOpt) n p => case of { <_,P1> | => paideyS + medAorOpt' n p ; _ => paidey'S + medAorOpt' n p } ; Fin VPlqm n p => case of { <_,P1> | => epepaidey' + medPlqmInd n p ; _ => epepai'dey + medPlqmInd n p } ; -- imperative accents ok for paideyein Imp IPres np => cV (case np of { SgP2 | PlP2 => paidey'; _ => paidey }) (medPresImp np) ; Imp IAor np => case np of { SgP2 => pai'deyS + case aor of { strong => "oy~" ; -- BR 109.1 weak => medAorImp np } ; PlP2 => paidey'S + medAorImp np ; _ => paideyS + medAorImp np } ; Imp IPerf np => case np of { SgP2 | PlP2 => pepai'dey ; _ => pepaidey' } + medPerfImp np ; -- accents ok -- Accents in infinite verb forms: BR 88 Inf GPres => cV paidey' "esvai" ; Inf GFut => paidey's + "esvai" ; Inf GAor => case aor of { weak => paidey'S + "asvai"; strong => paideyS + "e'svai" } ; -- BR 109 Inf GPerf => pepaidey + "~" + "svai" ; -- verba vocalia only -- Part GPres af => partPres.s ! af ; Part GFut af => partFut.s ! af ; Part GAor af => partAor.s ! af ; Part GPerf af => partPerf.s ! af } ; mkVerbW7voc : (ActPresIndSgP1, ActFutSgP1, ActAorSgP1, ActPerfSgP1, MedPerfSgP1, PassAorSgP1, VAdj1 : Str) -> Verb = \paidey'w, paidey'sw, epai'deysa, pepai'deyka, pepai'deymai, epaidey'vhn, paideyto's -> let -- present stem: paidey (used for VPres(VInd|VConj|VOpt), -- VImpf, VImp, VInfPres, partDiathPres) paidey' = P.tk 1 paidey'w ; pai'dey = a2 paidey'; -- TODO: check syllability, monosyl paidey = dA paidey' ; -- future stem: paideys paidey's : Str = case paidey'sw of { fstem + "somai" => fstem ; _ => P.tk 1 paidey'sw } ; paideys = dA paidey's ; -- weak/strong: s/- -- act|med aorist stem: paideyS -- e-paideys-a / e-bal-on aor : tempType = case epai'deysa of { stm + "on" => strong ; _ => weak } ; -- BR 109 epai'deys : Str = case aor of { strong => P.tk 2 epai'deysa ; weak => P.tk 1 epai'deysa } ; epaideysa'mhn = case aor of { strong => dA epai'deys + "o'mhn" ; _ => dA epai'deys + "a'mhn" } ; pai'deyS = unaugment epai'deys ; paidey'S = a3 pai'deyS ; paideyS = dA pai'deyS ; -- act perfect stem: pepaideyk -- weak/strong: k/- pepai'deyk = P.tk 1 pepai'deyka ; -- for VAct (VPerf|VPlqm) pepaideyk = dA pepai'deyk; -- med|pass perfect stem: pepaidey pepai'dey = P.tk 3 pepai'deymai ; pepaidey = dA pepai'dey ; pepaidey' = a3 pepaidey ; -- pepaidey'= reduplicate paidey' ; epepaidey'= augment pepaidey'; epepai'dey = a2 epepaidey' ; -- pass aorist stem: epaideyv -- for VPass (VAor (VInd|VConj|VOpt)) epaidey'v = P.tk 2 epaidey'vhn ; -- VPass (VFut FInd|FOpt) epaideyv = dA epaidey'v ; paidey'v = unaugment epaidey'v ; paideyv = dA paidey'v ; -- for temporal augments ? aorPass : tempType = -- weak/strong: v/- case epaidey'v of { _ + "v" => weak ; _ => strong } ; -- verbal adjective: paidey-tos paideyte'os : Str = case paideyto's of { x + ("to's"|"to's*") => x + "te'os" ; _ => paideyto's } ; -- P.error -- to cover verba contracta ending in -a.'w, -e'w, -o'w, -- apply contractVowels to the forms of the present stem: BR 93 cV : Str -> Str = case paidey' of { -- "a'" is short by convention _ + ("a'" | "e'" | "o'") => Ph.contractVowels ; _ => \w -> w } ; med = mkMedW (paidey'+"omai") (paidey's+"omai") epaideysa'mhn pepai'deymai ; partPres = (adj2AO (cV (paidey + "o'menos")) (cV (paidey + "ome'nhs"))) ; partFut = (adj2AO (paideyv + "hso'menos") (paideyv + "hsome'nhs")) ; partAor = (adj3nt (paideyv + "ei's") (paideyv + "e'ntos")) ; -- BR 46.b 3 partPerf = (adj2AO (pepaidey+"me'nos") (pepaidey+"me'nhs")) ; in { act = mkActW paidey'w paidey'sw epai'deysa pepai'deyka ; med = med ; pass = table { -- only the forms differing from medium: Fin (VFut FInd) n p => case of { | => paidey'v + passFutInd n p ; _ => paideyv + passFutInd n p } ; Fin (VFut FOpt) n p => case of { <_,P1> | => paideyv + "hs" + medPresOpt n p ; _ => paideyv + "h's" + medPresOpt n p } ; Fin (VAor VInd) n p => case of { => epaideyv + passAorInd n p ; _ => epaidey'v + passAorInd n p } ; Fin (VAor VConj) n p => paideyv + passAorConj n p ; Fin (VAor VOpt) n p => paideyv + passAorOpt n p ; Fin tmpMod n p => med ! ( Fin tmpMod n p) ; Imp IPres np => cV (case np of { SgP2 | PlP2 => paidey'; _ => paidey } + medPresImp np) ; Imp IAor np => case np of { SgP2 => paidey' + (case aorPass of { strong => "vi" ; -- not -ti, BR 111.1 _ => passAorImp np }) ; PlP2 => paidey' + passAorImp np ; _ => paidey + passAorImp np } ; Imp IPerf np => med ! (Imp IPerf np) ; Inf GPres => cV (paidey' + "esvai") ; -- cV: BR 93 Inf GFut => paideyv + "h'sesvai" ; Inf GAor => paideyv + "h~nai" ; Inf GPerf => pepaidey + "~" + "svai" ; -- verba vocalia only Part GPres af => partPres.s ! af ; Part GFut af => partFut.s ! af ; Part GAor af => partAor.s ! af ; Part GPerf af => partPerf.s ! af } ; vadj1 : Adj = case paideyto's of { x+"e'on" => adjAO (x+"o's") ; -- pay'w,...,payste'on (not: payst(e)o's) _ => adjAO paideyto's } ; vadj2 : Adj = case paideyte'os of { x+"e'on" => adjAO (x+"e'os") ; _ => adjAO paideyte'os } ; vtype = VFull ; } ; -- (a) verba vocalia (and contracta) BR 91 mkVerbW1voc : Str -> Verb = \paidey'w -> -- BR 91, 92 let paidey' : Str = case paidey'w of { -- BR 95 (here aw = a.w) x+y@("e"|"i"|"r") + "a'w" => x+y+"a_'" ; x + "a'w" => x+ "h'" ; x + "e'w" => x+ "h'" ; x + "o'w" => x+ "w'" ; _ => P.tk 1 paidey'w } ; epaidey' = augment paidey' ; epai'dey = a2 epaidey' ; -- check syllability? pepaidey' = reduplicate paidey' ; pepai'dey = a2 pepaidey' ; -- check syllability? in mkVerbW7voc paidey'w (paidey'+"sw") (epai'dey+"sa") (pepai'dey+"ka") (pepai'dey+"mai") (epaidey'+"vhn") (dA paidey' +"to's*") ; -- TODO: verba vocalia with ablaut BR 96, with -s stem BR 97 or -eF,aF stem BR 98 --(b) verba muta (labial (p-stem), guttural (k-stem), dental (t-stem)) BR 99 -- Weak tempusstems use the same tempus-consonant as the verba vocalia, but -- the p-,k-,t- combines with initial consonants of the ending. -- t-stems have weak perfect -ka; aorist -sa is changed to -ka -- p/k-stems have perfect with -fa or -ca. -- Examples: (p-stem) tre'pw, gra'fw, tri_'bw (BR 99.1 pres-stem = verbal stem) -- (k-stem) diw'kw, a)'rcw, le'gw -- (t-stem) a(ny'tw, pei'vw, psey'dw {- not used: param vstemType = Vocal | Labial | Dental | Guttural | Liquidal | Nasal ; oper vstem : Str -> vstemType = \str -> case str of { _+(#Ph.vowel|#Ph.diphthong)+(#Ph.accent|"")+"w" => Vocal ; _ + #Ph.labial => Labial ; _ + #Ph.dental => Dental ; _ + #Ph.guttural => Guttural ; _ + #Ph.liquid => Liquidal ; _ + #Ph.nasal => Nasal ; _ => P.error "unknown stem type" } ; -} -- mkVerbW1mut is essentially mkVerbW1voc + application of soundlaw mC to the resulting forms. -- Use only for verbs whose 7 stems can simply be derived from (VPres Ind Sg P1). mkVerbW1mut : Str -> Verb = \paidey'w -> -- BR (99) 100 let paidey':Str = case paidey'w of { x+(#Ph.diphthong|#Ph.vowel) -- BR 99.1 +(("p"|"k"|"t")|("f"|"c"|"v")|("b"|"g"|"d")) +"w" => P.tk 1 paidey'w ; -- the following may guess the wrong verbal stem: P.error "use mkVerbW7mut!" x+"pt" + "w" => x + "p" ; -- or x+"f" or x+"b" x+"tt" + "w" => x + "k" ; -- or x+"c" or x+"t" or x+"v" x+"z" + "w" => x + "d" ; -- or x+"g" x + "w" => x } ; epaidey' = augment paidey' ; epai'dey = a2 epaidey' ; pepaidey' = reduplicate paidey' ; pepai'dey = a2 pepaidey' ; -- BR 100 needs *verbstem* ; we instead take consonant at ending of *present stem* -- dental stems: weak VPerf with -ka BR 100.a, labial/guttural stems: strong Perf -fa/-ca BR 112 pepai'deyka : Str = case pepai'dey of { x+("t"|"d"|"v") => pepai'dey+"ka" ; -- BR 100.a x+("p"|"b"|"f") => (P.tk 1 pepai'dey)+"fa" ; -- BR 100.b x+("k"|"c"|"g") => (P.tk 1 pepai'dey)+"ca" ; -- BR 100.b _ => pepai'dey+"ka" } ; epaidey'vhn : Str = case epaidey' of { x+#Ph.consonant => epaidey'+"hn" ; -- BR 111 _ => epaidey'+"vhn" } ; -- strong/weak pass Aor mC : Str -> Str = Ph.mutaSConsonant ; -- BR 101.1 a -- the multisyllabic -i'zw verbs are omitted here and should be treated in mkVerbW7mut -- since their verb stem cannot be guessed in general verb : Verb = mkVerbW7voc paidey'w (paidey'+"sw") (epai'dey+"sa") pepai'deyka (pepai'dey+"mai") epaidey'vhn (dA paidey' +"to's*") ; in { act = table { vform => mC (verb.act ! vform) } ; -- BR 100, 101.1 a med = table { Fin (VPerf VInd) Pl P3 -- BR 101.1 b (TODO gender agreement: Neutr "e)sti'") => mC (verb.med ! (Part GPerf (AF Masc Pl Nom)))++"ei)si'" ; Fin VPlqm Pl P3 -- BR 101.1 b (TODO gender agreement, Neutr "h)~n") => mC (verb.med ! (Part GPerf (AF Masc Pl Nom)))++"h)~san" ; Inf GPerf => a2 (mC (dA (verb.med ! (Inf GPerf)))) ; -- BR 101.1 a -- TODO Perf VInd: peivw -> pepei(v)ka drop v BR 100 - why? vform => mC (verb.med ! vform) } ; pass = table { Fin (VPerf VInd) Pl P3 -- BR 101.1 b (TODO gender agreement: Neutr "e)sti'") => mC (verb.pass ! (Part GPerf (AF Masc Pl Nom)))++"ei)si'" ; Fin VPlqm Pl P3 -- BR 101.1 b (TODO gender agreement, Neutr "h)~n") => mC (verb.pass ! (Part GPerf (AF Masc Pl Nom)))++"h)~san" ; Inf GPerf => a2 (mC (dA (verb.pass ! (Inf GPerf)))) ; -- BR 101.1 a -- Imp Sg P2 -vi, not -ti BR 111.1 vform => mC (verb.pass ! vform) } ; vadj1 = { s = table { af => mC (verb.vadj1.s ! af) } ; adv = mC (verb.vadj1.adv) } ; vadj2 = { s = table { af => mC (verb.vadj2.s ! af) } ; adv = mC (verb.vadj2.adv) } ; vtype = VFull ; } ; -- Unfinished, 12/2015: TODO: complete mkVerbW7mut for providing tempus stems (how to undo mC-applications?) -- for example, to specify act VFut -s-omai (middle future), and to do strong tempora. -- Q: do we need a separate version to specify the verbal stem? -- cc mkVerbW7mut "kry'ptw" "kry'qw" "e)'kryqa" "ke'kryfa" "ke'krymmai" "e)kry'fvhn" "krypto's" mkVerbW7mut : (ActPresIndSgP1, ActFutSgP1, ActAorSgP1, ActPerfSgP1, MedPerfSgP1, PassAorSgP1, VAdj1 : Str) -> Verb = \kry'ptw, kry'qw, e'kryqa, ke'kryfa, -- paidey'w, paidey'sw, epai'deysa, pepai'deyka, ke'krymmai, ekry'fvhn, krypto's -> -- pepai'deymai, epaidey'vhn, paideyto's let mC : Str -> Str = Ph.mutaConsonant ; -- use mkVerbW7voc with reconstructed stem+endings, and then apply the soundlaws (mC, cV?) -- present stem: BR 99 (no need to undo sound laws) paidey' = P.tk 1 kry'ptw ; -- verbal stem (in general undecidable, how the stem _+j ended) -- 1. stem+w, 2.a labial stems: _(p|b|f)+j+w > _+pt+w, 2.b guttural|dental stems: _(k|c|t|v)+j+w > _tt+w {- stemtype : vstemType = case dA paidey' of { _ + "pt" => Labial ; _ + ("i"|"i."|"a"|"a.") + "z" => Dental ; -- BR 99.2b roughly _ => P.error ("Morpho.mkVerbW7mut: unknown verbstem type" ++ paidey'} ; -} -- future stem paidey's : Str = -- undo soundlaw x+ps+w > x+q+w to get future stem x+p, or just drop +w case kry'qw of { stm + "qw" => stm + "p" ; stm + "w" => stm ; stm + "w~" => stm ; stm + "omai" => stm ; stm + "oy~mai" => stm } ; fut : tempType = case kry'qw of { _ + "w~" => strong ; _ => weak } ; -- BR 102.1 (only for -i'zw ?) -- BR 102.1 contracted future in multisyllabic words in -izw actFut : MoodF -> Number -> Person -> Str = \m,n,p -> case m of { FInd => actFutInd n p ; FOpt => actFutOpt n p } ; medFut : MoodF -> Number -> Person -> Str = \m,n,p -> case m of { FInd => medFutInd n p ; FOpt => medFutOpt n p } ; -- We omit checking that -i'zw is multisyllabic; use mkVerbW1 for sw'zw e.a. -- contracted : Bool = case paidey'w of { -- _ + "i'zw" => case (toWord paidey'w).s of { Multi => True ; _ => False } ; -- _ => False } ; medPartFut = (adj2AO (dA paidey's + "oy'menos") (dA paidey's + "oyme'nhs")) ; -- BR 102.1 -- act|med aorist stem: paideys -- e-paideys-a / e-bal-on aor : tempType = -- e-li(ps)-a / TODO case e'kryqa of { _ + ("sa" | "qa" | "xa") => weak ; _ + ("sa" | "qa" | "xa")+"'mhn" => weak ; -- HL ?? _ + ("fa"|"pa"|"on") => strong ; _ => P.error ("MorphoGrc.mkVerbW7mut: unrecognized act|med aorist stem " ++ e'kryqa) } ; actAorInd' = case aor of { weak => actAorInd ; strong => actImpfInd } ; actAorOpt' = case aor of { weak => actAorOpt ; strong => actPresOpt } ; epai'deys : Str = -- TODO -mhn etc case aor of { weak => case e'kryqa of { x+"sa" => x+"s" ; x+"qa" => x+"ps" ; x+"xa" => x+"ks" ; _ => P.tk 1 e'kryqa } ; strong => case e'kryqa of { x+"on" => x ; _ => P.tk 1 e'kryqa } } ; -- perfect stem perf : tempType = case ke'kryfa of { _ + ("fa" | "ca") => strong ; _ + "ka" => weak ; _ => P.error ("Morpho:mkVerb7mut: undefined perfect temp for " ++ ke'kryfa) } ; pepai'deyk = P.tk 1 ke'kryfa ; epepaidey'k = augment (a3 pepai'deyk) ; -- act Fin VPlqm. TODO ablaut, aspirant? -- med|pass perfect stem: pepai'dey : Str = let ke'krym = P.tk 3 ke'krymmai ; -- undo assimilation p : Str = case kry'ptw of { x+"pt"+"w" => "p" ; -- | "f" | "b" x+"tt"+"w" => "k" ; -- | "c" x+"z"+"w" => "d" ; -- | "g" (rare) x+c@#Ph.consonant+"w" => c ; _ => P.error ("Morpho.mkVerbW7mut: undefined med-pass perfect stem " ++ ke'krymmai ++ "/" ++ kry'ptw) } ; in case ke'krym of { x+"m" => P.tk 1 ke'krym + p ; -- undo assimilation x+"s" => ke'krym ; x+#Ph.consonant => ke'krym ; _ => P.error ("Morpho.mkVerbW7mut: undefined med-pass perfect stem for " ++ ke'krymmai) } ; -- aorist passiv: epaidey'v : Str = case ekry'fvhn of { x+"vhn" => x + "v" ; _ => P.tk 2 ekry'fvhn } ; -- weak/strong -- construct verb = mkVerbW7voc with reconstructed stem+endings, and then apply the soundlaws (mC, cV?) -- kry'ptw, kry'qw, e'kryqa, ke'kryfa, verb = mkVerbW7voc (paidey' + "w") (paidey's + "sw") (epai'deys + "a") (pepai'deyk +"a") -- ke'krymmai, ekry'fvhn, krypto's (pepai'dey + "mai") (epaidey'v + "hn") krypto's in { act = table { -- verbal stem: how to undo soundlaw in stem+j+w > present-stem+w ??? -- dental stems: weak VPerf with -ka BR 100.a, labial/guttural stems: strong Perf -fa/-ca BR 112 -- BR 102.1 multisyllabic + -izw => contracted (Act|Med) VFut Fin (VFut mod) n p => case fut of { strong => (paidey's + (actFut mod n p) ) ; -- BR 102.1 weak => mC (verb.act ! (Fin (VFut mod) n p)) } ; Inf GFut => case fut of { strong => (paidey's + "ei~n") ; _ => mC (verb.act ! (Inf GFut)) } ; -- TODO: Part GFut: -w~n, -ou~sa, -oy~n BR 102.1, BR 104.3 Part GFut af => case fut of { strong => paidey's+"w~n -oy~sa -oy~n 102" ; weak => mC (verb.act ! (Part GFut af)) } ; Fin VPlqm n p => case of { => dA epepaidey'k + actPlqmInd n p ; _ => epepaidey'k + actPlqmInd n p } ; vform => mC (verb.act ! vform) } ; med = table { -- BR 102.1 multisyllabic + -izw => contracted (Act|Med) VFut Fin (VFut mod) n p => case fut of { strong => (paidey's + (medFut mod n p) ) ; -- BR 102.1 weak => mC (verb.med ! (Fin (VFut mod) n p)) } ; Inf GFut => case fut of { strong => (paidey's + "ei~svai") ; _ => (verb.med ! (Inf GFut)) } ; Part GFut af => case fut of { strong => medPartFut.s ! af ; --oy'menos BR 102.1, BR 104.3 weak => mC (verb.med ! (Part GFut af)) } ; -- Perf|Plqm: BR 101.1a apply cV to drop s at endings -s_ between consonants Fin (VPerf VInd) Pl P3 -- BR 101.1 b (TODO gender agreement: Neutr "e)sti'") => mC (verb.med ! (Part GPerf (AF Masc Pl Nom)))++"ei)si'" ; Fin (VPerf mod) n p => mC (verb.med ! (Fin (VPerf mod) n p)) ; Fin VPlqm Pl P3 -- BR 101.1 b (TODO gender agreement, Neutr "h)~n") => mC (verb.med ! (Part GPerf (AF Masc Pl Nom)))++"h)~san" ; Fin VPlqm n p => mC (verb.med ! (Fin VPlqm n p)) ; Inf GPerf => a2 (mC (dA (verb.med ! (Inf GPerf)))) ; -- BR 101.1 a Imp IPerf np => mC (verb.med ! (Imp IPerf np)) ; -- Perf: BR 102.2 tre'pw,stre'fw,tre'fw change -e- to -a- by BR 28 vform => mC (verb.med ! vform) } ; pass = table { -- Fut as in medium ? -- BR 102.1 multisyllabic + -izw => contracted (Act|Med) VFut Fin (VFut mod) n p => case fut of { strong => (paidey's + (medFut mod n p) ) ; -- BR 102.1 weak => mC (verb.med ! (Fin (VFut mod) n p)) } ; Inf GFut => case fut of { strong => (paidey's + "ei~svai") ; _ => (verb.med ! (Inf GFut)) } ; Part GFut af => case fut of { strong => medPartFut.s ! af ; --oy'menos BR 102.1, BR 104.3 weak => mC (verb.med ! (Part GFut af)) } ; -- Perf Fin (VPerf VInd) Pl P3 -- BR 101.1 b (TODO gender agreement: Neutr "e)sti'") => mC (verb.pass ! (Part GPerf (AF Masc Pl Nom)))++"ei)si'" ; Fin VPlqm Pl P3 -- BR 101.1 b (TODO gender agreement, Neutr "h)~n") => mC (verb.med ! (Part GPerf (AF Masc Pl Nom)))++"h)~san" ; Inf GPerf => mC (verb.pass ! (Inf GPerf)) ; -- BR 101.1 a vform => mC (verb.pass ! vform) } ; vadj1 = { s = table { af => mC (verb.vadj1.s ! af) } ; adv = mC (verb.vadj1.adv) } ; vadj2 = { s = table { af => mC (verb.vadj2.s ! af) } ; adv = mC (verb.vadj2.adv) } ; vtype = VFull ; } ; --(c) verba liquida: stem ends in l, r, n, m BR 103-107 -- BR 103 de'rw, me'nw, ne'mw , -llw, -ai'nw, -ei'nw, -i_'nw, -y_'nw, -- TODO BR 104 imp ; (BR 101.b gender agreement) -- correct accents Act Perf: h)~ggelka > h)'ggelka, in VPass Perf ? -- Status: 27.12.2015 -- Fut|AorI, BR 104.3: ok, except accents in participles and Imp VAct SgP2 -- Other tempora, BR 105: a+b ok, TODO c: monosyllabic stems -- Perf|Plqm, BR 106: ok -- Special stems, BR 107: TODO (skip) -- In case Wliq-verbs have weak Pass Aor|Fut (-vhn|-vhsomai), try mkVerbW1liq, -- for strong Pass Aor|Fut (-hn|-hsomai), we need mkVerbW7liq mkVerbW1liq : Str -> Verb = \fai'nw -> -- BR let fa'n : Str = case fai'nw of { x + "ai'n" + "w" => x + "a'n" ; -- BR 103 x + "ei'n" + "w" => x + "e'n" ; x + "i_'n" + "w" => x + "i.'n" ; x + "y_'n" + "w" => x + "y.'n" ; x + "ai'r" + "w" => x + "a'r" ; x + "ei'r" + "w" => x + "e'r" ; x + "i_'r" + "w" => x + "i.'r" ; x + "y_'r" + "w" => x + "y.'r" ; x + "ll" + "w" => x + "l" ; _ => P.tk 1 fai'nw } ; fA'n : Str = case (toWord fa'n).s of { -- BR 105.c Mono => case fa'n of { f + "e" + n => f + "a" + n ; _ => fa'n } ; _ => fa'n } ; efa'n = augment fA'n ; efh'n : Str = case fa'n of { x + v@("a")+a@("'"|"")+c@("n"|"m"|"l"|"r") => case x of { _+("e"|"i"|"r") => augment (x+ "a_" + a+c) ; _ => augment (x+ "h" + a+c) } ; x + v@("e"|"i."|"y.") + a@("'"|"")+c@("n"|"m"|"l"|"r") => augment (x + (Ph.ersatzdehnung v) + a+c) ; _ => augment fa'n } ; -- BR 104.2 pe'fan = a2 (reduplicate fA'n) ; in mkVerbW7liq fai'nw (dA fa'n +"w~") (a2 efh'n +"a") (pe'fan+"ka") (pe'fan+"mai") (efa'n+"vhn") (dA fA'n +"to's*") ; -- weak Pass Aor -- To generate -Wliq paradigms with strong Pass Aor etc. use mkVerbW7liq: -- expl: (edar+"hn"), not (edar+"vhn") -- cc -unqual mkVerbW7liq "a)gge'llw" "a)ggelw~" "h)'ggeila" "h)'ggelka" -- "h)'ggelmai" "h)gge'lvhn" "a)ggelto's" mkVerbW7liq : (ActPresIndSgP1, ActFutSgP1, ActAorSgP1, ActPerfSgP1, MedPerfSgP1, PassAorSgP1, VAdj1 : Str) -> Verb = \fai'nw, fanw', e'fhna, pe'fagka, -- paidey'w, paidey'sw, epai'deysa, pepai'deyka, pe'fasmai, efa'nvhn, fanto's -> -- pepai'deymai, epaidey'vhn, paideyto's let verb = mkVerbW7voc fai'nw fanw' e'fhna pe'fagka pe'fasmai efa'nvhn fanto's ; paidey' = P.tk 1 fai'nw ; paidey = dA paidey' ; paideys = P.tk 2 fanw' ; pe'fan = P.tk 2 pe'fagka ; pepaidey = dA pe'fan ; epai'deys = P.tk 1 e'fhna ; -- a2 efh'n ; epaideys = dA epai'deys ; -- dA efh'n ; epaidey's = a3 epaideys ; -- efh'n paidey'S = unaugment epaidey's ; paideyS = dA paidey'S ; fan : Str = case fai'nw of { x + "ai'n" + "w" => x + "a'n" ; -- BR 103 x + "ei'n" + "w" => x + "e'n" ; x + "i_'n" + "w" => x + "i.'n" ; x + "y_'n" + "w" => x + "y.'n" ; x + "ai'r" + "w" => x + "a'r" ; x + "ei'r" + "w" => x + "e'r" ; x + "i_'r" + "w" => x + "i.'r" ; x + "y_'r" + "w" => x + "y.'r" ; x + "ll" + "w" => x + "l" ; _ => P.tk 1 fai'nw } ; nC : Str -> Str = case fan of { _ + "n" => \str -> case str of { x + "ns" + c@#Ph.consonant + y => x + "n" + c + y ; -- BR 106.a x + "nm" + y => x + "sm" + y ; -- BR 105.b _ => Ph.nasalConsonant str } ; -- nk > g _ => \str -> case str of { x + c1@("r"|"l"|"m") + "s" + c@#Ph.consonant + y => x + c1 + c + y ; -- BR 106.a _ => str } } ; -- BR 105 in tempora other than Pres,Fut partMedFut = (adj2AO (paideys + "oy'menos") (paideys + "oyme'nhs")) ; partMedAor = (adj2AO (paideyS + "a'menos") (paideyS + "ame'nhs")) ; -- modify verb built with mkVerbW7voc by modification with soundlaw nC e.a. where needed: in { act = table { Fin (VAor VInd) n p => case of { | => epai'deys + actAorInd n p ; => epaideys + actAorInd n p ; _ => epaidey's + actAorInd n p } ; Fin (VAor VConj) n p => paidey'S + actPresConj n p ; Fin (VAor VOpt) n p => case of { => paideyS + actAorOpt n p ; _ => paidey'S + actAorOpt n p } ; Fin (VFut FInd) n p => paideys + (actFutInd n p) ; -- BR 104.1 Fin (VFut FOpt) n p => paideys + (actFutOpt n p) ; -- BR 104.1 Fin (VPerf mod) n p => nC (verb.act ! (Fin (VPerf mod) n p)) ; Fin VPlqm n p => nC (verb.act ! (Fin VPlqm n p)) ; -- BR 105.a Inf GFut => paideys + "ei~n" ; -- BR 104.1 Inf GPerf => nC (verb.act ! (Inf GPerf)) ; -- BR 105.a -- TODO: Imp GAor Act SgP2 accent a)'ggeil-on|ai, fh~non Part GPerf af => nC (verb.act ! Part GPerf af) ; -- nC by BR 105.a -- TODO: Part GFut: -w~n, -oy~ntos BR 104.3 form => verb.act ! form } ; med = table { Fin (VFut FInd) n p => paideys + (medFutInd n p) ; -- BR 104.1 Fin (VFut FOpt) n p => paideys + (medFutOpt n p) ; -- BR 104.1 Fin (VPerf VInd) Pl P3 -- BR 106.1 a (TODO gender agreement: Neutr "e)sti'") => nC (verb.med ! (Part GPerf (AF Masc Pl Nom)))++"ei)si'" ; Fin (VPerf mod) n p => nC (verb.med ! (Fin (VPerf mod) n p)) ; Fin VPlqm Pl P3 -- BR 106.1 a (TODO gender agreement, Neutr "h)~n") => nC (verb.med ! (Part GPerf (AF Masc Pl Nom)))++"h)~san" ; Fin VPlqm n p => nC (verb.med ! (Fin VPlqm n p)) ; Imp IPerf np => nC (verb.med ! (Imp IPerf np)) ; Inf GFut => paideys + "ei~svai" ; -- BR 104.1 -- Inf GPerf: change Wvoc+~stai to nC(Wliq'+(s)tai): Inf GPerf => a2 (nC (dA (verb.med ! (Inf GPerf)))) ; -- BR 106.1 a Part GFut af => partMedFut.s ! af ; Part GAor af => partMedAor.s ! af ; Part GPerf af => nC (verb.med ! (Part GPerf af)) ; -- BR 105.a form => verb.med ! form } ; -- BR 104.1,3 pass = table { Fin (VPerf VInd) Pl P3 -- BR 101 b (TODO gender agreement: Neutr "e)sti'") => nC (verb.pass ! (Part GPerf (AF Masc Pl Nom)))++"ei)si'" ; Fin (VPerf mod) n p => nC (verb.pass ! (Fin (VPerf mod) n p)) ; Fin VPlqm n p => nC (verb.pass ! (Fin VPlqm n p)) ; Imp IPerf np => nC (verb.pass ! (Imp IPerf np)) ; Inf GPerf => a2 (nC (dA (verb.pass ! (Inf GPerf)))) ; -- BR 106.1 a Part GPerf af => nC (verb.pass ! (Part GPerf af)) ; -- BR 105.a form => verb.pass ! form } ; vadj1 : Adj = verb.vadj1 ; vadj2 : Adj = verb.vadj2 ; vtype = VFull ; } ; -- Deponents: verbs without active forms. -- STATUS: partial, some forms missing, no sound laws used yet. -- Deponentia passiva: the aorist uses the passive forms (-vhn), -- the future uses medium (-somai) or passive (-vh-somai) forms BR 117 -- We store the forms in the med-field. -- cc mkVerbDepPass "ai)de'omai" "ai)de'somai" "h|)de'svhn" "h|)'desmai" -- cc mkVerbDepPass "h('domai" "h(svh'somai" "h('svhn" "h('desmai" mkVerbDepPass : (MedPresInd, MedOrPassFut, PassAorInd, MedPerfInd: Str) -> Verb = \paidey'omai, paidey'somai, epaidey'vhn, pepai'deymai -> let med : Vform => Str = mkMedW paidey'omai paidey'somai epaidey'vhn pepai'deymai ; epaidey'v = P.tk 2 epaidey'vhn ; epaideyv = dA epaidey'v ; paidey'v = unaugment epaidey'v ; paideyv = dA paidey'v ; paidey = dA (P.tk 4 paidey'omai) ; in { act = table { _ => nonExist } ; med = med ; pass = table { -- only the forms differing from medium: (copy from mkVerbW) Fin (VFut FInd) n p => case of { | => paidey'v + passFutInd n p ; _ => paideyv + passFutInd n p } ; Fin (VFut FOpt) n p => case of { <_,P1> | => paideyv + "hs" + medPresOpt n p ; _ => paideyv + "h's" + medPresOpt n p } ; Fin (VAor VInd) n p => case of { => epaideyv + passAorInd n p ; _ => epaidey'v + passAorInd n p } ; Fin (VAor VConj) n p => paideyv + passAorConj n p ; Fin (VAor VOpt) n p => paideyv + passAorOpt n p ; Fin tmpMod n p => med ! (Fin tmpMod n p) ; Imp IPres n_p => "TODO" ; Imp IAor n_p => "TODO" ; Imp IPerf n_p => nonExist ; Inf GFut => paideyv + "h'sestai" ; Inf GAor => paideyv + "h~nai" ; Inf tmp => med ! (Inf tmp) ; Part GFut af => med ! (Part GFut af) ++ "TODO: -vh-somenos" ; Part GAor af => med ! (Part GAor af) ++ "TODO: -eis" ; Part tmp af => med ! (Part tmp af) } ; vadj1 : Adj = adjAO (paidey + "to's") ; vadj2 : Adj = adjAO (paidey + "te'os") ; vtype = DepPass } ; -- Deponentia media: the aorist and future use the medium forms (-sa'mhn,-somai). -- There may additionally be a passive aorist and future (with passive meaning). BR 118 -- mkVerbDepMed : (MedPresInd, MedFut, MedAorInd, MedPassPerfInd : Str) -> Verb = -- \ma'comai, macoy'mai, emacesa'mhn, mema'chmai -> mkVerbDepMed : (MedPresInd, MedFut, MedAorInd, MedPerfInd: Str) -> Verb = \paidey'omai, paidey'somai, epaideysa'mhn, pepai'deymai -> -- cc -unqual mkVerbDepMed "vea'omai" "vea_'somai" "e)vea_sa'mhn" "teve'amai" ; let med : Vform => Str = mkMedW paidey'omai paidey'somai epaideysa'mhn pepai'deymai ; epaidey'vhn = a3 (P.tk 5 epaideysa'mhn) + "vhn" ; epaidey'v = P.tk 2 epaidey'vhn ; epaideyv = dA epaidey'v ; paidey'v = unaugment epaidey'v ; paideyv = dA paidey'v ; paidey = dA (P.tk 4 paidey'omai) ; in { act = table { _ => "---" } ; med = med ; -- TODO: Part Perf af => pe-paidey-me'nos pass = table { -- only the forms differing from medium: (copy from mkVerbW) Fin (VFut FInd) n p => case of { | => paidey'v + passFutInd n p ; _ => paideyv + passFutInd n p } ; Fin (VFut FOpt) n p => case of { <_,P1> | => paideyv + "hs" + medPresOpt n p ; _ => paideyv + "h's" + medPresOpt n p } ; Fin (VAor VInd) n p => case of { => epaideyv + passAorInd n p ; _ => epaidey'v + passAorInd n p } ; Fin (VAor VConj) n p => paideyv + passAorConj n p ; Fin (VAor VOpt) n p => paideyv + passAorOpt n p ; Fin tmpMod n p => med ! (Fin tmpMod n p) ; Imp IPres n_p => "TODO" ; Imp IAor n_p => "TODO" ; Imp IPerf n_p => nonExist ; Inf GFut => paideyv + "h'sestai" ; Inf GAor => paideyv + "h~nai" ; Inf tmp => med ! (Inf tmp) ; Part tmp af => med ! (Part tmp af) ++ "TODO" } ; vadj1 : Adj = adjAO (paidey + "to's") ; vadj2 : Adj = adjAO (paidey + "te'os") ; vtype = DepMed } ; {- --- far too slow: (or makes the machine hang) GF-compiler bug? mkVerbDepMed1a : Str -> Verb = \paidey'omai -> -- sketch only case paidey'omai of { stm + v@(#PhonoGrc.vowel) + acnt@("'"|"~"|"") + "omai" => mkVerbDepMed paidey'omai (stm + v + acnt + "somai") (augment (stm+v) + "sa'mhn") (a2 (reduplicate (stm+v)) + "mai") ; -- _ => mkVerbDepMed "vea'omai" "vea_'somai" "e)vea_sa'mhn" "teve'amai" _ => P.error "not a dep.med" } ; -- much faster: mkVerbDepMed1 : Str -> Verb = \paidey'omai -> let mkForms : Str -> Str * Str * Str * Str = \paideyomai -> -- sketch only, when case paideyomai of { -- stems ends in vowel stm + v@(#PhonoGrc.vowel) + acnt@("'"|"~"|"") + "omai" => ; _ => <"vea'omai", "vea_'somai", "e)vea_sa'mhn", "teve'amai"> } ; -- _ => P.error "not a dep.med" } ; forms = mkForms paidey'omai in mkVerbDepMed forms.p1 forms.p2 forms.p3 forms.p4 ; -} -- TODO: prefix-verbs and reduplication: ap-e'comai mkVerbDep : Str -> VType -> Verb = \paidey'omai,vt -> -- assume given form ends in -omai let paidey' = P.tk 4 paidey'omai ; paidey = dA paidey' ; paidey'somai = paidey' + "somai" ; -- TODO: add sound laws aor = case vt of {DepMed => (augment paidey)+"sa'mhn" ; _DepPass => (augment paidey')+"vhn" } ; perf = a2 (reduplicate paidey) + "mai" ; fut = paidey'somai ; -- fut = case vt of { DepMed => paidey'somai ; -- _DepPass => paidey'somai -- | (paidey + "vh'somai") }; -- optionally 2 futs in case vt of {DepMed => mkVerbDepMed paidey'omai fut aor perf ; DepPass => mkVerbDepPass paidey'omai fut aor perf ; VFull => P.error ("mkVerbDep: provided form does not end in -omai") } ; -- --------------------------------------------------------------------------------- --3 Mi-conjugation (almost ok for ti'vhmi, but wrong for i('hmi) -- Smart Mi-conjuation: from P1 Sg Praes Ind, determine whether the verb's present stem -- a) is formed from the root by reduplication (with i) of the prefix, as in di-dwmi, -- b) is formed from the root by appending -ny- before the endings, as in deik-ny-mi -- c) is the same as the verbal root, as in fh-mi, ei~-mi, ei-mi', crhnai=crh'+ei~nai, kei-mai -- But why am I doing this? Just use the mkVerb*Mi7 function for the few mi-verbs! (and some -- fiddling with the prefixverbs). mkVerbMi1 : Str -> Verb = \dei'knymi -> case dei'knymi of { dei'kny + "mi" + ("'"|"") => case dei'kny of { x + "ny" => mkVerbNyMi dei'knymi ; _ => case (reduplicatedPresent dei'knymi) of { True => mkVerbRedupMi1 dei'knymi ; _ => mkVerbRootMi1 dei'knymi } } ; _ => P.error ("Not a -mi verb: " ++ dei'knymi) } ; reduplicatedPresent : Str -> Bool = \str -> case str of { ("i"|"e") + "("+ (#Ph.accent|"") + "s" + y => True ; "i("+ #Ph.accent + "h" + y => True ; c@#Ph.consonant + "i" + (#Ph.accent|"") + d@#Ph.consonant + y => case of { <"p","f"> | <"t","v"> | <"c","k"> => True ; _ => case P.eqStr c d of { P.PTrue => True ; _ => False } -- BR 22 (partly) } ; _ => False } ; unreduplicatePresent : Str -> Str = \str -> case str of { ("i"|"e") + "("+ (#Ph.accent|"") + "s" + y => "s" + y ; -- i('sthmi "i("+ a@#Ph.accent + "h" + y => "h" + "(" + a + y ; c@#Ph.consonant + "i" + a@(#Ph.accent|"") + d@#Ph.consonant + y => case a of {"~" => addAccent (Circum 2) (d + y) ; _ => addAccent (Acute 2) (d + y) } ; _ => str } ; guessVerbstemsMi : Str -> Str * Str * Str * Str * Str * Str * Str = \dei'knymi -> case dei'knymi of { x + "nymi" => let dei'kny = P.tk 2 dei'knymi ; dei'k = P.tk 2 dei'kny ; e'deik = a2 (augment (dA dei'k)) ; de'deik = a2 (reduplicate dei'k) ; mC : Str -> Str = Ph.mutaConsonant ; in ; _ => case reduplicatedPresent dei'knymi of { True => let di'dw = P.tk 2 dei'knymi ; dw = unreduplicatePresent di'dw ; edw = augment dw ; dedw = reduplicate dw ; do = Ph.ablaut dw ; dedo = Ph.ablaut dedw ; edo = augment do ; in ; _ => let fh : Str = case dei'knymi of { x + "mi" + ("'"|"") => x ; _ => dei'knymi } ; efh = augment fh ; pefh = reduplicate fh ; efa = Ph.ablaut efh ; fa = Ph.ablaut fh ; in } } ; -- BR 135 a) -- cc mkVerbstemsMi "dei'knymi" -- ok -- cc mkVerbstemsMi "zey'gnymi" -- ok -- cc mkVerbstemsMi "mei'gnymi" -- ok -- cc mkVerbstemsMi "ph'gnymi" -- Act ok, Med/Pass ph'gnymai -- cc mkVerbstemsMi "r(h'gnymi" -- Act ok, Med/Pass r(h'nymai -- cc mkVerbstemsMi "kera'nnymi" -- Bad -- cc mkVerbstemsMi "krema'nnymi" -- Poor -- cc mkVerbstemsMi "peta'nnymi" -- Need: soundlaws -- cc mkVerbstemsMi "skeda'nnymi" -- a'nsw > a_'sw > a_'w > w~ mkVerbNyMi1 : Str -> Verb = \dei'knymi -> let dei'knu = P.tk 2 dei'knymi ; dei'k : Str = case dei'knu of { x + "ny" => x ; _ => dei'knu } ; e'deik = a3 (augment (dA dei'k)) ; de'deik = a2 (reduplicate dei'k) ; mC : Str -> Str = Ph.mutaConsonant ; in mkVerbNyMi7 (dei'knymi) (mC (dei'k+"sw")) (mC (e'deik+"sa")) (de'deik+"a") -- de'deica TODO (mC (de'deik+"mai")) (mC (e'deik+"vhn")) (dA dei'k +"to's*") ; -- -- cc -unqual mkVerbNyMi7 "dei'knymi" "dei'xw" "e)'deixa" "de'deica" -- "de'deigmai" "e)dei'cvhn" "deikt'os" mkVerbRedupMi1 : Str -> Verb = \di'dwmi -> -- P.error ("Presumably a -mi verb with reduplicated present stem: " ++ didwmi) ; let di'dw = P.tk 2 di'dwmi ; dw' = unreduplicatePresent di'dw ; do' = Ph.ablaut dw' ; e'dw = a3 (augment dw') ; de'dw = a3 (reduplicate dw') ; de'do = Ph.ablaut de'dw ; edo' = a3 (Ph.ablaut (P.drop 1 e'dw)) ; in mkVerbRedupMi di'dwmi (dw'+"sw") (e'dw+"ka") (de'dw+"ka") (de'do+"mai") (edo'+"vhn") (dA do'+"to's*") ; mkVerbNyMi : Str -> Verb = \dei'knymi -> -- P.error ("Presumably a -nymi verb: " ++ dei'knymi) ; let dei'knu : Str = case dei'knymi of { x + "mi'" => x ; _ => P.tk 2 dei'knymi } ; dei'k : Str = case dei'knu of { x + "ny" => x ; _ => dei'knu } ; e'deik = a3 (augment (dA dei'k)) ; de'dei = a2 (reduplicate (P.tk 1 dei'k)) ; in mkVerbRedupMi (dei'knymi) (dei'k+"sw") (e'deik+"sa") (de'dei+"ka") (de'dei+"g"+"mai") (e'deik+"x"+"vhn") (dA dei'k +"to's*") ; mkVerbRootMi1 : Str -> Verb = \fhmi' -> P.error ("Presumably a -mi verb with verbal root as present stem: " ++ fhmi') ; -- Active endings: (no thematic vowel added to present stem) actPresIndMi = endingsV <"mi", "s*", "si", "men", "te", "a_si", "ton", "ton"> ; actPresOptMi = endingsV <"n", "s*", "", "men", "te", "en", "ton", "thn"> ; actImpfIndMi = endingsV <"n", "s*", "", "men", "te", "san", "ton", "thn"> ; actAorIndMi = endingsV <"", "s*", "e", "men", "te", "san", "ton", "thn"> ; -- HL actPerfIndMi = endingsV <"a", "as*", "e", "amen", "ate", "asi", "aton", "aton"> ; actPlqmIndMi = endingsV <"ein", "eis*", "ei", "emen", "ete", "esan", "eton", "e'thn"> ; actPresImpMi = endingsImp <"i","tw","te","ntwn"> ; -- <""|"vi","tw","te","ntwn"> BR 82 c actAorImpMi = endingsImp <"s*","tw","te","ntwn"> ; -- Medium endings: medPresIndMi = endingsV <"mai", "sai", "tai", "meva", "sve", "ntai", "svon", "svon"> ; medPresConjMi= endingsV <"mai", "|", "tai", "meva", "sve", "ntai", "svon", "svon"> ; medPresOptMi = endingsV <"mhn", "o", "to", "meva", "sve", "nto", "svon", "svhn"> ; medImpfIndMi = endingsV <"mhn", "so", "to", "meva", "sve", "nto", "svon", "svhn"> ; medAorIndMi = endingsV <"mhn", "", "to", "meva", "sve", "nto", "svon", "svhn"> ; medPerfIndMi = endingsV <"mai", "sai", "tai", "meva", "sve", "ntai", "svon", "svon"> ; medPerfConjMi = endingsV <"w)~", "h|)~s", "h|)~", "w)~men", "h)~te", "w)~si", "svon", "svon"> ; medPerfOptMi = endingsV <"ei)'hn", "ei)'hs", "ei)'h", "ei)~men", "ei)~te", "ei)~en", "svon","svhn"> ; medPlqmIndMi = endingsV <"mhn", "so", "to", "meva", "sve", "nto", "svon", "svhn"> ; -- Passive endings: passFutIndMi = endingsV <"h'somai","h'sh|","h'setai","hso'meva","h'sesve","h'sontai", "h~svon","h~svon"> ; passAorIndMi = endingsV <"hn","hs*","h","hmen","hte","hsan","hton","h'thn"> ; passAorConjMi= endingsV <"w~","h|~s*","h|~","w~men","h~te","w~si","h~ton","h'thn"> ; passAorOptMi = endingsV <"ei'hn","ei'hs*","ei'h","ei~men","ei~te","ei~en","ei~ton","ei'thn"> ; -- passAorImp = endingsImp <"vhti","vh'tw","vhte","ve'ntwn"> ; -- b) Mi-verbs with reduplication in the present tense BR 129 -- cc -unqual mkVerbRedupMi "di'dwmi" "dw'sw" "e)'dwka" "de'dwka" "de'domai" "e)do'vhn" "doto's*" mkVerbRedupMi : (ActPresInd, ActFut, ActAor, ActPerf, MedPerf, PassAor, VAdj1 : Str) -> Verb = -- \paideyw, paideysw, epai'deysa, pepai'deyka, pepaideymai, epaideyvhn, paideytos -> \di'dwmi, dw'sw, e'dwka, de'dwka, de'domai, edo'vhn, doto's -> let mC : Str -> Str = Ph.mutaConsonant ; cV : Str -> Str = Ph.contractVowels ; dropS : Str -> Str = \str -> case str of { x + "o'so" => x + "oy~" ; x + "oso" => x + "oy" ; x + "e'so" => x + "oy~" ; _ => str } ; -- verbal stem: dw' = P.tk 2 dw'sw ; -- VAct (_ VInd) Sg dw = dA dw' ; do' = Ph.ablaut dw' ; -- VAct (_ VInd) Pl ; VMed|Pass _ _ do = dA do' ; -- present stem: didw, dido (reduplicated) di'dw = P.tk 2 di'dwmi ; didw = dA di'dw ; di'do = Ph.ablaut di'dw ; dido = dA di'do ; dido' = a3 dido ; edi'do = augment di'do ; edido = dA edi'do ; edidw = augment didw ; -- future stem: dw's dw's = P.tk 1 dw'sw ; dws = dA dw's ; do's = Ph.ablaut dw's ; -- act|med aorist stem: e'dwk e'dwk = P.tk 1 e'dwka ; -- epai'dey edwk = dA e'dwk ; edw'k = a3 edwk ; edo = Ph.ablaut(P.tk 1 edwk) ; e'do = a2 edo ; edo' = a3 edo ; -- act perfect stem: de'dwk = pepaideyk -- weak/strong: k/- de'dwk = P.tk 1 de'dwka ; dedwk = dA de'dwk ; dedw'k = a3 dedwk ; ede'dwk = augment de'dwk ; ededwk = augment dedwk ; ededw'k = augment dedw'k ; -- med|pass perfect stem: dedo = pepaidey de'do = P.tk 3 de'domai ; dedo = dA de'do ; dedo' = a3 dedo ; ededo = augment dedo ; -- pass aorist stem: do-v = epaideyv -- weak/strong: v/- dov = unaspirate (mC (do + "v")) ; -- strong?? edov = augment dov ; edo'v = a3 edov ; -- verbal adjective: do-tos = paidey-tos - dote'os : Str = case doto's of { dot + ("o's"|"o's*") => dot + "e'os*" ; _ => doto's } ; -- Error -- participles partActPres = (adj3nt (di'dw + "wn") (di'dw + "ontos")) ; partActFut = (adj3nt (di'dw + "s" + "wn") (di'dw + "s" + "ontos")) ; partActAor = (adj3nt (di'dw + "sa_s") (di'dw + "sa" + "ntos")) ; partActPerf = (adj3nt (dedwk + "w's") (dedwk + "o'tos")) ; -- TODO fem kuia partMedPres = (adj2AO (dido' + "menos") (dido + "me'nhs")) ; -- check partMedFut = (adj2AO (dws + "o'menos") (dws + "ome'nhs")) ; -- check partMedAorPerf = (adj2AO (dws + "o'menos") (dws + "ome'nhs")) ; -- check -- to share most of the medium table with passive: med = table { Fin (VPres VInd) n p => case of { | => dido' + medPresIndMi n p ; _ => di'do + medPresIndMi n p } ; Fin (VPres VConj) n p => case of { | => cV(dido + medPresConj n p) ; _ => cV(dido' + medPresConj n p) } ; Fin (VPres VOpt) n p => case of { | | => dido+"i'" + medPresOptMi n p ; _ => dido+"i~" + medPresOptMi n p } ; Fin VImpf n p => case of { -- todo <_,P1> | => a3 edido + medImpfIndMi n p ; _ => edi'do + medImpfIndMi n p } ; Fin (VFut FInd) n p => case of { | => dws + medPresInd n p ; _ => dw's + medPresInd n p } ; Fin (VFut FOpt) n p => case of { <_,P1> | => dws + medPresOpt n p ; _ => dw's + medPresOpt n p } ; Fin (VPerf VInd) n p => case of { | => toCircumflex(dedo' + medPerfIndMi n p) ; _ => mC(de'do + medPerfIndMi n p) } ; Fin (VPerf VConj) n p => dedo + (menos n) ++ medPerfConjMi n p ; Fin (VPerf VOpt) n p => dedo + (menos n) ++ medPerfOptMi n p ; Fin (VAor VInd) n p => case of { | | | => a3 edo + medAorIndMi n p ; -- TODO i/y-stems use thematic conj _ => a2 edo + medAorIndMi n p } ; -- BR 128 3 ?? Fin (VAor VConj) n p => case of { | => cV(do + medPresConj n p) ; _ => cV(do' + medPresConj n p) } ; Fin (VAor VOpt) n p => case of { <_,P1> | => do + "i'" + medPresOptMi n p ; _ => do + "i~" + medPresOptMi n p } ; Fin VPlqm n p => case of { <_,P1> | => a3 ededo + medPlqmIndMi n p ; -- TODO accents _ => mC(a2 ededo + medPlqmIndMi n p) } ; Imp IPres np => case np of { SgP2 | PlP2 => di'do + medPerfImp np ; _ => dido' + medPerfImp np } ; Imp IAor np => dropS (do' + medPerfImp np) ; Imp IPerf np => case np of { SgP2 | PlP2 => dropS (mC (a2 dedo + medPerfImp np)) ; -- dedeigso => xo _ => a3 dedo + medPerfImp np } ; -- infinite forms: Inf GPres => di'do + "svai" ; Inf GFut => dw' + "se" + "svai" ; Inf GAor => do' + "svai"; Inf GPerf => de'do + "svai" ; -- perfekt-stem keinai? -- Part GPres af => partMedPres.s ! af ; Part GFut af => partMedFut.s ! af ; Part (GAor | GPerf) af => partMedAorPerf.s ! af } ; in { act = table { Fin (VPres VInd) n p => case of { => di'dw + actPresIndMi n p ; => dido' + actPresIndMi n p ; _ => di'do + actPresIndMi n p } ; Fin (VPres VConj) n p => cV(a3 didw + actPresConj n p) ; -- cV: BR 128 3 Fin (VPres VOpt) n p => case of { => dido+"i'h" + actPresOptMi n p ; => dido+"i'" + actPresOptMi n p ; _ => dido+"i~" + actPresOptMi n p } ; Fin VImpf n p => case of { -- Sg differs for the => edi'do + (case P.dp 1 edi'do of -- 'big' mi-verbs! {"e" => "i" ; "o" => "y" ; _ => ""}) + actImpfIndMi n p ; => a3 edido + actImpfIndMi n p ; _ => edi'do + actImpfIndMi n p } ; Fin (VFut FInd) n p => case n of { Sg => dw's + actPresInd n p ; _ => do's + actPresInd n p } ; -- Pl do' BR 128 2 Fin (VFut FOpt) n p => case of { => dws + actPresOpt n p ; _ => dw's + actPresOpt n p } ; -- -o-i_ why o? Fin (VPerf VInd) n p => case n of { Sg => de'dwk + actPerfIndMi n p ; _ => dedw'k + actPerfIndMi n p } ; Fin (VPerf VConj) n p => dedw'k + actPresConj n p ; Fin (VPerf VOpt) n p => case of { => dA de'dwk + actPresOpt n p ; _ => dedw'k + "oi" + actPresOptMi n p } ; -- oi-h ?? Fin (VAor VInd) n p => case of { => e'dwk + actAorIndMi n p ; => e'dwk + "a" + actAorIndMi n p ; => a3 edo + actAorIndMi n p ; _ => e'do + actAorIndMi n p } ; Fin (VAor VConj) n p => cV(do' + actPresConj n p) ; -- cV BR 128.3 Fin (VAor VOpt) n p => case of { => cV(do + "i'h") + actPresOptMi n p ; => cV(do + "i'") + actPresOptMi n p ; _ => cV(do + "i~") + actPresOptMi n p } ; Fin VPlqm n p => case of { => ededwk + actPlqmIndMi n p ; _ => ededw'k + actPlqmIndMi n p } ; Imp IPres np => case np of { SgP2 | PlP2 => di'do ; _ => dido' } + actPresImpMi np ; Imp IAor np => do' + actAorImpMi np ; Imp IPerf np => "---" ; -- Accents in infinite verb forms: BR 88 Inf GPres => dido' + "nai" ; Inf GFut => dw' + "nai" ; Inf GAor => addAccent (Circum 2) (cV (do + "enai")) ; -- BR 130 c Inf GPerf => dedwk + "e'nai" ; -- Part GPres af => partActPres.s ! af ; Part GFut af => partActFut.s ! af ; Part GAor af => partActAor.s ! af ; Part GPerf af => partActPerf.s ! af } ; med = med ; pass = table { -- just the difference to the medium Fin (VFut FInd) n p => case of { | => dov + passFutIndMi n p ; _ => dov + passFutIndMi n p } ; Fin (VFut FOpt) n p => case of { <_,P1> | => dov + "hs" + medPresOpt n p ; _ => dov + "h's" + medPresOpt n p } ; Fin (VAor VInd) n p => case of { => edov + passAorIndMi n p ; _ => edo'v + passAorIndMi n p } ; Fin (VAor VConj) n p => dov + passAorConjMi n p ; Fin (VAor VOpt) n p => dov + passAorOptMi n p ; Fin tmod n p => med ! (Fin tmod n p) ; Imp IAor np => case np of { SgP2 | PlP2 => di'dw ; _ => didw } + passAorImp np ; Imp itmp np => med ! (Imp itmp np) ; Inf GFut => dov + "h'" + "se" + "svai" ; Inf GAor => dov + "h~" + "nai" ; Inf tmp => med ! (Inf tmp) ; -- GPres => di'do + "svai" ; -- GPerf => de'do + "svai" Part tmp af => med ! (Part tmp af) } ; vadj1 : Adj = adjAO doto's ; vadj2 : Adj = adjAO dote'os ; vtype = VFull } ; -- TODO: nymi-verbs: combine present stem forms of mi-verbs with other forms of w-verbs mkVerbNyMi7 : (s1,_,_,_,_,_,s7 : Str) -> Verb = \dei'knymi, dei'xw, e'deixa, de'deica, de'deigmai, edei'cvhn, deikto's -> let -- EXPENSIVE: vmi = mkVerbRedupMi dei'knymi dei'xw e'deixa de'deica de'deigmai edei'cvhn deikto's ; vw = mkVerbW7voc dei'knymi dei'xw e'deixa de'deica de'deigmai edei'cvhn deikto's ; dei'kny = P.tk 2 dei'knymi ; -- present stem deikny = dA dei'kny ; deikny' = a3 deikny ; in { act = table { Fin (VPres VOpt) n p => case of { => deikny + actPresOpt n p ; _ => deikny' + actPresOpt n p } ; Fin (VPres mod) n p => vmi.act ! (Fin (VPres mod) n p) ; Fin VImpf n p => vmi.act ! (Fin VImpf n p) ; Inf form => vmi.act ! (Inf form) ; Part GPres af => vmi.act ! (Part GPres af) ; -- TODO Part GFut af => vmi.act ! (Part GFut af) ; Part GAor af => vmi.act ! (Part GAor af) ; Part GPerf af => vw.act ! (Part GPerf af) ; else => vw.act ! else } ; med = table { Fin (VPres VOpt) n p => case of { | | => deikny + medPresOpt n p ; _ => deikny' + medPresOpt n p } ; Fin (VPres mod) n p => vmi.med ! (Fin (VPres mod) n p) ; Fin VImpf n p => vmi.med ! (Fin VImpf n p) ; Fin (VPerf mod) n p => vmi.med ! (Fin (VPerf mod) n p) ; -- ? Fin VPlqm n p => vmi.med ! (Fin VPlqm n p) ; -- ? Imp itmp np => vmi.med ! (Imp itmp np) ; -- ? Inf form => vmi.med ! (Inf form) ; Part tmp af => vw.med ! (Part tmp af) ; -- guessed, TODO else => vw.med ! else } ; pass = table { Part tmp af => vw.pass ! (Part tmp af) ;-- TODO form => vmi.pass ! form } ; -- GUESSED vadj1 = vw.vadj1 ; vadj2 = vw.vadj2 ; vtype = VFull ; } ; -- c) Mi-verbs which have the verbal root as present stem: TODO fhmi', ei)~mi, ei)mi' BR 138 mkVerbEimi : (s1,_,_,_,_,_,s7 : Str) -> Verb = \dei'knymi, dei'xw, e'deixa, de'deica, de'deigmai, edei'cvhn, deikto's -> let -- EXPENSIVE: vw = mkVerbW7voc dei'knymi dei'xw e'deixa de'deica de'deigmai edei'cvhn deikto's ; dei'kny = P.tk 2 dei'knymi ; -- present stem deikny = dA dei'kny ; deikny' = a3 deikny ; in -- BR 138 { act = table { Fin (VPres VInd) Sg P1 => "ei)mi'" ; Fin (VPres VInd) Sg P2 => "ei)~" ; Fin (VPres VInd) Sg P3 => "e)sti'n" ; Fin (VPres VInd) Pl P1 => "e)sme'n" ; Fin (VPres VInd) Pl P2 => "e)ste'" ; Fin (VPres VInd) Pl P3 => "ei)si'n" ; Fin (VPres VInd) Dl P1 => "e)sme'n" ; Fin (VPres VInd) Dl p => "ei)'eton" ; -- HL Fin (VPres VConj) Sg P1 => "w)~" ; Fin (VPres VConj) Sg P2 => "h|)~s*" ; Fin (VPres VConj) Sg P3 => "h|)~" ; Fin (VPres VConj) Pl P1 => "w)~men" ; Fin (VPres VConj) Pl P2 => "h)~te" ; Fin (VPres VConj) Pl P3 => "w)~sin" ; Fin (VPres VOpt) Sg p => "ei)'h" + actPresOptMi Sg p ; Fin (VPres VOpt) n p => "ei)~" + actPresOptMi n p ; Fin VImpf Sg P2 => "h)~" + "sva" ; Fin VImpf Sg P3 => "h)~" + "n" ; Fin VImpf n p => "h)~" + actImpfIndMi n p ; Fin (VFut FInd) Sg P3 => "e)'s" + "tai" ; Fin (VFut FInd) Pl P1 => "e)s" + medPresInd Pl P1 ; Fin (VFut FInd) Dl P1 => "e)s" + medPresInd Dl P1 ; Fin (VFut FInd) n p => "e)'s" + medPresInd n p ; Fin (VFut FOpt) Pl P1 => "e)s" + medPresOpt Pl P1 ; Fin (VFut FOpt) Dl P1 => "e)s" + medPresOpt Dl P1 ; Fin (VFut FOpt) n p => "e)'s" + medPresOpt n p ; Inf GPres => "ei)~nai" ; Inf GFut => "e)'sesvai" ; Inf form => vw.act ! (Inf form) ; -- Part GPres af => (adj3nt (cV "w)'n") (cV "o)'ntos*")).s ! af ; Part GFut af => (adj3nt ("e)'s" + "wn") ("e)'s" + "ontos")).s ! af ; Part GAor af => (adj3nt ("gene's" + "a_s") ("genes" + "a'ntos")).s ! af ; Part GPerf af => "---" ; Imp IPres SgP2 => "i)'svi" ; Imp IPres SgP3 => "e)'stw" ; Imp IPres PlP2 => "e)'ste" ; Imp IPres PlP3 => "e)'stwn" ; else => vw.act ! else } ; -- imports wrong forms med = table { _ => "---" } ; pass = table { _ => "---" } ; vadj1 = { s = table { _ => "---" } ; adv = [] } ; vadj2 = { s = table { _ => "---" } ; adv = [] } ; vtype = VFull ; } ; -- vmi = mkVerbMi dei'knymi dei'xw e'deixa de'deica de'deigmai edei'cvhn deikto's ; -- eimi_V : Verb = -- just to have something -- mkVerbRedupMi "ei)mi'" "e)'somai" "e)geno'mhn" -- BR 138 -- "de'deica" "de'deigmai" "e)dei'cvhn" -- rubbish -- "deicto's*" ; -- rubbish eimi_V = mkVerbEimi "ei)m'" "e)'swmai" "e)geno'mhn" "ge'gona" "bla" "bla'vhn" "blato's" ; -- For $Numeral$. Digit = {s : DForm => CardOrd => Str} ; -- TODO: check if adjAO is the proper inflection for ordinals cardOne : Gender * Case => Str = table { => "ei(~s*" ; => "e('na" ; => "e(no's*" ; => "e(ni'" ; < Fem, Nom> => "mi'a" ; < Fem, Acc> => "mi'an" ; < Fem, Gen> => "mia~s*" ; < Fem, Dat> => "mia|~" ; => "e('n" ; <_, Voc> => "e('ne" -- HL } ; cardOrd : Str -> Str -> Str -> CardOrd => Str = \pente,pemptos,pentakis -> table { -- BR 73 NCard g c => case pente of { -- special inflection for eis, dyo, treis, tettares BR 73.1, HL: Voc guessed "ei(~s" => cardOne ! ; "dy'o" => table Case ["dy'o" ; "dy'o" ; "dyoi~n" ; "dyoi~n" ; "dy'a" ] ! c ; "trei~s" => let forms : (Gender * Case) => Str = table { < Masc|Neutr, Nom|Acc > => "trei~s" ; < Fem, Nom|Acc > => "tri'a" ; < _ , Gen > => "triw~n" ; < _ , Dat > => "trisi'" ; < _ , Voc > => "trei~s" } in forms ! ; "te'ttares" => let forms : (Gender * Case) => Str = table { < Masc|Neutr, Nom|Acc > => "te'ttares" ; < Fem, Nom|Acc > => "te'ttara" ; < _ , Gen > => "tetta'rw~n" ; < _ , Dat > => "te'ttarsi" ; < _ , Voc > => "te'ttare" } in forms ! ; adj@(_ + "i") + "oi" => (adjAO (adj+"os")).s ! AF g Pl c ; _ => pente } ; NOrd a => (adjAO pemptos).s ! a ; NAdv => canonize pentakis } ; cardOrdTeen : Str -> Str -> CardOrd => Str = \pentekaideka,pemptos -> let pentekaidekakis : Str = case pemptos of { "tri'tos" => "triskaideka'kis" ; "te'tartos" => "tetrakaideka'kis" ; _ => dA (P.tk 2 pentekaideka) + "ka'kis" } ; cardO : CardOrd => Str = cardOrd pentekaideka pemptos pentekaidekakis ; ordA : AForm => Str = (adjAO pemptos).s ; deka : AForm => Str = (adjAO "de'katos").s in table { NCard g c => cardO ! NCard g c ; NOrd a => case pentekaideka of { d@("e('n" | "dw'") + _ => (dA d) + deka ! a ; _ => ordA ! a ++ "kai`" ++ deka ! a } ; NAdv => canonize pentekaidekakis } ; mkDigit : (x1,_,_,x4,x5 : Str) -> Digit = -- three,thirteen,thirty,third,three-times \treis,treis_kai_deka,triakonta,tritos,tris -> let triakostos : Str = case triakonta of { "de'ka" => "de'katos" ; triako + ("si" | "nta") => (dA triako)+"sto's" } ; triakontakis : Str = case triakonta of { "de'ka" => "deka'kis" ; eiko + "si" => dA eiko + "sa'kis" ; triako + "nta" => (dA triako)+"nta'kis" } ; triakosi : Str = case triakonta of { "de'ka" => "e(kat" ; eiko + "si" => "diako'si" ; triako + "nta" => (dA triako)+"'si" } in {s = table { DUnit => cardOrd treis tritos tris ; DTeen => cardOrdTeen treis_kai_deka tritos; DTen => cardOrd triakonta triakostos triakontakis ; DHundred => case triakonta of { "de'ka" => cardOrd "e(kato'n" "e(katosto's" "e(katonta'kis" ; _ => cardOrd (triakosi + "oi") (dA triakosi + "osto's") (dA triakosi + "a'kis") } } } ; invNum : CardOrd = NCard Masc Nom ; } ;