Coq中的通用量化假设

时间:2013-03-22 15:14:46

标签: 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
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

1 个答案:

答案 0 :(得分:3)

要执行此操作,您需要在上下文中使用k类型RecTypee类型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“获取”eH,但这对于通用量化没有多大意义,因为这些是术语H的形式参数(函数不带有它的参数,而是要求它们作为输入)。

你必须误解存在量化,你可以destruct获得证人的假设和证人满足财产的证据。