News for hackers. Stuff that matters.
Re:Exploring the Peano Axioms Through Algebraic Data Types by intuitionist on Tuesday January 15, 2019 @01:10AM (#18909142)
Strictly speaking, aren’t these the axioms of Robinson arithmetic (a much weaker system)? For Peano arithmetic you need the axiom schema of induction as well.
Re:Exploring the Peano Axioms Through Algebraic Data Types by choeger on Tuesday January 15, 2019 @02:34AM (#18909411)
I think structural induction over S will do just fine.
Re:Exploring the Peano Axioms Through Algebraic Data Types by traderjane on Tuesday January 15, 2019 @02:55AM (#18909464)
I thought that the recursively enumerable structure was given by the Axiom of Induction.
Re:Exploring the Peano Axioms Through Algebraic Data Types by jjaredsimpson on Monday January 14, 2019 @10:48PM (#18908721)
I don't understand how .add as defined could terminate.

Base case is 0 add y = 0

Recursion is Sx add y = Sy add x

Which is of course _swap_

Shouldn't it be = S (x add y)

Re:Exploring the Peano Axioms Through Algebraic Data Types by quietbritishjim on Tuesday January 15, 2019 @11:05AM (#18912111)
Let's try it with x = 2, y = 5:

    S(2) add 5       (i.e. 3 + 5)
     => 2 add S(5)   (i.e. 2 + 6)
     => S(1) add 6   (i.e. 2 + 6)
     => 1 add S(6)   (i.e. 1 + 7)
     => S(0) add 7   (i.e. 1 + 7)
     => 0 add S(7)   (i.e. 0 + 8)
     => 0 add 8
     => 8            (base case)
I agree that your rule would work too though:

    S(2) add 5
     => S(1 add 5)
     => S(S(0 add 5))
Seems more sensible to me, and by adding the same rule to the right hand side we end up only needing a single base case (that 0+0=0)

     => S(S(S(0 add 4)))
    ...
     => S(S(S(S(S(S(S(S(0 add 0))))))))
     => S(S(S(S(S(S(S(S(0))))))))
         = 8 (that is the definition of 8)
Re:Exploring the Peano Axioms Through Algebraic Data Types by jjaredsimpson on Tuesday January 15, 2019 @07:26PM (#18917162)
You swapped the order of method arguments though

you are doing x add Sy which isn't the same as Sy add x

        Number.prototype.add = function (y) {
          var x = Number(this)
          return x===0 ? y : (y+1).add(x-1)
        }

        console.log(Number(3).add(2)) // infinite
Re:Exploring the Peano Axioms Through Algebraic Data Types by quietbritishjim on Thursday January 17, 2019 @11:47AM (#18932263)
Oops, sorry, I see what you mean now. You're right, it looks like this is a mistake:

    S: innerX => S(y).add(innerX)
It should be

    S: innerX => S(innerX).add(y)
Re:Exploring the Peano Axioms Through Algebraic Data Types by caf on Monday January 14, 2019 @11:06PM (#18908792)
The recursion is S(x) add y => x add S(y), which recurses until the x becomes O() so it hits the base case.
Re:Exploring the Peano Axioms Through Algebraic Data Types by jeremysalwen on Monday January 14, 2019 @08:46PM (#18908235)
Would have been cool to show it in Coq as well, to make the connection to formal mathematics more clear!