--1 Romance Word Classes and Morphological Parameters -- resource ParamRomance = ParamX ** open Prelude in { -- This is a resource module for Romance grammars, currently instantiated for -- French, Italian, and Spanish. It defines the -- morphological parameters that are common to all Romance languages. -- The guiding principle has been -- to share as much as possible, which has two advantages: it saves work in -- encoding, and it shows how the languages are related. -- Those parameters that differ are defined in [DiffRomance DiffRomance.html]. -- Some parameters are shared even more widely, such as $Number$ and $Person$. -- They are defined in [ParamX ParamX.html]. --2 Enumerated parameter types for morphology -- -- These types are the ones found in school grammars. -- Their parameter values are atomic. param Gender = Masc | Fem ; Mood = Indic | Conjunct ; -- There are different types of clitic pronouns (as for position). -- Examples of each: "Giovanni" ; "io" ; "lui" ; "noi". ClitType = Clit0 | Clit1 | Clit2 | Clit3 ; -- Adjectives are inflected in gender and number, and there is also an -- adverbial form (e.g. "infiniment"), which has different paradigms and -- can even be irregular ("bien"). -- Comparative adjectives are moreover inflected in degree -- (which in Romance is usually syntactic, though). AForm = AF Gender Number | AA ; -- Gender is not morphologically determined for first and second person pronouns. PronGen = PGen Gender | PNoGen ; -- Cardinal numerals have gender, ordinal numerals have full number as well. CardOrd = NCard Gender | NOrd Gender Number ; -- The following coercions are useful: oper prongen2gender : PronGen -> Gender = \p -> case p of { PGen g => g ; PNoGen => variants {Masc ; Fem} --- the best we can do for je, tu, nous, vous } ; aform2gender : AForm -> Gender = \a -> case a of { AF g _ => g ; _ => Masc -- "le plus lentement" } ; aform2number : AForm -> Number = \a -> case a of { AF _ n => n ; _ => Sg -- "le plus lentement" } ; conjGender : Gender -> Gender -> Gender = \m,n -> case of { => Fem ; _ => Fem } ; conjAgr : Agr -> Agr -> Agr = \a,b -> { g = conjGender a.g b.g ; n = conjNumber a.n b.n ; p = conjPerson a.p b.p } ; --3 Verbs -- -- In the current syntax, we use -- a reduced conjugation with only the present tense infinitive, -- indicative, subjunctive, and imperative forms. -- But our morphology has full Bescherelle conjunctions: -- so we use a coercion between full and reduced verbs. -- The full conjugations and the coercions are defined separately for French -- and Italian, since they are not identical. The differences are mostly due -- to Bescherelle structuring the forms in different groups; the -- gerund and the present participles show real differences. param VF = VInfin | VFin TMood Number Person | VImper NumPersI | VPart Gender Number | VGer ; TMood = VPres Mood | VImperf Mood | VPasse | VFut | VCondit ; NumPersI = SgP2 | PlP1 | PlP2 ; VPForm = VPFinite TMood Anteriority | VPImperat | VPInfinit Anteriority ; -- Agreement of adjectives, verb phrases, and relative pronouns. oper AAgr : Type = {g : Gender ; n : Number} ; Agr : Type = AAgr ** {p : Person} ; param RAgr = RAg {g : Gender ; n : Number} | RNoAg ; --- AAgr oper aagr : Gender -> Number -> AAgr = \g,n -> {g = g ; n = n} ; agrP3 : Gender -> Number -> Agr = \g,n -> aagr g n ** {p = P3} ; vf2numpers : VF -> (Number * Person) = \v -> case v of { VFin _ n p => ; _ => ---- } ; presInd = VPres Indic ; -- The imperative forms depend on number and person. vImper : Number -> Person -> VF = \n,p -> case of { => VImper SgP2 ; => VImper PlP1 ; => VImper PlP2 ; _ => VInfin } ; }