Intro
 
Lession 1
 
Lession 2
 
Lession 3
 
Lession 4
 
Lession 5
 
Lession 6
 
Lession 7
 
Lession 8
 
Lession 9
 
Lession 10
 
Lession 11
 
Lession 12
 
Lession 13
 
Lession 14
 
Lession 15
 
Lession 16
 
Lession 17
 
Lession 18
 
Lession 19
 
Contact
 
 

 
Home | Text version
 
Download swi-prolog | Download these scripts

Learn Definite Clause Grammars (DCG) with Toki Pona

Lession 10

Our little system have to learn everything about Conjunctions and Temperature.

With "anu" you can build decision questions. There are two types of decision questions: subject or verb phrases.

question                --> question_decision_s.
question                --> question_decision_v.
 
question_decision_s     --> subject,                               conjunction(anu),       subject,              separator(li),  verb_phrases.
question_decision_v     --> noun_phrase, verb_phrases,             conjunction(anu),                                             verb_phrases.

With "anu" you can build "or-what" questions, for example: "Are you coming or what?" Maybe this is not a real question. It is more an imperativ.

question                --> question_or_what.    
question_or_what        --> noun_phrase, verb_phrases,             conjunction(anu),       question_word(seme).

With "en" you can combine subjects.

subject                 --> pronoun_compound,          subject_add.
subject                 --> noun_compound,             subject_add.

subject_add             --> [].                                                                                                        
subject_add             --> conjunction(en), subject,  subject_add.

"anu" can be used for two direct objects: "mi lukin e mije anu meli."

direct_object            --> separator(e),        noun_compound,          object_optional_add. 
direct_object            --> separator(e),        pronoun_compound,       object_optional_add.

intrans_object          --> noun_compound,                                object_optional_add.                 
intrans_object          --> pronoun_compound,                             object_optional_add.                  

prepositional_object    --> preposition(_),       noun_compound,          object_optional_add.
prepositional_object    --> preposition(_),       pronoun_compound,       object_optional_add.

object_optional_add     --> [].
object_optional_add     --> conjunction(anu),     noun_compound.    
object_optional_add     --> conjunction(anu),     pronoun_compound.

With "en" you can combine words behind "pi" to build more complex compound nouns.

noun_phrase             --> pronoun_no_li,      conjunction(en),       subject,   subject_add,   separator(li).
noun_phrase             --> pronoun_with_li,    subject_add,                                     separator(li).
noun_phrase             --> noun_compound,      subject_add,                                     separator(li).

noun_second_group_add   --> [].  
noun_second_group_add   --> conjunction(en), pronoun_compound,   noun_second_group_add.
noun_second_group_add   --> conjunction(en), noun_compound,      noun_second_group_add.

conjunctions            --> [].
conjunctions            --> conjunction(_).

Furthermor you can start a sentences with an conjunction, for example: "taso mi jo ala e moku.".

sentence_declarative     --> conjunctions,             sentence_simple.                                                                  % A declarative sentence can be an simple sentence. 
sentence_declarative     --> conjunctions,             sentence_simple,   separator(':'),              sentence_simple.                  % A declarative sentence can build of two simple sentences separated by a colon (sentence_hint).
sentence_declarative     --> answer_yes.                                                                                                 % A declarative sentence can be a yes answer.
sentence_declarative     --> answer_no.                                                                                                  % A declarative sentence can be a no answer.
sentence_declarative     --> conjunctions, vocativ.                                                                                      % A declarative sentence can be a vocativ sentence (addressing people).
sentence_declarative     --> salutation.                                                                                                 % A declarative sentence can be a salutation.
sentence_declarative     --> conjunctions, interjection.                                                                                 % A declarative sentence can be an interjection.
sentence_declarative     --> conjunctions, vocativ_interjection.                                                                         % A declarative sentence can be an interjection and vocativ sentence.
sentence_declarative     --> conjunctions, designate.                                                                                    % Special sentence for designate, for example: nimi mi li Lope.

sentence_exclamatory     --> sentence_declarative.                                                                                       % A exclamatory sentence can has the same structure as an declarative sentence.

sentence_imperative      --> conjunctions, imperative.                                                                                   % An imperative sentence (command).
sentence_imperative      --> conjunctions, vocativ_imperative.                                                                           % An imperative sentence (command) can be a vocativ imperativ.

sentence_interrogative   --> conjunctions, question.                                                                                     % An interrogative sentence (question) can be a question.
sentence_interrogative   --> conjunctions, vocativ_question.                                                                             % An interrogative sentence (question) can be a vocativ question.
toki-pona-10.pro
Source code:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Learn Definite Clause Grammars with toki pona
% toki pona - Lession 10 - Conjunctions and Temperature
% by Robert Warnke http://rowa.giso.de
% released under the GNU General Public License 
%
% ['toki-pona-10.pro'].
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Grammar  
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% sentence types:

sentence                 --> sentence_declarative,                                                       separator('.').   % A declarative sentence states a fact or an argument and ends with a full stop.
sentence                 --> sentence_exclamatory,                                                       separator('!').   % An exclamatory sentence makes also conveys excitement and ends with an exclamation mark.
sentence                 --> sentence_imperative,                                     (separator('!') ;  separator('.')).  % An imperative sentence (command) can ends with an exclamation mark or a full stop.
sentence                 --> sentence_interrogative,                                                     separator('?').   % An interrogative sentence (questions) always ends in a question mark.


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% definitions of the sentence types:

sentence_declarative     --> conjunctions,             sentence_simple.                                                                  % A declarative sentence can be an simple sentence. 
sentence_declarative     --> conjunctions,             sentence_simple,   separator(':'),              sentence_simple.                  % A declarative sentence can build of two simple sentences separated by a colon (sentence_hint).
sentence_declarative     --> answer_yes.                                                                                                 % A declarative sentence can be a yes answer.
sentence_declarative     --> answer_no.                                                                                                  % A declarative sentence can be a no answer.
sentence_declarative     --> conjunctions, vocativ.                                                                                      % A declarative sentence can be a vocativ sentence (addressing people).
sentence_declarative     --> salutation.                                                                                                 % A declarative sentence can be a salutation.
sentence_declarative     --> conjunctions, interjection.                                                                                 % A declarative sentence can be an interjection.
sentence_declarative     --> conjunctions, vocativ_interjection.                                                                         % A declarative sentence can be an interjection and vocativ sentence.
sentence_declarative     --> conjunctions, designate.                                                                                    % Special sentence for designate, for example: nimi mi li Lope.

