diff -r f5c5006d142e -r dbf68dbacaff src/CCL/Term.thy --- a/src/CCL/Term.thy Mon Oct 04 17:22:17 2021 +0200 +++ b/src/CCL/Term.thy Mon Oct 04 17:46:18 2021 +0200 @@ -46,14 +46,11 @@ where "ncase(n,b,c) == when(n, \x. b, \y. c(y))" -no_syntax - "_Let" :: "[letbinds, 'a] => 'a" ("(let (_)/ in (_))" 10) +definition "let1" :: "[i,i\i]\i" + where let_def: "let1(t, f) == case(t,f(true),f(false), \x y. f(), \u. f(lam x. u(x)))" -definition "let" :: "[i,i\i]\i" - where "let(t, f) == case(t,f(true),f(false), \x y. f(), \u. f(lam x. u(x)))" - -syntax - "_Let" :: "[letbinds, 'a] => 'a" ("(let (_)/ in (_))" 10) +syntax "_let1" :: "[idt,i,i]\i" ("(3let _ be _/ in _)" [0,0,60] 60) +translations "let x be a in e" == "CONST let1(a, \x. e)" definition letrec :: "[[i,i\i]\i,(i\i)\i]\i" where "letrec(h, b) == b(\x. fix(\f. lam x. h(x,\y. f`y))`x)" @@ -68,7 +65,6 @@ \g'. f(\x y z. g'(>)))" syntax - "_let" :: "[id,i,i]\i" ("(3let _ be _/ in _)" [0,0,60] 60) "_letrec" :: "[id,id,i,i]\i" ("(3letrec _ _ be _/ in _)" [0,0,0,60] 60) "_letrec2" :: "[id,id,id,i,i]\i" ("(3letrec _ _ _ be _/ in _)" [0,0,0,0,60] 60) "_letrec3" :: "[id,id,id,id,i,i]\i" ("(3letrec _ _ _ _ be _/ in _)" [0,0,0,0,0,60] 60) @@ -79,11 +75,6 @@ (* FIXME does not handle "_idtdummy" *) (* FIXME should use Syntax_Trans.mark_bound, Syntax_Trans.variant_abs' *) -fun let_tr [Free x, a, b] = Syntax.const \<^const_syntax>\let\ $ a $ absfree x b; -fun let_tr' [a,Abs(id,T,b)] = - let val (id',b') = Syntax_Trans.variant_abs(id,T,b) - in Syntax.const \<^syntax_const>\_let\ $ Free(id',T) $ a $ b' end; - fun letrec_tr [Free f, Free x, a, b] = Syntax.const \<^const_syntax>\letrec\ $ absfree x (absfree f a) $ absfree f b; fun letrec2_tr [Free f, Free x, Free y, a, b] = @@ -121,15 +112,13 @@ \ parse_translation \ - [(\<^syntax_const>\_let\, K let_tr), - (\<^syntax_const>\_letrec\, K letrec_tr), - (\<^syntax_const>\_letrec2\, K letrec2_tr), - (\<^syntax_const>\_letrec3\, K letrec3_tr)] + [(\<^syntax_const>\_letrec\, K letrec_tr), + (\<^syntax_const>\_letrec2\, K letrec2_tr), + (\<^syntax_const>\_letrec3\, K letrec3_tr)] \ print_translation \ - [(\<^const_syntax>\let\, K let_tr'), - (\<^const_syntax>\letrec\, K letrec_tr'), + [(\<^const_syntax>\letrec\, K letrec_tr'), (\<^const_syntax>\letrec2\, K letrec2_tr'), (\<^const_syntax>\letrec3\, K letrec3_tr')] \