parse_translation‹
let
fun mk_sucs_aux 0 t = t
| mk_sucs_aux n t = mk_sucs_aux (n - 1) (const‹Suc› $ t)
fun mk_sucs n = Abs("n", 🍋‹nat›, mk_sucs_aux n (Bound 0))
fun Suc_tr [Free (str, _)] = mk_sucs (the (Int.fromString str))
in [(🍋‹_Suc_tower›, K Suc_tr)] end ›
print_translation‹
let
val digit_consts =
[🍋‹Suc2›, 🍋‹Suc3›, 🍋‹Suc4›, 🍋‹Suc5›, 🍋‹Suc6›, 🍋‹Suc7›, 🍋‹Suc8›, 🍋‹Suc9›]
val num_token_T = Simple_Syntax.read_typ "num_token"
val T = num_token_T --> HOLogic.natT --> HOLogic.natT
fun mk_num_token n = Free (Int.toString n, num_token_T)
fun dest_Suc_tower (Const (🍋‹Suc›, _) $ t) acc =
dest_Suc_tower t (acc + 1)
| dest_Suc_tower t acc = (t, acc)
fun Suc_tr' [t] =
let
val (t', n) = dest_Suc_tower t 1
in
if n > 9 then
Const (🍋‹_Suc_tower›, T) $ mk_num_token n $ t'
else if n > 1 then
Const (List.nth (digit_consts, n - 2), T) $ t'
else
raise Match
end
in [(🍋‹Suc›, K Suc_tr')]
end ›
(* Tests
ML\<open> local funmk0=\<^term>\<open>x::nat\<close> |mkn=\<^const>\<open>Suc\<close>$mk(n-1) valctxt'=Variable.add_fixes_implicit@{term"x::nat"}@{context} in val_= map_range(fnn=>(n+1,mk(n+1)))20 |>map(fn(n,t)=> Pretty.block[Pretty.str(Int.toStringn^":"), Syntax.pretty_termctxt't]|>Pretty.writeln) end \<close>
(* check that the notation really means the right thing *) lemma"Suc2 n = n+2 ∧ Suc3 n = n+3 ∧ Suc4 n = n+4 ∧ Suc5 n = n+5 ∧ Suc6 n = n+6 ∧ Suc7 n = n+7 ∧ Suc8 n = n+8 ∧ Suc9 n = n+9" by simp
lemma"Suc n = n+10 ∧ Suc n = n+11 ∧ Suc n = n+12 ∧ Suc n = n+13 ∧ Suc n = n+14 ∧ Suc n = n+15 ∧ Suc n = n+16 ∧ Suc n = n+17 ∧ Suc n = n+18 ∧ Suc n = n+19 ∧ Suc n = n+20" by simp
*)
end
Messung V0.5 in Prozent
¤ Dauer der Verarbeitung: 0.9 Sekunden
(vorverarbeitet am 2026-06-09)
¤
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.