src/HOL/HOLCF/Cfun.thy
changeset 42224 578a51fae383
parent 42151 4da4fc77664b
child 42264 b6c1b0c4c511
equal deleted inserted replaced
42223:098c86e53153 42224:578a51fae383
    54 parse_ast_translation {*
    54 parse_ast_translation {*
    55 (* rewrite (LAM x y z. t) => (_cabs x (_cabs y (_cabs z t))) *)
    55 (* rewrite (LAM x y z. t) => (_cabs x (_cabs y (_cabs z t))) *)
    56 (* cf. Syntax.lambda_ast_tr from src/Pure/Syntax/syn_trans.ML *)
    56 (* cf. Syntax.lambda_ast_tr from src/Pure/Syntax/syn_trans.ML *)
    57   let
    57   let
    58     fun Lambda_ast_tr [pats, body] =
    58     fun Lambda_ast_tr [pats, body] =
    59           Syntax.fold_ast_p @{syntax_const "_cabs"}
    59           Ast.fold_ast_p @{syntax_const "_cabs"}
    60             (Syntax.unfold_ast @{syntax_const "_cargs"} (Syntax.strip_positions_ast pats), body)
    60             (Ast.unfold_ast @{syntax_const "_cargs"} (Syntax.strip_positions_ast pats), body)
    61       | Lambda_ast_tr asts = raise Syntax.AST ("Lambda_ast_tr", asts);
    61       | Lambda_ast_tr asts = raise Ast.AST ("Lambda_ast_tr", asts);
    62   in [(@{syntax_const "_Lambda"}, Lambda_ast_tr)] end;
    62   in [(@{syntax_const "_Lambda"}, Lambda_ast_tr)] end;
    63 *}
    63 *}
    64 
    64 
    65 print_ast_translation {*
    65 print_ast_translation {*
    66 (* rewrite (_cabs x (_cabs y (_cabs z t))) => (LAM x y z. t) *)
    66 (* rewrite (_cabs x (_cabs y (_cabs z t))) => (LAM x y z. t) *)
    67 (* cf. Syntax.abs_ast_tr' from src/Pure/Syntax/syn_trans.ML *)
    67 (* cf. Syntax.abs_ast_tr' from src/Pure/Syntax/syn_trans.ML *)
    68   let
    68   let
    69     fun cabs_ast_tr' asts =
    69     fun cabs_ast_tr' asts =
    70       (case Syntax.unfold_ast_p @{syntax_const "_cabs"}
    70       (case Ast.unfold_ast_p @{syntax_const "_cabs"}
    71           (Syntax.Appl (Syntax.Constant @{syntax_const "_cabs"} :: asts)) of
    71           (Ast.Appl (Ast.Constant @{syntax_const "_cabs"} :: asts)) of
    72         ([], _) => raise Syntax.AST ("cabs_ast_tr'", asts)
    72         ([], _) => raise Ast.AST ("cabs_ast_tr'", asts)
    73       | (xs, body) => Syntax.Appl
    73       | (xs, body) => Ast.Appl
    74           [Syntax.Constant @{syntax_const "_Lambda"},
    74           [Ast.Constant @{syntax_const "_Lambda"},
    75            Syntax.fold_ast @{syntax_const "_cargs"} xs, body]);
    75            Ast.fold_ast @{syntax_const "_cargs"} xs, body]);
    76   in [(@{syntax_const "_cabs"}, cabs_ast_tr')] end
    76   in [(@{syntax_const "_cabs"}, cabs_ast_tr')] end
    77 *}
    77 *}
    78 
    78 
    79 text {* Dummy patterns for continuous abstraction *}
    79 text {* Dummy patterns for continuous abstraction *}
    80 translations
    80 translations