sentence_exclamatory     --> sentence_declarative.                                                                                       % A exclamatory sentence can has the same structure as an declarative sentence.

sentence_imperative      --> conjunctions, imperative.                                                                                   % An imperative sentence (command).
sentence_imperative      --> conjunctions, vocativ_imperative.                                                                           % An imperative sentence (command) can be a vocativ imperativ.

sentence_interrogative   --> conjunctions, question.                                                                                     % An interrogative sentence (question) can be a question.
sentence_interrogative   --> conjunctions, vocativ_question.                                                                             % An interrogative sentence (question) can be a vocativ question.


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% special sentences:

sentence_simple          --> noun_phrase,          verb_phrases.                                                           % A simple sentence consist of a noun phrase and verb phrases. 

answer_yes               -->                       verb_transitive(_).
answer_yes               --> verb_pre(Vp),         verb_transitive(V), {V\=Vp}.
answer_yes               --> verb_pre(_).

answer_no                -->                                                 noun(ala).
answer_no                -->                       verb_transitive(_),       adverb(ala).
answer_no                --> verb_pre(Vp),                                   adverb(ala),  verb_transitive(V), {V\=Vp}.
answer_no                --> verb_pre(_),                                    adverb(ala).

vocativ                  --> subject,                                        separator(o).
vocativ                  --> subject,                                        separator(o), separator(','), noun_phrase, verb_phrases.
vocativ_interjection     --> subject,                                        separator(o), separator(','),              verb_phrases.

interjection             --> interjection_word(_).
interjection             --> interjection_word(a), interjection_word(a),     interjection_word(a).                                       % "a a a." laughing
interjection             --> subject,                                        separator(o),                   interjection_word(a).       % Addressing people really emotional.
interjection             -->              sentence_simple,                                                   interjection_word(a).       % A interjection sentence can build of a simple sentence and an "a"..
interjection             -->              sentence_simple,   separator(':'),  sentence_simple,               interjection_word(a).       % A interjection sentence can build of two simple sentences separated by a colon and followed by an "a".

salutation               --> noun(suno),                    adjectiv(pona).                                                              % Salutation: Good day!
salutation               --> noun(lape),                    adjectiv(pona).                                                              % Salutation: Sleep well!
salutation               --> noun(moku),                    adjectiv(pona).                                                              % Salutation: Enjoy your meal!
salutation               --> noun(tawa),                    adjectiv(pona).                                                              % Salutation: Good bye!
salutation               --> noun(kama),                    adjectiv(pona).                                                              % Salutation: Welcome!
salutation               --> noun(musi),                    adjectiv(pona).                                                              % Salutation: Have fun!
salutation               --> pronoun(mi),                   adjectiv(tawa).                                                              % Salutation: Good bye! (I go)   
salutation               --> pronoun(mi), adjectiv(mute),   adjectiv(tawa).                                                              % Salutation: Good bye! (we go) 

imperative               -->                                                 separator(o),                   verb_phrases.               % An imperative starts with an "o" as a noun phrase.
vocativ_imperative       --> pronoun_compound,                               separator(o),                   verb_phrases.               % An vocative imperative sentence has an "o" instead of a "li".
vocativ_imperative       --> noun_compound,                                  separator(o),                   verb_phrases.

designate                --> noun(nimi),                                                pronoun(_), separator(li), female_prominent_personage(_).  % Normally unofficial word need a noun before because there are adjectives.
designate                --> noun(nimi),                                                pronoun(_), separator(li), male_prominent_personage(_).    % But in Toki Pona is no word for "be" and adjectives can be after "li".
designate                --> noun(nimi),                                                pronoun(_), separator(li), female_name(_).
designate                --> noun(nimi),                                                pronoun(_), separator(li), male_name(_).
designate                --> noun(nimi), separator(pi), noun(ma),                       pronoun(_), separator(li), continent(_).
designate                --> noun(nimi), separator(pi), noun(ma),      adjectiv(suli),  pronoun(_), separator(li), continent(_).
designate                --> noun(nimi), separator(pi), noun(ma),                       pronoun(_), separator(li), country(_).
designate                --> noun(nimi), separator(pi), noun(ma),      adjectiv(tomo),  pronoun(_), separator(li), city(_).
designate                --> noun(nimi), separator(pi), noun(toki),                     pronoun(_), separator(li), language(_).
designate                --> noun(nimi), separator(pi), noun(toki),    adjectiv(luka),  pronoun(_), separator(li), sign_language(_).
designate                --> noun(nimi), separator(pi), noun(nasin),   adjectiv(sewi),  pronoun(_), separator(li), ideology(_).
designate                --> noun(nimi), separator(pi), noun(nasin),   adjectiv(pona),  pronoun(_), separator(li), ideology(_).
designate                --> noun(nimi), separator(pi), noun(kulupu),                   pronoun(_), separator(li), community(_).

vocativ_question         --> noun_compound,                              separator(o), separator(','), question.                         % Addressing and asking.    

question                 --> question_yes_no.                                                                                            % A question can be a yes/no question.
question                 --> question_pardon.                                                                                            % Pardon? = seme?
question                 --> question_what_subject.
question                 --> question_what_object_d.                                                                                     % What direct object
question                 --> question_what_object_i.                                                                                     % What intransitives object
question                 --> question_what_object_p.                                                                                     % What prepositional object
question                 --> question_what_verb.                                                                                 
question                 --> question_where.
question                 --> question_wherefrom.
question                 --> question_who.
question                 --> question_whom.
question                 --> question_which_subject.
question                 --> question_which_object_d.
question                 --> question_which_object_i.
question                 --> question_which_object_p.
question                 --> question_why.
question                 --> question_how.
question                 --> question_or_what.                                                                                           % ... anu seme? - Not a real question. It is more an imperativ.

