src/HOL/Tools/hologic.ML
changeset 34974 18b41bba42b5
parent 34962 807f6ce0273d
child 35267 8dfd816713c6
equal deleted inserted replaced
34973:ae634fad947e 34974:18b41bba42b5
   438 
   438 
   439 (* nat *)
   439 (* nat *)
   440 
   440 
   441 val natT = Type ("nat", []);
   441 val natT = Type ("nat", []);
   442 
   442 
   443 val zero = Const ("HOL.zero_class.zero", natT);
   443 val zero = Const ("Algebras.zero_class.zero", natT);
   444 
   444 
   445 fun is_zero (Const ("HOL.zero_class.zero", _)) = true
   445 fun is_zero (Const ("Algebras.zero_class.zero", _)) = true
   446   | is_zero _ = false;
   446   | is_zero _ = false;
   447 
   447 
   448 fun mk_Suc t = Const ("Suc", natT --> natT) $ t;
   448 fun mk_Suc t = Const ("Suc", natT --> natT) $ t;
   449 
   449 
   450 fun dest_Suc (Const ("Suc", _) $ t) = t
   450 fun dest_Suc (Const ("Suc", _) $ t) = t
   456   let
   456   let
   457     fun mk 0 = zero
   457     fun mk 0 = zero
   458       | mk n = mk_Suc (mk (n - 1));
   458       | mk n = mk_Suc (mk (n - 1));
   459   in if n < 0 then raise TERM ("mk_nat: negative number", []) else mk n end;
   459   in if n < 0 then raise TERM ("mk_nat: negative number", []) else mk n end;
   460 
   460 
   461 fun dest_nat (Const ("HOL.zero_class.zero", _)) = 0
   461 fun dest_nat (Const ("Algebras.zero_class.zero", _)) = 0
   462   | dest_nat (Const ("Suc", _) $ t) = dest_nat t + 1
   462   | dest_nat (Const ("Suc", _) $ t) = dest_nat t + 1
   463   | dest_nat t = raise TERM ("dest_nat", [t]);
   463   | dest_nat t = raise TERM ("dest_nat", [t]);
   464 
   464 
   465 val class_size = "Nat.size";
   465 val class_size = "Nat.size";
   466 
   466 
   506 fun add_numerals (Const ("Int.number_class.number_of", Type (_, [_, T])) $ t) = cons (t, T)
   506 fun add_numerals (Const ("Int.number_class.number_of", Type (_, [_, T])) $ t) = cons (t, T)
   507   | add_numerals (t $ u) = add_numerals t #> add_numerals u
   507   | add_numerals (t $ u) = add_numerals t #> add_numerals u
   508   | add_numerals (Abs (_, _, t)) = add_numerals t
   508   | add_numerals (Abs (_, _, t)) = add_numerals t
   509   | add_numerals _ = I;
   509   | add_numerals _ = I;
   510 
   510 
   511 fun mk_number T 0 = Const ("HOL.zero_class.zero", T)
   511 fun mk_number T 0 = Const ("Algebras.zero_class.zero", T)
   512   | mk_number T 1 = Const ("HOL.one_class.one", T)
   512   | mk_number T 1 = Const ("Algebras.one_class.one", T)
   513   | mk_number T i = number_of_const T $ mk_numeral i;
   513   | mk_number T i = number_of_const T $ mk_numeral i;
   514 
   514 
   515 fun dest_number (Const ("HOL.zero_class.zero", T)) = (T, 0)
   515 fun dest_number (Const ("Algebras.zero_class.zero", T)) = (T, 0)
   516   | dest_number (Const ("HOL.one_class.one", T)) = (T, 1)
   516   | dest_number (Const ("Algebras.one_class.one", T)) = (T, 1)
   517   | dest_number (Const ("Int.number_class.number_of", Type ("fun", [_, T])) $ t) =
   517   | dest_number (Const ("Int.number_class.number_of", Type ("fun", [_, T])) $ t) =
   518       (T, dest_numeral t)
   518       (T, dest_numeral t)
   519   | dest_number t = raise TERM ("dest_number", [t]);
   519   | dest_number t = raise TERM ("dest_number", [t]);
   520 
   520 
   521 
   521