Isabelle 如何合并有限映射集?

我可以按如下方式合并两个有限贴图: value "fmadd (fmap_of_list [(1::nat,2::nat)]) (fmap_of_list [(2::nat,3::nat)])" 但当我尝试合并一组地图时: value "ffold fmadd fmempty {| fmap_of_list [(1::nat,2::nat)], fmap_of_list [(2::nat,3::nat)]|}" 我得到以下错误: Wellsortedness error: T

Isabelle 重新安排目标(伊莎贝尔)

我想知道在以下情况下如何重新安排目标: lemma "P=Q" proof (rule iffI, (*here I would like to swap goal order*), rule ccontr) oops 我想要一个不需要改变引理语句的解决方案。我意识到,首选和延迟可用于应用样式的校对,但我希望有一种方法可用于校对(…)部分 编辑: 正如Andreas Lochbihler所说,在上面的示例中,编写规则iffI[旋转]是有效的。然而,在下面的情况下,在不改变引理的陈述的情况下

Isabelle 如何输入伊莎贝尔/杰迪特中集合论中的符号?

我怎样才能输入像这样的符号∈, ⊆, ∪, 及∩ 伊莎贝尔/杰迪特?Isabelle/HOL教程说,我应该输入“:”,“您可以键入\然后使用tab键选择所需符号,还可以使用上/下箭头键从选项中进行选择。当所需符号出现在建议符号列表的顶部时,我使用tab键 还有⊆, 我使用“(=”

Isabelle 证据中的习惯案例区分

Isabelle在证明陈述时是否支持自定义案例区分?假设我想证明所有自然数n的一个语句,但是证明完全不同,这取决于n是偶数还是奇数。有可能在一个证明中做这种区分吗 proof(cases n) assume "n mod 2 = 0" <proof> next assume "n mod 2 = 1" <proof> qed 证明(案例n) 假设“n模2=0” 接下来假设“n mod 2=1” 量化宽松 到目前为止,我将引理/定理分成两个独

在Isabelle中使用参数定义子类

(第3.5节)通过提供缺失公理的证明,解释了如何定义“事实之后”的附加子类关系。当子类在公理之外添加参数时,有没有办法做到这一点 例如,假设我有以下类: class setoid = fixes eq :: "'a ⇒ 'a ⇒ bool" (infix "≈" 50) assumes eq_refl : "∀x. x ≈ x" and eq_symm : "∀x y. x ≈ y ⟶ y ≈ x" and eq_trans : "∀x y z. x ≈ y ⟶ y ≈ z ⟶ x ≈ z"

在Isabelle中将前n个自然数的列表写成整数

我需要一个描述范围的列表,如: [0..<length P] 但是,该类型具有nat列表。我以后需要它的类型是int list 如何进行这种转换?最简单的方法可能是映射int[0..还有List.upto,使用特殊语法[m..n]生成从m到n的整数列表,其中上界和下界都包含在内 所以在你的情况下,我可能会使用 [0 .. int (length xs) - 1] 注意,对于length的结果,仍然需要从nat转换为int

Isabelle 使用Pure中的ML函数向类型添加排序

我正在尝试从FOL为Isabelle定义一个新的类型定义命令。这个新类型“T”应该具有sort“T::term”,但是我在纯文本中找不到任何这样做的函数 我遵循了HOL的typedef.ML中的思想 如果没有这种排序(默认排序),我将无法统一我定义的公理之间的排序

理解Isabelle中的派生词(at..in`)的含义

这是一个关于伊莎贝尔图书馆衍生工具概念的问题 我试图理解(f有_场_导数dx)(在S中的x处)的意思。我知道(在S中的x处)是一个过滤器,但直觉上我认为下面的陈述是正确的 lemma DERIV_at_within: "(∀x ∈ S. (f has_field_derivative D x) (at x)) = (∀x. (f has_field_derivative D x) (at x within S))" 如果不是,我应该如何解释衍生工具中的(S中的x)。A中的x是x的指向

Isabelle 伊莎贝尔不评价引理

我正在阅读简介“”并尝试做练习2.2 目前我有以下几点: theory Scratch imports Main begin fun add:: "nat ⇒ nat ⇒ nat" where "add 0 n = n" | "add (Suc m) n = Suc(add m n)" lemma add_02 [simp]: "add m 0 = m" apply(induction m) appl

Isabelle 如何在归纳法中引用变量

我有一个与列表匹配的函数: fun merge where ‹merge [] [] = []› | ‹merge (v#vs) [] = (v#vs)› | ‹merge [] (v#vs) = (v#vs)› | ‹merge (x#xs) (y#ys) = (if x < y then x # merge xs (y#ys) else y # merge (x#xs) ys)› 问题是,我可以证明sorted(merge xs[])的这种情况,但这并不满足s

Isabelle 如何使用单词

在~~/src/HOL/word/word.thy中有一个名为word\u rsplit的函数 definition word_rsplit :: "'a :: len0 word => 'b :: len word list" where "word_rsplit w = map word_of_int (bin_rsplit (len_of TYPE ('b)) (len_of TYPE ('a), uint w))" 我想把一个32字分成四个8字,这个功能似乎很完美 引理

在Isabelle中将集合转换为列表

如何在Isabelle中将集合转换为列表 我对函数定义感兴趣,其签名为: "'a set => 'a list" 我如何定义它?在伊莎贝尔/杰迪特的查询面板的查找常量选项卡中搜索“'a set”“'a list” sorted_list_of_set :: "'a set ⇒ 'a list" 从理论列表中。然而,该常数要求'a在类linorder中,即,它仅适用于线性有序元素上的集合。此外,正如我在评论中提到的,它只适用于有限集。在集合的sorted\u list\u定义的正上方还有

使用Isabelle/Hol中的现有定义

我是Isabelle/Hol的新用户,我对使用Isabelle中现有的定义感到有些困惑。我必须在我的模型中定义一个完整的晶格结构和完整的偏序(CPO)结构。我发现这些定义已经作为类存在于HOLCF Porder.Thy和Lattice.Thy中。所以,如果我想在我的模型中包含这些定义,我应该如何继续?像我复制粘贴所有的定义,还是有一个特定的命令 谢谢在您自己的理论标题中,您可以导入其他理论。完整的晶格已经存在于Main理论中(如果使用HOL,通常会导入)。可以使用~/src/HOL/…(Isab

Isabelle 伊莎贝尔随附的“你的”文件的组织

我对Isabelle比较陌生,我对Isabelle附带的thy文件的组织结构感到困惑 为什么一些属于相同知识体系的文件在~~src/HOL中,而其他文件在~~src/HOL/中 例如,为什么GCD在~~src/HOL中,而不是在~~src/HOL/Number\u理论中 类似问题:ex文件夹与~~src/HOL中的Isar\u示例文件夹有什么区别?合并它们不是更自然吗 另外,Isabelle差不多30岁了,在那段时间里发生了很大的变化。例如,GCD.thy文件是12年前创建的,只提供常量GC

Isabelle对二进制谓词表示的关系有什么支持?

在Isabelle形式化中,我用二元谓词表示关系。我想让操作符使用这种表示来执行典型的关系操作,如合成和反转 文档“What's in Main”只提到了用成对集表示的运算符。关系理论一开始就说,“关系——作为成对集和二进制谓词”。然而,在这个理论中,我找不到对二进制谓词表示的太多支持。我只找到了几个具有神秘属性的引理 对二进制谓词表示的关系有广泛的支持吗?特别是,是否定义了公共关系操作的运算符?这些东西记录在哪里?对成对关系集的支持比二进制谓词稍微好一点,但有很多是可用的。然而,许多关系操作是

Isabelle 伊莎贝尔发展统计

我对Isabelle有一个很长的了解,我想知道有多少行是定义,多少行是语句,多少行是注释 Isabelle中是否包含任何此类工具(例如coqwc for coq)?我已经阅读了Isabelle系统手册,但找不到任何相关内容

Isabelle/HOL中矩阵的交换性

我试图证明以下引理: lemma fixes A B C D :: "((real, 3) vec, 3) vec" and v m :: " (real, 3) vec" assumes "∃ A. m = D ** A ** B *v v" shows "∃ A. m = D ** B ** A *v v" 但由于∃ A.D**A**B*v=D**B**A*v可以直接证明。可能是因为∃ A!。有人能解释为什么伊莎贝尔/霍尔不能证明这一点吗? 谢谢

Isabelle 在求和或乘积中简化if-then-else

在做一些基本代数的时候,我经常会得到以下类型的子目标,有时是有限和,有时是有限积 lemma foo: fixes N :: nat fixes a :: "nat ⇒ nat" shows "(a 0) = (∑x = 0..N. (if x = 0 then 1 else 0) * (a x))" 这对我来说似乎很明显,但是auto和auto-cong:sum.cong-split:if\u splits都不能处理这个问题。更重要的是,当

如何在Isabelle中设置快速脏旗

Isabelle有一个快速和脏模式,允许使用抱歉跳过校对。它在jEdit中默认启用,在isabelle build中默认禁用。如何更改设置 在jEdit中(以交互方式或使用命令行参数) 对于isabelle build,从命令行 对于isabelle build,分别在ROOT文件中 还有,有没有其他方法可以问伊莎贝尔,最好是在《绝地武士》中以互动的方式,“当前理论中的哪些引理及其父母已经用抱歉证明了?” (我在这里问这个问题是希望总是有最新的答案,与我在谷歌上找到的一些邮件列表帖子形成对比

Isabelle 表示函数在集合上是常数

我试图表达一个函数f在一个集合S上是常数,其值r我的第一个想法是 f ` S = {r} 但这不起作用,因为S可以为空。因此,我目前正在与 f ` S ⊆ {r} 它工作正常,但我的印象是,对于标准自动化来说,这仍然不是理想的。特别是,auto将无法离开此目标(删除无关事实) Sledgehammer当然没有问题(metis image\u eqI singletonD substece),但这种情况很少出现。(通常,⊆似乎不能像我预期的那样与auto一起工作) 有没有更好的方法来表达这一点

在区域设置(组)中使用规则Isabelle

假设我有以下定理: comm_group ⦇carrier = e_aff, mult = add, one = (1, 0)⦈ 我想表明: add (add (x1,y1) (x2,y2)) (i (x2,y2)) = (x1,y1) 其中i是组的逆运算。显然,这在一个群体中是成立的。如何从假设中提取这些知识?comm\u组…是区域设置谓词,即表明您实际拥有区域设置实例的内容。要实际使用它,通常需要解释语言环境: interpret comm_group "⦇carrier = e_aff

在Isabelle证明中是否需要入职培训?

我试图证明生成函数产生某些,仍然非常简单的模式。 模式_0_1生成交替0和1的列表。我已经成功地证明,对于任何长度大于0的列表,第一项都是零。然而,应用同样的技术无法证明第二个元素总是1。我猜这里根本不需要诱导。如果有人能帮我找到正确的方法来完成第二个引理,我将不胜感激 fun pattern_0_1 :: "nat ⇒ nat ⇒ nat list" where "pattern_0_1 0 item = []" | "pattern_0_1 len item = item # (patt

Isabelle Isar证明中的驯服元蕴涵

证明一个简单的定理时,我在证明中遇到了元层次的含义。拥有它们可以吗?还是可以避免?如果我要处理它们,这是正确的方式吗 theory Sandbox imports Main begin lemma "(x::nat) > 0 ∨ x = 0" proof (cases x) assume "x = 0" show "0 < x ∨ x = 0" by (auto) next have "x = Suc n ⟹ 0 < x" by (simp only: Nat.z

Isabelle 隐藏运算符以避免AST中的歧义

我正在尝试伊莎贝尔官方教程中的列表示例。我将#替换为:,将@替换为++,使其语法与Haskell相同。现在我收到了AST中关于歧义的警告。我知道我可以用hide_const隐藏函数,但这不适用于中缀表示法中的运算符。如何在Isabelle中隐藏运算符 确切的警告信息是: Ambiguous input⌂ produces 2 parse trees: ("\<^const>HOL.Trueprop" ("\<^const>HOL.eq" ("\<^con

Isabelle “的用法;也有……终于有了;在伊莎贝尔

我通常认为也有这样的工作方式: have "P r Q1" by simp also have "... r Q2" by simp also have "... r Q3" by simp ... also have "... r Qn" by simp finally have "P r Qn+1" by simp 其中,“…r Qm”表示“Qm-1 r Qm”,r是某种传递关系 对于r的意思是=,但在使用≥我发现了一个与此描述相反的例子: ... have "1- 1/(2^(n+1)

取自课堂讲稿的Isabelle函数定义中的错误

为什么函数(类)的以下定义 定义不减损::“实数集=>(实数=>实数)=>bool” 其中“在SF上不减损”(所有x:S.所有y:S.x f x您可以在Isabelle/jEdit中看到 definition nondecreasing_on :: "real set => (real => real) => bool" where "nondecreasing_on S f <-> (ALL x:S. ALL y:S. x<=y --> f x <

Isabelle 伊莎贝尔:我错了

伊莎贝尔的健康错误是什么 我遇到了如下问题: 如何解决此问题?命令内部使用代码生成器进行评估,代码生成器会引发良好排序错误。在上述情况下,Isabelle的类型检查器为术语镜像类型推断出具有类型变量的类型,即'树,其中类型变量'a具有排序类型。由于'a tree可能包含'a的值,因此代码生成器还尝试生成用于漂亮打印'a tree的代码,该代码在的类型类术语中实现。但是,这失败了,因为'a的推断类型是类型,而不是术语,这是良好分类错误的原因 避免错误的最简单方法是显式地给出单态类型。比如说, v

Isabelle中Takeuchi函数终止性的证明

以下是我试图证明这一点的尝试: 这里有几个问题。首先,我应该在moore函数中返回一个三元组。现在,系统正在抱怨错误: 类型统一失败:类型“int”和“\u”冲突⇒ _" 应用程序中的类型错误:操作数类型不兼容 接线员:op≤ x::(int)⇒ int⇒ int)⇒ 布尔操作数:y::int 然后,当然终止证明不会成功,因为我没有应用上面的终止函数(方法应该类似于) 如何解决这个问题?首先,您的moore函数当前不返回一个三元组,而是一个包含两个ints并返回一个int的函数。对于三元组,您必

如何在Isabelle中书写下标?

如何在Isabelle(2021)text命令中写入下标 我尝试使用符号(自动转换为向下箭头),如下所示: text ‹ identity 1<^sub>S › 我也尝试了LaTex方法,并使用下划线,但jEdit似乎不认识LaTex。您可以使用AntiVirtation文本: text ‹ identity \<^text>‹1⇩S› › (*or simply*) text‹identity ‹1⇩S›› 在这种情况下,$1\u$应按预期显示在生成的LaTeX文档

Isabelle:Metis:Proof状态包含通用排序{}

梅蒂斯警告我: Metis: Proof state contains the universal sort {} ("HOL/Tools/Metis/metis_tactic.ML") 这个警告是什么意思? 这是否表明metis证明比没有警告的情况下“更不可靠”?证明绝对可靠。我记得,这条消息主要对开发人员有价值,有助于诊断metis调用失败的原因。普通HOL目标不包含空排序 我猜这个警告已经过时了

Isabelle中apply和Isar风格的等效性

apply style和Isar证明是否等效?这是一个我思考了一段时间的问题。当然,Isar证明更具可读性、可维护性和易写性(?),但我的问题是,你能否用这两种风格证明完全相同的东西 例如,我目前正在制作一个需要离开的证明: apply(simp split: prod.splits) using some_lemma by fastforce 应用和Isar样式中这些命令的等效形式是什么?实际上,我对Isar风格更感兴趣,因为有人告诉我混合风格是不好的风格。等效的Isar风格应该是: ha

Isabelle/ZF-nat不等式

我是伊莎贝尔的新手,我试图证明这样的事情: lemma refl_add_help: "[| n:nat; m:nat |] ==> 0 #+ n \<le> m #+ n" by(rule add_le_mono1, simp) theorem mult_le_self: "[| 0 < m; n:nat; m:nat |] ==> n \<le> n #* m" apply(case_tac m, auto

Isabelle 伊莎贝尔:别让辛普分裂元组

如何阻止simp方法将元组拆分为其组件 示例。如果我写 fun foo where "foo z = blah z" lemma "∃z :: nat × nat × nat × nat × nat. foo z" 证明状态为∃Zfoo z。如果我写 apply (simp) 证明状态变为∃a aa ab ac b。等等(a、aa、ab、ac、b)。我喜欢simp将foo扩展成blah,但我宁愿它保持变量z的原样。你必须从简化器中删除定理split_paired_Ex,如apply(sim

Isabelle 如何使用单值关系自动重写目标?

单值关系(如关系理论中的单值所定义)允许从隶属关系推导等式。我想知道是否有一种方法可以利用它重写目标中的术语(然后合并这些成员关系) 例如,如果没有辅助定理,自动或强制无法解决以下目标: lemma assumes "single_valued A" assumes "(a,b) ∈ A" and "(a,b') ∈ A" shows "b = b'" using assms by (metis single_valued_def) 在这里,平等直接体现在目标中,但在假设中重写也很

在Isabelle/jEdit中处理一个理论而不保存它

在《伊莎贝尔/杰迪特》中,有时我只想用一次性理论测试一些东西,而不想将其保存到磁盘。但是,当我创建一个新文件时(即使使用mode设置为isabelle的new in mode命令),缓冲区在我保存它之前不会被处理(使用适当的文件名) 有办法保存文件吗?这似乎是可能的,因为默认情况下,Isabelle/jEdit以一个空的划痕开始。您处理的文件,即使未保存。Isabelle/jEdit似乎使用缓冲区名称来决定是否处理理论(必须以.thy结尾)。据我所知,jEdit没有提供一种在不保存缓冲区的情况下

带实数距离的isabelle终止

也许有人能帮我找到伊莎贝尔的解雇证明。我试图从列表A中构造一个新的子列表B。为了构造B,我一遍又一遍地阅读整个A。取出元素并使用结果搜索下一个元素。我设计了一个简单的例子来说明: 给定的是一个随机实数列表。如果列表中的一个项目大于P,那么我们说列表上有一个数字P definition pointOnList :: "real list ⇒ real ⇒ bool" where "pointOnList L P ≡ ∃ i. i < length L ∧ P < L!i" 现在我

Isabelle 伊莎贝尔:林诺德证明

我尝试为自定义数据类型创建自定义线性顺序失败,下面是我的代码: theory Scratch imports Main begin datatype st = Str "string" fun solf_str_int:: "string ⇒ int" where "solf_str_int str = (if (size str) > 0 then int(nat_of_char (hd str) + 1) + 100

Isabelle 简化规则的证明

我试图在Isabelle中建立一个非常简单的通信协议模型,当试图证明简化规则时,证明失败了。我不确定它想证明什么,或者我需要补充什么来帮助它。我还在学习伊莎贝尔,并逐渐习惯这个过程;我错过了什么?代码如下: theory simple_prot imports Main begin datatype Agent = Server | Friend nat datatype Hi = ''HelloMessage'' datatype HiAck = ''HelloAck'' datatype

Isabelle书籍练习2.11:将表达式转换为多项式形式

我的问题是关于《具体语义学》一书中的练习2.11: 在整数上的一个变量中定义算术表达式 (键入int)作为数据类型: datatype exp = Var | Const int | Add exp exp | Mult exp exp 定义一个函数eval::exp=>int=>int,以便eval ex在 值x。 多项式可以表示为系数列表,从 常数例如,[4,2,-1,3]表示多项式4+2x-x^2+3x^3 定义一个函数evalp::int list=>int=>int,该函数在 给定的

Isabelle 如何定义集合上的上确界?

我试图描述一种编程语言的类型系统。任何类型的VoidType都有一个公共子类型,任何类型的AnyType都有一个公共超类型: datatype type = VoidType | AnyType | BooleanType | EBooleanType | RealType | IntegerType | UnlimNatType | StringType fun subtype_strict_fun :: "type ⇒ type ⇒ bool" (infix

Isabelle中的ML编程:找不到一些内置函数和策略

我正在学习“Isabelle食谱”,用Isabelle编写ML代码 不幸的是,许多示例都不起作用,因为找不到内置函数(名称已更改?是否应指定path structure.fct?)。 例如,使用etac、rtac和atac的示例不再有效。这些新名字是什么?我自己怎么找到它们的?伊莎贝尔食谱一直都是非正式的,我怀疑它现在已经严重过时了。这里有一些很好的信息,但“官方”的最新来源是《伊莎贝尔实施手册》 要查找已重命名事物的名称,通常可以查看新闻文件,例如,在本例中: * Old tactic sho

如何证明Isabelle中归纳定义关系的不可伸缩性?

以Isabelle中自然数不等式的以下定义为例: inductive unequal :: "nat ⇒ nat ⇒ bool" where zero_suc: "unequal 0 (Suc _)" | suc_zero: "unequal (Suc _) 0" | suc_suc: "unequal n m ⟹ unequal (Suc n) (Suc m)" 我想证明不等的的不可伸缩性,也就是说,不等的n。为了便于说明,让我首先证明人工引理,-不相等(n+m)(n+m):

Isabelle 从变换公式看证明算法正确性和终止性的正确方法

我想证明一个函数/算法的正确性和终止性,该函数/算法将任何一阶逻辑公式转换为其否定范式NNF。 然而,我甚至不知道如何开始。有人能帮我吗 我曾尝试使用包FOL,但后来我意识到我不能同时导入Main以使用fun命令。然后我从Main开始,用blast证明了一些等价规则 现在我需要创建一个函数,将一阶公式转换为它的求反范式。我从这个开始: 有趣的托夫::道具==>道具在哪里 但这似乎不能正常工作,伊莎贝尔给了我一个信息:类型统一错误。这里有什么提示吗?在开始定义将一阶公式转换为NNF的函数之前,您可

如何陈述Isabelle中关于equiv的引理

我试图从它的文档中学习Isabelle符号和语法。特别是,我试图使用等价表示法(Isabelle 2020的main.pdf中的equiv)陈述一个引理 引理不一定有用,但我希望语法正确。我试着用以下内容来填补空白,希望说明平等是一种等价关系: lemma "equiv nat (=)" 尝试未成功,并生成以下错误: Type unification failed: Clash of types "_ ⇒ _" and "_ set"

Isabelle 如何看待伊莎贝尔的逐步推理';证明';

我最近开始学习伊莎贝尔,但我找不到一个非常重要的问题的答案:如何看待伊莎贝尔发现的“证据”的逐步推理?我不满意像“自动”或“使用定理A”这样的行,我想检查一步一步的推导。 当然,我了解了Isar的“证据”,但是1。这样的Isar证明并不总是由Sledgehammer和2。即使是Isar证明也不总是给出一步一步的推理。例如,Sledgehammer生成的我的一个定理的Isar证明如下所示: proof - have "... here is my formula ...."

Isabelle 伊莎贝尔中素数的定义

我正在学习伊莎贝尔教程。在第25页,它引用了素数的定义。我是这样写的: definition prime :: "nat ⇒ bool" where "prime p ≡ 1 < p ∧ (∀m. m dvd p ⟶ m = 1 ∨ m = p)" 它给出了错误 Wellsortedness error (in code equation prime ?p ≡ ord_nat_inst.less_nat on

Isabelle 伊莎贝尔:数据类型的补充

如何证明这个基本引理?我对伊莎贝尔比较陌生,这个问题令人困惑。通过案例分析: datatype aaa = A | B lemma "(a ~= A) --> (a = B)" 另一个初学者尝试的策略是使用大锤。对于这种引理,它肯定会很快得到一个证明。 by (cases a, auto)

Isabelle 如何通过求值简化归纳谓词?

我定义了一个非常简单的面向对象模型。该模型定义了一组类和一组关联 nonterminal fmaplets and fmaplet syntax "_fmaplet" :: "['a, 'a] ⇒ fmaplet" ("_ /↦⇩f/ _") "_fmaplets" :: "['a, 'a] ⇒ fmaplet" ("_ /[↦⇩f]/ _") "" :: "fmaplet ⇒ fmaplets"

Isabelle 如何解除引理

下面是一个具有确定性关系的示例数据类型 datatype ty1 = A | B | C ty1 | D ty1 inductive rel1 where "rel1 A (C B)" | "rel1 (C B) (D A)" lemma rel1_det: "rel1 x y ⟹ rel1 x z ⟹ y = z" by (elim rel1.cases; auto) 我正试图为以下类型提升引理: datatype 'a ty2 = E 'a | F 'a abbrevia

在Isabelle/Isar中使用时积累结果

有时在证明中,我发现自己需要累积结果,但也需要使用最后一个结果,因此我最终使用“,然后也使用””,用于此目的: proof have ... also then have ... also then have ... ultimately show ... qed 我觉得有更多我不知道的惯用方法。另一方面,这可能是标准的做法,并受到社区的鼓励 鉴于此,我有两个问题: 那么,使用“也不鼓励吗 如果是这样,我可以使用什么替代方法来累积结果 我将首先提供一些背景资料。你在《伊莎贝尔》

上一页 1 2 ...  9   10   11   12    13   14   15  ... 下一页 最后一页 共 17 页