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 |