1
0
Fork 0
mirror of https://github.com/ganelson/inform.git synced 2024-07-08 18:14:21 +03:00
inform7/docs/core-module/12-qr.html
2019-04-22 15:42:10 +01:00

227 lines
31 KiB
HTML

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>12/ter</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="Content-Language" content="en-gb">
<link href="inweb.css" rel="stylesheet" rev="stylesheet" type="text/css">
</head>
<body>
<!--Weave of '12/qr' generated by 7-->
<ul class="crumbs"><li><a href="../webs.html">&#9733;</a></li><li><a href="index.html">core</a></li><li><a href="index.html#12">Chapter 12: Use of Propositions</a></li><li><b>Quasinumeric Relations</b></li></ul><p class="purpose">To define the binary predicates corresponding to numerical comparisons.</p>
<ul class="toc"><li><a href="#SP1">&#167;1. Definitions</a></li><li><a href="#SP3">&#167;3. Initial stock</a></li><li><a href="#SP4">&#167;4. Second stock</a></li><li><a href="#SP5">&#167;5. Typechecking</a></li><li><a href="#SP6">&#167;6. Assertion</a></li><li><a href="#SP7">&#167;7. Compilation</a></li><li><a href="#SP8">&#167;8. Problem message text</a></li></ul><hr class="tocbar">
<p class="inwebparagraph"><a id="SP1"></a><b>&#167;1. Definitions. </b></p>
<p class="inwebparagraph"><a id="SP2"></a><b>&#167;2. </b>The inequality relations &lt;, &gt;, &lt;=, and &gt;=, which can be
applied not only to numbers but also to units (height, length and so on).
</p>
<p class="inwebparagraph">It might seem redundant to define both <code class="display"><span class="extract">R_numerically_greater_than</span></code> (which makes the
numerical test a&gt;b) and also <code class="display"><span class="extract">R_numerically_less_than</span></code> (which tests a&lt;b). Why
not define only one, and get the other meaning free as its reversal? The
answer is that is more convenient not to, because it allows us to give both
of them names.
</p>
<p class="inwebparagraph">There is no numerical equality relation = as such: numbers use the same
equality BP as everything else.
</p>
<pre class="display">
<span class="reserved">binary_predicate</span><span class="plain"> *</span><span class="identifier">R_numerically_greater_than</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="reserved">binary_predicate</span><span class="plain"> *</span><span class="identifier">R_numerically_less_than</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="reserved">binary_predicate</span><span class="plain"> *</span><span class="identifier">R_numerically_greater_than_or_equal_to</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="reserved">binary_predicate</span><span class="plain"> *</span><span class="identifier">R_numerically_less_than_or_equal_to</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
</pre>
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP3"></a><b>&#167;3. Initial stock. </b>These relations are all hard-wired in.
</p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Calculus::QuasinumericRelations::REL_create_initial_stock</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
<span class="reserved">bp_term_details</span><span class="plain"> </span><span class="identifier">number_term</span><span class="plain"> = </span><span class="functiontext">BinaryPredicates::new_term</span><span class="plain">(</span><span class="functiontext">Kinds::Knowledge::as_subject</span><span class="plain">(</span><span class="identifier">K_number</span><span class="plain">));</span>
<span class="identifier">R_numerically_greater_than</span><span class="plain"> =</span>
<span class="functiontext">BinaryPredicates::make_pair</span><span class="plain">(</span><span class="constant">QUASINUMERIC_KBP</span><span class="plain">,</span>
<span class="identifier">number_term</span><span class="plain">, </span><span class="identifier">number_term</span><span class="plain">,</span>
<span class="identifier">I</span><span class="string">"greater-than"</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="functiontext">Calculus::Schemas::new</span><span class="plain">(</span><span class="string">"*1 &gt; *2"</span><span class="plain">),</span>
<span class="identifier">Preform::Nonparsing::wording</span><span class="plain">(&lt;</span><span class="identifier">relation</span><span class="plain">-</span><span class="identifier">names</span><span class="plain">&gt;, </span><span class="constant">GT_RELATION_NAME</span><span class="plain">));</span>
<span class="identifier">R_numerically_less_than</span><span class="plain"> =</span>
<span class="functiontext">BinaryPredicates::make_pair</span><span class="plain">(</span><span class="constant">QUASINUMERIC_KBP</span><span class="plain">,</span>
<span class="identifier">number_term</span><span class="plain">, </span><span class="identifier">number_term</span><span class="plain">,</span>
<span class="identifier">I</span><span class="string">"less-than"</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="functiontext">Calculus::Schemas::new</span><span class="plain">(</span><span class="string">"*1 &lt; *2"</span><span class="plain">),</span>
<span class="identifier">Preform::Nonparsing::wording</span><span class="plain">(&lt;</span><span class="identifier">relation</span><span class="plain">-</span><span class="identifier">names</span><span class="plain">&gt;, </span><span class="constant">LT_RELATION_NAME</span><span class="plain">));</span>
<span class="identifier">R_numerically_greater_than_or_equal_to</span><span class="plain"> =</span>
<span class="functiontext">BinaryPredicates::make_pair</span><span class="plain">(</span><span class="constant">QUASINUMERIC_KBP</span><span class="plain">,</span>
<span class="identifier">number_term</span><span class="plain">, </span><span class="identifier">number_term</span><span class="plain">,</span>
<span class="identifier">I</span><span class="string">"at-least"</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="functiontext">Calculus::Schemas::new</span><span class="plain">(</span><span class="string">"*1 &gt;= *2"</span><span class="plain">),</span>
<span class="identifier">Preform::Nonparsing::wording</span><span class="plain">(&lt;</span><span class="identifier">relation</span><span class="plain">-</span><span class="identifier">names</span><span class="plain">&gt;, </span><span class="constant">GE_RELATION_NAME</span><span class="plain">));</span>
<span class="identifier">R_numerically_less_than_or_equal_to</span><span class="plain"> =</span>
<span class="functiontext">BinaryPredicates::make_pair</span><span class="plain">(</span><span class="constant">QUASINUMERIC_KBP</span><span class="plain">,</span>
<span class="identifier">number_term</span><span class="plain">, </span><span class="identifier">number_term</span><span class="plain">,</span>
<span class="identifier">I</span><span class="string">"at-most"</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="functiontext">Calculus::Schemas::new</span><span class="plain">(</span><span class="string">"*1 &lt;= *2"</span><span class="plain">),</span>
<span class="identifier">Preform::Nonparsing::wording</span><span class="plain">(&lt;</span><span class="identifier">relation</span><span class="plain">-</span><span class="identifier">names</span><span class="plain">&gt;, </span><span class="constant">LE_RELATION_NAME</span><span class="plain">));</span>
<span class="functiontext">BinaryPredicates::set_index_details</span><span class="plain">(</span><span class="identifier">R_numerically_greater_than</span><span class="plain">,</span>
<span class="string">"arithmetic value"</span><span class="plain">, </span><span class="string">"arithmetic value"</span><span class="plain">);</span>
<span class="functiontext">BinaryPredicates::set_index_details</span><span class="plain">(</span><span class="identifier">R_numerically_less_than</span><span class="plain">,</span>
<span class="string">"arithmetic value"</span><span class="plain">, </span><span class="string">"arithmetic value"</span><span class="plain">);</span>
<span class="functiontext">BinaryPredicates::set_index_details</span><span class="plain">(</span><span class="identifier">R_numerically_greater_than_or_equal_to</span><span class="plain">,</span>
<span class="string">"arithmetic value"</span><span class="plain">, </span><span class="string">"arithmetic value"</span><span class="plain">);</span>
<span class="functiontext">BinaryPredicates::set_index_details</span><span class="plain">(</span><span class="identifier">R_numerically_less_than_or_equal_to</span><span class="plain">,</span>
<span class="string">"arithmetic value"</span><span class="plain">, </span><span class="string">"arithmetic value"</span><span class="plain">);</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">The function Calculus::QuasinumericRelations::REL_create_initial_stock is used in 6/bp (<a href="6-bp.html#SP45">&#167;45</a>).</p>
<p class="inwebparagraph"><a id="SP4"></a><b>&#167;4. Second stock. </b>There is none &mdash; this is a family of relations which is all built in.
</p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Calculus::QuasinumericRelations::REL_create_second_stock</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">The function Calculus::QuasinumericRelations::REL_create_second_stock is used in 6/bp (<a href="6-bp.html#SP46">&#167;46</a>).</p>
<p class="inwebparagraph"><a id="SP5"></a><b>&#167;5. Typechecking. </b></p>
<pre class="display">
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Calculus::QuasinumericRelations::REL_typecheck</span><span class="plain">(</span><span class="reserved">binary_predicate</span><span class="plain"> *</span><span class="identifier">bp</span><span class="plain">,</span>
<span class="identifier">kind</span><span class="plain"> **</span><span class="identifier">kinds_of_terms</span><span class="plain">, </span><span class="identifier">kind</span><span class="plain"> **</span><span class="identifier">kinds_required</span><span class="plain">, </span><span class="reserved">tc_problem_kit</span><span class="plain"> *</span><span class="identifier">tck</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">Kinds::Compare::compatible</span><span class="plain">(</span><span class="identifier">kinds_of_terms</span><span class="plain">[0], </span><span class="identifier">kinds_of_terms</span><span class="plain">[1]) == </span><span class="identifier">NEVER_MATCH</span><span class="plain">) &amp;&amp;</span>
<span class="plain">(</span><span class="identifier">Kinds::Compare::compatible</span><span class="plain">(</span><span class="identifier">kinds_of_terms</span><span class="plain">[1], </span><span class="identifier">kinds_of_terms</span><span class="plain">[0]) == </span><span class="identifier">NEVER_MATCH</span><span class="plain">)) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">tck</span><span class="plain">-</span><span class="element">&gt;log_to_I6_text</span><span class="plain">)</span>
<span class="identifier">LOG</span><span class="plain">(</span><span class="string">"Unable to apply inequality of $u and $u\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">kinds_of_terms</span><span class="plain">[0], </span><span class="identifier">kinds_of_terms</span><span class="plain">[1]);</span>
<span class="functiontext">Problems::quote_kind</span><span class="plain">(4, </span><span class="identifier">kinds_of_terms</span><span class="plain">[0]);</span>
<span class="functiontext">Problems::quote_kind</span><span class="plain">(5, </span><span class="identifier">kinds_of_terms</span><span class="plain">[1]);</span>
<span class="functiontext">Problems::Issue::tcp_problem</span><span class="plain">(</span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">PM_InequalityFailed</span><span class="plain">), </span><span class="identifier">tck</span><span class="plain">,</span>
<span class="string">"that would mean comparing two kinds of value which cannot mix - "</span>
<span class="string">"%4 and %5 - so this must be incorrect."</span><span class="plain">);</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">NEVER_MATCH</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">ALWAYS_MATCH</span><span class="plain">;</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">The function Calculus::QuasinumericRelations::REL_typecheck is used in 6/bp (<a href="6-bp.html#SP47">&#167;47</a>).</p>
<p class="inwebparagraph"><a id="SP6"></a><b>&#167;6. Assertion. </b>These relations cannot be asserted.
</p>
<pre class="display">
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Calculus::QuasinumericRelations::REL_assert</span><span class="plain">(</span><span class="reserved">binary_predicate</span><span class="plain"> *</span><span class="identifier">bp</span><span class="plain">,</span>
<span class="reserved">inference_subject</span><span class="plain"> *</span><span class="identifier">infs0</span><span class="plain">, </span><span class="identifier">parse_node</span><span class="plain"> *</span><span class="identifier">spec0</span><span class="plain">,</span>
<span class="reserved">inference_subject</span><span class="plain"> *</span><span class="identifier">infs1</span><span class="plain">, </span><span class="identifier">parse_node</span><span class="plain"> *</span><span class="identifier">spec1</span><span class="plain">) {</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">The function Calculus::QuasinumericRelations::REL_assert is used in 6/bp (<a href="6-bp.html#SP47">&#167;47</a>).</p>
<p class="inwebparagraph"><a id="SP7"></a><b>&#167;7. Compilation. </b>For integer arithmetic, we need do nothing special: these relations can be
compiled from their schemas. But real numbers have to be handled by a function
call in I6.
</p>
<pre class="display">
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Calculus::QuasinumericRelations::REL_compile</span><span class="plain">(</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">task</span><span class="plain">, </span><span class="reserved">binary_predicate</span><span class="plain"> *</span><span class="identifier">bp</span><span class="plain">, </span><span class="reserved">annotated_i6_schema</span><span class="plain"> *</span><span class="identifier">asch</span><span class="plain">) {</span>
<span class="identifier">kind</span><span class="plain"> *</span><span class="identifier">st</span><span class="plain">[2];</span>
<span class="identifier">st</span><span class="plain">[0] = </span><span class="functiontext">Calculus::Deferrals::Cinders::kind_of_value_of_term</span><span class="plain">(</span><span class="identifier">asch</span><span class="plain">-</span><span class="element">&gt;pt0</span><span class="plain">);</span>
<span class="identifier">st</span><span class="plain">[1] = </span><span class="functiontext">Calculus::Deferrals::Cinders::kind_of_value_of_term</span><span class="plain">(</span><span class="identifier">asch</span><span class="plain">-</span><span class="element">&gt;pt1</span><span class="plain">);</span>
<span class="reserved">switch</span><span class="plain"> (</span><span class="identifier">task</span><span class="plain">) {</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">TEST_ATOM_TASK</span><span class="plain">:</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">st</span><span class="plain">[0]) &amp;&amp; (</span><span class="identifier">st</span><span class="plain">[1])) {</span>
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">cr</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">promote_left</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">, </span><span class="identifier">promote_right</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">Kinds::FloatingPoint::uses_floating_point</span><span class="plain">(</span><span class="identifier">st</span><span class="plain">[0])) ||</span>
<span class="plain">(</span><span class="identifier">Kinds::FloatingPoint::uses_floating_point</span><span class="plain">(</span><span class="identifier">st</span><span class="plain">[1]))) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Kinds::FloatingPoint::uses_floating_point</span><span class="plain">(</span><span class="identifier">st</span><span class="plain">[0]) == </span><span class="identifier">FALSE</span><span class="plain">)</span>
<span class="identifier">promote_left</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Kinds::FloatingPoint::uses_floating_point</span><span class="plain">(</span><span class="identifier">st</span><span class="plain">[1]) == </span><span class="identifier">FALSE</span><span class="plain">)</span>
<span class="identifier">promote_right</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="identifier">cr</span><span class="plain"> = </span><span class="identifier">Kinds::Behaviour::get_comparison_routine</span><span class="plain">(</span><span class="identifier">K_real_number</span><span class="plain">);</span>
<span class="plain">} </span><span class="reserved">else</span>
<span class="identifier">cr</span><span class="plain"> = </span><span class="identifier">Kinds::Behaviour::get_comparison_routine</span><span class="plain">(</span><span class="identifier">st</span><span class="plain">[0]);</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">Str::len</span><span class="plain">(</span><span class="identifier">cr</span><span class="plain">) == 0) || (</span><span class="identifier">Str::eq_wide_string</span><span class="plain">(</span><span class="identifier">cr</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"signed"</span><span class="plain">))) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">promote_left</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">bp</span><span class="plain"> == </span><span class="identifier">R_numerically_greater_than</span><span class="plain">)</span>
<span class="functiontext">Calculus::Schemas::modify</span><span class="plain">(</span><span class="identifier">asch</span><span class="plain">-</span><span class="element">&gt;schema</span><span class="plain">, </span><span class="string">"*_2(NUMBER_TY_to_REAL_NUMBER_TY(*1), *2) &gt; 0"</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">bp</span><span class="plain"> == </span><span class="identifier">R_numerically_less_than</span><span class="plain">)</span>
<span class="functiontext">Calculus::Schemas::modify</span><span class="plain">(</span><span class="identifier">asch</span><span class="plain">-</span><span class="element">&gt;schema</span><span class="plain">, </span><span class="string">"*_2(NUMBER_TY_to_REAL_NUMBER_TY(*1), *2) &lt; 0"</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">bp</span><span class="plain"> == </span><span class="identifier">R_numerically_greater_than_or_equal_to</span><span class="plain">)</span>
<span class="functiontext">Calculus::Schemas::modify</span><span class="plain">(</span><span class="identifier">asch</span><span class="plain">-</span><span class="element">&gt;schema</span><span class="plain">, </span><span class="string">"*_2(NUMBER_TY_to_REAL_NUMBER_TY(*1), *2) &gt;= 0"</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">bp</span><span class="plain"> == </span><span class="identifier">R_numerically_less_than_or_equal_to</span><span class="plain">)</span>
<span class="functiontext">Calculus::Schemas::modify</span><span class="plain">(</span><span class="identifier">asch</span><span class="plain">-</span><span class="element">&gt;schema</span><span class="plain">, </span><span class="string">"*_2(NUMBER_TY_to_REAL_NUMBER_TY(*1), *2) &lt;= 0"</span><span class="plain">);</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">promote_right</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">bp</span><span class="plain"> == </span><span class="identifier">R_numerically_greater_than</span><span class="plain">)</span>
<span class="functiontext">Calculus::Schemas::modify</span><span class="plain">(</span><span class="identifier">asch</span><span class="plain">-</span><span class="element">&gt;schema</span><span class="plain">, </span><span class="string">"*_1(*1, NUMBER_TY_to_REAL_NUMBER_TY(*2)) &gt; 0"</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">bp</span><span class="plain"> == </span><span class="identifier">R_numerically_less_than</span><span class="plain">)</span>
<span class="functiontext">Calculus::Schemas::modify</span><span class="plain">(</span><span class="identifier">asch</span><span class="plain">-</span><span class="element">&gt;schema</span><span class="plain">, </span><span class="string">"*_1(*1, NUMBER_TY_to_REAL_NUMBER_TY(*2)) &lt; 0"</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">bp</span><span class="plain"> == </span><span class="identifier">R_numerically_greater_than_or_equal_to</span><span class="plain">)</span>
<span class="functiontext">Calculus::Schemas::modify</span><span class="plain">(</span><span class="identifier">asch</span><span class="plain">-</span><span class="element">&gt;schema</span><span class="plain">, </span><span class="string">"*_1(*1, NUMBER_TY_to_REAL_NUMBER_TY(*2)) &gt;= 0"</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">bp</span><span class="plain"> == </span><span class="identifier">R_numerically_less_than_or_equal_to</span><span class="plain">)</span>
<span class="functiontext">Calculus::Schemas::modify</span><span class="plain">(</span><span class="identifier">asch</span><span class="plain">-</span><span class="element">&gt;schema</span><span class="plain">, </span><span class="string">"*_1(*1, NUMBER_TY_to_REAL_NUMBER_TY(*2)) &lt;= 0"</span><span class="plain">);</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">bp</span><span class="plain"> == </span><span class="identifier">R_numerically_greater_than</span><span class="plain">)</span>
<span class="functiontext">Calculus::Schemas::modify</span><span class="plain">(</span><span class="identifier">asch</span><span class="plain">-</span><span class="element">&gt;schema</span><span class="plain">, </span><span class="string">"*_1(*1, *2) &gt; 0"</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">bp</span><span class="plain"> == </span><span class="identifier">R_numerically_less_than</span><span class="plain">)</span>
<span class="functiontext">Calculus::Schemas::modify</span><span class="plain">(</span><span class="identifier">asch</span><span class="plain">-</span><span class="element">&gt;schema</span><span class="plain">, </span><span class="string">"*_1(*1, *2) &lt; 0"</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">bp</span><span class="plain"> == </span><span class="identifier">R_numerically_greater_than_or_equal_to</span><span class="plain">)</span>
<span class="functiontext">Calculus::Schemas::modify</span><span class="plain">(</span><span class="identifier">asch</span><span class="plain">-</span><span class="element">&gt;schema</span><span class="plain">, </span><span class="string">"*_1(*1, *2) &gt;= 0"</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">bp</span><span class="plain"> == </span><span class="identifier">R_numerically_less_than_or_equal_to</span><span class="plain">)</span>
<span class="functiontext">Calculus::Schemas::modify</span><span class="plain">(</span><span class="identifier">asch</span><span class="plain">-</span><span class="element">&gt;schema</span><span class="plain">, </span><span class="string">"*_1(*1, *2) &lt;= 0"</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">problem_count</span><span class="plain"> == 0) {</span>
<span class="identifier">LOG</span><span class="plain">(</span><span class="string">"$0 and $0; $u and $u\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, &amp;(</span><span class="identifier">asch</span><span class="plain">-</span><span class="element">&gt;pt0</span><span class="plain">), &amp;(</span><span class="identifier">asch</span><span class="plain">-</span><span class="element">&gt;pt1</span><span class="plain">), </span><span class="identifier">st</span><span class="plain">[0], </span><span class="identifier">st</span><span class="plain">[1]);</span>
<span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"null kind in equality test"</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">The function Calculus::QuasinumericRelations::REL_compile is used in 6/bp (<a href="6-bp.html#SP47">&#167;47</a>).</p>
<p class="inwebparagraph"><a id="SP8"></a><b>&#167;8. Problem message text. </b></p>
<pre class="display">
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Calculus::QuasinumericRelations::REL_describe_for_problems</span><span class="plain">(</span><span class="identifier">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">binary_predicate</span><span class="plain"> *</span><span class="identifier">bp</span><span class="plain">) {</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">FALSE</span><span class="plain">;</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">The function Calculus::QuasinumericRelations::REL_describe_for_problems is used in 6/bp (<a href="6-bp.html#SP47">&#167;47</a>).</p>
<hr class="tocbar">
<ul class="toc"><li><a href="12-ter.html">Back to 'The Equality Relation'</a></li><li><a href="12-ap.html">Continue with 'Assert Propositions'</a></li></ul><hr class="tocbar">
<!--End of weave-->
</body>
</html>