Ssreflect中的perm_invK引理证明了什么?

时间:2015-01-26 15:47:45

标签: permutation coq theorem-proving ssreflect

以下代码来自Ssreflect Coq库中的perm.v。 我想知道这个结果是什么。

Lemma perm_invK s : cancel (fun x => iinv (perm_onto s x)) s.
Proof. by move=> x /=; rewrite f_iinv. Qed.

1 个答案:

答案 0 :(得分:3)

Ssreflect中的定义可能涉及许多概念,有时很难理解实际发生的事情。让我们按部分分析。

iinv(在fintype.v中定义)的类型为

iinv : forall (T : finType) (T' : eqType) (f : T -> T') 
              (A : pred T) (y : T'),
         y \in [seq f x | x in A] -> T

这样做可以反转f : T -> T'对子域A \subset T的限制在T'上的任何函数y。换句话说,如果你给我f一个A,该x \in A应用于f x = y的所有元素的T,那么我可以找到T'这样iinv。请注意,这主要取决于f_iinv是有限类型且perm_onto具有可判定的相等性的事实。 codom s =i predT的正确性在上面使用的引理s中说明。

T的类型为s,其中perm.v是在有限类型fun x => iinv (perm_onto s x)上定义的一些排列。正如其名称所暗示的那样,x是完全的(这是明显的,因为它是单射的,由y中的排列定义,以及域和密码域是相同)。因此,s y = x是将元素s映射到元素perm_invK以使s映射的函数。换句话说,它是perm_inv的倒数。 fun x => iinv (perm_onto s x)只是说这个函数确实是反函数(更确切地说,它是说它是perm_invK的左反)。

然而,实际有用的定义是perm_inv s,它出现在下面。它的作用是将{perm T}与正确性证明perm_inv s * s = s * perm_inv s = 1打包在一起,以定义{perm T}类{{1}}的元素,使{{1}}成为{{1}}。因此,您可以将其视为表示类型{{1}}在反转下关闭,这允许您使用许多ssr机制,例如,有限群和幺半群。