question                 --> question_decision_s.
question                 --> question_decision_v.
                                                               
question_yes_no          --> noun_phrase, question_yn_verb_phrase.                                                                       % A Yes/No questions consist of a noun phrase and a special verb phrase.

question_pardon          --> question_word(seme).

question_what_subject    --> question_word(seme),                         separator(li),                    verb_phrases.
question_what_object_d   --> noun_phrase,                                 verb_transitive_compound,                                 separator(e),                     question_word(seme).
question_what_object_i   --> noun_phrase,                                 verb_intransitive_compound,                                                                 question_word(seme).
question_what_object_p   --> noun_phrase,                                 verb_transitive_compound,                                 preposition(P), {P\=lon,P\=tan},  question_word(seme). % lon is for where-questions. tan is for why- and wherefrom-questions.

question_what_verb       --> noun_phrase,  question_word(seme),           direct_objects.                                                % Is seme a transitive verb?
question_what_verb       --> noun_phrase,  question_word(seme),           intrans_objects.                                               % Is seme a intransitive verb?
question_what_verb       --> noun_phrase,  question_word(seme),           prepositional_objects.

question_where           --> noun_phrase,                                 preposition(lon),                                                                           question_word(seme).

question_wherefrom       --> noun_phrase,  verb_transitive(kama),         preposition(tan),                               noun_compound,                              question_word(seme).

question_who             --> noun(jan),            question_word(seme),   noun_pi_groups,     separator(li),   verb_phrases.
question_who             --> noun(meli),           question_word(seme),   noun_pi_groups,     separator(li),   verb_phrases.
question_who             --> noun(mije),           question_word(seme),   noun_pi_groups,     separator(li),   verb_phrases.

question_whom            --> noun_phrase,          verb_phrases,          separator(e),       noun(jan),       adjectives,     question_word(seme).
question_whom            --> noun_phrase,          verb_phrases,          separator(e),       noun(meli),      adjectives,     question_word(seme).
question_whom            --> noun_phrase,          verb_phrases,          separator(e),       noun(mije),      adjectives,     question_word(seme).
question_whom            --> noun_phrase,          verb_phrases,          preposition(_),     noun(jan),       adjectives,     question_word(seme).
question_whom            --> noun_phrase,          verb_phrases,          preposition(_),     noun(meli),      adjectives,     question_word(seme).
question_whom            --> noun_phrase,          verb_phrases,          preposition(_),     noun(mije),      adjectives,     question_word(seme).

question_which_subject   --> subject, question_word(seme),                separator(li),                      verb_phrases.

question_which_object_d  --> noun_phrase,                                 verb_transitive_compound,                                 separator(e),                     noun(N), {N\=jan,N\=meli,N\=mije,N\=tan}, adjectives, question_word(seme).
question_which_object_i  --> noun_phrase,                                 verb_intransitive_compound,                                                                 noun(N), {N\=jan,N\=meli,N\=mije,N\=tan}, adjectives, question_word(seme).
question_which_object_p  --> noun_phrase,                                 verb_transitive_compound,                                 preposition(P), {P\=lon,P\=tan},  noun(N), {N\=jan,N\=meli,N\=mije,N\=tan}, adjectives, question_word(seme).

question_why             --> noun_phrase, verb_phrases,                       noun(tan),    question_word(seme).

question_how             --> noun_phrase, verb_phrases, preposition(kepeken), noun(nasin),  question_word(seme).

question_or_what         --> noun_phrase, verb_phrases,             conjunction(anu),       question_word(seme).

question_decision_s      --> subject,                               conjunction(anu),       subject,              separator(li),  verb_phrases.
question_decision_v      --> noun_phrase, verb_phrases,             conjunction(anu),                                             verb_phrases.


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%  phrases:

noun_phrase              --> pronoun_no_li.
noun_phrase              --> pronoun_no_li,             conjunction(en), subject, subject_add,   separator(li).
noun_phrase              --> pronoun_with_li,           subject_add,                             separator(li).
noun_phrase              --> noun_compound,             subject_add,                             separator(li).

subject                  --> pronoun_compound,          subject_add.
subject                  --> noun_compound,             subject_add.

subject_add              --> [].                                                                                                        % Combine (pro)nouns with "en".
subject_add              --> conjunction(en), subject, subject_add.

verb_phrases             --> verb_phrase,         verb_phrase_add.
verb_phrase              --> verb_transitive_compound,                                       direct_objects,   prepositional_objects.
verb_phrase              --> verb_intransitive_compound,                                     intrans_objects,  prepositional_objects.
verb_phrase              --> adjectiv(_),               adjectives.                                                                     % In toki pona is no verb "to be". 
verb_phrase              --> pronoun_compound.                                                                                          % In toki pona is no verb "to be".
verb_phrase              --> noun_compound.                                                                                             % In toki pona is no verb "to be". 
verb_phrase_add          --> [].
verb_phrase_add          --> separator(li),       verb_phrase,          verb_phrase_add.

question_yn_verb_phrase  -->                                                      verb_transitive(Verb),   adverb(ala), verb_transitive(Verb),   direct_objects,  prepositional_objects.
question_yn_verb_phrase  --> verb_pre(Verb_pre), adverb(ala), verb_pre(Verb_pre), verb_transitive(Verb), { Verb \= Verb_pre },                   direct_objects,  prepositional_objects.
question_yn_verb_phrase  --> verb_pre(Verb_pre), adverb(ala), verb_pre(Verb_pre),                                                                direct_objects,  prepositional_objects.
question_yn_verb_phrase  -->                                                      verb_intransitive(Verb), adverb(ala), verb_intransitive(Verb), intrans_objects, prepositional_objects.
question_yn_verb_phrase  --> verb_pre(Verb_pre), adverb(ala), verb_pre(Verb_pre), verb_intransitive(Verb), { Verb \= Verb_pre },                 intrans_objects, prepositional_objects.


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% objects:

