src/HOL/hologic.ML
changeset 26086 3c243098b64a
parent 26036 f9e779f11949
child 26804 e2b1e6868c2f
--- a/src/HOL/hologic.ML	Sat Feb 16 16:52:09 2008 +0100
+++ b/src/HOL/hologic.ML	Sun Feb 17 06:49:53 2008 +0100
@@ -88,15 +88,13 @@
   val class_size: string
   val size_const: typ -> term
   val indexT: typ
-  val bitT: typ
-  val B0_const: term
-  val B1_const: term
-  val mk_bit: int -> term
-  val dest_bit: term -> int
   val intT: typ
   val pls_const: term
   val min_const: term
-  val bit_const: term
+  val bit0_const: term
+  val bit1_const: term
+  val mk_bit: int -> term
+  val dest_bit: term -> int
   val mk_numeral: int -> term
   val dest_numeral: term -> int
   val number_of_const: typ -> term
@@ -452,39 +450,33 @@
 val indexT = Type ("Code_Index.index", []);
 
 
-(* bit *)
-
-val bitT = Type ("Int.bit", []);
-
-val B0_const = Const ("Int.bit.B0", bitT);
-val B1_const =  Const ("Int.bit.B1", bitT);
-
-fun mk_bit 0 = B0_const
-  | mk_bit 1 = B1_const
-  | mk_bit _ = raise TERM ("mk_bit", []);
-
-fun dest_bit (Const ("Int.bit.B0", _)) = 0
-  | dest_bit (Const ("Int.bit.B1", _)) = 1
-  | dest_bit t = raise TERM ("dest_bit", [t]);
-
-
 (* binary numerals and int -- non-unique representation due to leading zeros/ones! *)
 
 val intT = Type ("Int.int", []);
 
 val pls_const = Const ("Int.Pls", intT)
 and min_const = Const ("Int.Min", intT)
-and bit_const = Const ("Int.Bit", intT --> bitT --> intT);
+and bit0_const = Const ("Int.Bit0", intT --> intT)
+and bit1_const = Const ("Int.Bit1", intT --> intT);
+
+fun mk_bit 0 = bit0_const
+  | mk_bit 1 = bit1_const
+  | mk_bit _ = raise TERM ("mk_bit", []);
+
+fun dest_bit (Const ("Int.Bit0", _)) = 0
+  | dest_bit (Const ("Int.Bit1", _)) = 1
+  | dest_bit t = raise TERM ("dest_bit", [t]);
 
 fun mk_numeral 0 = pls_const
   | mk_numeral ~1 = min_const
   | mk_numeral i =
       let val (q, r) = Integer.div_mod i 2;
-      in bit_const $ mk_numeral q $ mk_bit r end;
+      in mk_bit r $ mk_numeral q end;
 
 fun dest_numeral (Const ("Int.Pls", _)) = 0
   | dest_numeral (Const ("Int.Min", _)) = ~1
-  | dest_numeral (Const ("Int.Bit", _) $ bs $ b) = 2 * dest_numeral bs + dest_bit b
+  | dest_numeral (Const ("Int.Bit0", _) $ bs) = 2 * dest_numeral bs
+  | dest_numeral (Const ("Int.Bit1", _) $ bs) = 2 * dest_numeral bs + 1
   | dest_numeral t = raise TERM ("dest_numeral", [t]);
 
 fun number_of_const T = Const ("Int.number_class.number_of", intT --> T);