在 Isabelle 等中定义不同类型的不相交并集

2023-12-11

我问了一系列问题,直到我可以在 Isabelle 中定义以下简单模型,但我仍然坚持得到我想要的东西。我尝试用一​​个例子来非常简短地描述这个问题:

Example:

假设我有两节课Person and Car, Person owns汽车还有drives汽车。所以我需要以下类型/集:

Person

Car

owns(* 拥有 Person 与 Car 的相关元素 *)

drives(* 驱动器也将人的元素与汽车相关联 *)

Problem:

我想用 Isabelle 来表述上面的例子是一种提供以下灵活性的方式:

  1. 使我能够定义一些约束;例如:如果一个人拥有一辆车,他/她肯定会驾驶这辆车。我可以通过使用来自的友善回答来做到这一点here.

  2. 让我能够定义一个新的集合/类型C其元素是元素的不相交并Car and owns. This 是我第一个卡住的地方: Car and owns是不同的类型,那么我如何将它们结合起来?

  3. 能够多次继续该过程(2);例如,定义一个新类型/集合,即D这是 的不相交并集C and drives.

在第(2)和(3)中,我想保留新定义的集合/类型的元素的属性/特征;例如,如果我定义了一个属性age对于一个人(参见here),我想要以下元素C保留此属性是因为我可以访问其中元素的此属性C其类型为 Person。因此,如果 o1 是C其类型是owns,我想访问与 o1 相关的源(即人)和目标(汽车)。

我将不胜感激任何意见和建议。


有 sum-类型,写成'a + 'b,在 Isabelle/HOL 中,允许您将两种不同类型的元素组合成一个新的元素。 sum 类型的两个构造函数是

Inl :: 'a => 'a + 'b

for 向左注射 and

Inr :: 'b => 'a + 'b

for 注射正确。例如,使用 sum-type 您可以组合数字列表nat list用普通数字nat获得(nat list) + nat。由于列表提供了一个函数length :: 'a list => nat,您仍然可以对不相交和的元素(您知道它们是列表)使用此函数。为了获取此信息(即,您查看的元素是列表还是普通数字),我们通常使用模式匹配.

如果当前元素是列表,则以下函数将计算列表的长度,并仅返回它表示的数字,否则。

