【问题标题】:Universal qauntification hypothesis in CoqCoq 中的通用量化假设
【发布时间】:2013-03-12 12:19:17
【问题描述】:

我想从下面的表格中改变假设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

【问题讨论】:

    标签: coq universal quantifiers


    【解决方案1】:

    为此,您需要在上下文中有一个 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已经特化了,不能再特化了。


    你不能从H“获得”ke,但这对于通用量化没有多大意义,因为它们是术语H的形式参数(函数不携带它的参数,而是要求它们作为输入)。

    你一定是对存在量化有误解,你可以destruct一个假设来获得证人以及证人满足属性的证明。

    【讨论】:

    • 感谢您的回复。实际上,我在上下文中没有ke。我尝试了forall (k : RecType) (e : String.string), MapsTo k e (filter (is_vis_cookie l) mL) &lt;-&gt; MapsTo k e (filter (is_vis_cookie l) mR)intros k e 形式的目标。 (**现在 k 和 e 在上下文中 *)然后是 apply H,但随后 ke 重新组合......,我不想要......
    • 您所做的事情非常令人困惑,表明您并不真正了解发生了什么。例如,您能否提供您的实际目标的形状?
    • 我不是专家,我的问题可能很烦人。对此感到抱歉。目标是:StringMap.MapsTo zk zv (get_site_cookies (http_s_url p d ru) ckmL) &lt;-&gt; StringMap.MapsTo zk zv (get_site_cookies (http_s_url p d ru) ckmR) 其中zkzv 是键值字符串,RecType 是五个元素的记录(键是其中之一),get_site_cookies 是折叠,其中 f 仅对 3 进行操作RecType 的元素。 MapsTo in H in above is CookieMap.MapsTo... 可能很难理解类型/映射,但是,如果您需要,我可以提供详细的类型/功能。
    • 初学者没问题。只需尝试提供详细信息以帮助人们帮助您!所以看起来,如果你需要应用你的假设H,你想在zkzv上使用它,比如specialize (H zk zv).。但是,它为您提供了MapsTo zk zv (filter (is_vis_cookie l) mL) &lt;-&gt; MapsTo zk zv (filter (is_vis_cookie l) mR) 的证明。这与您的目标仍然相去甚远(如果mLckmL 不一样,它甚至可能毫无用处)。由于get_site_cookies 是一个折叠,您可能需要归纳证明。
    猜你喜欢
    • 1970-01-01
    • 2013-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多