src/HOL/List.thy
changeset 42057 3eba96ff3d3e
parent 41986 95a67e3f29ad
child 42144 15218eb98fd7
equal deleted inserted replaced
42056:160a630b2c7e 42057:3eba96ff3d3e
   382 
   382 
   383   fun pat_tr ctxt p e opti = (* %x. case x of p => e | _ => [] *)
   383   fun pat_tr ctxt p e opti = (* %x. case x of p => e | _ => [] *)
   384     let
   384     let
   385       val x = Free (Name.variant (fold Term.add_free_names [p, e] []) "x", dummyT);
   385       val x = Free (Name.variant (fold Term.add_free_names [p, e] []) "x", dummyT);
   386       val e = if opti then singl e else e;
   386       val e = if opti then singl e else e;
   387       val case1 = Syntax.const @{syntax_const "_case1"} $ p $ e;
   387       val case1 = Syntax.const @{syntax_const "_case1"} $ Syntax.strip_positions p $ e;
   388       val case2 =
   388       val case2 =
   389         Syntax.const @{syntax_const "_case1"} $
   389         Syntax.const @{syntax_const "_case1"} $
   390           Syntax.const @{const_syntax dummy_pattern} $ NilC;
   390           Syntax.const @{const_syntax dummy_pattern} $ NilC;
   391       val cs = Syntax.const @{syntax_const "_case2"} $ case1 $ case2;
   391       val cs = Syntax.const @{syntax_const "_case2"} $ case1 $ case2;
   392       val ft = Datatype_Case.case_tr false Datatype.info_of_constr ctxt [x, cs];
   392       val ft = Datatype_Case.case_tr false Datatype.info_of_constr ctxt [x, cs];