sp {arithmetic*propose*generate-facts
   (state <s> ^name arithmetic
             -^arithmetic.facts)
-->
   (<s> ^operator <op> + =, >)
   (<op> ^name generate-facts)
}

# comment out this rule (and all smem add commands
# in _firstload) to have a sub-goal store all these
# facts using rules
sp {arithmetic*apply*generate-facts*smem
   (state <s> ^operator.name generate-facts
              ^fact-source smem)
-->
   (<s> ^arithmetic.facts preloaded)
}

sp {arithmetic*apply*generate-facts*add*sub
   (state <s> ^operator.name generate-facts
              ^fact-source wm)
-->
   (<s> ^arithmetic.facts
                          <a01> <a02> <a03> <a04> <a05> <a06> <a07> <a08> <a09> <a00>
                          <a11> <a12> <a13> <a14> <a15> <a16> <a17> <a18> <a19> <a10>
                          <a21> <a22> <a23> <a24> <a25> <a26> <a27> <a28> <a29> <a20>
                          <a31> <a32> <a33> <a34> <a35> <a36> <a37> <a38> <a39> <a30>
                          <a41> <a42> <a43> <a44> <a45> <a46> <a47> <a48> <a49> <a40>
                          <a51> <a52> <a53> <a54> <a55> <a56> <a57> <a58> <a59> <a50>
                          <a61> <a62> <a63> <a64> <a65> <a66> <a67> <a68> <a69> <a60>
                          <a71> <a72> <a73> <a74> <a75> <a76> <a77> <a78> <a79> <a70>
                          <a81> <a82> <a83> <a84> <a85> <a86> <a87> <a88> <a89> <a80>
                          <a91> <a92> <a93> <a94> <a95> <a96> <a97> <a98> <a99> <a90>)
   (<a00> ^digit1 0 ^digit2 0 ^sum 0 ^carry-borrow 0)
   (<a01> ^digit1 0 ^digit2 1 ^sum 1 ^carry-borrow 0)
   (<a02> ^digit1 0 ^digit2 2 ^sum 2 ^carry-borrow 0)
   (<a03> ^digit1 0 ^digit2 3 ^sum 3 ^carry-borrow 0)
   (<a04> ^digit1 0 ^digit2 4 ^sum 4 ^carry-borrow 0)
   (<a05> ^digit1 0 ^digit2 5 ^sum 5 ^carry-borrow 0)
   (<a06> ^digit1 0 ^digit2 6 ^sum 6 ^carry-borrow 0)
   (<a07> ^digit1 0 ^digit2 7 ^sum 7 ^carry-borrow 0)
   (<a08> ^digit1 0 ^digit2 8 ^sum 8 ^carry-borrow 0)
   (<a09> ^digit1 0 ^digit2 9 ^sum 9 ^carry-borrow 0)
   (<a10> ^digit1 1 ^digit2 0 ^sum 1 ^carry-borrow 0)
   (<a11> ^digit1 1 ^digit2 1 ^sum 2 ^carry-borrow 0)
   (<a12> ^digit1 1 ^digit2 2 ^sum 3 ^carry-borrow 0)
   (<a13> ^digit1 1 ^digit2 3 ^sum 4 ^carry-borrow 0)
   (<a14> ^digit1 1 ^digit2 4 ^sum 5 ^carry-borrow 0)
   (<a15> ^digit1 1 ^digit2 5 ^sum 6 ^carry-borrow 0)
   (<a16> ^digit1 1 ^digit2 6 ^sum 7 ^carry-borrow 0)
   (<a17> ^digit1 1 ^digit2 7 ^sum 8 ^carry-borrow 0)
   (<a18> ^digit1 1 ^digit2 8 ^sum 9 ^carry-borrow 0)
   (<a19> ^digit1 1 ^digit2 9 ^sum 0 ^carry-borrow 1)
   (<a20> ^digit1 2 ^digit2 0 ^sum 2 ^carry-borrow 0)
   (<a21> ^digit1 2 ^digit2 1 ^sum 3 ^carry-borrow 0)
   (<a22> ^digit1 2 ^digit2 2 ^sum 4 ^carry-borrow 0)
   (<a23> ^digit1 2 ^digit2 3 ^sum 5 ^carry-borrow 0)
   (<a24> ^digit1 2 ^digit2 4 ^sum 6 ^carry-borrow 0)
   (<a25> ^digit1 2 ^digit2 5 ^sum 7 ^carry-borrow 0)
   (<a26> ^digit1 2 ^digit2 6 ^sum 8 ^carry-borrow 0)
   (<a27> ^digit1 2 ^digit2 7 ^sum 9 ^carry-borrow 0)
   (<a28> ^digit1 2 ^digit2 8 ^sum 0 ^carry-borrow 1)
   (<a29> ^digit1 2 ^digit2 9 ^sum 1 ^carry-borrow 1)
   (<a30> ^digit1 3 ^digit2 0 ^sum 3 ^carry-borrow 0)
   (<a31> ^digit1 3 ^digit2 1 ^sum 4 ^carry-borrow 0)
   (<a32> ^digit1 3 ^digit2 2 ^sum 5 ^carry-borrow 0)
   (<a33> ^digit1 3 ^digit2 3 ^sum 6 ^carry-borrow 0)
   (<a34> ^digit1 3 ^digit2 4 ^sum 7 ^carry-borrow 0)
   (<a35> ^digit1 3 ^digit2 5 ^sum 8 ^carry-borrow 0)
   (<a36> ^digit1 3 ^digit2 6 ^sum 9 ^carry-borrow 0)
   (<a37> ^digit1 3 ^digit2 7 ^sum 0 ^carry-borrow 1)
   (<a38> ^digit1 3 ^digit2 8 ^sum 1 ^carry-borrow 1)
   (<a39> ^digit1 3 ^digit2 9 ^sum 2 ^carry-borrow 1)
   (<a40> ^digit1 4 ^digit2 0 ^sum 4 ^carry-borrow 0)
   (<a41> ^digit1 4 ^digit2 1 ^sum 5 ^carry-borrow 0)
   (<a42> ^digit1 4 ^digit2 2 ^sum 6 ^carry-borrow 0)
   (<a43> ^digit1 4 ^digit2 3 ^sum 7 ^carry-borrow 0)
   (<a44> ^digit1 4 ^digit2 4 ^sum 8 ^carry-borrow 0)
   (<a45> ^digit1 4 ^digit2 5 ^sum 9 ^carry-borrow 0)
   (<a46> ^digit1 4 ^digit2 6 ^sum 0 ^carry-borrow 1)
   (<a47> ^digit1 4 ^digit2 7 ^sum 1 ^carry-borrow 1)
   (<a48> ^digit1 4 ^digit2 8 ^sum 2 ^carry-borrow 1)
   (<a49> ^digit1 4 ^digit2 9 ^sum 3 ^carry-borrow 1)
   (<a50> ^digit1 5 ^digit2 0 ^sum 5 ^carry-borrow 0)
   (<a51> ^digit1 5 ^digit2 1 ^sum 6 ^carry-borrow 0)
   (<a52> ^digit1 5 ^digit2 2 ^sum 7 ^carry-borrow 0)
   (<a53> ^digit1 5 ^digit2 3 ^sum 8 ^carry-borrow 0)
   (<a54> ^digit1 5 ^digit2 4 ^sum 9 ^carry-borrow 0)
   (<a55> ^digit1 5 ^digit2 5 ^sum 0 ^carry-borrow 1)
   (<a56> ^digit1 5 ^digit2 6 ^sum 1 ^carry-borrow 1)
   (<a57> ^digit1 5 ^digit2 7 ^sum 2 ^carry-borrow 1)
   (<a58> ^digit1 5 ^digit2 8 ^sum 3 ^carry-borrow 1)
   (<a59> ^digit1 5 ^digit2 9 ^sum 4 ^carry-borrow 1)
   (<a60> ^digit1 6 ^digit2 0 ^sum 6 ^carry-borrow 0)
   (<a61> ^digit1 6 ^digit2 1 ^sum 7 ^carry-borrow 0)
   (<a62> ^digit1 6 ^digit2 2 ^sum 8 ^carry-borrow 0)
   (<a63> ^digit1 6 ^digit2 3 ^sum 9 ^carry-borrow 0)
   (<a64> ^digit1 6 ^digit2 4 ^sum 0 ^carry-borrow 1)
   (<a65> ^digit1 6 ^digit2 5 ^sum 1 ^carry-borrow 1)
   (<a66> ^digit1 6 ^digit2 6 ^sum 2 ^carry-borrow 1)
   (<a67> ^digit1 6 ^digit2 7 ^sum 3 ^carry-borrow 1)
   (<a68> ^digit1 6 ^digit2 8 ^sum 4 ^carry-borrow 1)
   (<a69> ^digit1 6 ^digit2 9 ^sum 5 ^carry-borrow 1)
   (<a70> ^digit1 7 ^digit2 0 ^sum 7 ^carry-borrow 0)
   (<a71> ^digit1 7 ^digit2 1 ^sum 8 ^carry-borrow 0)
   (<a72> ^digit1 7 ^digit2 2 ^sum 9 ^carry-borrow 0)
   (<a73> ^digit1 7 ^digit2 3 ^sum 0 ^carry-borrow 1)
   (<a74> ^digit1 7 ^digit2 4 ^sum 1 ^carry-borrow 1)
   (<a75> ^digit1 7 ^digit2 5 ^sum 2 ^carry-borrow 1)
   (<a76> ^digit1 7 ^digit2 6 ^sum 3 ^carry-borrow 1)
   (<a77> ^digit1 7 ^digit2 7 ^sum 4 ^carry-borrow 1)
   (<a78> ^digit1 7 ^digit2 8 ^sum 5 ^carry-borrow 1)
   (<a79> ^digit1 7 ^digit2 9 ^sum 6 ^carry-borrow 1)
   (<a80> ^digit1 8 ^digit2 0 ^sum 8 ^carry-borrow 0)
   (<a81> ^digit1 8 ^digit2 1 ^sum 9 ^carry-borrow 0)
   (<a82> ^digit1 8 ^digit2 2 ^sum 0 ^carry-borrow 1)
   (<a83> ^digit1 8 ^digit2 3 ^sum 1 ^carry-borrow 1)
   (<a84> ^digit1 8 ^digit2 4 ^sum 2 ^carry-borrow 1)
   (<a85> ^digit1 8 ^digit2 5 ^sum 3 ^carry-borrow 1)
   (<a86> ^digit1 8 ^digit2 6 ^sum 4 ^carry-borrow 1)
   (<a87> ^digit1 8 ^digit2 7 ^sum 5 ^carry-borrow 1)
   (<a88> ^digit1 8 ^digit2 8 ^sum 6 ^carry-borrow 1)
   (<a89> ^digit1 8 ^digit2 9 ^sum 7 ^carry-borrow 1)
   (<a90> ^digit1 9 ^digit2 0 ^sum 9 ^carry-borrow 0)
   (<a91> ^digit1 9 ^digit2 1 ^sum 0 ^carry-borrow 1)
   (<a92> ^digit1 9 ^digit2 2 ^sum 1 ^carry-borrow 1)
   (<a93> ^digit1 9 ^digit2 3 ^sum 2 ^carry-borrow 1)
   (<a94> ^digit1 9 ^digit2 4 ^sum 3 ^carry-borrow 1)
   (<a95> ^digit1 9 ^digit2 5 ^sum 4 ^carry-borrow 1)
   (<a96> ^digit1 9 ^digit2 6 ^sum 5 ^carry-borrow 1)
   (<a97> ^digit1 9 ^digit2 7 ^sum 6 ^carry-borrow 1)
   (<a98> ^digit1 9 ^digit2 8 ^sum 7 ^carry-borrow 1)
   (<a99> ^digit1 9 ^digit2 9 ^sum 8 ^carry-borrow 1)
}

