src/HOL/Tools/float_syntax.ML
changeset 47108 2a1953f0d20d
parent 46236 ae79f2978a67
child 52143 36ffe23b25f8
equal deleted inserted replaced
47107:35807a5d8dc2 47108:2a1953f0d20d
    16 
    16 
    17 local
    17 local
    18 
    18 
    19 fun mk_number i =
    19 fun mk_number i =
    20   let
    20   let
    21     fun mk 0 = Syntax.const @{const_syntax Int.Pls}
    21     fun mk 1 = Syntax.const @{const_syntax Num.One}
    22       | mk ~1 = Syntax.const @{const_syntax Int.Min}
       
    23       | mk i =
    22       | mk i =
    24           let val (q, r) = Integer.div_mod i 2
    23           let val (q, r) = Integer.div_mod i 2
    25           in HOLogic.mk_bit r $ (mk q) end;
    24           in HOLogic.mk_bit r $ (mk q) end;
    26   in Syntax.const @{const_syntax Int.number_of} $ mk i end;
    25   in
       
    26     if i = 0 then Syntax.const @{const_syntax Groups.zero}
       
    27     else if i > 0 then Syntax.const @{const_syntax Num.numeral} $ mk i
       
    28     else Syntax.const @{const_syntax Num.neg_numeral} $ mk (~i)
       
    29   end;
    27 
    30 
    28 fun mk_frac str =
    31 fun mk_frac str =
    29   let
    32   let
    30     val {mant = i, exp = n} = Lexicon.read_float str;
    33     val {mant = i, exp = n} = Lexicon.read_float str;
    31     val exp = Syntax.const @{const_syntax Power.power};
    34     val exp = Syntax.const @{const_syntax Power.power};