1
0
forked from GitHub/gf-rgl

1. Created Linearization types for V2V as Res.Verb ** {comp,c3 : Str ; typ : Res.VVType} ; but however I have eerors with mkV2 overload methods and lock_C fields. I cannot seem to find out the reason for the error.

This commit is contained in:
David Bamutura
2020-10-12 17:31:40 +03:00
parent 7a07513f8e
commit 7c997ea280
5 changed files with 408 additions and 400 deletions

View File

@@ -6,14 +6,14 @@ param
oper oper
ListX = {s1,s2 : Str} ; ListX = {s1,s2 : Str} ;
twoStr : (x,y : Str) -> ListX = \x,y -> twoStr : (x,y : Str) -> ListX = \x,y -> --stores two strings in a record
{s1 = x ; s2 = y} ; {s1 = x ; s2 = y} ;
consStr : Str -> ListX -> Str -> ListX = \comma,xs,x -> consStr : Str -> ListX -> Str -> ListX = \comma,xs,x ->
{s1 = xs.s1 ++ comma ++ xs.s2 ; s2 = x } ; {s1 = xs.s1 ++ comma ++ xs.s2 ; s2 = x } ;
twoSS : (_,_ : SS) -> ListX = \x,y -> twoSS : (_,_ : SS) -> ListX = \x,y -> --stores two string records into one record
twoStr x.s y.s ; twoStr x.s y.s ;
consSS : Str -> ListX -> SS -> ListX = \comma,xs,x -> consSS : Str -> ListX -> SS -> ListX = \comma,xs,x -> -- Combines and a record into a record separated by a comma.
consStr comma xs x.s ; consStr comma xs x.s ;
Conjunction : Type = SS ; Conjunction : Type = SS ;
@@ -33,7 +33,7 @@ oper
-- all this lifted to tables -- all this lifted to tables
ListTable : PType -> Type = \P -> {s1,s2 : P => Str} ; ListTable : PType -> Type = \P -> {s1,s2 : P => Str} ; --Type family for tables
twoTable : (P : PType) -> (_,_ : {s : P => Str}) -> ListTable P = \_,x,y -> twoTable : (P : PType) -> (_,_ : {s : P => Str}) -> ListTable P = \_,x,y ->
{s1 = x.s ; s2 = y.s} ; {s1 = x.s ; s2 = y.s} ;

View File

@@ -34,7 +34,7 @@ lincat
V,VS, VQ, VA = Res.Verb ; --change to {verb : Str ; comp = []} -- one-place verb e.g. "sleep" V,VS, VQ, VA = Res.Verb ; --change to {verb : Str ; comp = []} -- one-place verb e.g. "sleep"
V2,V2Q, V2S = Res.Verb2; V2,V2Q, V2S = Res.Verb2;
V2A,V3 = Res.Verb3; -- three-place verb e.g. "show" V2A,V3 = Res.Verb3; -- three-place verb e.g. "show"
V2V = Res.Verb ** {comp,c3 : Str ; typ : Res.VVType} ;
VP = Res.VerbPhrase ; -- verb phrase e.g. "is very warm" VP = Res.VerbPhrase ; -- verb phrase e.g. "is very warm"
N = Res.Noun ; -- common noun e.g. "house" N = Res.Noun ; -- common noun e.g. "house"

View File

@@ -24,7 +24,7 @@ lin
computer_N = mkN "kanyabwêngye" ZERO_ZERO ; --kanyabwêngye, embiikabwengye, kompyuta computer_N = mkN "kanyabwêngye" ZERO_ZERO ; --kanyabwêngye, embiikabwengye, kompyuta
cow_N = mkN "ente" N_N ; cow_N = mkN "ente" N_N ;
dog_N = mkN "embwa" N_N ; dog_N = mkN "embwa" N_N ;
--person_N = mkN "omuntu" "abantu" MU_BA ; person_N = mkN "omuntu" MU_BA ;
eye_N = mkN "eriisho" RI_MA; eye_N = mkN "eriisho" RI_MA;
fire_N = mkN "omuriro" MU_MI ; fire_N = mkN "omuriro" MU_MI ;
fish_N = mkN "eky'ényanja" KI_BI ; fish_N = mkN "eky'ényanja" KI_BI ;
@@ -68,7 +68,6 @@ lin
--Adjectives --Adjectives
bad_A = mkAdjective "bi" Post False False; --False means the adjective is a stem and comes after the complete noun bad_A = mkAdjective "bi" Post False False; --False means the adjective is a stem and comes after the complete noun
--beautiful_A = mkAdjective "rungi" False;
big_A = mkAdjective "hango" Post False False; big_A = mkAdjective "hango" Post False False;
black_A = mkAdjective "kwirangura" Post False False; black_A = mkAdjective "kwirangura" Post False False;
blue_A = mkAdjective "buuru" Post True True ; blue_A = mkAdjective "buuru" Post True True ;
@@ -158,298 +157,257 @@ lin
distance_N3 = mkN3 (mkN "orugyendo" ZERO_BU) (lin Prep (mkPrep "kurunga" "" False)) (lin Prep (mkPrep "mpáka" "" False)); --could orugyendo work in its place? distance_N3 = mkN3 (mkN "orugyendo" ZERO_BU) (lin Prep (mkPrep "kurunga" "" False)) (lin Prep (mkPrep "mpáka" "" False)); --could orugyendo work in its place?
alas_Interj ={s="ryakareeba"; }; --: Interj ; alas_Interj ={s="ryakareeba"; }; --: Interj ;
-- New Lexicon
switch8off_V2 = mkV2 "raza" "za" "riize"; switch8off_V2 = mkV2 "raza" "za" "riize";
television_N = mkN "TV" N_N; television_N = mkN "TV" N_N;
doctor_N = mkN "omushaho" MU_BA; doctor_N = mkN "omushaho" MU_BA;
clever_A =mkAdjective "amagyezi" Post False True; clever_A =mkAdjective "amagyezi" Post False True;
laugh_V = mkV "sheka"; laugh_V = mkV "sheka";
beautiful_A = mkAdjective "rungi" Post False False;
airplane_N = mkN "endegye" N_N; airplane_N = mkN "endegye" N_N;
{-- year_N = mkN "omwaka" "emyaka" MU_MI;
answer_V2S
apartment_N -- New Lexicon
art_N {-
ashes_N Perhaps create an adverb form whose
ask_V2Q surface realisation comes from verb tense e.g nagyenzire implies I have alredy gone.
back_N -}
bank_N already_Adv = mkAdv "" AgrNo; -- Already is realized as a verb form
bark_N answer_V2S = mkV2S (mkV "garu" "kamu" "kiremu") noPrep;
beautiful_A apartment_N = mkN "apatimenti" "apatimenti" N_N;
beg_V2V art_N = mkN "aati" "aati" N_N;
belly_N ashes_N = mkN "eiju" "eiju" N_N;
blow_V ask_V2Q = mkV2Q (mkV2 "bunza" "za" "rize") noPrep;
bone_N back_N = mkN "omugongo" MU_MI;
boot_N bank_N = mkN "banka" "banka" N_N;
boss_N bark_N = mkN "ask for the Rukiga equivalent of bark" N_N; --TODO find actual word
breast_N beg_V2V = mkV2V (mkV "shab" "a" "ire") noPrep toP ;
breathe_V belly_N = mkN "eibondo" "amabondo" I_MA ;
broad_A blow_V = mkV "hag" "a" "ire" ;
brother_N2 bone_N = mkN "eigufa" "amagufa" I_MA ;
brown_A boot_N = mkN "buuntu" "buuntu" N_N ;
burn_V boss_N = mkN "mukama" "bakama" MU_BA ;
butter_N breast_N = mkN "eibere" "amabere" I_MA ;
camera_N breathe_V = mkV "is" "a" "ire";
cap_N broad_A = mkAdjective "TODO : Ask for the right word" Post False False;
carpet_N --Note: younger brother. mukuru and others
ceiling_N brother_N2 = mkN2 (mkN "murumuna" "barumuna" MU_BA) (mkPrep "" "" True) ;
cheese_N newspaper_N = mkN "eihurire" I_MA;
church_N night_N = mkN "ekiro" N_ZERO;
coat_N nose_N = mkN "enyindo" N_N;
country_N --number_N = mkN "enamba" N_N -- TODO look out for the correct word
cousin_N oil_N = mkN "amajuta" N_N;
day_N open_V2 = mkV2 "yingura" "ura" "wire";
dig_V -- brown_A
dirty_A -- burn_V
doctor_N -- butter_N
door_N -- camera_N
dry_A -- cap_N
dull_A -- carpet_N
dust_N -- ceiling_N
ear_N -- cheese_N
earth_N -- church_N
easy_A2V -- coat_N
egg_N -- country_N
empty_A -- cousin_N
enemy_N -- day_N
factory_N -- dig_V
fall_V -- dirty_A
far_Adv -- door_N
fat_N -- dry_A
feather_N -- dull_A
fight_V2 -- dust_N
fingernail_N -- ear_N
float_V -- earth_N
floor_N -- easy_A2V
flow_V -- egg_N
fly_V -- empty_A
fog_N -- enemy_N
foot_N -- factory_N
forest_N -- fall_V
forget_V2 -- far_Adv
freeze_V -- fat_N
fridge_N -- feather_N
fruit_N -- fight_V2
full_A -- fingernail_N
fun_AV -- float_V
garden_N -- floor_N
glove_N -- flow_V
gold_N -- fly_V
grass_N -- fog_N
guts_N -- foot_N
hair_N -- forest_N
hand_N -- forget_V2
harbour_N -- freeze_V
hat_N -- fridge_N
hate_V2 -- fruit_N
head_N -- full_A
hear_V2 -- fun_AV
heart_N -- garden_N
hill_N -- glove_N
hit_V2 -- gold_N
hold_V2 -- grass_N
horn_N -- guts_N
hunt_V2 -- hair_N
husband_N -- hand_N
ice_N -- harbour_N
important_A -- hate_V2
industry_N -- head_N
iron_N -- hear_V2
king_N -- heart_N
knee_N -- hill_N
know_V2 -- hit_V2
lake_N -- hold_V2
lamp_N -- horn_N
leaf_N -- hunt_V2
learn_V2 -- husband_N
leather_N -- ice_N
leave_V2 -- important_A
left_Ord -- industry_N
leg_N -- iron_N
lie_V -- king_N
like_V2 -- knee_N
listen_V2 -- know_V2
liver_N -- lake_N
long_A -- lamp_N
lose_V2 -- leaf_N
louse_N -- learn_V2
love_N -- leather_N
married_A2 -- leave_V2
moon_N -- left_Ord
mother_N2 -- leg_N
mountain_N -- lie_V
mouth_N -- like_V2
name_N -- listen_V2
narrow_A -- liver_N
near_A -- long_A
neck_N -- lose_V2
newspaper_N -- louse_N
night_N -- love_N
nose_N -- married_A2
number_N -- moon_N
oil_N -- mother_N2
open_V2 -- mountain_N
paint_V2A -- mouth_N
paper_N -- name_N
peace_N -- narrow_A
pen_N -- near_A
person_N -- neck_N
planet_N -- paint_V2A
plastic_N -- paper_N
play_V2 -- peace_N
policeman_N -- pen_N
priest_N -- planet_N
probable_AS -- plastic_N
pull_V2 -- play_V2
push_V2 -- policeman_N
put_V2 -- priest_N
queen_N -- probable_AS
question_N -- pull_V2
radio_N -- push_V2
rain_N -- put_V2
rain_V0 -- queen_N
religion_N -- question_N
restaurant_N -- radio_N
right_Ord -- rain_N
road_N -- rain_V0
rock_N -- religion_N
roof_N -- restaurant_N
root_N -- right_Ord
rope_N -- road_N
rotten_A -- rock_N
round_A -- roof_N
rub_V2 -- root_N
rubber_N -- rope_N
salt_N -- rotten_A
sand_N -- round_A
school_N -- rub_V2
science_N -- rubber_N
scratch_V2 -- salt_N
seed_N -- sand_N
seek_V2 -- school_N
sew_V -- science_N
sharp_A -- scratch_V2
shirt_N -- seed_N
shoe_N -- seek_V2
shop_N -- sew_V
short_A -- sharp_A
silver_N -- shirt_N
sing_V -- shoe_N
sister_N -- shop_N
sit_V -- short_A
skin_N -- silver_N
sky_N -- sing_V
smell_V -- sister_N
smoke_N -- sit_V
smooth_A -- skin_N
snake_N -- sky_N
snow_N -- smell_V
sock_N -- smoke_N
song_N -- smooth_A
speak_V2 -- snake_N
spit_V -- snow_N
split_V2 -- sock_N
squeeze_V2 -- song_N
stab_V2 -- speak_V2
stand_V -- spit_V
steel_N -- split_V2
stick_N -- squeeze_V2
stone_N -- stab_V2
stop_V -- stand_V
stove_N -- steel_N
straight_A -- stick_N
student_N -- stone_N
stupid_A -- stop_V
suck_V2 -- stove_N
sun_N -- straight_A
swell_V -- student_N
switch8on_V2 -- stupid_A
table_N -- suck_V2
tail_N -- sun_N
teacher_N -- swell_V
thick_A -- switch8on_V2
think_V -- table_N
throw_V2 -- tail_N
tie_V2 -- teacher_N
tongue_N -- thick_A
tooth_N -- think_V
turn_V -- throw_V2
ugly_A -- tie_V2
uncertain_A -- tongue_N
university_N -- tooth_N
village_N -- turn_V
vomit_V -- ugly_A
war_N -- uncertain_A
wash_V2 -- university_N
watch_V2 -- village_N
wet_A -- vomit_V
wide_A -- war_N
wife_N -- wash_V2
win_V2 -- watch_V2
wind_N -- wet_A
window_N -- wide_A
wing_N -- wife_N
wipe_V2 -- win_V2
wonder_VQ -- wind_N
wood_N -- window_N
worm_N -- wing_N
write_V2 -- wipe_V2
-- wonder_VQ
--} -- wood_N
year_N = mkN "omwaka" "emyaka" MU_MI; -- worm_N
-- write_V2
-- End of New Lexicon -- End of New Lexicon
oper oper
aboutP = mkPrep "about" ; aboutP = mkPrep "TODO : find rukiga equivalent of about" "" False ;
atP = mkPrep "at" ; atP = mkPrep "TODO : find rukiga equivalent of at" "" False ;
forP = mkPrep "for" ; forP = mkPrep "TODO : find rukiga equivalent of for" "" False;
fromP = mkPrep "kurunga" "" False; fromP = mkPrep "kurunga" "" False;
inP = mkPrep "omu" "omuri" False; inP = mkPrep "omu" "omuri" False;
onP = mkPrep "aha" "ahari" False; onP = mkPrep "aha" "ahari" False;
toP = mkPrep "aha" [] False; toP = mkPrep ("ku" ++ Predef.BIND) [] False;
--noPrep = mkPrep [] [] False;
{-
--Old LexiconCgg.gf
burn_V = mkV "sya" ;
die_V = mkV "fa" ;
fly_V = mkV "guruka" ;
run_V = mkV "iruka" ;
sleep_V = mkV "byama" ;
walk_V = mkV "tabula" ;
bird_N = mkN "ekinyonyi" KI_BI ;
boat_N = mkN "eryato" RI_MA ;
book_N = mkN "ekitabo" KI_BI ;
boy_N = mkN "omwojo" "abojo" MU_BA ;
car_N = mkN "emootoka" N_N ;
chair_N = mkN "entebbe" N_N;
cloud_N = mkN "ekikyu" KI_BI ;
person_N = mkN "omuntu" "abantu" MU_BA ;
girl_N = mkN "omwishiki" MU_BA ;
shoe_N = mkN "ekaito" N_N ;
table_N = mkN "emeza" N_N ;
bad_A = mkAdjective "bi" False; --False means the adjective is a stem and comes after the complet noun
beautiful_A = mkAdjective "rungi" False;
far_Adv = mkAdv "hare";
now_Adv = mkAdv "hati";
today_Adv = mkAdv "erizooba";
bite_V2 = mkV2 "ruma";
break_V2 = mkV2 "henda";
buy_V2 = mkV2 "gura";
close_V2 = mkV2 "kinga";
count_V2 = mkV2 "bara";
cut_V2 = mkV2 "shara";
do_V2 = mkV2 "kora";
drink_V2 = mkV2 "nywa";
eat_V2 = mkV2 "rya";
fear_V2 = mkV2 "tiina";
-------------------------Differences Rukiga only--------------------
airplane_N : mkN "endegye" N_N;
-}
} }

View File

@@ -27,12 +27,14 @@ oper
mkV : Str -> Verb mkV : Str -> Verb
= \root -> lin V (smartVerb root); --{s =root; pres =[]; perf = []; morphs= mkVerbMorphs; isRegular = True}; --only those verbs whose conjugation involves change of last letter and are done in the same way in both runyankore and rukiga = \root -> lin V (smartVerb root); --{s =root; pres =[]; perf = []; morphs= mkVerbMorphs; isRegular = True}; --only those verbs whose conjugation involves change of last letter and are done in the same way in both runyankore and rukiga
mkV : Str -> Str ->Str -> Verb mkV : Str -> Str ->Str -> Verb
= \root, restPres, restPerf ->lin V (mkVerb root restPres restPerf); --{s =root; pres =restPres; perf = restPerf; morphs= mkVerbMorphs; isRegular = False}; = \root, restPres, restPerf ->lin V (mkVerb root restPres restPerf);
mkV : Str -> Str ->Str ->Str -> Bool -> Verb
= \root, restPres, restPerf, p, bool ->lin V (mkVerbV2X root restPres restPerf p bool);
}; };
mkV2 = overload { mkV2 = overload {
mkV2 : Str -> Verb2 = \root ->mkV root ** {comp =[]}; mkV2 : Str -> V2 = \root ->dirV2 (smartVerb root); --** {comp =[] ; isCompN2 = False};
mkV2 : Str -> Str ->Str -> Verb2 = \root, s1, s2 ->mkV root s1 s2 ** {comp =[]}; mkV2 : Str -> Str ->Str -> V2 = \root, s1, s2 ->dirV2 (mkVerb root s1 s2); --** {comp =[] ; isCompN2 = False};
}; };
mkV3 = overload { mkV3 = overload {
mkV3 : Str -> Verb3 = \root ->mkV2 root ** {comp2 =[]}; mkV3 : Str -> Verb3 = \root ->mkV2 root ** {comp2 =[]};
@@ -44,36 +46,37 @@ oper
--3 Relational nouns --3 Relational nouns
mkN2 : overload { mkN2 : overload {
mkN2 : Str -> N2 ; -- reg. noun, prep. "of" --% --mkN2 : Str -> N2 ; -- reg. noun, prep. "of" --%
mkN2 : N -> N2 ; -- e.g. wife of (default prep. to) --mkN2 : N -> N2 ; -- e.g. wife of (default prep. to)
mkN2 : N -> Str -> N2 ; -- access to --% --mkN2 : N -> Str -> N2 ; -- access to --%
mkN2 : N -> Prep -> N2 ; -- e.g. access to mkN2 : N -> Prep -> N2 ; -- e.g. access to
mkN2 : Str -> Str -> N2 ; -- access to (regular noun) --% --mkN2 : Str -> Str -> N2 ; -- access to (regular noun) --%
} ; } ;
--3 Relational nouns mkN2 = overload {
mkN2 : N -> Prep -> N2 = prepN2 ;
mkN2 : overload { --mkN2 : N -> Str -> N2 = \n,s -> prepN2 n (mkPrep s);
mkN2 : Str -> N2; -- reg. noun, prep. "of" --% --mkN2 : Str -> Str -> N2 = \n,s -> prepN2 (regN n) (mkPrep s);
mkN2 : N -> N2 ; -- e.g. wife of (default prep. to) --mkN2 : N -> N2 = \n -> prepN2 n (mkPrep "of") ;
mkN2 : N -> Str -> N2 ; -- access to --% --mkN2 : Str -> N2 = \s -> prepN2 (regN s) (mkPrep "of")
mkN2 : N -> Prep -> N2 ; -- e.g. access to
mkN2 : Str -> Str -> N2 ; -- access to (regular noun) --%
} ; } ;
mkN2 : N -> Prep -> N2 ; -- mkN2 : N -> Prep -> N2 = \n,p -> case p.isGenPrep of{
mkN2 : N -> Prep -> N2 = \n,p -> case p.isGenPrep of{ -- False => lin N2 (n ** {c2 =\\_=> p.s}) ;
-- True => lin N2 (n ** {c2 = mkGenPrepWithIV }) --avoiding lock_C fields
-- };
prepN2 : N -> Prep -> N2 = \n,p -> case p.isGenPrep of{
False => lin N2 (n ** {c2 =\\_=> p.s}) ; False => lin N2 (n ** {c2 =\\_=> p.s}) ;
True => lin N2 (n ** {c2 = mkGenPrepWithIVClitic}) --avoiding lock_C fields True => lin N2 (n ** {c2 = mkGenPrepWithIV }) --avoiding lock_C fields
}; };
-- Three-place relational nouns ("the connection from x to y") need two prepositions. -- Three-place relational nouns ("the connection from x to y") need two prepositions.
mkN3 : N -> Prep -> Prep -> N3 ; -- e.g. connection from x to y mkN3 : N -> Prep -> Prep -> N3 ; -- e.g. connection from x to y
mkN3 = \n,p,q -> case <p.isGenPrep,q.isGenPrep> of{ mkN3 = \n,p,q -> case <p.isGenPrep,q.isGenPrep> of{
<False,False> => lin N3 ( lin N2 (n ** {c2 =\\_=> p.s}) ** {c3 =\\_=> q.s}); --method of avoiding lock_C fields <False,False> => lin N3 ( lin N2 (n ** {c2 =\\_=> p.s}) ** {c3 =\\_=> q.s}); --method of avoiding lock_C fields
<True, False> => n ** {c2 = mkGenPrepWithIVClitic ; c3 =\\_=> q.s; lock_N2 = <>;lock_N3 = <>} ; <True, False> => n ** {c2 = mkGenPrepWithIV ; c3 =\\_=> q.s; lock_N2 = <>;lock_N3 = <>} ;
<False,True> => n ** {c2 =\\_=> p.s ; c3 = mkGenPrepWithIVClitic; lock_N2 = <>;lock_N3 = <>} ; <False,True> => n ** {c2 =\\_=> p.s ; c3 = mkGenPrepWithIV; lock_N2 = <>;lock_N3 = <>} ;
<True,True> => n ** {c2 = mkGenPrepWithIVClitic; c3 = mkGenPrepWithIVClitic; lock_N2 = <>; lock_N3 = <>} <True,True> => n ** {c2 = mkGenPrepWithIV; c3 = mkGenPrepWithIV; lock_N2 = <>; lock_N3 = <>}
}; };
mkVS : V -> VS ; -- sentence-compl e.g. say (that S) mkVS : V -> VS ; -- sentence-compl e.g. say (that S)
@@ -84,27 +87,51 @@ oper
mkVA : V -> VA ; -- e.g. become (AP) mkVA : V -> VA ; -- e.g. become (AP)
mkVA v = lin VA v ; mkVA v = lin VA v ;
{-
prepV2 v p = lin V2 {s = v.s ; p = v.p ; c2 = p.s ; isRefl = v.isRefl} ;
dirV2 v = prepV2 v noPrep ;
--2 Prepositions
--
-- A preposition as used for rection in the lexicon, as well as to
-- build $PP$s in the resource API, just requires a string.
mkPrep : Str -> Prep ; -- e.g. "in front of" mkV2S : V -> Prep -> V2S ; -- e.g. tell (NP) (that S)
--mkPost : Str -> Prep ; -- e.g. "ago" mkV2S v p = lin V2S (prepV2 v p) ;
noPrep : Prepostion; -- no preposition --mkPrep : Str -> Str ->Bool -> Preposition ; -- e.g. "in front of"
noPrep = mkPrep [] ; mkPrep : Str -> Str ->Bool -> Preposition;
-} mkPrep first other bool = lin Prep {
{- s = first ;
--V2V verbs other = other;
isGenPrep = bool
};
prepV2 : V -> Prep -> V2 ;
prepV2 v p = lin V2 {s = v.s ;
pres = v.pres ;
perf = v.perf ;
isPresBlank = v.isPresBlank ;
isPerfBlank = v.isPerfBlank;
isRegular = v.isRegular;
p = v.p ;
isRefl = v.isRefl;
comp = p.s;
isCompN2 = p.isGenPrep}; --; isRefl = v.isRefl} ;
dirV2 : V -> V2 = \v -> prepV2 v noPrep ;
noPrep = mkPrep [] [] False;
--2 Prepositions
--
-- A preposition as used for rection in the lexicon, as well as to
-- build $PP$s in the resource API, just requires a string.
-- mkPrep : Str -> Str ->Bool -> Prep ; -- e.g. "in front of"
-- noPrep : Prep; -- no preposition
-- noPrep = mkPrep [] [] False;
--mkVQ : V -> VQ ; -- e.g. wonder (QS)
mkV2Q : V -> Prep -> V2Q ; -- e.g. ask (NP) (QS)
mkV2Q v p = lin V2Q (prepV2 v p) ;
--V2V verbs
mkV2V = overload { mkV2V = overload {
mkV2V : Str -> V2V = \s -> lin V2V (dirV2 (regV s) ** {c3 = [] ; typ = VVAux}) ; -- mkV2V : Str -> V2V = \s -> lin V2V (dirV2 (mkV s) ** {c3 = [] ; typ = VVAux}) ;
mkV2V : V -> V2V = \v -> lin V2V (dirV2 v ** {c3 = [] ; typ = VVAux}) ; mkV2V : V -> V2V = \v -> lin V2V (dirV2 v ** {c3 = [] ; typ = VVAux}) ;
mkV2V : V -> Prep -> Prep -> V2V = \v,p,t -> lin V2V (prepV2 v p ** {c3 = t.s ; typ = VVAux}) ; mkV2V : V -> Prep -> Prep -> V2V = \v,p,t -> lin V2V (prepV2 v p ** {c3 = t.s ; typ = VVAux}) ;
} ; } ;
{-
mkV2V : overload { mkV2V : overload {

View File

@@ -40,6 +40,8 @@ param
ImpPol = ImpPos | ImpNeg; ImpPol = ImpPos | ImpNeg;
INumber = ISg | IPl | INeut; INumber = ISg | IPl | INeut;
-- copied from the English Resource Grammar
VVType = VVAux | VVInf | VVPresPart ; -- can do / try to do / start doing
{- {-
--there are several and i.e. --there are several and i.e.
-- na (two nouns, 2 Noun Phrases, 2 Pronouns, 2 relative subject clauses, ) -- na (two nouns, 2 Noun Phrases, 2 Pronouns, 2 relative subject clauses, )
@@ -54,7 +56,7 @@ param
AgrExist = AgrNo | AgrYes Agreement; AgrExist = AgrNo | AgrYes Agreement;
--Position = PostDeterminer | PreDeterminer ; --Position = PostDeterminer | PreDeterminer ;
Position = Post | Pre; Position = Post | Pre;
Variants = V1|V2; --Variants = V1|V2;
--Functional forms of the regular verb --Functional forms of the regular verb
Mood = Infinitive | Imperative | Subjunctive | Perfective; Mood = Infinitive | Imperative | Subjunctive | Perfective;
VerbCat = Simple | Prepositional | Causative; VerbCat = Simple | Prepositional | Causative;
@@ -115,7 +117,22 @@ oper
isPerfBlank = False; isPerfBlank = False;
--morphs = mkVerbMorphs; --morphs = mkVerbMorphs;
isRegular = False; isRegular = False;
p = [];
isRefl = False
}; };
-- creates a verb of type that has particles (prepositions or
--adverbials. this is for phrasal verbs)
mkVerbV2X : Str ->Str ->Str ->Str -> Bool->Verb = \rad, end1,end2, p, bool ->{
s = rad;
pres = end1;
perf = end2;
isPresBlank = False;
isPerfBlank = False;
--morphs = mkVerbMorphs;
isRegular = False;
p = p;
isRefl = bool
};
--These are regular verbs with {a-ire} entry in the dictionary --These are regular verbs with {a-ire} entry in the dictionary
smartVerb : Str ->Verb = \rad ->{ smartVerb : Str ->Verb = \rad ->{
s = rad; s = rad;
@@ -125,6 +142,8 @@ oper
isPresBlank = False; isPresBlank = False;
isPerfBlank = False; isPerfBlank = False;
isRegular = True; isRegular = True;
p = [];
isRefl = False
}; };
{- Smart paradigm {- Smart paradigm
@@ -915,69 +934,69 @@ mkSubjPrefix : Agreement -> Str =\a ->case a of {
_ => mkClitic "XX" -- error checking for any case not catered for _ => mkClitic "XX" -- error checking for any case not catered for
}; };
-- Genetive Preposition: simple "of" without Initila vowel -- Genetive Preposition: simple "of" without Initila vowel. It does not combine
mkGenPrepNoIVClitic : Agreement -> Str = \a -> case a of { mkGenPrepNoIV : Agreement -> Str = \a -> case a of {
AgMUBAP1 n => mkClitics "wa" "ba" n; AgMUBAP1 Sg => "wa";
--AgMUBAP1 Pl => "aba" ; AgMUBAP1 Pl => "ba" ;
AgMUBAP2 n => mkClitics "wa" "ba" n; --probably an error check your grammar book AgMUBAP2 Sg => "wa" ; --probably an error check your grammar book
--AgMUBAP2 Pl => "aba" ; AgMUBAP2 Pl => "ba" ;
AgP3 n MU_BA => mkClitics "wa" "ba" n; AgP3 Sg MU_BA => "wa" ;
--AgP3 Pl MU_BA => "aba" ; AgP3 Pl MU_BA => "ba" ;
AgP3 Pl ZERO_BU => mkClitic "bwa" ; AgP3 Pl ZERO_BU => "bwa" ;
AgP3 Sg BU_MA => mkClitic "bwa" ; AgP3 Sg BU_MA => "bwa" ;
AgP3 Pl (KA_BU | RU_BU) => mkClitic "bwa" ; AgP3 Pl (KA_BU | RU_BU) => "bwa" ;
AgP3 Pl (KI_BI | ZERO_BI) => mkClitic "bya" ; AgP3 Pl (KI_BI | ZERO_BI) => "bya" ;
AgP3 Pl (ZERO_MA | KU_MA | RI_MA | I_MA | BU_MA) => mkClitic "ga"; AgP3 Pl (ZERO_MA | KU_MA | RI_MA | I_MA | BU_MA) => "ga";
AgP3 (Sg | Pl) HA => mkClitic "ha" ; -- of place HA AgP3 (Sg | Pl) HA => "ha" ; -- of place HA
AgP3 (Sg | Pl) MU => mkClitic "mwa" ; -- of place MU AgP3 (Sg | Pl) MU => "mwa" ; -- of place MU
AgP3 (Sg | Pl) KU => mkClitic "ya" ; -- of place KU AgP3 (Sg | Pl) KU => "ya" ; -- of place KU
AgP3 Sg (I_ZERO | I_MA | RI_MA) =>mkClitic "rya" ; AgP3 Sg (I_ZERO | I_MA | RI_MA) => "rya" ;
AgP3 Sg (KA_ZERO | KA_BU) =>mkClitic "ka" ; AgP3 Sg (KA_ZERO | KA_BU) => "ka" ;
AgP3 Sg KI_BI => mkClitic "kya" ; AgP3 Sg KI_BI => "kya" ;
AgP3 Sg (KU_ZERO | KU_MA) => mkClitic "kwa" ; AgP3 Sg (KU_ZERO | KU_MA) => "kwa" ;
AgP3 Sg (MU_MI | MU_ZERO) => mkClitic "gwa" ; AgP3 Sg (MU_MI | MU_ZERO) => "gwa" ;
AgP3 Sg (RU_ZERO | RU_BU | RU_MA| RU_N) => mkClitic "rwa" ; AgP3 Sg (RU_ZERO | RU_BU | RU_MA| RU_N) => "rwa" ;
AgP3 Pl (ZERO_TU | KA_TU) =>mkClitic "twa" ; AgP3 Pl (ZERO_TU | KA_TU) => "twa" ;
AgP3 Sg (ZERO_ZERO | N_N) =>mkClitic "ya" ; AgP3 Sg (ZERO_ZERO | N_N) => "ya" ;
AgP3 Pl ZERO_MI =>mkClitic "ya" ; AgP3 Pl ZERO_MI => "ya" ;
AgP3 Pl MU_MI => mkClitic "emi"; AgP3 Pl MU_MI => "emi";
AgP3 Pl (ZERO_ZERO | ZERO_N | N_N | RU_N) =>mkClitic "za" ; AgP3 Pl (ZERO_ZERO | ZERO_N | N_N | RU_N) => "za" ;
AgP3 Sg GU_GA => mkClitic "gwa" ; AgP3 Sg GU_GA => "gwa" ;
AgP3 Pl GU_GA => mkClitic "ga" ; AgP3 Pl GU_GA => "ga" ;
_ => mkClitic "Error mkGenPrepNoIVClitic" -- error checking for any case not catered for _ => Predef.error "Error mkGenPrepNoIV" -- error checking for any case not catered for
}; };
-- Genetive Preposition: simple "of" with Initil vowel -- Genetive Preposition: simple "of" with Initil vowel
mkGenPrepWithIVClitic : Agreement => Str = table { mkGenPrepWithIV : Agreement => Str = table {
AgMUBAP1 n => mkClitics "owa" "aba" n; AgMUBAP1 Sg => "owa" ;
--AgMUBAP1 Pl => "aba" ; AgMUBAP1 Pl => "aba" ;
AgMUBAP2 n => mkClitics "owa" "aba" n; --probably an error check your grammar book AgMUBAP2 Sg => "owa" ; --probably an error check your grammar book
--AgMUBAP2 Pl => "aba" ; AgMUBAP2 Pl => "aba" ;
AgP3 n MU_BA => mkClitics "owa" "aba" n; AgP3 Sg MU_BA => "owa" ;
--AgP3 Pl MU_BA => "aba" ; AgP3 Pl MU_BA => "aba" ;
AgP3 Pl ZERO_BU => mkClitic "obwa" ; AgP3 Pl ZERO_BU => "obwa" ;
AgP3 Sg BU_MA => mkClitic "obwa" ; AgP3 Sg BU_MA => "obwa" ;
AgP3 Pl (KA_BU | RU_BU) => mkClitic "obwa" ; AgP3 Pl (KA_BU | RU_BU) => "obwa" ;
AgP3 Pl (KI_BI | ZERO_BI) => mkClitic "ebya" ; AgP3 Pl (KI_BI | ZERO_BI) => "ebya" ;
AgP3 Pl (ZERO_MA | KU_MA | RI_MA | I_MA | BU_MA) => mkClitic "aga"; AgP3 Pl (ZERO_MA | KU_MA | RI_MA | I_MA | BU_MA) => "aga";
AgP3 (Sg | Pl) HA => mkClitic "aha" ; -- of place HA AgP3 (Sg | Pl) HA => "aha" ; -- of place HA
AgP3 (Sg | Pl) MU => mkClitic "amwa" ; -- of place MU AgP3 (Sg | Pl) MU => "amwa" ; -- of place MU
AgP3 (Sg | Pl) KU => mkClitic "aya" ; -- of place KU AgP3 (Sg | Pl) KU => "aya" ; -- of place KU
AgP3 Sg (I_ZERO | I_MA | RI_MA) =>mkClitic "arya" ; AgP3 Sg (I_ZERO | I_MA | RI_MA) => "arya" ;
AgP3 Sg (KA_ZERO | KA_BU) =>mkClitic "aka" ; AgP3 Sg (KA_ZERO | KA_BU) => "aka" ;
AgP3 Sg KI_BI => mkClitic "ekya" ; AgP3 Sg KI_BI => "ekya" ;
AgP3 Sg (KU_ZERO | KU_MA) => mkClitic "okwa" ; AgP3 Sg (KU_ZERO | KU_MA) => "okwa" ;
AgP3 Sg (MU_MI | MU_ZERO) => mkClitic "ogwa" ; AgP3 Sg (MU_MI | MU_ZERO) => "ogwa" ;
AgP3 Sg (RU_ZERO | RU_BU | RU_MA| RU_N) => mkClitic "orwa" ; AgP3 Sg (RU_ZERO | RU_BU | RU_MA| RU_N) => "orwa" ;
AgP3 Pl (ZERO_TU | KA_TU) =>mkClitic "otwa" ; AgP3 Pl (ZERO_TU | KA_TU) => "otwa" ;
AgP3 Sg (ZERO_ZERO | N_N) =>mkClitic "eya" ; AgP3 Sg (ZERO_ZERO | N_N) => "eya" ;
AgP3 Pl ZERO_MI =>mkClitic "eya" ; AgP3 Pl ZERO_MI => "eya" ;
AgP3 Pl MU_MI => mkClitic "emi"; AgP3 Pl MU_MI => "emi";
AgP3 Pl (ZERO_ZERO | ZERO_N | N_N | RU_N) =>mkClitic "eza" ; AgP3 Pl (ZERO_ZERO | ZERO_N | N_N | RU_N) => "eza" ;
AgP3 Sg GU_GA => mkClitic "ogwa" ; AgP3 Sg GU_GA => "ogwa" ;
AgP3 Pl GU_GA => mkClitic "aga" ; AgP3 Pl GU_GA => "aga" ;
_ => mkClitic "Error mkGenPrepWithIVClitic" -- error checking for any case not catered for _ => Predef.error "Error in mkGenPrepWithIVClitic : no pattern matched" -- error checking for any case not catered for
}; };
@@ -1253,13 +1272,11 @@ mkSubjPrefix : Agreement -> Str =\a ->case a of {
-- Structural -- Structural
-- prepositions sometimes have two kinds, near or far i.e omu or omuri -- prepositions sometimes have two kinds, near or far i.e omu or omuri
-- ho -- We ignore the distal dexis to be entered as a separate lemma
Preposition = {s,other : Str; isGenPrep : Bool}; -- Instead str for positional arguments 1 & 2 cater for prepositions that inflect with Number
mkPrep : Str -> Str ->Bool -> Preposition = \ first, other, isGenPrep -> { -- while str for positional argument 3 caters for those that do not inflect with Number
s = first ; Preposition : Type = {s : Str; other : Str; isGenPrep : Bool};
other = other;
isGenPrep = isGenPrep
};
NounPhrase : Type = {s :Case => Str; agr : Agreement}; NounPhrase : Type = {s :Case => Str; agr : Agreement};
{- {-
Operation to create Noun Phrases from a Determiner and Nouns. Operation to create Noun Phrases from a Determiner and Nouns.
@@ -1308,7 +1325,9 @@ mkSubjPrefix : Agreement -> Str =\a ->case a of {
--morphs: VFormMini => VerbMorphPos=> Str; --morphs: VFormMini => VerbMorphPos=> Str;
isPresBlank : Bool; isPresBlank : Bool;
isPerfBlank : Bool; isPerfBlank : Bool;
isRegular:Bool isRegular: Bool;
p : Str; -- some verbs have particles such as prepositions and adverbial that give the verb a meaning different from what would be automatically deduced
isRefl : Bool
}; };
GVerb : Type = { GVerb : Type = {
@@ -1327,7 +1346,7 @@ mkSubjPrefix : Agreement -> Str =\a ->case a of {
Because of the fusion, I have deffered including this in Because of the fusion, I have deffered including this in
the compPrep. Actually, it is going to be empty in the next version the compPrep. Actually, it is going to be empty in the next version
-} -}
Verb2 : Type = Verb ** {comp:Str}; Verb2 : Type = Verb ** {comp: Str; isCompN2: Bool};
Verb3 : Type = Verb2 ** {comp2 : Str} ; Verb3 : Type = Verb2 ** {comp2 : Str} ;
{- {-
Given a root, can you form the different verbforms? Given a root, can you form the different verbforms?
@@ -1385,7 +1404,9 @@ mkSubjPrefix : Agreement -> Str =\a ->case a of {
--morphs= mkVerbMorphs; --morphs= mkVerbMorphs;
isPresBlank = True; isPresBlank = True;
isPerfBlank = True; isPerfBlank = True;
isRegular=False isRegular=False;
p = [];
isRefl = False
}; };
mkBecome : Verb ={ mkBecome : Verb ={
s = "b" ; s = "b" ;
@@ -1394,7 +1415,9 @@ mkSubjPrefix : Agreement -> Str =\a ->case a of {
isPresBlank = False; isPresBlank = False;
isPerfBlank = False; isPerfBlank = False;
--morphs= mkVerbMorphs; --morphs= mkVerbMorphs;
isRegular=False isRegular=False;
p = [];
isRefl = False
}; };
@@ -1538,7 +1561,7 @@ mkSubjPrefix : Agreement -> Str =\a ->case a of {
glue: Str -> Str ->Str =\ x, y -> x ++ BIND ++ y; glue: Str -> Str ->Str =\ x, y -> x ++ BIND ++ y;
--Concatenates two strings for the genetive case --Concatenates two strings for the genetive case
glueGen: Agreement ->Str = \ a -> mkGenPrepNoIVClitic a ++ BIND ++ mkGenAdjSuffix a; glueGen: Agreement ->Str = \ a -> mkGenPrepNoIV a ++ BIND ++ mkGenAdjSuffix a;
--Number determining element --Number determining element
Numer : Type = { s: Agreement => Str ; n : Number; numeralExists:Bool}; Numer : Type = { s: Agreement => Str ; n : Number; numeralExists:Bool};