fun maybe_length :: "(nat list) + nat => nat"
where
  "maybe_length (Inl xs) = length xs" |
  "maybe_length (Inr n) = n"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Isabelle 等中定义不同类型的不相交并集 的相关文章

  • 使用单射函数的反值

    我试图证明这个引理 lemma assumes x inv f y and inj f and x undefined shows y range f using assms try 但 Nitpick 告诉我这个说法并不正确 Trying
  • 当证明已经完成但给出“无法完善任何待定目标”错误时,为什么我不能在 Isabelle 中明确说明我的情况?

    我正在阅读具体语义的第五章 我在处理这个玩具示例证明时遇到了一些错误 lemma shows ev Suc 0 我知道这超出了需要 因为by cases 神奇地解 决了所有问题并给出了完整的证明 但我想明确说明这些情况 我试过这个 lemm
  • 在《伊莎贝尔》中证明关于 THE 的直观陈述

    我想证明伊莎贝尔中类似的引理 lemma assumes y THE x P x shows P THE x P x 我想这个假设意味着THE x P x存在并且定义明确 所以这个引理也应该是正确的 lemma assumes y THE
  • 在 Isabelle 等中定义不同类型的不相交并集

    我问了一系列问题 直到我可以在 Isabelle 中定义以下简单模型 但我仍然坚持得到我想要的东西 我尝试用一 个例子来非常简短地描述这个问题 Example 假设我有两节课Person and Car Person owns汽车还有dri
  • 如何在 Isabelle 中定义偏函数?

    我尝试用以下方法定义偏函数partial function关键词 它不起作用 这是最能表达直觉的 partial function tailrec oddity nat gt nat where oddity Zero Zero oddit
  • Isabelle:向量中的最大值

    我想找到自然数向量中的最大值 然而 向量 即 vec 是与集合或列表不同的类型 我考虑了几个行不通的想法 比如调平或提升 vec 的类型或递归函数的定义 您建议采用什么解决方案来获得向量中的最大值 IMPORTS src HOL Algeb
  • 仅数学证明助理

    大多数证明助手都是具有依赖类型的函数式编程语言 他们可以证明程序 算法 相反 我感兴趣的是最适合数学且仅适合数学 例如微积分 的证明助手 你能推荐一个吗 我听说过 Mizar 但我不喜欢源代码被关闭 但如果它最适合数学 我会使用它 Agda
  • 如何使用持久堆图像在 Isabelle/jEdit 中更快地加载理论?

    假设我有一个目录isabelle afp存储了很多理论的地方 该目录是一个库 我不打算更改其中的文件 我想加快 Isabelle jEdit 的启动时间 默认情况下 所有理论isabelle afp我当前的理论取决于重新处理 我怎样才能跳过
  • 伊莎贝尔语中的“arith”和“presburger”有什么区别?

    到目前为止 我在伊莎贝尔遇到的每一个目标都可以通过使用来解决arith也可以通过以下方式解决presburger反之亦然 例如 lemma odd n nat Suc 2 n div 2 n by presburger or arith 这
  • 伊莎贝尔:setprod 的问题

    以下等式在伊莎贝尔中是否成立 setprod f UNIV n finite set setprod x x f UNIV n finite set 如果是 我该如何证明 tested with Isabelle2013 2 theory
  • Isabelle函数定义实例分析

    想象一下我有一个包含三种情况的函数定义 function f where eq1 if cond1 eq2 if cond2 eq3 if cond3 我怎样才能证明一些方程 f x y f y x 使用左侧的案例分析 仅编写 apply
  • 伊莎贝尔证明加法的交换律

    我试图证明 Isabelle HOL 中自定义的交换律add功能 我设法证明了关联性 但我坚持这一点 的定义add fun add nat nat nat where add 0 n n add Suc m n Suc add m n 关联
  • 隐藏运算符以避免 AST 中出现歧义

    我正在尝试伊莎贝尔官方教程中的列表示例 我更换了 with 和 with 具有与 Haskell 相同的语法 现在我收到有关 AST 中含糊之处的警告 我知道我可以隐藏功能hide const但这对于中缀表示法的运算符不起作用 如何在伊莎贝
  • 伊莎贝尔和斯卡拉[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在考虑创建 Eclipse PDE 并且需要与 Isabelle 进行通信 我确实发现一些出版物声
  • Isabelle 返回数字而不是 Suc(Suc( ... 0 ))

    当我使用value为了找出返回自然数的函数的某个值 我总是以 0 的迭代后继函数的形式获得答案 即Suc Suc 0 有时可能很难阅读 有没有办法直接输出Isabelle返回的数字 这是我不久前想修复的问题 但显然我忘记了 卡西吉奈特的猜测
  • 如何让 typedef 类型从类型类的母类型继承运算符

    发布答案后续问题 Brian 提供了答案 并建议使用提升和转移的解决方案 然而 我找不到足够的关于举重和转移的教程信息 无法知道如何调整他的答案来完成我需要做的事情 在这里 我在黑暗中工作 并使用给出的答案作为即插即用模板来提出这个后续问题
  • 伊莎贝尔案例分析

    如何在伊莎贝尔中应用案例分析 我正在寻找类似的东西apply induct x 用于归纳 案例分析通常是通过cases方法 另见索引中的 案例 方法 伊莎贝尔 伊萨尔参考手册 http isabelle in tum de website
  • 法新社的“find_theorems”

    我怎样才能使用find theorems搜索整个正式证据档案馆 AFP 的机制 我已将存档下载到我的计算机上 并且可以从中导入理论 例如 如果我写imports Kleene Algebra Kleene Algebra Models那么该
  • 修复区域设置扩展中的类型变量

    鉴于此代码 locale A fixes foo a locale B A fixes bar a a locale C A fixes baz a begin sublocale B foo foo baz end I get Type
  • 添加后收集所有非未定义值

    我对伊莎贝尔有以下补充 function proj add real real bit real real bit real real bit where proj add x1 y1 l x2 y2 j add x1 y1 x2 y2 l

随机推荐

  • 用特殊字符填充文本区域

    我正在使用用户之前的输入填充文本区域 这是从数据库中提取并设置为文本区域服务器端的内容 我们似乎遇到了拼写错误和特殊字符组合的问题 如果用户输入 6最初 当我尝试用它填充我的文本区域时 它只是呈现一个小正方形 就像它解释字符编码值一样 使用
  • 针对非类型参数的特定值的模板代码优化。

    template
  • 查找近似重复记录的技术

    我正在尝试清理一个数据库 多年来该数据库已获取许多重复记录 且名称略有不同 例如 在公司表中 有 Some Company Limited 和 SOME COMPANY LTD 之类的名称 我的计划是将有问题的表导出到 R 中 将名称转换为
  • 如何在命令行中使用 Robocopy 复制带时间戳的文件

    以下是我将计算机中的文件复制以及从计算机复制到网络的命令 ROBOCOPY K Builds F Builds E COPY DAT ROBOCOPY E K Shan Khan E COPY DAT 我怎么能在目标文件夹中创建时间戳仅在复
  • 如何使用txt文件作为命令行参数?

    我有一个像这样的 txt 文件 6 4 1 2 2 3 3 4 4 5 1 2 4 5 如何在 C 中使用它作为命令行参数 如果您打算提供您的程序数据program exe lt data txt 这就是所谓的从标准输入读取 您可以通过 N
  • 如何接收 OS X 中文件系统更改的通知?

    在 Windows 中 我可以使用 FindNextChangeNotification API 来监视文件或文件夹的更改 例如 我可以监视文件夹并在添加或删除文件时收到通知 OS X 上有类似的 API 吗 Mac OS X v10 5
  • BZIP2块标头:1AY&SY

    这是关于BZIP2的问题存档格式 任何BZIP2存档都由文件标头 一个或多个块和尾巴结构组成 所有块应从 1AY SY 开始 pi号的BCD编码数字为6个字节 0x314159265359 根据BZIP2的来源 A 6 byte block
  • VBA中MSSQL“走”的正确使用

    我即将运行一个使用 MSSQL 编写的批处理 如下所示 create function xy end go create function2 xy end go 然后 我将它保存在一个文件中 我的宏将其读入一个字符串并使用 ADO 尝试运行
  • Angular 2 Reactive Forms 仅从更改的控件中获取值

    我有一个包含所有输入的动态创建的表单 我正在订阅更改 但是当某个控件发生更改时 我会从所有控件中获取值 因此我真的不知道哪个控件发生了更改 是否可以使用 valueChanges 函数仅从更改的控件中获取更改的值 该表单非常大 因此将每个控
  • java中的复选框数组

    我想要 6 个复选框 并在按下按钮后执行一些操作 您有例子吗 还可以使用复选框数组吗 我想避免 Checkbox cb1 new Checkbox A Checkbox cb2 new Checkbox B 我正在做类似的事情 JPanel
  • 从另一个视图调用一个视图

    我有一个登录 phtml视图想要放置一个公共路径并让任何模块通过应用程序访问它 对于由以下方式渲染的侧边栏 this gt render common sidebar phtnl 它可以工作 因为我的布局对于所有模块都是单一的 但说到内容
  • 基于XmlChoiceIdentifier创建对象

    我正在使用 Activator C 动态创建对象 其中一个类如下所示 class Driver Driver XmlChoiceIdentifier ItemElementName XmlElement Bit16 typeof Drive
  • 为什么 PHP 会话在页面重新加载时被删除?

    所以我遇到了这个问题 当我在页面上一段时间没有执行任何操作时 在重新加载页面后 SESSION已清除 我检查了代码 它没有任何unset 功能或任何其他可以清除 SESSION多变的 任何想法为什么会发生 Edit 如果我想让会话一直持续到
  • 通过样式更改操作栏溢出菜单项的高度

    我们正在开发一款用于工业用途的 Android 应用程序 我们增加了操作栏 文本等的大小 以帮助提高可见性和触摸目标大小 一切正常 但是我无法增加操作栏溢出菜单列表项的高度 挖掘周围我已经能够使用更改弹出菜单的背景颜色
  • 在方法中返回 Meteor.http 结果

    我有一个围绕 http get 的 Meteor 方法 我试图将 http get 的结果返回到方法的返回中 以便在调用该方法时可以使用结果 但我无法让它发挥作用 这是我的代码 在共享文件夹中 Meteor methods getWeath
  • 如何使用 JQuery 在输入类型文件中验证文件扩展名?

    HTML
  • 对子集使用表可获取整个 DF 而不是子集的频率

    我正在使用子集从列值集中提取 我有一个包含几列的 DF 其中一列是状态 我需要获取状态的频率 但只是针对某些状态集 所以我有这个 tmp lt subset DF DF STATE in SOMESTATES a lt as data fr
  • C# 从网络服务下载文件

    我有一个网络服务 比如这个例子用于从服务器下载 zip 文件 当我通过网络浏览器打开 URL 时 我可以正确下载 zip 文件 问题是当我尝试通过桌面应用程序下载 zip 文件时 我使用以下代码进行下载 WebClient webClien
  • _mm_extract_epi8(...) 采用非文字整数作为参数的内在函数

    我最近一直在使用 SSE 内在函数int mm extract epi8 m128i src const int ndx 根据参考文献 从按索引选择的打包整数数组元素中提取整数字节 这正是我想要的 但是 我通过以下方式确定索引 mm cmp
  • 在 Isabelle 等中定义不同类型的不相交并集

    我问了一系列问题 直到我可以在 Isabelle 中定义以下简单模型 但我仍然坚持得到我想要的东西 我尝试用一 个例子来非常简短地描述这个问题 Example 假设我有两节课Person and Car Person owns汽车还有dri