AGDA 中极浅嵌入 VHDL 的指南

2024-03-25

对于我的编程语言项目,我正在 agda 中做一个非常浅且简单的 VHDL 数字电路嵌入。目的是写出语法、静态语义、动态语义,然后写一些证明来展示我们对材料的理解。到目前为止我已经编写了以下代码:

data Ckt : Set where

   var      : String → Ckt
   bool     : Bool → Ckt 
   empty    : Ckt
   gate     : String →  ℕ → ℕ → Ckt  -- name in out 
   series   : String →  Ckt → Ckt → Ckt -- name  ckt1 ckt2
   parallel : String →  Ckt → Ckt → Ckt --name ckt1 ckt2  

And : Ckt 
And = gate "And"  2 1    

data Ctxt : Set where
  □   : Ctxt
  _,_ : (String ×  ℕ ×  ℕ) → Ctxt → Ctxt


_≈_ : Ctxt → Ctxt → Set
□ ≈ □                               = ⊤
□ ≈ (_ , _)                         = ⊥
(_ , _) ≈ □                         = ⊥
((s₁ , (in₁ , out₂)) , Γ₁) ≈ ((s₂ , (in₃ , out₄)) , Γ₂) = True (s₁ ≟ s₂) × in₁ ≡ in₃ × out₂ ≡ out₄  × Γ₁ ≈ Γ₂


--static Semantics
data _⊢_  : (Γ : Ctxt) → (e : Ckt)  → Set where

  VarT      : ∀ {Γ s τ} → ((s , τ) ∈ Γ) → Γ ⊢ var s
  BoolT     : ∀ {Γ b} → Γ ⊢ bool b 
  EmptyT    : ∀ {Γ} → Γ ⊢ empty 
  GateT     : ∀ {Γ s i o} → (s , (i , o)) ∈ Γ  → Γ ⊢ gate s i o
  SeriesT   : ∀ {Γ s c₁ c₂} →  Γ ⊢ c₁ → Γ ⊢ c₂  → Γ ⊢ series s c₁ c₂ 
  ParallelT : ∀ {Γ s c₁ c₂} →  Γ ⊢ c₁ → Γ ⊢ c₂  → Γ ⊢ parallel s c₁ c₂

我所困惑的是如何转换这个程序以便执行程序,即我不知道如何开始编写动态语义。另外,如果有任何方法可以改进我当前程序的语法或静态,请告诉我。


None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

