我想从下面的表格中改变假设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
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
我认为,他们都能解决同一个目标,但我需要后一种形式的假设。或者更具体地说,进一步将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
答案 0 :(得分:3)
要执行此操作,您需要在上下文中使用k
类型RecType
和e
类型String.string
的字词。有了这个,你可以得到这个:
使用pose proof (H k e) as 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可用。
使用specialize (H k e).
:
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
请注意,H已经专业化,无法再次专业化。
您无法从k
“获取”e
和H
,但这对于通用量化没有多大意义,因为这些是术语H
的形式参数(函数不带有它的参数,而是要求它们作为输入)。
你必须误解存在量化,你可以destruct
获得证人的假设和证人满足财产的证据。