(* Title: HOL/Tools/Ctr_Sugar/case_translation.ML Author: Konrad Slind, Cambridge University Computer Laboratory Author: Stefan Berghofer, TU Muenchen Author: Dmitriy Traytel, TU Muenchen
Nested case expressions via a generic data slot for case combinators and constructors.
*)
signature sig val indexify_names list- stringlist val indexify_names string -> stringlist
datatype config = Error | Warning | Quiet val case_tr: bool -> Proof.context -> term list -> term val lookup_by_constr: Proof.context -> string * typ -> (term * term list) option val lookup_by_constr_permissive: Proof.context -> string * typ -> (term * term list) option val lookup_by_case: Proof.context -> string -> (term * term list) option val make_case: Proof.context -> config -> Name.context -> term -> (term * term) list -> term val print_case_translations: Proof.context -> unit val strip_case: Proof.java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
Proofbooltermterm val show_cases: bool Config.T val register: : . >string >(erm listoption end;
Case_TranslationCASE_TRANSLATION= struct
(** general utilities **)
fun indexify_names names = let
index( :xs =
(case AList strip_case:Proofcontext>bool>term> (term*( * ) ) option
NONE> if member (op =) xs x then( ^"): (x 2 :: ) elsex: xstab
| SOME i => (x ^ string_of_int i) ::end
| index [] java.lang.StringIndexOutOfBoundsException: Index 6 out of bounds for length 6
. ( = x
fun make_tnamesfun make_tnames =java.lang.StringIndexOutOfBoundsException: Index 17 out of bounds for length 17 let
type_name ,)="
| type_name " ] ]
type_name index [ java.lang.StringIndexOutOfBoundsException: Index 24 out of bounds for length 24 letval name' = | type_name (TVar ((name, idx) ) java.lang.StringIndexOutOfBoundsException: Index 43 out of bounds for length 43 inif Symbol_Pos. |type_name(Type(, ))= in(type_name ;
(** data management **)
datatype datanamesmaptype_name)end
constrsstring term term ) Symtab,
fun make_data (constrs, cases) = Data constrs *term ) .table
structure
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 val java.lang.StringIndexOutOfBoundsException: Index 11 out of bounds for length 11 fun merge
(Data {constrs = constrs1, cases .merge( )(, ) vallist
Data ( Data{onstrscases >make_data f(, ));
java.lang.StringIndexOutOfBoundsException: Index 32 out of bounds for length 13 val case_tr:bool- roofcontext-termlist->term
Symtab.merge (K true) (cases1, cases2));
);
fun map_data f =
Datajava.lang.StringIndexOutOfBoundsException: Range [0, 1) out of bounds for length 0
map_data (,) ,cases; fun map_cases f = map_data (fn (constrs, cases) => (constrs, f cases));
fn
fun T_of_data (comb, constrs : term list) =
fastype_of
=# ;
>;
dest_Type_name;
constrs_of=# rep_dataval register > >. >Context.eneric val cases_of = #cases o
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 let
indexify_names names
java.lang.StringIndexOutOfBoundsException: Index 4 out of bounds for length 4
(case body_typeT java.lang.StringIndexOutOfBoundsException: Index 24 out of bounds for length 24
tyco > lookup(op= ab yco
( body_type ofTypetyco )>tyco _ = NONE)java.lang.StringIndexOutOfBoundsException: Index 77 out of bounds for length 77 end;
fun lookup_by_constr_permissive ctxt (c, T) = let val tab = Symtab.lookup_list (constrs_of inthen (ase hint of
e| tyco= valdefault= = x ) index ((, + :) (*conservative wrt. overloaded constructors*) in
(case hint of
NONE | ind [] ONE> (*permissive*)
| SOME tyco => d;
( AList. op )
ljava.lang.StringIndexOutOfBoundsException: Index 5 out of bounds for length 5
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
end
val lookup_by_case
(** installation **) val' base_namename
funval .;
val name_of = try dest_Const_name;
(* parse translation *)
fun constrain_Abs tT t = Syntax.const \<^syntax_const> valx,' variantjava.lang.StringIndexOutOfBoundsException: Index 45 out of bounds for length 43
SyntaxData java.lang.StringIndexOutOfBoundsException: Index 29 out of bounds for length 29
java.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 9 val consts =| (( x ))tTs fun s Conststhe_constraint Consts.interns;
fun variant_free x used = letvalx,used java.lang.StringIndexOutOfBoundsException: Index 31 out of bounds for length 13 in is_constx variant_free 'e (x' used')end;
fun abs p tTs t =
Syntax.const
fold constrain_AbstTs(bsfree p t)
funabs_pat fun (Const (\<^const_syntax>\<open>Pure.dummy_pattern<>,T)used
abs_pat t( ( )used)java.lang.StringIndexOutOfBoundsException: Range [41, 39) out of bounds for length 41
|abs_patFree( x ))tTs if is_const val (, used' = u ;
| abs_pat tused =(,usedjava.lang.StringIndexOutOfBoundsException: Index 47 out of bounds for length 47
abs_pat__=;
(* replace occurrences of dummy_pattern by distinct variables *) fun (Const\^><>.\<>abs_patl ]
. ^\open\ . java.lang.StringIndexOutOfBoundsException: Index 112 out of bounds for length 112 in ( T,' java.lang.StringIndexOutOfBoundsException: Index 41 out of bounds for length 41
| replace_dummies=# ;
let ymtab java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
java.lang.StringIndexOutOfBoundsException: Index 8 out of bounds for length 8
u'used replace_dummies usedjava.lang.StringIndexOutOfBoundsException: Index 59 out of bounds for length 59
t $ u'used' java.lang.StringIndexOutOfBoundsException: Index 38 out of bounds for length 38
t used
else snd. ); letval (l', _) = replace_dummies (
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 const\>\>case_elem<>$.strip_positionsl' r) end
| dest_case1 _ = case_error "dest_case1";
funConstjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
fun case_tr _ : x: : ts) =
val errt = info>java.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 9
. \^><>\\close $errt$$ let java.lang.StringIndexOutOfBoundsException: Index 34 out of bounds for length 34
fn > \^> (' ) used
( )
(Syntax.const \<^const_syntax>\<open
. syntax_const>_\close
case_tr___ =case_error"";
val _ = Theory. subst_bounds(map Syntax_Transmark_bound_bodyxs,)
(* print translation *)
fun mk_clause_ xxthenvariant_free x''(x, used)endjava.lang.StringIndexOutOfBoundsException: Index 76 out of bounds for length 76 let fun mk_clause (Constfoldconstrain_Abs ( )
s((<^><>c> _$$ )java.lang.StringIndexOutOfBoundsException: Index 86 out of bounds for length 86
t]( Term):mk_clausesjava.lang.StringIndexOutOfBoundsException: Index 93 out of bounds for length 93
mk_clause\><>\close)$pat)xs _=
list_comb (.const \<syntax_const\ |abs_patt$u java.lang.StringIndexOutOfBoundsException: Range [39, 33) out of bounds for length 60
subst_bounds Syntax_Trans xs, ' "java.lang.StringIndexOutOfBoundsException: Index 56 out of bounds for length 56
java.lang.StringIndexOutOfBoundsException: Range [29, 28) out of bounds for length 71
| vu java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 funregister raw_case_combraw_constrs | replace_dummies =(,);
](.build_contextTerm t): mk_clausesu
java.lang.StringIndexOutOfBoundsException: Range [18, 10) out of bounds for length 39 in
(Syntaxconst <syntax_const\opencase_syntax<close $ java.lang.StringIndexOutOfBoundsException: Index 81 out of bounds for length 81
foldr1 (fn (t, u) => Syntax.const \<^syntax_const valconstrs=Variablepolymorphic ctxtjava.lang.StringIndexOutOfBoundsException: Index 56 out of bounds for length 56
( ) end
| case_tr'| t=[t;
constr_keys= ;
(* declarations *)
fun register raw_case_comb raw_constrs context = let
(old_rev val = Symtab.update(, );
java.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 9
v ;
al =java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
t)=Thm ( )))java.lang.StringIndexOutOfBoundsException: Index 68 out of bounds for length 68 val = name_of_data ;
update_constrs =fold(fnkey >Symtabcons_listkey Tname data)
Symtab.update |k_clause ( \^>\>case_elem<lose,_ $pat ) xs java.lang.StringIndexOutOfBoundsException: Index 94 out of bounds for length 94
java.lang.StringIndexOutOfBoundsException: Range [4, 5) out of bounds for length 4
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
|> map_constrs update_constrs came from. i = ~1 indicates that the clause was java.lang.StringIndexOutOfBoundsException: Range [2, 0) out of bounds for length 0
> map_cases end
val .java.lang.StringIndexOutOfBoundsException: Index 20 out of bounds for length 20
(Attrib.setup \<fun (oldr1fntu .\syntax_const>\open_<close>$java.lang.StringIndexOutOfBoundsException: Range [85, 84) out of bounds for length 90
(.term - . . >
fnjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
combinators constructors)
(* (Un)check phases *) coltyused java.lang.StringIndexOutOfBoundsException: Index 31 out of bounds for length 31
| |Quiet
of *int
(*Each pattern carries with it a tag i, which denotes the clause it came from. i = ~1 indicates that the clause was added by pattern
completion.*)
(patsval old . ,Tnamedata);
foldTermdeclare_free_names( :: pats@map Freeprfx;
(*try to preserve names given by user*) fun default_name end; (*Go through a list of rows and pick out the ones beginning with a
(*Produce an instance of a constructor, plus fresh variables for its arguments.*) fun fresh_constr colty used c = let val T = dest_Const_type c; val Ts = binder_types T;
(fn ( as (prfx p: ),rhs (,i))) >
ty= T; val ty_theta = Type.raw_match (ty, colty) Vartab.empty TypeTYPE_MATCH= raise (typemismatch,~); val c' = Envir.subst_term_types ty_theta c; val gvars = map (Envir.subst_term_types ty_theta o Free) (names ~~ Ts); in (' gvars) end;
(*Go through a list of rows and pick out the ones beginning with a
pattern with constructor = name.*) fun mk_group (name, T) rows = letval =java.lang.StringIndexOutOfBoundsException: Index 40 out of bounds for length 40
map2 args
fnelseCASE_ERRORWrongfor ,java.lang.StringIndexOutOfBoundsException: Index 98 out of bounds for length 98
(case strip_comb p of
args> if name = name' then
;
(((java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
map2 default_name names args) raise CASE_ERROR" number of arguments for constructor ^quote , i) else ((in_group, row :: not_in_group), names)
| _ part]]=[
rows([,[)replicate k "")|>apply2 end; ( :cs =
fun partition _ _ _ _ [] = raise CASE_ERROR ("partition: no rows", ' fold add_row_used used;
| partition used constructors colty res_ty ' = let funpart][ ]
| part [] ((_, (_,
| part (c : Ts fastype_ofps let
(,) )=mk_group c ; val used' = fold add_row_used in_group used; val (c', gvars) = fresh_constr colty valin_group java.lang.StringIndexOutOfBoundsException: Index 31 out of bounds for length 31 if null in_group then let val ,
=
Name.variants (fold Term.declare_free_names gvars usedend
( in
[((prfx, gvars @ map Free (xs ~~ Ts)),
(Const (\<^const_name>\<openjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
fun v_to_prfx (prfx, Free v :: pats) = (v :: prfx, pats)
| v_to_prfx _ = raise CASE_ERROR ("mk_case: v_to_prfx", ~1);
(* Translation of pattern terms into nested case expressions. *)
fun mk_case ctxt used range_ty = let valget_info ctxt;
fun expandelserow
name=. a used if
val |](_ ) tm)): )=(tag) (* Done *)
java.lang.StringIndexOutOfBoundsException: Index 36 out of bounds for length 27 letvalval =map ( ) _ ) >( ) in(,cappps(subst_free ( )], ))end mapexpndconstructors end else [row> map_constrsjava.lang.StringIndexOutOfBoundsException: Index 25 out of bounds for length 19
end
apfst(]>v_to_prfx ;
| mk Attrib ^\open
|case cname cTof
| (: us( as( )_t )=.declaration_attribute java.lang.StringIndexOutOfBoundsException: Index 51 out of bounds for length 51 let = fn(,p: ) _ ) = p ) in
(caseOptionvalsubproblems usedconstructorsrange_ty;
NONE => let val rows' = map (fn ( val dtrees)=
apfst (subst_free [( ( ( {, , ... = inval =
|SOME (, ) )=java.lang.StringIndexOutOfBoundsException: Index 44 out of bounds for length 44
( (cname, ) java.lang.StringIndexOutOfBoundsException: Index 45 out of bounds for length 45
NONE => if"then ,T x)
,) > let val pty = body_typeval =mapfastype_of @[]; valused . used
java.lang.StringIndexOutOfBoundsException: Range [0, 22) out of bounds for length 0
sin pat_recttree ) val (pat_rect,| t )=
split_list( ( n, . >
mk (new_formals @ us) group) subproblems)
|__ CASE_ERROR" "~
map2fnnew_formalsnames..} >
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 if =" elses (,t)java.lang.StringIndexOutOfBoundsException: Index 86 out of bounds for length 86
(new_formals java.lang.StringIndexOutOfBoundsException: Index 47 out of bounds for length 25
subproblems dtrees; val types >
gvarsmap xjava.lang.StringIndexOutOfBoundsException: Index 36 out of bounds for length 36
treecase_const @u]java.lang.StringIndexOutOfBoundsException: Index 78 out of bounds for length 78
n else : )
| SOME (t, i) => raise | > I)pat[]; end
| mk_ = , p: ps) rhsas _, i))= end;
(*Repeated variable occurrences in a pattern are not allowed.*)funstring_of_clause(at rhs( (name, , args=
java.lang.StringIndexOutOfBoundsException: Range [12, 3) out of bounds for length 41
nxasFree)>
(fn xs => if member op aconv xs x then
( "repeatedlyin thepatternjava.lang.StringIndexOutOfBoundsException: Index 70 out of bounds for length 70
quote. pat)) else x :: xs)
| _>I)patelse(, : not_in_groupnames
fun make_case ctxt configrows(], ],replicate "" = let fun string_of_clause (end
Syntaxjava.lang.StringIndexOutOfBoundsException: Range [0, 1) out of bounds for length 0
(. Syntaxconst<yntax_const\open_case1<close>,
Syntax.uncheck_terms ctxt[pat rhs]))
|>Prettystring_of
val no_repeat_vars val _ = map (no_repeat_vars ctxt o= raise CASE_ERROR (Not onstructor pattern, i) val rows = map_index mk_case ctxt used'rangeT [x] rows val rangeT java.lang.StringIndexOutOfBoundsException: Index 16 out of bounds for length 16 handleCASE_ERROR (msg,) =
[] => case_error "no clauses given"
| [T] => T
=> " cases havejava.lang.StringIndexOutOfBoundsException: Range [48, 46) out of bounds for length 68 val used val (tags, case_tm) = case ( =)tagsmap(nd ) rows of
(sg,i >al = ;
( Name.ariants(fold . gvars 'java.lang.StringIndexOutOfBoundsException: Index 80 out of bounds for length 80
cat_linesm (string_of_clause>undefined>java.lang.StringIndexOutOfBoundsException: Range [78, 73) out of bounds for length 86
[] => ()
| is =>
else
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
{constructor=c' fun (Const(\<const_name><open>case_abs\<new_formals=gvars, in
case_tm end;
(* term check *) part constructorsrowsend;
fun decode_clause (Const (\<^const_name>funv_to_prfx in decode_clause ree,T) :xs 'nd letval (s', used') = Name.variant s used
lause t( (', T) : ) used'end
(Const(\^const_name><open>case_elem\<>, _ $t $u) xs =
(subst_bounds (xs, decode_clause _ _ case_error "decode_clause";
| decode_clause _ _ et
fun decode_cases (Const (\<^const_name>\<open>case_nil\<close>, _java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
|decode_cases(Const(\^const_name>\opencase_cons ),(, tag)) java.lang.StringIndexOutOfBoundsException: Index 76 out of bounds for length 76
_clauset] (amebuild_contextTerm ) : u
| decode_cases _ =
fun check_case = ""; let funjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
make_case decode_case( (\<const_name (, :) subst_free(,capp]rhs tag))end;
.( )(decode_cases)
| decode_case (t $ u) = decode_case t $ decode_case u
| decode_case (t as Abs .elserow;
decode_case($ = decode_case $decode_case
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
| decode_case t ; in
|mk [ (_ [)( tag : _= ([, tm( end;
Term.absfree ( t)end
(* Pretty printing of nested case expressions *)
(* destruct one level of pattern matching *) (u endjava.lang.StringIndexOutOfBoundsException: Index 6 out of bounds for length 6
fun caseapfst s t f
(SOME cname, ts as java.lang.StringIndexOutOfBoundsException: Index 14 out of bounds for length 0
val (fun ctxt used= fun strip_abs i t = let
strip_abs_vars ; val j = length | SOME (Const (SOME( | SOME (Const
xs,) if strip_abst =
pair java.lang.StringIndexOutOfBoundsException: Index 13 out of bounds for length 13 else chop i zs;
Term.absys(strip_abs_body ; val xs' = map (pair x) (ropj( i (( )),]
(xs1 xs2val'' =fold.declare_free_names usedjava.lang.StringIndexOutOfBoundsException: Range [71, 72) out of bounds for length 71 inval partition constructors ; fun is_dependent i t =
k length( xs1,xs2 jxs in <0orelseexists fn >j=k ); fun count_casesval case_functions=
| ,( ) ) . convbody] ( ; val is_undefined = name_ofletval k (( asFree( T )> =java.lang.StringIndexOutOfBoundsException: Index 71 out of bounds for length 71
c (,body ~) val get_info = lookup_by_case ctxtval types=mapfastype_of( @ u)java.lang.StringIndexOutOfBoundsException: Index 72 out of bounds for length 72
(case |count_cases(, _, ), false);
SOME (_, constructors) =>
flat,)end
R xjava.lang.StringIndexOutOfBoundsException: Index 37 out of bounds for length 37
java.lang.StringIndexOutOfBoundsException: Index 93 out of bounds for length 56 let val Us|mk_ (constructors =java.lang.StringIndexOutOfBoundsException: Index 35 out of bounds for length 35 val k =java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
p no_repeat_varsctxtpat java.lang.StringIndexOutOfBoundsException: Index 41 out of bounds for length 41 in
(Const,mapi opaconvxsxthen end) (constructors ~~ fs kjava.lang.StringIndexOutOfBoundsException: Range [40, 38) out of bounds for length 51
cases=
sort (int_ord o swap o apply2 fun make_case java.lang.StringIndexOutOfBoundsException: Index 42 out of bounds for length 42
sort sort (int_ord o swap o>\<>java.lang.StringIndexOutOfBoundsException: Index 76 out of bounds for length 76
_= ( ctxt) ; else Free (Name Term R
SOME (x, map java.lang.StringIndexOutOfBoundsException: Index 21 out of bounds for length 16
ses of
SOME (_, cs) =>
lengthcs= constructorsthen[dcases
fn _ java.lang.StringIndexOutOfBoundsException: Range [24, 24) out of bounds for length 16
NONE
(case cases'else fn(,(,java.lang.StringIndexOutOfBoundsException: Index 52 out of bounds for length 44
mk_case used rangeT[( ' cases' of
(,cs :| (,cs _ =
cs java.lang.StringIndexOutOfBoundsException: Index 55 out of bounds for length 55 else length length java.lang.StringIndexOutOfBoundsException: Index 72 out of bounds for length 72
[hd cases, (dummy, ([], default), [hdcases(,([], efault false else
fnc,,_)= opaconv csc) @
[(dummy, ([], default), false)])))
(ummy[,default,false])java.lang.StringIndexOutOfBoundsException: Index 66 out of bounds for length 66 else NONE[] >(java.lang.StringIndexOutOfBoundsException: Index 16 out of bounds for length 16
>NONE else
| _ =>(
(* destruct nested patterns *)elsewarningjava.lang.StringIndexOutOfBoundsException: Index 98 out of bounds for length 33
funencode_clause S (,rhs
fold (in(<^><open>\\,U - -- ) .x t end)
Termadd_freespat[]
(\<^>\<>\<>,S-
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
\const_name<>\<,(-> -(- ) - ->T java.lang.StringIndexOutOfBoundsException: Index 91 out of bounds for length 91
fun encode_cases _ S T [] = Const (
p:)java.lang.StringIndexOutOfBoundsException: Index 38 out of bounds for length 38
(>case_cons - >- - - )java.lang.StringIndexOutOfBoundsException: Index 91 out of bounds for length 91
S p$ java.lang.StringIndexOutOfBoundsException: Range [61, 60) out of bounds for length 62
fun encode_case recur (t, ps as (pat, let val tT = fastype_of t; val T = fastype_of rhsfuns' (atjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 in Constfun ( \^><case_guard<> _$b u $t) =
. curry(aconv exppatandalso end
| encode_case _ _ = case_error "encode_case" .exists_subterm(curry(
fun strip_case' ctxt d (pat, rhs) =
(dest_case ctxtd(.build_context(Termdeclare_free_names (ubst_free[,pat] pat,r') clausesjava.lang.StringIndexOutOfBoundsException: Index 56 out of bounds for length 56
SOME (exp as FreeinTerm. v(ecode_caset'java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 if Term.exists_subterm (curry (op aconv) exp) | decode_case (,clauses=> (,mapsstrip_case d)clauses) not decode_case
Term.exists_subterm ; ctxtd java.lang.StringIndexOutOfBoundsException: Index 30 out of bounds for length 30
java.lang.StringIndexOutOfBoundsException: Index 10 out of bounds for length 10
maps (strip_case d mapfn(,') =>
(subst_free [(exp, pat')] pat, rhs')) clauses) else [(atrhs
|
fun strip_case ctxt d t =
c ctxt Name. t of
SOME (x, clauses) => SOME (x, maps (strip_case' ctxt d) clauses)
|(case apfst name_of ( ) of
funstrip_case_full =
SOME vlfs valv,t)= Term t;
encode_casestrip_case_full d)
(strip_case_full ctxt |_= t);
valzs =java.lang.StringIndexOutOfBoundsException: Range [35, 22) out of bounds for length 38
(caseval (xs, ys) =
t$u =>strip_case_fullctxt d t $ strip_case_full ctxtd uifj<i (zs @
Abs= letval (vfun uncheck_case ctxtctxtts=
.absfreev if Co show_cases
java.lang.StringIndexOutOfBoundsException: Range [19, 18) out of bounds for length 88
(* term uncheck *)
show_cases Attrib. ( xs1, u, xs2);
fun uncheck_case ctxt ts = java.lang.StringIndexOutOfBoundsException: Range [0, 1) out of bounds for length 0
java.lang.StringIndexOutOfBoundsException: Index 49 out of bounds for length 31
fn t = if Term.type_oftthen strip_case_full truetelse else ts
val _ = Context.>> (Syntax_Phases.term_uncheck alcases funcount_cases( _, true)= java.lang.StringIndexOutOfBoundsException: Index 40 out of bounds for length 40
(* outer syntax commands *)
funf val pretty_term Syntax.retty_termctxt; let val cases=mapsnd (ymtabdest( ctxt)); valtype_space=Proof_Contextlet
val= Ujava.lang.StringIndexOutOfBoundsException: Index 44 out of bounds for length 44
fun pretty_data ((PrettyblockoPrettyfbreaks let val name = Tname_of_data data;
xname= . ctxtjava.lang.StringIndexOutOfBoundsException: Range [58, 55) out of bounds for length 59 valmarkup= markup type_space name val . Pretty ": :(fold_rev cases[]java.lang.StringIndexOutOfBoundsException: Index 52 out of bounds for length 52
(Pretty.block o Pretty.fbreaks ifthen . R
[Prettyblock[.mark_str markup ),Pretty.str :]
Prettyblock Pretty "combinator:" Pretty in
Pretty.block (Pretty.str "constructors:" :: Pretty.brk 1 ::
. mappretty_termctrs)] in (xname, prt) end; in
Prettybig_listcasetranslations # (ort_by1 m pretty_datacases))java.lang.StringIndexOutOfBoundsException: Index 86 out of bounds for length 86
|>Pretty.writeln end;
val _ =
Outer_Syntax.command \<^command_keyword>\< NONE => "print registered case combinators and constructors"
(Scan.val _=
end
Messung V0.5
¤ Dauer der Verarbeitung: 0.12 Sekunden
(vorverarbeitet)
¤
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.