Coq中的泛量化假设
我想改变下表中的假设HCoq中的泛量化假设,coq,universal,quantifiers,Coq,Universal,Quantifiers,我想改变下表中的假设H mL : Map mR : Map H : forall (k : RecType) (e : String.string), MapsTo k e (filter (is_vis_cookie l) mL) <-> MapsTo k e (filter (is_vis_cookie l) mR) ------------------------------------------------------- Goal mL:Map
mL : Map
mR : Map
H : forall (k : RecType) (e : String.string),
MapsTo k e (filter (is_vis_cookie l) mL) <->
MapsTo k e (filter (is_vis_cookie l) mR)
-------------------------------------------------------
Goal
mL:Map
先生:地图
H:forall(k:RecType)(e:String.String),
MapsTo k e(过滤器(is_vis_l)mL)
MapsTo k e(过滤器(is_vis_l)mR)
-------------------------------------------------------
目标
到
mL:Map
先生:地图
k:重排
e:String.String
H:MAPSTOK e(过滤器(is_vis_l)mL)
MapsTo k e(过滤器(is_vis_l)mR)
-------------------------------------------------------
目标
我认为,它们都可以解决同一个目标,但我需要后一种形式的假设。或者更具体地说,将k进一步分解为元素,如下所示。我怎样才能把假设H变成这两种形式
mL : Map
mR : Map
ks : String.string
kh : String.string
e : String.string
H : MapsTo {| elem1:= ks; elem2:= kh|} e (filter (is_vis_cookie l) mL) <->
MapsTo {| elem1:= ks; elem2:= kh|} e (filter (is_vis_cookie l) mR)
-------------------------------------------------------
Goal
mL:Map
先生:地图
ks:String.String
kh:String.String
e:String.String
H:MapsTo{elem1:=ks;elem2:=kh}e(过滤器(is|vis|l)mL)
MapsTo{elem1:=ks;elem2:=kh}e(过滤器(is|vis|l)mR)
-------------------------------------------------------
目标
要做到这一点,您需要在您的上下文中有一个k
类型的RecType
和一个e
类型的String.String
。使用此选项,您可以获得以下信息:
使用姿势证明(H k e)作为Hke:
mL : Map
mR : Map
k : RecType
e : String.string
H : forall (k : RecType) (e : String.string),
MapsTo k e (filter (is_vis_cookie l) mL) <->
MapsTo k e (filter (is_vis_cookie l) mR)
Hke : MapsTo k e (filter (is_vis_cookie l) mL) <->
MapsTo k e (filter (is_vis_cookie l) mR)
-------------------------------------------------------
Goal
请注意,H已专门化,不能再次专门化
您无法从
H
中“获取”k
和e
,但这对于通用量化没有多大意义,因为这些是术语H
的形式参数(函数不带参数,而是要求将其作为输入)
你一定被存在量化弄错了,你可以破坏一个假设来获得证人和证人满足属性的证据,您需要在上下文中包含类型为
RecType
的术语k
,以及类型为String.String
的类型为e
。使用此选项,您可以获得以下信息:
使用姿势证明(H k e)作为Hke:
mL : Map
mR : Map
k : RecType
e : String.string
H : forall (k : RecType) (e : String.string),
MapsTo k e (filter (is_vis_cookie l) mL) <->
MapsTo k e (filter (is_vis_cookie l) mR)
Hke : MapsTo k e (filter (is_vis_cookie l) mL) <->
MapsTo k e (filter (is_vis_cookie l) mR)
-------------------------------------------------------
Goal
请注意,H已专门化,不能再次专门化
您无法从
H
中“获取”k
和e
,但这对于通用量化没有多大意义,因为这些是术语H
的形式参数(函数不带参数,而是要求将其作为输入)
你一定是被存在量化弄错了,你可以破坏一个假设来获得证人和证人满足属性的证据。谢谢你的回答。实际上,我没有上下文中的
k
和e
。我用介绍k e
尝试了所有(k:RecType)(e:String.String)、映射k e(filter(is_vis_cookie l)mL)和映射k e(filter(is_vis_cookie l)mR)的形式的目标。(**现在k和e在上下文中*)然后apply H
,但然后k
和e
重新组合…,我不想这样…你所做的非常混乱,表明你并不真正理解发生了什么。例如,你能提供你实际目标的形状吗?我不是专家,我的问题可能很烦人。对不起。目标是:StringMap.MapsTo zk zv(get_site_cookies(http_url p d ru)ckmL)StringMap.MapsTo zk zv(get_site_cookies(http_url p d ru)ckmR)
其中zk
和zv
是键值字符串,RecType
是五个元素的记录(key是其中之一)而get\u site\u cookies
是一个折叠,f只在RecType
的3个元素上运行<上面帖子中的H中的代码>映射到
是CookieMap.MapsTo。。。可能很难理解类型/映射,但是,如果您需要,我可以提供详细的类型/函数。初学者可以。试着提供细节来帮助别人帮助你!因此,似乎如果你需要应用你的假设,你想在zk
和zv
上使用它,比如specialize(hzk-zv)。
。但是,它为您提供了MapsTo zk zv(filter(is_vis_cookie l)mL)MapsTo zk zv(filter(is_vis_cookie l)mR)
的证明。这离你的目标还有很大的距离(如果mL
和ckmL
不一样,它甚至可能是无用的)。由于get\u site\u cookies
是一个折页,您可能需要一个归纳证明。谢谢您的回复。实际上,我没有上下文中的k
和e
。我用介绍k e
尝试了所有(k:RecType)(e:String.String)、映射k e(filter(is_vis_cookie l)mL)和映射k e(filter(is_vis_cookie l)mR)的形式的目标。(**现在k和e在上下文中*)然后apply H
,但然后k
和e
重新组合…,我不想这样…你所做的非常混乱,表明你并不真正理解发生了什么。例如,你能提供你实际目标的形状吗?我不是专家,我的问题可能很烦人。对不起。目标是:StringMap.MapsTo zk zv(get_site_cookies(http_url p d ru)ckmL)StringMap.MapsTo zk zv(get_site_cookies(http_url p d ru)ckmR)
其中zk
和zv
是键值字符串,RecType
是五个元素的记录(key是其中之一)而get\u site\u cookies
是一个折叠,f只在RecType
的3个元素上运行<上面帖子中的H中的代码>映射到
是CookieMap.MapsTo。。。可能很难理解类型/映射,但是,如果您需要,我可以提供详细的类型/函数。初学者可以。试着提供细节来帮助别人帮助你!所以,如果你需要应用你的假设,你想使用它
mL : Map
mR : Map
k : RecType
e : String.string
H : MapsTo k e (filter (is_vis_cookie l) mL) <->
MapsTo k e (filter (is_vis_cookie l) mR)
-------------------------------------------------------
Goal