在我的Isabelle形式化中,我正在处理有限的自然数集,并且在这些集合上,我想考虑具有线性顺序属性的函数。
我看到库中有几种不同的订单形式,但我不确定要重用哪一种。在大多数情况下,我想检查它们是否为线性顺序的那些函数将仅使用诸如<
(less
)之类的库运算符来定义,但在某些情况下,它们可能被定义为更复杂的库函数组合。
我尝试HOL/Library/Order_Relation
,但似乎与<
无关;例如我无法自动证明以下引理:
lemma "linear_order_on {1::nat, 2} {(a::nat, b) . {a, b} ⊆ {1::nat, 2} ∧ a < b}"
(我确信将函数转换为关系有更好的方法,但这不是主要观点。)
如果有一些可以重复使用的库,如果你能告诉我,我会很感激。以数学上优雅的方式对此进行建模对我来说并不是最重要的,所以现在我正在考虑使用将有理数或实数分配给我的集合中的自然数的函数,然后使用<
这些理性/实际数字。
答案 0 :(得分:2)
我真的不知道是否有更好的理论可供使用,但你给出的引理是(仍然在修复之后)是假的(给定的关系是反射性的而预期的应该是反身性的)。以下是两个正确的版本:
lemma "linear_order_on {1::nat, 2} {(a::nat, b) . {a, b} ⊆ {1::nat, 2} ∧ a ≤ b}"
unfolding linear_order_on_def partial_order_on_def preorder_on_def
refl_on_def total_on_def trans_def antisym_def
by auto
lemma "strict_linear_order_on {1::nat, 2} {(a::nat, b) . {a, b} ⊆ {1::nat, 2} ∧ a < b}"
unfolding strict_linear_order_on_def partial_order_on_def preorder_on_def
irrefl_def total_on_def trans_def antisym_def
by auto