mirror of
https://github.com/ganelson/inform.git
synced 2024-07-05 08:34:22 +03:00
305 lines
40 KiB
HTML
305 lines
40 KiB
HTML
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
|
<html>
|
|
<head>
|
|
<title>Complete Model World</title>
|
|
<link href="../docs-assets/Breadcrumbs.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
|
<meta name="viewport" content="width=device-width initial-scale=1">
|
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
|
<meta http-equiv="Content-Language" content="en-gb">
|
|
|
|
<link href="../docs-assets/Contents.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
|
<link href="../docs-assets/Progress.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
|
<link href="../docs-assets/Navigation.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
|
<link href="../docs-assets/Fonts.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
|
<link href="../docs-assets/Base.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
|
<script>
|
|
function togglePopup(material_id) {
|
|
var popup = document.getElementById(material_id);
|
|
popup.classList.toggle("show");
|
|
}
|
|
</script>
|
|
|
|
<link href="../docs-assets/Popups.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
|
<link href="../docs-assets/Colours.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
|
|
|
</head>
|
|
<body class="commentary-font">
|
|
<nav role="navigation">
|
|
<h1><a href="../index.html">
|
|
<img src="../docs-src/Figures/Inform.png" height=72">
|
|
</a></h1>
|
|
<ul><li><a href="../compiler.html">compiler tools</a></li>
|
|
<li><a href="../other.html">other tools</a></li>
|
|
<li><a href="../extensions.html">extensions and kits</a></li>
|
|
<li><a href="../units.html">unit test tools</a></li>
|
|
</ul><h2>Compiler Webs</h2><ul>
|
|
<li><a href="../inbuild/index.html">inbuild</a></li>
|
|
<li><a href="../inform7/index.html">inform7</a></li>
|
|
<li><a href="../inter/index.html">inter</a></li>
|
|
</ul><h2>Inbuild Modules</h2><ul>
|
|
<li><a href="../supervisor-module/index.html">supervisor</a></li>
|
|
</ul><h2>Inform7 Modules</h2><ul>
|
|
<li><a href="index.html"><span class="selectedlink">core</span></a></li>
|
|
<li><a href="../inflections-module/index.html">inflections</a></li>
|
|
<li><a href="../linguistics-module/index.html">linguistics</a></li>
|
|
<li><a href="../kinds-module/index.html">kinds</a></li>
|
|
<li><a href="../if-module/index.html">if</a></li>
|
|
<li><a href="../multimedia-module/index.html">multimedia</a></li>
|
|
<li><a href="../problems-module/index.html">problems</a></li>
|
|
<li><a href="../index-module/index.html">index</a></li>
|
|
</ul><h2>Inter Modules</h2><ul>
|
|
<li><a href="../bytecode-module/index.html">bytecode</a></li>
|
|
<li><a href="../building-module/index.html">building</a></li>
|
|
<li><a href="../codegen-module/index.html">codegen</a></li>
|
|
</ul><h2>Shared Modules</h2><ul>
|
|
<li><a href="../arch-module/index.html">arch</a></li>
|
|
<li><a href="../syntax-module/index.html">syntax</a></li>
|
|
<li><a href="../words-module/index.html">words</a></li>
|
|
<li><a href="../html-module/index.html">html</a></li>
|
|
<li><a href="../../../inweb/docs/foundation-module/index.html">foundation</a></li>
|
|
|
|
</ul>
|
|
</nav>
|
|
<main role="main">
|
|
<!--Weave of 'Complete Model World' generated by Inweb-->
|
|
<div class="breadcrumbs">
|
|
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="../compiler.html">Inform7 Modules</a></li><li><a href="index.html">core</a></li><li><a href="index.html#16">Chapter 16: Inference and Model</a></li><li><b>Complete Model World</b></li></ul></div>
|
|
<p class="purpose">Once the assertions have all been read and reduced to inferences, and all the creations have been made, we take stock; sometimes we spot inconsistencies, sometimes we make deductions, and we try to complete our picture of the model world.</p>
|
|
|
|
<ul class="toc"><li><a href="16-cmw.html#SP1">§1. Stages II to IV</a></li><li><a href="16-cmw.html#SP2">§2. Stage V</a></li></ul><hr class="tocbar">
|
|
|
|
<p class="commentary firstcommentary"><a id="SP1"></a><b>§1. Stages II to IV. </b>The process of using existing facts to infer new ones is vulnerable
|
|
to timing bugs, so we organise the "making" process into five numbered
|
|
stages, given the Roman numerals I to V. Much of the work is done by plugins,
|
|
which can take a hand at any or all of the stages, using their contextual
|
|
knowledge to fill in missing properties.
|
|
</p>
|
|
|
|
<ul class="items"><li>(I) Deducing the kind of any object whose kind is not known. Because this
|
|
can result in a change of kind, which can result in further creations by
|
|
assembly sentences like "A handle is part of every door", Stage I takes
|
|
place at the end of traverse 2 of the source text and, uniquely, gets the
|
|
opportunity to add fresh sentences to the source — thus extending the
|
|
traverse. By the end of Stage I, all kinds are fixed.
|
|
</li><li>(II) Stages II and III are for adding further properties or relationships,
|
|
which aren't explicit in the source text but which plugins can add on the
|
|
basis of contextual understanding. (Two stages are provided here to avoid
|
|
timing issues where one plugin has to act earlier than another.)
|
|
</li><li>(III) See (II). If a plugin is going to change the compilation order of
|
|
the objects (as the spatial-model plugin does), it must do so during
|
|
Stage III.
|
|
</li><li>(IV) A stage for consistency checks or to store away useful data, but where
|
|
nothing in the model may be changed — no properties or relationships
|
|
may be added. (Except that the instance-counting plugin is allowed to
|
|
add the linked-lists-of-instances properties, used to optimise loops
|
|
at run-time; they aren't visible at the I7 level so aren't properly
|
|
part of the model world.)
|
|
</li><li>(V) A final chance to add properties which will assist the run-time
|
|
implementation of, for instance, the command grammar, but again aren't
|
|
really part of the model world. (This can't be done earlier since the
|
|
command grammar isn't parsed until after <span class="extract"><span class="extract-syntax">World::complete</span></span>; and we
|
|
aren't allowed to add I7-accessible properties.)
|
|
</li></ul>
|
|
<p class="commentary">The following routine, then, carries out stages II, III and IV.
|
|
</p>
|
|
|
|
<pre class="displayed-code all-displayed-code code-font">
|
|
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">World::complete</span><button class="popup" onclick="togglePopup('usagePopup1')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup1">Usage of <span class="code-font"><span class="function-syntax">World::complete</span></span>:<br/>How To Compile - <a href="1-htc.html#SP2_5">§2.5</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
|
|
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="16-cmw.html#SP1_1" class="named-paragraph-link"><span class="named-paragraph">Stages II and III of the completion process</span><span class="named-paragraph-number">1.1</span></a></span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="16-cmw.html#SP1_2" class="named-paragraph-link"><span class="named-paragraph">Stage IV of the completion process</span><span class="named-paragraph-number">1.2</span></a></span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax">}</span>
|
|
</pre>
|
|
<p class="commentary firstcommentary"><a id="SP1_1"></a><b>§1.1. </b>The model world is a broth with many cooks. On the one hand, we have the
|
|
various different INFSs, with their different needs — a various-to-various
|
|
relation, a global variable, and so on — and on the other hand we also
|
|
have the plugins, each of which takes its own global view of the situation.
|
|
We give everyone a turn.
|
|
</p>
|
|
|
|
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Stages II and III of the completion process</span><span class="named-paragraph-number">1.1</span></span><span class="comment-syntax"> =</span>
|
|
</p>
|
|
|
|
<pre class="displayed-code all-displayed-code code-font">
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">inference_subject</span><span class="plain-syntax"> *</span><span class="identifier-syntax">infs</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER</span><span class="plain-syntax">(</span><span class="identifier-syntax">infs</span><span class="plain-syntax">, </span><span class="reserved-syntax">inference_subject</span><span class="plain-syntax">) {</span>
|
|
<span class="plain-syntax"> </span><a href="16-is.html#SP27" class="function-link"><span class="function-syntax">InferenceSubjects::complete_model</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">infs</span><span class="plain-syntax">);</span>
|
|
<span class="plain-syntax"> </span><a href="15-ia.html#SP2" class="function-link"><span class="function-syntax">Properties::Appearance::reallocate</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">infs</span><span class="plain-syntax">);</span>
|
|
<span class="plain-syntax"> }</span>
|
|
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER</span><span class="plain-syntax">(</span><span class="identifier-syntax">infs</span><span class="plain-syntax">, </span><span class="reserved-syntax">inference_subject</span><span class="plain-syntax">)</span>
|
|
<span class="plain-syntax"> </span><a href="9-imp.html#SP5" class="function-link"><span class="function-syntax">Assertions::Implications::consider_all</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">infs</span><span class="plain-syntax">);</span>
|
|
<span class="plain-syntax"> </span><a href="26-pc.html#SP6" class="function-link"><span class="function-syntax">Plugins::Call::complete_model</span></a><span class="plain-syntax">(2);</span>
|
|
<span class="plain-syntax"> </span><a href="26-pc.html#SP6" class="function-link"><span class="function-syntax">Plugins::Call::complete_model</span></a><span class="plain-syntax">(3);</span>
|
|
</pre>
|
|
<ul class="endnotetexts"><li>This code is used in <a href="16-cmw.html#SP1">§1</a>.</li></ul>
|
|
<p class="commentary firstcommentary"><a id="SP1_2"></a><b>§1.2. </b>Checking what we have, then. Once again each INFS is given an opportunity
|
|
to check itself, and then the plugins have a turn.
|
|
</p>
|
|
|
|
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Stage IV of the completion process</span><span class="named-paragraph-number">1.2</span></span><span class="comment-syntax"> =</span>
|
|
</p>
|
|
|
|
<pre class="displayed-code all-displayed-code code-font">
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">inference_subject</span><span class="plain-syntax"> *</span><span class="identifier-syntax">infs</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER</span><span class="plain-syntax">(</span><span class="identifier-syntax">infs</span><span class="plain-syntax">, </span><span class="reserved-syntax">inference_subject</span><span class="plain-syntax">) {</span>
|
|
<span class="plain-syntax"> </span><a href="16-is.html#SP28" class="function-link"><span class="function-syntax">InferenceSubjects::check_model</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">infs</span><span class="plain-syntax">);</span>
|
|
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="16-cmw.html#SP1_2_1" class="named-paragraph-link"><span class="named-paragraph">Check that properties are permitted</span><span class="named-paragraph-number">1.2.1</span></a></span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="16-cmw.html#SP1_2_2" class="named-paragraph-link"><span class="named-paragraph">Check that properties are not contradictory</span><span class="named-paragraph-number">1.2.2</span></a></span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax"> }</span>
|
|
<span class="plain-syntax"> </span><a href="26-pc.html#SP6" class="function-link"><span class="function-syntax">Plugins::Call::complete_model</span></a><span class="plain-syntax">(4);</span>
|
|
</pre>
|
|
<ul class="endnotetexts"><li>This code is used in <a href="16-cmw.html#SP1">§1</a>.</li></ul>
|
|
<p class="commentary firstcommentary"><a id="SP1_2_1"></a><b>§1.2.1. </b>These two checks may seem a little odd. After all, we've been throwing out
|
|
impossible inferences with problem messages all along, while reading the
|
|
source text. Why not perform these checks then, too?
|
|
</p>
|
|
|
|
<p class="commentary">The answer is that both depend not only on the subject of the inferences
|
|
made, but also on what that subject inherits from. Suppose we are told:
|
|
</p>
|
|
|
|
<blockquote>
|
|
<p>The cup is in the Yellow Cupboard. The Cupboard is lighted.</p>
|
|
</blockquote>
|
|
|
|
<p class="commentary">When we make the "lighted" inference, we know for certain what subject
|
|
it's about — the Yellow Cupboard — but not where this lives in the
|
|
inference-subject hierarchy, because that depends on the kind of the
|
|
Cupboard. Is it a room, or a container? We don't yet know (and won't until
|
|
Stage I of model-completion), so we aren't in a position to judge whether
|
|
or not it's permitted to have the property "lighted". This is why the
|
|
check is postponed until after Stage I, and it seems natural to perform
|
|
it here in Stage IV, so that we also catch any accidents due to bugs
|
|
in plugins which add inconsistent properties.
|
|
</p>
|
|
|
|
<p class="commentary">A nameless property added in Stages II and III does not need permission.
|
|
</p>
|
|
|
|
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Check that properties are permitted</span><span class="named-paragraph-number">1.2.1</span></span><span class="comment-syntax"> =</span>
|
|
</p>
|
|
|
|
<pre class="displayed-code all-displayed-code code-font">
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">inference</span><span class="plain-syntax"> *</span><span class="identifier-syntax">inf</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax"> </span><span class="identifier-syntax">KNOWLEDGE_LOOP</span><span class="plain-syntax">(</span><span class="identifier-syntax">inf</span><span class="plain-syntax">, </span><span class="identifier-syntax">infs</span><span class="plain-syntax">, </span><span class="constant-syntax">PROPERTY_INF</span><span class="plain-syntax">) {</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">property</span><span class="plain-syntax"> *</span><span class="identifier-syntax">prn</span><span class="plain-syntax"> = </span><a href="16-in.html#SP11" class="function-link"><span class="function-syntax">World::Inferences::get_property</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">inf</span><span class="plain-syntax">);</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Wordings::nonempty</span><span class="plain-syntax">(</span><span class="identifier-syntax">prn</span><span class="plain-syntax">-></span><span class="element-syntax">name</span><span class="plain-syntax">))</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="16-pp.html#SP8" class="function-link"><span class="function-syntax">World::Permissions::find</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">infs</span><span class="plain-syntax">, </span><span class="identifier-syntax">prn</span><span class="plain-syntax">, </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">) == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">)</span>
|
|
<span class="plain-syntax"> </span><a href="2-si.html#SP9" class="function-link"><span class="function-syntax">Problems::Issue::inference_problem</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">_p_</span><span class="plain-syntax">(</span><span class="identifier-syntax">PM_PropertyNotPermitted</span><span class="plain-syntax">),</span>
|
|
<span class="plain-syntax"> </span><span class="identifier-syntax">infs</span><span class="plain-syntax">, </span><span class="identifier-syntax">inf</span><span class="plain-syntax">, </span><span class="string-syntax">"is not allowed to exist"</span><span class="plain-syntax">,</span>
|
|
<span class="plain-syntax"> </span><span class="string-syntax">"because you haven't said it is. What properties something can "</span>
|
|
<span class="plain-syntax"> </span><span class="string-syntax">"have depends on what kind of thing it is: see the Index for "</span>
|
|
<span class="plain-syntax"> </span><span class="string-syntax">"details."</span><span class="plain-syntax">);</span>
|
|
<span class="plain-syntax"> }</span>
|
|
</pre>
|
|
<ul class="endnotetexts"><li>This code is used in <a href="16-cmw.html#SP1_2">§1.2</a>.</li></ul>
|
|
<p class="commentary firstcommentary"><a id="SP1_2_2"></a><b>§1.2.2. </b>The following contradiction checks do not apply to properties added
|
|
in Stages II and III, since those are often I6 hacks added for run-time
|
|
convenience, and don't have to follow the I7 rules.
|
|
</p>
|
|
|
|
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Check that properties are not contradictory</span><span class="named-paragraph-number">1.2.2</span></span><span class="comment-syntax"> =</span>
|
|
</p>
|
|
|
|
<pre class="displayed-code all-displayed-code code-font">
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">inference</span><span class="plain-syntax"> *</span><span class="identifier-syntax">narrow</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax"> </span><span class="identifier-syntax">KNOWLEDGE_LOOP</span><span class="plain-syntax">(</span><span class="identifier-syntax">narrow</span><span class="plain-syntax">, </span><span class="identifier-syntax">infs</span><span class="plain-syntax">, </span><span class="constant-syntax">PROPERTY_INF</span><span class="plain-syntax">) {</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="16-in.html#SP11" class="function-link"><span class="function-syntax">World::Inferences::added_in_construction</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">narrow</span><span class="plain-syntax">) == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) {</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">property</span><span class="plain-syntax"> *</span><span class="identifier-syntax">prn</span><span class="plain-syntax"> = </span><a href="16-in.html#SP11" class="function-link"><span class="function-syntax">World::Inferences::get_property</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">narrow</span><span class="plain-syntax">);</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">sign</span><span class="plain-syntax"> = </span><span class="constant-syntax">1</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="16-in.html#SP11" class="function-link"><span class="function-syntax">World::Inferences::get_certainty</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">narrow</span><span class="plain-syntax">) < </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="identifier-syntax">sign</span><span class="plain-syntax"> = -1;</span>
|
|
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="16-cmw.html#SP1_2_2_1" class="named-paragraph-link"><span class="named-paragraph">Look for clashes concerning this property from wider inferences</span><span class="named-paragraph-number">1.2.2.1</span></a></span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><a href="15-pr.html#SP16" class="function-link"><span class="function-syntax">Properties::is_either_or</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">prn</span><span class="plain-syntax">)) && (</span><a href="15-ep.html#SP6" class="function-link"><span class="function-syntax">Properties::EitherOr::get_negation</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">prn</span><span class="plain-syntax">))) {</span>
|
|
<span class="plain-syntax"> </span><span class="identifier-syntax">prn</span><span class="plain-syntax"> = </span><a href="15-ep.html#SP6" class="function-link"><span class="function-syntax">Properties::EitherOr::get_negation</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">prn</span><span class="plain-syntax">);</span>
|
|
<span class="plain-syntax"> </span><span class="identifier-syntax">sign</span><span class="plain-syntax"> = -</span><span class="identifier-syntax">sign</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="16-cmw.html#SP1_2_2_1" class="named-paragraph-link"><span class="named-paragraph">Look for clashes concerning this property from wider inferences</span><span class="named-paragraph-number">1.2.2.1</span></a></span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax"> }</span>
|
|
<span class="plain-syntax"> }</span>
|
|
<span class="plain-syntax"> }</span>
|
|
</pre>
|
|
<ul class="endnotetexts"><li>This code is used in <a href="16-cmw.html#SP1_2">§1.2</a>.</li></ul>
|
|
<p class="commentary firstcommentary"><a id="SP1_2_2_1"></a><b>§1.2.2.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Look for clashes concerning this property from wider inferences</span><span class="named-paragraph-number">1.2.2.1</span></span><span class="comment-syntax"> =</span>
|
|
</p>
|
|
|
|
<pre class="displayed-code all-displayed-code code-font">
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">inference_subject</span><span class="plain-syntax"> *</span><span class="identifier-syntax">boss</span><span class="plain-syntax"> = </span><a href="16-is.html#SP14" class="function-link"><span class="function-syntax">InferenceSubjects::narrowest_broader_subject</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">infs</span><span class="plain-syntax">);</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">while</span><span class="plain-syntax"> (</span><span class="identifier-syntax">boss</span><span class="plain-syntax">) {</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">inference</span><span class="plain-syntax"> *</span><span class="identifier-syntax">wide</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax"> </span><span class="identifier-syntax">KNOWLEDGE_LOOP</span><span class="plain-syntax">(</span><span class="identifier-syntax">wide</span><span class="plain-syntax">, </span><span class="identifier-syntax">boss</span><span class="plain-syntax">, </span><span class="constant-syntax">PROPERTY_INF</span><span class="plain-syntax">)</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="16-in.html#SP11" class="function-link"><span class="function-syntax">World::Inferences::added_in_construction</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">wide</span><span class="plain-syntax">) == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">)</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">prn</span><span class="plain-syntax"> == </span><a href="16-in.html#SP11" class="function-link"><span class="function-syntax">World::Inferences::get_property</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">wide</span><span class="plain-syntax">))</span>
|
|
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="16-cmw.html#SP1_2_2_1_1" class="named-paragraph-link"><span class="named-paragraph">Check that these differently scoped inferences do not clash</span><span class="named-paragraph-number">1.2.2.1.1</span></a></span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax"> </span><span class="identifier-syntax">boss</span><span class="plain-syntax"> = </span><a href="16-is.html#SP14" class="function-link"><span class="function-syntax">InferenceSubjects::narrowest_broader_subject</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">boss</span><span class="plain-syntax">);</span>
|
|
<span class="plain-syntax"> }</span>
|
|
</pre>
|
|
<ul class="endnotetexts"><li>This code is used in <a href="16-cmw.html#SP1_2_2">§1.2.2</a> (twice).</li></ul>
|
|
<p class="commentary firstcommentary"><a id="SP1_2_2_1_1"></a><b>§1.2.2.1.1. </b>It's never a problem when a vague fact about something general is contradicted
|
|
by a fact about something specific; the problem comes with something like this:
|
|
</p>
|
|
|
|
<blockquote>
|
|
<p>A door is always open. The Marble Portal is a closed door.</p>
|
|
</blockquote>
|
|
|
|
<p class="commentary">Here the "wide" property inference, for the "door" kind, is <span class="extract"><span class="extract-syntax">CERTAIN_CE</span></span>
|
|
rather than <span class="extract"><span class="extract-syntax">LIKELY_CE</span></span>, and so we can't allow the "narrow" inference,
|
|
about the Portal, to stand.
|
|
</p>
|
|
|
|
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Check that these differently scoped inferences do not clash</span><span class="named-paragraph-number">1.2.2.1.1</span></span><span class="comment-syntax"> =</span>
|
|
</p>
|
|
|
|
<pre class="displayed-code all-displayed-code code-font">
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">abcw</span><span class="plain-syntax"> = </span><a href="16-in.html#SP11" class="function-link"><span class="function-syntax">World::Inferences::get_certainty</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">wide</span><span class="plain-syntax">); </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">abcw</span><span class="plain-syntax"> < </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="identifier-syntax">abcw</span><span class="plain-syntax"> = -</span><span class="identifier-syntax">abcw</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">abcw</span><span class="plain-syntax"> == </span><span class="identifier-syntax">CERTAIN_CE</span><span class="plain-syntax">) {</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">clash</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">wide_sign</span><span class="plain-syntax"> = </span><span class="constant-syntax">1</span><span class="plain-syntax">; </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="16-in.html#SP11" class="function-link"><span class="function-syntax">World::Inferences::get_certainty</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">wide</span><span class="plain-syntax">) < </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="identifier-syntax">wide_sign</span><span class="plain-syntax"> = -1;</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="15-pr.html#SP16" class="function-link"><span class="function-syntax">Properties::is_either_or</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">prn</span><span class="plain-syntax">) == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) {</span>
|
|
<span class="plain-syntax"> </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">narrow_val</span><span class="plain-syntax"> = </span><a href="16-in.html#SP11" class="function-link"><span class="function-syntax">World::Inferences::get_property_value</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">narrow</span><span class="plain-syntax">);</span>
|
|
<span class="plain-syntax"> </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">wide_val</span><span class="plain-syntax"> = </span><a href="16-in.html#SP11" class="function-link"><span class="function-syntax">World::Inferences::get_property_value</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">wide</span><span class="plain-syntax">);</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="14-rv.html#SP20" class="function-link"><span class="function-syntax">Rvalues::compare_CONSTANT</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">narrow_val</span><span class="plain-syntax">, </span><span class="identifier-syntax">wide_val</span><span class="plain-syntax">) == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) {</span>
|
|
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"Clash of $P and $P\n $I\n $I\n"</span><span class="plain-syntax">,</span>
|
|
<span class="plain-syntax"> </span><span class="identifier-syntax">narrow_val</span><span class="plain-syntax">, </span><span class="identifier-syntax">wide_val</span><span class="plain-syntax">, </span><span class="identifier-syntax">narrow</span><span class="plain-syntax">, </span><span class="identifier-syntax">wide</span><span class="plain-syntax">);</span>
|
|
<span class="plain-syntax"> </span><span class="identifier-syntax">clash</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax"> }</span>
|
|
<span class="plain-syntax"> }</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">sign</span><span class="plain-syntax"> != </span><span class="identifier-syntax">wide_sign</span><span class="plain-syntax">) </span><span class="identifier-syntax">clash</span><span class="plain-syntax"> = (</span><span class="identifier-syntax">clash</span><span class="plain-syntax">)?</span><span class="identifier-syntax">FALSE:TRUE</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">clash</span><span class="plain-syntax">) {</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">abcn</span><span class="plain-syntax"> = </span><a href="16-in.html#SP11" class="function-link"><span class="function-syntax">World::Inferences::get_certainty</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">narrow</span><span class="plain-syntax">); </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">abcn</span><span class="plain-syntax"> < </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="identifier-syntax">abcn</span><span class="plain-syntax"> = -</span><span class="identifier-syntax">abcn</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">abcn</span><span class="plain-syntax"> == </span><span class="identifier-syntax">CERTAIN_CE</span><span class="plain-syntax">)</span>
|
|
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="16-cmw.html#SP1_2_2_1_1_1" class="named-paragraph-link"><span class="named-paragraph">Issue a problem message for clash with wider inference</span><span class="named-paragraph-number">1.2.2.1.1.1</span></a></span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span>
|
|
<span class="plain-syntax"> </span><a href="16-in.html#SP11" class="function-link"><span class="function-syntax">World::Inferences::set_certainty</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">narrow</span><span class="plain-syntax">, </span><span class="identifier-syntax">IMPOSSIBLE_CE</span><span class="plain-syntax">);</span>
|
|
<span class="plain-syntax"> }</span>
|
|
<span class="plain-syntax"> }</span>
|
|
</pre>
|
|
<ul class="endnotetexts"><li>This code is used in <a href="16-cmw.html#SP1_2_2_1">§1.2.2.1</a>.</li></ul>
|
|
<p class="commentary firstcommentary"><a id="SP1_2_2_1_1_1"></a><b>§1.2.2.1.1.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Issue a problem message for clash with wider inference</span><span class="named-paragraph-number">1.2.2.1.1.1</span></span><span class="comment-syntax"> =</span>
|
|
</p>
|
|
|
|
<pre class="displayed-code all-displayed-code code-font">
|
|
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"Checking infs $j compatible with infs $j for property $Y:\n $I\n $I\n"</span><span class="plain-syntax">,</span>
|
|
<span class="plain-syntax"> </span><span class="identifier-syntax">infs</span><span class="plain-syntax">, </span><span class="identifier-syntax">boss</span><span class="plain-syntax">, </span><span class="identifier-syntax">prn</span><span class="plain-syntax">, </span><span class="identifier-syntax">narrow</span><span class="plain-syntax">, </span><span class="identifier-syntax">wide</span><span class="plain-syntax">);</span>
|
|
<span class="plain-syntax"> </span><a href="2-si.html#SP2" class="function-link"><span class="function-syntax">Problems::Issue::infs_contradiction_problem</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">_p_</span><span class="plain-syntax">(</span><span class="identifier-syntax">PM_InstanceContradiction</span><span class="plain-syntax">),</span>
|
|
<span class="plain-syntax"> </span><a href="16-in.html#SP11" class="function-link"><span class="function-syntax">World::Inferences::where_inferred</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">narrow</span><span class="plain-syntax">), </span><a href="16-in.html#SP11" class="function-link"><span class="function-syntax">World::Inferences::where_inferred</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">wide</span><span class="plain-syntax">), </span><span class="identifier-syntax">infs</span><span class="plain-syntax">,</span>
|
|
<span class="plain-syntax"> </span><span class="string-syntax">"therefore has to have two contradictory states of the same property at once"</span><span class="plain-syntax">,</span>
|
|
<span class="plain-syntax"> </span><span class="string-syntax">"which is impossible. When a kind's definition says that something is 'always' "</span>
|
|
<span class="plain-syntax"> </span><span class="string-syntax">"true, there is no way to override that for particular things of the kind."</span><span class="plain-syntax">);</span>
|
|
</pre>
|
|
<ul class="endnotetexts"><li>This code is used in <a href="16-cmw.html#SP1_2_2_1_1">§1.2.2.1.1</a>.</li></ul>
|
|
<p class="commentary firstcommentary"><a id="SP2"></a><b>§2. Stage V. </b>See above. This is for the use of plugins only.
|
|
</p>
|
|
|
|
<pre class="displayed-code all-displayed-code code-font">
|
|
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">World::complete_additions</span><button class="popup" onclick="togglePopup('usagePopup2')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup2">Usage of <span class="code-font"><span class="function-syntax">World::complete_additions</span></span>:<br/>How To Compile - <a href="1-htc.html#SP2_6">§2.6</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
|
|
<span class="plain-syntax"> </span><a href="26-pc.html#SP6" class="function-link"><span class="function-syntax">Plugins::Call::complete_model</span></a><span class="plain-syntax">(5);</span>
|
|
<span class="plain-syntax">}</span>
|
|
</pre>
|
|
<nav role="progress"><div class="progresscontainer">
|
|
<ul class="progressbar"><li class="progressprev"><a href="16-in.html">❮</a></li><li class="progresschapter"><a href="1-cm.html">1</a></li><li class="progresschapter"><a href="2-up.html">2</a></li><li class="progresschapter"><a href="3-nl.html">3</a></li><li class="progresschapter"><a href="4-its.html">4</a></li><li class="progresschapter"><a href="5-lp.html">5</a></li><li class="progresschapter"><a href="6-bp.html">6</a></li><li class="progresschapter"><a href="7-ptu.html">7</a></li><li class="progresschapter"><a href="8-ef.html">8</a></li><li class="progresschapter"><a href="9-ita.html">9</a></li><li class="progresschapter"><a href="10-aots.html">10</a></li><li class="progresschapter"><a href="11-itpc.html">11</a></li><li class="progresschapter"><a href="12-ter.html">12</a></li><li class="progresschapter"><a href="13-kak.html">13</a></li><li class="progresschapter"><a href="14-sp.html">14</a></li><li class="progresschapter"><a href="15-pr.html">15</a></li><li class="progresscurrentchapter">16</li><li class="progresssection"><a href="16-is.html">is</a></li><li class="progresssection"><a href="16-pp.html">pp</a></li><li class="progresssection"><a href="16-in.html">in</a></li><li class="progresscurrent">cmw</li><li class="progresssection"><a href="16-cmw2.html">cmw2</a></li><li class="progresssection"><a href="16-ic.html">ic</a></li><li class="progresschapter"><a href="17-tl.html">17</a></li><li class="progresschapter"><a href="18-lc.html">18</a></li><li class="progresschapter"><a href="19-tc.html">19</a></li><li class="progresschapter"><a href="20-eq.html">20</a></li><li class="progresschapter"><a href="21-rl.html">21</a></li><li class="progresschapter"><a href="22-itp.html">22</a></li><li class="progresschapter"><a href="23-ad.html">23</a></li><li class="progresschapter"><a href="24-lv.html">24</a></li><li class="progresschapter"><a href="25-in.html">25</a></li><li class="progresschapter"><a href="26-fc.html">26</a></li><li class="progresschapter"><a href="27-hr.html">27</a></li><li class="progressnext"><a href="16-cmw2.html">❯</a></li></ul></div>
|
|
</nav><!--End of weave-->
|
|
|
|
</main>
|
|
</body>
|
|
</html>
|
|
|