Isabelle 带运算符的let语句
我发现自己经常想写这种形式的表达Isabelle 带运算符的let语句,isabelle,Isabelle,我发现自己经常想写这种形式的表达 let x = SOME x. x ∈ e1 in e2 就是,;让x成为e2中e1的任意成员。它相当冗长,而且必须绑定x两次似乎有点奇怪。有没有更简洁的方法来表达这一点?我检查了e2语法中的let x=e1()的处理方式,发现我可以复制该机制来提供一个新的let x∈ e2中的e1语法。这是我的代码(我刚刚把let改名为lett): 作为快速测试: value "let x ∈ {2::int,3} in x+x" 我检查了e2语法中的let x=e1的
let x = SOME x. x ∈ e1
in e2
就是,;让
x
成为e2
中e1
的任意成员。它相当冗长,而且必须绑定x
两次似乎有点奇怪。有没有更简洁的方法来表达这一点?我检查了e2语法中的let x=e1()的处理方式,发现我可以复制该机制来提供一个新的let x∈ e2中的e1
语法。这是我的代码(我刚刚把let
改名为lett
):
作为快速测试:
value "let x ∈ {2::int,3} in x+x"
我检查了e2
语法中的let x=e1的处理方式(),发现我基本上可以复制该机制来提供一个新的let x∈ e2中的e1
语法。这是我的代码(我刚刚把let
改名为lett
):
作为快速测试:
value "let x ∈ {2::int,3} in x+x"
有一个比从HOL复制let
的设置更简单的解决方案,即通过为letbind
提供另一个产品来扩展let
的现有语法翻译
abbreviation Let_SOME :: "'a set => ('a => 'b) => 'b"
where "Let_SOME s f == let x = SOME x. x ∈ s in f x"
syntax
"_bindSOME" :: "[pttrn, 'a] => letbind" ("(2_ ∈/ _)" 10)
translations
"let x ∈ a in e" == "CONST Let_SOME a (%x. e)"
与单机解决方案相比,这有一个优势,即您可以将传统的let
绑定与新绑定混合使用,如中所示
term "let x = 5; y ∈ {1,2}; z = 6 in x + y + z"
有一个比从HOL复制let
的设置更简单的解决方案,即通过为letbind
提供另一个产品来扩展let
的现有语法翻译
abbreviation Let_SOME :: "'a set => ('a => 'b) => 'b"
where "Let_SOME s f == let x = SOME x. x ∈ s in f x"
syntax
"_bindSOME" :: "[pttrn, 'a] => letbind" ("(2_ ∈/ _)" 10)
translations
"let x ∈ a in e" == "CONST Let_SOME a (%x. e)"
与单机解决方案相比,这有一个优势,即您可以将传统的let
绑定与新绑定混合使用,如中所示
term "let x = 5; y ∈ {1,2}; z = 6 in x + y + z"