Isabelle 完全替换isar中的内部语法?

Isabelle 完全替换isar中的内部语法?,isabelle,j,isar,Isabelle,J,Isar,我对使用Isar作为一种元语言来编写关于可执行数学符号和编程语言的正式证明感兴趣,我希望能够使用J作为内部语法 J包含大量的,并为每个ASCII字符指定(多个!)含义,包括单引号和双引号 在哪里可以找到实现全新内部语法的文档或示例代码?或者这可能吗?(我一直在src/目录中查找,但它有点让人不知所措,我也不完全确定我在寻找什么。)答案B:基于HOL,使用一种即兴的J语法 澄清是好的,但我不喜欢做必要的握手 我下面的第一个答案主要是基于你的短语“一种全新的语法”,我认为这是对这样一个问题的一半回答

我对使用Isar作为一种元语言来编写关于可执行数学符号和编程语言的正式证明感兴趣,我希望能够使用J作为内部语法

J包含大量的,并为每个ASCII字符指定(多个!)含义,包括单引号和双引号

在哪里可以找到实现全新内部语法的文档或示例代码?或者这可能吗?(我一直在
src/
目录中查找,但它有点让人不知所措,我也不完全确定我在寻找什么。)

答案B:基于HOL,使用一种即兴的J语法 澄清是好的,但我不喜欢做必要的握手

我下面的第一个答案主要是基于你的短语“一种全新的语法”,我认为这是对这样一个问题的一半回答:

notation (input) even ("even _" [1000] 1000)
notation (output) even ("even _" [1000] 999)
假设,我需要非常接近J语法的语法。对于Isabelle/HOL,这需要什么

我的答覆是:

  • 最有可能的是,我认为您必须取消定义Isabelle/HOL的常量、函数和类型类的大部分语法,这需要您对标准Isabelle/HOL发行版进行广泛编辑,以使其恢复工作。在Isabelle/HOL中的一些语法,你很可能无法去掉
  • 或者,您必须重新开始,以导入
    Pure
    作为起点。请看下面我的第一个答案
  • 只是语法?现在我们回到了正常的用户空间 Isabelle/HOL中的语法定制让我们都成为了潜在的真正的艺术家

    有一些高级方法可以利用定义语法的能力,例如使用Isabelle/ML的
    parse_translation
    ,但我不使用高级方法。我使用几个基本关键字来定义语法:
    表示法
    无表示法
    语法
    翻译
    ,以及
    缩写
    ,当我想重新排列函数的输入参数,或者我不想弄乱标准HOL函数的表示法时

    表示法
    无表示法
    ,简单的 我不经常使用
    无符号
    ,但你需要在你的武器库中使用它。有关示例,请参见

    只要您看到一些示例,使用
    表示法
    就很容易了

    对于中缀运算符,
    plus::'a=>'a=>'a
    ,以下是一些示例:

    notation plus (infixl "[+]" 65)
    
    notation (input) plus (infixl "[+]" 65)
    
    notation (output) plus (infixl "[+]" 65)
    
    通过这个例子,我进入了一个可能弄乱
    plus
    符号的领域,这是一个标准的HOL类型类的操作符

    上面不会弄乱输出显示的行是使用
    (输入)
    的行

    对于
    notation
    ,要查找示例,请在您的文件或
    src/HOL
    文件夹中使用greps,因为这里的变体太多,无法提供大量示例

    缩写
    ,并且不会把其他事情弄糟 假设我希望标准
    偶数
    谓词有一个非常紧密的绑定。我可以这样做:

    notation (input) even ("even _" [1000] 1000)
    notation (output) even ("even _" [1000] 999)
    
    我说“可以”,因为我不知道这将如何打乱
    甚至
    的标准函数应用程序,所以我不想这样做

    为什么
    999
    ?这只是从反复试验和经验中得出的结论,我知道这下一行就把
    declare[[show_方括号]]

    notation even ("even _" [1000] 1000)
    
    这就是定义语法的方式。这是一个尝试和错误的结合,找到用作模板的例子,体验,以及以后注意到你把事情搞砸了

    我忘记了所有能帮我解决的事情。创新地使用
    缩写
    可以避免使用更复杂的方法

    您可以使用它来重新排列参数,以达到某种符号化的目的:

    abbreviation list_foo :: "'a list => 'a => 'a list" where
      "list_foo xs x == x # xs"
    notation 
      list_foo ("_ +#+ _" [65, 65] 64)
    
    这个例子是几个例子中的一个例子。我只是想做一个简单的例子,我有一些类似于
    (infixl“#+#+!”[65,65]64)
    。我定义符号的方式没有太多变化,所以我必须在
    Set.thy
    中找到一个例子,告诉我我需要取出
    infixl
    ,因为我想使用
    [65,65]64
    作为定义语法的变体

    使用
    [65,65]64
    时,我的优先级是否正确?我不知道。这只是一个简单的例子

    语法
    翻译
    你必须把它放在你的武器库里,但它会给你带来很多耗时的悲伤。做greps并找到例子。试试这个和那个。当你偶然发现一些有用的东西,并且你认为你需要它时,把它保存在某个地方。如果你不这样做,并且你做了一个小小的改变,打破了你所拥有的,并且你没有保存你曾经工作过的东西,你会后悔花了很多时间试图恢复工作

    他有一些信息。此外,您还可以在该PDF中查找
    符号的用法

    答案B部分的未询问部分 在你的评论中,你这样说:

    我已经有了一个我想要实现的“编程逻辑”,而J是一种特别适合于形式证明的语言。我只是想弄清楚如何重用Isabelle的逻辑基础结构,而不是自己编写

    对于这样一个问题,任何人都会给出一个简短的、不安全的回答,即使是模糊的回答,就像:

    在《伊莎贝尔/荷尔》中,你很可能做不到你想对J做什么

    更安全、简短的回答如下:

    notation (input) even ("even _" [1000] 1000)
    notation (output) even ("even _" [1000] 999)
    
    最有可能的是,在Isabelle/HOL中,如果你想用J做你想做的事情,你会遇到很大的问题

    这些都是简短、快速的答案。如果一个问题真的试图解决“为什么”,那么这个问题的答案怎么可能简短呢

    它最终成为了一个“我知道的一切”的答案,因为很多时候它并不是不能做到的
    setup {* Object_Logic.add_base_sort @{sort type} *}