<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Windows-1252">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
p.MsoNoSpacing, li.MsoNoSpacing, div.MsoNoSpacing
        {mso-style-priority:1;
        margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
p.MsoListParagraph, li.MsoListParagraph, div.MsoListParagraph
        {mso-style-priority:34;
        margin-top:0in;
        margin-right:0in;
        margin-bottom:0in;
        margin-left:.5in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
.MsoChpDefault
        {mso-style-type:export-only;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
/* List Definitions */
@list l0
        {mso-list-id:414209374;
        mso-list-type:hybrid;
        mso-list-template-ids:1427389762 -2000490606 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;}
@list l0:level1
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:.75in;
        text-indent:-.25in;}
@list l0:level2
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:1.25in;
        text-indent:-.25in;}
@list l0:level3
        {mso-level-number-format:roman-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:right;
        margin-left:1.75in;
        text-indent:-9.0pt;}
@list l0:level4
        {mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:2.25in;
        text-indent:-.25in;}
@list l0:level5
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:2.75in;
        text-indent:-.25in;}
@list l0:level6
        {mso-level-number-format:roman-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:right;
        margin-left:3.25in;
        text-indent:-9.0pt;}
@list l0:level7
        {mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:3.75in;
        text-indent:-.25in;}
@list l0:level8
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:4.25in;
        text-indent:-.25in;}
@list l0:level9
        {mso-level-number-format:roman-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:right;
        margin-left:4.75in;
        text-indent:-9.0pt;}
@list l1
        {mso-list-id:1117139803;
        mso-list-type:hybrid;
        mso-list-template-ids:-910516670 393257548 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;}
@list l1:level1
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:.75in;
        text-indent:-.25in;}
@list l1:level2
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:1.25in;
        text-indent:-.25in;}
@list l1:level3
        {mso-level-number-format:roman-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:right;
        margin-left:1.75in;
        text-indent:-9.0pt;}
@list l1:level4
        {mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:2.25in;
        text-indent:-.25in;}
@list l1:level5
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:2.75in;
        text-indent:-.25in;}
@list l1:level6
        {mso-level-number-format:roman-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:right;
        margin-left:3.25in;
        text-indent:-9.0pt;}
@list l1:level7
        {mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:3.75in;
        text-indent:-.25in;}
@list l1:level8
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:4.25in;
        text-indent:-.25in;}
@list l1:level9
        {mso-level-number-format:roman-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:right;
        margin-left:4.75in;
        text-indent:-9.0pt;}
@list l2
        {mso-list-id:1515192620;
        mso-list-type:hybrid;
        mso-list-template-ids:794429482 -1 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;}