direct_objects           --> [].                                                                                                        % no direct object
direct_objects           --> direct_object,       direct_objects.   
direct_object            --> separator(e),        noun_compound,          object_optional_add. 
direct_object            --> separator(e),        pronoun_compound,       object_optional_add.

intrans_objects         --> [].      
intrans_objects         --> intrans_object.
intrans_object          --> noun_compound,                                object_optional_add.                 
intrans_object          --> pronoun_compound,                             object_optional_add.                  

prepositional_objects   --> [].                       
prepositional_objects   --> prepositional_object, prepositional_objects.
prepositional_object    --> comma_optional,       preposition(_),       noun_compound,          object_optional_add.
prepositional_object    --> comma_optional,       preposition(_),       pronoun_compound,       object_optional_add.

object_optional_add     --> [].
object_optional_add     --> conjunction(anu),     noun_compound.                                                                        % "mi kute e mije anu meli." pu page 64
object_optional_add     --> conjunction(anu),     pronoun_compound.


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% pronouns:

pronoun_optional        --> [].
pronoun_optional        --> pronoun(_).

pronoun_no_li           --> pronoun(mi).                                                                                             % "mi" or "sina" need no "li".
pronoun_no_li           --> pronoun(sina).                                                                                           % "mi" or "sina" need no "li".
pronoun_with_li         --> pronoun(P), {P\=mi,P\=sina}.                                                                             % These pronouns need a "li".
pronoun_with_li         --> pronoun(_),                               adjectiv(mute).                                                % These compund pronouns need a "li".
pronoun_compound        --> pronoun(_),                               adjectives.                                                    % All (compound) pronouns.


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% nouns:

noun_compound           --> noun_compound_geography,                      noun_pi_groups.                                            % The special rules have to be before the general rules.
noun_compound           --> noun_compound_language,                       noun_pi_groups.
noun_compound           --> noun_compound_ideology,                       noun_pi_groups.
noun_compound           --> noun_compound_community,                      noun_pi_groups.
noun_compound           --> noun_compound_person,                         noun_pi_groups.
noun_compound           --> noun(_),                     adjectives,      noun_pi_groups.                                            % A compound noun can be build with a noun and optional adjectives and optional "pi" and a second noun group. 

noun_pi_groups          --> [].                                                                                                      % A noun can have no pi-phrase
noun_pi_groups          --> noun_pi_group.
noun_pi_groups          --> noun_pi_group,  noun_pi_group.
noun_pi_groups          --> noun_pi_group,  noun_pi_group,  noun_pi_group.                                                           % A noun can have up to three pi-phrase 

noun_pi_group           --> separator(pi),  noun_compound_geography,                                                 noun_second_group_add.
noun_pi_group           --> separator(pi),  noun_compound_language,                                                  noun_second_group_add.
noun_pi_group           --> separator(pi),  noun_compound_ideology,                                                  noun_second_group_add.
noun_pi_group           --> separator(pi),  noun_compound_person,                                                    noun_second_group_add.
noun_pi_group           --> separator(pi),  noun_compound_community,                                                 noun_second_group_add.
noun_pi_group           --> separator(pi),  noun(_),                  adjectiv(_),       adjectives,                 noun_second_group_add.    % after "pi" have to be at least two words.
noun_pi_group           --> separator(pi),  noun(_),                                     adjectives,    pronoun(_),  noun_second_group_add.    
noun_pi_group           --> separator(pi),  pronoun(_),               adjectiv(_),       adjectives,                 noun_second_group_add. 
noun_pi_group           --> separator(pi),  pronoun(_),               adjectiv(_),       adjectives,                 noun_second_group_add. 
noun_pi_group           --> separator(pi),  noun(_),                             conjunction(en), noun_compound,     noun_second_group_add.    % after "pi" have to be at least two words.
noun_pi_group           --> separator(pi),  noun(_),                             conjunction(en), pronoun_compound,  noun_second_group_add.    % after "pi" have to be at least two words.
noun_pi_group           --> separator(pi),  pronoun(_),                          conjunction(en), noun_compound,     noun_second_group_add.    % after "pi" have to be at least two words.
noun_pi_group           --> separator(pi),  pronoun(_),                          conjunction(en), pronoun_compound,  noun_second_group_add.    % after "pi" have to be at least two words.

noun_second_group_add   --> [].                                                                                                                % Combine (pro)nouns with "en".
noun_second_group_add   --> conjunction(en), pronoun_compound, noun_second_group_add.
noun_second_group_add   --> conjunction(en), noun_compound,    noun_second_group_add.

noun_compound_geography --> noun(ma),                     continent(_),                     adjectives.
noun_compound_geography --> noun(ma),    adjectiv(suli),  continent(_),                     adjectives.
noun_compound_geography --> noun(ma),                     country(_),                       adjectives.
noun_compound_geography --> noun(ma),    adjectiv(tomo),  city(_),                          adjectives.
noun_compound_language  --> noun(toki),                   language(_),                      adjectives.
noun_compound_language  --> noun(toki),  adjectiv(luka),  sign_language(_),                 adjectives.                                 % sign language (luka = hand)
noun_compound_ideology  --> noun(nasin), adjectiv(sewi),  ideology(_),                      adjectives.
noun_compound_ideology  --> noun(nasin), adjectiv(pona),  ideology(_),                      adjectives.
noun_compound_community --> noun(kulupu),                 community(_),                     adjectives.   

noun_compound_person    --> noun(jan),                    resident(_),                      adjectives.
noun_compound_person    --> noun(jan),                    female_prominent_personage(_),    adjectives.
noun_compound_person    --> noun(jan),                    male_prominent_personage(_),      adjectives.
noun_compound_person    --> noun(jan),                    female_name(_),                   adjectives.
noun_compound_person    --> noun(jan),                    male_name(_),                     adjectives.
noun_compound_person    --> noun(meli),                   resident(_),                      adjectives.
noun_compound_person    --> noun(meli),                   female_prominent_personage(_),    adjectives.
noun_compound_person    --> noun(meli),                   female_name(_),                   adjectives.
noun_compound_person    --> noun(mije),                   resident(_),                      adjectives.
noun_compound_person    --> noun(mije),                   male_prominent_personage(_),      adjectives.
noun_compound_person    --> noun(mije),                   male_name(_),                     adjectives.
noun_compound_person    --> noun(jan),                    adjectives_at_least_one,          adjectives.
noun_compound_person    --> noun(meli),                   adjectives_at_least_one,          adjectives.
noun_compound_person    --> noun(mije),                   adjectives_at_least_one,          adjectives.


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% verbs:

