init commit again

This commit is contained in:
Peter
2023-11-01 09:29:33 +01:00
parent 448147e7da
commit d6c745207b
250 changed files with 15552 additions and 1 deletions

View File

@@ -0,0 +1,87 @@
### Booleans
[
Datatype booleans Alias bools
Funcon true
Funcon false
Funcon not
Funcon implies
Funcon and
Funcon or
Funcon exclusive-or Alias xor
]
Datatype
booleans ::= true | false
Alias
bools = booleans
Funcon
not(_:booleans) : =>booleans
/*
`not(B)` is logical negation.
*/
Rule
not(false) ~> true
Rule
not(true) ~> false
Funcon
implies(_:booleans, _:booleans) : =>booleans
/*
`implies(B1, B2)` is logical implication.
*/
Rule
implies(false, false) ~> true
Rule
implies(false, true) ~> true
Rule
implies(true, true) ~> true
Rule
implies(true, false) ~> false
Funcon
and(_:booleans*) : =>booleans
/*
`and(B, ...)` is logical conjunction of any number of Boolean values.
*/
Rule
and( ) ~> true
Rule
and(false, _*:booleans*) ~> false
Rule
and(true, B*:booleans*) ~> and(B*)
Funcon
or(_:booleans*) : =>booleans
/*
`or(B, ...)` is logical disjunction of any number of Boolean values.
*/
Rule
or( ) ~> false
Rule
or(true, _*:booleans*) ~> true
Rule
or(false, B*:booleans*) ~> or(B*)
Funcon
exclusive-or(_:booleans, _:booleans) : =>booleans
Alias
xor = exclusive-or
/*
`exclusive-or(B1, B2)` is exclusive disjunction.
*/
Rule
exclusive-or(false, false) ~> false
Rule
exclusive-or(false, true) ~> true
Rule
exclusive-or(true, false) ~> true
Rule
exclusive-or(true, true) ~> false

View File