AGDA 中极浅嵌入 VHDL 的指南 的相关文章

  • 为什么Racket中foldl的定义方式很奇怪?

    在 Haskell 中 与许多其他函数式语言一样 函数foldl被定义为 例如 foldl 0 1 2 3 4 10 这没关系 因为foldl 0 1 2 3 4 根据定义 0 1 2 3 4 但是 在 球拍 中 foldl 0 1 2 3
  • Haskell 对于 Web 应用程序来说足够成熟吗? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • @tailrec为什么这个方法不编译为“包含不在尾部位置的递归调用”?

    tailrec private def loop V key String V key match case gt loop key 此方法无法编译并抱怨它 包含不在尾部位置的递归调用 有人可以向我解释一下发生了什么事吗 这个错误消息对我来
  • 通过(单子)join 和 fmap 进行终止检查替换

    我正在使用大小类型 并且有一个用于键入术语的替换函数 如果我直接给出定义 则终止检查 但如果我通过 单子 连接和 fmap 对其进行分解 则不会进行终止检查 OPTIONS sized types module Subst where op
  • 忽略 Racket 中的多个返回值

    在 Racket 中 可以通过执行以下操作从函数返回多个值 define foo values 1 2 3 然后我们可以通过这样做来绑定它们 define values one two three foo Now one一定会1 two t
  • Scala 功能设计模式目录

    一周以来我一直在阅读 Scala 编程 作者一步一步地介绍了该语言的元素 但我仍然很困惑何时使用演员 闭包 柯里化等功能性的东西 我正在寻找功能结构的典型用例或最佳实践的目录 我并不是说在 Scala 中重新实现像 GoF 这样的众所周知的
  • 在 Python 中,部分函数应用(柯里化)与显式函数定义

    在 Python 中 以下方式是否被认为是更好的风格 根据更一般的 可能是内部使用的功能显式定义有用的功能 或者 使用偏函数应用来显式描述函数柯里化 我将通过一个人为的例子来解释我的问题 假设编写一个函数 sort by scoring 它
  • 需要澄清令人困惑的 Http4s 消息类型 `Response[F]` / `Request[F]`

    我很难理解为什么Request and Response参数化为F 类似的东西是猫效应数据类型资源 从文档中 https typelevel org cats effect docs std resource https typelevel
  • 在同一迭代中过滤和映射

    我有一个简单的情况 我想过滤并映射到相同的值 如下所示 const files results filter function r return r file map function r return r file 为了节省代码行并提高性
  • RxJS 比命令式更快吗? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我对函数式编程和函数式反应式编程比较陌生 我读了很多遍函数式反应式编程的强大力量 好的 可读 避免副作用等 但是 我不知道如何以功能
  • 如何在 Ocaml 中表示一个简单的有限状态机?

    我用 C 和 Java 编写过一些状态机 但从未用过像 Ocaml 这样的函数式语言 问题是我不知道我是否可以从对象语言版本中调整代码 因为在 Ocaml 中记录和变体比类更强大 所以 我需要一个事件驱动的有限状态机 像 UML 中的分层结
  • 您将如何在 F# 中解决这个问题? (高频传感器数据)

    我是一名机械工程研究生 我的导师刚刚要求我为我们的一个传感器项目编写一个数据可视化实用程序 由于现在是夏天 他希望我能从中获得一些乐趣 我认为这将是学习一门擅长科学计算的语言的好时机 所以我直接开始学习 F 由于我是函数式编程范例的新手 因
  • 如何将函数转换为点自由形式?

    假设我有一个 JavaScript 函数 function f x return a b x c x 我如何将其转换为无点函数 通过组合函数 还有关于这方面的更多信息的资源吗 一般来说 当您将函数转变为无点风格时 没有简单的规则可遵循 要么
  • Haskell 真的是纯粹的吗(有任何语言可以处理系统外的输入和输出)吗?

    在谈到函数式编程中的 Monad 后 该功能是否真的使语言变得纯粹 或者它只是黑板数学之外的现实世界中计算机系统推理的另一张 免狱卡 EDIT 这不是有人在这篇文章中所说的火焰诱饵 而是一个真正的问题 我希望有人能用它来击倒我并说 证明 它
  • 如何处理“恐慌:不可能的事情发生了”并在 Haskell 中继续

    我有以下代码 它使用 GHC API 加载模块并获取表达式的类型 typeObjects String gt String gt IO Type typeObjects modules objects do defaultErrorHand
  • Java - 如何创建仅适用于类型上下文的注释类型? (PURE类型注释)

    要创建适用于类型上下文的类型注释 除了使用元注释注释类型之外 没有其他方法 Target ElementType TYPE USE 然而 由于 Java 设计者的错误决定 该注释也适用于声明上下文 根据 Java SE 文档 它是这样写的
  • Scala 解析器组合器的运算符优先级

    我正在研究需要考虑运算符优先级的解析逻辑 我的需求并不太复杂 首先 我需要乘法和除法比加法和减法具有更高的优先级 例如 1 2 3 应视为 1 2 3 这是一个简单的例子 但你明白了 我需要将更多自定义标记添加到优先级逻辑中 我可以根据此处
  • 设计 React Hooks 可防止 React-hooks/exhaustive-deps 警告

    我正在设计一个钩子 仅当钩子依赖项发生变化时才获取数据 它按预期工作但我收到了 linter 警告 React Hook useEffect was passed a dependency list that is not an array
  • 列表推导式和 for 循环中的 Lambda 表达式[重复]

    这个问题在这里已经有答案了 我想要一个 lambda 列表 作为一些繁重计算的缓存 并注意到这一点 gt gt gt j for j in lambda i for i in range 10 9 9 9 9 9 9 9 9 9 9 Alt
  • Haskell 中的所有图形和 Web 库是如何实现的?

    我才开始学习Haskell 我读到它是一种纯函数式语言 其中的所有内容都是不可变的 因此 输入输出 写入和读取数据库之类的事情会导致状态的可变性 我知道 Haskell 中有一种叫做 monad 的东西 它允许在 Haskell 中使用命令