verb_transitive_compound   --> verb_pre_optional,   adverbs,   verb_transitive(_),      adverbs.

verb_intransitive_compound --> verb_pre_optional,   adverbs,   verb_intransitive(_),    adverbs.

verb_pre_optional          --> [].
verb_pre_optional          --> verb_pre(_).


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% adjectives:

adjectives              --> adjectives_pure,     pronoun_optional.

adjectives_pure         --> [].                                                                                                        % no adjectiv
adjectives_pure         --> adjectiv(_).                                                                                               % only one adjectiv
adjectives_pure         --> adjectiv(A), adjectiv(B),                           {A\=B}.                                                % two adjectives
adjectives_pure         --> adjectiv(A), adjectiv(B), adjectiv(C),              {A\=B,A\=C,B\=C}.              


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% adverbs:

adverbs                  --> [].                                                                                                         % no adverb
adverbs                  --> adverb(_).                                                                                                  % only one adverb
adverbs                  --> adverb(A),    adverb(B),                { A\=B } .                                                          % several adverbs
adverbs                  --> adverb(A),    adverb(B),   adverb(C),   { A\=B, A\=C , B\=C} .                                              % max. 3 different adverbs

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% conjunctions:

conjunctions            --> [].
conjunctions            --> conjunction(_).                                                                                     % But I hate commas!


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% miscellaneous:

comma_optional         --> [].
comma_optional         --> separator(',').


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Official Words
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

adjectiv(Adjectiv) --> [Adjectiv], { member(Adjectiv, [     
     ala,          % no, not, none, un- 
     ale,          % all, every, complete, whole  (ale = ali), (depreciated)
     ali,          % all, every, complete, whole  (ale = ali)
     ante,  	   % different, dissimilar, altered, changed, other, unequal, differential, variant
     awen,         % remaining, stationary, permanent, sedentary
     anpa,         % low, lower, bottom, down
     ijo,          % of something
     ike,          % bad, negative, wrong, evil, overly complex, (figuratively) unhealthy
     insa,         % inner, internal
     jaki,         % dirty, gross, filthy
     jan,          % human, somebody's, personal, of people
     jo,           % private, personal
     kama,         % coming, future
     kili,         % fruity
     kin,          % indeed, still, too
     kiwen,        % hard, solid, stone-like, made of stone or metal
     kon,          % air-like, ethereal, gaseous
     kulupu,       % communal, shared, public, of the society
     lape,         % sleeping, of sleep, dormant
     lawa,         % main, leading, in charge
     len,          % dressed, clothed, costumed, dressed up 
     lete, 	  	   % cold, cool, uncooked, raw, perishing
     lili,         % small, little, young, a bit, short, few, less
     lipu,         % book-, paper-, card-, ticket-, sheet-, page,-
     lukin,        % visual(ly)
     mama,         % of the parent, parental, maternal, fatherly
     meli,         % female, feminine, womanly
     mije,         % male, masculine, manly
     moku,         % eating
     monsi,        % back, rear
     musi,         % artful, fun, recreational
     mute,         % many, very, much, several, a lot, abundant, numerous, more
     nasa,         % silly, crazy, foolish, drunk, strange, stupid, weird
     olin,         % love
     pakala,       % destroyed, ruined, demolished, shattered, wrecked
     pali,         % active, work-related, operating, working
     pana,         % generous
     pilin,        % sensitive, feeling, empathic
     poka,         % neighbouring
     pona,         % good, simple, positive, nice, correct, right
     sama,         % same, similar, equal, of equal status or position
     seli,         % hot, warm, cooked
     sewi,         % superior, elevated, religious, formal
     sona,         % knowing, cognizant, shrewd
     suwi,         % sweet, cute
     sin,          % new, fresh, another, more
     suli,         % big, tall, long, adult, important
     suno,         % sunny, sunnily
     supa,         % flat, shallow, flat-bottomed
     tan,          % causal, 
     taso,         % only, sole
     tawa,         % moving, mobile
     telo,         % wett, slobbery, moist, damp, humid, sticky, sweaty, dewy, drizzly
     toki,         % speaking, eloquent, linguistic, verbal, grammatical
     tomo,         % urban, domestic, household
     unpa,         % erotic, sexual
     utala,        % fighting
     wawa         % energetic, strong, fierce, intense, sure, confident
%     wile          % necessary
 ])
}.

adverb(Adverb) --> [Adverb], { member(Adverb, [
     ala,           % don't
     ale,           % always, forever, evermore, eternally (ale = ali), (depreciated)
     ali,           % always, forever, evermore, eternally (ale = ali)
     awen,          % still, yet
     ijo,           % of something
     ike,           % bad, negative, wrong, evil, overly complex, (figuratively) unhealthy
     jaki,          % dirty, gross, filthy
     jan,           % human, somebody's, personal, of people
     kama,          % coming, future
     kili,          % fruity
     kin,           % actually, indeed, in fact, really, objectively, as a matter of fact
     kiwen,         % hard, solid, stone-like, made of stone or metal
     kon,           % air-like, ethereal, gaseous
     lape,          % asleep
     lawa,          % main, leading, in charge
     lete, 	  	    % bleakly
     lili,          % small, little, young, a bit, short, few, less
     lukin,         % visual(ly)
     mani,          % financially
     moku,          % eating
     musi,          % cheerfully
     mute,          % many, very, much, several, a lot, abundant, numerous, more
     nasa,          % silly, crazy, foolish, drunk, strange, stupid, weird
     pakala,        % destroyed, ruined, demolished, shattered, wrecked
     pali,          % actively, briskly
     pilin,         % perceptively
     pona,          % good, simple, positive, nice, correct, right
     sama,          % just as, equally, exactly the same, just the same, similarly
     seli,          % hot, warm, cooked
     sewi,          % superior, elevated, religious, formal
     suli,          % big, tall, long, adult, important
     suno,          % sunny, sunnily
     taso,          % only, just, merely, simply, solely, singly
     tawa,          % moving, mobile
     telo,          % wett, slobbery, moist, damp, humid, sticky, sweaty, dewy, drizzly
     toki,          % speaking, eloquent, linguistic, verbal, grammatical
     tomo,          % urban, domestic, household
     unpa,          % erotic, sexual
     utala,         % fighting
     wawa          % strongly, powerfully
%     wile           % necessary
 ])
}.

