#C25.txt: April 23, 2020 Conway's Surreal numbers Help:=proc(): print(` GE(x,y),LE(x,y), EQ(x,y)`): print(` GT(x,y) , LT(x,y), IsNumber(x) ,ADD(x,y) `): print(` SN(N), Minus(x) , MUL(X,Y) `): end: #GE(x,y): inputs two (genuine) (surreal) numbers #in John Horton Conway's sense and outputs true #iff x>=y GE:=proc(x,y) local xR, yL: #xR is a typical member of x[2] and yL is a typical #member of y[1] evalb( {true,seq( evalb( not GE(y,xR)), xR in x[2])}={true} and {true,seq( evalb( not GE(yL,x)), yL in y[1])}={true} ): end: #LE(x,y) is x<=y? LE:=proc(x,y):GE(y,x): end: #EQ(x,y): is x=y in Conway's sense EQ:=proc(x,y): GE(x,y) and LE(x,y):end: #GT(x,y): x>y ? GT:=proc(x,y): GE(x,y) and not GE(y,x) : end: #LT(x,y): x= member of R (x[2]) if member(true,{seq(seq(GE(xL,xR), xL in x[1]), xR in x[2])}) then RETURN(false): fi: true: end: #ADD(x,y): x+y=[{xL+y,x+yL}, {xR+y,x+yR}] ADD:=proc(x,y) local xL, xR, yL, yR: option remember: [ { seq( ADD(xL,y), xL in x[1]), seq( ADD(x,yL), yL in y[1])}, { seq( ADD(xR,y), xR in x[2]), seq( ADD(x,yR), yR in y[2])} ]: end: #SN(N): the surreal rendition of the pos. integer N SN:=proc(N) option remember: if N=0 then [{},{}]: else [ {SN(N-1)}, {}]: fi: end: Minus:=proc(x) local xR, xL: option remember: [ {seq(Minus(xR), xR in x[2])}, {seq(Minus(xL), xL in x[1])} ]: end: #CODE BY CHARLES KENNEY (Added after class) #MUL(X,Y) multiplies two surreal numbers X and Y MUL:=proc(X,Y) local i,x,y: [{seq(seq(ADD(ADD(MUL(x,Y),MUL(X,y)),Minus(MUL(x,y))),x in X[1]),y in Y[1]), seq(seq(ADD(ADD(MUL(x,Y),MUL(X,y)),Minus(MUL(x,y))),x in X[2]),y in Y[2])}, {seq(seq(ADD(ADD(MUL(x,Y),MUL(X,y)),Minus(MUL(x,y))),y in Y[2]),x in X[1]) , seq(seq(ADD(ADD(MUL(x,Y),MUL(X,y)),Minus(MUL(x,y))),y in Y[1]),x in X[2])}]: end: