Revision 8ae3500bc11757418ae922dcf891f750ca691dd6 authored by vthierry on 05 December 2025, 10:56:55 UTC, committed by vthierry on 05 December 2025, 10:56:55 UTC
1 parent 4159546
Rule.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Rule - Documentation</title>
<script src="scripts/prettify/prettify.js"></script>
<script src="scripts/prettify/lang-css.js"></script>
<!--[if lt IE 9]>
<script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
<link type="text/css" rel="stylesheet" href="styles/prettify.css">
<link type="text/css" rel="stylesheet" href="styles/jsdoc.css">
<script src="scripts/nav.js" defer></script>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
<input type="checkbox" id="nav-trigger" class="nav-trigger" />
<label for="nav-trigger" class="navicon-button x">
<div class="navicon"></div>
</label>
<label for="nav-trigger" class="overlay"></label>
<nav >
<input type="text" id="nav-search" placeholder="Search" />
<h2><a href="index.html">Home</a></h2><h3>Objects</h3><ul><li><a href="Array.html">Array</a><ul class='members'></ul><ul class='methods'><li data-type='method' style='display: none;'><a href="Array.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Array.html#get">get</a></li></ul></li><li><a href="AssociativeMap.html">AssociativeMap</a><ul class='members'></ul><ul class='methods'><li data-type='method' style='display: none;'><a href="AssociativeMap.html#add">add</a></li><li data-type='method' style='display: none;'><a href="AssociativeMap.html#erase">erase</a></li><li data-type='method' style='display: none;'><a href="AssociativeMap.html#get">get</a></li><li data-type='method' style='display: none;'><a href="AssociativeMap.html#get">get</a></li><li data-type='method' style='display: none;'><a href="AssociativeMap.html#getBundling">getBundling</a></li><li data-type='method' style='display: none;'><a href="AssociativeMap.html#getSize">getSize</a></li><li data-type='method' style='display: none;'><a href="AssociativeMap.html#asString">asString</a></li><li data-type='method' style='display: none;'><a href="AssociativeMap.html#getValue">getValue</a></li><li data-type='method' style='display: none;'><a href="AssociativeMap.html#getKey">getKey</a></li></ul></li><li><a href="AssociativeNetwork.html">AssociativeNetwork</a><ul class='members'></ul><ul class='methods'><li data-type='method' style='display: none;'><a href="AssociativeNetwork.html#add">add</a></li></ul></li><li><a href="Belief.html">Belief</a><ul class='members'><li data-type='member' style='display: none;'><a href="Belief.html#tau">tau</a></li><li data-type='member' style='display: none;'><a href="Belief.html#sigma">sigma</a></li></ul><ul class='methods'><li data-type='method' style='display: none;'><a href="Belief.html#asString">asString</a></li></ul></li><li><a href="Binding.html">Binding</a><ul class='members'></ul><ul class='methods'><li data-type='method' style='display: none;'><a href="Binding.html#y">y</a></li><li data-type='method' style='display: none;'><a href="Binding.html#x">x</a></li><li data-type='method' style='display: none;'><a href="Binding.html#b">b</a></li><li data-type='method' style='display: none;'><a href="Binding.html#normalized">normalized</a></li><li data-type='method' style='display: none;'><a href="Binding.html#asString">asString</a></li><li data-type='method' style='display: none;'><a href="Binding.html#.getComputationTIme">getComputationTIme</a></li></ul></li><li><a href="Bundling.html">Bundling</a><ul class='members'></ul><ul class='methods'><li data-type='method' style='display: none;'><a href="Bundling.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Bundling.html#erase">erase</a></li><li data-type='method' style='display: none;'><a href="Bundling.html#getSorted">getSorted</a></li><li data-type='method' style='display: none;'><a href="Bundling.html#get">get</a></li></ul></li><li><a href="List.html">List</a><ul class='members'></ul><ul class='methods'><li data-type='method' style='display: none;'><a href="List.html#add">add</a></li><li data-type='method' style='display: none;'><a href="List.html#erase">erase</a></li><li data-type='method' style='display: none;'><a href="List.html#getNext">getNext</a></li><li data-type='method' style='display: none;'><a href="List.html#getPrevious">getPrevious</a></li></ul></li><li><a href="Number.html">Number</a><ul class='members'></ul><ul class='methods'><li data-type='method' style='display: none;'><a href="Number.html#.getInt">getInt</a></li></ul></li><li><a href="RelationalMap.html">RelationalMap</a><ul class='members'></ul><ul class='methods'><li data-type='method' style='display: none;'><a href="RelationalMap.html#add">add</a></li><li data-type='method' style='display: none;'><a href="RelationalMap.html#add">add</a></li><li data-type='method' style='display: none;'><a href="RelationalMap.html#add">add</a></li><li data-type='method' style='display: none;'><a href="RelationalMap.html#get">get</a></li><li data-type='method' style='display: none;'><a href="RelationalMap.html#get">get</a></li><li data-type='method' style='display: none;'><a href="RelationalMap.html#asString">asString</a></li><li data-type='method' style='display: none;'><a href="RelationalMap.html#.asString">asString</a></li><li data-type='method' style='display: none;'><a href="RelationalMap.html#save">save</a></li></ul></li><li><a href="Rule.html">Rule</a><ul class='members'></ul><ul class='methods'><li data-type='method' style='display: none;'><a href="Rule.html#getName">getName</a></li><li data-type='method' style='display: none;'><a href="Rule.html#getArity">getArity</a></li><li data-type='method' style='display: none;'><a href="Rule.html#getTau">getTau</a></li><li data-type='method' style='display: none;'><a href="Rule.html#isValid">isValid</a></li><li data-type='method' style='display: none;'><a href="Rule.html#setOutput">setOutput</a></li></ul></li><li><a href="Rules.html">Rules</a><ul class='members'></ul><ul class='methods'><li data-type='method' style='display: none;'><a href="Rules.html#add">add</a></li><li data-type='method' style='display: none;'><a href="Rules.html#isDifferent">isDifferent</a></li><li data-type='method' style='display: none;'><a href="Rules.html#apply">apply</a></li></ul></li><li><a href="Symbol.html">Symbol</a><ul class='members'><li data-type='member' style='display: none;'><a href="Symbol.html#.nill">nill</a></li></ul><ul class='methods'><li data-type='method' style='display: none;'><a href="Symbol.html#getName">getName</a></li><li data-type='method' style='display: none;'><a href="Symbol.html#getID">getID</a></li><li data-type='method' style='display: none;'><a href="Symbol.html#getType">getType</a></li><li data-type='method' style='display: none;'><a href="Symbol.html#getVector">getVector</a></li><li data-type='method' style='display: none;'><a href="Symbol.html#getBelief()">getBelief()</a></li><li data-type='method' style='display: none;'><a href="Symbol.html#setBelief()">setBelief()</a></li><li data-type='method' style='display: none;'><a href="Symbol.html#equals">equals</a></li><li data-type='method' style='display: none;'><a href="Symbol.html#asString">asString</a></li><li data-type='method' style='display: none;'><a href="Symbol.html#.getDimension">getDimension</a></li><li data-type='method' style='display: none;'><a href="Symbol.html#.setDimension">setDimension</a></li><li data-type='method' style='display: none;'><a href="Symbol.html#.clone">clone</a></li><li data-type='method' style='display: none;'><a href="Symbol.html#.fromJSON">fromJSON</a></li><li data-type='method' style='display: none;'><a href="Symbol.html#.toJSON">toJSON</a></li><li data-type='method' style='display: none;'><a href="Symbol.html#.dump">dump</a></li></ul></li><li><a href="algo.html">algo</a><ul class='members'><li data-type='member' style='display: none;'><a href="algo.html#.sigma_0">sigma_0</a></li></ul><ul class='methods'><li data-type='method' style='display: none;'><a href="algo.html#.reduce">reduce</a></li><li data-type='method' style='display: none;'><a href="algo.html#.sim">sim</a></li><li data-type='method' style='display: none;'><a href="algo.html#.msim">msim</a></li><li data-type='method' style='display: none;'><a href="algo.html#.conj">conj</a></li></ul></li></ul>
</nav>
<div id="main">
<h1 class="page-title">Rule</h1>
<section>
<header>
<h2>
Rule
</h2>
</header>
<article>
<div class="container-overview">
<h4 class="name" id="Rule"><span class="type-signature"></span>new Rule<span class="signature">(arity)</span><span class="type-signature"></span></h4>
<dl class="details">
<dt class="tag-description">Description:</dt>
<dd class="tag-description"><ul class="dummy"><li><p>Implements an abstract rule based mechanism, based on belief calculation.</p>
<ul>
<li>A rule is implemented by overloading the <a href="#.getTau"><code>getTau()</code></a> and <a href="#.getOutput"><code>getOutput()</code></a> functions.</li>
<li>A rule is validated by the the <a href="#.isValid"><code>isValid()</code></a> function.</li>
<li>A rule is used through the <a href="Rules.html"><code>Rules</code></a> mechanism, which provides examples of construction</li>
<li>via <a href="Rules.html">a macro</a> or</li>
<li>as a <a href="Rules.html#.add">derived class</a>.</li>
</ul></li></ul></dd>
</dl>
<h5 class="h5-parameters">Parameters:</h5>
<table class="params">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>arity</code></td>
<td class="type">
<span class="param-type">uint</span>
</td>
<td class="description last"><p>The rule arity, actually, the implementation considers rules of arity 1, 2 or 3.</p></td>
</tr>
</tbody>
</table>
</div>
<h3 class="subsection-title">Methods</h3>
<h4 class="name" id="getName"><span class="type-signature"></span>getName<span class="signature">()</span><span class="type-signature"></span></h4>
<dl class="details">
<dt class="tag-description">Description:</dt>
<dd class="tag-description"><ul class="dummy"><li><p>Returns the rule name.</p></li></ul></dd>
</dl>
<h4 class="name" id="getArity"><span class="type-signature"></span>getArity<span class="signature">()</span><span class="type-signature"></span></h4>
<dl class="details">
<dt class="tag-description">Description:</dt>
<dd class="tag-description"><ul class="dummy"><li><p>Returns the rule arity.</p></li></ul></dd>
</dl>
<h4 class="name" id="getTau"><span class="type-signature"></span>getTau<span class="signature">(subject_1, predicate_1, object_1, subject_2<span class="signature-attributes">opt</span>, predicate_2<span class="signature-attributes">opt</span>, object_2<span class="signature-attributes">opt</span>, subject_3<span class="signature-attributes">opt</span>, predicate_3<span class="signature-attributes">opt</span>, object_3<span class="signature-attributes">opt</span>)</span><span class="type-signature"> → {<a href="Belief.html">Belief</a>}</span></h4>
<dl class="details">
<dt class="tag-description">Description:</dt>
<dd class="tag-description"><ul class="dummy"><li><p>Returns the tau value given triples.</p>
<ul>
<li>This method is
<ul>
<li>to be overloaded to implement the rule, depending on the arity;</li>
<li>not expected to be called directly, but though the apply function.</li>
</ul>
</li>
<li>This method is usually built using the <a href="./algo.html#.sim">algo::sim()</a> and <a href="./algo.html#.conf">algo::conj()</a> functions.</li>
</ul></li></ul></dd>
</dl>
<h5 class="h5-parameters">Parameters:</h5>
<table class="params">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Attributes</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>subject_1</code></td>
<td class="type">
<span class="param-type"><a href="Symbol.html">Symbol</a></span>
</td>
<td class="attributes">
</td>
<td class="description last"><p>The 1st triple subject.</p></td>
</tr>
<tr>
<td class="name"><code>predicate_1</code></td>
<td class="type">
<span class="param-type"><a href="Symbol.html">Symbol</a></span>
</td>
<td class="attributes">
</td>
<td class="description last"><p>The 1st triple predicate.</p></td>
</tr>
<tr>
<td class="name"><code>object_1</code></td>
<td class="type">
<span class="param-type"><a href="Symbol.html">Symbol</a></span>
</td>
<td class="attributes">
</td>
<td class="description last"><p>The 1st triple object.</p></td>
</tr>
<tr>
<td class="name"><code>subject_2</code></td>
<td class="type">
<span class="param-type"><a href="Symbol.html">Symbol</a></span>
</td>
<td class="attributes">
<optional><br>
</td>
<td class="description last"><p>The 2nd triple subject.</p></td>
</tr>
<tr>
<td class="name"><code>predicate_2</code></td>
<td class="type">
<span class="param-type"><a href="Symbol.html">Symbol</a></span>
</td>
<td class="attributes">
<optional><br>
</td>
<td class="description last"><p>The 2nd triple predicate.</p></td>
</tr>
<tr>
<td class="name"><code>object_2</code></td>
<td class="type">
<span class="param-type"><a href="Symbol.html">Symbol</a></span>
</td>
<td class="attributes">
<optional><br>
</td>
<td class="description last"><p>The 2nd triple object.</p></td>
</tr>
<tr>
<td class="name"><code>subject_3</code></td>
<td class="type">
<span class="param-type"><a href="Symbol.html">Symbol</a></span>
</td>
<td class="attributes">
<optional><br>
</td>
<td class="description last"><p>The 3rd triple subject.</p></td>
</tr>
<tr>
<td class="name"><code>predicate_3</code></td>
<td class="type">
<span class="param-type"><a href="Symbol.html">Symbol</a></span>
</td>
<td class="attributes">
<optional><br>
</td>
<td class="description last"><p>The 3rd triple predicate.</p></td>
</tr>
<tr>
<td class="name"><code>object_3</code></td>
<td class="type">
<span class="param-type"><a href="Symbol.html">Symbol</a></span>
</td>
<td class="attributes">
<optional><br>
</td>
<td class="description last"><p>The 3rd triple object.</p></td>
</tr>
</tbody>
</table>
<h5 class="h5-returns">Returns:</h5>
<div class="param-desc">
<p>The rule evaluation of the belief.</p>
</div>
<dl class="param-type">
<dt>
Type
</dt>
<dd>
<span class="param-type"><a href="Belief.html">Belief</a></span>
</dd>
</dl>
<h4 class="name" id="isValid"><span class="type-signature"></span>isValid<span class="signature">(belief)</span><span class="type-signature"></span></h4>
<dl class="details">
<dt class="tag-description">Description:</dt>
<dd class="tag-description"><ul class="dummy"><li><p>Returns true if the level of belief is valid for this rule.</p>
<ul>
<li>This method is to be overloaded to implement a specific validity criterion.</li>
<li>The default implementation returns <code>belief.tau > 2 * belief.sigma</code>.</li>
</ul></li></ul></dd>
</dl>
<h5 class="h5-parameters">Parameters:</h5>
<table class="params">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>belief</code></td>
<td class="type">
<span class="param-type"><a href="Belief.html">Belief</a></span>
</td>
<td class="description last"><p>A <code>const Belief&</code> input value.
@ @return {bool} True if valid, false otherwise.</p></td>
</tr>
</tbody>
</table>
<h4 class="name" id="setOutput"><span class="type-signature"></span>setOutput<span class="signature">(output)</span><span class="type-signature"></span></h4>
<dl class="details">
<dt class="tag-description">Description:</dt>
<dd class="tag-description"><ul class="dummy"><li><p>Returns the output the rule given the input triples.</p>
<ul>
<li>This method is
<ul>
<li>to be overloaded to implement the rule;</li>
<li>not expected to be called directly, but though the apply function.</li>
</ul>
</li>
<li>In order to calculate the output triples, this method access to the protected:
<ul>
<li><code>tau</code> belief value, previously calculated;</li>
<li>the protected pointers to input values <code>*subject_i</code>, <code>*predicate_i</code>, <code>*object_i</code>, previously set.
A typical implementation writes:</li>
</ul>
</li>
</ul>
<pre class="prettyprint source"><code>virtual void(RelationalMap& output) {
output.add(subject_0, predicate_0, object_0); // where these arguments correspond to an output value
}
</code></pre></li></ul></dd>
</dl>
<h5 class="h5-parameters">Parameters:</h5>
<table class="params">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th class="last">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name"><code>output</code></td>
<td class="type">
<span class="param-type"><a href="RelationalMap.html">RelationalMap</a></span>
</td>
<td class="description last"><p>A <code>RelationalMap *</code> pointer to a relation map with the output triples, to be deleted after use.</p></td>
</tr>
</tbody>
</table>
</article>
</section>
</div>
<br class="clear">
<footer>
<div style='float: right;font-style: italic;'>2025-10-28 version.</div>
</footer>
<script>prettyPrint();</script>
<script src="scripts/polyfill.js"></script>
<script src="scripts/linenumber.js"></script>
<script src="scripts/search.js" defer></script>
<script src="scripts/collapse.js" defer></script>
</body>
</html>
Computing file changes ...