conjunction(Conjunction) --> [Conjunction], { member(Conjunction, [
     anu,          % or (used for decision questions)
     en,           % and (used to coordinate head nouns)
     taso          % but, however
 ])
}.

interjection_word(Interjection_word) --> [Interjection_word], { member(Interjection_word, [
     a,            % ah, ha, uh, oh, ooh, aw, well (emotion word)
     ala,          % no!
     ike,          % oh dear! woe! alas!
     jaki,         % ew! yuck!
%     kin,          % really!
     mu,           % woof! meow! moo! etc. (cute animal noise)
     o,            % hey! (calling somebody's attention)
     pakala,       % damn! fuck!
     pona,         % great! good! thanks! OK! cool! yay!
     toki          % hello, hi, good morning,
 ])
}.

noun(Noun) --> [Noun], { member(Noun, [   
     ala,          % nothing, negation, zero
     ale,          % everything, anything, life, the universe, (depreciated)
     ali,          % everything, anything, life, the universe
     ante, 	  	   % difference, distinction, differential, variation, variance, disagreement
     anpa,         % bottom, lower part, under, below, floor, beneath
     awen,         % inertia, continuity, continuum, stay
     ijo,          % thing, something, stuff, anything, object
     ike,          % negativity, badness, evil
     ilo,          % tool, device, machine, thing used for a specific purpose
     insa,         % inside, inner world, centre, stomach
     jaki,         % dirt, pollution, garbage, filth
     jan,          % person, people, human, being, somebody, anybody
     jo,           % having
     kalama,       % sound, noise, voice
     kama,         % event, happening, chance, arrival, beginning
     ken,          % possibility, ability, power to do things, permission
     kili,         % fruit, pulpy vegetable, mushroom
     kiwen,        % hard thing, rock, stone, metal, mineral, clay
     kon,          % air, wind, smell, soul
     kulupu,       % group, community, society, company, people
     lape,         % sleep, rest
     lawa,         % head, mind
     len,          % clothing, cloth, fabric
     lete, 	  	   % cold, chill, bleakness
     lili,         % smallness, youth, immaturity
     lipu, 	  	   % paper, card, ticket, sheet, page, flat and bendable thing
     lukin,        % view, look, glance, sight, gaze, glimpse, seeing, vision, sight 
     ma,           % land, earth, country, (outdoor) area
     mama,         % parent, mother, father
     mani, 	  	   % money, material wealth, currency, dollar, capital
     meli,         % woman, female, girl, wife, girlfriend
     mije,         % man, male, husband, boyfriend
     moku,         % food, meal
     monsi,        % back, rear end, butt, behind
     musi,         % fun, playing, game, recreation, art, entertainment
     mute,         % amount, quantity
     nasa,         % stupidity, foolishness, silliness, nonsense, idiocy, inanity, obtuseness, ninny, muddler
     nasin,        % way, manner, custom, road, path, doctrine, system, method
     nimi,         % word, name
     olin,         % love
     pakala,       % blunder, accident, mistake, destruction, damage, breaking
     pali,         % activity, work, deed, project
     pana,         % giving, transfer, exchange
     pilin,        % feelings, emotion, feel, think, sense, touch, heart (physical or emotional)
     pipi,         % bug, insect, spider
     poka,         % side, hip, next to
     poki,         % container, box, bowl, cup, glass
     pona,         % good, simplicity, positivity
     sama,         % equality, parity, equity, identity, par, sameness
     seli,         % fire, warmth, heat
     sewi,         % high, up, above, top, over, on
     sona,         % knowledge, wisdom, intelligence, understanding
     suli,         % size
     suno,         % sun, light
     supa,         % horizontal surface, e.g furniture, table, chair, pillow, floor
     suwi,         % candy, sweet food
     tan,          % origin, cause
     tawa,         % movement, transportation
     telo,         % water, liquid, juice, sauce
     toki,         % language, speech, tongue, lingo, jargon, 
     tomo,         % indoor constructed space, e.g. house, home, room, building
     unpa,         % sex, sexuality
     utala,        % conflict, disharmony, competition, fight, war, battle, attack, blow, argument, physical or verbal violence
     wawa,         % energy, strength, power
     wile          % desire, need, will
 ])
}.

preposition(Preposition) --> [Preposition], { member(Preposition, [
     kepeken,     % with
     lon,         % be (located) in/at/on
     poka,        % in the accompaniment of, with
     sama,        % like, as, seem
     tan,         % from, by, because of, since
     tawa         % to, in order to, towards, for, until
 ])
}.

pronoun(Pronoun) --> [Pronoun], { member(Pronoun, [
     mi,          % I, we (pronoun 1. person)
     sina,        % you (pronoun 2. person)
     ona,         % she, he, it, they (pronoun 3. person)
     ni           % this, that (pronoun determiner)
 ])
}.

question_word(Question_word) --> [Question_word], { member(Question_word, [
	seme          % what, which, wh- (question word)
 ])
}.

separator(Separator) --> [Separator], { member(Separator, [
     e,             % introduces a direct object
     li,            % between any subject except mi and sina and its verb
     o,             % O (vocative or imperative)
     pi,            % separates a noun from another noun that has at least one adjective
     '.',           % At the end of a sentence.
     '!',           % At the end of an interjection.
     '?',           % At the end of a question.
     ':',           % Between an hint sentences and a sentences.
     ','            % comma
 ])
}.

verb_intransitive(Verb_intransitive) --> [Verb_intransitive], { member(Verb_intransitive, [
     awen,          % stay, wait,remain
     ike,           % to be bad, to suck
     kalama,        % make noise
     kama,          % come, become, arrive, happen, pursue actions to arrive to (a certain state), manage to, start to
     ken,           % can, is able to, is allowed to, may, is possible
     kepeken,       % use
     lape,          % to sleep, to rest
     lon,           % be there, be present, be real/true, exist, be awake
     lukin,         % look, watch out, pay attention
     musi,          % play, have fun
     pakala,        % screw up, fall apart, break
     pali,          % act, work, function
     pilin,         % feel, sense
     sewi,          % to get up 
     sona,          % know, understand
     tawa,          % go to, walk, travel, move, leave
     toki,          % talk, chat, communicate
     unpa           % have sex
 ])
}.

verb_transitive(Verb_transitive) --> [Verb_transitive], { member(Verb_transitive, [
     anpa,          % defeat, beat, vanquish, conquer
     ante,          % change, alter, modify
     awen,          % keep
     ijo,           % objectify
     ike,           % to make bad, to worsen, to have a negative effect upon
     jaki,          % pollute, dirty
     jan,           % personify, humanize, personalize
     jo,            % have, contain
     kalama,        % sound, ring, play (an instrument)
     kama,          % bring about, summon
     ken,           % make possible, enable, allow, permit
     kiwen,         % to solidify, to harden, to petrify, to fossilize
%     lape,          % to sleep, to rest
     lawa,          % lead, control, rule, steer
     len,           % to wear, to be dressed, to dress
     lete, 	  	    % cool down, chill
     lili,          % reduce, shorten, shrink, lessen
     lukin,         % see, look at, watch, read
     moku,          % eat, drink, swallow, ingest, consume
     musi,          % amuse, entertain
     mute,          % make many or much
     nasa,          % drive crazy, make weird
     nimi,          % to name
     olin,          % to love (a person) 
     pakala,        % screw up, fuck up, botch, ruin, break, hurt, injure, damage, spoil, ruin
     pali,          % do, make, build, create
     pana,          % give, put, send, place, release, emit, cause
     pilin,         % feel, think, sense, touch, handle, finger, fumble, grope, fiddle, pet, caress, fondle
     pona,          % improve, fix, repair, make good
     seli,          % heat, warm up, cook
     sewi,          % to lift
     sin,           % renew, renovate, freshen
     sona,          % know, understand, know how to
     suli,          % enlarge, lengthen
     suno,          % to light, to illumine
     suwi,          % sweeten
     tawa,          % move, displace
     telo,          % water, wash with water
     toki,          % speak, talk, say, pronounce, discourse
     unpa,          % have sex with, sleep with, fuck
     utala,         % hit, strike, attack, compete against
     wawa,          % strengthen, energize, empower
     wile           % (verb transitive) to want, need, wish, have to, must, will, should
 ])
}.

verb_pre(Verb_pre) --> [Verb_pre], { member(Verb_pre, [
     kama,          % to become, to mange to
     ken,           % can, may
%     kin,           % also, still
     lukin,         % to seek to, try to
     sona,          % to know how to
     wile           % to want, need, wish, have to, must, will, should
 ])
}.


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Unofficial Words
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

continent(X)            --> continent_catalog(X), !.                                                                                    % The "!" stop the search after find something in *_catalog.
:- ['unofficial_words_continent_catalog.pro'].                                                                                          % Load the file with the *_catalog of unofficial words
continent(X)               --> word_unofficial(X).                                                                                      % If the word not in the catalog check it spelling only.

country(X)              --> country_catalog(X), !. 
:- ['unofficial_words_country_catalog.pro'].
country(X)              --> word_unofficial(X). 

city(X)                 --> city_catalog(X), !.
:- ['unofficial_words_city_catalog.pro'].
city(X)                    --> word_unofficial(X).

language(X)             --> language_catalog(X), !.
:- ['unofficial_words_language_catalog.pro'].
language(X)                 --> word_unofficial(X) .

sign_language(X)        --> language(X).                                                                                                % sign_language = language

ideology(X)             --> ideology_catalog(X), !.
:- ['unofficial_words_ideology_catalog.pro'].
ideology(X)                 --> word_unofficial(X) .

community(X)            --> community_catalog(X), !.  
:- ['unofficial_words_community_catalog.pro'].
community(X)             --> word_unofficial(X).

resident(X)             --> country(X).                                                                                                 % resident = country

female_prominent_personage(X)  --> female_prominent_personage_catalog(X), !.
:- ['unofficial_words_female_prominent_personage_catalog.pro'].

male_prominent_personage(X)    --> male_prominent_personage_catalog(X), !.
:- ['unofficial_words_male_prominent_personage_catalog.pro'].

female_name(X)          --> female_name_catalog(X), !.
:- ['unofficial_words_female_name_catalog.pro'].
female_name(X)              --> word_unofficial(X) .

male_name(X)            --> male_name_catalog(X), !.
:- ['unofficial_words_male_name_catalog.pro'].
male_name(X)              --> word_unofficial(X) .


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Unofficial Words - check spelling

word_unofficial(Word,[Word|T],T) :-                                                                % This pure prolog rule make it possible to use DCG for spell check.    
     atom_length(Word,L),                                                                          % Get the lenght of the unofficial word.
     (L > 1, L =< 15),                                                                             % An unofficial word can have 2 to 15 characters. 
     atom_chars(Word,CL),                                                                          % atom_chars() convert an Atom (Word) in a list of character codes (CL). 
     word_unofficial_list(CL,[]), !.                                                               % The cut operator (!) mean: Don't try more than one true solution. 

word_unofficial_list    --> syllable_first, syllables.

syllables               --> [].                                                                    % No syllable.
syllables               --> syllable, syllables.                                                   % One or more syllabes.

syllable                --> consonant_small(Cs),                                                   % Each syllable consists of a consonant plus a vowel, plus an optional "n".
                            vowel_small(Vs),    
                            { not(invalid_letter_combination(Cs,Vs)) },                            % pure prolog rule to check valid letter combinations.
                            optional_n.
                                 
syllable_first          --> consonant_capital(Cs),                                                 % The first syllable of a word does not need to beginn with a consonant.
                            vowel_small(Vs),    
                            { not(invalid_letter_combination(Cs,Vs)) }, 
                            optional_n.
syllable_first          --> vowel_capital(_),  consonant_small(_).                                 % The first syllable of a word does not need to beginn with a consonant.
syllable_first          --> vowel_capital(_),  consonant_small(_),  vowel_small(_), optional_n.

optional_n              --> [].
optional_n              --> consonant_small('n').

invalid_letter_combination('T','i').                                                               % The syllables ti and tin become "si" and "sin".
invalid_letter_combination('t','i').
invalid_letter_combination('W','o').                                                               % The consonant "w" cannot appear before "o" or "u".
invalid_letter_combination('w','o').
invalid_letter_combination('W','u').
invalid_letter_combination('w','u').
invalid_letter_combination('J','i').                                                               % The consonant "j" cannot appear before "i".
invalid_letter_combination('j','i').


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Letters
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Possible letters for unofficial words. The most frequently used letter is on the first position. 

consonant_capital(Consonant_capital) --> [Consonant_capital], { member(Consonant_capital, [ 'P', 'S', 'K', 'L', 'M', 'T', 'N', 'W', 'J' ])}.
consonant_small(Consonant_small)     --> [Consonant_small],   { member(Consonant_small,   [ 'p', 's', 'k', 'l', 'm', 't', 'n', 'w', 'j' ])}.
vowel_capital(Vowel_capital)         --> [Vowel_capital],     { member(Vowel_capital,     [ 'A', 'E', 'I', 'U', 'O' ])}.
vowel_small(Vowel_small)             --> [Vowel_small],       { member(Vowel_small,       [ 'a', 'e', 'i', 'u', 'o' ])}.


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% For a user friendly input:
:- ['check_grammar.pro']. 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

/*
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% Possible queries
% 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% Sentences with right grammar:

sina pona anu seme? 
ona li mama anu seme?
sina sona anu seme?
sina kama anu seme?
mije sona li jo e tomo anu seme?
sina anu ona li kama?
jan Susan anu jan Lisa li moku e suwi?
sina jo e kili anu telo nasa? 
sina toki tawa mi anu ona? 
sina kama tan ma Elopa anu ma Amelika?
ona anu jan ante li ike? 
sina kama anu seme?
sina wile moku anu seme?
sina wile e mani anu seme?
mi en sina li jan pona.
mi pona e tomo pi sina en ona.
mi pona e tomo pi jan Lope en ona.
jan lili en jan suli li toki.
kalama musi en meli li pona tawa mi.
kalama musi en meli li pona, tawa mi.
mi wile e moku e telo.
mi moku e kili. 
mi toki kepeken toki pona. 
mi toki kepeken, toki pona. 
tomo pi jan Keli en mije ona li suli. 
jan lili pi jan Ken en jan Lisa li suwi. 
taso mi jo ala e moku.
taso mi lon ma ante.
taso meli mi li pakala.
jan Lisa taso li kama.
mi sona e ni taso.
mi musi taso. 
mi pali taso.
mi lukin taso e meli ni! 
mi kin tawa kin.                                                        % "kin" and "tawa" are adjectives here. 
mi moku kin.
mi lukin kin e ona.
seli li lon.
lete li lon.
seli mute li lon.
seli lili li lon.
lete mute li lon.
lete lili li lon.
ilo ni li pilin lete.
ni li pilin lete mute. 
ni li pilin seli lili.
mi pilin pona.
mi pilin ike.
sina pilin seme?
mi pilin e ni: sina ike.
sina pilin e seme?
mi pilin ijo.
mi pilin pi meli ni. 
sina wile kama anu seme?
sina wile e moku anu telo?
mi wile kin tawa tomo mi.
lipu ni li pilin lete.
mani pi ma ante li pona tawa mi.
taso mi ken ala.
mi taso li lon.
mi olin kin e sina.
mi pilin e ni: ona li jo ala e mani. 	  	 
mi wile lukin e ma ante. 	  	 
mi lukin taso. 	  	 
mi pilin lete. 	  	 
sina wile toki tawa mije anu meli? 	
sina wile toki, tawa mije anu meli?   	 
mi kin moku.                                                            % "kin" and "moku" are adjectives here. This sentence make no sense but the grammar is right.  
mi lukin e mije anu meli.     

mi kin tawa ma Elopa.                                                   % "kin"  is adverb here and emphasis the hidden "be".
mi kin olin e sina.                                                     % "kin"  is adverb here and emphasis the hidden "be".
mi kin lukin e ona.                                                     % "kin"  is adverb here and emphasis the hidden "be".
mi kin wile tawa tomo mi.                                               % "kin"  is adverb here and emphasis the hidden "be".
mi kin olin e sina.                                                     % "kin"  is adverb here and emphasis the hidden "be".
mi mute tawa ma Elopa.                                                  % "mute" is adverb here and emphasis the hidden "be".


% Wrong grammar:

?- check_grammar.
|: sina toki pi mama anu jan lili? 
false.

?- check_grammar.
|: anu seme?
false.

?- check_grammar.
|: sina anu seme?
false.

?- check_grammar.
|: sina anu?
false.

?- check_grammar.
|: sina anu li?
false.

?- check_grammar.
|: sina anu ona li?
false.

?- check_grammar.
|: mi pona e tomo pi jan Lope en.
false.

*/

Download swi-prolog | Download these scripts | My langugage Projects on Github

 


rowa.giso.de | contact | Berlin (Good Old Europe)
This unofficial fan site by Robert Warnke is based on the official Toki Pona book and website: tokipona.org