伊莎贝尔的范围 restriction/domain 限制

range restriction/domain restriction in Isabelle

我正在尝试将模式输入到 Isabelle 中,但是当我将范围限制或域限制添加到定理证明器中时,它不想解析。我在 LaTeX 中有以下架构:

\begin{schema}{VideoShop}
members: \power PERSON \
rented: PERSON \rel TITLE \
stockLevel: TITLE \pfun \nat
\where
\dom rented \subseteq members \
\ran rented \subseteq \dom stockLevel \
\forall t: \ran rented @ \# (rented \rres \{t\}) \leq stockLevel~t
\end{schema}

将此输入 Isabelle 时,我得到以下信息:

locale videoshop = 
fixes members :: "PERSON set"
and rented :: "(PERSON * TITLE) set"
and stockLevel :: "(TITLE * nat) set"
assumes "Domain rented \<subseteq> members" 
 and "Range rented \<subseteq> Domain stockLevel" 
 and "(\<forall> t. (t \<in> Range rented) \<and> (card (rented \<rhd> {t}) \<le> stockLevel t))"
begin
.....

除最后一个表达式外全部解析\<forall> t.....

我只是不明白如何给伊莎贝尔添加范围限制。

您的输入存在多个问题。

  1. 您在表达式

    中使用的符号
    (rented ⊳ {t})
    

    未关联任何运算符,无法解析。我不太确定这是什么意思。从规范的高级概念来看,我猜测一些类似于 "all persons who rented a specific title" 的内容。这可以用集合理解最容易地表达:

    {p. (p, t) ∈ rented}
    
  2. 您将有界全称量词翻译成包含连词的量词。这可能不是您想要的,因为它显示 "for all t, t is in the range of rented and something else"。 Isabelle 有有界量词的符号。

    ∀t ∈ Range rented. ...
    
  3. 您正试图将 stockLevel 用作函数,但事实并非如此。从您的 LaTeX 输入中,我了解到它应该是一个部分函数。伊莎贝尔称这些为 map。合适的类型是:

    TITLE ⇀ nat
    

    请注意 "harpoon" 符号而不是功能箭头。地图的域函数称为 dom。第二个语言环境假设可以表示为:

    Range rented ⊆ dom stockLevel
    

    鉴于此,您可以将 stockLevel 用作从 TITLEnat option 的函数。