parse_translation‹
let
fun quote_tr [t] = Syntax_Trans.quote_tr @{syntax_const "_antiquote"} t
| quote_tr ts = raise TERM ("quote_tr", ts);
in [(@{syntax_const "_quote"}, K quote_tr)] end ›
parse_translation‹
let
fun ann_tr ((Const (@{const_syntax AnnCom}, _) $ p $ c)
:: ts) = p
| ann_tr (p :: ts) =
Const (@{const_syntax ann}, dummyT) $ p
| ann_tr x = raise TERM ("ann_tr", x);
fun com_tr ((Const (@{const_syntax AnnCom}, _) $ p $ c)
:: ts) = c
| com_tr (c :: ts) =
Const (@{const_syntax com}, dummyT) $ c
| com_tr x = raise TERM ("com_tr", x);
in
[(@{syntax_const "_Annotation"}, K ann_tr),
(@{syntax_const "_Command"}, K com_tr)]
end ›
translations "r IF b THEN c1 ELSE c2 FI"⇀ "CONST AnnCom (CONST AnnBin r (c1?) (c2?)) (CONST Cond {b} (c1!) (c2!))" "r IF b THEN c FI"⇀"r IF b THEN c ELSE SKIP FI" "r WHILE b INV i DO c OD"⇀ "CONST AnnCom (CONST AnnWhile r i (c?)) (CONST While {b} (c!))" "r AWAIT b THEN c END"⇀ "CONST AnnCom (CONST AnnRec r (c?)) (CONST Await {b} (c!))" "r ⟨c⟩"⇌"r AWAIT CONST True THEN c END" "r WAIT b END"⇌"r AWAIT b THEN SKIP END"
"IF b THEN c1 ELSE c2 FI"⇌"CONST FAKE_ANN IF b THEN c1 ELSE c2 FI" "IF b THEN c FI"⇌"CONST FAKE_ANN IF b THEN c ELSE SKIP FI" "WHILE b DO c OD"⇌"CONST FAKE_ANN WHILE b INV CONST FAKE_ANN DO c OD" "WHILE b INV i DO c OD"⇌"CONST FAKE_ANN WHILE b INV i DO c OD" "AWAIT b THEN c END"⇌"CONST FAKE_ANN AWAIT b THEN c END" "⟨c⟩"⇌"CONST FAKE_ANN AWAIT CONST True THEN c END" "WAIT b END"⇌"AWAIT b THEN SKIP END"
"_grd f g"⇀"(f, g)" "_grds g gs"⇀"g#gs" "_last_grd g"⇀"[g]" "_guards r gs c"⇀ "CONST AnnCom (CONST ann_guards r gs (c?)) (CONST guards gs (c!))"
"ai CALLX init r p n restore return arestoreq areturn arestorea A"⇀ "CONST AnnCom (CONST ann_call ai r n arestoreq areturn arestorea A) (CONST call init p restore return)" "r SCALL p n"⇀"CONST AnnCom (CONST AnnCall r n) (CONST Call p)"
translations "_prg c q a"⇀"([((c?), q, a)], [(c!)])" "_prgs c q a ps"⇀"(((c?), q, a) # (ps,), (c!) # (ps.))" "_PAR ps"⇀"CONST AnnCom (CONST AnnPar (ps,)) (CONST Parallel (ps.))"
"_prg_scheme j i k c q a"⇀"(CONST map (λi. ((c?), q, a)) [j..<k], CONST map (λi. (c!)) [j..<k])"
fun new_AnnCom r c =
(Const (@{const_syntax AnnCom}, dummyT) $ r $ c)
fun new_Pair a b =
(Const (@{const_syntax Pair}, dummyT) $ a $ b)
fun dest_prod (Const (@{const_syntax Pair}, _) $ a $ b) = (a, b)
| dest_prod _ = raise Match;
fun prgs_tr' f pqa c =
let val (p, qa) = dest_prod pqa
val (q, a) = dest_prod qa
in [new_AnnCom (f p) (f c), f q, f a] end
fun prgs_lst_tr' [p] [c] =
list_comb (Syntax.const @{syntax_const "_prg"},
prgs_tr' I p c)
| prgs_lst_tr' (p :: ps) (c :: cs) =
list_comb (Syntax.const @{syntax_const "_prgs"},
prgs_tr' I p c) $ prgs_lst_tr' ps cs
| prgs_lst_tr' _ _= raise Match;
fun AnnCom_tr (Const (@{const_syntax AnnPar}, _) $
(Const (@{const_syntax map}, _) $
Abs (i, T, p) $ (Const _ $ j $ k)) ::
Const (@{const_syntax Parallel}, _) $
(Const (@{const_syntax map}, _) $
Abs (_, _, c) $ _) :: ts) =
let val _ = if syntax_debug then writeln "prg_scheme" else ()
fun dest_abs body = snd (Term.dest_abs_global (Abs (i, T, body))) in
Syntax.const @{syntax_const "_PAR"} $
list_comb (Syntax.const @{syntax_const "_prg_scheme"} $
j $ Free (i, T) $ k, prgs_tr' dest_abs p c)
end
| AnnCom_tr (Const (@{const_syntax AnnPar}, _) $ ps ::
Const (@{const_syntax Parallel}, _) $ cs :: ts) =
let val _ = if syntax_debug then writeln "Par" else ()
val (ps', cs') = (dest_list ps, dest_list cs)
in Syntax.const @{syntax_const "_PAR"} $
prgs_lst_tr' ps' cs' end
| AnnCom_tr (Const (@{const_syntax AnnExpr}, _) $ r ::
Const (@{const_syntax Basic}, _) $ Abs (x, _, f $ k $ Bound 0) :: ts) =
let val _ = if syntax_debug then writeln "Basic'" else () in
quote_tr' (Syntax.const @{syntax_const "_AnnAssign"} $ r $ Syntax_Trans.update_name_tr' f)
(Abs (x, dummyT, Syntax_Trans.const_abs_tr' k) :: ts) end
| AnnCom_tr (Const (@{const_syntax AnnExpr}, _) $ r ::
Const (@{const_syntax Basic}, _) $ (f $ k) :: ts) =
let val _ = if syntax_debug then writeln "Basic" else () in
quote_tr' (Syntax.const @{syntax_const "_AnnAssign"} $ r $ Syntax_Trans.update_name_tr' f)
(k :: ts) end
| AnnCom_tr (Const (@{const_syntax AnnExpr}, _) $ r ::
Const (@{const_syntax Spec}, _) $ (_ $ _ $ Abs (_,_, _ $ _ $ ((_ $ f) $ S $ _))) :: ts) =
let val _ = if syntax_debug then writeln ("Spec") else () in
(Syntax.const @{syntax_const "_AnnSpec"} $ r $
Syntax_Trans.update_name_tr' f $
Syntax_Trans.antiquote_tr' @{syntax_const "_antiquote"} S)
end
| AnnCom_tr (Const (@{const_syntax AnnComp}, _) $ r $ r' ::
Const (@{const_syntax Seq}, _) $ c $ c' :: ts) =
let val _ = if syntax_debug then writeln "Seq" else ()
in Syntax.const @{syntax_const "_AnnSeq"} $
new_AnnCom r c $ new_AnnCom r' c' end
| AnnCom_tr (Const (@{const_syntax AnnRec}, _) $ r $ p ::
Const (@{const_syntax Await}, _) $ b $ c :: ts) =
let val _ = if syntax_debug then writeln "Await" else ()
in annbexp_tr' @{syntax_const "_AnnAwait"}
(r :: b :: new_AnnCom p c :: ts) end
| AnnCom_tr (Const (@{const_syntax AnnWhile}, _) $ r $ i $ p ::
Const (@{const_syntax While}, _) $ b $ c :: ts) =
let val _ = if syntax_debug then writeln "While" else ()
in annbexp_tr' @{syntax_const "_AnnWhile"}
(r :: b :: i :: new_AnnCom p c :: ts) end
| AnnCom_tr (Const (@{const_syntax AnnBin}, _) $ r $ p $ p' ::
Const (@{const_syntax Cond}, _) $ b $ c $ c':: ts) =
let val _ = if syntax_debug then writeln "Cond" else ()
in annbexp_tr' @{syntax_const "_AnnCond1"}
(r :: b :: new_AnnCom p c :: new_AnnCom p' c' :: ts) end
| AnnCom_tr (Const (@{const_syntax ann_guards}, _) $ r $ gs $ p ::
Const (@{const_syntax guards}, _) $ _ $ c :: ts) =
let val _ = if syntax_debug then writeln "guards" else ()
in Syntax.const @{syntax_const "_guards"} $ r $
guards_lst_tr' (dest_list gs) $ new_AnnCom p c end
| AnnCom_tr (Const (@{const_syntax AnnRec}, _) $ r $ p ::
Const (@{const_syntax Guard}, _) $ f $ g $ c :: ts) =
let val _ = if syntax_debug then writeln "guards'" else ()
in Syntax.const @{syntax_const "_guards"} $ r $
new_Pair f g $ new_AnnCom p c end
| AnnCom_tr (Const (@{const_syntax AnnCall}, _) $ r $ n ::
Const (@{const_syntax Call}, _) $ p :: ts) =
let val _ = if syntax_debug then writeln "SCall" else ()
in Syntax.const @{syntax_const "_AnnSCall"} $ r $ p $ n end
| AnnCom_tr (Const (@{const_syntax ann_call}, _) $
ai $ r $ n $ arestoreq $ areturn $ arestorea $ A ::
Const (@{const_syntax call}, _) $
init $ p $ restore $ return :: ts) =
let val _ = if syntax_debug then writeln "CallX" else ()
in Syntax.const @{syntax_const "_AnnCallX"} $ ai $ init $
r $ p $ n $ restore $ return $ arestoreq $ areturn $
arestorea $ A end
| AnnCom_tr (Const (@{const_syntax AnnComp}, _) $ r $ r' ::
Const (@{const_syntax Catch}, _) $ c $ c' :: ts) =
let val _ = if syntax_debug then writeln "Catch" else ()
in Syntax.const @{syntax_const "_Try_Catch"} $
new_AnnCom r c $ new_AnnCom r' c' end
| AnnCom_tr (Const (@{const_syntax ann}, _) $ p ::
Const (@{const_syntax com}, _) $ p' :: ts) =
let val _ = if syntax_debug then writeln "ann_com" else ()
in if p = p' then p else raise Match end
| AnnCom_tr x = let val _ = if syntax_debug then writeln ("AnnCom_tr\n " ^ @{make_string} x) else ()
in raise Match end;
fun oghoare_tr (gamma :: sigma :: F :: r :: c :: Q :: A :: ts) =
let val _ = if syntax_debug then writeln "oghoare" else ()
in Syntax.const @{syntax_const "_oghoare"} $
gamma $ sigma $ F $ new_AnnCom r c $ Q $ A
end
| oghoare_tr x = let val _ = writeln ("oghoare_tr\n " ^ @{make_string} x)
in raise Match end;
fun oghoare_seq_tr (gamma :: sigma :: F :: P :: r :: c :: Q :: A :: ts) =
let val _ = if syntax_debug then writeln "oghoare_seq" else ()
in Syntax.const @{syntax_const "_oghoare_seq"} $
gamma $ sigma $ F $ P $ new_AnnCom r c $ Q $ A
end
| oghoare_seq_tr x = let val _ = writeln ("oghoare_seq_tr\n " ^ @{make_string} x)
in raise Match end;
in
[(@{const_syntax Collect}, K assert_tr'),
(@{const_syntax AnnCom}, K AnnCom_tr),
(@{const_syntax oghoare}, K oghoare_tr),
(@{const_syntax oghoare_seq}, K oghoare_seq_tr)]
end ›
end
Messung V0.5 in Prozent
¤ Dauer der Verarbeitung: 0.26 Sekunden
(vorverarbeitet am 2026-06-10)
¤
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.