sp {arithmetic*apply*generate-facts*sub
   (state <s> ^operator.name generate-facts
              ^fact-source wm)
-->
   (<s> ^arithmetic.subtraction-facts
                          <a01> <a02> <a03> <a04> <a05> <a06> <a07> <a08> <a09> <a00>
                          <a11> <a12> <a13> <a14> <a15> <a16> <a17> <a18> <a19> <a10>
                          <a21> <a22> <a23> <a24> <a25> <a26> <a27> <a28> <a29> <a20>
                          <a31> <a32> <a33> <a34> <a35> <a36> <a37> <a38> <a39> <a30>
                          <a41> <a42> <a43> <a44> <a45> <a46> <a47> <a48> <a49> <a40>
                          <a51> <a52> <a53> <a54> <a55> <a56> <a57> <a58> <a59> <a50>
                          <a61> <a62> <a63> <a64> <a65> <a66> <a67> <a68> <a69> <a60>
                          <a71> <a72> <a73> <a74> <a75> <a76> <a77> <a78> <a79> <a70>
                          <a81> <a82> <a83> <a84> <a85> <a86> <a87> <a88> <a89> <a80>
                          <a91> <a92> <a93> <a94> <a95> <a96> <a97> <a98> <a99> <a90>)
   (<a00> ^digit1 0 ^digit2 0 ^result 0)
   (<a01> ^digit1 10 ^digit2 1 ^result 9)
   (<a02> ^digit1 10 ^digit2 2 ^result 8)
   (<a03> ^digit1 10 ^digit2 3 ^result 7)
   (<a04> ^digit1 10 ^digit2 4 ^result 6)
   (<a05> ^digit1 10 ^digit2 5 ^result 5)
   (<a06> ^digit1 10 ^digit2 6 ^result 4)
   (<a07> ^digit1 10 ^digit2 7 ^result 3)
   (<a08> ^digit1 10 ^digit2 8 ^result 2)
   (<a09> ^digit1 10 ^digit2 9 ^result 1)
   (<a10> ^digit1 1 ^digit2 0 ^result 1)
   (<a11> ^digit1 1 ^digit2 1 ^result 0)
   (<a12> ^digit1 11 ^digit2 2 ^result 9)
   (<a13> ^digit1 11 ^digit2 3 ^result 8)
   (<a14> ^digit1 11 ^digit2 4 ^result 7)
   (<a15> ^digit1 11 ^digit2 5 ^result 6)
   (<a16> ^digit1 11 ^digit2 6 ^result 5)
   (<a17> ^digit1 11 ^digit2 7 ^result 4)
   (<a18> ^digit1 11 ^digit2 8 ^result 3)
   (<a19> ^digit1 11 ^digit2 9 ^result 2)
   (<a20> ^digit1 2 ^digit2 0 ^result 2)
   (<a21> ^digit1 2 ^digit2 1 ^result 1)
   (<a22> ^digit1 2 ^digit2 2 ^result 0)
   (<a23> ^digit1 12 ^digit2 3 ^result 9)
   (<a24> ^digit1 12 ^digit2 4 ^result 8)
   (<a25> ^digit1 12 ^digit2 5 ^result 7)
   (<a26> ^digit1 12 ^digit2 6 ^result 6)
   (<a27> ^digit1 12 ^digit2 7 ^result 5)
   (<a28> ^digit1 12 ^digit2 8 ^result 4)
   (<a29> ^digit1 12 ^digit2 9 ^result 3)
   (<a30> ^digit1 3 ^digit2 0 ^result 3)
   (<a31> ^digit1 3 ^digit2 1 ^result 2)
   (<a32> ^digit1 3 ^digit2 2 ^result 1)
   (<a33> ^digit1 3 ^digit2 3 ^result 0)
   (<a34> ^digit1 13 ^digit2 4 ^result 9)
   (<a35> ^digit1 13 ^digit2 5 ^result 8)
   (<a36> ^digit1 13 ^digit2 6 ^result 7)
   (<a37> ^digit1 13 ^digit2 7 ^result 6)
   (<a38> ^digit1 13 ^digit2 8 ^result 5)
   (<a39> ^digit1 13 ^digit2 9 ^result 4)
   (<a40> ^digit1 4 ^digit2 0 ^result 4)
   (<a41> ^digit1 4 ^digit2 1 ^result 3)
   (<a42> ^digit1 4 ^digit2 2 ^result 2)
   (<a43> ^digit1 4 ^digit2 3 ^result 1)
   (<a44> ^digit1 4 ^digit2 4 ^result 0)
   (<a45> ^digit1 14 ^digit2 5 ^result 9)
   (<a46> ^digit1 14 ^digit2 6 ^result 8)
   (<a47> ^digit1 14 ^digit2 7 ^result 7)
   (<a48> ^digit1 14 ^digit2 8 ^result 6)
   (<a49> ^digit1 14 ^digit2 9 ^result 5)
   (<a50> ^digit1 5 ^digit2 0 ^result 5)
   (<a51> ^digit1 5 ^digit2 1 ^result 4)
   (<a52> ^digit1 5 ^digit2 2 ^result 3)
   (<a53> ^digit1 5 ^digit2 3 ^result 2)
   (<a54> ^digit1 5 ^digit2 4 ^result 1)
   (<a55> ^digit1 5 ^digit2 5 ^result 0)
   (<a56> ^digit1 15 ^digit2 6 ^result 9)
   (<a57> ^digit1 15 ^digit2 7 ^result 8)
   (<a58> ^digit1 15 ^digit2 8 ^result 7)
   (<a59> ^digit1 15 ^digit2 9 ^result 6)
   (<a60> ^digit1 6 ^digit2 0 ^result 6)
   (<a61> ^digit1 6 ^digit2 1 ^result 5)
   (<a62> ^digit1 6 ^digit2 2 ^result 4)
   (<a63> ^digit1 6 ^digit2 3 ^result 3)
   (<a64> ^digit1 6 ^digit2 4 ^result 2)
   (<a65> ^digit1 6 ^digit2 5 ^result 1)
   (<a66> ^digit1 6 ^digit2 6 ^result 0)
   (<a67> ^digit1 16 ^digit2 7 ^result 9)
   (<a68> ^digit1 16 ^digit2 8 ^result 8)
   (<a69> ^digit1 16 ^digit2 9 ^result 7)
   (<a70> ^digit1 7 ^digit2 0 ^result 7)
   (<a71> ^digit1 7 ^digit2 1 ^result 6)
   (<a72> ^digit1 7 ^digit2 2 ^result 5)
   (<a73> ^digit1 7 ^digit2 3 ^result 4)
   (<a74> ^digit1 7 ^digit2 4 ^result 3)
   (<a75> ^digit1 7 ^digit2 5 ^result 2)
   (<a76> ^digit1 7 ^digit2 6 ^result 1)
   (<a77> ^digit1 7 ^digit2 7 ^result 0)
   (<a78> ^digit1 17 ^digit2 8 ^result 9)
   (<a79> ^digit1 17 ^digit2 9 ^result 8)
   (<a80> ^digit1 8 ^digit2 0 ^result 8)
   (<a81> ^digit1 8 ^digit2 1 ^result 7)
   (<a82> ^digit1 8 ^digit2 2 ^result 6)
   (<a83> ^digit1 8 ^digit2 3 ^result 5)
   (<a84> ^digit1 8 ^digit2 4 ^result 4)
   (<a85> ^digit1 8 ^digit2 5 ^result 3)
   (<a86> ^digit1 8 ^digit2 6 ^result 2)
   (<a87> ^digit1 8 ^digit2 7 ^result 1)
   (<a88> ^digit1 8 ^digit2 8 ^result 0)
   (<a89> ^digit1 18 ^digit2 9 ^result 9)
   (<a90> ^digit1 9 ^digit2 0 ^result 9)
   (<a91> ^digit1 9 ^digit2 1 ^result 8)
   (<a92> ^digit1 9 ^digit2 2 ^result 7)
   (<a93> ^digit1 9 ^digit2 3 ^result 6)
   (<a94> ^digit1 9 ^digit2 4 ^result 5)
   (<a95> ^digit1 9 ^digit2 5 ^result 4)
   (<a96> ^digit1 9 ^digit2 6 ^result 3)
   (<a97> ^digit1 9 ^digit2 7 ^result 2)
   (<a98> ^digit1 9 ^digit2 8 ^result 1)
   (<a99> ^digit1 9 ^digit2 9 ^result 0)
}


sp {arithmetic*apply*generate-facts*add10
   (state <s> ^operator.name generate-facts
              ^fact-source wm)
-->
   (<s> ^arithmetic.add10-facts
                          <a01> <a02> <a03> <a04> <a05> <a06> <a07> <a08> <a09> <a00>)
   (<a00> ^digit1 0 ^digit-10 10)
   (<a01> ^digit1 1 ^digit-10 11)
   (<a02> ^digit1 2 ^digit-10 12)
   (<a03> ^digit1 3 ^digit-10 13)
   (<a04> ^digit1 4 ^digit-10 14)
   (<a05> ^digit1 5 ^digit-10 15)
   (<a06> ^digit1 6 ^digit-10 16)
   (<a07> ^digit1 7 ^digit-10 17)
   (<a08> ^digit1 8 ^digit-10 18)
   (<a09> ^digit1 9 ^digit-10 19)
}