@list l2:level1
        {mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l2:level2
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l2:level3
        {mso-level-number-format:roman-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:right;
        text-indent:-9.0pt;}
@list l2:level4
        {mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l2:level5
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l2:level6
        {mso-level-number-format:roman-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:right;
        text-indent:-9.0pt;}
@list l2:level7
        {mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l2:level8
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l2:level9
        {mso-level-number-format:roman-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:right;
        text-indent:-9.0pt;}
@list l3
        {mso-list-id:1667828369;
        mso-list-type:hybrid;
        mso-list-template-ids:737451732 -1 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;}
@list l3:level1
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l3:level2
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l3:level3
        {mso-level-number-format:roman-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:right;
        text-indent:-9.0pt;}
@list l3:level4
        {mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l3:level5
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l3:level6
        {mso-level-number-format:roman-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:right;
        text-indent:-9.0pt;}
@list l3:level7
        {mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l3:level8
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l3:level9
        {mso-level-number-format:roman-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:right;
        text-indent:-9.0pt;}
ol
        {margin-bottom:0in;}
ul
        {margin-bottom:0in;}
--></style>
</head>
<body lang="EN-US" link="blue" vlink="#954F72">
<div class="WordSection1">
<p class="MsoNormal">We could also view the matter as being one of specifying a set of constraints [1][2] with which to describe a desired sentence.</p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">That is, the syntactic sugar:</p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal" style="margin-left:.5in">(1) hit<voice::active, tense::past, aspect::perfective, mood::indicative>(context, [ {role: ‘agent’, value: Bobby}, {role: ‘patient’, value: ball}, {role: ‘instrument’, value: bat} ]);</p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">could be viewed as indicating a number of simultaneous constraints with regard to a desired sentence. With an expression tree model, we could form expressions for a constraint-based system while making use of objects in scope.</p>
<p class="MsoNormal"><o:p> </o:p></p>
<ol style="margin-top:0in" start="1" type="a">
<li class="MsoListParagraph" style="margin-left:0in;mso-list:l3 level1 lfo1">constraints.add(expr.equals(expr.symbol(‘verb’), expr.constant(getVerb(‘https://example.com/verb#hit’))));</li></ol>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">The generic arguments “<voice::active, tense::past, aspect::perfective, mood::indicative>” could translate or map to:</p>
<p class="MsoNormal"><o:p> </o:p></p>
<ol style="margin-top:0in" start="2" type="a">
<li class="MsoListParagraph" style="margin-left:0in;mso-list:l3 level1 lfo1">constraints.add(expr.equals(expr.symbol(‘voice’), expr.constant(‘active’)));</li><li class="MsoListParagraph" style="margin-left:0in;mso-list:l3 level1 lfo1">constraints.add(expr.equals(expr.symbol(‘tense’), expr.constant(‘past’)));</li><li class="MsoListParagraph" style="margin-left:0in;mso-list:l3 level1 lfo1">constraints.add(expr.equals(expr.symbol(‘aspect’), expr.constant(‘perfective’)));</li><li class="MsoListParagraph" style="margin-left:0in;mso-list:l3 level1 lfo1">constraints.add(expr.equals(expr.symbol(‘mood’), expr.constant(‘indicative’)));</li></ol>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Next, to the array of role-adorned nouns, “[ {role: ‘agent’, value: Bobby}, {role: ‘patient’, value: ball}, {role: ‘instrument’, value: bat} ]”:</p>
<p class="MsoNormal"><o:p> </o:p></p>
<ol style="margin-top:0in" start="6" type="a">
<li class="MsoListParagraph" style="margin-left:0in;mso-list:l3 level1 lfo1">constraints.add(expr.equals(expr.property(e0, ‘role’), expr.constant(‘agent’)));</li><li class="MsoListParagraph" style="margin-left:0in;mso-list:l3 level1 lfo1">constraints.add(expr.equals(expr.property(e0, ‘value’), expr.constant(Bobby)));</li></ol>
<p class="MsoNormal"><o:p> </o:p></p>
<ol style="margin-top:0in" start="8" type="a">
<li class="MsoListParagraph" style="margin-left:0in;mso-list:l3 level1 lfo1">constraints.add(expr.equals(expr.property(e1, ‘role’), expr.constant(‘patient’)));</li><li class="MsoListParagraph" style="margin-left:0in;mso-list:l3 level1 lfo1">constraints.add(expr.equals(expr.property(e1, ‘value’), expr.constant(ball)));</li></ol>
<p class="MsoNormal"><o:p> </o:p></p>
<ol style="margin-top:0in" start="10" type="a">
<li class="MsoListParagraph" style="margin-left:0in;mso-list:l3 level1 lfo1">constraints.add(expr.equals(expr.property(e2, ‘role’), expr.constant(‘instrument’)));</li><li class="MsoListParagraph" style="margin-left:0in;mso-list:l3 level1 lfo1">constraints.add(expr.equals(expr.property(e2, ‘value’), expr.constant(ball)));</li></ol>
<p class="MsoNormal"><o:p> </o:p></p>
<ol style="margin-top:0in" start="12" type="a">
<li class="MsoListParagraph" style="margin-left:0in;mso-list:l3 level1 lfo1">constraints.add(expr.holds(‘occursInSentenceBefore’, Bobby, ball));</li><li class="MsoListParagraph" style="margin-left:0in;mso-list:l3 level1 lfo1">constraints.add(expr.holds(‘occursInSentenceBefore’, ball, bat));</li></ol>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">There exists mappings from the information in the generic function invocation (1) to rough-draft pseudocode for describing a set of constraints ((a) – (m)).</p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">We could also add scalars as arguments when adding constraints to a set. For instance, we could add scalar arguments to (l) and (m):</p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal" style="margin-left:.5in">constraints.add(expr.holds(‘occursInSentenceBefore’, Bobby, ball), 0.5);</p>
<p class="MsoNormal" style="margin-left:.5in">constraints.add(expr.holds(‘occursInSentenceBefore’, ball, bat), 0.5);</p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Constraint-based approaches are both expressive and extensible. With a set of weighted constraints describing a desired output sentence, we could then invoke a sentence realizer:</p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal" style="margin-left:.5in">realizeSentence(constraints) --> “Bobby hit the ball with the bat”</p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Best regards,</p>
<p class="MsoNormal">Adam</p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">[1] Piwek, Paul, and Kees Van Deemter. Constraint-based natural language generation: A survey. Technical Report 2006/03, Computing Department, The Open University, 2006.</p>
<p class="MsoNormal">[2] <a href="https://en.wikipedia.org/wiki/Constraint_programming">
https://en.wikipedia.org/wiki/Constraint_programming</a></p>
<p class="MsoNormal"><o:p> </o:p></p>
<div style="mso-element:para-border-div;border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal" style="border:none;padding:0in"><b>From: </b><a href="mailto:adamsobieski@hotmail.com">Adam Sobieski</a><br>
<b>Sent: </b>Saturday, July 25, 2020 1:43 PM<br>
<b>To: </b><a href="mailto:abstract-wikipedia@lists.wikimedia.org">General public mailing list for the discussion of Abstract Wikipedia (aka Wikilambda)</a><br>
<b>Subject: </b>RE: Conjugation and Declension Functions</p>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<p class="MsoNoSpacing">Thank you all for the comments and feedback thus far.</p>
<p class="MsoNoSpacing"><o:p> </o:p></p>
<p class="MsoNoSpacing">I would like to indicate that we could also utilize the expressiveness of JavaScript/TypeScript for array literals with object literal elements. In this alternative approach, arguments could be placed into an array of objects which each
 attach a thematic role to an argument. “Bobby”, “ball” and “bat” could be objects of type Noun, and we could pass to a function an array literal of object literals to get at the desired concepts of: (1) sequence, (2) roles, (3) values. That is rather the matter:
 attaching thematic roles to elements of a sequence of arguments.</p>
<p class="MsoNoSpacing"><o:p> </o:p></p>
<p class="MsoNoSpacing">To the example pseudocode:</p>
<p class="MsoNoSpacing"><o:p> </o:p></p>
<p class="MsoNoSpacing">Noun Bobby;</p>
<p class="MsoNoSpacing">Noun ball;</p>
<p class="MsoNoSpacing">Noun bat;</p>
<p class="MsoNoSpacing"><o:p> </o:p></p>
<p class="MsoNoSpacing">hit<voice::active, tense::past, aspect::perfective, mood::indicative>(context, [ {role: ‘agent’, value: Bobby}, {role: ‘patient’, value: ball}, {role: ‘instrument’, value: bat} ]) --> “Bobby hit the ball with the bat”</p>
<p class="MsoNoSpacing">hit<voice::active, tense::past, aspect::perfective, mood::indicative>(context, [ {role: ‘agent’, value: Bobby}, {role: ‘instrument’, value: bat}, {role: ‘patient’, value: ball} ]) --> “Bobby, with the bat, hit the ball”</p>
<p class="MsoNoSpacing">hit<voice::active, tense::past, aspect::perfective, mood::indicative>(context, [ {role: ‘instrument’, value: bat}, {role: ‘agent’, value: Bobby}, {role: ‘patient’, value: ball} ]) --> “With the bat, Bobby hit the ball”</p>
<p class="MsoNoSpacing"><o:p> </o:p></p>
<p class="MsoNoSpacing">or, if the grammatical arguments (voice, tense, aspect, mood) are properties of the context object:</p>
<p class="MsoNoSpacing"><o:p> </o:p></p>
</div>
<p class="MsoNoSpacing">hit(context, [ {role: ‘agent’, value: Bobby}, {role: ‘patient’, value: ball}, {role: ‘instrument’, value: bat} ]) --> “Bobby hit the ball with the bat”</p>
<p class="MsoNoSpacing">hit(context, [ {role: ‘agent’, value: Bobby}, {role: ‘instrument’, value: bat}, {role: ‘patient’, value: ball} ]) --> “Bobby, with the bat, hit the ball”</p>
<p class="MsoNoSpacing">hit(context, [ {role: ‘instrument’, value: bat}, {role: ‘agent’, value: Bobby}, {role: ‘patient’, value: ball} ]) --> “With the bat, Bobby hit the ball”</p>
<p class="MsoNoSpacing"><o:p> </o:p></p>
<p class="MsoNoSpacing">A downside would be that the function signatures would resemble:</p>
<p class="MsoNoSpacing"><o:p> </o:p></p>
<p class="MsoNoSpacing">hit<…>(Context, Array)</p>
<p class="MsoNoSpacing"><o:p> </o:p></p>
<p class="MsoNoSpacing">or</p>
<p class="MsoNoSpacing"><o:p> </o:p></p>
<p class="MsoNoSpacing">hit<…>(Context, Array<RoleNounPair>)</p>
<p class="MsoNoSpacing"><o:p> </o:p></p>
<p class="MsoNoSpacing">An upside would be expressiveness with which to indicate desired output paraphrases.</p>
<p class="MsoNoSpacing"><o:p> </o:p></p>
<p class="MsoNoSpacing">These topics are discussed in <i>Building Natural Language Generation Systems</i> by Reiter and Dale [1], in chapter 6 on
<i>Surface Realization, </i>in section 6.8 on <i>Bidirectional Grammars</i>, pages 194 – 195, where the authors indicate that while “a parser might produce the same logical form for the following three sentences:</p>
<p class="MsoNoSpacing"><o:p> </o:p></p>
<ol style="margin-top:0in" start="1" type="a">
<li class="MsoNoSpacing" style="margin-left:.25in;mso-list:l1 level1 lfo2">Mary gave John a ball.<o:p></o:p></li><li class="MsoNoSpacing" style="margin-left:.25in;mso-list:l1 level1 lfo2">Mary gave a ball to John.<o:p></o:p></li><li class="MsoNoSpacing" style="margin-left:.25in;mso-list:l1 level1 lfo2">John was given a ball by Mary.<o:p></o:p></li></ol>
<p class="MsoNoSpacing"><o:p> </o:p></p>
<p class="MsoNoSpacing">“The input to a realizer, however, should explicitly provide a means of choosing among these forms; the alternative is to choose at random.” (as noted, another alternative is to select using a manual of style).</p>
<p class="MsoNoSpacing"><o:p> </o:p></p>
<p class="MsoNoSpacing">The authors also indicate that Winograd [2] provided a list of paraphrases for consideration:</p>
<p class="MsoNoSpacing"><o:p> </o:p></p>
<ol style="margin-top:0in" start="1" type="a">
<li class="MsoNoSpacing" style="margin-left:.25in;mso-list:l0 level1 lfo3">Jon bought a painting for Vina.<o:p></o:p></li><li class="MsoNoSpacing" style="margin-left:.25in;mso-list:l0 level1 lfo3">Jon bought Vina a painting.<o:p></o:p></li><li class="MsoNoSpacing" style="margin-left:.25in;mso-list:l0 level1 lfo3">Vina was bought a painting by Jon.<o:p></o:p></li><li class="MsoNoSpacing" style="margin-left:.25in;mso-list:l0 level1 lfo3">What Jon bought Vina was a painting.<o:p></o:p></li><li class="MsoNoSpacing" style="margin-left:.25in;mso-list:l0 level1 lfo3">What Vina was bought by Jon was a painting.<o:p></o:p></li><li class="MsoNoSpacing" style="margin-left:.25in;mso-list:l0 level1 lfo3">It was a painting that Jon bought for Vina.<o:p></o:p></li><li class="MsoNoSpacing" style="margin-left:.25in;mso-list:l0 level1 lfo3">It was Jon that bought Vina a painting.<o:p></o:p></li><li class="MsoNoSpacing" style="margin-left:.25in;mso-list:l0 level1 lfo3">It was Vina that Jon bought a painting for.<o:p></o:p></li></ol>
<p class="MsoNoSpacing"><o:p> </o:p></p>
<p class="MsoNoSpacing">On the topic of “a” or “the”, definite or indefinite noun phrases, we can note a discussion in Reiter and Dale [1], section 5.4.2, on page 145. That is another important discussion topic.</p>
<p class="MsoNoSpacing"><o:p> </o:p></p>
<p class="MsoNoSpacing">In the set of approaches under discussion, by making use of grammatical arguments (e.g. voice, tense, aspect, mood) and by placing thematic roles on elements of a sequence of arguments, we have an expressiveness beyond that of predicate
 calculus with which to distinguish paraphrases.</p>
<p class="MsoNoSpacing"><o:p> </o:p></p>
<p class="MsoNoSpacing"><o:p> </o:p></p>
<p class="MsoNoSpacing">Best regards,</p>
<p class="MsoNoSpacing">Adam</p>
<p class="MsoNoSpacing"><o:p> </o:p></p>
<p class="MsoNoSpacing">[1] Reiter, Ehud, and Robert Dale. Building natural language generation systems. Cambridge university press, 2000.</p>
<p class="MsoNoSpacing">[2] Winograd, Terry. "Language as a cognitive process." (1983).</p>
<p class="MsoNormal"><o:p> </o:p></p>
<div style="border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b>From: </b><a href="mailto:adamsobieski@hotmail.com">Adam Sobieski</a><br>
<b>Sent: </b>Friday, July 24, 2020 7:07 PM<br>
<b>To: </b><a href="mailto:abstract-wikipedia@lists.wikimedia.org">General public mailing list for the discussion of Abstract Wikipedia (aka Wikilambda)</a><br>
<b>Subject: </b>Re: [Abstract-wikipedia] Conjugation and Declension Functions<o:p></o:p></p>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">In addition to broaching the discovery, encoding and reuse of language-specific patterns, which I view as a discussion topic when comparing and contrasting approaches (see: the DRY principle [1] and the abstraction principle [2]), and indicating
 how conjugation and declension functions would facilitate the discovery, encoding and reuse of these patterns, I would like to share some topics which arose as I explored adding the thematic relation [3] of instrument to the agent-patient pair.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">When exploring how best to add the thematic relation of instrument to the agent-patient pair (e.g. adding “using the bat” to “Bobby hit the ball”), I observed that, for the same input grammatical arguments, there was a set of possible output
 paraphrases:<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<ol style="margin-top:0in" start="1" type="1">
<li class="MsoListParagraph" style="margin-left:0in;mso-list:l2 level1 lfo4">“Bobby hit the ball using the bat”<o:p></o:p></li><li class="MsoListParagraph" style="margin-left:0in;mso-list:l2 level1 lfo4">“Bobby, using the bat, hit the ball”<o:p></o:p></li><li class="MsoListParagraph" style="margin-left:0in;mso-list:l2 level1 lfo4">“Using the bat, Bobby hit the ball”<o:p></o:p></li></ol>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">I wondered: how might we be able to generate each?<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">One possibility is indicated. There could be a type for each thematic relation [3]. Then, using explicit type conversions to these types, we could have different functions for different sequences of input arguments.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">That is,<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">hit<voice::active, tense::past, aspect::perfective, mood::indicative>(context, (Agent)Bobby, (Patient)ball, (Instrument)bat) --> “Bobby hit the ball using the bat”<o:p></o:p></p>
<p class="MsoNormal">hit<voice::active, tense::past, aspect::perfective, mood::indicative>(context, (Agent)Bobby, (Instrument)bat, (Patient)ball) --> “Bobby, using the bat, hit the ball”<o:p></o:p></p>
<p class="MsoNormal">hit<voice::active, tense::past, aspect::perfective, mood::indicative>(context, (Instrument)bat, (Agent)Bobby, (Patient)ball) --> “Using the bat, Bobby hit the ball”<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">or<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">hit<voice::active, tense::past, aspect::perfective, mood::indicative>(context, Bobby as Agent, ball as Patient, bat as Instrument) --> “Bobby hit the ball using the bat”<o:p></o:p></p>
<p class="MsoNormal">hit<voice::active, tense::past, aspect::perfective, mood::indicative>(context, Bobby as Agent, bat as Instrument, ball as Patient) --> “Bobby, using the bat, hit the ball”<o:p></o:p></p>
<p class="MsoNormal">hit<voice::active, tense::past, aspect::perfective, mood::indicative>(context, bat as Instrument, Bobby as Agent, ball as Patient) --> “Using the bat, Bobby hit the ball”<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">These functions could each wrap the use of patterns (as indicated in previous email) and attempt to realize output sentences utilizing the arguments in the same sequence in which they were provided. This would, however, mean that the callers
 of the functions would be responsible for “shuffling” the input arguments to express the desired paraphrase ((1), (2), (3)).<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">There are, of course, other approaches to consider and other possibilities to consider with respect to addressing the matter of outputting the example paraphrases.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Any thoughts on these topics?<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Best regards,<o:p></o:p></p>
<p class="MsoNormal">Adam<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">[1] <a href="https://en.wikipedia.org/wiki/Don%27t_repeat_yourself">
https://en.wikipedia.org/wiki/Don%27t_repeat_yourself</a><o:p></o:p></p>
<p class="MsoNormal">[2] <a href="https://en.wikipedia.org/wiki/Abstraction_principle_(computer_programming)">
https://en.wikipedia.org/wiki/Abstraction_principle_(computer_programming)</a><o:p></o:p></p>
<p class="MsoNormal">[3] <a href="https://en.wikipedia.org/wiki/Thematic_relation">
https://en.wikipedia.org/wiki/Thematic_relation</a><o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">P.S.: We could also put the grammatical arguments on the context object (context.voice, context.tense, context.aspect, context.mood, et cetera) and then make use of generic parameters for other uses.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<div style="border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b>From: </b><a href="mailto:adamsobieski@hotmail.com">Adam Sobieski</a><br>
<b>Sent: </b>Thursday, July 23, 2020 7:38 PM<br>
<b>To: </b><a href="mailto:abstract-wikipedia@lists.wikimedia.org">General public mailing list for the discussion of Abstract Wikipedia (aka Wikilambda)</a><br>
<b>Subject: </b>RE: Conjugation and Declension Functions<o:p></o:p></p>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<p class="MsoNoSpacing">I had an idea about discovering, encoding and reusing patterns in languages that I would like to share with the group.</p>
<p class="MsoNoSpacing"><o:p> </o:p></p>
<p class="MsoNoSpacing">The following is rough-draft pseudocode for a function with which to generate sentences for the verb “to kick”. The function has generic parameters for voice and tense and parameters for context, agent and patient.</p>
<p class="MsoNoSpacing"><o:p> </o:p></p>
<p class="MsoNoSpacing"><span style="font-size:10.0pt;font-family:"Courier New"">Clause kick<V, T>(Context context, Noun agent, Noun patient)<o:p></o:p></span></p>
<p class="MsoNoSpacing"><span style="font-size:10.0pt;font-family:"Courier New"">{<o:p></o:p></span></p>
<p class="MsoNoSpacing"><span style="font-size:10.0pt;font-family:"Courier New"">  switch(V)<o:p></o:p></span></p>
<p class="MsoNoSpacing"><span style="font-size:10.0pt;font-family:"Courier New"">  {<o:p></o:p></span></p>
<p class="MsoNoSpacing"><span style="font-size:10.0pt;font-family:"Courier New"">    case voice::active:<o:p></o:p></span></p>
<p class="MsoNoSpacing"><span style="font-size:10.0pt;font-family:"Courier New"">      switch(T)<o:p></o:p></span></p>
<p class="MsoNoSpacing"><span style="font-size:10.0pt;font-family:"Courier New"">      {<o:p></o:p></span></p>
<p class="MsoNoSpacing"><span style="font-size:10.0pt;font-family:"Courier New"">        case tense::past:<o:p></o:p></span></p>
<p class="MsoNoSpacing"><span style="font-size:10.0pt;font-family:"Courier New"">        case tense::present:<o:p></o:p></span></p>
<p class="MsoNoSpacing"><span style="font-size:10.0pt;font-family:"Courier New"">          return join(" ", [<o:p></o:p></span></p>
<p class="MsoNoSpacing"><span style="font-size:10.0pt;font-family:"Courier New"">            agent,<o:p></o:p></span></p>
<p class="MsoNoSpacing"><span style="font-size:10.0pt;font-family:"Courier New"">            conjugate_en(“kick”, V, T, …),<o:p></o:p></span></p>
<p class="MsoNoSpacing"><span style="font-size:10.0pt;font-family:"Courier New"">            “the”,<o:p></o:p></span></p>
<p class="MsoNoSpacing"><span style="font-size:10.0pt;font-family:"Courier New"">            patient<o:p></o:p></span></p>
<p class="MsoNoSpacing"><span style="font-size:10.0pt;font-family:"Courier New"">          ]);<o:p></o:p></span></p>
<p class="MsoNoSpacing"><span style="font-size:10.0pt;font-family:"Courier New"">        case tense::future:<o:p></o:p></span></p>
<p class="MsoNoSpacing"><span style="font-size:10.0pt;font-family:"Courier New"">          return join(" ", [<o:p></o:p></span></p>
<p class="MsoNoSpacing"><span style="font-size:10.0pt;font-family:"Courier New"">            agent,<o:p></o:p></span></p>
<p class="MsoNoSpacing"><span style="font-size:10.0pt;font-family:"Courier New"">            “will”,<o:p></o:p></span></p>
<p class="MsoNoSpacing"><span style="font-size:10.0pt;font-family:"Courier New"">            conjugate_en(“kick”, V, T, …),<o:p></o:p></span></p>
<p class="MsoNoSpacing"><span style="font-size:10.0pt;font-family:"Courier New"">            “the”,<o:p></o:p></span></p>
<p class="MsoNoSpacing"><span style="font-size:10.0pt;font-family:"Courier New"">            patient<o:p></o:p></span></p>
<p class="MsoNoSpacing"><span style="font-size:10.0pt;font-family:"Courier New"">          ]);<o:p></o:p></span></p>
<p class="MsoNoSpacing"><span style="font-size:10.0pt;font-family:"Courier New"">        …<o:p></o:p></span></p>
<p class="MsoNoSpacing"><span style="font-size:10.0pt;font-family:"Courier New"">      }<o:p></o:p></span></p>
<p class="MsoNoSpacing"><span style="font-size:10.0pt;font-family:"Courier New"">    case voice::passive:<o:p></o:p></span></p>
<p class="MsoNoSpacing"><span style="font-size:10.0pt;font-family:"Courier New"">      switch(T)<o:p></o:p></span></p>
<p class="MsoNoSpacing"><span style="font-size:10.0pt;font-family:"Courier New"">      {<o:p></o:p></span></p>
<p class="MsoNoSpacing"><span style="font-size:10.0pt;font-family:"Courier New"">        case tense::past:<o:p></o:p></span></p>
<p class="MsoNoSpacing"><span style="font-size:10.0pt;font-family:"Courier New"">          return join(" ", [<o:p></o:p></span></p>
<p class="MsoNoSpacing"><span style="font-size:10.0pt;font-family:"Courier New"">            “the”,<o:p></o:p></span></p>
<p class="MsoNoSpacing"><span style="font-size:10.0pt;font-family:"Courier New"">            patient,<o:p></o:p></span></p>
<p class="MsoNoSpacing"><span style="font-size:10.0pt;font-family:"Courier New"">            “was”,<o:p></o:p></span></p>
<p class="MsoNoSpacing"><span style="font-size:10.0pt;font-family:"Courier New"">            conjugate_en(“kick”, V, T, …),<o:p></o:p></span></p>
<p class="MsoNoSpacing"><span style="font-size:10.0pt;font-family:"Courier New"">            “by”<o:p></o:p></span></p>
<p class="MsoNoSpacing"><span style="font-size:10.0pt;font-family:"Courier New"">            agent<o:p></o:p></span></p>
<p class="MsoNoSpacing"><span style="font-size:10.0pt;font-family:"Courier New"">          ]);<o:p></o:p></span></p>
<p class="MsoNoSpacing"><span style="font-size:10.0pt;font-family:"Courier New"">        case tense::present:<o:p></o:p></span></p>
<p class="MsoNoSpacing"><span style="font-size:10.0pt;font-family:"Courier New"">          return join(" ", [<o:p></o:p></span></p>
<p class="MsoNoSpacing"><span style="font-size:10.0pt;font-family:"Courier New"">            “the”,<o:p></o:p></span></p>
<p class="MsoNoSpacing"><span style="font-size:10.0pt;font-family:"Courier New"">            patient,<o:p></o:p></span></p>
<p class="MsoNoSpacing"><span style="font-size:10.0pt;font-family:"Courier New"">            “is”,<o:p></o:p></span></p>
<p class="MsoNoSpacing"><span style="font-size:10.0pt;font-family:"Courier New"">            “being”,<o:p></o:p></span></p>
<p class="MsoNoSpacing"><span style="font-size:10.0pt;font-family:"Courier New"">            conjugate_en(“kick”, V, T, …),<o:p></o:p></span></p>
<p class="MsoNoSpacing"><span style="font-size:10.0pt;font-family:"Courier New"">            “by”<o:p></o:p></span></p>
<p class="MsoNoSpacing"><span style="font-size:10.0pt;font-family:"Courier New"">            agent<o:p></o:p></span></p>
<p class="MsoNoSpacing"><span style="font-size:10.0pt;font-family:"Courier New"">          ]);<o:p></o:p></span></p>
<p class="MsoNoSpacing"><span style="font-size:10.0pt;font-family:"Courier New"">       …<o:p></o:p></span></p>
<p class="MsoNoSpacing"><span style="font-size:10.0pt;font-family:"Courier New"">     }<o:p></o:p></span></p>
<p class="MsoNoSpacing"><span style="font-size:10.0pt;font-family:"Courier New"">  }<o:p></o:p></span></p>
<p class="MsoNoSpacing"><span style="font-size:10.0pt;font-family:"Courier New"">}<o:p></o:p></span></p>
<p class="MsoNoSpacing"><span style="font-size:10.0pt;font-family:"Courier New""><o:p> </o:p></span></p>
<p class="MsoNoSpacing">and<span style="font-size:10.0pt;font-family:"Courier New""><o:p></o:p></span></p>
<p class="MsoNoSpacing"><span style="font-size:10.0pt;font-family:"Courier New""><o:p> </o:p></span></p>
<p class="MsoNoSpacing"><span style="font-family:"Courier New"">kick<voice::active, tense::past>(context, Bobby, ball)</span> returns “Bobby kicked the ball”.</p>
<p class="MsoNoSpacing"><o:p> </o:p></p>
<p class="MsoNoSpacing">In English, most combinations of tense, aspect, mood and voice are expressed periphrastically, using constructions with auxiliary verbs. After implementing a number of these for similar verbs, per the above example, we would notice a
 pattern. That pattern could be expressed as something resembling:</p>
<p class="MsoNoSpacing"><o:p> </o:p></p>
<p class="MsoNoSpacing"><span style="font-size:10.0pt;font-family:"Courier New"">Clause pattern123<V, T>(Context context, Verb verb, Noun agent, Noun patient)<o:p></o:p></span></p>
<p class="MsoNoSpacing"><span style="font-size:10.0pt;font-family:"Courier New"">{<o:p></o:p></span></p>
<p class="MsoNoSpacing"><span style="font-size:10.0pt;font-family:"Courier New"">  switch(V)<o:p></o:p></span></p>
<p class="MsoNoSpacing"><span style="font-size:10.0pt;font-family:"Courier New"">  {<o:p></o:p></span></p>
<p class="MsoNoSpacing"><span style="font-size:10.0pt;font-family:"Courier New"">    case voice::active:<o:p></o:p></span></p>
<p class="MsoNoSpacing"><span style="font-size:10.0pt;font-family:"Courier New"">      switch(T)<o:p></o:p></span></p>
<p class="MsoNoSpacing"><span style="font-size:10.0pt;font-family:"Courier New"">      {<o:p></o:p></span></p>
<p class="MsoNoSpacing"><span style="font-size:10.0pt;font-family:"Courier New"">        case tense::past:<o:p></o:p></span></p>
<p class="MsoNoSpacing"><span style="font-size:10.0pt;font-family:"Courier New"">        case tense::present:<o:p></o:p></span></p>
<p class="MsoNoSpacing"><span style="font-size:10.0pt;font-family:"Courier New"">          return join(" ", [<o:p></o:p></span></p>
<p class="MsoNoSpacing"><span style="font-size:10.0pt;font-family:"Courier New"">            agent,<o:p></o:p></span></p>
<p class="MsoNoSpacing"><span style="font-size:10.0pt;font-family:"Courier New"">            conjugate_en(verb, V, T, …),<o:p></o:p></span></p>
<p class="MsoNoSpacing"><span style="font-size:10.0pt;font-family:"Courier New"">            “the”,<o:p></o:p></span></p>
<p class="MsoNoSpacing"><span style="font-size:10.0pt;font-family:"Courier New"">            patient<o:p></o:p></span></p>
<p class="MsoNoSpacing"><span style="font-size:10.0pt;font-family:"Courier New"">          ]);<o:p></o:p></span></p>
<p class="MsoNoSpacing"><span style="font-size:10.0pt;font-family:"Courier New"">        case tense::future:<o:p></o:p></span></p>
<p class="MsoNoSpacing"><span style="font-size:10.0pt;font-family:"Courier New"">          return join(" ", [<o:p></o:p></span></p>
<p class="MsoNoSpacing"><span style="font-size:10.0pt;font-family:"Courier New"">            agent,<o:p></o:p></span></p>
<p class="MsoNoSpacing"><span style="font-size:10.0pt;font-family:"Courier New"">            “will”,<o:p></o:p></span></p>
<p class="MsoNoSpacing"><span style="font-size:10.0pt;font-family:"Courier New"">            conjugate_en(verb, V, T, …),<o:p></o:p></span></p>
<p class="MsoNoSpacing"><span style="font-size:10.0pt;font-family:"Courier New"">            “the”,<o:p></o:p></span></p>
<p class="MsoNoSpacing"><span style="font-size:10.0pt;font-family:"Courier New"">            patient<o:p></o:p></span></p>
<p class="MsoNoSpacing"><span style="font-size:10.0pt;font-family:"Courier New"">          ]);<o:p></o:p></span></p>
<p class="MsoNoSpacing"><span style="font-size:10.0pt;font-family:"Courier New"">        …<o:p></o:p></span></p>
<p class="MsoNoSpacing"><span style="font-size:10.0pt;font-family:"Courier New"">      }<o:p></o:p></span></p>
<p class="MsoNoSpacing"><span style="font-size:10.0pt;font-family:"Courier New"">    case voice::passive:<o:p></o:p></span></p>
<p class="MsoNoSpacing"><span style="font-size:10.0pt;font-family:"Courier New"">      switch(T)<o:p></o:p></span></p>
<p class="MsoNoSpacing"><span style="font-size:10.0pt;font-family:"Courier New"">      {<o:p></o:p></span></p>
<p class="MsoNoSpacing"><span style="font-size:10.0pt;font-family:"Courier New"">        case tense::past:<o:p></o:p></span></p>
<p class="MsoNoSpacing"><span style="font-size:10.0pt;font-family:"Courier New"">          return join(" ", [<o:p></o:p></span></p>
<p class="MsoNoSpacing"><span style="font-size:10.0pt;font-family:"Courier New"">            “the”,<o:p></o:p></span></p>
<p class="MsoNoSpacing"><span style="font-size:10.0pt;font-family:"Courier New"">            patient,<o:p></o:p></span></p>
<p class="MsoNoSpacing"><span style="font-size:10.0pt;font-family:"Courier New"">            “was”,<o:p></o:p></span></p>
<p class="MsoNoSpacing"><span style="font-size:10.0pt;font-family:"Courier New"">            conjugate_en(verb, V, T, …),<o:p></o:p></span></p>
<p class="MsoNoSpacing"><span style="font-size:10.0pt;font-family:"Courier New"">            “by”<o:p></o:p></span></p>
<p class="MsoNoSpacing"><span style="font-size:10.0pt;font-family:"Courier New"">            agent<o:p></o:p></span></p>
<p class="MsoNoSpacing"><span style="font-size:10.0pt;font-family:"Courier New"">          ]);<o:p></o:p></span></p>
<p class="MsoNoSpacing"><span style="font-size:10.0pt;font-family:"Courier New"">        case tense::present:<o:p></o:p></span></p>
<p class="MsoNoSpacing"><span style="font-size:10.0pt;font-family:"Courier New"">          return join(" ", [<o:p></o:p></span></p>
<p class="MsoNoSpacing"><span style="font-size:10.0pt;font-family:"Courier New"">            “the”,<o:p></o:p></span></p>
<p class="MsoNoSpacing"><span style="font-size:10.0pt;font-family:"Courier New"">            patient,<o:p></o:p></span></p>
<p class="MsoNoSpacing"><span style="font-size:10.0pt;font-family:"Courier New"">            “is”,<o:p></o:p></span></p>
<p class="MsoNoSpacing"><span style="font-size:10.0pt;font-family:"Courier New"">            “being”,<o:p></o:p></span></p>
<p class="MsoNoSpacing"><span style="font-size:10.0pt;font-family:"Courier New"">           conjugate_en(verb, V, T, …),<o:p></o:p></span></p>
<p class="MsoNoSpacing"><span style="font-size:10.0pt;font-family:"Courier New"">            “by”<o:p></o:p></span></p>
<p class="MsoNoSpacing"><span style="font-size:10.0pt;font-family:"Courier New"">            agent<o:p></o:p></span></p>
<p class="MsoNoSpacing"><span style="font-size:10.0pt;font-family:"Courier New"">          ]);<o:p></o:p></span></p>
<p class="MsoNoSpacing"><span style="font-size:10.0pt;font-family:"Courier New"">       …<o:p></o:p></span></p>
<p class="MsoNoSpacing"><span style="font-size:10.0pt;font-family:"Courier New"">     }<o:p></o:p></span></p>
<p class="MsoNoSpacing"><span style="font-size:10.0pt;font-family:"Courier New"">  }<o:p></o:p></span></p>
<p class="MsoNoSpacing"><span style="font-size:10.0pt;font-family:"Courier New"">}<o:p></o:p></span></p>
<p class="MsoNoSpacing"><span style="font-size:10.0pt;font-family:"Courier New""><o:p> </o:p></span></p>
<p class="MsoNormal">We could then simply express that the verb “to kick” is an instance of pattern
<span style="font-size:10.0pt;font-family:"Courier New"">pattern123</span> with something resembling:<o:p></o:p></p>
<p class="MsoNoSpacing"><o:p> </o:p></p>
<p class="MsoNoSpacing"><span style="font-size:10.0pt;font-family:"Courier New"">Clause kick<V, T>(Context context, Noun agent, Noun patient)<o:p></o:p></span></p>
<p class="MsoNoSpacing"><span style="font-size:10.0pt;font-family:"Courier New"">{<o:p></o:p></span></p>
<p class="MsoNoSpacing"><span style="font-size:10.0pt;font-family:"Courier New"">  pattern123<V, T>(context, new Verb(“kick”, …), agent, patient);<o:p></o:p></span></p>
<p class="MsoNoSpacing"><span style="font-size:10.0pt;font-family:"Courier New"">}</span></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">or<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNoSpacing"><span style="font-size:10.0pt;font-family:"Courier New"">Clause kick<V, T>(Context context, Noun agent, Noun patient)<o:p></o:p></span></p>
<p class="MsoNoSpacing"><span style="font-size:10.0pt;font-family:"Courier New"">{<o:p></o:p></span></p>
<p class="MsoNoSpacing"><span style="font-size:10.0pt;font-family:"Courier New"">  pattern123<V, T>(context, getVerb(“https://…#kick”), agent, patient);<o:p></o:p></span></p>
<p class="MsoNoSpacing"><span style="font-size:10.0pt;font-family:"Courier New"">}</span></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">and this pattern could be reused for a large number of verbs.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">This use of patterns should extend to scenarios where there are more parameters for other thematically-related nouns:<o:p></o:p></p>
<p class="MsoNoSpacing"><span style="font-size:10.0pt;font-family:"Courier New""><o:p> </o:p></span></p>
<p class="MsoNoSpacing"><span style="font-size:10.0pt;font-family:"Courier New"">Clause kick<V, T>(Context context, Noun agent, Noun patient, Noun instrument)<o:p></o:p></span></p>
<p class="MsoNoSpacing"><span style="font-size:10.0pt;font-family:"Courier New"">{<o:p></o:p></span></p>
<p class="MsoNoSpacing"><span style="font-size:10.0pt;font-family:"Courier New"">  pattern1234<V, T>(context, new Verb(“kick”, …), agent, patient, instrument);<o:p></o:p></span></p>
<p class="MsoNoSpacing"><span style="font-size:10.0pt;font-family:"Courier New"">}</span></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">For English, there might be more generic parameters than those for voice and tense; we could add those for aspect and mood (e.g.
<span style="font-size:10.0pt;font-family:"Courier New"">pattern1234<V, T, A, M>(…)</span>).<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">In conclusion, with generic programming and functions for conjugation and declension, we have expressiveness with which to discover, encode and reuse language-specific patterns.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Best regards,<o:p></o:p></p>
</div>
<p class="MsoNormal">Adam Sobieski<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
</body>
</html>