在coq中定义无向图的边
因此,我试图在一个具有特定节点的无向加权图中定义边(在我的例子中,节点只是一个数字)。(nat)->前两个nat表示两个节点n1、n2,最后一个nat表示边缘权重。(边缘b/t n1和n2) 我的问题是IDK为什么会有错误。 下面是我的代码在coq中定义无向图的边,coq,Coq,因此,我试图在一个具有特定节点的无向加权图中定义边(在我的例子中,节点只是一个数字)。(nat)->前两个nat表示两个节点n1、n2,最后一个nat表示边缘权重。(边缘b/t n1和n2) 我的问题是IDK为什么会有错误。 下面是我的代码 Definition vertices := list(nat). Definition edges := list(nat*nat*nat). Definition Graph := (vertices,edges). Compute Graph. Co
Definition vertices := list(nat).
Definition edges := list(nat*nat*nat).
Definition Graph := (vertices,edges).
Compute Graph.
Compute edges.
Definition myEdges : edges := [(1,2,2);(1,3,2);(2,3,4)].
在最后一个命令上弹出错误消息:
错误消息:
术语“1”的类型为“nat”
而它应该具有类型“type”
有人能解释并帮助我吗???非常感谢 以下功能在我的计算机上运行:
Require Import Coq.Lists.List.
Import ListNotations.
Definition vertices := list(nat).
Definition edges := list(nat*nat*nat).
Definition Graph := (vertices,edges).
Compute Graph.
Compute edges.
Definition myEdges : edges := [(1,2,2);(1,3,2);(2,3,4)].
您是否忘记在代码片段中包含某些内容?以下内容在我的计算机上运行:
Require Import Coq.Lists.List.
Import ListNotations.
Definition vertices := list(nat).
Definition edges := list(nat*nat*nat).
Definition Graph := (vertices,edges).
Compute Graph.
Compute edges.
Definition myEdges : edges := [(1,2,2);(1,3,2);(2,3,4)].
您是否忘记在代码段中包含某些内容?这对(1,1)
是一个值,实际上只是对1
的一个符号。它是一个类型为prod-nat-nat
的术语,具有替代符号(nat*nat)
。所以(nat*nat)
是一种类型,而不是一个值
因此,如果您想创建一个类型,请使用*
,并且通常您还必须向Coq解释,您的意思不是*
针对nat
,而是*
针对类型,您可以通过注释要使用的范围(“符号上下文”)来实现<代码>(nat*nat)%type
我想您要做的是将Graph
定义为一个类型,然后您要使用Graph
类型创建特定的图形实例作为值
如果要检查术语和类型,执行以下操作很有用
Set Printing All.
Check (1,2).
打印出的术语没有任何符号。在这种情况下,它会打印
@pair nat nat (S O) (S (S O))
: prod nat nat
对(1,1)
是一个值,实际上只是对对1
的一个符号。它是一个类型为prod-nat-nat
的术语,具有替代符号(nat*nat)
。所以(nat*nat)
是一种类型,而不是一个值
因此,如果您想创建一个类型,请使用*
,并且通常您还必须向Coq解释,您的意思不是*
针对nat
,而是*
针对类型,您可以通过注释要使用的范围(“符号上下文”)来实现<代码>(nat*nat)%type
我想您要做的是将Graph
定义为一个类型,然后您要使用Graph
类型创建特定的图形实例作为值
如果要检查术语和类型,执行以下操作很有用
Set Printing All.
Check (1,2).
打印出的术语没有任何符号。在这种情况下,它会打印
@pair nat nat (S O) (S (S O))
: prod nat nat
是否应改为定义图:=(顶点、边)be
定义图:=顶点*边
?是否应改为定义图:=(顶点、边)be定义图:=顶点*边
?