随机推荐

  • Async/Await 是否使用 Task.Run 异步启动新线程?

    我读了很多文章 但仍然无法理解这部分 考虑这段代码 private async void button1 Click object sender EventArgs e await Dosomething private async Tas
  • Matlab中imagesc()的非均匀轴

    问题 是否可以在非均匀轴上说明图像 Details 我需要用图像来说明多维时间序列 但这个时间序列的时间网格非常不均匀 这是一个例子 m 10 n 3 t sort rand m 1 non uniform time values rand
  • :before/:after 伪元素的内容垂直居中

    我正在尝试实现类似于这张图片的效果 我有一个图像 作为幻灯片的一部分 包裹在 div 中 并使用 before 和 after 伪元素 我显示两个控件以移动到幻灯片的下一个 gt gt 或上一个 到目前为止 我有这个 div positio
  • 如何检查 emacs 是在框架中还是在终端中?

    基于这个问题 如何将emacsclient背景设置为Emacs背景 https stackoverflow com questions 9271930 how to set emacsclient background as emacs b
  • PHP内存限制

    在 PHP 5 0 4 中 如果您don t配置 enable memory limit 时 将忽略 memory limit 指令 在推荐的 php ini 文件中它被设置为 8M 但文档说它被忽略 那么在这种情况下 是否存在每个脚本的内
  • 使用客户端指纹对 JWT 令牌进行编码?

    我想知道是否会是最佳实践使用客户端指纹作为 JWT 秘密进行编码 然而 我在 WWW 上找不到有关这个问题的任何内容 但到目前为止 我这样做是有意义的 我正在考虑使用 JavaScript 生成指纹客户端 并在每次调用时将其发送到 API
  • 如何添加tailwindcss到vite?

    我在用着vite https github com vuejs vite 0 16 6并想将 vuepress 站点迁移到使用 vite 但是我不确定如何配置 vite 以使用 tailwindcss in my index css tai
  • 如何让3个textView控件大小相同

    在我的活动中我定义了 3 个 textView 控件 所有这些 textView 都一个挨着一个出现 我需要做一些事情 使它们始终具有相同的大小 假设第一个 textView 控件是小时 第二个 textView 控件是分钟 第三个 tex
  • 多个 Asp.Net 项目之间的共享代码 [重复]

    这个问题在这里已经有答案了 在同一服务器上的多个 Web 应用程序之间共享 bin 文件夹和 dll 以及其他资源文件 如 css 的最佳实践是什么 我已经将通用代码分离到它们自己的程序集中 但我想知道部署等 我基本上希望将所有通用文件位于
  • Meteor 需要时间才能知道是否存在 {{currentUser}}

    我有一些代码 我只想在存在时运行noUser和一些当有currentUser 所有这些都在导航模板内 就像这样 if currentUser li class nav a href Post a li li class nav a Ola
  • 如何在 Chrome 扩展程序中录制音频?

    设置 Chrome 扩展程序以从麦克风录制音频的最简单方法是什么 我看到有一个工作实验性语音输入API http code google com chrome extensions trunk experimental speechInpu
  • 将参数传递给函数以使用 ggplot stat_function 进行绘图

    我有一个函数和一个参数列表 F lt function a b a b b a L lt list a 5 b 2 c 0 我想用未知的 x 或 x 替换参数之一 a b 或 c 并使用 ggplot 的 stat function 进行绘
  • Unity 与 ASP.NET Core 和 MVC6(核心)

    更新 09 08 2018Unity正在开发中here https github com unitycontainer container但我还没有时间测试它如何与 ASP NET Core 框架配合使用 更新 15 03 2018此解决方
  • BindingList.Sort() 的行为类似于 List.Sort()

    我正在尝试编写一个可用于我的应用程序的 SortableBindingList 我发现了很多关于如何实现基本排序支持的讨论 以便 BindingList 在 DataGridView 或其他一些绑定控件的上下文中使用时进行排序 包括来自 S
  • 结束动画事件android

    我在视图中有一个淡出动画 位于片段内 每次动画发生时 视图完成后都会再次重新绘制自身 我找到了一个解决办法view SetVisibility View GONE 但它不会等待动画完成 我想仅在动画完成后执行此 setVisibility
  • 如何在 SPA 中实施 Docusign,而不要求最终用户使用 DocuSign 进行身份验证

    我正在关注此处显示的 React OAuth 隐式示例 https github com docusign eg 02 react implicit grant https github com docusign eg 02 react i
  • WPF MergedDictionaries - 值不能为空 - 参数名称:item

    我的 App Resources MergedDictionary 遇到了一个棘手的问题 每次添加带有来自另一个程序集的源和 XML 命名空间的新字典时 都会产生错误 并且我无法构建我的程序 该错误出现在 App xaml 中 并带有下划线
  • BigQuery 完全外连接生成“左连接”结果

    我有 2 个表 它们都包含不同的 id 值 有些 id 值可能出现在两个表中 有些对于每个表来说是唯一的 表 1 有 10 910 行 表 2 有 11 304 行 运行左连接查询时 SELECT COUNT DISTINCT a id F
  • 多语言集成测试框架

    想象一下 您有一个由不同组件组成的相当复杂的面向服务的体系结构 组件是用不同的语言 Java PHP Ruby 编写的 并以不同的方式相互通信 即 UI REST API 在某些情况下共享一些数据库表等 我正在尝试为一些端到端测试设计一个集
  • AGDA 中极浅嵌入 VHDL 的指南

    对于我的编程语言项目 我正在 agda 中做一个非常浅且简单的 VHDL 数字电路嵌入 目的是写出语法 静态语义 动态语义 然后写一些证明来展示我们对材料的理解 到目前为止我已经编写了以下代码 data Ckt Set where var