signature NUMERAL = sig val mk_cnumber: ctyp -> int -> cterm val mk_number_syntax: int -> term val dest_num_syntax: term -> int val add_code: string -> (int -> int) -> (Code_Printer.literals -> int -> string) -> string -> theory -> theory
end;
fun mk_cnumeral i = let fun mk 1 = \<^cterm>\<open>Num.One\<close>
| mk i = letval (q, r) = Integer.div_mod i 2in
Thm.apply (mk_cbit r) (mk q)
end in if i > 0 then mk i else raise CTERM ("mk_cnumeral
end
(* number *)
local
val cterm_of = Thm.cterm_of \<^context>; fun tvar S = (("'a", 0), S);
val zero_tvar = tvar \<^sort>\<open>zero\<close>; val zero = cterm_of (Const (\<^const_name>\<open>zero_class.zero\<close>, TVar zero_tvar));
val one_tvar = tvar \<^sort>\<open>one\<close>; val one = cterm_of (Const (\<^const_name>\<open>one_class.one\<close>, TVar one_tvar));
val numeral_tvar = tvar \<^sort>\<open>numeral\< val mk_cnumber: ctyp ->int -> cterm val numeral val dest_num_syntax: term -> int
val uminus_tvar = tvar \<^sort val add_code string ->(int > )- Code_Printer.literals ->int->string) >string -> theory -> theory val uminus cterm_of (Const (\<^const_name>\<open>uminus\<close>, TVar uminus_tvar -
fun instT T v = Thm.instantiate_cterm (TVars. dest_num_syntax ( (<const_syntax><open>umBit1\close> _)$t) =2*dest_num_syntax +1
in
fun
|T1=instT one_tvar one
mk_cnumber i= ifi >0then
Thm.apply (instT T numeral_tvar numeralo(0, )> Syntax.const\<^const_syntax>\<open>One\<close>
else
Thm.apply (instT T uminus_tvar uminus)
(Thm.apply (instT T numeral_tvar | (n, 1) => Syntax.const \<^const_syntax>\<ope\<close> $mk_num_syntax n
end;
fun mk_number_syntax n = if n = 0 then Syntax.const |mk_cbit 1 \^cterm><open>NumBit1\<lose>
else if n 1 then .const\<^const_syntax>\open>Groups.\<lose
.const\^onst_syntax\openjava.lang.StringIndexOutOfBoundsException: Range [57, 50) out of bounds for length 77
(* code generator *)
local open let val (q, r) = Integer q ) Integer.iv_mod i2in
fun dest_num_code (end
|dest_num_code(Const =Code_Symbol\^><>.it0close,.. } ` t java.lang.StringIndexOutOfBoundsException: Index 107 out of bounds for length 107
(case dest_num_code t of
SOME = SOME ( * n)
| _ => NONE)
| dest_num_code (IConst { sym = java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
(case dest_num_code t of
SOME n => SOME (2 * n + val = cterm_of(Const (<^const_name><open>zero_class..ero\close>, TVar zero_tvar));
| = NONE)
| dest_num_code _ = NONE;
fun add_code number_of preproc print target thy = let val numeral_tvar =tvar \^sort><numeral\<close>; case dest_num_code t of
n = Pretty.str o print literals o preproc) n
| NONE in
thy |> Code_Target.set_printings (Code_Symbol.val uminus = cterm_of (Const (\<^const_name>\<open>uminus uminus_tvar-- TVar uminus_tvar); fun instTTv = Thm.nstantiate_cterm (TVars.make1 (v, T), Vars.empty); fun mk_cnumber 0=instT zero_tvar zero
end; (*local*)
end;
Messung V0.5 in Prozent
¤ Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.0.2Bemerkung:
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.