@@ -0,0 +1,128 @@
---
layout: default
title: "Booleans"
parent: Primitive
ancestor: Funcons-beta
---
[Funcons-beta] : [Booleans.cbs]
-----------------------------
### Booleans
<div class="highlighter-rouge"><pre class="highlight"><code>[
<i class="keyword">Datatype</i> <span class="name"><a href="#Name_booleans">booleans</a></span> <i class="keyword">Alias</i> <span class="name"><a href="#Name_bools">bools</a></span>
<i class="keyword">Funcon</i> <span class="name"><a href="#Name_true">true</a></span>
<i class="keyword">Funcon</i> <span class="name"><a href="#Name_false">false</a></span>
<i class="keyword">Funcon</i> <span class="name"><a href="#Name_not">not</a></span>
<i class="keyword">Funcon</i> <span class="name"><a href="#Name_implies">implies</a></span>
<i class="keyword">Funcon</i> <span class="name"><a href="#Name_and">and</a></span>
<i class="keyword">Funcon</i> <span class="name"><a href="#Name_or">or</a></span>
<i class="keyword">Funcon</i> <span class="name"><a href="#Name_exclusive-or">exclusive-or</a></span> <i class="keyword">Alias</i> <span class="name"><a href="#Name_xor">xor</a></span>
]</code></pre></div>
<div class="highlighter-rouge"><pre class="highlight"><code><i class="keyword">Datatype</i>
<span class="name"><span id="Name_booleans">booleans</span></span> ::= <span id="Name_true">true</span> | <span id="Name_false">false</span>
<i class="keyword">Alias</i>
<span class="name"><span id="Name_bools">bools</span></span> = <span class="name"><a href="#Name_booleans">booleans</a></span></code></pre></div>
<div class="highlighter-rouge"><pre class="highlight"><code><i class="keyword">Funcon</i>
<span class="name"><span id="Name_not">not</span></span>(_:<span class="name"><a href="#Name_booleans">booleans</a></span>) : =><span class="name"><a href="#Name_booleans">booleans</a></span></code></pre></div>
<code><span class="name"><a href="#Name_not">not</a></span>(<i class="var">B</i>)</code> is logical negation.
<div class="highlighter-rouge"><pre class="highlight"><code><i class="keyword">Rule</i>
<span class="name"><a href="#Name_not">not</a></span>(<span class="name"><a href="#Name_false">false</a></span>) ~> <span class="name"><a href="#Name_true">true</a></span>
<i class="keyword">Rule</i>
<span class="name"><a href="#Name_not">not</a></span>(<span class="name"><a href="#Name_true">true</a></span>) ~> <span class="name"><a href="#Name_false">false</a></span></code></pre></div>
<div class="highlighter-rouge"><pre class="highlight"><code><i class="keyword">Funcon</i>
<span class="name"><span id="Name_implies">implies</span></span>(_:<span class="name"><a href="#Name_booleans">booleans</a></span>, _:<span class="name"><a href="#Name_booleans">booleans</a></span>) : =><span class="name"><a href="#Name_booleans">booleans</a></span></code></pre></div>
<code><span class="name"><a href="#Name_implies">implies</a></span>(<i class="var">B<sub class="sub">1</sub></i>, <i class="var">B<sub class="sub">2</sub></i>)</code> is logical implication.
<div class="highlighter-rouge"><pre class="highlight"><code><i class="keyword">Rule</i>
<span class="name"><a href="#Name_implies">implies</a></span>(<span class="name"><a href="#Name_false">false</a></span>, <span class="name"><a href="#Name_false">false</a></span>) ~> <span class="name"><a href="#Name_true">true</a></span>
<i class="keyword">Rule</i>
<span class="name"><a href="#Name_implies">implies</a></span>(<span class="name"><a href="#Name_false">false</a></span>, <span class="name"><a href="#Name_true">true</a></span>) ~> <span class="name"><a href="#Name_true">true</a></span>
<i class="keyword">Rule</i>
<span class="name"><a href="#Name_implies">implies</a></span>(<span class="name"><a href="#Name_true">true</a></span>, <span class="name"><a href="#Name_true">true</a></span>) ~> <span class="name"><a href="#Name_true">true</a></span>
<i class="keyword">Rule</i>
<span class="name"><a href="#Name_implies">implies</a></span>(<span class="name"><a href="#Name_true">true</a></span>, <span class="name"><a href="#Name_false">false</a></span>) ~> <span class="name"><a href="#Name_false">false</a></span></code></pre></div>
<div class="highlighter-rouge"><pre class="highlight"><code><i class="keyword">Funcon</i>
<span class="name"><span id="Name_and">and</span></span>(_:<span class="name"><a href="#Name_booleans">booleans</a></span><sup class="sup">*</sup>) : =><span class="name"><a href="#Name_booleans">booleans</a></span></code></pre></div>
<code><span class="name"><a href="#Name_and">and</a></span>(<i class="var">B</i>, ...)</code> is logical conjunction of any number of Boolean values.
<div class="highlighter-rouge"><pre class="highlight"><code><i class="keyword">Rule</i>
<span class="name"><a href="#Name_and">and</a></span>( ) ~> <span class="name"><a href="#Name_true">true</a></span>
<i class="keyword">Rule</i>
<span class="name"><a href="#Name_and">and</a></span>(<span class="name"><a href="#Name_false">false</a></span>, _*:<span class="name"><a href="#Name_booleans">booleans</a></span><sup class="sup">*</sup>) ~> <span class="name"><a href="#Name_false">false</a></span>
<i class="keyword">Rule</i>
<span class="name"><a href="#Name_and">and</a></span>(<span class="name"><a href="#Name_true">true</a></span>, <span id="Variable369_B*"><i class="var">B<sup class="sup">*</sup></i></span>:<span class="name"><a href="#Name_booleans">booleans</a></span><sup class="sup">*</sup>) ~> <span class="name"><a href="#Name_and">and</a></span>(<a href="#Variable369_B*"><i class="var">B<sup class="sup">*</sup></i></a>)</code></pre></div>
<div class="highlighter-rouge"><pre class="highlight"><code><i class="keyword">Funcon</i>
<span class="name"><span id="Name_or">or</span></span>(_:<span class="name"><a href="#Name_booleans">booleans</a></span><sup class="sup">*</sup>) : =><span class="name"><a href="#Name_booleans">booleans</a></span></code></pre></div>
<code><span class="name"><a href="#Name_or">or</a></span>(<i class="var">B</i>, ...)</code> is logical disjunction of any number of Boolean values.
<div class="highlighter-rouge"><pre class="highlight"><code><i class="keyword">Rule</i>
<span class="name"><a href="#Name_or">or</a></span>( ) ~> <span class="name"><a href="#Name_false">false</a></span>
<i class="keyword">Rule</i>
<span class="name"><a href="#Name_or">or</a></span>(<span class="name"><a href="#Name_true">true</a></span>, _*:<span class="name"><a href="#Name_booleans">booleans</a></span><sup class="sup">*</sup>) ~> <span class="name"><a href="#Name_true">true</a></span>
<i class="keyword">Rule</i>
<span class="name"><a href="#Name_or">or</a></span>(<span class="name"><a href="#Name_false">false</a></span>, <span id="Variable494_B*"><i class="var">B<sup class="sup">*</sup></i></span>:<span class="name"><a href="#Name_booleans">booleans</a></span><sup class="sup">*</sup>) ~> <span class="name"><a href="#Name_or">or</a></span>(<a href="#Variable494_B*"><i class="var">B<sup class="sup">*</sup></i></a>)</code></pre></div>
<div class="highlighter-rouge"><pre class="highlight"><code><i class="keyword">Funcon</i>
<span class="name"><span id="Name_exclusive-or">exclusive-or</span></span>(_:<span class="name"><a href="#Name_booleans">booleans</a></span>, _:<span class="name"><a href="#Name_booleans">booleans</a></span>) : =><span class="name"><a href="#Name_booleans">booleans</a></span>
<i class="keyword">Alias</i>
<span class="name"><span id="Name_xor">xor</span></span> = <span class="name"><a href="#Name_exclusive-or">exclusive-or</a></span></code></pre></div>
<code><span class="name"><a href="#Name_exclusive-or">exclusive-or</a></span>(<i class="var">B<sub class="sub">1</sub></i>, <i class="var">B<sub class="sub">2</sub></i>)</code> is exclusive disjunction.
<div class="highlighter-rouge"><pre class="highlight"><code><i class="keyword">Rule</i>
<span class="name"><a href="#Name_exclusive-or">exclusive-or</a></span>(<span class="name"><a href="#Name_false">false</a></span>, <span class="name"><a href="#Name_false">false</a></span>) ~> <span class="name"><a href="#Name_false">false</a></span>
<i class="keyword">Rule</i>
<span class="name"><a href="#Name_exclusive-or">exclusive-or</a></span>(<span class="name"><a href="#Name_false">false</a></span>, <span class="name"><a href="#Name_true">true</a></span>) ~> <span class="name"><a href="#Name_true">true</a></span>
<i class="keyword">Rule</i>
<span class="name"><a href="#Name_exclusive-or">exclusive-or</a></span>(<span class="name"><a href="#Name_true">true</a></span>, <span class="name"><a href="#Name_false">false</a></span>) ~> <span class="name"><a href="#Name_true">true</a></span>
<i class="keyword">Rule</i>
<span class="name"><a href="#Name_exclusive-or">exclusive-or</a></span>(<span class="name"><a href="#Name_true">true</a></span>, <span class="name"><a href="#Name_true">true</a></span>) ~> <span class="name"><a href="#Name_false">false</a></span></code></pre></div>
____
From the [PLanCompS Project] | [CBS-beta issues...] | [Suggest an improvement...]
[Booleans.cbs]: Booleans.cbs
"CBS SOURCE FILE"
[Funcons-beta]: /CBS-beta/docs/Funcons-beta
"FUNCONS-BETA"
[Unstable-Funcons-beta]: /CBS-beta/docs/Unstable-Funcons-beta
"UNSTABLE-FUNCONS-BETA"
[Languages-beta]: /CBS-beta/docs/Languages-beta
"LANGUAGES-BETA"
[Unstable-Languages-beta]: /CBS-beta/docs/Unstable-Languages-beta
"UNSTABLE-LANGUAGES-BETA"
[CBS-beta]: /CBS-beta "CBS-BETA"
[PLanCompS Project]: https://plancomps.github.io
"PROGRAMMING LANGUAGE COMPONENTS AND SPECIFICATIONS PROJECT HOME PAGE"
[CBS-beta issues...]: https://github.com/plancomps/CBS-beta/issues
"CBS-BETA ISSUE REPORTS ON GITHUB"
[Suggest an improvement...]: mailto:plancomps@gmail.com?Subject=CBS-beta%20-%20comment&Body=Re%3A%20CBS-beta%20specification%20at%20Values/Primitive/Booleans/Booleans.cbs%0A%0AComment/Query/Issue/Suggestion%3A%0A%0A%0ASignature%3A%0A
"GENERATE AN EMAIL TEMPLATE"

View File

@@ -0,0 +1,20 @@
general {
funcon-term: sequential (
check-true(and( ))
, check-true(and(true))
, check-true(and(true,true))
, check-true(and(true,true,true))
, check-true(not and(false))
, check-true(not and(false,true))
, check-true(not and(true,false))
, check-true(not and(false,true,true))
, check-true(not and(true,true,false))
, check-true(not and(true,true,false,true))
, print "OK"
);
}
tests {
result-term : null-value;
standard-out : ["OK"];
}

View File

@@ -0,0 +1,14 @@
general {
funcon-term: sequential (
check-true(exclusive-or(false, true))
, check-true(exclusive-or(true, false))
, check-true(not exclusive-or(false, false))
, check-true(not exclusive-or(true, true))
, print "OK"
);
}
tests {
result-term : null-value;
standard-out : ["OK"];
}

View File

@@ -0,0 +1,14 @@
general {
funcon-term: sequential (
check-true(implies(false, false))
, check-true(implies(false, true))
, check-true(implies(true, true))
, check-true(not implies(true, false))
, print "OK"
);
}
tests {
result-term : null-value;
standard-out : ["OK"];
}

View File

@@ -0,0 +1,12 @@
general {
funcon-term: sequential (
check-true(is-equal(not false, true))
, check-true(is-equal(not true, false))
, print "OK"
);
}
tests {
result-term : null-value;
standard-out : ["OK"];
}

View File

@@ -0,0 +1,17 @@
general {
funcon-term: sequential (
check-true(or(true))
, check-true(or(true, false))
, check-true(or(false, true))
, check-true(or(false, false, true))
, check-true(or(false, false, true, false))
, check-true(not or( ))
, check-true(not or(false))
, print "OK"
);
}
tests {
result-term : null-value;
standard-out : ["OK"];
}