# Author: Paul Fitzpatrick, paulfitz@ai.mit.edu
# Copyright (c) 2004 Paul Fitzpatrick
#
# This file is part of CosmicOS.
#
# CosmicOS is free software; you can redistribute it and / or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# CosmicOS is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with CosmicOS; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#
# MATH introduce numbers (in unary notation)
# Here we count up, then count down, then go through primes, etc.
# There is a bunch of syntax around the numbers, but that
# can just be treated as noise at this point - it doesn't matter.
# The key is to set up the structure of ';'-terminated sequences,
# and to introduce one simple representation of numbers.
# Symbols like intro and unary are encoded as binary numbers,
# which again can be treated as noise for now.
[hear] (intro / unary 0);
[hear] (intro / unary 1 0);
[hear] (intro / unary 1 1 0);
[hear] (intro / unary 1 1 1 0);
[hear] (intro / unary 1 1 1 1 0);
[hear] (intro / unary 1 1 1 1 1 0);
[hear] (intro / unary 1 1 1 1 1 1 0);
[hear] (intro / unary 1 1 1 1 1 1 1 0);
[hear] (intro / unary 1 1 1 1 1 1 1 1 0);
[hear] (intro / unary 1 1 1 1 1 1 1 1 1 0);
[hear] (intro / unary 1 1 1 1 1 1 1 1 1 1 0);
[hear] (intro / unary 1 1 1 1 1 1 1 1 1 1 1 0);
[hear] (intro / unary 1 1 1 1 1 1 1 1 1 1 1 1 0);
[hear] (intro / unary 1 1 1 1 1 1 1 1 1 1 1 1 1 0);
[hear] (intro / unary 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0);
[hear] (intro / unary 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0);
[hear] (intro / unary 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0);
[hear] (intro / unary 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0);
[hear] (intro / unary 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0);
[hear] (intro / unary 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0);
[hear] (intro / unary 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0);
[hear] (intro / unary 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0);
[hear] (intro / unary 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0);
[hear] (intro / unary 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0);
[hear] (intro / unary 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0);
[hear] (intro / unary 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0);
[hear] (intro / unary 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0);
[hear] (intro / unary 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0);
[hear] (intro / unary 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0);
[hear] (intro / unary 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0);
[hear] (intro / unary 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0);
[hear] (intro / unary 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0);
[hear] (intro / unary 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0);
[hear] (intro / unary 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0);
[hear] (intro / unary 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0);
[hear] (intro / unary 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0);
[hear] (intro / unary 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0);
[hear] (intro / unary 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0);
[hear] (intro / unary 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0);
[hear] (intro / unary 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0);
[hear] (intro / unary 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0);
[hear] (intro / unary 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0);
[hear] (intro / unary 1 1 1 1 1 1 1 1 1 1 1 1 1 0);
[hear] (intro / unary 1 1 1 1 1 1 1 1 1 1 1 1 0);
[hear] (intro / unary 1 1 1 1 1 1 1 1 1 1 1 0);
[hear] (intro / unary 1 1 1 1 1 1 1 1 1 1 0);
[hear] (intro / unary 1 1 1 1 1 1 1 1 1 0);
[hear] (intro / unary 1 1 1 1 1 1 1 1 0);
[hear] (intro / unary 1 1 1 1 1 1 1 0);
[hear] (intro / unary 1 1 1 1 1 1 0);
[hear] (intro / unary 1 1 1 1 1 0);
[hear] (intro / unary 1 1 1 1 0);
[hear] (intro / unary 1 1 1 0);
[hear] (intro / unary 1 1 0);
[hear] (intro / unary 1 0);
[hear] (intro / unary 0);
[hear] (intro / unary 0);
[hear] (intro / unary 1 0);
[hear] (intro / unary 1 1 0);
[hear] (intro / unary 1 1 1 0);
[hear] (intro / unary 1 1 1 1 1 0);
[hear] (intro / unary 1 1 1 1 1 1 1 0);
[hear] (intro / unary 1 1 1 1 1 1 1 1 1 1 1 0);
[hear] (intro / unary 1 1 1 1 1 1 1 1 1 1 1 1 1 0);
[hear] (intro / unary 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0);
[hear] (intro / unary 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0);
[hear] (intro / unary 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0);
[hear] (intro / unary 0);
[hear] (intro / unary 1 0);
[hear] (intro / unary 1 1 1 1 0);
[hear] (intro / unary 1 1 1 1 1 1 1 1 1 0);
[hear] (intro / unary 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0);
[hear] (intro / unary 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0);
[hear] (intro / unary 0);
[hear] (intro / unary 1 0);
[hear] (intro / unary 1 1 1 1 1 1 1 1 0);
[hear] (intro / unary 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0);
# MATH introduce equality for unary numbers
# The intro operator does nothing essential, and could be
# omitted - it just tags the first use of a new operator.
# The = operator is introduced alongside a duplication of
# unary numbers. The meaning will not quite by nailed down
# until we see other relational operators.
[hear] (intro =);
[hear] (= (unary 1 1 1 0) (unary 1 1 1 0));
[hear] (= (unary 1 1 1 1 1 1 1 1 1 0) (unary 1 1 1 1 1 1 1 1 1 0));
[hear] (= (unary 1 1 1 1 1 1 1 0) (unary 1 1 1 1 1 1 1 0));
[hear] (= (unary 1 1 1 1 1 1 0) (unary 1 1 1 1 1 1 0));
[hear] (= (unary 1 1 1 1 1 0) (unary 1 1 1 1 1 0));
# MATH now introduce other relational operators
# After this lesson, it should be clear what contexts
# < > and = are appropriate in.
[hear] (intro >);
[hear] (> (unary 1 1 1 1 0) (unary 0));
[hear] (> (unary 1 1 1 1 0) (unary 1 0));
[hear] (> (unary 1 1 1 0) (unary 0));
[hear] (> (unary 1 1 1 1 1 0) (unary 1 1 1 0));
[hear] (> (unary 1 1 0) (unary 0));
[hear] (> (unary 1 0) (unary 0));
[hear] (> (unary 1 1 0) (unary 0));
[hear] (> (unary 1 1 0) (unary 0));
[hear] (> (unary 1 1 1 0) (unary 0));
[hear] (> (unary 1 0) (unary 0));
[hear] (> (unary 1 1 1 1 1 0) (unary 1 1 0));
[hear] (intro <);
[hear] (< (unary 1 1 0) (unary 1 1 1 1 1 0));
[hear] (< (unary 0) (unary 1 1 0));
[hear] (< (unary 0) (unary 1 1 1 1 1 0));
[hear] (< (unary 1 0) (unary 1 1 1 0));
[hear] (< (unary 0) (unary 1 1 1 0));
[hear] (< (unary 1 0) (unary 1 1 1 0));
[hear] (< (unary 1 1 0) (unary 1 1 1 1 1 1 0));
[hear] (< (unary 0) (unary 1 0));
[hear] (< (unary 0) (unary 1 1 1 1 1 1 0));
[hear] (< (unary 0) (unary 1 1 1 1 1 1 0));
[hear] (< (unary 1 0) (unary 1 1 1 1 0));
# drive the lesson home
[hear] (= (unary 0) (unary 0));
[hear] (< (unary 0) (unary 1 0));
[hear] (< (unary 0) (unary 1 1 0));
[hear] (> (unary 1 0) (unary 0));
[hear] (= (unary 1 0) (unary 1 0));
[hear] (< (unary 1 0) (unary 1 1 0));
[hear] (> (unary 1 1 0) (unary 0));
[hear] (> (unary 1 1 0) (unary 1 0));
[hear] (= (unary 1 1 0) (unary 1 1 0));
[hear] (< (unary 1 0) (unary 1 1 1 1 1 0));
[hear] (< (unary 1 0) (unary 1 1 1 1 0));
[hear] (< (unary 0) (unary 1 0));
[hear] (> (unary 1 1 1 1 0) (unary 0));
[hear] (< (unary 1 1 0) (unary 1 1 1 0));
[hear] (> (unary 1 1 1 1 0) (unary 1 0));
[hear] (< (unary 0) (unary 1 1 1 1 1 0));
[hear] (> (unary 1 0) (unary 0));
[hear] (< (unary 1 0) (unary 1 1 1 1 0));
[hear] (> (unary 1 1 0) (unary 0));
[hear] (< (unary 1 0) (unary 1 1 0));
# SYNTAX introduce tail notation
# I've recently added the / symbol to reduce the need
# for unnecessary levels of nesting and parentheses.
# This might be a little early to talk about it, since it
# is most valuable for complex expressions.
[hear] (= (unary 1 1 0) (unary 1 1 0));
[hear] (= (unary 1 1 0) / unary 1 1 0);
[hear] (< (unary 1 1 0) (unary 1 1 1 1 0));
[hear] (< (unary 1 1 0) / unary 1 1 1 1 0);
[hear] (> (unary 1 1 0) (unary 1 0));
[hear] (> (unary 1 1 0) / unary 1 0);
# MATH introduce the NOT logical operator
[hear] (intro not);
[hear] (= (unary 1 1 1 1 0) (unary 1 1 1 1 0));
[hear] (not / < (unary 1 1 1 1 0) (unary 1 1 1 1 0));
[hear] (not / > (unary 1 1 1 1 0) (unary 1 1 1 1 0));
[hear] (= (unary 1 0) (unary 1 0));
[hear] (not / < (unary 1 0) (unary 1 0));
[hear] (not / > (unary 1 0) (unary 1 0));
[hear] (= (unary 1 1 1 1 1 0) (unary 1 1 1 1 1 0));
[hear] (not / < (unary 1 1 1 1 1 0) (unary 1 1 1 1 1 0));
[hear] (not / > (unary 1 1 1 1 1 0) (unary 1 1 1 1 1 0));
[hear] (= (unary 0) (unary 0));
[hear] (not / < (unary 0) (unary 0));
[hear] (not / > (unary 0) (unary 0));
[hear] (= (unary 1 1 1 1 1 0) (unary 1 1 1 1 1 0));
[hear] (not / < (unary 1 1 1 1 1 0) (unary 1 1 1 1 1 0));
[hear] (not / > (unary 1 1 1 1 1 0) (unary 1 1 1 1 1 0));
[hear] (= (unary 1 1 1 1 1 0) (unary 1 1 1 1 1 0));
[hear] (not / < (unary 1 1 1 1 1 0) (unary 1 1 1 1 1 0));
[hear] (not / > (unary 1 1 1 1 1 0) (unary 1 1 1 1 1 0));
[hear] (not / = (unary 0) (unary 1 0));
[hear] (< (unary 0) (unary 1 0));
[hear] (not / > (unary 0) (unary 1 0));
[hear] (not / = (unary 1 0) (unary 1 1 1 1 0));
[hear] (< (unary 1 0) (unary 1 1 1 1 0));
[hear] (not / > (unary 1 0) (unary 1 1 1 1 0));
[hear] (not / = (unary 1 1 0) (unary 1 1 1 1 0));
[hear] (< (unary 1 1 0) (unary 1 1 1 1 0));
[hear] (not / > (unary 1 1 0) (unary 1 1 1 1 0));
[hear] (not / = (unary 1 1 1 0) (unary 1 1 1 1 0));
[hear] (< (unary 1 1 1 0) (unary 1 1 1 1 0));
[hear] (not / > (unary 1 1 1 0) (unary 1 1 1 1 0));
[hear] (not / = (unary 1 1 1 1 1 0) (unary 1 1 1 1 1 1 1 0));
[hear] (< (unary 1 1 1 1 1 0) (unary 1 1 1 1 1 1 1 0));
[hear] (not / > (unary 1 1 1 1 1 0) (unary 1 1 1 1 1 1 1 0));
[hear] (not / = (unary 0) (unary 1 1 1 0));
[hear] (< (unary 0) (unary 1 1 1 0));
[hear] (not / > (unary 0) (unary 1 1 1 0));
[hear] (not / = (unary 1 1 1 1 1 1 0) (unary 1 1 1 1 1 0));
[hear] (> (unary 1 1 1 1 1 1 0) (unary 1 1 1 1 1 0));
[hear] (not / < (unary 1 1 1 1 1 1 0) (unary 1 1 1 1 1 0));
[hear] (not / = (unary 1 0) (unary 0));
[hear] (> (unary 1 0) (unary 0));
[hear] (not / < (unary 1 0) (unary 0));
[hear] (not / = (unary 1 1 1 1 1 1 0) (unary 1 1 1 1 0));
[hear] (> (unary 1 1 1 1 1 1 0) (unary 1 1 1 1 0));
[hear] (not / < (unary 1 1 1 1 1 1 0) (unary 1 1 1 1 0));
[hear] (not / = (unary 1 1 1 1 1 0) (unary 1 1 1 1 0));
[hear] (> (unary 1 1 1 1 1 0) (unary 1 1 1 1 0));
[hear] (not / < (unary 1 1 1 1 1 0) (unary 1 1 1 1 0));
[hear] (not / = (unary 1 1 1 1 0) (unary 1 1 0));
[hear] (> (unary 1 1 1 1 0) (unary 1 1 0));
[hear] (not / < (unary 1 1 1 1 0) (unary 1 1 0));
[hear] (not / = (unary 1 1 1 1 1 1 1 0) (unary 1 1 1 1 0));
[hear] (> (unary 1 1 1 1 1 1 1 0) (unary 1 1 1 1 0));
[hear] (not / < (unary 1 1 1 1 1 1 1 0) (unary 1 1 1 1 0));
# MATH introduce the AND logical operator
[hear] (intro and);
[hear] (and (> (unary 1 1 1 0) (unary 1 0)) (< (unary 1 0) (unary 1 1 1 0)));
[hear] (and (= (unary 1 0) (unary 1 0)) (= (unary 1 0) (unary 1 0)));
[hear] (and (> (unary 1 1 1 1 1 0) (unary 1 1 0)) (= (unary 1 0) (unary 1 0)));
[hear] (and (> (unary 1 1 1 1 1 0) (unary 1 1 0))
(> (unary 1 1 1 1 0) (unary 1 1 1 0)));
[hear] (and (> (unary 1 1 1 1 1 0) (unary 1 1 1 0)) (> (unary 1 1 1 0) (unary 1 0)));
[hear] (and (> (unary 1 1 1 0) (unary 1 0)) (< (unary 1 1 0) (unary 1 1 1 1 0)));
[hear] (and (> (unary 1 1 1 1 0) (unary 1 0))
(= (unary 1 1 1 1 0) (unary 1 1 1 1 0)));
[hear] (and (< (unary 1 0) (unary 1 1 0)) (= (unary 1 1 0) (unary 1 1 0)));
[hear] (and (< (unary 1 1 0) (unary 1 1 1 1 1 0)) (< (unary 0) (unary 1 1 0)));
[hear] (and (> (unary 1 1 1 1 1 1 0) (unary 1 1 1 1 1 0)) (= (unary 0) (unary 0)));
[hear] (not /
and (< (unary 1 1 1 1 1 0) (unary 1 1 1 1 1 1 1 0))
(= (unary 1 0) (unary 1 1 1 1 1 0)));
[hear] (not /
and (> (unary 1 1 1 1 0) (unary 1 1 0))
(= (unary 1 1 1 0) (unary 1 1 0)));
[hear] (not /
and (= (unary 1 1 1 0) (unary 1 1 1 0))
(> (unary 1 1 1 0) (unary 1 1 1 1 0)));
[hear] (not /
and (< (unary 1 1 0) (unary 1 1 1 1 0))
(> (unary 1 1 1 0) (unary 1 1 1 0)));
[hear] (not /
and (= (unary 1 1 1 1 0) (unary 1 1 1 1 0))
(= (unary 1 1 0) (unary 1 1 1 1 1 0)));
[hear] (not / and (= (unary 1 1 1 0) (unary 1 1 0)) (< (unary 0) (unary 1 1 1 0)));
[hear] (not /
and (= (unary 1 1 1 1 1 0) (unary 1 1 1 1 0))
(< (unary 1 1 1 1 0) (unary 1 1 1 1 1 1 1 0)));
[hear] (not / and (< (unary 1 1 1 1 1 0) (unary 1 0)) (= (unary 1 0) (unary 1 0)));
[hear] (not / and (> (unary 0) (unary 1 1 0)) (< (unary 1 0) (unary 1 1 1 1 0)));
[hear] (not /
and (> (unary 1 1 1 1 0) (unary 1 1 1 1 1 0))
(> (unary 1 1 1 1 0) (unary 1 1 0)));
[hear] (not / and (< (unary 1 1 1 1 0) (unary 1 0)) (> (unary 1 0) (unary 1 1 0)));
[hear] (not /
and (< (unary 1 1 1 1 1 1 0) (unary 1 1 1 1 0))
(> (unary 0) (unary 1 1 0)));
[hear] (not /
and (= (unary 1 1 1 1 1 0) (unary 1 0))
(= (unary 1 1 1 1 1 0) (unary 1 1 1 1 1 1 0)));
[hear] (not /
and (= (unary 1 1 1 1 1 0) (unary 1 1 1 0))
(< (unary 1 1 1 1 1 1 0) (unary 1 1 1 1 0)));
[hear] (not /
and (< (unary 1 1 0) (unary 0)) (= (unary 1 1 1 0) (unary 1 1 1 1 0)));
[hear] (not /
and (= (unary 0) (unary 1 0)) (< (unary 1 1 1 1 1 1 0) (unary 1 1 0)));
[hear] (and (< (unary 0) (unary 1 1 1 0)) (= (unary 1 1 1 0) (unary 1 1 1 0)));
[hear] (not /
and (> (unary 1 1 1 1 0) (unary 1 1 1 1 0))
(< (unary 1 1 0) (unary 0)));
[hear] (not /
and (= (unary 1 1 0) (unary 1 1 1 0))
(> (unary 1 1 1 1 1 0) (unary 1 1 1 1 1 1 0)));
[hear] (and (= (unary 1 1 1 1 1 0) (unary 1 1 1 1 1 0))
(< (unary 1 1 1 1 0) (unary 1 1 1 1 1 1 0)));
[hear] (and (< (unary 1 0) (unary 1 1 1 1 0))
(< (unary 1 1 1 1 0) (unary 1 1 1 1 1 1 0)));
[hear] (not /
and (> (unary 1 1 1 1 1 1 0) (unary 1 1 1 1 1 1 0))
(> (unary 1 1 1 0) (unary 1 0)));
[hear] (not /
and (< (unary 1 1 1 1 1 1 0) (unary 1 1 1 1 0))
(= (unary 1 1 0) (unary 1 1 1 0)));
[hear] (and (> (unary 1 1 1 1 1 1 0) (unary 1 1 1 0))
(< (unary 1 1 1 1 0) (unary 1 1 1 1 1 0)));
[hear] (not /
and (= (unary 0) (unary 1 1 1 0)) (= (unary 1 1 1 1 1 0) (unary 1 0)));
# MATH introduce the OR logical operator
[hear] (intro or);
[hear] (or (= (unary 1 1 1 1 1 0) (unary 1 1 1 1 1 0)) (= (unary 1 0) (unary 1 0)));
[hear] (or (< (unary 1 1 0) (unary 1 1 1 1 0))
(= (unary 1 1 1 1 1 0) (unary 1 1 1 1 1 0)));
[hear] (or (< (unary 1 1 1 1 0) (unary 1 1 1 1 1 1 0)) (= (unary 1 0) (unary 1 0)));
[hear] (or (> (unary 1 1 0) (unary 1 0)) (> (unary 1 1 1 1 0) (unary 1 1 0)));
[hear] (or (> (unary 1 1 1 0) (unary 0)) (< (unary 1 1 1 0) (unary 1 1 1 1 0)));
[hear] (or (= (unary 1 1 1 1 0) (unary 1 1 1 1 0)) (< (unary 1 0) (unary 1 1 1 0)));
[hear] (or (< (unary 1 1 1 1 1 0) (unary 1 1 1 1 1 1 1 0))
(< (unary 1 1 1 1 0) (unary 1 1 1 1 1 1 0)));
[hear] (or (< (unary 0) (unary 1 0)) (= (unary 1 1 1 1 0) (unary 1 1 1 1 0)));
[hear] (or (< (unary 1 1 1 1 0) (unary 1 1 1 1 1 1 1 0))
(< (unary 1 1 1 1 0) (unary 1 1 1 1 1 0)));
[hear] (or (= (unary 1 0) (unary 1 0)) (< (unary 0) (unary 1 0)));
[hear] (or (= (unary 1 1 1 1 1 0) (unary 1 1 1 1 1 0))
(> (unary 1 1 1 1 1 1 0) (unary 1 1 1 1 1 1 0)));
[hear] (or (> (unary 1 1 1 1 1 1 0) (unary 1 1 1 1 0)) (= (unary 1 1 0) (unary 0)));
[hear] (or (< (unary 1 1 1 0) (unary 1 1 1 1 1 1 0))
(> (unary 1 1 0) (unary 1 1 1 1 1 0)));
[hear] (or (> (unary 1 1 1 1 0) (unary 1 1 1 0))
(> (unary 1 1 1 1 1 0) (unary 1 1 1 1 1 0)));
[hear] (or (= (unary 1 0) (unary 1 0)) (= (unary 1 1 1 0) (unary 1 1 0)));
[hear] (or (< (unary 1 0) (unary 0)) (= (unary 1 1 0) (unary 1 1 0)));
[hear] (or (< (unary 1 1 1 0) (unary 1 0)) (= (unary 0) (unary 0)));
[hear] (or (> (unary 1 1 0) (unary 1 1 1 1 1 0))
(> (unary 1 1 1 1 0) (unary 1 1 0)));
[hear] (or (> (unary 1 1 1 0) (unary 1 1 1 1 1 0)) (= (unary 1 1 0) (unary 1 1 0)));
[hear] (or (> (unary 1 1 1 1 1 0) (unary 1 1 1 1 1 0))
(= (unary 1 1 1 1 1 0) (unary 1 1 1 1 1 0)));
[hear] (not / or (= (unary 1 0) (unary 1 1 1 0)) (= (unary 1 0) (unary 0)));
[hear] (not / or (> (unary 1 0) (unary 1 1 0)) (> (unary 1 0) (unary 1 1 1 1 0)));
[hear] (not /
or (= (unary 1 1 1 0) (unary 1 1 1 1 0))
(> (unary 1 0) (unary 1 1 1 1 0)));
[hear] (not / or (> (unary 0) (unary 1 1 1 1 0)) (= (unary 1 0) (unary 0)));
[hear] (not /
or (< (unary 1 1 1 1 0) (unary 1 0))
(< (unary 1 1 1 1 1 1 0) (unary 1 1 0)));
[hear] (not /
or (> (unary 1 1 1 1 0) (unary 1 1 1 1 1 1 0))
(= (unary 1 0) (unary 1 1 1 0)));
[hear] (or (> (unary 1 0) (unary 0)) (< (unary 1 1 1 1 0) (unary 1 1 1 1 1 0)));
[hear] (or (> (unary 1 0) (unary 0)) (= (unary 1 1 1 1 1 1 0) (unary 1 1 1 1 1 0)));
[hear] (or (> (unary 0) (unary 1 1 0)) (= (unary 1 1 1 1 1 0) (unary 1 1 1 1 1 0)));
[hear] (or (> (unary 1 1 0) (unary 1 1 1 1 0))
(< (unary 1 1 1 0) (unary 1 1 1 1 0)));
[hear] (not /
or (= (unary 1 0) (unary 1 1 0)) (= (unary 1 1 0) (unary 1 1 1 1 0)));
[hear] (or (= (unary 1 1 1 0) (unary 1 1 1 1 0))
(> (unary 1 1 1 1 1 0) (unary 1 1 0)));
[hear] (not /
or (> (unary 1 0) (unary 1 1 1 1 1 1 0))
(< (unary 1 1 1 1 1 0) (unary 0)));
[hear] (or (< (unary 1 0) (unary 1 1 1 1 0)) (< (unary 1 1 1 0) (unary 0)));
[hear] (or (= (unary 1 1 1 0) (unary 1 1 1 0)) (> (unary 1 1 0) (unary 1 1 1 0)));
# MATH use equality for truth values
[hear] (= (= (unary 1 1 1 1 0) (unary 1 1 1 1 0))
(< (unary 1 1 0) (unary 1 1 1 1 1 0)));
[hear] (= (= (unary 1 0) (unary 1 0)) (< (unary 1 1 1 0) (unary 1 1 1 1 0)));
[hear] (= (= (unary 1 0) (unary 1 0)) (> (unary 1 1 1 0) (unary 1 1 0)));
[hear] (= (< (unary 1 1 0) (unary 1 1 1 0))
(< (unary 1 1 1 1 1 0) (unary 1 1 1 1 1 1 1 1 0)));
[hear] (= (= (unary 1 1 1 1 0) (unary 1 1 1 1 0))
(< (unary 1 1 1 1 1 0) (unary 1 1 1 1 1 1 0)));
[hear] (= (= (unary 1 1 1 0) (unary 0))
(> (unary 1 1 1 1 1 1 0) (unary 1 1 1 1 1 1 0)));
[hear] (= (= (unary 1 1 1 1 0) (unary 1 1 1 1 1 0))
(> (unary 0) (unary 1 1 1 1 1 0)));
[hear] (= (= (unary 1 1 1 0) (unary 1 0)) (= (unary 1 1 0) (unary 1 1 1 0)));
[hear] (= (> (unary 1 1 1 0) (unary 1 1 1 1 0)) (> (unary 0) (unary 1 1 0)));
[hear] (= (= (unary 1 1 1 1 1 0) (unary 0)) (> (unary 1 0) (unary 1 1 1 1 1 1 0)));
[hear] (not / = (> (unary 0) (unary 1 1 1 1 1 1 0)) (= (unary 1 0) (unary 1 0)));
[hear] (not / = (> (unary 1 1 0) (unary 1 1 1 0)) (= (unary 0) (unary 0)));
[hear] (not /
= (= (unary 1 1 1 1 0) (unary 1 1 1 1 1 0))
(< (unary 1 0) (unary 1 1 1 1 0)));
[hear] (not / = (< (unary 1 1 1 1 1 1 0) (unary 1 1 1 0)) (= (unary 0) (unary 0)));
[hear] (not / = (= (unary 0) (unary 1 1 1 1 0)) (= (unary 1 1 0) (unary 1 1 0)));
[hear] (not /
= (< (unary 1 1 1 1 0) (unary 1 1 1 1 1 1 0))