Abstract syntax: \kwN elem-of Nml = binary numerals .ta \nwu I elem-of Int = binary integers F elem-of Frac = binary fractions B elem-of Bit = binary bits N ::= I F I ::= B | I B F ::= .B | .B F B ::= 0 | 1 Semantic domain: Z = real numbers Semantic functions: \kwNm: Nml -> Z .ta \nwu NIm: Int -> Z NFm: Frac -> Z NBm: Bit -> Z Nm[[I F]] = Nm[[I]] + Nm[[.F]] NIm[[I B]] = 2*NIm[I] + NIm[[B]] NIm[[B]] = NBm[[B]] NBm[[0]] = 0 NBm[[1]] = 1 NFm[[.B F]] = NFm[[.B]] + NFm[[.F]]/2 NFm[[.B]] = NBm[[.B]] NBm[[.0]] = 0 NBm[[.1]] = 1/2 Test case: 1101.01 Nm[[1101.01]] \kw= NIm[[1101]] + NFm[[.01]] .ta \nwu = (2*NIm[[110]] + NIm[[1]]) + (NFm[[.0]] + NFm[[.1]]/2) = (2*(2*NIm[[11]] + NIm[[0]]) + NIm[[1]]) + (NFm[[.0]] + NFm[[.1]]/2) = (2*(2*(2*NIm[[1]] + NIm[[1]]) + NIm[[0]]) + NIm[[1]]) + (NFm[[.0]] + NFm[[.1]]/2) = (2*(2*(2*NBm[[1]] + NBm[[1]]) + NBm[[0]]) + NBm[[1]]) + (NBm[[.0]] + NBm[[.1]]/2) = (2*(2*(2*1 + 1) + 0) + 1) + (0 + (1/2)/2)