diff options
| author | Enrico Tassi | 2018-04-20 10:54:22 +0200 |
|---|---|---|
| committer | Enrico Tassi | 2018-04-20 10:54:22 +0200 |
| commit | ed05182cece6bb3706e09b2ce14af4a41a2e8141 (patch) | |
| tree | e850d7314b6372d0476cf2ffaf7d3830721db7b1 /docs/htmldoc/mathcomp.ssreflect.fintype.html | |
| parent | 3d196f44681fb3b23ff8a79fbd44e12308680531 (diff) | |
generate the documentation for 1.7
Diffstat (limited to 'docs/htmldoc/mathcomp.ssreflect.fintype.html')
| -rw-r--r-- | docs/htmldoc/mathcomp.ssreflect.fintype.html | 2096 |
1 files changed, 2096 insertions, 0 deletions
diff --git a/docs/htmldoc/mathcomp.ssreflect.fintype.html b/docs/htmldoc/mathcomp.ssreflect.fintype.html new file mode 100644 index 0000000..caca428 --- /dev/null +++ b/docs/htmldoc/mathcomp.ssreflect.fintype.html @@ -0,0 +1,2096 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" +"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> +<link href="coqdoc.css" rel="stylesheet" type="text/css" /> +<title>mathcomp.ssreflect.fintype</title> +</head> + +<body> + +<div id="page"> + +<div id="header"> +</div> + +<div id="main"> + +<h1 class="libtitle">Library mathcomp.ssreflect.fintype</h1> + +<div class="code"> +<span class="comment">(* (c) Copyright 2006-2016 Microsoft Corporation and Inria. <br/> + Distributed under the terms of CeCILL-B. *)</span><br/> +<span class="id" title="keyword">Require</span> <span class="id" title="keyword">Import</span> <a class="idref" href="mathcomp.ssreflect.ssreflect.html#"><span class="id" title="library">mathcomp.ssreflect.ssreflect</span></a>.<br/> + +<br/> +</div> + +<div class="doc"> + The Finite interface describes Types with finitely many elements, + supplying a duplicate-free sequence of all the elements. It is a subclass + of Countable and thus of Choice and Equality. As with Countable, the + interface explicitly includes these somewhat redundant superclasses to + ensure that Canonical instance inference remains consistent. Finiteness + could be stated more simply by bounding the range of the pickle function + supplied by the Countable interface, but this would yield a useless + computational interpretation due to the wasteful Peano integer encodings. + Because the Countable interface is closely tied to the Finite interface + and is not much used on its own, the Countable mixin is included inside + the Finite mixin; this makes it much easier to derive Finite variants of + interfaces, in this file for subFinType, and in the finalg library. + We define the following interfaces and structures: + finType == the packed class type of the Finite interface. + FinType m == the packed class for the Finite mixin m. + Finite.axiom e <-> every x : T occurs exactly once in e : seq T. + FinMixin ax_e == the Finite mixin for T, encapsulating + ax_e : Finite.axiom e for some e : seq T. + UniqFinMixin uniq_e total_e == an alternative mixin constructor that uses + uniq_e : uniq e and total_e : e =i xpredT. + PcanFinMixin fK == the Finite mixin for T, given f : T -> fT and g with fT + a finType and fK : pcancel f g. + CanFinMixin fK == the Finite mixin for T, given f : T -> fT and g with fT + a finType and fK : cancel f g. + subFinType == the join interface type for subType and finType. + [finType of T for fT] == clone for T of the finType fT. + [finType of T] == clone for T of the finType inferred for T. + [subFinType of T] == a subFinType structure for T, when T already has both + finType and subType structures. + [finMixin of T by <: ] == a finType structure for T, when T has a subType + structure over an existing finType. + We define or propagate the finType structure appropriately for all basic + types : unit, bool, option, prod, sum, sig and sigT. We also define a + generic type constructor for finite subtypes based on an explicit + enumeration: + seq_sub s == the subType of all x \in s, where s : seq T for some + eqType T; seq_sub s has a canonical finType instance + when T is a choiceType. + adhoc_seq_sub_choiceType s, adhoc_seq_sub_finType s == + non-canonical instances for seq_sub s, s : seq T, + which can be used when T is not a choiceType. + Bounded integers are supported by the following type and operations: + 'I_n, ordinal n == the finite subType of integers i < n, whose + enumeration is {0, ..., n.-1}. 'I_n coerces to nat, + so all the integer arithmetic functions can be used + with 'I_n. + Ordinal lt_i_n == the element of 'I_n with (nat) value i, given + lt_i_n : i < n. + nat_of_ord i == the nat value of i : 'I_n (this function is a + coercion so it is not usually displayed). + ord_enum n == the explicit increasing sequence of the i : 'I_n. + cast_ord eq_n_m i == the element j : 'I_m with the same value as i : 'I_n + given eq_n_m : n = m (indeed, i : nat and j : nat + are convertible). + widen_ord le_n_m i == a j : 'I_m with the same value as i : 'I_n, given + le_n_m : n <= m. + rev_ord i == the complement to n.-1 of i : 'I_n, such that + i + rev_ord i = n.-1. + inord k == the i : 'I_n.+1 with value k (n is inferred from the + context). + sub_ord k == the i : 'I_n.+1 with value n - k (n is inferred from + the context). + ord0 == the i : 'I_n.+1 with value 0 (n is inferred from the + context). + ord_max == the i : 'I_n.+1 with value n (n is inferred from the + context). + bump h k == k.+1 if k >= h, else k (this is a nat function). + unbump h k == k.-1 if k > h, else k (this is a nat function). + lift i j == the j' : 'I_n with value bump i j, where i : 'I_n + and j : 'I_n.-1. + unlift i j == None if i = j, else Some j', where j' : 'I_n.-1 has + value unbump i j, given i, j : 'I_n. + lshift n j == the i : 'I(m + n) with value j : 'I_m. + rshift m k == the i : 'I(m + n) with value m + k, k : 'I_n. + unsplit u == either lshift n j or rshift m k, depending on + whether if u : 'I_m + 'I_n is inl j or inr k. + split i == the u : 'I_m + 'I_n such that i = unsplit u; the + type 'I(m + n) of i determines the split. + Finally, every type T with a finType structure supports the following + operations: + enum A == a duplicate-free list of all the x \in A, where A is a + collective predicate over T. + #|A| == the cardinal of A, i.e., the number of x \in A. + enum_val i == the i'th item of enum A, where i : 'I(#|A|). + enum_rank x == the i : 'I(#|T|) such that enum_val i = x. + enum_rank_in Ax0 x == some i : 'I(#|A|) such that enum_val i = x if + x \in A, given Ax0 : x0 \in A. + A \subset B == all x \in A satisfy x \in B. + A \proper B == all x \in A satisfy x \in B but not the converse. + [disjoint A & B] == no x \in A satisfies x \in B. + image f A == the sequence of f x for all x : T such that x \in A + (where a is an applicative predicate), of length #|P|. + The codomain of F can be any type, but image f A can + only be used as a collective predicate is it is an + eqType. + codom f == a sequence spanning the codomain of f (:= image f T). + [seq F | x : T in A] := image (fun x : T => F) A. + [seq F | x : T] := [seq F | x <- {: T} ]. + [seq F | x in A], [seq F | x] == variants without casts. + iinv im_y == some x such that P x holds and f x = y, given + im_y : y \in image f P. + invF inj_f y == the x such that f x = y, for inj_j : injective f with + f : T -> T. + dinjectiveb A f == the restriction of f : T -> R to A is injective + (this is a bolean predicate, R must be an eqType). + injectiveb f == f : T -> R is injective (boolean predicate). + pred0b A == no x : T satisfies x \in A. + [forall x, P] == P (in which x can appear) is true for all values of x; + x must range over a finType. + [exists x, P] == P is true for some value of x. + [forall (x | C), P] := [forall x, C ==> P]. + [forall x in A, P] := [forall (x | x \in A), P]. + [exists (x | C), P] := [exists x, C && P]. + [exists x in A, P] := [exists (x | x \in A), P]. + and typed variants [forall x : T, P], [forall (x : T | C), P], + [exists x : T, P], [exists x : T in A, P], etc. +<ul class="doclist"> +<li>> The outer brackets can be omitted when nesting finitary quantifiers, + e.g., [forall i in I, forall j in J, exists a, f i j == a]. + 'forall_pP == view for [forall x, p _ ], for pP : reflect .. (p _). + 'exists_pP == view for [exists x, p _ ], for pP : reflect .. (p _). + [pick x | P] == Some x, for an x such that P holds, or None if there + is no such x. + [pick x : T] == Some x with x : T, provided T is nonempty, else None. + [pick x in A] == Some x, with x \in A, or None if A is empty. + +</li> +</ul> + [pick x in A | P] == Some x, with x \in A s.t. P holds, else None. + [pick x | P & Q] := [pick x | P & Q]. + [pick x in A | P & Q] := [pick x | P & Q]. + and (un)typed variants [pick x : T | P], [pick x : T in A], [pick x], etc. + [arg min(i < i0 | P) M] == a value of i : T minimizing M : nat, subject + to the condition P (i may appear in P and M), and + provided P holds for i0. + [arg max(i > i0 | P) M] == a value of i maximizing M subject to P and + provided P holds for i0. + [arg min(i < i0 in A) M] == an i \in A minimizing M if i0 \in A. + [arg max(i > i0 in A) M] == an i \in A maximizing M if i0 \in A. + [arg min(i < i0) M] == an i : T minimizing M, given i0 : T. + [arg max(i > i0) M] == an i : T maximizing M, given i0 : T. +</div> +<div class="code"> + +<br/> +<span class="id" title="keyword">Set Implicit Arguments</span>.<br/> + +<br/> +<span class="id" title="keyword">Module</span> <a name="Finite"><span class="id" title="module">Finite</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Section</span> <a name="Finite.RawMixin"><span class="id" title="section">RawMixin</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Variable</span> <a name="Finite.RawMixin.T"><span class="id" title="variable">T</span></a> : <a class="idref" href="mathcomp.ssreflect.eqtype.html#Equality.Exports.eqType"><span class="id" title="abbreviation">eqType</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Definition</span> <a name="Finite.axiom"><span class="id" title="definition">axiom</span></a> <span class="id" title="var">e</span> := <span class="id" title="keyword">∀</span> <span class="id" title="var">x</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#Finite.RawMixin.T"><span class="id" title="variable">T</span></a>, <a class="idref" href="mathcomp.ssreflect.seq.html#count_mem"><span class="id" title="abbreviation">count_mem</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#e"><span class="id" title="variable">e</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> 1.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="Finite.uniq_enumP"><span class="id" title="lemma">uniq_enumP</span></a> <span class="id" title="var">e</span> : <a class="idref" href="mathcomp.ssreflect.seq.html#uniq"><span class="id" title="definition">uniq</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#e"><span class="id" title="variable">e</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#e"><span class="id" title="variable">e</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#20bf07099d6d8cf369383b22fd37862e"><span class="id" title="notation">=</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#20bf07099d6d8cf369383b22fd37862e"><span class="id" title="notation">i</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#Finite.RawMixin.T"><span class="id" title="variable">T</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#Finite.axiom"><span class="id" title="definition">axiom</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#e"><span class="id" title="variable">e</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Record</span> <a name="Finite.mixin_of"><span class="id" title="record">mixin_of</span></a> := <a name="Finite.Mixin"><span class="id" title="constructor">Mixin</span></a> {<br/> + <a name="Finite.mixin_base"><span class="id" title="projection">mixin_base</span></a> : <a class="idref" href="mathcomp.ssreflect.choice.html#Countable.mixin_of"><span class="id" title="record">Countable.mixin_of</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#Finite.RawMixin.T"><span class="id" title="variable">T</span></a>;<br/> + <a name="Finite.mixin_enum"><span class="id" title="projection">mixin_enum</span></a> : <a class="idref" href="mathcomp.ssreflect.seq.html#seq"><span class="id" title="abbreviation">seq</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#Finite.RawMixin.T"><span class="id" title="variable">T</span></a>;<br/> + <span class="id" title="var">_</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#Finite.axiom"><span class="id" title="definition">axiom</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#mixin_enum"><span class="id" title="method">mixin_enum</span></a><br/> +}.<br/> + +<br/> +<span class="id" title="keyword">End</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#Finite.RawMixin"><span class="id" title="section">RawMixin</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Section</span> <a name="Finite.Mixins"><span class="id" title="section">Mixins</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Variable</span> <a name="Finite.Mixins.T"><span class="id" title="variable">T</span></a> : <a class="idref" href="mathcomp.ssreflect.choice.html#Countable.Exports.countType"><span class="id" title="abbreviation">countType</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Definition</span> <a name="Finite.EnumMixin"><span class="id" title="definition">EnumMixin</span></a> :=<br/> + <span class="id" title="keyword">let</span>: <a class="idref" href="mathcomp.ssreflect.choice.html#Countable.Pack"><span class="id" title="constructor">Countable.Pack</span></a> <span class="id" title="var">_</span> (<a class="idref" href="mathcomp.ssreflect.choice.html#Countable.Class"><span class="id" title="constructor">Countable.Class</span></a> <span class="id" title="var">_</span> <span class="id" title="var">m</span>) <span class="id" title="var">_</span> <span class="id" title="keyword">as</span> <span class="id" title="var">cT</span> := <a class="idref" href="mathcomp.ssreflect.fintype.html#Finite.Mixins.T"><span class="id" title="variable">T</span></a><br/> + <span class="id" title="keyword">return</span> <span class="id" title="keyword">∀</span> <span class="id" title="var">e</span> : <a class="idref" href="mathcomp.ssreflect.seq.html#seq"><span class="id" title="abbreviation">seq</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#cT"><span class="id" title="variable">cT</span></a>, <a class="idref" href="mathcomp.ssreflect.fintype.html#Finite.axiom"><span class="id" title="definition">axiom</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#e"><span class="id" title="variable">e</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#Finite.mixin_of"><span class="id" title="record">mixin_of</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#cT"><span class="id" title="variable">cT</span></a> <span class="id" title="tactic">in</span><br/> + @<a class="idref" href="mathcomp.ssreflect.fintype.html#Finite.Mixin"><span class="id" title="constructor">Mixin</span></a> (<a class="idref" href="mathcomp.ssreflect.eqtype.html#Equality.Exports.EqType"><span class="id" title="abbreviation">EqType</span></a> <span class="id" title="var">_</span> <span class="id" title="var">_</span>) <span class="id" title="var">m</span>.<br/> + +<br/> +<span class="id" title="keyword">Definition</span> <a name="Finite.UniqMixin"><span class="id" title="definition">UniqMixin</span></a> <span class="id" title="var">e</span> <span class="id" title="var">Ue</span> <span class="id" title="var">eT</span> := @<a class="idref" href="mathcomp.ssreflect.fintype.html#Finite.EnumMixin"><span class="id" title="definition">EnumMixin</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#e"><span class="id" title="variable">e</span></a> (<a class="idref" href="mathcomp.ssreflect.fintype.html#Finite.uniq_enumP"><span class="id" title="lemma">uniq_enumP</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#Ue"><span class="id" title="variable">Ue</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#eT"><span class="id" title="variable">eT</span></a>).<br/> + +<br/> +<span class="id" title="keyword">Variable</span> <a name="Finite.Mixins.n"><span class="id" title="variable">n</span></a> : <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Datatypes.html#nat"><span class="id" title="inductive">nat</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Definition</span> <a name="Finite.count_enum"><span class="id" title="definition">count_enum</span></a> := <a class="idref" href="mathcomp.ssreflect.seq.html#pmap"><span class="id" title="definition">pmap</span></a> (@<a class="idref" href="mathcomp.ssreflect.choice.html#pickle_inv"><span class="id" title="definition">pickle_inv</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#Finite.Mixins.T"><span class="id" title="variable">T</span></a>) (<a class="idref" href="mathcomp.ssreflect.seq.html#iota"><span class="id" title="definition">iota</span></a> 0 <a class="idref" href="mathcomp.ssreflect.fintype.html#Finite.Mixins.n"><span class="id" title="variable">n</span></a>).<br/> + +<br/> +<span class="id" title="keyword">Hypothesis</span> <a name="Finite.Mixins.ubT"><span class="id" title="variable">ubT</span></a> : <span class="id" title="keyword">∀</span> <span class="id" title="var">x</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#Finite.Mixins.T"><span class="id" title="variable">T</span></a>, <a class="idref" href="mathcomp.ssreflect.choice.html#pickle"><span class="id" title="definition">pickle</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a> <a class="idref" href="mathcomp.ssreflect.ssrnat.html#989c98e7ddd65d5bf37c334ff2076de8"><span class="id" title="notation"><</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#Finite.Mixins.n"><span class="id" title="variable">n</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="Finite.count_enumP"><span class="id" title="lemma">count_enumP</span></a> : <a class="idref" href="mathcomp.ssreflect.fintype.html#Finite.axiom"><span class="id" title="definition">axiom</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#Finite.count_enum"><span class="id" title="definition">count_enum</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Definition</span> <a name="Finite.CountMixin"><span class="id" title="definition">CountMixin</span></a> := <a class="idref" href="mathcomp.ssreflect.fintype.html#Finite.EnumMixin"><span class="id" title="definition">EnumMixin</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#Finite.count_enumP"><span class="id" title="lemma">count_enumP</span></a>.<br/> + +<br/> +<span class="id" title="keyword">End</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#Finite.Mixins"><span class="id" title="section">Mixins</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Section</span> <a name="Finite.ClassDef"><span class="id" title="section">ClassDef</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Record</span> <a name="Finite.class_of"><span class="id" title="record">class_of</span></a> <span class="id" title="var">T</span> := <a name="Finite.Class"><span class="id" title="constructor">Class</span></a> {<br/> + <a name="Finite.base"><span class="id" title="projection">base</span></a> : <a class="idref" href="mathcomp.ssreflect.choice.html#Choice.class_of"><span class="id" title="record">Choice.class_of</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#T"><span class="id" title="variable">T</span></a>;<br/> + <a name="Finite.mixin"><span class="id" title="projection">mixin</span></a> : <a class="idref" href="mathcomp.ssreflect.fintype.html#Finite.mixin_of"><span class="id" title="record">mixin_of</span></a> (<a class="idref" href="mathcomp.ssreflect.eqtype.html#Equality.Pack"><span class="id" title="constructor">Equality.Pack</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#base"><span class="id" title="method">base</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#T"><span class="id" title="variable">T</span></a>)<br/> +}.<br/> +<span class="id" title="keyword">Definition</span> <a name="Finite.base2"><span class="id" title="definition">base2</span></a> <span class="id" title="var">T</span> <span class="id" title="var">c</span> := <a class="idref" href="mathcomp.ssreflect.choice.html#Countable.Class"><span class="id" title="constructor">Countable.Class</span></a> (@<a class="idref" href="mathcomp.ssreflect.fintype.html#Finite.base"><span class="id" title="projection">base</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#T"><span class="id" title="variable">T</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#c"><span class="id" title="variable">c</span></a>) (<a class="idref" href="mathcomp.ssreflect.fintype.html#Finite.mixin_base"><span class="id" title="projection">mixin_base</span></a> (<a class="idref" href="mathcomp.ssreflect.fintype.html#Finite.mixin"><span class="id" title="projection">mixin</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#c"><span class="id" title="variable">c</span></a>)).<br/> + +<br/> +<span class="id" title="keyword">Structure</span> <a name="Finite.type"><span class="id" title="record">type</span></a> : <span class="id" title="keyword">Type</span> := <a name="Finite.Pack"><span class="id" title="constructor">Pack</span></a> {<a name="Finite.sort"><span class="id" title="projection">sort</span></a>; <span class="id" title="var">_</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#Finite.class_of"><span class="id" title="record">class_of</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#sort"><span class="id" title="method">sort</span></a>; <span class="id" title="var">_</span> : <span class="id" title="keyword">Type</span>}.<br/> +<span class="id" title="keyword">Variables</span> (<a name="Finite.ClassDef.T"><span class="id" title="variable">T</span></a> : <span class="id" title="keyword">Type</span>) (<a name="Finite.ClassDef.cT"><span class="id" title="variable">cT</span></a> : <a class="idref" href="mathcomp.ssreflect.fintype.html#Finite.type"><span class="id" title="record">type</span></a>).<br/> +<span class="id" title="keyword">Definition</span> <a name="Finite.class"><span class="id" title="definition">class</span></a> := <span class="id" title="keyword">let</span>: <a class="idref" href="mathcomp.ssreflect.fintype.html#Finite.Pack"><span class="id" title="constructor">Pack</span></a> <span class="id" title="var">_</span> <span class="id" title="var">c</span> <span class="id" title="var">_</span> <span class="id" title="keyword">as</span> <span class="id" title="var">cT'</span> := <a class="idref" href="mathcomp.ssreflect.fintype.html#Finite.ClassDef.cT"><span class="id" title="variable">cT</span></a> <span class="id" title="keyword">return</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#Finite.class_of"><span class="id" title="record">class_of</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#cT'"><span class="id" title="variable">cT'</span></a> <span class="id" title="tactic">in</span> <span class="id" title="var">c</span>.<br/> +<span class="id" title="keyword">Definition</span> <a name="Finite.clone"><span class="id" title="definition">clone</span></a> <span class="id" title="var">c</span> <span class="id" title="keyword">of</span> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrfun.html#phant_id"><span class="id" title="definition">phant_id</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#Finite.class"><span class="id" title="definition">class</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#c"><span class="id" title="variable">c</span></a> := @<a class="idref" href="mathcomp.ssreflect.fintype.html#Finite.Pack"><span class="id" title="constructor">Pack</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#Finite.ClassDef.T"><span class="id" title="variable">T</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#c"><span class="id" title="variable">c</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#Finite.ClassDef.T"><span class="id" title="variable">T</span></a>.<br/> +<span class="id" title="keyword">Let</span> <a name="Finite.ClassDef.xT"><span class="id" title="variable">xT</span></a> := <span class="id" title="keyword">let</span>: <a class="idref" href="mathcomp.ssreflect.fintype.html#Finite.Pack"><span class="id" title="constructor">Pack</span></a> <span class="id" title="var">T</span> <span class="id" title="var">_</span> <span class="id" title="var">_</span> := <a class="idref" href="mathcomp.ssreflect.fintype.html#Finite.ClassDef.cT"><span class="id" title="variable">cT</span></a> <span class="id" title="tactic">in</span> <span class="id" title="var">T</span>.<br/> +<span class="id" title="keyword">Notation</span> <a name="Finite.xclass"><span class="id" title="abbreviation">xclass</span></a> := (<a class="idref" href="mathcomp.ssreflect.fintype.html#Finite.class"><span class="id" title="definition">class</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssreflect.html#4509b22bf26e3d6d771897e22bd8bc8f"><span class="id" title="notation">:</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#Finite.class_of"><span class="id" title="record">class_of</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#Finite.ClassDef.xT"><span class="id" title="variable">xT</span></a>).<br/> + +<br/> +<span class="id" title="keyword">Definition</span> <a name="Finite.pack"><span class="id" title="definition">pack</span></a> <span class="id" title="var">b0</span> (<span class="id" title="var">m0</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#Finite.mixin_of"><span class="id" title="record">mixin_of</span></a> (<a class="idref" href="mathcomp.ssreflect.eqtype.html#Equality.Exports.EqType"><span class="id" title="abbreviation">EqType</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#Finite.ClassDef.T"><span class="id" title="variable">T</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#b0"><span class="id" title="variable">b0</span></a>)) :=<br/> + <span class="id" title="keyword">fun</span> <span class="id" title="var">bT</span> <span class="id" title="var">b</span> & <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrfun.html#phant_id"><span class="id" title="definition">phant_id</span></a> (<a class="idref" href="mathcomp.ssreflect.choice.html#Choice.class"><span class="id" title="definition">Choice.class</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#bT"><span class="id" title="variable">bT</span></a>) <a class="idref" href="mathcomp.ssreflect.fintype.html#b"><span class="id" title="variable">b</span></a> ⇒<br/> + <span class="id" title="keyword">fun</span> <span class="id" title="var">m</span> & <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrfun.html#phant_id"><span class="id" title="definition">phant_id</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#m0"><span class="id" title="variable">m0</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#m"><span class="id" title="variable">m</span></a> ⇒ <a class="idref" href="mathcomp.ssreflect.fintype.html#Finite.Pack"><span class="id" title="constructor">Pack</span></a> (@<a class="idref" href="mathcomp.ssreflect.fintype.html#Finite.Class"><span class="id" title="constructor">Class</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#Finite.ClassDef.T"><span class="id" title="variable">T</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#b"><span class="id" title="variable">b</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#m"><span class="id" title="variable">m</span></a>) <a class="idref" href="mathcomp.ssreflect.fintype.html#Finite.ClassDef.T"><span class="id" title="variable">T</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Definition</span> <a name="Finite.eqType"><span class="id" title="definition">eqType</span></a> := @<a class="idref" href="mathcomp.ssreflect.eqtype.html#Equality.Pack"><span class="id" title="constructor">Equality.Pack</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#Finite.ClassDef.cT"><span class="id" title="variable">cT</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#Finite.xclass"><span class="id" title="abbreviation">xclass</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#Finite.ClassDef.xT"><span class="id" title="variable">xT</span></a>.<br/> +<span class="id" title="keyword">Definition</span> <a name="Finite.choiceType"><span class="id" title="definition">choiceType</span></a> := @<a class="idref" href="mathcomp.ssreflect.choice.html#Choice.Pack"><span class="id" title="constructor">Choice.Pack</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#Finite.ClassDef.cT"><span class="id" title="variable">cT</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#Finite.xclass"><span class="id" title="abbreviation">xclass</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#Finite.ClassDef.xT"><span class="id" title="variable">xT</span></a>.<br/> +<span class="id" title="keyword">Definition</span> <a name="Finite.countType"><span class="id" title="definition">countType</span></a> := @<a class="idref" href="mathcomp.ssreflect.choice.html#Countable.Pack"><span class="id" title="constructor">Countable.Pack</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#Finite.ClassDef.cT"><span class="id" title="variable">cT</span></a> (<a class="idref" href="mathcomp.ssreflect.fintype.html#Finite.base2"><span class="id" title="definition">base2</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#Finite.xclass"><span class="id" title="abbreviation">xclass</span></a>) <a class="idref" href="mathcomp.ssreflect.fintype.html#Finite.ClassDef.xT"><span class="id" title="variable">xT</span></a>.<br/> + +<br/> +<span class="id" title="keyword">End</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#Finite.ClassDef"><span class="id" title="section">ClassDef</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Module</span> <span class="id" title="keyword">Import</span> <a name="Finite.Exports"><span class="id" title="module">Exports</span></a>.<br/> +<span class="id" title="keyword">Coercion</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#Finite.mixin_base"><span class="id" title="projection">mixin_base</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#Finite.mixin_base"><span class="id" title="projection">:</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#Finite.mixin_base"><span class="id" title="projection">mixin_of</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#Finite.mixin_base"><span class="id" title="projection">>-></span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#Finite.mixin_base"><span class="id" title="projection">Countable.mixin_of</span></a>.<br/> +<span class="id" title="keyword">Coercion</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#Finite.base"><span class="id" title="projection">base</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#Finite.base"><span class="id" title="projection">:</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#Finite.base"><span class="id" title="projection">class_of</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#Finite.base"><span class="id" title="projection">>-></span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#Finite.base"><span class="id" title="projection">Choice.class_of</span></a>.<br/> +<span class="id" title="keyword">Coercion</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#Finite.mixin"><span class="id" title="projection">mixin</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#Finite.mixin"><span class="id" title="projection">:</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#Finite.mixin"><span class="id" title="projection">class_of</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#Finite.mixin"><span class="id" title="projection">>-></span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#Finite.mixin"><span class="id" title="projection">mixin_of</span></a>.<br/> +<span class="id" title="keyword">Coercion</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#Finite.base2"><span class="id" title="definition">base2</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#Finite.base2"><span class="id" title="definition">:</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#Finite.base2"><span class="id" title="definition">class_of</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#Finite.base2"><span class="id" title="definition">>-></span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#Finite.base2"><span class="id" title="definition">Countable.class_of</span></a>.<br/> +<span class="id" title="keyword">Coercion</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#Finite.sort"><span class="id" title="projection">sort</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#Finite.sort"><span class="id" title="projection">:</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#Finite.sort"><span class="id" title="projection">type</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#Finite.sort"><span class="id" title="projection">>-></span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#Finite.sort"><span class="id" title="projection">Sortclass</span></a>.<br/> +<span class="id" title="keyword">Coercion</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#Finite.eqType"><span class="id" title="definition">eqType</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#Finite.eqType"><span class="id" title="definition">:</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#Finite.eqType"><span class="id" title="definition">type</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#Finite.eqType"><span class="id" title="definition">>-></span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#Finite.eqType"><span class="id" title="definition">Equality.type</span></a>.<br/> +<span class="id" title="keyword">Canonical</span> <span class="id" title="var">eqType</span>.<br/> +<span class="id" title="keyword">Coercion</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#Finite.choiceType"><span class="id" title="definition">choiceType</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#Finite.choiceType"><span class="id" title="definition">:</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#Finite.choiceType"><span class="id" title="definition">type</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#Finite.choiceType"><span class="id" title="definition">>-></span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#Finite.choiceType"><span class="id" title="definition">Choice.type</span></a>.<br/> +<span class="id" title="keyword">Canonical</span> <span class="id" title="var">choiceType</span>.<br/> +<span class="id" title="keyword">Coercion</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#Finite.countType"><span class="id" title="definition">countType</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#Finite.countType"><span class="id" title="definition">:</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#Finite.countType"><span class="id" title="definition">type</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#Finite.countType"><span class="id" title="definition">>-></span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#Finite.countType"><span class="id" title="definition">Countable.type</span></a>.<br/> +<span class="id" title="keyword">Canonical</span> <span class="id" title="var">countType</span>.<br/> +<span class="id" title="keyword">Notation</span> <a name="Finite.Exports.finType"><span class="id" title="abbreviation">finType</span></a> := <a class="idref" href="mathcomp.ssreflect.fintype.html#Finite.type"><span class="id" title="record">type</span></a>.<br/> +<span class="id" title="keyword">Notation</span> <a name="Finite.Exports.FinType"><span class="id" title="abbreviation">FinType</span></a> <span class="id" title="var">T</span> <span class="id" title="var">m</span> := (@<a class="idref" href="mathcomp.ssreflect.fintype.html#Finite.pack"><span class="id" title="definition">pack</span></a> <span class="id" title="var">T</span> <span class="id" title="var">_</span> <span class="id" title="var">m</span> <span class="id" title="var">_</span> <span class="id" title="var">_</span> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrfun.html#id"><span class="id" title="abbreviation">id</span></a> <span class="id" title="var">_</span> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrfun.html#id"><span class="id" title="abbreviation">id</span></a>).<br/> +<span class="id" title="keyword">Notation</span> <a name="Finite.Exports.FinMixin"><span class="id" title="abbreviation">FinMixin</span></a> := <a class="idref" href="mathcomp.ssreflect.fintype.html#Finite.EnumMixin"><span class="id" title="definition">EnumMixin</span></a>.<br/> +<span class="id" title="keyword">Notation</span> <a name="Finite.Exports.UniqFinMixin"><span class="id" title="abbreviation">UniqFinMixin</span></a> := <a class="idref" href="mathcomp.ssreflect.fintype.html#Finite.UniqMixin"><span class="id" title="definition">UniqMixin</span></a>.<br/> +<span class="id" title="keyword">Notation</span> <a name="8adb1b225d027f6dfac99128a373179e"><span class="id" title="notation">"</span></a>[ 'finType' 'of' T 'for' cT ]" := (@<a class="idref" href="mathcomp.ssreflect.fintype.html#Finite.clone"><span class="id" title="definition">clone</span></a> <span class="id" title="var">T</span> <span class="id" title="var">cT</span> <span class="id" title="var">_</span> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrfun.html#idfun"><span class="id" title="abbreviation">idfun</span></a>)<br/> + (<span class="id" title="tactic">at</span> <span class="id" title="keyword">level</span> 0, <span class="id" title="var">format</span> "[ 'finType' 'of' T 'for' cT ]") : <span class="id" title="var">form_scope</span>.<br/> +<span class="id" title="keyword">Notation</span> <a name="eb1f7a25d8e03f1f02a5769831d0e74e"><span class="id" title="notation">"</span></a>[ 'finType' 'of' T ]" := (@<a class="idref" href="mathcomp.ssreflect.fintype.html#Finite.clone"><span class="id" title="definition">clone</span></a> <span class="id" title="var">T</span> <span class="id" title="var">_</span> <span class="id" title="var">_</span> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrfun.html#id"><span class="id" title="abbreviation">id</span></a>)<br/> + (<span class="id" title="tactic">at</span> <span class="id" title="keyword">level</span> 0, <span class="id" title="var">format</span> "[ 'finType' 'of' T ]") : <span class="id" title="var">form_scope</span>.<br/> +<span class="id" title="keyword">End</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#Finite.Exports"><span class="id" title="module">Exports</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Module</span> <span class="id" title="keyword">Type</span> <a name="Finite.EnumSig"><span class="id" title="module">EnumSig</span></a>.<br/> +<span class="id" title="keyword">Parameter</span> <a name="Finite.EnumSig.enum"><span class="id" title="axiom">enum</span></a> : <span class="id" title="keyword">∀</span> <span class="id" title="var">cT</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#Finite.type"><span class="id" title="record">type</span></a>, <a class="idref" href="mathcomp.ssreflect.seq.html#seq"><span class="id" title="abbreviation">seq</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#cT"><span class="id" title="variable">cT</span></a>.<br/> +<span class="id" title="keyword">Axiom</span> <a name="Finite.EnumSig.enumDef"><span class="id" title="axiom">enumDef</span></a> : <a class="idref" href="mathcomp.ssreflect.fintype.html#Finite.EnumSig.enum"><span class="id" title="axiom">enum</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <span class="id" title="keyword">fun</span> <span class="id" title="var">cT</span> ⇒ <a class="idref" href="mathcomp.ssreflect.fintype.html#Finite.mixin_enum"><span class="id" title="projection">mixin_enum</span></a> (<a class="idref" href="mathcomp.ssreflect.fintype.html#Finite.class"><span class="id" title="definition">class</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#cT"><span class="id" title="variable">cT</span></a>).<br/> +<span class="id" title="keyword">End</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#Finite.EnumSig"><span class="id" title="module">EnumSig</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Module</span> <a name="Finite.EnumDef"><span class="id" title="module">EnumDef</span></a> : <a class="idref" href="mathcomp.ssreflect.fintype.html#Finite.EnumSig"><span class="id" title="module">EnumSig</span></a>.<br/> +<span class="id" title="keyword">Definition</span> <a name="Finite.EnumDef.enum"><span class="id" title="definition">enum</span></a> <span class="id" title="var">cT</span> := <a class="idref" href="mathcomp.ssreflect.fintype.html#Finite.mixin_enum"><span class="id" title="projection">mixin_enum</span></a> (<a class="idref" href="mathcomp.ssreflect.fintype.html#Finite.class"><span class="id" title="definition">class</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#cT"><span class="id" title="variable">cT</span></a>).<br/> +<span class="id" title="keyword">Definition</span> <a name="Finite.EnumDef.enumDef"><span class="id" title="definition">enumDef</span></a> := <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrfun.html#erefl"><span class="id" title="abbreviation">erefl</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#Finite.EnumDef.enum"><span class="id" title="definition">enum</span></a>.<br/> +<span class="id" title="keyword">End</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#Finite.EnumDef"><span class="id" title="module">EnumDef</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Notation</span> <a name="Finite.enum"><span class="id" title="abbreviation">enum</span></a> := <a class="idref" href="mathcomp.ssreflect.fintype.html#Finite.enum"><span class="id" title="axiom">EnumDef.enum</span></a>.<br/> + +<br/> +<span class="id" title="keyword">End</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#Finite"><span class="id" title="module">Finite</span></a>.<br/> +<span class="id" title="keyword">Export</span> <span class="id" title="var">Finite.Exports</span>.<br/> + +<br/> +<span class="id" title="keyword">Canonical</span> <span class="id" title="var">finEnum_unlock</span> := <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssreflect.html#Unlockable"><span class="id" title="constructor">Unlockable</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#enumDef"><span class="id" title="axiom">Finite.EnumDef.enumDef</span></a>.<br/> + +<br/> +</div> + +<div class="doc"> + Workaround for the silly syntactic uniformity restriction on coercions; + this avoids a cross-dependency between finset.v and prime.v for the + definition of the \pi(A) notation. +</div> +<div class="code"> +<span class="id" title="keyword">Definition</span> <a name="fin_pred_sort"><span class="id" title="definition">fin_pred_sort</span></a> (<span class="id" title="var">T</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#finType"><span class="id" title="abbreviation">finType</span></a>) (<span class="id" title="var">pT</span> : <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#predType"><span class="id" title="record">predType</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#T"><span class="id" title="variable">T</span></a>) := <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#pred_sort"><span class="id" title="projection">pred_sort</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#pT"><span class="id" title="variable">pT</span></a>.<br/> +<span class="id" title="keyword">Identity</span> <span class="id" title="keyword">Coercion</span> <span class="id" title="var">pred_sort_of_fin</span> : <span class="id" title="var">fin_pred_sort</span> >-> <span class="id" title="var">pred_sort</span>.<br/> + +<br/> +<span class="id" title="keyword">Definition</span> <a name="enum_mem"><span class="id" title="definition">enum_mem</span></a> <span class="id" title="var">T</span> (<span class="id" title="var">mA</span> : <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#mem_pred"><span class="id" title="inductive">mem_pred</span></a> <span class="id" title="var">_</span>) := <a class="idref" href="mathcomp.ssreflect.seq.html#filter"><span class="id" title="definition">filter</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#mA"><span class="id" title="variable">mA</span></a> (<a class="idref" href="mathcomp.ssreflect.fintype.html#enum"><span class="id" title="abbreviation">Finite.enum</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#T"><span class="id" title="variable">T</span></a>).<br/> +<span class="id" title="keyword">Notation</span> <a name="enum"><span class="id" title="abbreviation">enum</span></a> <span class="id" title="var">A</span> := (<a class="idref" href="mathcomp.ssreflect.fintype.html#enum_mem"><span class="id" title="definition">enum_mem</span></a> (<a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#mem"><span class="id" title="definition">mem</span></a> <span class="id" title="var">A</span>)).<br/> +<span class="id" title="keyword">Definition</span> <a name="pick"><span class="id" title="definition">pick</span></a> (<span class="id" title="var">T</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#finType"><span class="id" title="abbreviation">finType</span></a>) (<span class="id" title="var">P</span> : <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#pred"><span class="id" title="definition">pred</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#T"><span class="id" title="variable">T</span></a>) := <a class="idref" href="mathcomp.ssreflect.seq.html#ohead"><span class="id" title="definition">ohead</span></a> (<a class="idref" href="mathcomp.ssreflect.fintype.html#enum"><span class="id" title="abbreviation">enum</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#P"><span class="id" title="variable">P</span></a>).<br/> + +<br/> +<span class="id" title="keyword">Notation</span> <a name="705e11e709bb3e1492e885a674508f9a"><span class="id" title="notation">"</span></a>[ 'pick' x | P ]" := (<a class="idref" href="mathcomp.ssreflect.fintype.html#pick"><span class="id" title="definition">pick</span></a> (<span class="id" title="keyword">fun</span> <span class="id" title="var">x</span> ⇒ <span class="id" title="var">P</span>%<span class="id" title="var">B</span>))<br/> + (<span class="id" title="tactic">at</span> <span class="id" title="keyword">level</span> 0, <span class="id" title="var">x</span> <span class="id" title="var">ident</span>, <span class="id" title="var">format</span> "[ 'pick' x | P ]") : <span class="id" title="var">form_scope</span>.<br/> +<span class="id" title="keyword">Notation</span> <a name="2f8e234f25a0bfb63d8d9325ebea52f2"><span class="id" title="notation">"</span></a>[ 'pick' x : T | P ]" := (<a class="idref" href="mathcomp.ssreflect.fintype.html#pick"><span class="id" title="definition">pick</span></a> (<span class="id" title="keyword">fun</span> <span class="id" title="var">x</span> : <span class="id" title="var">T</span> ⇒ <span class="id" title="var">P</span>%<span class="id" title="var">B</span>))<br/> + (<span class="id" title="tactic">at</span> <span class="id" title="keyword">level</span> 0, <span class="id" title="var">x</span> <span class="id" title="var">ident</span>, <span class="id" title="var">only</span> <span class="id" title="var">parsing</span>) : <span class="id" title="var">form_scope</span>.<br/> +<span class="id" title="keyword">Definition</span> <a name="pick_true"><span class="id" title="definition">pick_true</span></a> <span class="id" title="var">T</span> (<span class="id" title="var">x</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#T"><span class="id" title="variable">T</span></a>) := <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Datatypes.html#true"><span class="id" title="constructor">true</span></a>.<br/> +<span class="id" title="keyword">Notation</span> <a name="d8965d9086bf48e373b12d1d9fed9f0d"><span class="id" title="notation">"</span></a>[ 'pick' x : T ]" := <a class="idref" href="mathcomp.ssreflect.fintype.html#2f8e234f25a0bfb63d8d9325ebea52f2"><span class="id" title="notation">[</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#2f8e234f25a0bfb63d8d9325ebea52f2"><span class="id" title="notation">pick</span></a> <span class="id" title="var">x</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#2f8e234f25a0bfb63d8d9325ebea52f2"><span class="id" title="notation">:</span></a> <span class="id" title="var">T</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#2f8e234f25a0bfb63d8d9325ebea52f2"><span class="id" title="notation">|</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#pick_true"><span class="id" title="definition">pick_true</span></a> <span class="id" title="var">x</span><a class="idref" href="mathcomp.ssreflect.fintype.html#2f8e234f25a0bfb63d8d9325ebea52f2"><span class="id" title="notation">]</span></a><br/> + (<span class="id" title="tactic">at</span> <span class="id" title="keyword">level</span> 0, <span class="id" title="var">x</span> <span class="id" title="var">ident</span>, <span class="id" title="var">only</span> <span class="id" title="var">parsing</span>).<br/> +<span class="id" title="keyword">Notation</span> <a name="9158ef05631069c99122031bebe4ceba"><span class="id" title="notation">"</span></a>[ 'pick' x ]" := <a class="idref" href="mathcomp.ssreflect.fintype.html#d8965d9086bf48e373b12d1d9fed9f0d"><span class="id" title="notation">[</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#d8965d9086bf48e373b12d1d9fed9f0d"><span class="id" title="notation">pick</span></a> <span class="id" title="var">x</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#d8965d9086bf48e373b12d1d9fed9f0d"><span class="id" title="notation">:</span></a> <span class="id" title="var">_</span><a class="idref" href="mathcomp.ssreflect.fintype.html#d8965d9086bf48e373b12d1d9fed9f0d"><span class="id" title="notation">]</span></a><br/> + (<span class="id" title="tactic">at</span> <span class="id" title="keyword">level</span> 0, <span class="id" title="var">x</span> <span class="id" title="var">ident</span>, <span class="id" title="var">only</span> <span class="id" title="var">parsing</span>) : <span class="id" title="var">form_scope</span>.<br/> +<span class="id" title="keyword">Notation</span> <a name="be40a086d160d4a296d3db1e390c0d70"><span class="id" title="notation">"</span></a>[ 'pic' 'k' x : T ]" := <a class="idref" href="mathcomp.ssreflect.fintype.html#2f8e234f25a0bfb63d8d9325ebea52f2"><span class="id" title="notation">[</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#2f8e234f25a0bfb63d8d9325ebea52f2"><span class="id" title="notation">pick</span></a> <span class="id" title="var">x</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#2f8e234f25a0bfb63d8d9325ebea52f2"><span class="id" title="notation">:</span></a> <span class="id" title="var">T</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#2f8e234f25a0bfb63d8d9325ebea52f2"><span class="id" title="notation">|</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#pick_true"><span class="id" title="definition">pick_true</span></a> <span class="id" title="var">_</span><a class="idref" href="mathcomp.ssreflect.fintype.html#2f8e234f25a0bfb63d8d9325ebea52f2"><span class="id" title="notation">]</span></a><br/> + (<span class="id" title="tactic">at</span> <span class="id" title="keyword">level</span> 0, <span class="id" title="var">x</span> <span class="id" title="var">ident</span>, <span class="id" title="var">format</span> "[ 'pic' 'k' x : T ]") : <span class="id" title="var">form_scope</span>.<br/> +<span class="id" title="keyword">Notation</span> <a name="fb3b9080c2d9b44b3a3b20007ac6581a"><span class="id" title="notation">"</span></a>[ 'pick' x | P & Q ]" := <a class="idref" href="mathcomp.ssreflect.fintype.html#705e11e709bb3e1492e885a674508f9a"><span class="id" title="notation">[</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#705e11e709bb3e1492e885a674508f9a"><span class="id" title="notation">pick</span></a> <span class="id" title="var">x</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#705e11e709bb3e1492e885a674508f9a"><span class="id" title="notation">|</span></a> <span class="id" title="var">P</span> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Datatypes.html#49ac24efa716d8b0ee8943bc1d1769a9"><span class="id" title="notation">&&</span></a> <span class="id" title="var">Q</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#705e11e709bb3e1492e885a674508f9a"><span class="id" title="notation">]</span></a><br/> + (<span class="id" title="tactic">at</span> <span class="id" title="keyword">level</span> 0, <span class="id" title="var">x</span> <span class="id" title="var">ident</span>,<br/> + <span class="id" title="var">format</span> "[ '[hv ' 'pick' x | P '/ ' & Q ] ']'") : <span class="id" title="var">form_scope</span>.<br/> +<span class="id" title="keyword">Notation</span> <a name="0c5c90797d8b4203818b755b9900d74f"><span class="id" title="notation">"</span></a>[ 'pick' x : T | P & Q ]" := <a class="idref" href="mathcomp.ssreflect.fintype.html#2f8e234f25a0bfb63d8d9325ebea52f2"><span class="id" title="notation">[</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#2f8e234f25a0bfb63d8d9325ebea52f2"><span class="id" title="notation">pick</span></a> <span class="id" title="var">x</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#2f8e234f25a0bfb63d8d9325ebea52f2"><span class="id" title="notation">:</span></a> <span class="id" title="var">T</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#2f8e234f25a0bfb63d8d9325ebea52f2"><span class="id" title="notation">|</span></a> <span class="id" title="var">P</span> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Datatypes.html#49ac24efa716d8b0ee8943bc1d1769a9"><span class="id" title="notation">&&</span></a> <span class="id" title="var">Q</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#2f8e234f25a0bfb63d8d9325ebea52f2"><span class="id" title="notation">]</span></a><br/> + (<span class="id" title="tactic">at</span> <span class="id" title="keyword">level</span> 0, <span class="id" title="var">x</span> <span class="id" title="var">ident</span>, <span class="id" title="var">only</span> <span class="id" title="var">parsing</span>) : <span class="id" title="var">form_scope</span>.<br/> +<span class="id" title="keyword">Notation</span> <a name="2bce0a522cee193da9da84e84bfae34b"><span class="id" title="notation">"</span></a>[ 'pick' x 'in' A ]" := <a class="idref" href="mathcomp.ssreflect.fintype.html#705e11e709bb3e1492e885a674508f9a"><span class="id" title="notation">[</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#705e11e709bb3e1492e885a674508f9a"><span class="id" title="notation">pick</span></a> <span class="id" title="var">x</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#705e11e709bb3e1492e885a674508f9a"><span class="id" title="notation">|</span></a> <span class="id" title="var">x</span> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#46c9e8232fa09401e24f1934bb65029f"><span class="id" title="notation">\</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#46c9e8232fa09401e24f1934bb65029f"><span class="id" title="notation">in</span></a> <span class="id" title="var">A</span><a class="idref" href="mathcomp.ssreflect.fintype.html#705e11e709bb3e1492e885a674508f9a"><span class="id" title="notation">]</span></a><br/> + (<span class="id" title="tactic">at</span> <span class="id" title="keyword">level</span> 0, <span class="id" title="var">x</span> <span class="id" title="var">ident</span>, <span class="id" title="var">format</span> "[ 'pick' x 'in' A ]") : <span class="id" title="var">form_scope</span>.<br/> +<span class="id" title="keyword">Notation</span> <a name="a87266d2e2ea1ec833aa55e0905c2870"><span class="id" title="notation">"</span></a>[ 'pick' x : T 'in' A ]" := <a class="idref" href="mathcomp.ssreflect.fintype.html#2f8e234f25a0bfb63d8d9325ebea52f2"><span class="id" title="notation">[</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#2f8e234f25a0bfb63d8d9325ebea52f2"><span class="id" title="notation">pick</span></a> <span class="id" title="var">x</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#2f8e234f25a0bfb63d8d9325ebea52f2"><span class="id" title="notation">:</span></a> <span class="id" title="var">T</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#2f8e234f25a0bfb63d8d9325ebea52f2"><span class="id" title="notation">|</span></a> <span class="id" title="var">x</span> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#46c9e8232fa09401e24f1934bb65029f"><span class="id" title="notation">\</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#46c9e8232fa09401e24f1934bb65029f"><span class="id" title="notation">in</span></a> <span class="id" title="var">A</span><a class="idref" href="mathcomp.ssreflect.fintype.html#2f8e234f25a0bfb63d8d9325ebea52f2"><span class="id" title="notation">]</span></a><br/> + (<span class="id" title="tactic">at</span> <span class="id" title="keyword">level</span> 0, <span class="id" title="var">x</span> <span class="id" title="var">ident</span>, <span class="id" title="var">only</span> <span class="id" title="var">parsing</span>) : <span class="id" title="var">form_scope</span>.<br/> +<span class="id" title="keyword">Notation</span> <a name="8927c280db2830f1bd2c142ca36478f7"><span class="id" title="notation">"</span></a>[ 'pick' x 'in' A | P ]" := <a class="idref" href="mathcomp.ssreflect.fintype.html#fb3b9080c2d9b44b3a3b20007ac6581a"><span class="id" title="notation">[</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#fb3b9080c2d9b44b3a3b20007ac6581a"><span class="id" title="notation">pick</span></a> <span class="id" title="var">x</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#fb3b9080c2d9b44b3a3b20007ac6581a"><span class="id" title="notation">|</span></a> <span class="id" title="var">x</span> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#46c9e8232fa09401e24f1934bb65029f"><span class="id" title="notation">\</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#46c9e8232fa09401e24f1934bb65029f"><span class="id" title="notation">in</span></a> <span class="id" title="var">A</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#fb3b9080c2d9b44b3a3b20007ac6581a"><span class="id" title="notation">&</span></a> <span class="id" title="var">P</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#fb3b9080c2d9b44b3a3b20007ac6581a"><span class="id" title="notation">]</span></a><br/> + (<span class="id" title="tactic">at</span> <span class="id" title="keyword">level</span> 0, <span class="id" title="var">x</span> <span class="id" title="var">ident</span>,<br/> + <span class="id" title="var">format</span> "[ '[hv ' 'pick' x 'in' A '/ ' | P ] ']'") : <span class="id" title="var">form_scope</span>.<br/> +<span class="id" title="keyword">Notation</span> <a name="75991fc89cb8057193493302b800fefe"><span class="id" title="notation">"</span></a>[ 'pick' x : T 'in' A | P ]" := <a class="idref" href="mathcomp.ssreflect.fintype.html#0c5c90797d8b4203818b755b9900d74f"><span class="id" title="notation">[</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#0c5c90797d8b4203818b755b9900d74f"><span class="id" title="notation">pick</span></a> <span class="id" title="var">x</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#0c5c90797d8b4203818b755b9900d74f"><span class="id" title="notation">:</span></a> <span class="id" title="var">T</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#0c5c90797d8b4203818b755b9900d74f"><span class="id" title="notation">|</span></a> <span class="id" title="var">x</span> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#46c9e8232fa09401e24f1934bb65029f"><span class="id" title="notation">\</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#46c9e8232fa09401e24f1934bb65029f"><span class="id" title="notation">in</span></a> <span class="id" title="var">A</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#0c5c90797d8b4203818b755b9900d74f"><span class="id" title="notation">&</span></a> <span class="id" title="var">P</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#0c5c90797d8b4203818b755b9900d74f"><span class="id" title="notation">]</span></a><br/> + (<span class="id" title="tactic">at</span> <span class="id" title="keyword">level</span> 0, <span class="id" title="var">x</span> <span class="id" title="var">ident</span>, <span class="id" title="var">only</span> <span class="id" title="var">parsing</span>) : <span class="id" title="var">form_scope</span>.<br/> +<span class="id" title="keyword">Notation</span> <a name="6e41fc9f538219673a88921206e95f4a"><span class="id" title="notation">"</span></a>[ 'pick' x 'in' A | P & Q ]" := <a class="idref" href="mathcomp.ssreflect.fintype.html#8927c280db2830f1bd2c142ca36478f7"><span class="id" title="notation">[</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#8927c280db2830f1bd2c142ca36478f7"><span class="id" title="notation">pick</span></a> <span class="id" title="var">x</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#8927c280db2830f1bd2c142ca36478f7"><span class="id" title="notation">in</span></a> <span class="id" title="var">A</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#8927c280db2830f1bd2c142ca36478f7"><span class="id" title="notation">|</span></a> <span class="id" title="var">P</span> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Datatypes.html#49ac24efa716d8b0ee8943bc1d1769a9"><span class="id" title="notation">&&</span></a> <span class="id" title="var">Q</span><a class="idref" href="mathcomp.ssreflect.fintype.html#8927c280db2830f1bd2c142ca36478f7"><span class="id" title="notation">]</span></a><br/> + (<span class="id" title="tactic">at</span> <span class="id" title="keyword">level</span> 0, <span class="id" title="var">x</span> <span class="id" title="var">ident</span>, <span class="id" title="var">format</span><br/> + "[ '[hv ' 'pick' x 'in' A '/ ' | P '/ ' & Q ] ']'") : <span class="id" title="var">form_scope</span>.<br/> +<span class="id" title="keyword">Notation</span> <a name="a21204d76f1d6b3f59cd00a059c10d7c"><span class="id" title="notation">"</span></a>[ 'pick' x : T 'in' A | P & Q ]" := <a class="idref" href="mathcomp.ssreflect.fintype.html#75991fc89cb8057193493302b800fefe"><span class="id" title="notation">[</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#75991fc89cb8057193493302b800fefe"><span class="id" title="notation">pick</span></a> <span class="id" title="var">x</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#75991fc89cb8057193493302b800fefe"><span class="id" title="notation">:</span></a> <span class="id" title="var">T</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#75991fc89cb8057193493302b800fefe"><span class="id" title="notation">in</span></a> <span class="id" title="var">A</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#75991fc89cb8057193493302b800fefe"><span class="id" title="notation">|</span></a> <span class="id" title="var">P</span> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Datatypes.html#49ac24efa716d8b0ee8943bc1d1769a9"><span class="id" title="notation">&&</span></a> <span class="id" title="var">Q</span><a class="idref" href="mathcomp.ssreflect.fintype.html#75991fc89cb8057193493302b800fefe"><span class="id" title="notation">]</span></a><br/> + (<span class="id" title="tactic">at</span> <span class="id" title="keyword">level</span> 0, <span class="id" title="var">x</span> <span class="id" title="var">ident</span>, <span class="id" title="var">only</span> <span class="id" title="var">parsing</span>) : <span class="id" title="var">form_scope</span>.<br/> + +<br/> +</div> + +<div class="doc"> + We lock the definitions of card and subset to mitigate divergence of the + Coq term comparison algorithm. +</div> +<div class="code"> + +<br/> +<span class="id" title="keyword">Module</span> <span class="id" title="keyword">Type</span> <a name="CardDefSig"><span class="id" title="module">CardDefSig</span></a>.<br/> +<span class="id" title="keyword">Parameter</span> <a name="CardDefSig.card"><span class="id" title="axiom">card</span></a> : <a class="idref" href="mathcomp.ssreflect.fintype.html#card_type"><span class="id" title="abbreviation">card_type</span></a>. <span class="id" title="keyword">Axiom</span> <a name="CardDefSig.cardEdef"><span class="id" title="axiom">cardEdef</span></a> : <a class="idref" href="mathcomp.ssreflect.fintype.html#CardDefSig.card"><span class="id" title="axiom">card</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#card_def"><span class="id" title="abbreviation">card_def</span></a>.<br/> +<span class="id" title="keyword">End</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#CardDefSig"><span class="id" title="module">CardDefSig</span></a>.<br/> +<span class="id" title="keyword">Module</span> <a name="CardDef"><span class="id" title="module">CardDef</span></a> : <a class="idref" href="mathcomp.ssreflect.fintype.html#CardDefSig"><span class="id" title="module">CardDefSig</span></a>.<br/> +<span class="id" title="keyword">Definition</span> <a name="CardDef.card"><span class="id" title="definition">card</span></a> : <a class="idref" href="mathcomp.ssreflect.fintype.html#card_type"><span class="id" title="abbreviation">card_type</span></a> := <a class="idref" href="mathcomp.ssreflect.fintype.html#card_def"><span class="id" title="abbreviation">card_def</span></a>. <span class="id" title="keyword">Definition</span> <a name="CardDef.cardEdef"><span class="id" title="definition">cardEdef</span></a> := <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrfun.html#erefl"><span class="id" title="abbreviation">erefl</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#CardDef.card"><span class="id" title="definition">card</span></a>.<br/> +<span class="id" title="keyword">End</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#CardDef"><span class="id" title="module">CardDef</span></a>.<br/> +</div> + +<div class="doc"> + Should be Include, but for a silly restriction: can't Include at toplevel! +</div> +<div class="code"> +<span class="id" title="keyword">Export</span> <span class="id" title="var">CardDef</span>.<br/> + +<br/> +<span class="id" title="keyword">Canonical</span> <span class="id" title="var">card_unlock</span> := <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssreflect.html#Unlockable"><span class="id" title="constructor">Unlockable</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#cardEdef"><span class="id" title="axiom">cardEdef</span></a>.<br/> +</div> + +<div class="doc"> + A is at level 99 to allow the notation #|G : H| in groups. +</div> +<div class="code"> +<span class="id" title="keyword">Notation</span> <a name="f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">"</span></a>#| A |" := (<a class="idref" href="mathcomp.ssreflect.fintype.html#card"><span class="id" title="axiom">card</span></a> (<a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#mem"><span class="id" title="definition">mem</span></a> <span class="id" title="var">A</span>))<br/> + (<span class="id" title="tactic">at</span> <span class="id" title="keyword">level</span> 0, <span class="id" title="var">A</span> <span class="id" title="tactic">at</span> <span class="id" title="keyword">level</span> 99, <span class="id" title="var">format</span> "#| A |") : <span class="id" title="var">nat_scope</span>.<br/> + +<br/> +<span class="id" title="keyword">Definition</span> <a name="pred0b"><span class="id" title="definition">pred0b</span></a> (<span class="id" title="var">T</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#finType"><span class="id" title="abbreviation">finType</span></a>) (<span class="id" title="var">P</span> : <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#pred"><span class="id" title="definition">pred</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#T"><span class="id" title="variable">T</span></a>) := <a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">#|</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#P"><span class="id" title="variable">P</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">|</span></a> <a class="idref" href="mathcomp.ssreflect.eqtype.html#17d28d004d0863cb022d4ce832ddaaae"><span class="id" title="notation">==</span></a> 0.<br/> + +<br/> +<span class="id" title="keyword">Module</span> <a name="FiniteQuant"><span class="id" title="module">FiniteQuant</span></a>.<br/> + +<br/> +<span class="id" title="keyword">CoInductive</span> <a name="FiniteQuant.quantified"><span class="id" title="inductive">quantified</span></a> := <a name="FiniteQuant.Quantified"><span class="id" title="constructor">Quantified</span></a> <span class="id" title="keyword">of</span> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Datatypes.html#bool"><span class="id" title="inductive">bool</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Delimit</span> <span class="id" title="keyword">Scope</span> <span class="id" title="var">fin_quant_scope</span> <span class="id" title="keyword">with</span> <span class="id" title="var">Q</span>. <span class="comment">(* Bogus, only used to declare scope. *)</span><br/> + +<br/> +<span class="id" title="keyword">Notation</span> <a name="ed8677a60b02e6f4a3e034ddedab0754"><span class="id" title="notation">"</span></a>F ^*" := (<a class="idref" href="mathcomp.ssreflect.fintype.html#FiniteQuant.Quantified"><span class="id" title="constructor">Quantified</span></a> <span class="id" title="var">F</span>) (<span class="id" title="tactic">at</span> <span class="id" title="keyword">level</span> 2).<br/> +<span class="id" title="keyword">Notation</span> <a name="87b50e2524afd24ce3fa86e25e250984"><span class="id" title="notation">"</span></a>F ^~" := (<a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#4b80c70cdb231351c5e129ba61f7f956"><span class="id" title="notation">~~</span></a> <span class="id" title="var">F</span>) (<span class="id" title="tactic">at</span> <span class="id" title="keyword">level</span> 2).<br/> + +<br/> +<span class="id" title="keyword">Section</span> <a name="FiniteQuant.Definitions"><span class="id" title="section">Definitions</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Variable</span> <a name="FiniteQuant.Definitions.T"><span class="id" title="variable">T</span></a> : <a class="idref" href="mathcomp.ssreflect.fintype.html#Finite.Exports.finType"><span class="id" title="abbreviation">finType</span></a>.<br/> +<span class="id" title="keyword">Implicit</span> <span class="id" title="keyword">Types</span> (<span class="id" title="var">B</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#FiniteQuant.quantified"><span class="id" title="inductive">quantified</span></a>) (<span class="id" title="var">x</span> <span class="id" title="var">y</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#FiniteQuant.Definitions.T"><span class="id" title="variable">T</span></a>).<br/> + +<br/> +<span class="id" title="keyword">Definition</span> <a name="FiniteQuant.quant0b"><span class="id" title="definition">quant0b</span></a> <span class="id" title="var">Bp</span> := <a class="idref" href="mathcomp.ssreflect.fintype.html#pred0b"><span class="id" title="definition">pred0b</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#ba4e2de877832f7c061554da0cb06dd3"><span class="id" title="notation">[</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#ba4e2de877832f7c061554da0cb06dd3"><span class="id" title="notation">pred</span></a> <span class="id" title="var">x</span> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#ba4e2de877832f7c061554da0cb06dd3"><span class="id" title="notation">:</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#FiniteQuant.Definitions.T"><span class="id" title="variable">T</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#ba4e2de877832f7c061554da0cb06dd3"><span class="id" title="notation">|</span></a> <span class="id" title="keyword">let</span>: <span class="id" title="var">F</span><a class="idref" href="mathcomp.ssreflect.fintype.html#ed8677a60b02e6f4a3e034ddedab0754"><span class="id" title="notation">^*</span></a> := <a class="idref" href="mathcomp.ssreflect.fintype.html#Bp"><span class="id" title="variable">Bp</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a> <span class="id" title="tactic">in</span> <span class="id" title="var">F</span><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#ba4e2de877832f7c061554da0cb06dd3"><span class="id" title="notation">]</span></a>.<br/> +</div> + +<div class="doc"> + The first redundant argument protects the notation from Coq's K-term + display kludge; the second protects it from simpl and /=. +</div> +<div class="code"> +<span class="id" title="keyword">Definition</span> <a name="FiniteQuant.ex"><span class="id" title="definition">ex</span></a> <span class="id" title="var">B</span> <span class="id" title="var">x</span> <span class="id" title="var">y</span> := <a class="idref" href="mathcomp.ssreflect.fintype.html#B"><span class="id" title="variable">B</span></a>.<br/> +</div> + +<div class="doc"> + Binding the predicate value rather than projecting it prevents spurious + unfolding of the boolean connectives by unification. +</div> +<div class="code"> +<span class="id" title="keyword">Definition</span> <a name="FiniteQuant.all"><span class="id" title="definition">all</span></a> <span class="id" title="var">B</span> <span class="id" title="var">x</span> <span class="id" title="var">y</span> := <span class="id" title="keyword">let</span>: <span class="id" title="var">F</span><a class="idref" href="mathcomp.ssreflect.fintype.html#ed8677a60b02e6f4a3e034ddedab0754"><span class="id" title="notation">^*</span></a> := <a class="idref" href="mathcomp.ssreflect.fintype.html#B"><span class="id" title="variable">B</span></a> <span class="id" title="tactic">in</span> <span class="id" title="var">F</span><a class="idref" href="mathcomp.ssreflect.fintype.html#87b50e2524afd24ce3fa86e25e250984"><span class="id" title="notation">^~</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#ed8677a60b02e6f4a3e034ddedab0754"><span class="id" title="notation">^*</span></a>.<br/> +<span class="id" title="keyword">Definition</span> <a name="FiniteQuant.all_in"><span class="id" title="definition">all_in</span></a> <span class="id" title="var">C</span> <span class="id" title="var">B</span> <span class="id" title="var">x</span> <span class="id" title="var">y</span> := <span class="id" title="keyword">let</span>: <span class="id" title="var">F</span><a class="idref" href="mathcomp.ssreflect.fintype.html#ed8677a60b02e6f4a3e034ddedab0754"><span class="id" title="notation">^*</span></a> := <a class="idref" href="mathcomp.ssreflect.fintype.html#B"><span class="id" title="variable">B</span></a> <span class="id" title="tactic">in</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#87b50e2524afd24ce3fa86e25e250984"><span class="id" title="notation">(</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#C"><span class="id" title="variable">C</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#3b17cb5f3a16fa64a62421f68786f750"><span class="id" title="notation">==></span></a> <span class="id" title="var">F</span><a class="idref" href="mathcomp.ssreflect.fintype.html#87b50e2524afd24ce3fa86e25e250984"><span class="id" title="notation">)^~</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#ed8677a60b02e6f4a3e034ddedab0754"><span class="id" title="notation">^*</span></a>.<br/> +<span class="id" title="keyword">Definition</span> <a name="FiniteQuant.ex_in"><span class="id" title="definition">ex_in</span></a> <span class="id" title="var">C</span> <span class="id" title="var">B</span> <span class="id" title="var">x</span> <span class="id" title="var">y</span> := <span class="id" title="keyword">let</span>: <span class="id" title="var">F</span><a class="idref" href="mathcomp.ssreflect.fintype.html#ed8677a60b02e6f4a3e034ddedab0754"><span class="id" title="notation">^*</span></a> := <a class="idref" href="mathcomp.ssreflect.fintype.html#B"><span class="id" title="variable">B</span></a> <span class="id" title="tactic">in</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#ed8677a60b02e6f4a3e034ddedab0754"><span class="id" title="notation">(</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#C"><span class="id" title="variable">C</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Datatypes.html#49ac24efa716d8b0ee8943bc1d1769a9"><span class="id" title="notation">&&</span></a> <span class="id" title="var">F</span><a class="idref" href="mathcomp.ssreflect.fintype.html#ed8677a60b02e6f4a3e034ddedab0754"><span class="id" title="notation">)^*</span></a>.<br/> + +<br/> +<span class="id" title="keyword">End</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#FiniteQuant.Definitions"><span class="id" title="section">Definitions</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Notation</span> <a name="8851f797d0e413ad24e2bf680ba67c0f"><span class="id" title="notation">"</span></a>[ x | B ]" := (<a class="idref" href="mathcomp.ssreflect.fintype.html#FiniteQuant.quant0b"><span class="id" title="definition">quant0b</span></a> (<span class="id" title="keyword">fun</span> <span class="id" title="var">x</span> ⇒ <span class="id" title="var">B</span> <span class="id" title="var">x</span>)) (<span class="id" title="tactic">at</span> <span class="id" title="keyword">level</span> 0, <span class="id" title="var">x</span> <span class="id" title="var">ident</span>).<br/> +<span class="id" title="keyword">Notation</span> <a name="6aaa6b7c692b4350a2b0b8947c625448"><span class="id" title="notation">"</span></a>[ x : T | B ]" := (<a class="idref" href="mathcomp.ssreflect.fintype.html#FiniteQuant.quant0b"><span class="id" title="definition">quant0b</span></a> (<span class="id" title="keyword">fun</span> <span class="id" title="var">x</span> : <span class="id" title="var">T</span> ⇒ <span class="id" title="var">B</span> <span class="id" title="var">x</span>)) (<span class="id" title="tactic">at</span> <span class="id" title="keyword">level</span> 0, <span class="id" title="var">x</span> <span class="id" title="var">ident</span>).<br/> + +<br/> +<span class="id" title="keyword">Module</span> <a name="FiniteQuant.Exports"><span class="id" title="module">Exports</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Notation</span> <a name="46e5a4123d46e6b126f7788a77176785"><span class="id" title="notation">"</span></a>, F" := <span class="id" title="var">F</span><a class="idref" href="mathcomp.ssreflect.fintype.html#ed8677a60b02e6f4a3e034ddedab0754"><span class="id" title="notation">^*</span></a> (<span class="id" title="tactic">at</span> <span class="id" title="keyword">level</span> 200, <span class="id" title="var">format</span> ", '/ ' F") : <span class="id" title="var">fin_quant_scope</span>.<br/> + +<br/> +<span class="id" title="keyword">Notation</span> <a name="6f09da91da7950fd65c31195ac4a5d3e"><span class="id" title="notation">"</span></a>[ 'forall' x B ]" := <a class="idref" href="mathcomp.ssreflect.fintype.html#8851f797d0e413ad24e2bf680ba67c0f"><span class="id" title="notation">[</span></a><span class="id" title="var">x</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#8851f797d0e413ad24e2bf680ba67c0f"><span class="id" title="notation">|</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#FiniteQuant.all"><span class="id" title="definition">all</span></a> <span class="id" title="var">B</span><a class="idref" href="mathcomp.ssreflect.fintype.html#8851f797d0e413ad24e2bf680ba67c0f"><span class="id" title="notation">]</span></a><br/> + (<span class="id" title="tactic">at</span> <span class="id" title="keyword">level</span> 0, <span class="id" title="var">x</span> <span class="id" title="tactic">at</span> <span class="id" title="keyword">level</span> 99, <span class="id" title="var">B</span> <span class="id" title="tactic">at</span> <span class="id" title="keyword">level</span> 200,<br/> + <span class="id" title="var">format</span> "[ '[hv' 'forall' x B ] ']'") : <span class="id" title="var">bool_scope</span>.<br/> + +<br/> +<span class="id" title="keyword">Notation</span> <a name="924e46d1120f21a5b355c376b609abe3"><span class="id" title="notation">"</span></a>[ 'forall' x : T B ]" := <a class="idref" href="mathcomp.ssreflect.fintype.html#6aaa6b7c692b4350a2b0b8947c625448"><span class="id" title="notation">[</span></a><span class="id" title="var">x</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#6aaa6b7c692b4350a2b0b8947c625448"><span class="id" title="notation">:</span></a> <span class="id" title="var">T</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#6aaa6b7c692b4350a2b0b8947c625448"><span class="id" title="notation">|</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#FiniteQuant.all"><span class="id" title="definition">all</span></a> <span class="id" title="var">B</span><a class="idref" href="mathcomp.ssreflect.fintype.html#6aaa6b7c692b4350a2b0b8947c625448"><span class="id" title="notation">]</span></a><br/> + (<span class="id" title="tactic">at</span> <span class="id" title="keyword">level</span> 0, <span class="id" title="var">x</span> <span class="id" title="tactic">at</span> <span class="id" title="keyword">level</span> 99, <span class="id" title="var">B</span> <span class="id" title="tactic">at</span> <span class="id" title="keyword">level</span> 200, <span class="id" title="var">only</span> <span class="id" title="var">parsing</span>) : <span class="id" title="var">bool_scope</span>.<br/> +<span class="id" title="keyword">Notation</span> <a name="71aa9b4d33ee64c2b31b6cd545727657"><span class="id" title="notation">"</span></a>[ 'forall' ( x | C ) B ]" := <a class="idref" href="mathcomp.ssreflect.fintype.html#8851f797d0e413ad24e2bf680ba67c0f"><span class="id" title="notation">[</span></a><span class="id" title="var">x</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#8851f797d0e413ad24e2bf680ba67c0f"><span class="id" title="notation">|</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#FiniteQuant.all_in"><span class="id" title="definition">all_in</span></a> <span class="id" title="var">C</span> <span class="id" title="var">B</span><a class="idref" href="mathcomp.ssreflect.fintype.html#8851f797d0e413ad24e2bf680ba67c0f"><span class="id" title="notation">]</span></a><br/> + (<span class="id" title="tactic">at</span> <span class="id" title="keyword">level</span> 0, <span class="id" title="var">x</span> <span class="id" title="tactic">at</span> <span class="id" title="keyword">level</span> 99, <span class="id" title="var">B</span> <span class="id" title="tactic">at</span> <span class="id" title="keyword">level</span> 200,<br/> + <span class="id" title="var">format</span> "[ '[hv' '[' 'forall' ( x '/ ' | C ) ']' B ] ']'") : <span class="id" title="var">bool_scope</span>.<br/> +<span class="id" title="keyword">Notation</span> <a name="fba75b5bf7a054f7244152ab0a960e30"><span class="id" title="notation">"</span></a>[ 'forall' ( x : T | C ) B ]" := <a class="idref" href="mathcomp.ssreflect.fintype.html#6aaa6b7c692b4350a2b0b8947c625448"><span class="id" title="notation">[</span></a><span class="id" title="var">x</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#6aaa6b7c692b4350a2b0b8947c625448"><span class="id" title="notation">:</span></a> <span class="id" title="var">T</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#6aaa6b7c692b4350a2b0b8947c625448"><span class="id" title="notation">|</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#FiniteQuant.all_in"><span class="id" title="definition">all_in</span></a> <span class="id" title="var">C</span> <span class="id" title="var">B</span><a class="idref" href="mathcomp.ssreflect.fintype.html#6aaa6b7c692b4350a2b0b8947c625448"><span class="id" title="notation">]</span></a><br/> + (<span class="id" title="tactic">at</span> <span class="id" title="keyword">level</span> 0, <span class="id" title="var">x</span> <span class="id" title="tactic">at</span> <span class="id" title="keyword">level</span> 99, <span class="id" title="var">B</span> <span class="id" title="tactic">at</span> <span class="id" title="keyword">level</span> 200, <span class="id" title="var">only</span> <span class="id" title="var">parsing</span>) : <span class="id" title="var">bool_scope</span>.<br/> +<span class="id" title="keyword">Notation</span> <a name="0a2353937835d965c09d6cd592199019"><span class="id" title="notation">"</span></a>[ 'forall' x 'in' A B ]" := <a class="idref" href="mathcomp.ssreflect.fintype.html#8851f797d0e413ad24e2bf680ba67c0f"><span class="id" title="notation">[</span></a><span class="id" title="var">x</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#8851f797d0e413ad24e2bf680ba67c0f"><span class="id" title="notation">|</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#FiniteQuant.all_in"><span class="id" title="definition">all_in</span></a> (<span class="id" title="var">x</span> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#46c9e8232fa09401e24f1934bb65029f"><span class="id" title="notation">\</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#46c9e8232fa09401e24f1934bb65029f"><span class="id" title="notation">in</span></a> <span class="id" title="var">A</span>) <span class="id" title="var">B</span><a class="idref" href="mathcomp.ssreflect.fintype.html#8851f797d0e413ad24e2bf680ba67c0f"><span class="id" title="notation">]</span></a><br/> + (<span class="id" title="tactic">at</span> <span class="id" title="keyword">level</span> 0, <span class="id" title="var">x</span> <span class="id" title="tactic">at</span> <span class="id" title="keyword">level</span> 99, <span class="id" title="var">B</span> <span class="id" title="tactic">at</span> <span class="id" title="keyword">level</span> 200,<br/> + <span class="id" title="var">format</span> "[ '[hv' '[' 'forall' x '/ ' 'in' A ']' B ] ']'") : <span class="id" title="var">bool_scope</span>.<br/> +<span class="id" title="keyword">Notation</span> <a name="35b77e34a049e8a812164aa2debaf974"><span class="id" title="notation">"</span></a>[ 'forall' x : T 'in' A B ]" := <a class="idref" href="mathcomp.ssreflect.fintype.html#6aaa6b7c692b4350a2b0b8947c625448"><span class="id" title="notation">[</span></a><span class="id" title="var">x</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#6aaa6b7c692b4350a2b0b8947c625448"><span class="id" title="notation">:</span></a> <span class="id" title="var">T</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#6aaa6b7c692b4350a2b0b8947c625448"><span class="id" title="notation">|</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#FiniteQuant.all_in"><span class="id" title="definition">all_in</span></a> (<span class="id" title="var">x</span> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#46c9e8232fa09401e24f1934bb65029f"><span class="id" title="notation">\</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#46c9e8232fa09401e24f1934bb65029f"><span class="id" title="notation">in</span></a> <span class="id" title="var">A</span>) <span class="id" title="var">B</span><a class="idref" href="mathcomp.ssreflect.fintype.html#6aaa6b7c692b4350a2b0b8947c625448"><span class="id" title="notation">]</span></a><br/> + (<span class="id" title="tactic">at</span> <span class="id" title="keyword">level</span> 0, <span class="id" title="var">x</span> <span class="id" title="tactic">at</span> <span class="id" title="keyword">level</span> 99, <span class="id" title="var">B</span> <span class="id" title="tactic">at</span> <span class="id" title="keyword">level</span> 200, <span class="id" title="var">only</span> <span class="id" title="var">parsing</span>) : <span class="id" title="var">bool_scope</span>.<br/> +<span class="id" title="keyword">Notation</span> <a name="e66d8de38c2dd41a650467838c8fd364"><span class="id" title="notation">"</span></a>, 'forall' x B" := <a class="idref" href="mathcomp.ssreflect.fintype.html#8851f797d0e413ad24e2bf680ba67c0f"><span class="id" title="notation">[</span></a><span class="id" title="var">x</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#8851f797d0e413ad24e2bf680ba67c0f"><span class="id" title="notation">|</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#FiniteQuant.all"><span class="id" title="definition">all</span></a> <span class="id" title="var">B</span><a class="idref" href="mathcomp.ssreflect.fintype.html#8851f797d0e413ad24e2bf680ba67c0f"><span class="id" title="notation">]</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#ed8677a60b02e6f4a3e034ddedab0754"><span class="id" title="notation">^*</span></a><br/> + (<span class="id" title="tactic">at</span> <span class="id" title="keyword">level</span> 200, <span class="id" title="var">x</span> <span class="id" title="tactic">at</span> <span class="id" title="keyword">level</span> 99, <span class="id" title="var">B</span> <span class="id" title="tactic">at</span> <span class="id" title="keyword">level</span> 200,<br/> + <span class="id" title="var">format</span> ", '/ ' 'forall' x B") : <span class="id" title="var">fin_quant_scope</span>.<br/> +<span class="id" title="keyword">Notation</span> <a name="179e9cebf3b372c78d9f6a5df5a9c45d"><span class="id" title="notation">"</span></a>, 'forall' x : T B" := <a class="idref" href="mathcomp.ssreflect.fintype.html#6aaa6b7c692b4350a2b0b8947c625448"><span class="id" title="notation">[</span></a><span class="id" title="var">x</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#6aaa6b7c692b4350a2b0b8947c625448"><span class="id" title="notation">:</span></a> <span class="id" title="var">T</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#6aaa6b7c692b4350a2b0b8947c625448"><span class="id" title="notation">|</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#FiniteQuant.all"><span class="id" title="definition">all</span></a> <span class="id" title="var">B</span><a class="idref" href="mathcomp.ssreflect.fintype.html#6aaa6b7c692b4350a2b0b8947c625448"><span class="id" title="notation">]</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#ed8677a60b02e6f4a3e034ddedab0754"><span class="id" title="notation">^*</span></a><br/> + (<span class="id" title="tactic">at</span> <span class="id" title="keyword">level</span> 200, <span class="id" title="var">x</span> <span class="id" title="tactic">at</span> <span class="id" title="keyword">level</span> 99, <span class="id" title="var">B</span> <span class="id" title="tactic">at</span> <span class="id" title="keyword">level</span> 200, <span class="id" title="var">only</span> <span class="id" title="var">parsing</span>) : <span class="id" title="var">fin_quant_scope</span>.<br/> +<span class="id" title="keyword">Notation</span> <a name="71e191c4608118a84659c62df77deabc"><span class="id" title="notation">"</span></a>, 'forall' ( x | C ) B" := <a class="idref" href="mathcomp.ssreflect.fintype.html#8851f797d0e413ad24e2bf680ba67c0f"><span class="id" title="notation">[</span></a><span class="id" title="var">x</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#8851f797d0e413ad24e2bf680ba67c0f"><span class="id" title="notation">|</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#FiniteQuant.all_in"><span class="id" title="definition">all_in</span></a> <span class="id" title="var">C</span> <span class="id" title="var">B</span><a class="idref" href="mathcomp.ssreflect.fintype.html#8851f797d0e413ad24e2bf680ba67c0f"><span class="id" title="notation">]</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#ed8677a60b02e6f4a3e034ddedab0754"><span class="id" title="notation">^*</span></a><br/> + (<span class="id" title="tactic">at</span> <span class="id" title="keyword">level</span> 200, <span class="id" title="var">x</span> <span class="id" title="tactic">at</span> <span class="id" title="keyword">level</span> 99, <span class="id" title="var">B</span> <span class="id" title="tactic">at</span> <span class="id" title="keyword">level</span> 200,<br/> + <span class="id" title="var">format</span> ", '/ ' '[' 'forall' ( x '/ ' | C ) ']' B") : <span class="id" title="var">fin_quant_scope</span>.<br/> +<span class="id" title="keyword">Notation</span> <a name="33851fdc2b3107574ff195c5b3a5f91c"><span class="id" title="notation">"</span></a>, 'forall' ( x : T | C ) B" := <a class="idref" href="mathcomp.ssreflect.fintype.html#6aaa6b7c692b4350a2b0b8947c625448"><span class="id" title="notation">[</span></a><span class="id" title="var">x</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#6aaa6b7c692b4350a2b0b8947c625448"><span class="id" title="notation">:</span></a> <span class="id" title="var">T</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#6aaa6b7c692b4350a2b0b8947c625448"><span class="id" title="notation">|</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#FiniteQuant.all_in"><span class="id" title="definition">all_in</span></a> <span class="id" title="var">C</span> <span class="id" title="var">B</span><a class="idref" href="mathcomp.ssreflect.fintype.html#6aaa6b7c692b4350a2b0b8947c625448"><span class="id" title="notation">]</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#ed8677a60b02e6f4a3e034ddedab0754"><span class="id" title="notation">^*</span></a><br/> + (<span class="id" title="tactic">at</span> <span class="id" title="keyword">level</span> 200, <span class="id" title="var">x</span> <span class="id" title="tactic">at</span> <span class="id" title="keyword">level</span> 99, <span class="id" title="var">B</span> <span class="id" title="tactic">at</span> <span class="id" title="keyword">level</span> 200, <span class="id" title="var">only</span> <span class="id" title="var">parsing</span>) : <span class="id" title="var">fin_quant_scope</span>.<br/> +<span class="id" title="keyword">Notation</span> <a name="569613cf8a3bdd9ea86bbbe48a5b61c3"><span class="id" title="notation">"</span></a>, 'forall' x 'in' A B" := <a class="idref" href="mathcomp.ssreflect.fintype.html#8851f797d0e413ad24e2bf680ba67c0f"><span class="id" title="notation">[</span></a><span class="id" title="var">x</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#8851f797d0e413ad24e2bf680ba67c0f"><span class="id" title="notation">|</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#FiniteQuant.all_in"><span class="id" title="definition">all_in</span></a> (<span class="id" title="var">x</span> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#46c9e8232fa09401e24f1934bb65029f"><span class="id" title="notation">\</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#46c9e8232fa09401e24f1934bb65029f"><span class="id" title="notation">in</span></a> <span class="id" title="var">A</span>) <span class="id" title="var">B</span><a class="idref" href="mathcomp.ssreflect.fintype.html#8851f797d0e413ad24e2bf680ba67c0f"><span class="id" title="notation">]</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#ed8677a60b02e6f4a3e034ddedab0754"><span class="id" title="notation">^*</span></a><br/> + (<span class="id" title="tactic">at</span> <span class="id" title="keyword">level</span> 200, <span class="id" title="var">x</span> <span class="id" title="tactic">at</span> <span class="id" title="keyword">level</span> 99, <span class="id" title="var">B</span> <span class="id" title="tactic">at</span> <span class="id" title="keyword">level</span> 200,<br/> + <span class="id" title="var">format</span> ", '/ ' '[' 'forall' x '/ ' 'in' A ']' B") : <span class="id" title="var">bool_scope</span>.<br/> +<span class="id" title="keyword">Notation</span> <a name="a1fa7fa2f38c8bf7a4380b3099a7f5cc"><span class="id" title="notation">"</span></a>, 'forall' x : T 'in' A B" := <a class="idref" href="mathcomp.ssreflect.fintype.html#6aaa6b7c692b4350a2b0b8947c625448"><span class="id" title="notation">[</span></a><span class="id" title="var">x</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#6aaa6b7c692b4350a2b0b8947c625448"><span class="id" title="notation">:</span></a> <span class="id" title="var">T</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#6aaa6b7c692b4350a2b0b8947c625448"><span class="id" title="notation">|</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#FiniteQuant.all_in"><span class="id" title="definition">all_in</span></a> (<span class="id" title="var">x</span> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#46c9e8232fa09401e24f1934bb65029f"><span class="id" title="notation">\</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#46c9e8232fa09401e24f1934bb65029f"><span class="id" title="notation">in</span></a> <span class="id" title="var">A</span>) <span class="id" title="var">B</span><a class="idref" href="mathcomp.ssreflect.fintype.html#6aaa6b7c692b4350a2b0b8947c625448"><span class="id" title="notation">]</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#ed8677a60b02e6f4a3e034ddedab0754"><span class="id" title="notation">^*</span></a><br/> + (<span class="id" title="tactic">at</span> <span class="id" title="keyword">level</span> 200, <span class="id" title="var">x</span> <span class="id" title="tactic">at</span> <span class="id" title="keyword">level</span> 99, <span class="id" title="var">B</span> <span class="id" title="tactic">at</span> <span class="id" title="keyword">level</span> 200, <span class="id" title="var">only</span> <span class="id" title="var">parsing</span>) : <span class="id" title="var">bool_scope</span>.<br/> + +<br/> +<span class="id" title="keyword">Notation</span> <a name="e1fcc6c8b4370f06a39f9b1b3c9764b2"><span class="id" title="notation">"</span></a>[ 'exists' x B ]" := <a class="idref" href="mathcomp.ssreflect.fintype.html#8851f797d0e413ad24e2bf680ba67c0f"><span class="id" title="notation">[</span></a><span class="id" title="var">x</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#8851f797d0e413ad24e2bf680ba67c0f"><span class="id" title="notation">|</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#FiniteQuant.ex"><span class="id" title="definition">ex</span></a> <span class="id" title="var">B</span><a class="idref" href="mathcomp.ssreflect.fintype.html#8851f797d0e413ad24e2bf680ba67c0f"><span class="id" title="notation">]</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#87b50e2524afd24ce3fa86e25e250984"><span class="id" title="notation">^~</span></a><br/> + (<span class="id" title="tactic">at</span> <span class="id" title="keyword">level</span> 0, <span class="id" title="var">x</span> <span class="id" title="tactic">at</span> <span class="id" title="keyword">level</span> 99, <span class="id" title="var">B</span> <span class="id" title="tactic">at</span> <span class="id" title="keyword">level</span> 200,<br/> + <span class="id" title="var">format</span> "[ '[hv' 'exists' x B ] ']'") : <span class="id" title="var">bool_scope</span>.<br/> +<span class="id" title="keyword">Notation</span> <a name="a843dcbb9dc2e69b147054d3e1465e78"><span class="id" title="notation">"</span></a>[ 'exists' x : T B ]" := <a class="idref" href="mathcomp.ssreflect.fintype.html#6aaa6b7c692b4350a2b0b8947c625448"><span class="id" title="notation">[</span></a><span class="id" title="var">x</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#6aaa6b7c692b4350a2b0b8947c625448"><span class="id" title="notation">:</span></a> <span class="id" title="var">T</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#6aaa6b7c692b4350a2b0b8947c625448"><span class="id" title="notation">|</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#FiniteQuant.ex"><span class="id" title="definition">ex</span></a> <span class="id" title="var">B</span><a class="idref" href="mathcomp.ssreflect.fintype.html#6aaa6b7c692b4350a2b0b8947c625448"><span class="id" title="notation">]</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#87b50e2524afd24ce3fa86e25e250984"><span class="id" title="notation">^~</span></a><br/> + (<span class="id" title="tactic">at</span> <span class="id" title="keyword">level</span> 0, <span class="id" title="var">x</span> <span class="id" title="tactic">at</span> <span class="id" title="keyword">level</span> 99, <span class="id" title="var">B</span> <span class="id" title="tactic">at</span> <span class="id" title="keyword">level</span> 200, <span class="id" title="var">only</span> <span class="id" title="var">parsing</span>) : <span class="id" title="var">bool_scope</span>.<br/> +<span class="id" title="keyword">Notation</span> <a name="2622a9930e3eed1321ab6ed4605c7142"><span class="id" title="notation">"</span></a>[ 'exists' ( x | C ) B ]" := <a class="idref" href="mathcomp.ssreflect.fintype.html#8851f797d0e413ad24e2bf680ba67c0f"><span class="id" title="notation">[</span></a><span class="id" title="var">x</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#8851f797d0e413ad24e2bf680ba67c0f"><span class="id" title="notation">|</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#FiniteQuant.ex_in"><span class="id" title="definition">ex_in</span></a> <span class="id" title="var">C</span> <span class="id" title="var">B</span><a class="idref" href="mathcomp.ssreflect.fintype.html#8851f797d0e413ad24e2bf680ba67c0f"><span class="id" title="notation">]</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#87b50e2524afd24ce3fa86e25e250984"><span class="id" title="notation">^~</span></a><br/> + (<span class="id" title="tactic">at</span> <span class="id" title="keyword">level</span> 0, <span class="id" title="var">x</span> <span class="id" title="tactic">at</span> <span class="id" title="keyword">level</span> 99, <span class="id" title="var">B</span> <span class="id" title="tactic">at</span> <span class="id" title="keyword">level</span> 200,<br/> + <span class="id" title="var">format</span> "[ '[hv' '[' 'exists' ( x '/ ' | C ) ']' B ] ']'") : <span class="id" title="var">bool_scope</span>.<br/> +<span class="id" title="keyword">Notation</span> <a name="158832d8c1ec7121db752c45c87cc3aa"><span class="id" title="notation">"</span></a>[ 'exists' ( x : T | C ) B ]" := <a class="idref" href="mathcomp.ssreflect.fintype.html#6aaa6b7c692b4350a2b0b8947c625448"><span class="id" title="notation">[</span></a><span class="id" title="var">x</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#6aaa6b7c692b4350a2b0b8947c625448"><span class="id" title="notation">:</span></a> <span class="id" title="var">T</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#6aaa6b7c692b4350a2b0b8947c625448"><span class="id" title="notation">|</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#FiniteQuant.ex_in"><span class="id" title="definition">ex_in</span></a> <span class="id" title="var">C</span> <span class="id" title="var">B</span><a class="idref" href="mathcomp.ssreflect.fintype.html#6aaa6b7c692b4350a2b0b8947c625448"><span class="id" title="notation">]</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#87b50e2524afd24ce3fa86e25e250984"><span class="id" title="notation">^~</span></a><br/> + (<span class="id" title="tactic">at</span> <span class="id" title="keyword">level</span> 0, <span class="id" title="var">x</span> <span class="id" title="tactic">at</span> <span class="id" title="keyword">level</span> 99, <span class="id" title="var">B</span> <span class="id" title="tactic">at</span> <span class="id" title="keyword">level</span> 200, <span class="id" title="var">only</span> <span class="id" title="var">parsing</span>) : <span class="id" title="var">bool_scope</span>.<br/> +<span class="id" title="keyword">Notation</span> <a name="5404fd9d76c24a375fce91eeeb1972da"><span class="id" title="notation">"</span></a>[ 'exists' x 'in' A B ]" := <a class="idref" href="mathcomp.ssreflect.fintype.html#8851f797d0e413ad24e2bf680ba67c0f"><span class="id" title="notation">[</span></a><span class="id" title="var">x</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#8851f797d0e413ad24e2bf680ba67c0f"><span class="id" title="notation">|</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#FiniteQuant.ex_in"><span class="id" title="definition">ex_in</span></a> (<span class="id" title="var">x</span> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#46c9e8232fa09401e24f1934bb65029f"><span class="id" title="notation">\</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#46c9e8232fa09401e24f1934bb65029f"><span class="id" title="notation">in</span></a> <span class="id" title="var">A</span>) <span class="id" title="var">B</span><a class="idref" href="mathcomp.ssreflect.fintype.html#8851f797d0e413ad24e2bf680ba67c0f"><span class="id" title="notation">]</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#87b50e2524afd24ce3fa86e25e250984"><span class="id" title="notation">^~</span></a><br/> + (<span class="id" title="tactic">at</span> <span class="id" title="keyword">level</span> 0, <span class="id" title="var">x</span> <span class="id" title="tactic">at</span> <span class="id" title="keyword">level</span> 99, <span class="id" title="var">B</span> <span class="id" title="tactic">at</span> <span class="id" title="keyword">level</span> 200,<br/> + <span class="id" title="var">format</span> "[ '[hv' '[' 'exists' x '/ ' 'in' A ']' B ] ']'") : <span class="id" title="var">bool_scope</span>.<br/> +<span class="id" title="keyword">Notation</span> <a name="a933bbd16e3a45a4b889ac2f8732ec0e"><span class="id" title="notation">"</span></a>[ 'exists' x : T 'in' A B ]" := <a class="idref" href="mathcomp.ssreflect.fintype.html#6aaa6b7c692b4350a2b0b8947c625448"><span class="id" title="notation">[</span></a><span class="id" title="var">x</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#6aaa6b7c692b4350a2b0b8947c625448"><span class="id" title="notation">:</span></a> <span class="id" title="var">T</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#6aaa6b7c692b4350a2b0b8947c625448"><span class="id" title="notation">|</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#FiniteQuant.ex_in"><span class="id" title="definition">ex_in</span></a> (<span class="id" title="var">x</span> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#46c9e8232fa09401e24f1934bb65029f"><span class="id" title="notation">\</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#46c9e8232fa09401e24f1934bb65029f"><span class="id" title="notation">in</span></a> <span class="id" title="var">A</span>) <span class="id" title="var">B</span><a class="idref" href="mathcomp.ssreflect.fintype.html#6aaa6b7c692b4350a2b0b8947c625448"><span class="id" title="notation">]</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#87b50e2524afd24ce3fa86e25e250984"><span class="id" title="notation">^~</span></a><br/> + (<span class="id" title="tactic">at</span> <span class="id" title="keyword">level</span> 0, <span class="id" title="var">x</span> <span class="id" title="tactic">at</span> <span class="id" title="keyword">level</span> 99, <span class="id" title="var">B</span> <span class="id" title="tactic">at</span> <span class="id" title="keyword">level</span> 200, <span class="id" title="var">only</span> <span class="id" title="var">parsing</span>) : <span class="id" title="var">bool_scope</span>.<br/> +<span class="id" title="keyword">Notation</span> <a name="ef3225e810fcf2e8c51fa9af98d6cdaf"><span class="id" title="notation">"</span></a>, 'exists' x B" := <a class="idref" href="mathcomp.ssreflect.fintype.html#8851f797d0e413ad24e2bf680ba67c0f"><span class="id" title="notation">[</span></a><span class="id" title="var">x</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#8851f797d0e413ad24e2bf680ba67c0f"><span class="id" title="notation">|</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#FiniteQuant.ex"><span class="id" title="definition">ex</span></a> <span class="id" title="var">B</span><a class="idref" href="mathcomp.ssreflect.fintype.html#8851f797d0e413ad24e2bf680ba67c0f"><span class="id" title="notation">]</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#87b50e2524afd24ce3fa86e25e250984"><span class="id" title="notation">^~</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#ed8677a60b02e6f4a3e034ddedab0754"><span class="id" title="notation">^*</span></a><br/> + (<span class="id" title="tactic">at</span> <span class="id" title="keyword">level</span> 200, <span class="id" title="var">x</span> <span class="id" title="tactic">at</span> <span class="id" title="keyword">level</span> 99, <span class="id" title="var">B</span> <span class="id" title="tactic">at</span> <span class="id" title="keyword">level</span> 200,<br/> + <span class="id" title="var">format</span> ", '/ ' 'exists' x B") : <span class="id" title="var">fin_quant_scope</span>.<br/> +<span class="id" title="keyword">Notation</span> <a name="9a69525d4d7bd01771d4d07ab174d2f1"><span class="id" title="notation">"</span></a>, 'exists' x : T B" := <a class="idref" href="mathcomp.ssreflect.fintype.html#6aaa6b7c692b4350a2b0b8947c625448"><span class="id" title="notation">[</span></a><span class="id" title="var">x</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#6aaa6b7c692b4350a2b0b8947c625448"><span class="id" title="notation">:</span></a> <span class="id" title="var">T</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#6aaa6b7c692b4350a2b0b8947c625448"><span class="id" title="notation">|</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#FiniteQuant.ex"><span class="id" title="definition">ex</span></a> <span class="id" title="var">B</span><a class="idref" href="mathcomp.ssreflect.fintype.html#6aaa6b7c692b4350a2b0b8947c625448"><span class="id" title="notation">]</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#87b50e2524afd24ce3fa86e25e250984"><span class="id" title="notation">^~</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#ed8677a60b02e6f4a3e034ddedab0754"><span class="id" title="notation">^*</span></a><br/> + (<span class="id" title="tactic">at</span> <span class="id" title="keyword">level</span> 200, <span class="id" title="var">x</span> <span class="id" title="tactic">at</span> <span class="id" title="keyword">level</span> 99, <span class="id" title="var">B</span> <span class="id" title="tactic">at</span> <span class="id" title="keyword">level</span> 200, <span class="id" title="var">only</span> <span class="id" title="var">parsing</span>) : <span class="id" title="var">fin_quant_scope</span>.<br/> +<span class="id" title="keyword">Notation</span> <a name="5fcc6a9a5ab8cf28a008d132794985d5"><span class="id" title="notation">"</span></a>, 'exists' ( x | C ) B" := <a class="idref" href="mathcomp.ssreflect.fintype.html#8851f797d0e413ad24e2bf680ba67c0f"><span class="id" title="notation">[</span></a><span class="id" title="var">x</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#8851f797d0e413ad24e2bf680ba67c0f"><span class="id" title="notation">|</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#FiniteQuant.ex_in"><span class="id" title="definition">ex_in</span></a> <span class="id" title="var">C</span> <span class="id" title="var">B</span><a class="idref" href="mathcomp.ssreflect.fintype.html#8851f797d0e413ad24e2bf680ba67c0f"><span class="id" title="notation">]</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#87b50e2524afd24ce3fa86e25e250984"><span class="id" title="notation">^~</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#ed8677a60b02e6f4a3e034ddedab0754"><span class="id" title="notation">^*</span></a><br/> + (<span class="id" title="tactic">at</span> <span class="id" title="keyword">level</span> 200, <span class="id" title="var">x</span> <span class="id" title="tactic">at</span> <span class="id" title="keyword">level</span> 99, <span class="id" title="var">B</span> <span class="id" title="tactic">at</span> <span class="id" title="keyword">level</span> 200,<br/> + <span class="id" title="var">format</span> ", '/ ' '[' 'exists' ( x '/ ' | C ) ']' B") : <span class="id" title="var">fin_quant_scope</span>.<br/> +<span class="id" title="keyword">Notation</span> <a name="7b05ad85727c891b29b0672026ea07f9"><span class="id" title="notation">"</span></a>, 'exists' ( x : T | C ) B" := <a class="idref" href="mathcomp.ssreflect.fintype.html#6aaa6b7c692b4350a2b0b8947c625448"><span class="id" title="notation">[</span></a><span class="id" title="var">x</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#6aaa6b7c692b4350a2b0b8947c625448"><span class="id" title="notation">:</span></a> <span class="id" title="var">T</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#6aaa6b7c692b4350a2b0b8947c625448"><span class="id" title="notation">|</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#FiniteQuant.ex_in"><span class="id" title="definition">ex_in</span></a> <span class="id" title="var">C</span> <span class="id" title="var">B</span><a class="idref" href="mathcomp.ssreflect.fintype.html#6aaa6b7c692b4350a2b0b8947c625448"><span class="id" title="notation">]</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#87b50e2524afd24ce3fa86e25e250984"><span class="id" title="notation">^~</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#ed8677a60b02e6f4a3e034ddedab0754"><span class="id" title="notation">^*</span></a><br/> + (<span class="id" title="tactic">at</span> <span class="id" title="keyword">level</span> 200, <span class="id" title="var">x</span> <span class="id" title="tactic">at</span> <span class="id" title="keyword">level</span> 99, <span class="id" title="var">B</span> <span class="id" title="tactic">at</span> <span class="id" title="keyword">level</span> 200, <span class="id" title="var">only</span> <span class="id" title="var">parsing</span>) : <span class="id" title="var">fin_quant_scope</span>.<br/> +<span class="id" title="keyword">Notation</span> <a name="16c0991f94f0d812137457fc1c1383fe"><span class="id" title="notation">"</span></a>, 'exists' x 'in' A B" := <a class="idref" href="mathcomp.ssreflect.fintype.html#8851f797d0e413ad24e2bf680ba67c0f"><span class="id" title="notation">[</span></a><span class="id" title="var">x</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#8851f797d0e413ad24e2bf680ba67c0f"><span class="id" title="notation">|</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#FiniteQuant.ex_in"><span class="id" title="definition">ex_in</span></a> (<span class="id" title="var">x</span> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#46c9e8232fa09401e24f1934bb65029f"><span class="id" title="notation">\</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#46c9e8232fa09401e24f1934bb65029f"><span class="id" title="notation">in</span></a> <span class="id" title="var">A</span>) <span class="id" title="var">B</span><a class="idref" href="mathcomp.ssreflect.fintype.html#8851f797d0e413ad24e2bf680ba67c0f"><span class="id" title="notation">]</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#87b50e2524afd24ce3fa86e25e250984"><span class="id" title="notation">^~</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#ed8677a60b02e6f4a3e034ddedab0754"><span class="id" title="notation">^*</span></a><br/> + (<span class="id" title="tactic">at</span> <span class="id" title="keyword">level</span> 200, <span class="id" title="var">x</span> <span class="id" title="tactic">at</span> <span class="id" title="keyword">level</span> 99, <span class="id" title="var">B</span> <span class="id" title="tactic">at</span> <span class="id" title="keyword">level</span> 200,<br/> + <span class="id" title="var">format</span> ", '/ ' '[' 'exists' x '/ ' 'in' A ']' B") : <span class="id" title="var">bool_scope</span>.<br/> +<span class="id" title="keyword">Notation</span> <a name="820c0d91f14d8bd214791c55fe4916da"><span class="id" title="notation">"</span></a>, 'exists' x : T 'in' A B" := <a class="idref" href="mathcomp.ssreflect.fintype.html#6aaa6b7c692b4350a2b0b8947c625448"><span class="id" title="notation">[</span></a><span class="id" title="var">x</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#6aaa6b7c692b4350a2b0b8947c625448"><span class="id" title="notation">:</span></a> <span class="id" title="var">T</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#6aaa6b7c692b4350a2b0b8947c625448"><span class="id" title="notation">|</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#FiniteQuant.ex_in"><span class="id" title="definition">ex_in</span></a> (<span class="id" title="var">x</span> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#46c9e8232fa09401e24f1934bb65029f"><span class="id" title="notation">\</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#46c9e8232fa09401e24f1934bb65029f"><span class="id" title="notation">in</span></a> <span class="id" title="var">A</span>) <span class="id" title="var">B</span><a class="idref" href="mathcomp.ssreflect.fintype.html#6aaa6b7c692b4350a2b0b8947c625448"><span class="id" title="notation">]</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#87b50e2524afd24ce3fa86e25e250984"><span class="id" title="notation">^~</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#ed8677a60b02e6f4a3e034ddedab0754"><span class="id" title="notation">^*</span></a><br/> + (<span class="id" title="tactic">at</span> <span class="id" title="keyword">level</span> 200, <span class="id" title="var">x</span> <span class="id" title="tactic">at</span> <span class="id" title="keyword">level</span> 99, <span class="id" title="var">B</span> <span class="id" title="tactic">at</span> <span class="id" title="keyword">level</span> 200, <span class="id" title="var">only</span> <span class="id" title="var">parsing</span>) : <span class="id" title="var">bool_scope</span>.<br/> + +<br/> +<span class="id" title="keyword">End</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#FiniteQuant.Exports"><span class="id" title="module">Exports</span></a>.<br/> + +<br/> +<span class="id" title="keyword">End</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#FiniteQuant"><span class="id" title="module">FiniteQuant</span></a>.<br/> +<span class="id" title="keyword">Export</span> <span class="id" title="var">FiniteQuant.Exports</span>.<br/> + +<br/> +<span class="id" title="keyword">Definition</span> <a name="disjoint"><span class="id" title="definition">disjoint</span></a> <span class="id" title="var">T</span> (<span class="id" title="var">A</span> <span class="id" title="var">B</span> : <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#mem_pred"><span class="id" title="inductive">mem_pred</span></a> <span class="id" title="var">_</span>) := @<a class="idref" href="mathcomp.ssreflect.fintype.html#pred0b"><span class="id" title="definition">pred0b</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#T"><span class="id" title="variable">T</span></a> (<a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#predI"><span class="id" title="definition">predI</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#B"><span class="id" title="variable">B</span></a>).<br/> +<span class="id" title="keyword">Notation</span> <a name="fca367ac88276c4c83db3cc7c637993a"><span class="id" title="notation">"</span></a>[ 'disjoint' A & B ]" := (<a class="idref" href="mathcomp.ssreflect.fintype.html#disjoint"><span class="id" title="definition">disjoint</span></a> (<a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#mem"><span class="id" title="definition">mem</span></a> <span class="id" title="var">A</span>) (<a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#mem"><span class="id" title="definition">mem</span></a> <span class="id" title="var">B</span>))<br/> + (<span class="id" title="tactic">at</span> <span class="id" title="keyword">level</span> 0,<br/> + <span class="id" title="var">format</span> "'[hv' [ 'disjoint' '/ ' A '/' & B ] ']'") : <span class="id" title="var">bool_scope</span>.<br/> + +<br/> +<span class="id" title="keyword">Module</span> <span class="id" title="keyword">Type</span> <a name="SubsetDefSig"><span class="id" title="module">SubsetDefSig</span></a>.<br/> +<span class="id" title="keyword">Parameter</span> <a name="SubsetDefSig.subset"><span class="id" title="axiom">subset</span></a> : <a class="idref" href="mathcomp.ssreflect.fintype.html#subset_type"><span class="id" title="abbreviation">subset_type</span></a>. <span class="id" title="keyword">Axiom</span> <a name="SubsetDefSig.subsetEdef"><span class="id" title="axiom">subsetEdef</span></a> : <a class="idref" href="mathcomp.ssreflect.fintype.html#SubsetDefSig.subset"><span class="id" title="axiom">subset</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#subset_def"><span class="id" title="abbreviation">subset_def</span></a>.<br/> +<span class="id" title="keyword">End</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#SubsetDefSig"><span class="id" title="module">SubsetDefSig</span></a>.<br/> +<span class="id" title="keyword">Module</span> <span class="id" title="keyword">Export</span> <a name="SubsetDef"><span class="id" title="module">SubsetDef</span></a> : <a class="idref" href="mathcomp.ssreflect.fintype.html#SubsetDefSig"><span class="id" title="module">SubsetDefSig</span></a>.<br/> +<span class="id" title="keyword">Definition</span> <a name="SubsetDef.subset"><span class="id" title="definition">subset</span></a> : <a class="idref" href="mathcomp.ssreflect.fintype.html#subset_type"><span class="id" title="abbreviation">subset_type</span></a> := <a class="idref" href="mathcomp.ssreflect.fintype.html#subset_def"><span class="id" title="abbreviation">subset_def</span></a>.<br/> +<span class="id" title="keyword">Definition</span> <a name="SubsetDef.subsetEdef"><span class="id" title="definition">subsetEdef</span></a> := <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrfun.html#erefl"><span class="id" title="abbreviation">erefl</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#SubsetDef.subset"><span class="id" title="definition">subset</span></a>.<br/> +<span class="id" title="keyword">End</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#SubsetDef"><span class="id" title="module">SubsetDef</span></a>.<br/> +<span class="id" title="keyword">Canonical</span> <span class="id" title="var">subset_unlock</span> := <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssreflect.html#Unlockable"><span class="id" title="constructor">Unlockable</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#subsetEdef"><span class="id" title="axiom">subsetEdef</span></a>.<br/> +<span class="id" title="keyword">Notation</span> <a name="826eae8d7598a787ea56f4249e6e210e"><span class="id" title="notation">"</span></a>A \subset B" := (<a class="idref" href="mathcomp.ssreflect.fintype.html#subset"><span class="id" title="axiom">subset</span></a> (<a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#mem"><span class="id" title="definition">mem</span></a> <span class="id" title="var">A</span>) (<a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#mem"><span class="id" title="definition">mem</span></a> <span class="id" title="var">B</span>))<br/> + (<span class="id" title="tactic">at</span> <span class="id" title="keyword">level</span> 70, <span class="id" title="keyword">no</span> <span class="id" title="keyword">associativity</span>) : <span class="id" title="var">bool_scope</span>.<br/> + +<br/> +<span class="id" title="keyword">Definition</span> <a name="proper"><span class="id" title="definition">proper</span></a> <span class="id" title="var">T</span> <span class="id" title="var">A</span> <span class="id" title="var">B</span> := @<a class="idref" href="mathcomp.ssreflect.fintype.html#subset"><span class="id" title="axiom">subset</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#T"><span class="id" title="variable">T</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#B"><span class="id" title="variable">B</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Datatypes.html#49ac24efa716d8b0ee8943bc1d1769a9"><span class="id" title="notation">&&</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#4b80c70cdb231351c5e129ba61f7f956"><span class="id" title="notation">~~</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#subset"><span class="id" title="axiom">subset</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#B"><span class="id" title="variable">B</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a>.<br/> +<span class="id" title="keyword">Notation</span> <a name="219b95257a323aaee1742e9bec4975d7"><span class="id" title="notation">"</span></a>A \proper B" := (<a class="idref" href="mathcomp.ssreflect.fintype.html#proper"><span class="id" title="definition">proper</span></a> (<a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#mem"><span class="id" title="definition">mem</span></a> <span class="id" title="var">A</span>) (<a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#mem"><span class="id" title="definition">mem</span></a> <span class="id" title="var">B</span>))<br/> + (<span class="id" title="tactic">at</span> <span class="id" title="keyword">level</span> 70, <span class="id" title="keyword">no</span> <span class="id" title="keyword">associativity</span>) : <span class="id" title="var">bool_scope</span>.<br/> + +<br/> +</div> + +<div class="doc"> + image, xinv, inv, and ordinal operations will be defined later. +</div> +<div class="code"> + +<br/> +<span class="id" title="keyword">Section</span> <a name="OpsTheory"><span class="id" title="section">OpsTheory</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Variable</span> <a name="OpsTheory.T"><span class="id" title="variable">T</span></a> : <a class="idref" href="mathcomp.ssreflect.fintype.html#finType"><span class="id" title="abbreviation">finType</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Implicit</span> <span class="id" title="keyword">Types</span> <span class="id" title="var">A</span> <span class="id" title="var">B</span> <span class="id" title="var">C</span> <span class="id" title="var">P</span> <span class="id" title="var">Q</span> : <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#pred"><span class="id" title="definition">pred</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#OpsTheory.T"><span class="id" title="variable">T</span></a>.<br/> +<span class="id" title="keyword">Implicit</span> <span class="id" title="keyword">Types</span> <span class="id" title="var">x</span> <span class="id" title="var">y</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#OpsTheory.T"><span class="id" title="variable">T</span></a>.<br/> +<span class="id" title="keyword">Implicit</span> <span class="id" title="keyword">Type</span> <span class="id" title="var">s</span> : <a class="idref" href="mathcomp.ssreflect.seq.html#seq"><span class="id" title="abbreviation">seq</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#OpsTheory.T"><span class="id" title="variable">T</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="enumP"><span class="id" title="lemma">enumP</span></a> : <a class="idref" href="mathcomp.ssreflect.fintype.html#axiom"><span class="id" title="definition">Finite.axiom</span></a> (<a class="idref" href="mathcomp.ssreflect.fintype.html#enum"><span class="id" title="abbreviation">Finite.enum</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#OpsTheory.T"><span class="id" title="variable">T</span></a>).<br/> + +<br/> +<span class="id" title="keyword">Section</span> <a name="OpsTheory.EnumPick"><span class="id" title="section">EnumPick</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Variable</span> <a name="OpsTheory.EnumPick.P"><span class="id" title="variable">P</span></a> : <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#pred"><span class="id" title="definition">pred</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#OpsTheory.T"><span class="id" title="variable">T</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="enumT"><span class="id" title="lemma">enumT</span></a> : <a class="idref" href="mathcomp.ssreflect.fintype.html#enum"><span class="id" title="abbreviation">enum</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#OpsTheory.T"><span class="id" title="variable">T</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#enum"><span class="id" title="abbreviation">Finite.enum</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#OpsTheory.T"><span class="id" title="variable">T</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="mem_enum"><span class="id" title="lemma">mem_enum</span></a> <span class="id" title="var">A</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#enum"><span class="id" title="abbreviation">enum</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#20bf07099d6d8cf369383b22fd37862e"><span class="id" title="notation">=</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#20bf07099d6d8cf369383b22fd37862e"><span class="id" title="notation">i</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="enum_uniq"><span class="id" title="lemma">enum_uniq</span></a> : <a class="idref" href="mathcomp.ssreflect.seq.html#uniq"><span class="id" title="definition">uniq</span></a> (<a class="idref" href="mathcomp.ssreflect.fintype.html#enum"><span class="id" title="abbreviation">enum</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#OpsTheory.EnumPick.P"><span class="id" title="variable">P</span></a>).<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="enum0"><span class="id" title="lemma">enum0</span></a> : <a class="idref" href="mathcomp.ssreflect.fintype.html#enum"><span class="id" title="abbreviation">enum</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#pred0"><span class="id" title="definition">pred0</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.ssreflect.seq.html#Nil"><span class="id" title="abbreviation">Nil</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#OpsTheory.T"><span class="id" title="variable">T</span></a>. <br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="enum1"><span class="id" title="lemma">enum1</span></a> <span class="id" title="var">x</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#enum"><span class="id" title="abbreviation">enum</span></a> (<a class="idref" href="mathcomp.ssreflect.eqtype.html#pred1"><span class="id" title="definition">pred1</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a>) <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.ssreflect.seq.html#36229928b54642a4a7da943ccf8f9612"><span class="id" title="notation">[::</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a><a class="idref" href="mathcomp.ssreflect.seq.html#36229928b54642a4a7da943ccf8f9612"><span class="id" title="notation">]</span></a>.<br/> + +<br/> +<span class="id" title="keyword">CoInductive</span> <a name="pick_spec"><span class="id" title="inductive">pick_spec</span></a> : <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Datatypes.html#option"><span class="id" title="inductive">option</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#OpsTheory.T"><span class="id" title="variable">T</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> <span class="id" title="keyword">Type</span> :=<br/> + | <a name="Pick"><span class="id" title="constructor">Pick</span></a> <span class="id" title="var">x</span> <span class="id" title="keyword">of</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#OpsTheory.EnumPick.P"><span class="id" title="variable">P</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a> : <a class="idref" href="mathcomp.ssreflect.fintype.html#pick_spec"><span class="id" title="inductive">pick_spec</span></a> (<a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Datatypes.html#Some"><span class="id" title="constructor">Some</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a>)<br/> + | <a name="Nopick"><span class="id" title="constructor">Nopick</span></a> <span class="id" title="keyword">of</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#OpsTheory.EnumPick.P"><span class="id" title="variable">P</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrfun.html#2500d48ed8e862ccfda98a44dff88963"><span class="id" title="notation">=1</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#xpred0"><span class="id" title="abbreviation">xpred0</span></a> : <a class="idref" href="mathcomp.ssreflect.fintype.html#pick_spec"><span class="id" title="inductive">pick_spec</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Datatypes.html#None"><span class="id" title="constructor">None</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="pickP"><span class="id" title="lemma">pickP</span></a> : <a class="idref" href="mathcomp.ssreflect.fintype.html#pick_spec"><span class="id" title="inductive">pick_spec</span></a> (<a class="idref" href="mathcomp.ssreflect.fintype.html#pick"><span class="id" title="definition">pick</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#OpsTheory.EnumPick.P"><span class="id" title="variable">P</span></a>).<br/> + +<br/> +<span class="id" title="keyword">End</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#OpsTheory.EnumPick"><span class="id" title="section">EnumPick</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="eq_enum"><span class="id" title="lemma">eq_enum</span></a> <span class="id" title="var">P</span> <span class="id" title="var">Q</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#P"><span class="id" title="variable">P</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#20bf07099d6d8cf369383b22fd37862e"><span class="id" title="notation">=</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#20bf07099d6d8cf369383b22fd37862e"><span class="id" title="notation">i</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#Q"><span class="id" title="variable">Q</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#enum"><span class="id" title="abbreviation">enum</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#P"><span class="id" title="variable">P</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#enum"><span class="id" title="abbreviation">enum</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#Q"><span class="id" title="variable">Q</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="eq_pick"><span class="id" title="lemma">eq_pick</span></a> <span class="id" title="var">P</span> <span class="id" title="var">Q</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#P"><span class="id" title="variable">P</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrfun.html#2500d48ed8e862ccfda98a44dff88963"><span class="id" title="notation">=1</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#Q"><span class="id" title="variable">Q</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#pick"><span class="id" title="definition">pick</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#P"><span class="id" title="variable">P</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#pick"><span class="id" title="definition">pick</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#Q"><span class="id" title="variable">Q</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="cardE"><span class="id" title="lemma">cardE</span></a> <span class="id" title="var">A</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">#|</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">|</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.ssreflect.seq.html#size"><span class="id" title="definition">size</span></a> (<a class="idref" href="mathcomp.ssreflect.fintype.html#enum"><span class="id" title="abbreviation">enum</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a>).<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="eq_card"><span class="id" title="lemma">eq_card</span></a> <span class="id" title="var">A</span> <span class="id" title="var">B</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#20bf07099d6d8cf369383b22fd37862e"><span class="id" title="notation">=</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#20bf07099d6d8cf369383b22fd37862e"><span class="id" title="notation">i</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#B"><span class="id" title="variable">B</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">#|</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">|</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">#|</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#B"><span class="id" title="variable">B</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">|</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="eq_card_trans"><span class="id" title="lemma">eq_card_trans</span></a> <span class="id" title="var">A</span> <span class="id" title="var">B</span> <span class="id" title="var">n</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">#|</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">|</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#n"><span class="id" title="variable">n</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#B"><span class="id" title="variable">B</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#20bf07099d6d8cf369383b22fd37862e"><span class="id" title="notation">=</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#20bf07099d6d8cf369383b22fd37862e"><span class="id" title="notation">i</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">#|</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#B"><span class="id" title="variable">B</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">|</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#n"><span class="id" title="variable">n</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="card0"><span class="id" title="lemma">card0</span></a> : <a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">#|</span></a>@<a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#pred0"><span class="id" title="definition">pred0</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#OpsTheory.T"><span class="id" title="variable">T</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">|</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> 0. <br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="cardT"><span class="id" title="lemma">cardT</span></a> : <a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">#|</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#OpsTheory.T"><span class="id" title="variable">T</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">|</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.ssreflect.seq.html#size"><span class="id" title="definition">size</span></a> (<a class="idref" href="mathcomp.ssreflect.fintype.html#enum"><span class="id" title="abbreviation">enum</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#OpsTheory.T"><span class="id" title="variable">T</span></a>). <br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="card1"><span class="id" title="lemma">card1</span></a> <span class="id" title="var">x</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">#|</span></a><a class="idref" href="mathcomp.ssreflect.eqtype.html#pred1"><span class="id" title="definition">pred1</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">|</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> 1.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="eq_card0"><span class="id" title="lemma">eq_card0</span></a> <span class="id" title="var">A</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#20bf07099d6d8cf369383b22fd37862e"><span class="id" title="notation">=</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#20bf07099d6d8cf369383b22fd37862e"><span class="id" title="notation">i</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#pred0"><span class="id" title="definition">pred0</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">#|</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">|</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> 0.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="eq_cardT"><span class="id" title="lemma">eq_cardT</span></a> <span class="id" title="var">A</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#20bf07099d6d8cf369383b22fd37862e"><span class="id" title="notation">=</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#20bf07099d6d8cf369383b22fd37862e"><span class="id" title="notation">i</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#predT"><span class="id" title="definition">predT</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">#|</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">|</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.ssreflect.seq.html#size"><span class="id" title="definition">size</span></a> (<a class="idref" href="mathcomp.ssreflect.fintype.html#enum"><span class="id" title="abbreviation">enum</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#OpsTheory.T"><span class="id" title="variable">T</span></a>).<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="eq_card1"><span class="id" title="lemma">eq_card1</span></a> <span class="id" title="var">x</span> <span class="id" title="var">A</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#20bf07099d6d8cf369383b22fd37862e"><span class="id" title="notation">=</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#20bf07099d6d8cf369383b22fd37862e"><span class="id" title="notation">i</span></a> <a class="idref" href="mathcomp.ssreflect.eqtype.html#pred1"><span class="id" title="definition">pred1</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">#|</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">|</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> 1.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="cardUI"><span class="id" title="lemma">cardUI</span></a> <span class="id" title="var">A</span> <span class="id" title="var">B</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">#|</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#1ffbd835ce363931871902ea52bd9208"><span class="id" title="notation">[</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#1ffbd835ce363931871902ea52bd9208"><span class="id" title="notation">predU</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#1ffbd835ce363931871902ea52bd9208"><span class="id" title="notation">&</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#B"><span class="id" title="variable">B</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#1ffbd835ce363931871902ea52bd9208"><span class="id" title="notation">]</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">|</span></a> <a class="idref" href="mathcomp.ssreflect.ssrnat.html#b3eea360671e1b32b18a26e15b3aace3"><span class="id" title="notation">+</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">#|</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#bc8da799462dbe647b502e63c7d6c405"><span class="id" title="notation">[</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#bc8da799462dbe647b502e63c7d6c405"><span class="id" title="notation">predI</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#bc8da799462dbe647b502e63c7d6c405"><span class="id" title="notation">&</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#B"><span class="id" title="variable">B</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#bc8da799462dbe647b502e63c7d6c405"><span class="id" title="notation">]</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">|</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">#|</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">|</span></a> <a class="idref" href="mathcomp.ssreflect.ssrnat.html#b3eea360671e1b32b18a26e15b3aace3"><span class="id" title="notation">+</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">#|</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#B"><span class="id" title="variable">B</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">|</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="cardID"><span class="id" title="lemma">cardID</span></a> <span class="id" title="var">B</span> <span class="id" title="var">A</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">#|</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#bc8da799462dbe647b502e63c7d6c405"><span class="id" title="notation">[</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#bc8da799462dbe647b502e63c7d6c405"><span class="id" title="notation">predI</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#bc8da799462dbe647b502e63c7d6c405"><span class="id" title="notation">&</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#B"><span class="id" title="variable">B</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#bc8da799462dbe647b502e63c7d6c405"><span class="id" title="notation">]</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">|</span></a> <a class="idref" href="mathcomp.ssreflect.ssrnat.html#b3eea360671e1b32b18a26e15b3aace3"><span class="id" title="notation">+</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">#|</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#068522f4332c22ee2f5117c95ea6d210"><span class="id" title="notation">[</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#068522f4332c22ee2f5117c95ea6d210"><span class="id" title="notation">predD</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#068522f4332c22ee2f5117c95ea6d210"><span class="id" title="notation">&</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#B"><span class="id" title="variable">B</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#068522f4332c22ee2f5117c95ea6d210"><span class="id" title="notation">]</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">|</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">#|</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">|</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="cardC"><span class="id" title="lemma">cardC</span></a> <span class="id" title="var">A</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">#|</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">|</span></a> <a class="idref" href="mathcomp.ssreflect.ssrnat.html#b3eea360671e1b32b18a26e15b3aace3"><span class="id" title="notation">+</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">#|</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#c2f58fba484177bda65c2ab1289a6fe6"><span class="id" title="notation">[</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#c2f58fba484177bda65c2ab1289a6fe6"><span class="id" title="notation">predC</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#c2f58fba484177bda65c2ab1289a6fe6"><span class="id" title="notation">]</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">|</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">#|</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#OpsTheory.T"><span class="id" title="variable">T</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">|</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="cardU1"><span class="id" title="lemma">cardU1</span></a> <span class="id" title="var">x</span> <span class="id" title="var">A</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">#|</span></a><a class="idref" href="mathcomp.ssreflect.eqtype.html#f83044a80bb642c2069adf1ec8907b36"><span class="id" title="notation">[</span></a><a class="idref" href="mathcomp.ssreflect.eqtype.html#f83044a80bb642c2069adf1ec8907b36"><span class="id" title="notation">predU1</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a> <a class="idref" href="mathcomp.ssreflect.eqtype.html#f83044a80bb642c2069adf1ec8907b36"><span class="id" title="notation">&</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a><a class="idref" href="mathcomp.ssreflect.eqtype.html#f83044a80bb642c2069adf1ec8907b36"><span class="id" title="notation">]</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">|</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.ssreflect.ssrnat.html#b3eea360671e1b32b18a26e15b3aace3"><span class="id" title="notation">(</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#ad6d23746eb1a3b62e52010d3945a1db"><span class="id" title="notation">\</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#ad6d23746eb1a3b62e52010d3945a1db"><span class="id" title="notation">notin</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a><a class="idref" href="mathcomp.ssreflect.ssrnat.html#b3eea360671e1b32b18a26e15b3aace3"><span class="id" title="notation">)</span></a> <a class="idref" href="mathcomp.ssreflect.ssrnat.html#b3eea360671e1b32b18a26e15b3aace3"><span class="id" title="notation">+</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">#|</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">|</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="card2"><span class="id" title="lemma">card2</span></a> <span class="id" title="var">x</span> <span class="id" title="var">y</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">#|</span></a><a class="idref" href="mathcomp.ssreflect.eqtype.html#pred2"><span class="id" title="definition">pred2</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#y"><span class="id" title="variable">y</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">|</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.ssreflect.ssrnat.html#361454269931ea8643f7b402f2ab7222"><span class="id" title="notation">(</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a> <a class="idref" href="mathcomp.ssreflect.eqtype.html#b1eeadc2feabc7422252baa895418c7b"><span class="id" title="notation">!=</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#y"><span class="id" title="variable">y</span></a><a class="idref" href="mathcomp.ssreflect.ssrnat.html#361454269931ea8643f7b402f2ab7222"><span class="id" title="notation">).+1</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="cardC1"><span class="id" title="lemma">cardC1</span></a> <span class="id" title="var">x</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">#|</span></a><a class="idref" href="mathcomp.ssreflect.eqtype.html#predC1"><span class="id" title="definition">predC1</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">|</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">#|</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#OpsTheory.T"><span class="id" title="variable">T</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">|</span></a><a class="idref" href="mathcomp.ssreflect.ssrnat.html#1d63841e595f2805afd872744cbb1cce"><span class="id" title="notation">.-1</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="cardD1"><span class="id" title="lemma">cardD1</span></a> <span class="id" title="var">x</span> <span class="id" title="var">A</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">#|</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">|</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.ssreflect.ssrnat.html#b3eea360671e1b32b18a26e15b3aace3"><span class="id" title="notation">(</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#46c9e8232fa09401e24f1934bb65029f"><span class="id" title="notation">\</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#46c9e8232fa09401e24f1934bb65029f"><span class="id" title="notation">in</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a><a class="idref" href="mathcomp.ssreflect.ssrnat.html#b3eea360671e1b32b18a26e15b3aace3"><span class="id" title="notation">)</span></a> <a class="idref" href="mathcomp.ssreflect.ssrnat.html#b3eea360671e1b32b18a26e15b3aace3"><span class="id" title="notation">+</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">#|</span></a><a class="idref" href="mathcomp.ssreflect.eqtype.html#11efb36d4e2b98f4519391785d68e99e"><span class="id" title="notation">[</span></a><a class="idref" href="mathcomp.ssreflect.eqtype.html#11efb36d4e2b98f4519391785d68e99e"><span class="id" title="notation">predD1</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a> <a class="idref" href="mathcomp.ssreflect.eqtype.html#11efb36d4e2b98f4519391785d68e99e"><span class="id" title="notation">&</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a><a class="idref" href="mathcomp.ssreflect.eqtype.html#11efb36d4e2b98f4519391785d68e99e"><span class="id" title="notation">]</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">|</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="max_card"><span class="id" title="lemma">max_card</span></a> <span class="id" title="var">A</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">#|</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">|</span></a> <a class="idref" href="mathcomp.ssreflect.ssrnat.html#9b077c369e19739ef880736ba34623ff"><span class="id" title="notation">≤</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">#|</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#OpsTheory.T"><span class="id" title="variable">T</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">|</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="card_size"><span class="id" title="lemma">card_size</span></a> <span class="id" title="var">s</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">#|</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#s"><span class="id" title="variable">s</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">|</span></a> <a class="idref" href="mathcomp.ssreflect.ssrnat.html#9b077c369e19739ef880736ba34623ff"><span class="id" title="notation">≤</span></a> <a class="idref" href="mathcomp.ssreflect.seq.html#size"><span class="id" title="definition">size</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#s"><span class="id" title="variable">s</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="card_uniqP"><span class="id" title="lemma">card_uniqP</span></a> <span class="id" title="var">s</span> : <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#reflect"><span class="id" title="abbreviation">reflect</span></a> (<a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">#|</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#s"><span class="id" title="variable">s</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">|</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.ssreflect.seq.html#size"><span class="id" title="definition">size</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#s"><span class="id" title="variable">s</span></a>) (<a class="idref" href="mathcomp.ssreflect.seq.html#uniq"><span class="id" title="definition">uniq</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#s"><span class="id" title="variable">s</span></a>).<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="card0_eq"><span class="id" title="lemma">card0_eq</span></a> <span class="id" title="var">A</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">#|</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">|</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> 0 <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#20bf07099d6d8cf369383b22fd37862e"><span class="id" title="notation">=</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#20bf07099d6d8cf369383b22fd37862e"><span class="id" title="notation">i</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#pred0"><span class="id" title="definition">pred0</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="pred0P"><span class="id" title="lemma">pred0P</span></a> <span class="id" title="var">P</span> : <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#reflect"><span class="id" title="abbreviation">reflect</span></a> (<a class="idref" href="mathcomp.ssreflect.fintype.html#P"><span class="id" title="variable">P</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrfun.html#2500d48ed8e862ccfda98a44dff88963"><span class="id" title="notation">=1</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#pred0"><span class="id" title="definition">pred0</span></a>) (<a class="idref" href="mathcomp.ssreflect.fintype.html#pred0b"><span class="id" title="definition">pred0b</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#P"><span class="id" title="variable">P</span></a>).<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="pred0Pn"><span class="id" title="lemma">pred0Pn</span></a> <span class="id" title="var">P</span> : <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#reflect"><span class="id" title="abbreviation">reflect</span></a> (<a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#84eb6d2849dbf3581b1c0c05add5f2d8"><span class="id" title="notation">∃</span></a> <span class="id" title="var">x</span><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#84eb6d2849dbf3581b1c0c05add5f2d8"><span class="id" title="notation">,</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#P"><span class="id" title="variable">P</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a>) (<a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#4b80c70cdb231351c5e129ba61f7f956"><span class="id" title="notation">~~</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#pred0b"><span class="id" title="definition">pred0b</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#P"><span class="id" title="variable">P</span></a>).<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="card_gt0P"><span class="id" title="lemma">card_gt0P</span></a> <span class="id" title="var">A</span> : <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#reflect"><span class="id" title="abbreviation">reflect</span></a> (<a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#84eb6d2849dbf3581b1c0c05add5f2d8"><span class="id" title="notation">∃</span></a> <span class="id" title="var">i</span><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#84eb6d2849dbf3581b1c0c05add5f2d8"><span class="id" title="notation">,</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#i"><span class="id" title="variable">i</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#46c9e8232fa09401e24f1934bb65029f"><span class="id" title="notation">\</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#46c9e8232fa09401e24f1934bb65029f"><span class="id" title="notation">in</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a>) (<a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">#|</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">|</span></a> <a class="idref" href="mathcomp.ssreflect.ssrnat.html#19ab5cfd7e4f60fa14f22b576013bd96"><span class="id" title="notation">></span></a> 0).<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="subsetE"><span class="id" title="lemma">subsetE</span></a> <span class="id" title="var">A</span> <span class="id" title="var">B</span> : <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">(</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#826eae8d7598a787ea56f4249e6e210e"><span class="id" title="notation">\</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#826eae8d7598a787ea56f4249e6e210e"><span class="id" title="notation">subset</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#B"><span class="id" title="variable">B</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">)</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#pred0b"><span class="id" title="definition">pred0b</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#068522f4332c22ee2f5117c95ea6d210"><span class="id" title="notation">[</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#068522f4332c22ee2f5117c95ea6d210"><span class="id" title="notation">predD</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#068522f4332c22ee2f5117c95ea6d210"><span class="id" title="notation">&</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#B"><span class="id" title="variable">B</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#068522f4332c22ee2f5117c95ea6d210"><span class="id" title="notation">]</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="subsetP"><span class="id" title="lemma">subsetP</span></a> <span class="id" title="var">A</span> <span class="id" title="var">B</span> : <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#reflect"><span class="id" title="abbreviation">reflect</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#53295d8f18390300c5a24f66e0bcda98"><span class="id" title="notation">{</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#53295d8f18390300c5a24f66e0bcda98"><span class="id" title="notation">subset</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#53295d8f18390300c5a24f66e0bcda98"><span class="id" title="notation">≤</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#B"><span class="id" title="variable">B</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#53295d8f18390300c5a24f66e0bcda98"><span class="id" title="notation">}</span></a> (<a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#826eae8d7598a787ea56f4249e6e210e"><span class="id" title="notation">\</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#826eae8d7598a787ea56f4249e6e210e"><span class="id" title="notation">subset</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#B"><span class="id" title="variable">B</span></a>).<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="subsetPn"><span class="id" title="lemma">subsetPn</span></a> <span class="id" title="var">A</span> <span class="id" title="var">B</span> :<br/> + <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#reflect"><span class="id" title="abbreviation">reflect</span></a> (<a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#28b18e493f7cb0bd8447607bdc385ff8"><span class="id" title="notation">exists2</span></a> <span class="id" title="var">x</span><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#28b18e493f7cb0bd8447607bdc385ff8"><span class="id" title="notation">,</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#46c9e8232fa09401e24f1934bb65029f"><span class="id" title="notation">\</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#46c9e8232fa09401e24f1934bb65029f"><span class="id" title="notation">in</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#28b18e493f7cb0bd8447607bdc385ff8"><span class="id" title="notation">&</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#ad6d23746eb1a3b62e52010d3945a1db"><span class="id" title="notation">\</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#ad6d23746eb1a3b62e52010d3945a1db"><span class="id" title="notation">notin</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#B"><span class="id" title="variable">B</span></a>) (<a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#4b80c70cdb231351c5e129ba61f7f956"><span class="id" title="notation">~~</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#4b80c70cdb231351c5e129ba61f7f956"><span class="id" title="notation">(</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#826eae8d7598a787ea56f4249e6e210e"><span class="id" title="notation">\</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#826eae8d7598a787ea56f4249e6e210e"><span class="id" title="notation">subset</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#B"><span class="id" title="variable">B</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#4b80c70cdb231351c5e129ba61f7f956"><span class="id" title="notation">)</span></a>).<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="subset_leq_card"><span class="id" title="lemma">subset_leq_card</span></a> <span class="id" title="var">A</span> <span class="id" title="var">B</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#826eae8d7598a787ea56f4249e6e210e"><span class="id" title="notation">\</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#826eae8d7598a787ea56f4249e6e210e"><span class="id" title="notation">subset</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#B"><span class="id" title="variable">B</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">#|</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">|</span></a> <a class="idref" href="mathcomp.ssreflect.ssrnat.html#9b077c369e19739ef880736ba34623ff"><span class="id" title="notation">≤</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">#|</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#B"><span class="id" title="variable">B</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">|</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="subxx_hint"><span class="id" title="lemma">subxx_hint</span></a> (<span class="id" title="var">mA</span> : <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#mem_pred"><span class="id" title="inductive">mem_pred</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#OpsTheory.T"><span class="id" title="variable">T</span></a>) : <a class="idref" href="mathcomp.ssreflect.fintype.html#subset"><span class="id" title="axiom">subset</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#mA"><span class="id" title="variable">mA</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#mA"><span class="id" title="variable">mA</span></a>.<br/> +<span class="id" title="keyword">Hint Resolve</span> <span class="id" title="var">subxx_hint</span>.<br/> + +<br/> +</div> + +<div class="doc"> + The parametrization by predType makes it easier to apply subxx. +</div> +<div class="code"> +<span class="id" title="keyword">Lemma</span> <a name="subxx"><span class="id" title="lemma">subxx</span></a> (<span class="id" title="var">pT</span> : <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#predType"><span class="id" title="record">predType</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#OpsTheory.T"><span class="id" title="variable">T</span></a>) (<span class="id" title="var">pA</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#pT"><span class="id" title="variable">pT</span></a>) : <a class="idref" href="mathcomp.ssreflect.fintype.html#pA"><span class="id" title="variable">pA</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#826eae8d7598a787ea56f4249e6e210e"><span class="id" title="notation">\</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#826eae8d7598a787ea56f4249e6e210e"><span class="id" title="notation">subset</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#pA"><span class="id" title="variable">pA</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="eq_subset"><span class="id" title="lemma">eq_subset</span></a> <span class="id" title="var">A1</span> <span class="id" title="var">A2</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#A1"><span class="id" title="variable">A1</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#20bf07099d6d8cf369383b22fd37862e"><span class="id" title="notation">=</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#20bf07099d6d8cf369383b22fd37862e"><span class="id" title="notation">i</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#A2"><span class="id" title="variable">A2</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#subset"><span class="id" title="axiom">subset</span></a> (<a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#mem"><span class="id" title="definition">mem</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#A1"><span class="id" title="variable">A1</span></a>) <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrfun.html#2500d48ed8e862ccfda98a44dff88963"><span class="id" title="notation">=1</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#subset"><span class="id" title="axiom">subset</span></a> (<a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#mem"><span class="id" title="definition">mem</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#A2"><span class="id" title="variable">A2</span></a>).<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="eq_subset_r"><span class="id" title="lemma">eq_subset_r</span></a> <span class="id" title="var">B1</span> <span class="id" title="var">B2</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#B1"><span class="id" title="variable">B1</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#20bf07099d6d8cf369383b22fd37862e"><span class="id" title="notation">=</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#20bf07099d6d8cf369383b22fd37862e"><span class="id" title="notation">i</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#B2"><span class="id" title="variable">B2</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a><br/> + <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrfun.html#8f28bbd804547edd8de802d63ef85617"><span class="id" title="notation">(</span></a>@<a class="idref" href="mathcomp.ssreflect.fintype.html#subset"><span class="id" title="axiom">subset</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#OpsTheory.T"><span class="id" title="variable">T</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrfun.html#8f28bbd804547edd8de802d63ef85617"><span class="id" title="notation">)^~</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrfun.html#8f28bbd804547edd8de802d63ef85617"><span class="id" title="notation">(</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#mem"><span class="id" title="definition">mem</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#B1"><span class="id" title="variable">B1</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrfun.html#8f28bbd804547edd8de802d63ef85617"><span class="id" title="notation">)</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrfun.html#2500d48ed8e862ccfda98a44dff88963"><span class="id" title="notation">=1</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrfun.html#8f28bbd804547edd8de802d63ef85617"><span class="id" title="notation">(</span></a>@<a class="idref" href="mathcomp.ssreflect.fintype.html#subset"><span class="id" title="axiom">subset</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#OpsTheory.T"><span class="id" title="variable">T</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrfun.html#8f28bbd804547edd8de802d63ef85617"><span class="id" title="notation">)^~</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrfun.html#8f28bbd804547edd8de802d63ef85617"><span class="id" title="notation">(</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#mem"><span class="id" title="definition">mem</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#B2"><span class="id" title="variable">B2</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrfun.html#8f28bbd804547edd8de802d63ef85617"><span class="id" title="notation">)</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="eq_subxx"><span class="id" title="lemma">eq_subxx</span></a> <span class="id" title="var">A</span> <span class="id" title="var">B</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#20bf07099d6d8cf369383b22fd37862e"><span class="id" title="notation">=</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#20bf07099d6d8cf369383b22fd37862e"><span class="id" title="notation">i</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#B"><span class="id" title="variable">B</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#826eae8d7598a787ea56f4249e6e210e"><span class="id" title="notation">\</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#826eae8d7598a787ea56f4249e6e210e"><span class="id" title="notation">subset</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#B"><span class="id" title="variable">B</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="subset_predT"><span class="id" title="lemma">subset_predT</span></a> <span class="id" title="var">A</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#826eae8d7598a787ea56f4249e6e210e"><span class="id" title="notation">\</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#826eae8d7598a787ea56f4249e6e210e"><span class="id" title="notation">subset</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#OpsTheory.T"><span class="id" title="variable">T</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="predT_subset"><span class="id" title="lemma">predT_subset</span></a> <span class="id" title="var">A</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#OpsTheory.T"><span class="id" title="variable">T</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#826eae8d7598a787ea56f4249e6e210e"><span class="id" title="notation">\</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#826eae8d7598a787ea56f4249e6e210e"><span class="id" title="notation">subset</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> <span class="id" title="keyword">∀</span> <span class="id" title="var">x</span>, <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#46c9e8232fa09401e24f1934bb65029f"><span class="id" title="notation">\</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#46c9e8232fa09401e24f1934bb65029f"><span class="id" title="notation">in</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="subset_pred1"><span class="id" title="lemma">subset_pred1</span></a> <span class="id" title="var">A</span> <span class="id" title="var">x</span> : <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">(</span></a><a class="idref" href="mathcomp.ssreflect.eqtype.html#pred1"><span class="id" title="definition">pred1</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#826eae8d7598a787ea56f4249e6e210e"><span class="id" title="notation">\</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#826eae8d7598a787ea56f4249e6e210e"><span class="id" title="notation">subset</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">)</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">(</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#46c9e8232fa09401e24f1934bb65029f"><span class="id" title="notation">\</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#46c9e8232fa09401e24f1934bb65029f"><span class="id" title="notation">in</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">)</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="subset_eqP"><span class="id" title="lemma">subset_eqP</span></a> <span class="id" title="var">A</span> <span class="id" title="var">B</span> : <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#reflect"><span class="id" title="abbreviation">reflect</span></a> (<a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#20bf07099d6d8cf369383b22fd37862e"><span class="id" title="notation">=</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#20bf07099d6d8cf369383b22fd37862e"><span class="id" title="notation">i</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#B"><span class="id" title="variable">B</span></a>) (<a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Datatypes.html#49ac24efa716d8b0ee8943bc1d1769a9"><span class="id" title="notation">(</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#826eae8d7598a787ea56f4249e6e210e"><span class="id" title="notation">\</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#826eae8d7598a787ea56f4249e6e210e"><span class="id" title="notation">subset</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#B"><span class="id" title="variable">B</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Datatypes.html#49ac24efa716d8b0ee8943bc1d1769a9"><span class="id" title="notation">)</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Datatypes.html#49ac24efa716d8b0ee8943bc1d1769a9"><span class="id" title="notation">&&</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Datatypes.html#49ac24efa716d8b0ee8943bc1d1769a9"><span class="id" title="notation">(</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#B"><span class="id" title="variable">B</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#826eae8d7598a787ea56f4249e6e210e"><span class="id" title="notation">\</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#826eae8d7598a787ea56f4249e6e210e"><span class="id" title="notation">subset</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Datatypes.html#49ac24efa716d8b0ee8943bc1d1769a9"><span class="id" title="notation">)</span></a>).<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="subset_cardP"><span class="id" title="lemma">subset_cardP</span></a> <span class="id" title="var">A</span> <span class="id" title="var">B</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">#|</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">|</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">#|</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#B"><span class="id" title="variable">B</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">|</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#reflect"><span class="id" title="abbreviation">reflect</span></a> (<a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#20bf07099d6d8cf369383b22fd37862e"><span class="id" title="notation">=</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#20bf07099d6d8cf369383b22fd37862e"><span class="id" title="notation">i</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#B"><span class="id" title="variable">B</span></a>) (<a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#826eae8d7598a787ea56f4249e6e210e"><span class="id" title="notation">\</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#826eae8d7598a787ea56f4249e6e210e"><span class="id" title="notation">subset</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#B"><span class="id" title="variable">B</span></a>).<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="subset_leqif_card"><span class="id" title="lemma">subset_leqif_card</span></a> <span class="id" title="var">A</span> <span class="id" title="var">B</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#826eae8d7598a787ea56f4249e6e210e"><span class="id" title="notation">\</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#826eae8d7598a787ea56f4249e6e210e"><span class="id" title="notation">subset</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#B"><span class="id" title="variable">B</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">#|</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">|</span></a> <a class="idref" href="mathcomp.ssreflect.ssrnat.html#f0472472bc7977d4afb419d87444a23b"><span class="id" title="notation">≤</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">#|</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#B"><span class="id" title="variable">B</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">|</span></a> <a class="idref" href="mathcomp.ssreflect.ssrnat.html#f0472472bc7977d4afb419d87444a23b"><span class="id" title="notation">?=</span></a> <a class="idref" href="mathcomp.ssreflect.ssrnat.html#f0472472bc7977d4afb419d87444a23b"><span class="id" title="notation">iff</span></a> <a class="idref" href="mathcomp.ssreflect.ssrnat.html#f0472472bc7977d4afb419d87444a23b"><span class="id" title="notation">(</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#B"><span class="id" title="variable">B</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#826eae8d7598a787ea56f4249e6e210e"><span class="id" title="notation">\</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#826eae8d7598a787ea56f4249e6e210e"><span class="id" title="notation">subset</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a><a class="idref" href="mathcomp.ssreflect.ssrnat.html#f0472472bc7977d4afb419d87444a23b"><span class="id" title="notation">)</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="subset_trans"><span class="id" title="lemma">subset_trans</span></a> <span class="id" title="var">A</span> <span class="id" title="var">B</span> <span class="id" title="var">C</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#826eae8d7598a787ea56f4249e6e210e"><span class="id" title="notation">\</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#826eae8d7598a787ea56f4249e6e210e"><span class="id" title="notation">subset</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#B"><span class="id" title="variable">B</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#B"><span class="id" title="variable">B</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#826eae8d7598a787ea56f4249e6e210e"><span class="id" title="notation">\</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#826eae8d7598a787ea56f4249e6e210e"><span class="id" title="notation">subset</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#C"><span class="id" title="variable">C</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#826eae8d7598a787ea56f4249e6e210e"><span class="id" title="notation">\</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#826eae8d7598a787ea56f4249e6e210e"><span class="id" title="notation">subset</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#C"><span class="id" title="variable">C</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="subset_all"><span class="id" title="lemma">subset_all</span></a> <span class="id" title="var">s</span> <span class="id" title="var">A</span> : <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">(</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#s"><span class="id" title="variable">s</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#826eae8d7598a787ea56f4249e6e210e"><span class="id" title="notation">\</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#826eae8d7598a787ea56f4249e6e210e"><span class="id" title="notation">subset</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">)</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.ssreflect.seq.html#all"><span class="id" title="definition">all</span></a> (<a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#mem"><span class="id" title="definition">mem</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a>) <a class="idref" href="mathcomp.ssreflect.fintype.html#s"><span class="id" title="variable">s</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="properE"><span class="id" title="lemma">properE</span></a> <span class="id" title="var">A</span> <span class="id" title="var">B</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#219b95257a323aaee1742e9bec4975d7"><span class="id" title="notation">\</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#219b95257a323aaee1742e9bec4975d7"><span class="id" title="notation">proper</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#B"><span class="id" title="variable">B</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Datatypes.html#49ac24efa716d8b0ee8943bc1d1769a9"><span class="id" title="notation">(</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#826eae8d7598a787ea56f4249e6e210e"><span class="id" title="notation">\</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#826eae8d7598a787ea56f4249e6e210e"><span class="id" title="notation">subset</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#B"><span class="id" title="variable">B</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Datatypes.html#49ac24efa716d8b0ee8943bc1d1769a9"><span class="id" title="notation">)</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Datatypes.html#49ac24efa716d8b0ee8943bc1d1769a9"><span class="id" title="notation">&&</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#4b80c70cdb231351c5e129ba61f7f956"><span class="id" title="notation">~~(</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#B"><span class="id" title="variable">B</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#826eae8d7598a787ea56f4249e6e210e"><span class="id" title="notation">\</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#826eae8d7598a787ea56f4249e6e210e"><span class="id" title="notation">subset</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#4b80c70cdb231351c5e129ba61f7f956"><span class="id" title="notation">)</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="properP"><span class="id" title="lemma">properP</span></a> <span class="id" title="var">A</span> <span class="id" title="var">B</span> :<br/> + <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#reflect"><span class="id" title="abbreviation">reflect</span></a> (<a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#826eae8d7598a787ea56f4249e6e210e"><span class="id" title="notation">\</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#826eae8d7598a787ea56f4249e6e210e"><span class="id" title="notation">subset</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#B"><span class="id" title="variable">B</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d82a7d96d3659d805ffe732283716822"><span class="id" title="notation">∧</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d82a7d96d3659d805ffe732283716822"><span class="id" title="notation">(</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#28b18e493f7cb0bd8447607bdc385ff8"><span class="id" title="notation">exists2</span></a> <span class="id" title="var">x</span><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#28b18e493f7cb0bd8447607bdc385ff8"><span class="id" title="notation">,</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#46c9e8232fa09401e24f1934bb65029f"><span class="id" title="notation">\</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#46c9e8232fa09401e24f1934bb65029f"><span class="id" title="notation">in</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#B"><span class="id" title="variable">B</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#28b18e493f7cb0bd8447607bdc385ff8"><span class="id" title="notation">&</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#ad6d23746eb1a3b62e52010d3945a1db"><span class="id" title="notation">\</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#ad6d23746eb1a3b62e52010d3945a1db"><span class="id" title="notation">notin</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d82a7d96d3659d805ffe732283716822"><span class="id" title="notation">)</span></a>) (<a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#219b95257a323aaee1742e9bec4975d7"><span class="id" title="notation">\</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#219b95257a323aaee1742e9bec4975d7"><span class="id" title="notation">proper</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#B"><span class="id" title="variable">B</span></a>).<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="proper_sub"><span class="id" title="lemma">proper_sub</span></a> <span class="id" title="var">A</span> <span class="id" title="var">B</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#219b95257a323aaee1742e9bec4975d7"><span class="id" title="notation">\</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#219b95257a323aaee1742e9bec4975d7"><span class="id" title="notation">proper</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#B"><span class="id" title="variable">B</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#826eae8d7598a787ea56f4249e6e210e"><span class="id" title="notation">\</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#826eae8d7598a787ea56f4249e6e210e"><span class="id" title="notation">subset</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#B"><span class="id" title="variable">B</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="proper_subn"><span class="id" title="lemma">proper_subn</span></a> <span class="id" title="var">A</span> <span class="id" title="var">B</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#219b95257a323aaee1742e9bec4975d7"><span class="id" title="notation">\</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#219b95257a323aaee1742e9bec4975d7"><span class="id" title="notation">proper</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#B"><span class="id" title="variable">B</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#4b80c70cdb231351c5e129ba61f7f956"><span class="id" title="notation">~~</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#4b80c70cdb231351c5e129ba61f7f956"><span class="id" title="notation">(</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#B"><span class="id" title="variable">B</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#826eae8d7598a787ea56f4249e6e210e"><span class="id" title="notation">\</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#826eae8d7598a787ea56f4249e6e210e"><span class="id" title="notation">subset</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#4b80c70cdb231351c5e129ba61f7f956"><span class="id" title="notation">)</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="proper_trans"><span class="id" title="lemma">proper_trans</span></a> <span class="id" title="var">A</span> <span class="id" title="var">B</span> <span class="id" title="var">C</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#219b95257a323aaee1742e9bec4975d7"><span class="id" title="notation">\</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#219b95257a323aaee1742e9bec4975d7"><span class="id" title="notation">proper</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#B"><span class="id" title="variable">B</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#B"><span class="id" title="variable">B</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#219b95257a323aaee1742e9bec4975d7"><span class="id" title="notation">\</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#219b95257a323aaee1742e9bec4975d7"><span class="id" title="notation">proper</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#C"><span class="id" title="variable">C</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#219b95257a323aaee1742e9bec4975d7"><span class="id" title="notation">\</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#219b95257a323aaee1742e9bec4975d7"><span class="id" title="notation">proper</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#C"><span class="id" title="variable">C</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="proper_sub_trans"><span class="id" title="lemma">proper_sub_trans</span></a> <span class="id" title="var">A</span> <span class="id" title="var">B</span> <span class="id" title="var">C</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#219b95257a323aaee1742e9bec4975d7"><span class="id" title="notation">\</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#219b95257a323aaee1742e9bec4975d7"><span class="id" title="notation">proper</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#B"><span class="id" title="variable">B</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#B"><span class="id" title="variable">B</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#826eae8d7598a787ea56f4249e6e210e"><span class="id" title="notation">\</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#826eae8d7598a787ea56f4249e6e210e"><span class="id" title="notation">subset</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#C"><span class="id" title="variable">C</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#219b95257a323aaee1742e9bec4975d7"><span class="id" title="notation">\</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#219b95257a323aaee1742e9bec4975d7"><span class="id" title="notation">proper</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#C"><span class="id" title="variable">C</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="sub_proper_trans"><span class="id" title="lemma">sub_proper_trans</span></a> <span class="id" title="var">A</span> <span class="id" title="var">B</span> <span class="id" title="var">C</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#826eae8d7598a787ea56f4249e6e210e"><span class="id" title="notation">\</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#826eae8d7598a787ea56f4249e6e210e"><span class="id" title="notation">subset</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#B"><span class="id" title="variable">B</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#B"><span class="id" title="variable">B</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#219b95257a323aaee1742e9bec4975d7"><span class="id" title="notation">\</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#219b95257a323aaee1742e9bec4975d7"><span class="id" title="notation">proper</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#C"><span class="id" title="variable">C</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#219b95257a323aaee1742e9bec4975d7"><span class="id" title="notation">\</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#219b95257a323aaee1742e9bec4975d7"><span class="id" title="notation">proper</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#C"><span class="id" title="variable">C</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="proper_card"><span class="id" title="lemma">proper_card</span></a> <span class="id" title="var">A</span> <span class="id" title="var">B</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#219b95257a323aaee1742e9bec4975d7"><span class="id" title="notation">\</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#219b95257a323aaee1742e9bec4975d7"><span class="id" title="notation">proper</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#B"><span class="id" title="variable">B</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">#|</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">|</span></a> <a class="idref" href="mathcomp.ssreflect.ssrnat.html#989c98e7ddd65d5bf37c334ff2076de8"><span class="id" title="notation"><</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">#|</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#B"><span class="id" title="variable">B</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">|</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="proper_irrefl"><span class="id" title="lemma">proper_irrefl</span></a> <span class="id" title="var">A</span> : <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#4b80c70cdb231351c5e129ba61f7f956"><span class="id" title="notation">~~</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#4b80c70cdb231351c5e129ba61f7f956"><span class="id" title="notation">(</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#219b95257a323aaee1742e9bec4975d7"><span class="id" title="notation">\</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#219b95257a323aaee1742e9bec4975d7"><span class="id" title="notation">proper</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#4b80c70cdb231351c5e129ba61f7f956"><span class="id" title="notation">)</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="properxx"><span class="id" title="lemma">properxx</span></a> <span class="id" title="var">A</span> : <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">(</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#219b95257a323aaee1742e9bec4975d7"><span class="id" title="notation">\</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#219b95257a323aaee1742e9bec4975d7"><span class="id" title="notation">proper</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">)</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Datatypes.html#false"><span class="id" title="constructor">false</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="eq_proper"><span class="id" title="lemma">eq_proper</span></a> <span class="id" title="var">A</span> <span class="id" title="var">B</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#20bf07099d6d8cf369383b22fd37862e"><span class="id" title="notation">=</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#20bf07099d6d8cf369383b22fd37862e"><span class="id" title="notation">i</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#B"><span class="id" title="variable">B</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#proper"><span class="id" title="definition">proper</span></a> (<a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#mem"><span class="id" title="definition">mem</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a>) <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrfun.html#2500d48ed8e862ccfda98a44dff88963"><span class="id" title="notation">=1</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#proper"><span class="id" title="definition">proper</span></a> (<a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#mem"><span class="id" title="definition">mem</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#B"><span class="id" title="variable">B</span></a>).<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="eq_proper_r"><span class="id" title="lemma">eq_proper_r</span></a> <span class="id" title="var">A</span> <span class="id" title="var">B</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#20bf07099d6d8cf369383b22fd37862e"><span class="id" title="notation">=</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#20bf07099d6d8cf369383b22fd37862e"><span class="id" title="notation">i</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#B"><span class="id" title="variable">B</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a><br/> + <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrfun.html#8f28bbd804547edd8de802d63ef85617"><span class="id" title="notation">(</span></a>@<a class="idref" href="mathcomp.ssreflect.fintype.html#proper"><span class="id" title="definition">proper</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#OpsTheory.T"><span class="id" title="variable">T</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrfun.html#8f28bbd804547edd8de802d63ef85617"><span class="id" title="notation">)^~</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrfun.html#8f28bbd804547edd8de802d63ef85617"><span class="id" title="notation">(</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#mem"><span class="id" title="definition">mem</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrfun.html#8f28bbd804547edd8de802d63ef85617"><span class="id" title="notation">)</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrfun.html#2500d48ed8e862ccfda98a44dff88963"><span class="id" title="notation">=1</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrfun.html#8f28bbd804547edd8de802d63ef85617"><span class="id" title="notation">(</span></a>@<a class="idref" href="mathcomp.ssreflect.fintype.html#proper"><span class="id" title="definition">proper</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#OpsTheory.T"><span class="id" title="variable">T</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrfun.html#8f28bbd804547edd8de802d63ef85617"><span class="id" title="notation">)^~</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrfun.html#8f28bbd804547edd8de802d63ef85617"><span class="id" title="notation">(</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#mem"><span class="id" title="definition">mem</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#B"><span class="id" title="variable">B</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrfun.html#8f28bbd804547edd8de802d63ef85617"><span class="id" title="notation">)</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="disjoint_sym"><span class="id" title="lemma">disjoint_sym</span></a> <span class="id" title="var">A</span> <span class="id" title="var">B</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#fca367ac88276c4c83db3cc7c637993a"><span class="id" title="notation">[</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#fca367ac88276c4c83db3cc7c637993a"><span class="id" title="notation">disjoint</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#fca367ac88276c4c83db3cc7c637993a"><span class="id" title="notation">&</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#B"><span class="id" title="variable">B</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#fca367ac88276c4c83db3cc7c637993a"><span class="id" title="notation">]</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#fca367ac88276c4c83db3cc7c637993a"><span class="id" title="notation">[</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#fca367ac88276c4c83db3cc7c637993a"><span class="id" title="notation">disjoint</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#B"><span class="id" title="variable">B</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#fca367ac88276c4c83db3cc7c637993a"><span class="id" title="notation">&</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#fca367ac88276c4c83db3cc7c637993a"><span class="id" title="notation">]</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="eq_disjoint"><span class="id" title="lemma">eq_disjoint</span></a> <span class="id" title="var">A1</span> <span class="id" title="var">A2</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#A1"><span class="id" title="variable">A1</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#20bf07099d6d8cf369383b22fd37862e"><span class="id" title="notation">=</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#20bf07099d6d8cf369383b22fd37862e"><span class="id" title="notation">i</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#A2"><span class="id" title="variable">A2</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#disjoint"><span class="id" title="definition">disjoint</span></a> (<a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#mem"><span class="id" title="definition">mem</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#A1"><span class="id" title="variable">A1</span></a>) <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrfun.html#2500d48ed8e862ccfda98a44dff88963"><span class="id" title="notation">=1</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#disjoint"><span class="id" title="definition">disjoint</span></a> (<a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#mem"><span class="id" title="definition">mem</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#A2"><span class="id" title="variable">A2</span></a>).<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="eq_disjoint_r"><span class="id" title="lemma">eq_disjoint_r</span></a> <span class="id" title="var">B1</span> <span class="id" title="var">B2</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#B1"><span class="id" title="variable">B1</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#20bf07099d6d8cf369383b22fd37862e"><span class="id" title="notation">=</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#20bf07099d6d8cf369383b22fd37862e"><span class="id" title="notation">i</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#B2"><span class="id" title="variable">B2</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a><br/> + <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrfun.html#8f28bbd804547edd8de802d63ef85617"><span class="id" title="notation">(</span></a>@<a class="idref" href="mathcomp.ssreflect.fintype.html#disjoint"><span class="id" title="definition">disjoint</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#OpsTheory.T"><span class="id" title="variable">T</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrfun.html#8f28bbd804547edd8de802d63ef85617"><span class="id" title="notation">)^~</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrfun.html#8f28bbd804547edd8de802d63ef85617"><span class="id" title="notation">(</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#mem"><span class="id" title="definition">mem</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#B1"><span class="id" title="variable">B1</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrfun.html#8f28bbd804547edd8de802d63ef85617"><span class="id" title="notation">)</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrfun.html#2500d48ed8e862ccfda98a44dff88963"><span class="id" title="notation">=1</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrfun.html#8f28bbd804547edd8de802d63ef85617"><span class="id" title="notation">(</span></a>@<a class="idref" href="mathcomp.ssreflect.fintype.html#disjoint"><span class="id" title="definition">disjoint</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#OpsTheory.T"><span class="id" title="variable">T</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrfun.html#8f28bbd804547edd8de802d63ef85617"><span class="id" title="notation">)^~</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrfun.html#8f28bbd804547edd8de802d63ef85617"><span class="id" title="notation">(</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#mem"><span class="id" title="definition">mem</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#B2"><span class="id" title="variable">B2</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrfun.html#8f28bbd804547edd8de802d63ef85617"><span class="id" title="notation">)</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="subset_disjoint"><span class="id" title="lemma">subset_disjoint</span></a> <span class="id" title="var">A</span> <span class="id" title="var">B</span> : <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">(</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#826eae8d7598a787ea56f4249e6e210e"><span class="id" title="notation">\</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#826eae8d7598a787ea56f4249e6e210e"><span class="id" title="notation">subset</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#B"><span class="id" title="variable">B</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">)</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#fca367ac88276c4c83db3cc7c637993a"><span class="id" title="notation">[</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#fca367ac88276c4c83db3cc7c637993a"><span class="id" title="notation">disjoint</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#fca367ac88276c4c83db3cc7c637993a"><span class="id" title="notation">&</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#c2f58fba484177bda65c2ab1289a6fe6"><span class="id" title="notation">[</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#c2f58fba484177bda65c2ab1289a6fe6"><span class="id" title="notation">predC</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#B"><span class="id" title="variable">B</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#c2f58fba484177bda65c2ab1289a6fe6"><span class="id" title="notation">]</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#fca367ac88276c4c83db3cc7c637993a"><span class="id" title="notation">]</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="disjoint_subset"><span class="id" title="lemma">disjoint_subset</span></a> <span class="id" title="var">A</span> <span class="id" title="var">B</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#fca367ac88276c4c83db3cc7c637993a"><span class="id" title="notation">[</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#fca367ac88276c4c83db3cc7c637993a"><span class="id" title="notation">disjoint</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#fca367ac88276c4c83db3cc7c637993a"><span class="id" title="notation">&</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#B"><span class="id" title="variable">B</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#fca367ac88276c4c83db3cc7c637993a"><span class="id" title="notation">]</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">(</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#826eae8d7598a787ea56f4249e6e210e"><span class="id" title="notation">\</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#826eae8d7598a787ea56f4249e6e210e"><span class="id" title="notation">subset</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#c2f58fba484177bda65c2ab1289a6fe6"><span class="id" title="notation">[</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#c2f58fba484177bda65c2ab1289a6fe6"><span class="id" title="notation">predC</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#B"><span class="id" title="variable">B</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#c2f58fba484177bda65c2ab1289a6fe6"><span class="id" title="notation">]</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">)</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="disjoint_trans"><span class="id" title="lemma">disjoint_trans</span></a> <span class="id" title="var">A</span> <span class="id" title="var">B</span> <span class="id" title="var">C</span> :<br/> + <a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#826eae8d7598a787ea56f4249e6e210e"><span class="id" title="notation">\</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#826eae8d7598a787ea56f4249e6e210e"><span class="id" title="notation">subset</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#B"><span class="id" title="variable">B</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#fca367ac88276c4c83db3cc7c637993a"><span class="id" title="notation">[</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#fca367ac88276c4c83db3cc7c637993a"><span class="id" title="notation">disjoint</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#B"><span class="id" title="variable">B</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#fca367ac88276c4c83db3cc7c637993a"><span class="id" title="notation">&</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#C"><span class="id" title="variable">C</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#fca367ac88276c4c83db3cc7c637993a"><span class="id" title="notation">]</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#fca367ac88276c4c83db3cc7c637993a"><span class="id" title="notation">[</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#fca367ac88276c4c83db3cc7c637993a"><span class="id" title="notation">disjoint</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#fca367ac88276c4c83db3cc7c637993a"><span class="id" title="notation">&</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#C"><span class="id" title="variable">C</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#fca367ac88276c4c83db3cc7c637993a"><span class="id" title="notation">]</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="disjoint0"><span class="id" title="lemma">disjoint0</span></a> <span class="id" title="var">A</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#fca367ac88276c4c83db3cc7c637993a"><span class="id" title="notation">[</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#fca367ac88276c4c83db3cc7c637993a"><span class="id" title="notation">disjoint</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#pred0"><span class="id" title="definition">pred0</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#fca367ac88276c4c83db3cc7c637993a"><span class="id" title="notation">&</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#fca367ac88276c4c83db3cc7c637993a"><span class="id" title="notation">]</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="eq_disjoint0"><span class="id" title="lemma">eq_disjoint0</span></a> <span class="id" title="var">A</span> <span class="id" title="var">B</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#20bf07099d6d8cf369383b22fd37862e"><span class="id" title="notation">=</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#20bf07099d6d8cf369383b22fd37862e"><span class="id" title="notation">i</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#pred0"><span class="id" title="definition">pred0</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#fca367ac88276c4c83db3cc7c637993a"><span class="id" title="notation">[</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#fca367ac88276c4c83db3cc7c637993a"><span class="id" title="notation">disjoint</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#fca367ac88276c4c83db3cc7c637993a"><span class="id" title="notation">&</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#B"><span class="id" title="variable">B</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#fca367ac88276c4c83db3cc7c637993a"><span class="id" title="notation">]</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="disjoint1"><span class="id" title="lemma">disjoint1</span></a> <span class="id" title="var">x</span> <span class="id" title="var">A</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#fca367ac88276c4c83db3cc7c637993a"><span class="id" title="notation">[</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#fca367ac88276c4c83db3cc7c637993a"><span class="id" title="notation">disjoint</span></a> <a class="idref" href="mathcomp.ssreflect.eqtype.html#pred1"><span class="id" title="definition">pred1</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#fca367ac88276c4c83db3cc7c637993a"><span class="id" title="notation">&</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#fca367ac88276c4c83db3cc7c637993a"><span class="id" title="notation">]</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">(</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#ad6d23746eb1a3b62e52010d3945a1db"><span class="id" title="notation">\</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#ad6d23746eb1a3b62e52010d3945a1db"><span class="id" title="notation">notin</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">)</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="eq_disjoint1"><span class="id" title="lemma">eq_disjoint1</span></a> <span class="id" title="var">x</span> <span class="id" title="var">A</span> <span class="id" title="var">B</span> :<br/> + <a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#20bf07099d6d8cf369383b22fd37862e"><span class="id" title="notation">=</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#20bf07099d6d8cf369383b22fd37862e"><span class="id" title="notation">i</span></a> <a class="idref" href="mathcomp.ssreflect.eqtype.html#pred1"><span class="id" title="definition">pred1</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#fca367ac88276c4c83db3cc7c637993a"><span class="id" title="notation">[</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#fca367ac88276c4c83db3cc7c637993a"><span class="id" title="notation">disjoint</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#fca367ac88276c4c83db3cc7c637993a"><span class="id" title="notation">&</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#B"><span class="id" title="variable">B</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#fca367ac88276c4c83db3cc7c637993a"><span class="id" title="notation">]</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">(</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#ad6d23746eb1a3b62e52010d3945a1db"><span class="id" title="notation">\</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#ad6d23746eb1a3b62e52010d3945a1db"><span class="id" title="notation">notin</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#B"><span class="id" title="variable">B</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">)</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="disjointU"><span class="id" title="lemma">disjointU</span></a> <span class="id" title="var">A</span> <span class="id" title="var">B</span> <span class="id" title="var">C</span> :<br/> + <a class="idref" href="mathcomp.ssreflect.fintype.html#fca367ac88276c4c83db3cc7c637993a"><span class="id" title="notation">[</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#fca367ac88276c4c83db3cc7c637993a"><span class="id" title="notation">disjoint</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#predU"><span class="id" title="definition">predU</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#B"><span class="id" title="variable">B</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#fca367ac88276c4c83db3cc7c637993a"><span class="id" title="notation">&</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#C"><span class="id" title="variable">C</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#fca367ac88276c4c83db3cc7c637993a"><span class="id" title="notation">]</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#fca367ac88276c4c83db3cc7c637993a"><span class="id" title="notation">[</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#fca367ac88276c4c83db3cc7c637993a"><span class="id" title="notation">disjoint</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#fca367ac88276c4c83db3cc7c637993a"><span class="id" title="notation">&</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#C"><span class="id" title="variable">C</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#fca367ac88276c4c83db3cc7c637993a"><span class="id" title="notation">]</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Datatypes.html#49ac24efa716d8b0ee8943bc1d1769a9"><span class="id" title="notation">&&</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#fca367ac88276c4c83db3cc7c637993a"><span class="id" title="notation">[</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#fca367ac88276c4c83db3cc7c637993a"><span class="id" title="notation">disjoint</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#B"><span class="id" title="variable">B</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#fca367ac88276c4c83db3cc7c637993a"><span class="id" title="notation">&</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#C"><span class="id" title="variable">C</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#fca367ac88276c4c83db3cc7c637993a"><span class="id" title="notation">]</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="disjointU1"><span class="id" title="lemma">disjointU1</span></a> <span class="id" title="var">x</span> <span class="id" title="var">A</span> <span class="id" title="var">B</span> :<br/> + <a class="idref" href="mathcomp.ssreflect.fintype.html#fca367ac88276c4c83db3cc7c637993a"><span class="id" title="notation">[</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#fca367ac88276c4c83db3cc7c637993a"><span class="id" title="notation">disjoint</span></a> <a class="idref" href="mathcomp.ssreflect.eqtype.html#predU1"><span class="id" title="definition">predU1</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#fca367ac88276c4c83db3cc7c637993a"><span class="id" title="notation">&</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#B"><span class="id" title="variable">B</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#fca367ac88276c4c83db3cc7c637993a"><span class="id" title="notation">]</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Datatypes.html#49ac24efa716d8b0ee8943bc1d1769a9"><span class="id" title="notation">(</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#ad6d23746eb1a3b62e52010d3945a1db"><span class="id" title="notation">\</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#ad6d23746eb1a3b62e52010d3945a1db"><span class="id" title="notation">notin</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#B"><span class="id" title="variable">B</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Datatypes.html#49ac24efa716d8b0ee8943bc1d1769a9"><span class="id" title="notation">)</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Datatypes.html#49ac24efa716d8b0ee8943bc1d1769a9"><span class="id" title="notation">&&</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#fca367ac88276c4c83db3cc7c637993a"><span class="id" title="notation">[</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#fca367ac88276c4c83db3cc7c637993a"><span class="id" title="notation">disjoint</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#fca367ac88276c4c83db3cc7c637993a"><span class="id" title="notation">&</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#B"><span class="id" title="variable">B</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#fca367ac88276c4c83db3cc7c637993a"><span class="id" title="notation">]</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="disjoint_cons"><span class="id" title="lemma">disjoint_cons</span></a> <span class="id" title="var">x</span> <span class="id" title="var">s</span> <span class="id" title="var">B</span> :<br/> + <a class="idref" href="mathcomp.ssreflect.fintype.html#fca367ac88276c4c83db3cc7c637993a"><span class="id" title="notation">[</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#fca367ac88276c4c83db3cc7c637993a"><span class="id" title="notation">disjoint</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a> <a class="idref" href="mathcomp.ssreflect.seq.html#d7fed0909a58e41c49e3ee117361b0a5"><span class="id" title="notation">::</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#s"><span class="id" title="variable">s</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#fca367ac88276c4c83db3cc7c637993a"><span class="id" title="notation">&</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#B"><span class="id" title="variable">B</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#fca367ac88276c4c83db3cc7c637993a"><span class="id" title="notation">]</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Datatypes.html#49ac24efa716d8b0ee8943bc1d1769a9"><span class="id" title="notation">(</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#ad6d23746eb1a3b62e52010d3945a1db"><span class="id" title="notation">\</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#ad6d23746eb1a3b62e52010d3945a1db"><span class="id" title="notation">notin</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#B"><span class="id" title="variable">B</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Datatypes.html#49ac24efa716d8b0ee8943bc1d1769a9"><span class="id" title="notation">)</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Datatypes.html#49ac24efa716d8b0ee8943bc1d1769a9"><span class="id" title="notation">&&</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#fca367ac88276c4c83db3cc7c637993a"><span class="id" title="notation">[</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#fca367ac88276c4c83db3cc7c637993a"><span class="id" title="notation">disjoint</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#s"><span class="id" title="variable">s</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#fca367ac88276c4c83db3cc7c637993a"><span class="id" title="notation">&</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#B"><span class="id" title="variable">B</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#fca367ac88276c4c83db3cc7c637993a"><span class="id" title="notation">]</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="disjoint_has"><span class="id" title="lemma">disjoint_has</span></a> <span class="id" title="var">s</span> <span class="id" title="var">A</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#fca367ac88276c4c83db3cc7c637993a"><span class="id" title="notation">[</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#fca367ac88276c4c83db3cc7c637993a"><span class="id" title="notation">disjoint</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#s"><span class="id" title="variable">s</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#fca367ac88276c4c83db3cc7c637993a"><span class="id" title="notation">&</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#fca367ac88276c4c83db3cc7c637993a"><span class="id" title="notation">]</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#4b80c70cdb231351c5e129ba61f7f956"><span class="id" title="notation">~~</span></a> <a class="idref" href="mathcomp.ssreflect.seq.html#has"><span class="id" title="definition">has</span></a> (<a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#mem"><span class="id" title="definition">mem</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a>) <a class="idref" href="mathcomp.ssreflect.fintype.html#s"><span class="id" title="variable">s</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="disjoint_cat"><span class="id" title="lemma">disjoint_cat</span></a> <span class="id" title="var">s1</span> <span class="id" title="var">s2</span> <span class="id" title="var">A</span> :<br/> + <a class="idref" href="mathcomp.ssreflect.fintype.html#fca367ac88276c4c83db3cc7c637993a"><span class="id" title="notation">[</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#fca367ac88276c4c83db3cc7c637993a"><span class="id" title="notation">disjoint</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#s1"><span class="id" title="variable">s1</span></a> <a class="idref" href="mathcomp.ssreflect.seq.html#2ac9001c05ad5bd2f6d5f68e59f48fbb"><span class="id" title="notation">++</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#s2"><span class="id" title="variable">s2</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#fca367ac88276c4c83db3cc7c637993a"><span class="id" title="notation">&</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#fca367ac88276c4c83db3cc7c637993a"><span class="id" title="notation">]</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#fca367ac88276c4c83db3cc7c637993a"><span class="id" title="notation">[</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#fca367ac88276c4c83db3cc7c637993a"><span class="id" title="notation">disjoint</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#s1"><span class="id" title="variable">s1</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#fca367ac88276c4c83db3cc7c637993a"><span class="id" title="notation">&</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#fca367ac88276c4c83db3cc7c637993a"><span class="id" title="notation">]</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Datatypes.html#49ac24efa716d8b0ee8943bc1d1769a9"><span class="id" title="notation">&&</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#fca367ac88276c4c83db3cc7c637993a"><span class="id" title="notation">[</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#fca367ac88276c4c83db3cc7c637993a"><span class="id" title="notation">disjoint</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#s2"><span class="id" title="variable">s2</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#fca367ac88276c4c83db3cc7c637993a"><span class="id" title="notation">&</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#fca367ac88276c4c83db3cc7c637993a"><span class="id" title="notation">]</span></a>.<br/> + +<br/> +<span class="id" title="keyword">End</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#OpsTheory"><span class="id" title="section">OpsTheory</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Hint Resolve</span> <span class="id" title="var">subxx_hint</span>.<br/> + +<br/> + +<br/> +</div> + +<div class="doc"> + +<div class="paragraph"> </div> + + Boolean quantifiers for finType + +</div> +<div class="code"> + +<br/> +<span class="id" title="keyword">Section</span> <a name="QuantifierCombinators"><span class="id" title="section">QuantifierCombinators</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Variables</span> (<a name="QuantifierCombinators.T"><span class="id" title="variable">T</span></a> : <a class="idref" href="mathcomp.ssreflect.fintype.html#finType"><span class="id" title="abbreviation">finType</span></a>) (<a name="QuantifierCombinators.P"><span class="id" title="variable">P</span></a> : <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#pred"><span class="id" title="definition">pred</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#T"><span class="id" title="variable">T</span></a>) (<a name="QuantifierCombinators.PP"><span class="id" title="variable">PP</span></a> : <a class="idref" href="mathcomp.ssreflect.fintype.html#T"><span class="id" title="variable">T</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> <span class="id" title="keyword">Prop</span>).<br/> +<span class="id" title="keyword">Hypothesis</span> <a name="QuantifierCombinators.viewP"><span class="id" title="variable">viewP</span></a> : <span class="id" title="keyword">∀</span> <span class="id" title="var">x</span>, <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#reflect"><span class="id" title="abbreviation">reflect</span></a> (<a class="idref" href="mathcomp.ssreflect.fintype.html#QuantifierCombinators.PP"><span class="id" title="variable">PP</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a>) (<a class="idref" href="mathcomp.ssreflect.fintype.html#QuantifierCombinators.P"><span class="id" title="variable">P</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a>).<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="existsPP"><span class="id" title="lemma">existsPP</span></a> : <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#reflect"><span class="id" title="abbreviation">reflect</span></a> (<a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#84eb6d2849dbf3581b1c0c05add5f2d8"><span class="id" title="notation">∃</span></a> <span class="id" title="var">x</span><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#84eb6d2849dbf3581b1c0c05add5f2d8"><span class="id" title="notation">,</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#QuantifierCombinators.PP"><span class="id" title="variable">PP</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a>) <a class="idref" href="mathcomp.ssreflect.fintype.html#e1fcc6c8b4370f06a39f9b1b3c9764b2"><span class="id" title="notation">[</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#e1fcc6c8b4370f06a39f9b1b3c9764b2"><span class="id" title="notation">∃</span></a> <span class="id" title="var">x</span><a class="idref" href="mathcomp.ssreflect.fintype.html#46e5a4123d46e6b126f7788a77176785"><span class="id" title="notation">,</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#QuantifierCombinators.P"><span class="id" title="variable">P</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#e1fcc6c8b4370f06a39f9b1b3c9764b2"><span class="id" title="notation">]</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="forallPP"><span class="id" title="lemma">forallPP</span></a> : <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#reflect"><span class="id" title="abbreviation">reflect</span></a> (<span class="id" title="keyword">∀</span> <span class="id" title="var">x</span>, <a class="idref" href="mathcomp.ssreflect.fintype.html#QuantifierCombinators.PP"><span class="id" title="variable">PP</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a>) <a class="idref" href="mathcomp.ssreflect.fintype.html#6f09da91da7950fd65c31195ac4a5d3e"><span class="id" title="notation">[</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#6f09da91da7950fd65c31195ac4a5d3e"><span class="id" title="notation">∀</span></a> <span class="id" title="var">x</span><a class="idref" href="mathcomp.ssreflect.fintype.html#46e5a4123d46e6b126f7788a77176785"><span class="id" title="notation">,</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#QuantifierCombinators.P"><span class="id" title="variable">P</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#6f09da91da7950fd65c31195ac4a5d3e"><span class="id" title="notation">]</span></a>.<br/> + +<br/> +<span class="id" title="keyword">End</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#QuantifierCombinators"><span class="id" title="section">QuantifierCombinators</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Notation</span> <a name="edf4782ad90e7465ab8db01948eba086"><span class="id" title="notation">"</span></a>'exists_ view" := (<a class="idref" href="mathcomp.ssreflect.fintype.html#existsPP"><span class="id" title="lemma">existsPP</span></a> (<span class="id" title="keyword">fun</span> <span class="id" title="var">_</span> ⇒ <span class="id" title="var">view</span>))<br/> + (<span class="id" title="tactic">at</span> <span class="id" title="keyword">level</span> 4, <span class="id" title="tactic">right</span> <span class="id" title="keyword">associativity</span>, <span class="id" title="var">format</span> "''exists_' view").<br/> +<span class="id" title="keyword">Notation</span> <a name="7155814a593696a5e5153c9e978d98a6"><span class="id" title="notation">"</span></a>'forall_ view" := (<a class="idref" href="mathcomp.ssreflect.fintype.html#forallPP"><span class="id" title="lemma">forallPP</span></a> (<span class="id" title="keyword">fun</span> <span class="id" title="var">_</span> ⇒ <span class="id" title="var">view</span>))<br/> + (<span class="id" title="tactic">at</span> <span class="id" title="keyword">level</span> 4, <span class="id" title="tactic">right</span> <span class="id" title="keyword">associativity</span>, <span class="id" title="var">format</span> "''forall_' view").<br/> + +<br/> +<span class="id" title="keyword">Section</span> <a name="Quantifiers"><span class="id" title="section">Quantifiers</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Variables</span> (<a name="Quantifiers.T"><span class="id" title="variable">T</span></a> : <a class="idref" href="mathcomp.ssreflect.fintype.html#finType"><span class="id" title="abbreviation">finType</span></a>) (<a name="Quantifiers.rT"><span class="id" title="variable">rT</span></a> : <a class="idref" href="mathcomp.ssreflect.fintype.html#T"><span class="id" title="variable">T</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> <a class="idref" href="mathcomp.ssreflect.eqtype.html#Equality.Exports.eqType"><span class="id" title="abbreviation">eqType</span></a>).<br/> +<span class="id" title="keyword">Implicit</span> <span class="id" title="keyword">Type</span> (<span class="id" title="var">D</span> <span class="id" title="var">P</span> : <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#pred"><span class="id" title="definition">pred</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#Quantifiers.T"><span class="id" title="variable">T</span></a>) (<span class="id" title="var">f</span> : <span class="id" title="keyword">∀</span> <span class="id" title="var">x</span>, <a class="idref" href="mathcomp.ssreflect.fintype.html#Quantifiers.rT"><span class="id" title="variable">rT</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a>).<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="forallP"><span class="id" title="lemma">forallP</span></a> <span class="id" title="var">P</span> : <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#reflect"><span class="id" title="abbreviation">reflect</span></a> (<span class="id" title="keyword">∀</span> <span class="id" title="var">x</span>, <a class="idref" href="mathcomp.ssreflect.fintype.html#P"><span class="id" title="variable">P</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a>) <a class="idref" href="mathcomp.ssreflect.fintype.html#6f09da91da7950fd65c31195ac4a5d3e"><span class="id" title="notation">[</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#6f09da91da7950fd65c31195ac4a5d3e"><span class="id" title="notation">∀</span></a> <span class="id" title="var">x</span><a class="idref" href="mathcomp.ssreflect.fintype.html#46e5a4123d46e6b126f7788a77176785"><span class="id" title="notation">,</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#P"><span class="id" title="variable">P</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#6f09da91da7950fd65c31195ac4a5d3e"><span class="id" title="notation">]</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="eqfunP"><span class="id" title="lemma">eqfunP</span></a> <span class="id" title="var">f1</span> <span class="id" title="var">f2</span> : <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#reflect"><span class="id" title="abbreviation">reflect</span></a> (<span class="id" title="keyword">∀</span> <span class="id" title="var">x</span>, <a class="idref" href="mathcomp.ssreflect.fintype.html#f1"><span class="id" title="variable">f1</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#f2"><span class="id" title="variable">f2</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a>) <a class="idref" href="mathcomp.ssreflect.fintype.html#6f09da91da7950fd65c31195ac4a5d3e"><span class="id" title="notation">[</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#6f09da91da7950fd65c31195ac4a5d3e"><span class="id" title="notation">∀</span></a> <span class="id" title="var">x</span><a class="idref" href="mathcomp.ssreflect.fintype.html#46e5a4123d46e6b126f7788a77176785"><span class="id" title="notation">,</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#f1"><span class="id" title="variable">f1</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a> <a class="idref" href="mathcomp.ssreflect.eqtype.html#17d28d004d0863cb022d4ce832ddaaae"><span class="id" title="notation">==</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#f2"><span class="id" title="variable">f2</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#6f09da91da7950fd65c31195ac4a5d3e"><span class="id" title="notation">]</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="forall_inP"><span class="id" title="lemma">forall_inP</span></a> <span class="id" title="var">D</span> <span class="id" title="var">P</span> : <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#reflect"><span class="id" title="abbreviation">reflect</span></a> (<span class="id" title="keyword">∀</span> <span class="id" title="var">x</span>, <a class="idref" href="mathcomp.ssreflect.fintype.html#D"><span class="id" title="variable">D</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#P"><span class="id" title="variable">P</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a>) <a class="idref" href="mathcomp.ssreflect.fintype.html#71aa9b4d33ee64c2b31b6cd545727657"><span class="id" title="notation">[</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#71aa9b4d33ee64c2b31b6cd545727657"><span class="id" title="notation">∀</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#71aa9b4d33ee64c2b31b6cd545727657"><span class="id" title="notation">(</span></a><span class="id" title="var">x</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#71aa9b4d33ee64c2b31b6cd545727657"><span class="id" title="notation">|</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#D"><span class="id" title="variable">D</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#71aa9b4d33ee64c2b31b6cd545727657"><span class="id" title="notation">)</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#46e5a4123d46e6b126f7788a77176785"><span class="id" title="notation">,</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#P"><span class="id" title="variable">P</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#71aa9b4d33ee64c2b31b6cd545727657"><span class="id" title="notation">]</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="eqfun_inP"><span class="id" title="lemma">eqfun_inP</span></a> <span class="id" title="var">D</span> <span class="id" title="var">f1</span> <span class="id" title="var">f2</span> :<br/> + <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#reflect"><span class="id" title="abbreviation">reflect</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#5c59b35a0b51db520cf1fba473ecf127"><span class="id" title="notation">{</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#5c59b35a0b51db520cf1fba473ecf127"><span class="id" title="notation">in</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#D"><span class="id" title="variable">D</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#5c59b35a0b51db520cf1fba473ecf127"><span class="id" title="notation">,</span></a> <span class="id" title="keyword">∀</span> <span class="id" title="var">x</span>, <a class="idref" href="mathcomp.ssreflect.fintype.html#f1"><span class="id" title="variable">f1</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#f2"><span class="id" title="variable">f2</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#5c59b35a0b51db520cf1fba473ecf127"><span class="id" title="notation">}</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#71aa9b4d33ee64c2b31b6cd545727657"><span class="id" title="notation">[</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#71aa9b4d33ee64c2b31b6cd545727657"><span class="id" title="notation">∀</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#71aa9b4d33ee64c2b31b6cd545727657"><span class="id" title="notation">(</span></a><span class="id" title="var">x</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#71aa9b4d33ee64c2b31b6cd545727657"><span class="id" title="notation">|</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#46c9e8232fa09401e24f1934bb65029f"><span class="id" title="notation">\</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#46c9e8232fa09401e24f1934bb65029f"><span class="id" title="notation">in</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#D"><span class="id" title="variable">D</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#71aa9b4d33ee64c2b31b6cd545727657"><span class="id" title="notation">)</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#46e5a4123d46e6b126f7788a77176785"><span class="id" title="notation">,</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#f1"><span class="id" title="variable">f1</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a> <a class="idref" href="mathcomp.ssreflect.eqtype.html#17d28d004d0863cb022d4ce832ddaaae"><span class="id" title="notation">==</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#f2"><span class="id" title="variable">f2</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#71aa9b4d33ee64c2b31b6cd545727657"><span class="id" title="notation">]</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="existsP"><span class="id" title="lemma">existsP</span></a> <span class="id" title="var">P</span> : <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#reflect"><span class="id" title="abbreviation">reflect</span></a> (<a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#84eb6d2849dbf3581b1c0c05add5f2d8"><span class="id" title="notation">∃</span></a> <span class="id" title="var">x</span><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#84eb6d2849dbf3581b1c0c05add5f2d8"><span class="id" title="notation">,</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#P"><span class="id" title="variable">P</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a>) <a class="idref" href="mathcomp.ssreflect.fintype.html#e1fcc6c8b4370f06a39f9b1b3c9764b2"><span class="id" title="notation">[</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#e1fcc6c8b4370f06a39f9b1b3c9764b2"><span class="id" title="notation">∃</span></a> <span class="id" title="var">x</span><a class="idref" href="mathcomp.ssreflect.fintype.html#46e5a4123d46e6b126f7788a77176785"><span class="id" title="notation">,</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#P"><span class="id" title="variable">P</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#e1fcc6c8b4370f06a39f9b1b3c9764b2"><span class="id" title="notation">]</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="exists_eqP"><span class="id" title="lemma">exists_eqP</span></a> <span class="id" title="var">f1</span> <span class="id" title="var">f2</span> :<br/> + <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#reflect"><span class="id" title="abbreviation">reflect</span></a> (<a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#84eb6d2849dbf3581b1c0c05add5f2d8"><span class="id" title="notation">∃</span></a> <span class="id" title="var">x</span><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#84eb6d2849dbf3581b1c0c05add5f2d8"><span class="id" title="notation">,</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#f1"><span class="id" title="variable">f1</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#f2"><span class="id" title="variable">f2</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a>) <a class="idref" href="mathcomp.ssreflect.fintype.html#e1fcc6c8b4370f06a39f9b1b3c9764b2"><span class="id" title="notation">[</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#e1fcc6c8b4370f06a39f9b1b3c9764b2"><span class="id" title="notation">∃</span></a> <span class="id" title="var">x</span><a class="idref" href="mathcomp.ssreflect.fintype.html#46e5a4123d46e6b126f7788a77176785"><span class="id" title="notation">,</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#f1"><span class="id" title="variable">f1</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a> <a class="idref" href="mathcomp.ssreflect.eqtype.html#17d28d004d0863cb022d4ce832ddaaae"><span class="id" title="notation">==</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#f2"><span class="id" title="variable">f2</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#e1fcc6c8b4370f06a39f9b1b3c9764b2"><span class="id" title="notation">]</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="exists_inP"><span class="id" title="lemma">exists_inP</span></a> <span class="id" title="var">D</span> <span class="id" title="var">P</span> : <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#reflect"><span class="id" title="abbreviation">reflect</span></a> (<a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#28b18e493f7cb0bd8447607bdc385ff8"><span class="id" title="notation">exists2</span></a> <span class="id" title="var">x</span><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#28b18e493f7cb0bd8447607bdc385ff8"><span class="id" title="notation">,</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#D"><span class="id" title="variable">D</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#28b18e493f7cb0bd8447607bdc385ff8"><span class="id" title="notation">&</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#P"><span class="id" title="variable">P</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a>) <a class="idref" href="mathcomp.ssreflect.fintype.html#2622a9930e3eed1321ab6ed4605c7142"><span class="id" title="notation">[</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#2622a9930e3eed1321ab6ed4605c7142"><span class="id" title="notation">∃</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#2622a9930e3eed1321ab6ed4605c7142"><span class="id" title="notation">(</span></a><span class="id" title="var">x</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#2622a9930e3eed1321ab6ed4605c7142"><span class="id" title="notation">|</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#D"><span class="id" title="variable">D</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#2622a9930e3eed1321ab6ed4605c7142"><span class="id" title="notation">)</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#46e5a4123d46e6b126f7788a77176785"><span class="id" title="notation">,</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#P"><span class="id" title="variable">P</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#2622a9930e3eed1321ab6ed4605c7142"><span class="id" title="notation">]</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="exists_eq_inP"><span class="id" title="lemma">exists_eq_inP</span></a> <span class="id" title="var">D</span> <span class="id" title="var">f1</span> <span class="id" title="var">f2</span> :<br/> + <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#reflect"><span class="id" title="abbreviation">reflect</span></a> (<a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#28b18e493f7cb0bd8447607bdc385ff8"><span class="id" title="notation">exists2</span></a> <span class="id" title="var">x</span><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#28b18e493f7cb0bd8447607bdc385ff8"><span class="id" title="notation">,</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#D"><span class="id" title="variable">D</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#28b18e493f7cb0bd8447607bdc385ff8"><span class="id" title="notation">&</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#f1"><span class="id" title="variable">f1</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#f2"><span class="id" title="variable">f2</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a>) <a class="idref" href="mathcomp.ssreflect.fintype.html#2622a9930e3eed1321ab6ed4605c7142"><span class="id" title="notation">[</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#2622a9930e3eed1321ab6ed4605c7142"><span class="id" title="notation">∃</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#2622a9930e3eed1321ab6ed4605c7142"><span class="id" title="notation">(</span></a><span class="id" title="var">x</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#2622a9930e3eed1321ab6ed4605c7142"><span class="id" title="notation">|</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#D"><span class="id" title="variable">D</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#2622a9930e3eed1321ab6ed4605c7142"><span class="id" title="notation">)</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#46e5a4123d46e6b126f7788a77176785"><span class="id" title="notation">,</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#f1"><span class="id" title="variable">f1</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a> <a class="idref" href="mathcomp.ssreflect.eqtype.html#17d28d004d0863cb022d4ce832ddaaae"><span class="id" title="notation">==</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#f2"><span class="id" title="variable">f2</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#2622a9930e3eed1321ab6ed4605c7142"><span class="id" title="notation">]</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="eq_existsb"><span class="id" title="lemma">eq_existsb</span></a> <span class="id" title="var">P1</span> <span class="id" title="var">P2</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#P1"><span class="id" title="variable">P1</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrfun.html#2500d48ed8e862ccfda98a44dff88963"><span class="id" title="notation">=1</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#P2"><span class="id" title="variable">P2</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#e1fcc6c8b4370f06a39f9b1b3c9764b2"><span class="id" title="notation">[</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#e1fcc6c8b4370f06a39f9b1b3c9764b2"><span class="id" title="notation">∃</span></a> <span class="id" title="var">x</span><a class="idref" href="mathcomp.ssreflect.fintype.html#46e5a4123d46e6b126f7788a77176785"><span class="id" title="notation">,</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#P1"><span class="id" title="variable">P1</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#e1fcc6c8b4370f06a39f9b1b3c9764b2"><span class="id" title="notation">]</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#e1fcc6c8b4370f06a39f9b1b3c9764b2"><span class="id" title="notation">[</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#e1fcc6c8b4370f06a39f9b1b3c9764b2"><span class="id" title="notation">∃</span></a> <span class="id" title="var">x</span><a class="idref" href="mathcomp.ssreflect.fintype.html#46e5a4123d46e6b126f7788a77176785"><span class="id" title="notation">,</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#P2"><span class="id" title="variable">P2</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#e1fcc6c8b4370f06a39f9b1b3c9764b2"><span class="id" title="notation">]</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="eq_existsb_in"><span class="id" title="lemma">eq_existsb_in</span></a> <span class="id" title="var">D</span> <span class="id" title="var">P1</span> <span class="id" title="var">P2</span> :<br/> + <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">(</span></a><span class="id" title="keyword">∀</span> <span class="id" title="var">x</span>, <a class="idref" href="mathcomp.ssreflect.fintype.html#D"><span class="id" title="variable">D</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#P1"><span class="id" title="variable">P1</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#P2"><span class="id" title="variable">P2</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">)</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a><br/> + <a class="idref" href="mathcomp.ssreflect.fintype.html#2622a9930e3eed1321ab6ed4605c7142"><span class="id" title="notation">[</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#2622a9930e3eed1321ab6ed4605c7142"><span class="id" title="notation">∃</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#2622a9930e3eed1321ab6ed4605c7142"><span class="id" title="notation">(</span></a><span class="id" title="var">x</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#2622a9930e3eed1321ab6ed4605c7142"><span class="id" title="notation">|</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#D"><span class="id" title="variable">D</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#2622a9930e3eed1321ab6ed4605c7142"><span class="id" title="notation">)</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#46e5a4123d46e6b126f7788a77176785"><span class="id" title="notation">,</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#P1"><span class="id" title="variable">P1</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#2622a9930e3eed1321ab6ed4605c7142"><span class="id" title="notation">]</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#2622a9930e3eed1321ab6ed4605c7142"><span class="id" title="notation">[</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#2622a9930e3eed1321ab6ed4605c7142"><span class="id" title="notation">∃</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#2622a9930e3eed1321ab6ed4605c7142"><span class="id" title="notation">(</span></a><span class="id" title="var">x</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#2622a9930e3eed1321ab6ed4605c7142"><span class="id" title="notation">|</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#D"><span class="id" title="variable">D</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#2622a9930e3eed1321ab6ed4605c7142"><span class="id" title="notation">)</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#46e5a4123d46e6b126f7788a77176785"><span class="id" title="notation">,</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#P2"><span class="id" title="variable">P2</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#2622a9930e3eed1321ab6ed4605c7142"><span class="id" title="notation">]</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="eq_forallb"><span class="id" title="lemma">eq_forallb</span></a> <span class="id" title="var">P1</span> <span class="id" title="var">P2</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#P1"><span class="id" title="variable">P1</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrfun.html#2500d48ed8e862ccfda98a44dff88963"><span class="id" title="notation">=1</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#P2"><span class="id" title="variable">P2</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#6f09da91da7950fd65c31195ac4a5d3e"><span class="id" title="notation">[</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#6f09da91da7950fd65c31195ac4a5d3e"><span class="id" title="notation">∀</span></a> <span class="id" title="var">x</span><a class="idref" href="mathcomp.ssreflect.fintype.html#46e5a4123d46e6b126f7788a77176785"><span class="id" title="notation">,</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#P1"><span class="id" title="variable">P1</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#6f09da91da7950fd65c31195ac4a5d3e"><span class="id" title="notation">]</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#6f09da91da7950fd65c31195ac4a5d3e"><span class="id" title="notation">[</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#6f09da91da7950fd65c31195ac4a5d3e"><span class="id" title="notation">∀</span></a> <span class="id" title="var">x</span><a class="idref" href="mathcomp.ssreflect.fintype.html#46e5a4123d46e6b126f7788a77176785"><span class="id" title="notation">,</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#P2"><span class="id" title="variable">P2</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#6f09da91da7950fd65c31195ac4a5d3e"><span class="id" title="notation">]</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="eq_forallb_in"><span class="id" title="lemma">eq_forallb_in</span></a> <span class="id" title="var">D</span> <span class="id" title="var">P1</span> <span class="id" title="var">P2</span> :<br/> + <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">(</span></a><span class="id" title="keyword">∀</span> <span class="id" title="var">x</span>, <a class="idref" href="mathcomp.ssreflect.fintype.html#D"><span class="id" title="variable">D</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#P1"><span class="id" title="variable">P1</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#P2"><span class="id" title="variable">P2</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">)</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a><br/> + <a class="idref" href="mathcomp.ssreflect.fintype.html#71aa9b4d33ee64c2b31b6cd545727657"><span class="id" title="notation">[</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#71aa9b4d33ee64c2b31b6cd545727657"><span class="id" title="notation">∀</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#71aa9b4d33ee64c2b31b6cd545727657"><span class="id" title="notation">(</span></a><span class="id" title="var">x</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#71aa9b4d33ee64c2b31b6cd545727657"><span class="id" title="notation">|</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#D"><span class="id" title="variable">D</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#71aa9b4d33ee64c2b31b6cd545727657"><span class="id" title="notation">)</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#46e5a4123d46e6b126f7788a77176785"><span class="id" title="notation">,</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#P1"><span class="id" title="variable">P1</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#71aa9b4d33ee64c2b31b6cd545727657"><span class="id" title="notation">]</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#71aa9b4d33ee64c2b31b6cd545727657"><span class="id" title="notation">[</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#71aa9b4d33ee64c2b31b6cd545727657"><span class="id" title="notation">∀</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#71aa9b4d33ee64c2b31b6cd545727657"><span class="id" title="notation">(</span></a><span class="id" title="var">x</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#71aa9b4d33ee64c2b31b6cd545727657"><span class="id" title="notation">|</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#D"><span class="id" title="variable">D</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#71aa9b4d33ee64c2b31b6cd545727657"><span class="id" title="notation">)</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#46e5a4123d46e6b126f7788a77176785"><span class="id" title="notation">,</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#P2"><span class="id" title="variable">P2</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#71aa9b4d33ee64c2b31b6cd545727657"><span class="id" title="notation">]</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="negb_forall"><span class="id" title="lemma">negb_forall</span></a> <span class="id" title="var">P</span> : <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#4b80c70cdb231351c5e129ba61f7f956"><span class="id" title="notation">~~</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#6f09da91da7950fd65c31195ac4a5d3e"><span class="id" title="notation">[</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#6f09da91da7950fd65c31195ac4a5d3e"><span class="id" title="notation">∀</span></a> <span class="id" title="var">x</span><a class="idref" href="mathcomp.ssreflect.fintype.html#46e5a4123d46e6b126f7788a77176785"><span class="id" title="notation">,</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#P"><span class="id" title="variable">P</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#6f09da91da7950fd65c31195ac4a5d3e"><span class="id" title="notation">]</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#e1fcc6c8b4370f06a39f9b1b3c9764b2"><span class="id" title="notation">[</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#e1fcc6c8b4370f06a39f9b1b3c9764b2"><span class="id" title="notation">∃</span></a> <span class="id" title="var">x</span><a class="idref" href="mathcomp.ssreflect.fintype.html#46e5a4123d46e6b126f7788a77176785"><span class="id" title="notation">,</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#4b80c70cdb231351c5e129ba61f7f956"><span class="id" title="notation">~~</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#P"><span class="id" title="variable">P</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#e1fcc6c8b4370f06a39f9b1b3c9764b2"><span class="id" title="notation">]</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="negb_forall_in"><span class="id" title="lemma">negb_forall_in</span></a> <span class="id" title="var">D</span> <span class="id" title="var">P</span> :<br/> + <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#4b80c70cdb231351c5e129ba61f7f956"><span class="id" title="notation">~~</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#71aa9b4d33ee64c2b31b6cd545727657"><span class="id" title="notation">[</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#71aa9b4d33ee64c2b31b6cd545727657"><span class="id" title="notation">∀</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#71aa9b4d33ee64c2b31b6cd545727657"><span class="id" title="notation">(</span></a><span class="id" title="var">x</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#71aa9b4d33ee64c2b31b6cd545727657"><span class="id" title="notation">|</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#D"><span class="id" title="variable">D</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#71aa9b4d33ee64c2b31b6cd545727657"><span class="id" title="notation">)</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#46e5a4123d46e6b126f7788a77176785"><span class="id" title="notation">,</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#P"><span class="id" title="variable">P</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#71aa9b4d33ee64c2b31b6cd545727657"><span class="id" title="notation">]</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#2622a9930e3eed1321ab6ed4605c7142"><span class="id" title="notation">[</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#2622a9930e3eed1321ab6ed4605c7142"><span class="id" title="notation">∃</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#2622a9930e3eed1321ab6ed4605c7142"><span class="id" title="notation">(</span></a><span class="id" title="var">x</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#2622a9930e3eed1321ab6ed4605c7142"><span class="id" title="notation">|</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#D"><span class="id" title="variable">D</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#2622a9930e3eed1321ab6ed4605c7142"><span class="id" title="notation">)</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#46e5a4123d46e6b126f7788a77176785"><span class="id" title="notation">,</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#4b80c70cdb231351c5e129ba61f7f956"><span class="id" title="notation">~~</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#P"><span class="id" title="variable">P</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#2622a9930e3eed1321ab6ed4605c7142"><span class="id" title="notation">]</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="negb_exists"><span class="id" title="lemma">negb_exists</span></a> <span class="id" title="var">P</span> : <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#4b80c70cdb231351c5e129ba61f7f956"><span class="id" title="notation">~~</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#e1fcc6c8b4370f06a39f9b1b3c9764b2"><span class="id" title="notation">[</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#e1fcc6c8b4370f06a39f9b1b3c9764b2"><span class="id" title="notation">∃</span></a> <span class="id" title="var">x</span><a class="idref" href="mathcomp.ssreflect.fintype.html#46e5a4123d46e6b126f7788a77176785"><span class="id" title="notation">,</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#P"><span class="id" title="variable">P</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#e1fcc6c8b4370f06a39f9b1b3c9764b2"><span class="id" title="notation">]</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#6f09da91da7950fd65c31195ac4a5d3e"><span class="id" title="notation">[</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#6f09da91da7950fd65c31195ac4a5d3e"><span class="id" title="notation">∀</span></a> <span class="id" title="var">x</span><a class="idref" href="mathcomp.ssreflect.fintype.html#46e5a4123d46e6b126f7788a77176785"><span class="id" title="notation">,</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#4b80c70cdb231351c5e129ba61f7f956"><span class="id" title="notation">~~</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#P"><span class="id" title="variable">P</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#6f09da91da7950fd65c31195ac4a5d3e"><span class="id" title="notation">]</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="negb_exists_in"><span class="id" title="lemma">negb_exists_in</span></a> <span class="id" title="var">D</span> <span class="id" title="var">P</span> :<br/> + <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#4b80c70cdb231351c5e129ba61f7f956"><span class="id" title="notation">~~</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#2622a9930e3eed1321ab6ed4605c7142"><span class="id" title="notation">[</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#2622a9930e3eed1321ab6ed4605c7142"><span class="id" title="notation">∃</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#2622a9930e3eed1321ab6ed4605c7142"><span class="id" title="notation">(</span></a><span class="id" title="var">x</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#2622a9930e3eed1321ab6ed4605c7142"><span class="id" title="notation">|</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#D"><span class="id" title="variable">D</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#2622a9930e3eed1321ab6ed4605c7142"><span class="id" title="notation">)</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#46e5a4123d46e6b126f7788a77176785"><span class="id" title="notation">,</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#P"><span class="id" title="variable">P</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#2622a9930e3eed1321ab6ed4605c7142"><span class="id" title="notation">]</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#71aa9b4d33ee64c2b31b6cd545727657"><span class="id" title="notation">[</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#71aa9b4d33ee64c2b31b6cd545727657"><span class="id" title="notation">∀</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#71aa9b4d33ee64c2b31b6cd545727657"><span class="id" title="notation">(</span></a><span class="id" title="var">x</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#71aa9b4d33ee64c2b31b6cd545727657"><span class="id" title="notation">|</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#D"><span class="id" title="variable">D</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#71aa9b4d33ee64c2b31b6cd545727657"><span class="id" title="notation">)</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#46e5a4123d46e6b126f7788a77176785"><span class="id" title="notation">,</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#4b80c70cdb231351c5e129ba61f7f956"><span class="id" title="notation">~~</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#P"><span class="id" title="variable">P</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#71aa9b4d33ee64c2b31b6cd545727657"><span class="id" title="notation">]</span></a>.<br/> + +<br/> +<span class="id" title="keyword">End</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#Quantifiers"><span class="id" title="section">Quantifiers</span></a>.<br/> + +<br/> + +<br/> +<span class="id" title="keyword">Section</span> <a name="Extrema"><span class="id" title="section">Extrema</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Variables</span> (<a name="Extrema.I"><span class="id" title="variable">I</span></a> : <a class="idref" href="mathcomp.ssreflect.fintype.html#finType"><span class="id" title="abbreviation">finType</span></a>) (<a name="Extrema.i0"><span class="id" title="variable">i0</span></a> : <a class="idref" href="mathcomp.ssreflect.fintype.html#I"><span class="id" title="variable">I</span></a>) (<a name="Extrema.P"><span class="id" title="variable">P</span></a> : <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#pred"><span class="id" title="definition">pred</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#I"><span class="id" title="variable">I</span></a>) (<a name="Extrema.F"><span class="id" title="variable">F</span></a> : <a class="idref" href="mathcomp.ssreflect.fintype.html#I"><span class="id" title="variable">I</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Datatypes.html#nat"><span class="id" title="inductive">nat</span></a>).<br/> + +<br/> +<span class="id" title="keyword">Let</span> <a name="Extrema.arg_pred"><span class="id" title="variable">arg_pred</span></a> <span class="id" title="var">ord</span> := <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#b8288f36a4177926116f8c7429ee1d26"><span class="id" title="notation">[</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#b8288f36a4177926116f8c7429ee1d26"><span class="id" title="notation">pred</span></a> <span class="id" title="var">i</span> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#b8288f36a4177926116f8c7429ee1d26"><span class="id" title="notation">|</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#Extrema.P"><span class="id" title="variable">P</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#i"><span class="id" title="variable">i</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#b8288f36a4177926116f8c7429ee1d26"><span class="id" title="notation">&</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#71aa9b4d33ee64c2b31b6cd545727657"><span class="id" title="notation">[</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#71aa9b4d33ee64c2b31b6cd545727657"><span class="id" title="notation">∀</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#71aa9b4d33ee64c2b31b6cd545727657"><span class="id" title="notation">(</span></a><span class="id" title="var">j</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#71aa9b4d33ee64c2b31b6cd545727657"><span class="id" title="notation">|</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#Extrema.P"><span class="id" title="variable">P</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#j"><span class="id" title="variable">j</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#71aa9b4d33ee64c2b31b6cd545727657"><span class="id" title="notation">)</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#46e5a4123d46e6b126f7788a77176785"><span class="id" title="notation">,</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#ord"><span class="id" title="variable">ord</span></a> (<a class="idref" href="mathcomp.ssreflect.fintype.html#Extrema.F"><span class="id" title="variable">F</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#i"><span class="id" title="variable">i</span></a>) (<a class="idref" href="mathcomp.ssreflect.fintype.html#Extrema.F"><span class="id" title="variable">F</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#j"><span class="id" title="variable">j</span></a>)<a class="idref" href="mathcomp.ssreflect.fintype.html#71aa9b4d33ee64c2b31b6cd545727657"><span class="id" title="notation">]</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#b8288f36a4177926116f8c7429ee1d26"><span class="id" title="notation">]</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Definition</span> <a name="arg_min"><span class="id" title="definition">arg_min</span></a> := <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrfun.html#odflt"><span class="id" title="abbreviation">odflt</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#Extrema.i0"><span class="id" title="variable">i0</span></a> (<a class="idref" href="mathcomp.ssreflect.fintype.html#pick"><span class="id" title="definition">pick</span></a> (<a class="idref" href="mathcomp.ssreflect.fintype.html#Extrema.arg_pred"><span class="id" title="variable">arg_pred</span></a> <a class="idref" href="mathcomp.ssreflect.ssrnat.html#leq"><span class="id" title="definition">leq</span></a>)).<br/> + +<br/> +<span class="id" title="keyword">Definition</span> <a name="arg_max"><span class="id" title="definition">arg_max</span></a> := <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrfun.html#odflt"><span class="id" title="abbreviation">odflt</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#Extrema.i0"><span class="id" title="variable">i0</span></a> (<a class="idref" href="mathcomp.ssreflect.fintype.html#pick"><span class="id" title="definition">pick</span></a> (<a class="idref" href="mathcomp.ssreflect.fintype.html#Extrema.arg_pred"><span class="id" title="variable">arg_pred</span></a> <a class="idref" href="mathcomp.ssreflect.ssrnat.html#geq"><span class="id" title="definition">geq</span></a>)).<br/> + +<br/> +<span class="id" title="keyword">CoInductive</span> <a name="extremum_spec"><span class="id" title="inductive">extremum_spec</span></a> (<span class="id" title="var">ord</span> : <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#rel"><span class="id" title="definition">rel</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Datatypes.html#nat"><span class="id" title="inductive">nat</span></a>) : <a class="idref" href="mathcomp.ssreflect.fintype.html#Extrema.I"><span class="id" title="variable">I</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> <span class="id" title="keyword">Type</span> :=<br/> + <a name="ExtremumSpec"><span class="id" title="constructor">ExtremumSpec</span></a> <span class="id" title="var">i</span> <span class="id" title="keyword">of</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#Extrema.P"><span class="id" title="variable">P</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#i"><span class="id" title="variable">i</span></a> & (<span class="id" title="keyword">∀</span> <span class="id" title="var">j</span>, <a class="idref" href="mathcomp.ssreflect.fintype.html#Extrema.P"><span class="id" title="variable">P</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#j"><span class="id" title="variable">j</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#ord"><span class="id" title="variable">ord</span></a> (<a class="idref" href="mathcomp.ssreflect.fintype.html#Extrema.F"><span class="id" title="variable">F</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#i"><span class="id" title="variable">i</span></a>) (<a class="idref" href="mathcomp.ssreflect.fintype.html#Extrema.F"><span class="id" title="variable">F</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#j"><span class="id" title="variable">j</span></a>))<br/> + : <a class="idref" href="mathcomp.ssreflect.fintype.html#extremum_spec"><span class="id" title="inductive">extremum_spec</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#ord"><span class="id" title="variable">ord</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#i"><span class="id" title="variable">i</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Hypothesis</span> <a name="Extrema.Pi0"><span class="id" title="variable">Pi0</span></a> : <a class="idref" href="mathcomp.ssreflect.fintype.html#Extrema.P"><span class="id" title="variable">P</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#Extrema.i0"><span class="id" title="variable">i0</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Let</span> <a name="Extrema.FP"><span class="id" title="variable">FP</span></a> <span class="id" title="var">n</span> := <a class="idref" href="mathcomp.ssreflect.fintype.html#2622a9930e3eed1321ab6ed4605c7142"><span class="id" title="notation">[</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#2622a9930e3eed1321ab6ed4605c7142"><span class="id" title="notation">∃</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#2622a9930e3eed1321ab6ed4605c7142"><span class="id" title="notation">(</span></a><span class="id" title="var">i</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#2622a9930e3eed1321ab6ed4605c7142"><span class="id" title="notation">|</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#Extrema.P"><span class="id" title="variable">P</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#i"><span class="id" title="variable">i</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#2622a9930e3eed1321ab6ed4605c7142"><span class="id" title="notation">)</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#46e5a4123d46e6b126f7788a77176785"><span class="id" title="notation">,</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#Extrema.F"><span class="id" title="variable">F</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#i"><span class="id" title="variable">i</span></a> <a class="idref" href="mathcomp.ssreflect.eqtype.html#17d28d004d0863cb022d4ce832ddaaae"><span class="id" title="notation">==</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#n"><span class="id" title="variable">n</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#2622a9930e3eed1321ab6ed4605c7142"><span class="id" title="notation">]</span></a>.<br/> +<span class="id" title="keyword">Let</span> <a name="Extrema.FP_F"><span class="id" title="variable">FP_F</span></a> <span class="id" title="var">i</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#Extrema.P"><span class="id" title="variable">P</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#i"><span class="id" title="variable">i</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#Extrema.FP"><span class="id" title="variable">FP</span></a> (<a class="idref" href="mathcomp.ssreflect.fintype.html#Extrema.F"><span class="id" title="variable">F</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#i"><span class="id" title="variable">i</span></a>).<br/> + <span class="id" title="keyword">Let</span> <a name="Extrema.exFP"><span class="id" title="variable">exFP</span></a> : <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#84eb6d2849dbf3581b1c0c05add5f2d8"><span class="id" title="notation">∃</span></a> <span class="id" title="var">n</span><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#84eb6d2849dbf3581b1c0c05add5f2d8"><span class="id" title="notation">,</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#Extrema.FP"><span class="id" title="variable">FP</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#n"><span class="id" title="variable">n</span></a>. <br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="arg_minP"><span class="id" title="lemma">arg_minP</span></a> : <a class="idref" href="mathcomp.ssreflect.fintype.html#extremum_spec"><span class="id" title="inductive">extremum_spec</span></a> <a class="idref" href="mathcomp.ssreflect.ssrnat.html#leq"><span class="id" title="definition">leq</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#arg_min"><span class="id" title="definition">arg_min</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="arg_maxP"><span class="id" title="lemma">arg_maxP</span></a> : <a class="idref" href="mathcomp.ssreflect.fintype.html#extremum_spec"><span class="id" title="inductive">extremum_spec</span></a> <a class="idref" href="mathcomp.ssreflect.ssrnat.html#geq"><span class="id" title="definition">geq</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#arg_max"><span class="id" title="definition">arg_max</span></a>.<br/> + +<br/> +<span class="id" title="keyword">End</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#Extrema"><span class="id" title="section">Extrema</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Notation</span> <a name="58ad7fb63a7c636cab554e0ee7a84bcf"><span class="id" title="notation">"</span></a>[ 'arg' 'min_' ( i < i0 | P ) F ]" :=<br/> + (<a class="idref" href="mathcomp.ssreflect.fintype.html#arg_min"><span class="id" title="definition">arg_min</span></a> <span class="id" title="var">i0</span> (<span class="id" title="keyword">fun</span> <span class="id" title="var">i</span> ⇒ <span class="id" title="var">P</span>%<span class="id" title="var">B</span>) (<span class="id" title="keyword">fun</span> <span class="id" title="var">i</span> ⇒ <span class="id" title="var">F</span>))<br/> + (<span class="id" title="tactic">at</span> <span class="id" title="keyword">level</span> 0, <span class="id" title="var">i</span>, <span class="id" title="var">i0</span> <span class="id" title="tactic">at</span> <span class="id" title="keyword">level</span> 10,<br/> + <span class="id" title="var">format</span> "[ 'arg' 'min_' ( i < i0 | P ) F ]") : <span class="id" title="var">form_scope</span>.<br/> + +<br/> +<span class="id" title="keyword">Notation</span> <a name="66d1dedf27c620d1b420518a5dbdd901"><span class="id" title="notation">"</span></a>[ 'arg' 'min_' ( i < i0 'in' A ) F ]" :=<br/> + <a class="idref" href="mathcomp.ssreflect.fintype.html#58ad7fb63a7c636cab554e0ee7a84bcf"><span class="id" title="notation">[</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#58ad7fb63a7c636cab554e0ee7a84bcf"><span class="id" title="notation">arg</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#58ad7fb63a7c636cab554e0ee7a84bcf"><span class="id" title="notation">min_</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#58ad7fb63a7c636cab554e0ee7a84bcf"><span class="id" title="notation">(</span></a><span class="id" title="var">i</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#58ad7fb63a7c636cab554e0ee7a84bcf"><span class="id" title="notation"><</span></a> <span class="id" title="var">i0</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#58ad7fb63a7c636cab554e0ee7a84bcf"><span class="id" title="notation">|</span></a> <span class="id" title="var">i</span> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#46c9e8232fa09401e24f1934bb65029f"><span class="id" title="notation">\</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#46c9e8232fa09401e24f1934bb65029f"><span class="id" title="notation">in</span></a> <span class="id" title="var">A</span><a class="idref" href="mathcomp.ssreflect.fintype.html#58ad7fb63a7c636cab554e0ee7a84bcf"><span class="id" title="notation">)</span></a> <span class="id" title="var">F</span><a class="idref" href="mathcomp.ssreflect.fintype.html#58ad7fb63a7c636cab554e0ee7a84bcf"><span class="id" title="notation">]</span></a><br/> + (<span class="id" title="tactic">at</span> <span class="id" title="keyword">level</span> 0, <span class="id" title="var">i</span>, <span class="id" title="var">i0</span> <span class="id" title="tactic">at</span> <span class="id" title="keyword">level</span> 10,<br/> + <span class="id" title="var">format</span> "[ 'arg' 'min_' ( i < i0 'in' A ) F ]") : <span class="id" title="var">form_scope</span>.<br/> + +<br/> +<span class="id" title="keyword">Notation</span> <a name="acd384c66dddad589813d3fd05f91d1c"><span class="id" title="notation">"</span></a>[ 'arg' 'min_' ( i < i0 ) F ]" := <a class="idref" href="mathcomp.ssreflect.fintype.html#58ad7fb63a7c636cab554e0ee7a84bcf"><span class="id" title="notation">[</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#58ad7fb63a7c636cab554e0ee7a84bcf"><span class="id" title="notation">arg</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#58ad7fb63a7c636cab554e0ee7a84bcf"><span class="id" title="notation">min_</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#58ad7fb63a7c636cab554e0ee7a84bcf"><span class="id" title="notation">(</span></a><span class="id" title="var">i</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#58ad7fb63a7c636cab554e0ee7a84bcf"><span class="id" title="notation"><</span></a> <span class="id" title="var">i0</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#58ad7fb63a7c636cab554e0ee7a84bcf"><span class="id" title="notation">|</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Datatypes.html#true"><span class="id" title="constructor">true</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#58ad7fb63a7c636cab554e0ee7a84bcf"><span class="id" title="notation">)</span></a> <span class="id" title="var">F</span><a class="idref" href="mathcomp.ssreflect.fintype.html#58ad7fb63a7c636cab554e0ee7a84bcf"><span class="id" title="notation">]</span></a><br/> + (<span class="id" title="tactic">at</span> <span class="id" title="keyword">level</span> 0, <span class="id" title="var">i</span>, <span class="id" title="var">i0</span> <span class="id" title="tactic">at</span> <span class="id" title="keyword">level</span> 10,<br/> + <span class="id" title="var">format</span> "[ 'arg' 'min_' ( i < i0 ) F ]") : <span class="id" title="var">form_scope</span>.<br/> + +<br/> +<span class="id" title="keyword">Notation</span> <a name="530d0fafa5c3030eba99142a9472fedc"><span class="id" title="notation">"</span></a>[ 'arg' 'max_' ( i > i0 | P ) F ]" :=<br/> + (<a class="idref" href="mathcomp.ssreflect.fintype.html#arg_max"><span class="id" title="definition">arg_max</span></a> <span class="id" title="var">i0</span> (<span class="id" title="keyword">fun</span> <span class="id" title="var">i</span> ⇒ <span class="id" title="var">P</span>%<span class="id" title="var">B</span>) (<span class="id" title="keyword">fun</span> <span class="id" title="var">i</span> ⇒ <span class="id" title="var">F</span>))<br/> + (<span class="id" title="tactic">at</span> <span class="id" title="keyword">level</span> 0, <span class="id" title="var">i</span>, <span class="id" title="var">i0</span> <span class="id" title="tactic">at</span> <span class="id" title="keyword">level</span> 10,<br/> + <span class="id" title="var">format</span> "[ 'arg' 'max_' ( i > i0 | P ) F ]") : <span class="id" title="var">form_scope</span>.<br/> + +<br/> +<span class="id" title="keyword">Notation</span> <a name="ba60bf6bcda03f05a88757cb639677c4"><span class="id" title="notation">"</span></a>[ 'arg' 'max_' ( i > i0 'in' A ) F ]" :=<br/> + <a class="idref" href="mathcomp.ssreflect.fintype.html#530d0fafa5c3030eba99142a9472fedc"><span class="id" title="notation">[</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#530d0fafa5c3030eba99142a9472fedc"><span class="id" title="notation">arg</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#530d0fafa5c3030eba99142a9472fedc"><span class="id" title="notation">max_</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#530d0fafa5c3030eba99142a9472fedc"><span class="id" title="notation">(</span></a><span class="id" title="var">i</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#530d0fafa5c3030eba99142a9472fedc"><span class="id" title="notation">></span></a> <span class="id" title="var">i0</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#530d0fafa5c3030eba99142a9472fedc"><span class="id" title="notation">|</span></a> <span class="id" title="var">i</span> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#46c9e8232fa09401e24f1934bb65029f"><span class="id" title="notation">\</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#46c9e8232fa09401e24f1934bb65029f"><span class="id" title="notation">in</span></a> <span class="id" title="var">A</span><a class="idref" href="mathcomp.ssreflect.fintype.html#530d0fafa5c3030eba99142a9472fedc"><span class="id" title="notation">)</span></a> <span class="id" title="var">F</span><a class="idref" href="mathcomp.ssreflect.fintype.html#530d0fafa5c3030eba99142a9472fedc"><span class="id" title="notation">]</span></a><br/> + (<span class="id" title="tactic">at</span> <span class="id" title="keyword">level</span> 0, <span class="id" title="var">i</span>, <span class="id" title="var">i0</span> <span class="id" title="tactic">at</span> <span class="id" title="keyword">level</span> 10,<br/> + <span class="id" title="var">format</span> "[ 'arg' 'max_' ( i > i0 'in' A ) F ]") : <span class="id" title="var">form_scope</span>.<br/> + +<br/> +<span class="id" title="keyword">Notation</span> <a name="7fb3ca55940d30a3534993be37da0b82"><span class="id" title="notation">"</span></a>[ 'arg' 'max_' ( i > i0 ) F ]" := <a class="idref" href="mathcomp.ssreflect.fintype.html#530d0fafa5c3030eba99142a9472fedc"><span class="id" title="notation">[</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#530d0fafa5c3030eba99142a9472fedc"><span class="id" title="notation">arg</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#530d0fafa5c3030eba99142a9472fedc"><span class="id" title="notation">max_</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#530d0fafa5c3030eba99142a9472fedc"><span class="id" title="notation">(</span></a><span class="id" title="var">i</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#530d0fafa5c3030eba99142a9472fedc"><span class="id" title="notation">></span></a> <span class="id" title="var">i0</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#530d0fafa5c3030eba99142a9472fedc"><span class="id" title="notation">|</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Datatypes.html#true"><span class="id" title="constructor">true</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#530d0fafa5c3030eba99142a9472fedc"><span class="id" title="notation">)</span></a> <span class="id" title="var">F</span><a class="idref" href="mathcomp.ssreflect.fintype.html#530d0fafa5c3030eba99142a9472fedc"><span class="id" title="notation">]</span></a><br/> + (<span class="id" title="tactic">at</span> <span class="id" title="keyword">level</span> 0, <span class="id" title="var">i</span>, <span class="id" title="var">i0</span> <span class="id" title="tactic">at</span> <span class="id" title="keyword">level</span> 10,<br/> + <span class="id" title="var">format</span> "[ 'arg' 'max_' ( i > i0 ) F ]") : <span class="id" title="var">form_scope</span>.<br/> + +<br/> +</div> + +<div class="doc"> + +<div class="paragraph"> </div> + + Boolean injectivity test for functions with a finType domain + +</div> +<div class="code"> + +<br/> +<span class="id" title="keyword">Section</span> <a name="Injectiveb"><span class="id" title="section">Injectiveb</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Variables</span> (<a name="Injectiveb.aT"><span class="id" title="variable">aT</span></a> : <a class="idref" href="mathcomp.ssreflect.fintype.html#finType"><span class="id" title="abbreviation">finType</span></a>) (<a name="Injectiveb.rT"><span class="id" title="variable">rT</span></a> : <a class="idref" href="mathcomp.ssreflect.eqtype.html#Equality.Exports.eqType"><span class="id" title="abbreviation">eqType</span></a>) (<a name="Injectiveb.f"><span class="id" title="variable">f</span></a> : <a class="idref" href="mathcomp.ssreflect.fintype.html#aT"><span class="id" title="variable">aT</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#rT"><span class="id" title="variable">rT</span></a>).<br/> +<span class="id" title="keyword">Implicit</span> <span class="id" title="keyword">Type</span> <span class="id" title="var">D</span> : <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#pred"><span class="id" title="definition">pred</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#Injectiveb.aT"><span class="id" title="variable">aT</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Definition</span> <a name="dinjectiveb"><span class="id" title="definition">dinjectiveb</span></a> <span class="id" title="var">D</span> := <a class="idref" href="mathcomp.ssreflect.seq.html#uniq"><span class="id" title="definition">uniq</span></a> (<a class="idref" href="mathcomp.ssreflect.seq.html#map"><span class="id" title="definition">map</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#Injectiveb.f"><span class="id" title="variable">f</span></a> (<a class="idref" href="mathcomp.ssreflect.fintype.html#enum"><span class="id" title="abbreviation">enum</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#D"><span class="id" title="variable">D</span></a>)).<br/> + +<br/> +<span class="id" title="keyword">Definition</span> <a name="injectiveb"><span class="id" title="definition">injectiveb</span></a> := <a class="idref" href="mathcomp.ssreflect.fintype.html#dinjectiveb"><span class="id" title="definition">dinjectiveb</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#Injectiveb.aT"><span class="id" title="variable">aT</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="dinjectivePn"><span class="id" title="lemma">dinjectivePn</span></a> <span class="id" title="var">D</span> :<br/> + <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#reflect"><span class="id" title="abbreviation">reflect</span></a> (<a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#28b18e493f7cb0bd8447607bdc385ff8"><span class="id" title="notation">exists2</span></a> <span class="id" title="var">x</span><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#28b18e493f7cb0bd8447607bdc385ff8"><span class="id" title="notation">,</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#46c9e8232fa09401e24f1934bb65029f"><span class="id" title="notation">\</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#46c9e8232fa09401e24f1934bb65029f"><span class="id" title="notation">in</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#D"><span class="id" title="variable">D</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#28b18e493f7cb0bd8447607bdc385ff8"><span class="id" title="notation">&</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#28b18e493f7cb0bd8447607bdc385ff8"><span class="id" title="notation">exists2</span></a> <span class="id" title="var">y</span><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#28b18e493f7cb0bd8447607bdc385ff8"><span class="id" title="notation">,</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#y"><span class="id" title="variable">y</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#46c9e8232fa09401e24f1934bb65029f"><span class="id" title="notation">\</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#46c9e8232fa09401e24f1934bb65029f"><span class="id" title="notation">in</span></a> <a class="idref" href="mathcomp.ssreflect.eqtype.html#11efb36d4e2b98f4519391785d68e99e"><span class="id" title="notation">[</span></a><a class="idref" href="mathcomp.ssreflect.eqtype.html#11efb36d4e2b98f4519391785d68e99e"><span class="id" title="notation">predD1</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#D"><span class="id" title="variable">D</span></a> <a class="idref" href="mathcomp.ssreflect.eqtype.html#11efb36d4e2b98f4519391785d68e99e"><span class="id" title="notation">&</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a><a class="idref" href="mathcomp.ssreflect.eqtype.html#11efb36d4e2b98f4519391785d68e99e"><span class="id" title="notation">]</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#28b18e493f7cb0bd8447607bdc385ff8"><span class="id" title="notation">&</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#Injectiveb.f"><span class="id" title="variable">f</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#Injectiveb.f"><span class="id" title="variable">f</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#y"><span class="id" title="variable">y</span></a>)<br/> + (<a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#4b80c70cdb231351c5e129ba61f7f956"><span class="id" title="notation">~~</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#dinjectiveb"><span class="id" title="definition">dinjectiveb</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#D"><span class="id" title="variable">D</span></a>).<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="dinjectiveP"><span class="id" title="lemma">dinjectiveP</span></a> <span class="id" title="var">D</span> : <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#reflect"><span class="id" title="abbreviation">reflect</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#2bba53854f326a714d377124cccec593"><span class="id" title="notation">{</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#2bba53854f326a714d377124cccec593"><span class="id" title="notation">in</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#D"><span class="id" title="variable">D</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#2bba53854f326a714d377124cccec593"><span class="id" title="notation">&,</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrfun.html#injective"><span class="id" title="definition">injective</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#Injectiveb.f"><span class="id" title="variable">f</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#2bba53854f326a714d377124cccec593"><span class="id" title="notation">}</span></a> (<a class="idref" href="mathcomp.ssreflect.fintype.html#dinjectiveb"><span class="id" title="definition">dinjectiveb</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#D"><span class="id" title="variable">D</span></a>).<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="injectivePn"><span class="id" title="lemma">injectivePn</span></a> :<br/> + <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#reflect"><span class="id" title="abbreviation">reflect</span></a> (<a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#84eb6d2849dbf3581b1c0c05add5f2d8"><span class="id" title="notation">∃</span></a> <span class="id" title="var">x</span><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#84eb6d2849dbf3581b1c0c05add5f2d8"><span class="id" title="notation">,</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#28b18e493f7cb0bd8447607bdc385ff8"><span class="id" title="notation">exists2</span></a> <span class="id" title="var">y</span><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#28b18e493f7cb0bd8447607bdc385ff8"><span class="id" title="notation">,</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a> <a class="idref" href="mathcomp.ssreflect.eqtype.html#b1eeadc2feabc7422252baa895418c7b"><span class="id" title="notation">!=</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#y"><span class="id" title="variable">y</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#28b18e493f7cb0bd8447607bdc385ff8"><span class="id" title="notation">&</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#Injectiveb.f"><span class="id" title="variable">f</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#Injectiveb.f"><span class="id" title="variable">f</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#y"><span class="id" title="variable">y</span></a>) (<a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#4b80c70cdb231351c5e129ba61f7f956"><span class="id" title="notation">~~</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#injectiveb"><span class="id" title="definition">injectiveb</span></a>).<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="injectiveP"><span class="id" title="lemma">injectiveP</span></a> : <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#reflect"><span class="id" title="abbreviation">reflect</span></a> (<a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrfun.html#injective"><span class="id" title="definition">injective</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#Injectiveb.f"><span class="id" title="variable">f</span></a>) <a class="idref" href="mathcomp.ssreflect.fintype.html#injectiveb"><span class="id" title="definition">injectiveb</span></a>.<br/> + +<br/> +<span class="id" title="keyword">End</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#Injectiveb"><span class="id" title="section">Injectiveb</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Definition</span> <a name="image_mem"><span class="id" title="definition">image_mem</span></a> <span class="id" title="var">T</span> <span class="id" title="var">T'</span> <span class="id" title="var">f</span> <span class="id" title="var">mA</span> : <a class="idref" href="mathcomp.ssreflect.seq.html#seq"><span class="id" title="abbreviation">seq</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#T'"><span class="id" title="variable">T'</span></a> := <a class="idref" href="mathcomp.ssreflect.seq.html#map"><span class="id" title="definition">map</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#f"><span class="id" title="variable">f</span></a> (@<a class="idref" href="mathcomp.ssreflect.fintype.html#enum_mem"><span class="id" title="definition">enum_mem</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#T"><span class="id" title="variable">T</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#mA"><span class="id" title="variable">mA</span></a>).<br/> +<span class="id" title="keyword">Notation</span> <a name="image"><span class="id" title="abbreviation">image</span></a> <span class="id" title="var">f</span> <span class="id" title="var">A</span> := (<a class="idref" href="mathcomp.ssreflect.fintype.html#image_mem"><span class="id" title="definition">image_mem</span></a> <span class="id" title="var">f</span> (<a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#mem"><span class="id" title="definition">mem</span></a> <span class="id" title="var">A</span>)).<br/> +<span class="id" title="keyword">Notation</span> <a name="fb029fd23b6fc39e014fe7658d797041"><span class="id" title="notation">"</span></a>[ 'seq' F | x 'in' A ]" := (<a class="idref" href="mathcomp.ssreflect.fintype.html#image"><span class="id" title="abbreviation">image</span></a> (<span class="id" title="keyword">fun</span> <span class="id" title="var">x</span> ⇒ <span class="id" title="var">F</span>) <span class="id" title="var">A</span>)<br/> + (<span class="id" title="tactic">at</span> <span class="id" title="keyword">level</span> 0, <span class="id" title="var">F</span> <span class="id" title="tactic">at</span> <span class="id" title="keyword">level</span> 99, <span class="id" title="var">x</span> <span class="id" title="var">ident</span>,<br/> + <span class="id" title="var">format</span> "'[hv' [ 'seq' F '/ ' | x 'in' A ] ']'") : <span class="id" title="var">seq_scope</span>.<br/> +<span class="id" title="keyword">Notation</span> <a name="3bba399f4ea3efd8bb259525ddd756c7"><span class="id" title="notation">"</span></a>[ 'seq' F | x : T 'in' A ]" := (<a class="idref" href="mathcomp.ssreflect.fintype.html#image"><span class="id" title="abbreviation">image</span></a> (<span class="id" title="keyword">fun</span> <span class="id" title="var">x</span> : <span class="id" title="var">T</span> ⇒ <span class="id" title="var">F</span>) <span class="id" title="var">A</span>)<br/> + (<span class="id" title="tactic">at</span> <span class="id" title="keyword">level</span> 0, <span class="id" title="var">F</span> <span class="id" title="tactic">at</span> <span class="id" title="keyword">level</span> 99, <span class="id" title="var">x</span> <span class="id" title="var">ident</span>, <span class="id" title="var">only</span> <span class="id" title="var">parsing</span>) : <span class="id" title="var">seq_scope</span>.<br/> +<span class="id" title="keyword">Notation</span> <a name="76a709b85ab118a35d217f357d4e8877"><span class="id" title="notation">"</span></a>[ 'seq' F | x : T ]" :=<br/> + <a class="idref" href="mathcomp.ssreflect.fintype.html#3bba399f4ea3efd8bb259525ddd756c7"><span class="id" title="notation">[</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#3bba399f4ea3efd8bb259525ddd756c7"><span class="id" title="notation">seq</span></a> <span class="id" title="var">F</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#3bba399f4ea3efd8bb259525ddd756c7"><span class="id" title="notation">|</span></a> <span class="id" title="var">x</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#3bba399f4ea3efd8bb259525ddd756c7"><span class="id" title="notation">:</span></a> <span class="id" title="var">T</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#3bba399f4ea3efd8bb259525ddd756c7"><span class="id" title="notation">in</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#sort_of_simpl_pred"><span class="id" title="definition">sort_of_simpl_pred</span></a> (@<a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#pred_of_argType"><span class="id" title="definition">pred_of_argType</span></a> <span class="id" title="var">T</span>)<a class="idref" href="mathcomp.ssreflect.fintype.html#3bba399f4ea3efd8bb259525ddd756c7"><span class="id" title="notation">]</span></a><br/> + (<span class="id" title="tactic">at</span> <span class="id" title="keyword">level</span> 0, <span class="id" title="var">F</span> <span class="id" title="tactic">at</span> <span class="id" title="keyword">level</span> 99, <span class="id" title="var">x</span> <span class="id" title="var">ident</span>,<br/> + <span class="id" title="var">format</span> "'[hv' [ 'seq' F '/ ' | x : T ] ']'") : <span class="id" title="var">seq_scope</span>.<br/> +<span class="id" title="keyword">Notation</span> <a name="af0e5103cecbb63b8f9afd0b7235bdcf"><span class="id" title="notation">"</span></a>[ 'seq' F , x ]" := <a class="idref" href="mathcomp.ssreflect.fintype.html#76a709b85ab118a35d217f357d4e8877"><span class="id" title="notation">[</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#76a709b85ab118a35d217f357d4e8877"><span class="id" title="notation">seq</span></a> <span class="id" title="var">F</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#76a709b85ab118a35d217f357d4e8877"><span class="id" title="notation">|</span></a> <span class="id" title="var">x</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#76a709b85ab118a35d217f357d4e8877"><span class="id" title="notation">:</span></a> <span class="id" title="var">_</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#76a709b85ab118a35d217f357d4e8877"><span class="id" title="notation">]</span></a><br/> + (<span class="id" title="tactic">at</span> <span class="id" title="keyword">level</span> 0, <span class="id" title="var">F</span> <span class="id" title="tactic">at</span> <span class="id" title="keyword">level</span> 99, <span class="id" title="var">x</span> <span class="id" title="var">ident</span>, <span class="id" title="var">only</span> <span class="id" title="var">parsing</span>) : <span class="id" title="var">seq_scope</span>.<br/> + +<br/> +<span class="id" title="keyword">Definition</span> <a name="codom"><span class="id" title="definition">codom</span></a> <span class="id" title="var">T</span> <span class="id" title="var">T'</span> <span class="id" title="var">f</span> := @<a class="idref" href="mathcomp.ssreflect.fintype.html#image_mem"><span class="id" title="definition">image_mem</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#T"><span class="id" title="variable">T</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#T'"><span class="id" title="variable">T'</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#f"><span class="id" title="variable">f</span></a> (<a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#mem"><span class="id" title="definition">mem</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#T"><span class="id" title="variable">T</span></a>).<br/> + +<br/> +<span class="id" title="keyword">Section</span> <a name="Image"><span class="id" title="section">Image</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Variable</span> <a name="Image.T"><span class="id" title="variable">T</span></a> : <a class="idref" href="mathcomp.ssreflect.fintype.html#finType"><span class="id" title="abbreviation">finType</span></a>.<br/> +<span class="id" title="keyword">Implicit</span> <span class="id" title="keyword">Type</span> <span class="id" title="var">A</span> : <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#pred"><span class="id" title="definition">pred</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#Image.T"><span class="id" title="variable">T</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Section</span> <a name="Image.SizeImage"><span class="id" title="section">SizeImage</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Variables</span> (<a name="Image.SizeImage.T'"><span class="id" title="variable">T'</span></a> : <span class="id" title="keyword">Type</span>) (<a name="Image.SizeImage.f"><span class="id" title="variable">f</span></a> : <a class="idref" href="mathcomp.ssreflect.fintype.html#Image.T"><span class="id" title="variable">T</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#T'"><span class="id" title="variable">T'</span></a>).<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="size_image"><span class="id" title="lemma">size_image</span></a> <span class="id" title="var">A</span> : <a class="idref" href="mathcomp.ssreflect.seq.html#size"><span class="id" title="definition">size</span></a> (<a class="idref" href="mathcomp.ssreflect.fintype.html#image"><span class="id" title="abbreviation">image</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#Image.SizeImage.f"><span class="id" title="variable">f</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a>) <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">#|</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">|</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="size_codom"><span class="id" title="lemma">size_codom</span></a> : <a class="idref" href="mathcomp.ssreflect.seq.html#size"><span class="id" title="definition">size</span></a> (<a class="idref" href="mathcomp.ssreflect.fintype.html#codom"><span class="id" title="definition">codom</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#Image.SizeImage.f"><span class="id" title="variable">f</span></a>) <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">#|</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#Image.T"><span class="id" title="variable">T</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">|</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="codomE"><span class="id" title="lemma">codomE</span></a> : <a class="idref" href="mathcomp.ssreflect.fintype.html#codom"><span class="id" title="definition">codom</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#Image.SizeImage.f"><span class="id" title="variable">f</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.ssreflect.seq.html#map"><span class="id" title="definition">map</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#Image.SizeImage.f"><span class="id" title="variable">f</span></a> (<a class="idref" href="mathcomp.ssreflect.fintype.html#enum"><span class="id" title="abbreviation">enum</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#Image.T"><span class="id" title="variable">T</span></a>).<br/> + +<br/> +<span class="id" title="keyword">End</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#Image.SizeImage"><span class="id" title="section">SizeImage</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Variables</span> (<a name="Image.T'"><span class="id" title="variable">T'</span></a> : <a class="idref" href="mathcomp.ssreflect.eqtype.html#Equality.Exports.eqType"><span class="id" title="abbreviation">eqType</span></a>) (<a name="Image.f"><span class="id" title="variable">f</span></a> : <a class="idref" href="mathcomp.ssreflect.fintype.html#Image.T"><span class="id" title="variable">T</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#T'"><span class="id" title="variable">T'</span></a>).<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="imageP"><span class="id" title="lemma">imageP</span></a> <span class="id" title="var">A</span> <span class="id" title="var">y</span> : <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#reflect"><span class="id" title="abbreviation">reflect</span></a> (<a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#28b18e493f7cb0bd8447607bdc385ff8"><span class="id" title="notation">exists2</span></a> <span class="id" title="var">x</span><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#28b18e493f7cb0bd8447607bdc385ff8"><span class="id" title="notation">,</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#46c9e8232fa09401e24f1934bb65029f"><span class="id" title="notation">\</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#46c9e8232fa09401e24f1934bb65029f"><span class="id" title="notation">in</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#28b18e493f7cb0bd8447607bdc385ff8"><span class="id" title="notation">&</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#y"><span class="id" title="variable">y</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#Image.f"><span class="id" title="variable">f</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a>) (<a class="idref" href="mathcomp.ssreflect.fintype.html#y"><span class="id" title="variable">y</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#46c9e8232fa09401e24f1934bb65029f"><span class="id" title="notation">\</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#46c9e8232fa09401e24f1934bb65029f"><span class="id" title="notation">in</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#image"><span class="id" title="abbreviation">image</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#Image.f"><span class="id" title="variable">f</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a>).<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="codomP"><span class="id" title="lemma">codomP</span></a> <span class="id" title="var">y</span> : <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#reflect"><span class="id" title="abbreviation">reflect</span></a> (<a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#84eb6d2849dbf3581b1c0c05add5f2d8"><span class="id" title="notation">∃</span></a> <span class="id" title="var">x</span><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#84eb6d2849dbf3581b1c0c05add5f2d8"><span class="id" title="notation">,</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#y"><span class="id" title="variable">y</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#Image.f"><span class="id" title="variable">f</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a>) (<a class="idref" href="mathcomp.ssreflect.fintype.html#y"><span class="id" title="variable">y</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#46c9e8232fa09401e24f1934bb65029f"><span class="id" title="notation">\</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#46c9e8232fa09401e24f1934bb65029f"><span class="id" title="notation">in</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#codom"><span class="id" title="definition">codom</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#Image.f"><span class="id" title="variable">f</span></a>).<br/> + +<br/> +<span class="id" title="keyword">Remark</span> <a name="iinv_proof"><span class="id" title="lemma">iinv_proof</span></a> <span class="id" title="var">A</span> <span class="id" title="var">y</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#y"><span class="id" title="variable">y</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#46c9e8232fa09401e24f1934bb65029f"><span class="id" title="notation">\</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#46c9e8232fa09401e24f1934bb65029f"><span class="id" title="notation">in</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#image"><span class="id" title="abbreviation">image</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#Image.f"><span class="id" title="variable">f</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Specif.html#f5350ad671d3ce0e1e463e298917cf6e"><span class="id" title="notation">{</span></a><span class="id" title="var">x</span> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Specif.html#f5350ad671d3ce0e1e463e298917cf6e"><span class="id" title="notation">|</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#46c9e8232fa09401e24f1934bb65029f"><span class="id" title="notation">\</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#46c9e8232fa09401e24f1934bb65029f"><span class="id" title="notation">in</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Specif.html#f5350ad671d3ce0e1e463e298917cf6e"><span class="id" title="notation">&</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#Image.f"><span class="id" title="variable">f</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#y"><span class="id" title="variable">y</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Specif.html#f5350ad671d3ce0e1e463e298917cf6e"><span class="id" title="notation">}</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Definition</span> <a name="iinv"><span class="id" title="definition">iinv</span></a> <span class="id" title="var">A</span> <span class="id" title="var">y</span> <span class="id" title="var">fAy</span> := <a class="idref" href="mathcomp.ssreflect.eqtype.html#s2val"><span class="id" title="definition">s2val</span></a> (@<a class="idref" href="mathcomp.ssreflect.fintype.html#iinv_proof"><span class="id" title="lemma">iinv_proof</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#y"><span class="id" title="variable">y</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#fAy"><span class="id" title="variable">fAy</span></a>).<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="f_iinv"><span class="id" title="lemma">f_iinv</span></a> <span class="id" title="var">A</span> <span class="id" title="var">y</span> <span class="id" title="var">fAy</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#Image.f"><span class="id" title="variable">f</span></a> (@<a class="idref" href="mathcomp.ssreflect.fintype.html#iinv"><span class="id" title="definition">iinv</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#y"><span class="id" title="variable">y</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#fAy"><span class="id" title="variable">fAy</span></a>) <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#y"><span class="id" title="variable">y</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="mem_iinv"><span class="id" title="lemma">mem_iinv</span></a> <span class="id" title="var">A</span> <span class="id" title="var">y</span> <span class="id" title="var">fAy</span> : @<a class="idref" href="mathcomp.ssreflect.fintype.html#iinv"><span class="id" title="definition">iinv</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#y"><span class="id" title="variable">y</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#fAy"><span class="id" title="variable">fAy</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#46c9e8232fa09401e24f1934bb65029f"><span class="id" title="notation">\</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#46c9e8232fa09401e24f1934bb65029f"><span class="id" title="notation">in</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="in_iinv_f"><span class="id" title="lemma">in_iinv_f</span></a> <span class="id" title="var">A</span> : <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#2bba53854f326a714d377124cccec593"><span class="id" title="notation">{</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#2bba53854f326a714d377124cccec593"><span class="id" title="notation">in</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#2bba53854f326a714d377124cccec593"><span class="id" title="notation">&,</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrfun.html#injective"><span class="id" title="definition">injective</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#Image.f"><span class="id" title="variable">f</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#2bba53854f326a714d377124cccec593"><span class="id" title="notation">}</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a><br/> + <span class="id" title="keyword">∀</span> <span class="id" title="var">x</span> <span class="id" title="var">fAfx</span>, <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#46c9e8232fa09401e24f1934bb65029f"><span class="id" title="notation">\</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#46c9e8232fa09401e24f1934bb65029f"><span class="id" title="notation">in</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> @<a class="idref" href="mathcomp.ssreflect.fintype.html#iinv"><span class="id" title="definition">iinv</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a> (<a class="idref" href="mathcomp.ssreflect.fintype.html#Image.f"><span class="id" title="variable">f</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a>) <a class="idref" href="mathcomp.ssreflect.fintype.html#fAfx"><span class="id" title="variable">fAfx</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="preim_iinv"><span class="id" title="lemma">preim_iinv</span></a> <span class="id" title="var">A</span> <span class="id" title="var">B</span> <span class="id" title="var">y</span> <span class="id" title="var">fAy</span> : <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#preim"><span class="id" title="definition">preim</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#Image.f"><span class="id" title="variable">f</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#B"><span class="id" title="variable">B</span></a> (@<a class="idref" href="mathcomp.ssreflect.fintype.html#iinv"><span class="id" title="definition">iinv</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#y"><span class="id" title="variable">y</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#fAy"><span class="id" title="variable">fAy</span></a>) <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#B"><span class="id" title="variable">B</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#y"><span class="id" title="variable">y</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="image_f"><span class="id" title="lemma">image_f</span></a> <span class="id" title="var">A</span> <span class="id" title="var">x</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#46c9e8232fa09401e24f1934bb65029f"><span class="id" title="notation">\</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#46c9e8232fa09401e24f1934bb65029f"><span class="id" title="notation">in</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#Image.f"><span class="id" title="variable">f</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#46c9e8232fa09401e24f1934bb65029f"><span class="id" title="notation">\</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#46c9e8232fa09401e24f1934bb65029f"><span class="id" title="notation">in</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#image"><span class="id" title="abbreviation">image</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#Image.f"><span class="id" title="variable">f</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="codom_f"><span class="id" title="lemma">codom_f</span></a> <span class="id" title="var">x</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#Image.f"><span class="id" title="variable">f</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#46c9e8232fa09401e24f1934bb65029f"><span class="id" title="notation">\</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#46c9e8232fa09401e24f1934bb65029f"><span class="id" title="notation">in</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#codom"><span class="id" title="definition">codom</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#Image.f"><span class="id" title="variable">f</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="image_codom"><span class="id" title="lemma">image_codom</span></a> <span class="id" title="var">A</span> : <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#53295d8f18390300c5a24f66e0bcda98"><span class="id" title="notation">{</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#53295d8f18390300c5a24f66e0bcda98"><span class="id" title="notation">subset</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#image"><span class="id" title="abbreviation">image</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#Image.f"><span class="id" title="variable">f</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#53295d8f18390300c5a24f66e0bcda98"><span class="id" title="notation">≤</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#codom"><span class="id" title="definition">codom</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#Image.f"><span class="id" title="variable">f</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#53295d8f18390300c5a24f66e0bcda98"><span class="id" title="notation">}</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="image_pred0"><span class="id" title="lemma">image_pred0</span></a> : <a class="idref" href="mathcomp.ssreflect.fintype.html#image"><span class="id" title="abbreviation">image</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#Image.f"><span class="id" title="variable">f</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#pred0"><span class="id" title="definition">pred0</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#20bf07099d6d8cf369383b22fd37862e"><span class="id" title="notation">=</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#20bf07099d6d8cf369383b22fd37862e"><span class="id" title="notation">i</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#pred0"><span class="id" title="definition">pred0</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Section</span> <a name="Image.Injective"><span class="id" title="section">Injective</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Hypothesis</span> <a name="Image.Injective.injf"><span class="id" title="variable">injf</span></a> : <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrfun.html#injective"><span class="id" title="definition">injective</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#Image.f"><span class="id" title="variable">f</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="mem_image"><span class="id" title="lemma">mem_image</span></a> <span class="id" title="var">A</span> <span class="id" title="var">x</span> : <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">(</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#Image.f"><span class="id" title="variable">f</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#46c9e8232fa09401e24f1934bb65029f"><span class="id" title="notation">\</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#46c9e8232fa09401e24f1934bb65029f"><span class="id" title="notation">in</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#image"><span class="id" title="abbreviation">image</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#Image.f"><span class="id" title="variable">f</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">)</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">(</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#46c9e8232fa09401e24f1934bb65029f"><span class="id" title="notation">\</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#46c9e8232fa09401e24f1934bb65029f"><span class="id" title="notation">in</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">)</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="pre_image"><span class="id" title="lemma">pre_image</span></a> <span class="id" title="var">A</span> : <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#3270414d0a8e3a8c7d7f93021a19fb70"><span class="id" title="notation">[</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#3270414d0a8e3a8c7d7f93021a19fb70"><span class="id" title="notation">preim</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#Image.f"><span class="id" title="variable">f</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#3270414d0a8e3a8c7d7f93021a19fb70"><span class="id" title="notation">of</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#image"><span class="id" title="abbreviation">image</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#Image.f"><span class="id" title="variable">f</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#3270414d0a8e3a8c7d7f93021a19fb70"><span class="id" title="notation">]</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#20bf07099d6d8cf369383b22fd37862e"><span class="id" title="notation">=</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#20bf07099d6d8cf369383b22fd37862e"><span class="id" title="notation">i</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="image_iinv"><span class="id" title="lemma">image_iinv</span></a> <span class="id" title="var">A</span> <span class="id" title="var">y</span> (<span class="id" title="var">fTy</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#y"><span class="id" title="variable">y</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#46c9e8232fa09401e24f1934bb65029f"><span class="id" title="notation">\</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#46c9e8232fa09401e24f1934bb65029f"><span class="id" title="notation">in</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#codom"><span class="id" title="definition">codom</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#Image.f"><span class="id" title="variable">f</span></a>) :<br/> + <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">(</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#y"><span class="id" title="variable">y</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#46c9e8232fa09401e24f1934bb65029f"><span class="id" title="notation">\</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#46c9e8232fa09401e24f1934bb65029f"><span class="id" title="notation">in</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#image"><span class="id" title="abbreviation">image</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#Image.f"><span class="id" title="variable">f</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">)</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">(</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#iinv"><span class="id" title="definition">iinv</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#fTy"><span class="id" title="variable">fTy</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#46c9e8232fa09401e24f1934bb65029f"><span class="id" title="notation">\</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#46c9e8232fa09401e24f1934bb65029f"><span class="id" title="notation">in</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">)</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="iinv_f"><span class="id" title="lemma">iinv_f</span></a> <span class="id" title="var">x</span> <span class="id" title="var">fTfx</span> : @<a class="idref" href="mathcomp.ssreflect.fintype.html#iinv"><span class="id" title="definition">iinv</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#Image.T"><span class="id" title="variable">T</span></a> (<a class="idref" href="mathcomp.ssreflect.fintype.html#Image.f"><span class="id" title="variable">f</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a>) <a class="idref" href="mathcomp.ssreflect.fintype.html#fTfx"><span class="id" title="variable">fTfx</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="image_pre"><span class="id" title="lemma">image_pre</span></a> (<span class="id" title="var">B</span> : <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#pred"><span class="id" title="definition">pred</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#Image.T'"><span class="id" title="variable">T'</span></a>) : <a class="idref" href="mathcomp.ssreflect.fintype.html#image"><span class="id" title="abbreviation">image</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#Image.f"><span class="id" title="variable">f</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#3270414d0a8e3a8c7d7f93021a19fb70"><span class="id" title="notation">[</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#3270414d0a8e3a8c7d7f93021a19fb70"><span class="id" title="notation">preim</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#Image.f"><span class="id" title="variable">f</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#3270414d0a8e3a8c7d7f93021a19fb70"><span class="id" title="notation">of</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#B"><span class="id" title="variable">B</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#3270414d0a8e3a8c7d7f93021a19fb70"><span class="id" title="notation">]</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#20bf07099d6d8cf369383b22fd37862e"><span class="id" title="notation">=</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#20bf07099d6d8cf369383b22fd37862e"><span class="id" title="notation">i</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#bc8da799462dbe647b502e63c7d6c405"><span class="id" title="notation">[</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#bc8da799462dbe647b502e63c7d6c405"><span class="id" title="notation">predI</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#B"><span class="id" title="variable">B</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#bc8da799462dbe647b502e63c7d6c405"><span class="id" title="notation">&</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#codom"><span class="id" title="definition">codom</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#Image.f"><span class="id" title="variable">f</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#bc8da799462dbe647b502e63c7d6c405"><span class="id" title="notation">]</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="bij_on_codom"><span class="id" title="lemma">bij_on_codom</span></a> (<span class="id" title="var">x0</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#Image.T"><span class="id" title="variable">T</span></a>) : <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#59b0bfb23a642e2d3d15d13178fc2b18"><span class="id" title="notation">{</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#59b0bfb23a642e2d3d15d13178fc2b18"><span class="id" title="notation">on</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#5f5162cf071341faef72f7a202c2f54c"><span class="id" title="notation">[</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#5f5162cf071341faef72f7a202c2f54c"><span class="id" title="notation">pred</span></a> <span class="id" title="var">y</span> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#5f5162cf071341faef72f7a202c2f54c"><span class="id" title="notation">in</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#codom"><span class="id" title="definition">codom</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#Image.f"><span class="id" title="variable">f</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#5f5162cf071341faef72f7a202c2f54c"><span class="id" title="notation">]</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#59b0bfb23a642e2d3d15d13178fc2b18"><span class="id" title="notation">,</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#59b0bfb23a642e2d3d15d13178fc2b18"><span class="id" title="notation">bijective</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#Image.f"><span class="id" title="variable">f</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#59b0bfb23a642e2d3d15d13178fc2b18"><span class="id" title="notation">}</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="bij_on_image"><span class="id" title="lemma">bij_on_image</span></a> <span class="id" title="var">A</span> (<span class="id" title="var">x0</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#Image.T"><span class="id" title="variable">T</span></a>) : <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#59b0bfb23a642e2d3d15d13178fc2b18"><span class="id" title="notation">{</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#59b0bfb23a642e2d3d15d13178fc2b18"><span class="id" title="notation">on</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#5f5162cf071341faef72f7a202c2f54c"><span class="id" title="notation">[</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#5f5162cf071341faef72f7a202c2f54c"><span class="id" title="notation">pred</span></a> <span class="id" title="var">y</span> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#5f5162cf071341faef72f7a202c2f54c"><span class="id" title="notation">in</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#image"><span class="id" title="abbreviation">image</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#Image.f"><span class="id" title="variable">f</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#5f5162cf071341faef72f7a202c2f54c"><span class="id" title="notation">]</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#59b0bfb23a642e2d3d15d13178fc2b18"><span class="id" title="notation">,</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#59b0bfb23a642e2d3d15d13178fc2b18"><span class="id" title="notation">bijective</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#Image.f"><span class="id" title="variable">f</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#59b0bfb23a642e2d3d15d13178fc2b18"><span class="id" title="notation">}</span></a>.<br/> + +<br/> +<span class="id" title="keyword">End</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#Image.Injective"><span class="id" title="section">Injective</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Fixpoint</span> <a name="preim_seq"><span class="id" title="definition">preim_seq</span></a> <span class="id" title="var">s</span> :=<br/> + <span class="id" title="keyword">if</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#s"><span class="id" title="variable">s</span></a> <span class="id" title="keyword">is</span> <span class="id" title="var">y</span> <a class="idref" href="mathcomp.ssreflect.seq.html#d7fed0909a58e41c49e3ee117361b0a5"><span class="id" title="notation">::</span></a> <span class="id" title="var">s'</span> <span class="id" title="keyword">then</span><br/> + (<span class="id" title="keyword">if</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#pick"><span class="id" title="definition">pick</span></a> (<a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#preim"><span class="id" title="definition">preim</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#Image.f"><span class="id" title="variable">f</span></a> (<a class="idref" href="mathcomp.ssreflect.eqtype.html#pred1"><span class="id" title="definition">pred1</span></a> <span class="id" title="var">y</span>)) <span class="id" title="keyword">is</span> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Datatypes.html#Some"><span class="id" title="constructor">Some</span></a> <span class="id" title="var">x</span> <span class="id" title="keyword">then</span> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Datatypes.html#cons"><span class="id" title="constructor">cons</span></a> <span class="id" title="var">x</span> <span class="id" title="keyword">else</span> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrfun.html#id"><span class="id" title="abbreviation">id</span></a>) (<a class="idref" href="mathcomp.ssreflect.fintype.html#preim_seq"><span class="id" title="definition">preim_seq</span></a> <span class="id" title="var">s'</span>)<br/> + <span class="id" title="keyword">else</span> <a class="idref" href="mathcomp.ssreflect.seq.html#747e2b5d553b2dfe76e024e1f8fb39d1"><span class="id" title="notation">[::]</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="map_preim"><span class="id" title="lemma">map_preim</span></a> (<span class="id" title="var">s</span> : <a class="idref" href="mathcomp.ssreflect.seq.html#seq"><span class="id" title="abbreviation">seq</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#Image.T'"><span class="id" title="variable">T'</span></a>) : <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#53295d8f18390300c5a24f66e0bcda98"><span class="id" title="notation">{</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#53295d8f18390300c5a24f66e0bcda98"><span class="id" title="notation">subset</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#s"><span class="id" title="variable">s</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#53295d8f18390300c5a24f66e0bcda98"><span class="id" title="notation">≤</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#codom"><span class="id" title="definition">codom</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#Image.f"><span class="id" title="variable">f</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#53295d8f18390300c5a24f66e0bcda98"><span class="id" title="notation">}</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> <a class="idref" href="mathcomp.ssreflect.seq.html#map"><span class="id" title="definition">map</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#Image.f"><span class="id" title="variable">f</span></a> (<a class="idref" href="mathcomp.ssreflect.fintype.html#preim_seq"><span class="id" title="definition">preim_seq</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#s"><span class="id" title="variable">s</span></a>) <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#s"><span class="id" title="variable">s</span></a>.<br/> + +<br/> +<span class="id" title="keyword">End</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#Image"><span class="id" title="section">Image</span></a>.<br/> + +<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="flatten_imageP"><span class="id" title="lemma">flatten_imageP</span></a> (<span class="id" title="var">aT</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#finType"><span class="id" title="abbreviation">finType</span></a>) (<span class="id" title="var">rT</span> : <a class="idref" href="mathcomp.ssreflect.eqtype.html#Equality.Exports.eqType"><span class="id" title="abbreviation">eqType</span></a>) <span class="id" title="var">A</span> (<span class="id" title="var">P</span> : <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#pred"><span class="id" title="definition">pred</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#aT"><span class="id" title="variable">aT</span></a>) (<span class="id" title="var">y</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#rT"><span class="id" title="variable">rT</span></a>) :<br/> + <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#reflect"><span class="id" title="abbreviation">reflect</span></a> (<a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#28b18e493f7cb0bd8447607bdc385ff8"><span class="id" title="notation">exists2</span></a> <span class="id" title="var">x</span><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#28b18e493f7cb0bd8447607bdc385ff8"><span class="id" title="notation">,</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#46c9e8232fa09401e24f1934bb65029f"><span class="id" title="notation">\</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#46c9e8232fa09401e24f1934bb65029f"><span class="id" title="notation">in</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#P"><span class="id" title="variable">P</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#28b18e493f7cb0bd8447607bdc385ff8"><span class="id" title="notation">&</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#y"><span class="id" title="variable">y</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#46c9e8232fa09401e24f1934bb65029f"><span class="id" title="notation">\</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#46c9e8232fa09401e24f1934bb65029f"><span class="id" title="notation">in</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a>) (<a class="idref" href="mathcomp.ssreflect.fintype.html#y"><span class="id" title="variable">y</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#46c9e8232fa09401e24f1934bb65029f"><span class="id" title="notation">\</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#46c9e8232fa09401e24f1934bb65029f"><span class="id" title="notation">in</span></a> <a class="idref" href="mathcomp.ssreflect.seq.html#flatten"><span class="id" title="definition">flatten</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#fb029fd23b6fc39e014fe7658d797041"><span class="id" title="notation">[</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#fb029fd23b6fc39e014fe7658d797041"><span class="id" title="notation">seq</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#fb029fd23b6fc39e014fe7658d797041"><span class="id" title="notation">|</span></a> <span class="id" title="var">x</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#fb029fd23b6fc39e014fe7658d797041"><span class="id" title="notation">in</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#P"><span class="id" title="variable">P</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#fb029fd23b6fc39e014fe7658d797041"><span class="id" title="notation">]</span></a>).<br/> + +<br/> +<span class="id" title="keyword">Section</span> <a name="CardFunImage"><span class="id" title="section">CardFunImage</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Variables</span> (<a name="CardFunImage.T"><span class="id" title="variable">T</span></a> <a name="CardFunImage.T'"><span class="id" title="variable">T'</span></a> : <a class="idref" href="mathcomp.ssreflect.fintype.html#finType"><span class="id" title="abbreviation">finType</span></a>) (<a name="CardFunImage.f"><span class="id" title="variable">f</span></a> : <a class="idref" href="mathcomp.ssreflect.fintype.html#T"><span class="id" title="variable">T</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#T'"><span class="id" title="variable">T'</span></a>).<br/> +<span class="id" title="keyword">Implicit</span> <span class="id" title="keyword">Type</span> <span class="id" title="var">A</span> : <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#pred"><span class="id" title="definition">pred</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#CardFunImage.T"><span class="id" title="variable">T</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="leq_image_card"><span class="id" title="lemma">leq_image_card</span></a> <span class="id" title="var">A</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">#|</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#image"><span class="id" title="abbreviation">image</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#CardFunImage.f"><span class="id" title="variable">f</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">|</span></a> <a class="idref" href="mathcomp.ssreflect.ssrnat.html#9b077c369e19739ef880736ba34623ff"><span class="id" title="notation">≤</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">#|</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">|</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="card_in_image"><span class="id" title="lemma">card_in_image</span></a> <span class="id" title="var">A</span> : <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#2bba53854f326a714d377124cccec593"><span class="id" title="notation">{</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#2bba53854f326a714d377124cccec593"><span class="id" title="notation">in</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#2bba53854f326a714d377124cccec593"><span class="id" title="notation">&,</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrfun.html#injective"><span class="id" title="definition">injective</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#CardFunImage.f"><span class="id" title="variable">f</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#2bba53854f326a714d377124cccec593"><span class="id" title="notation">}</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">#|</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#image"><span class="id" title="abbreviation">image</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#CardFunImage.f"><span class="id" title="variable">f</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">|</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">#|</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">|</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="image_injP"><span class="id" title="lemma">image_injP</span></a> <span class="id" title="var">A</span> : <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#reflect"><span class="id" title="abbreviation">reflect</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#2bba53854f326a714d377124cccec593"><span class="id" title="notation">{</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#2bba53854f326a714d377124cccec593"><span class="id" title="notation">in</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#2bba53854f326a714d377124cccec593"><span class="id" title="notation">&,</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrfun.html#injective"><span class="id" title="definition">injective</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#CardFunImage.f"><span class="id" title="variable">f</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#2bba53854f326a714d377124cccec593"><span class="id" title="notation">}</span></a> (<a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">#|</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#image"><span class="id" title="abbreviation">image</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#CardFunImage.f"><span class="id" title="variable">f</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">|</span></a> <a class="idref" href="mathcomp.ssreflect.eqtype.html#17d28d004d0863cb022d4ce832ddaaae"><span class="id" title="notation">==</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">#|</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">|</span></a>).<br/> + +<br/> +<span class="id" title="keyword">Hypothesis</span> <a name="CardFunImage.injf"><span class="id" title="variable">injf</span></a> : <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrfun.html#injective"><span class="id" title="definition">injective</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#CardFunImage.f"><span class="id" title="variable">f</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="card_image"><span class="id" title="lemma">card_image</span></a> <span class="id" title="var">A</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">#|</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#image"><span class="id" title="abbreviation">image</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#CardFunImage.f"><span class="id" title="variable">f</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">|</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">#|</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">|</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="card_codom"><span class="id" title="lemma">card_codom</span></a> : <a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">#|</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#codom"><span class="id" title="definition">codom</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#CardFunImage.f"><span class="id" title="variable">f</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">|</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">#|</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#CardFunImage.T"><span class="id" title="variable">T</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">|</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="card_preim"><span class="id" title="lemma">card_preim</span></a> (<span class="id" title="var">B</span> : <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#pred"><span class="id" title="definition">pred</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#CardFunImage.T'"><span class="id" title="variable">T'</span></a>) : <a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">#|</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#3270414d0a8e3a8c7d7f93021a19fb70"><span class="id" title="notation">[</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#3270414d0a8e3a8c7d7f93021a19fb70"><span class="id" title="notation">preim</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#CardFunImage.f"><span class="id" title="variable">f</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#3270414d0a8e3a8c7d7f93021a19fb70"><span class="id" title="notation">of</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#B"><span class="id" title="variable">B</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#3270414d0a8e3a8c7d7f93021a19fb70"><span class="id" title="notation">]</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">|</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">#|</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#bc8da799462dbe647b502e63c7d6c405"><span class="id" title="notation">[</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#bc8da799462dbe647b502e63c7d6c405"><span class="id" title="notation">predI</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#codom"><span class="id" title="definition">codom</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#CardFunImage.f"><span class="id" title="variable">f</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#bc8da799462dbe647b502e63c7d6c405"><span class="id" title="notation">&</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#B"><span class="id" title="variable">B</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#bc8da799462dbe647b502e63c7d6c405"><span class="id" title="notation">]</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">|</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Hypothesis</span> <a name="CardFunImage.card_range"><span class="id" title="variable">card_range</span></a> : <a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">#|</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#CardFunImage.T"><span class="id" title="variable">T</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">|</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">#|</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#CardFunImage.T'"><span class="id" title="variable">T'</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">|</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="inj_card_onto"><span class="id" title="lemma">inj_card_onto</span></a> <span class="id" title="var">y</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#y"><span class="id" title="variable">y</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#46c9e8232fa09401e24f1934bb65029f"><span class="id" title="notation">\</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#46c9e8232fa09401e24f1934bb65029f"><span class="id" title="notation">in</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#codom"><span class="id" title="definition">codom</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#CardFunImage.f"><span class="id" title="variable">f</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="inj_card_bij"><span class="id" title="lemma">inj_card_bij</span></a> : <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrfun.html#bijective"><span class="id" title="inductive">bijective</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#CardFunImage.f"><span class="id" title="variable">f</span></a>.<br/> + +<br/> +<span class="id" title="keyword">End</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#CardFunImage"><span class="id" title="section">CardFunImage</span></a>.<br/> + +<br/> + +<br/> +<span class="id" title="keyword">Section</span> <a name="FinCancel"><span class="id" title="section">FinCancel</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Variables</span> (<a name="FinCancel.T"><span class="id" title="variable">T</span></a> : <a class="idref" href="mathcomp.ssreflect.fintype.html#finType"><span class="id" title="abbreviation">finType</span></a>) (<a name="FinCancel.f"><span class="id" title="variable">f</span></a> <a name="FinCancel.g"><span class="id" title="variable">g</span></a> : <a class="idref" href="mathcomp.ssreflect.fintype.html#T"><span class="id" title="variable">T</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#T"><span class="id" title="variable">T</span></a>).<br/> + +<br/> +<span class="id" title="keyword">Section</span> <a name="FinCancel.Inv"><span class="id" title="section">Inv</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Hypothesis</span> <a name="FinCancel.Inv.injf"><span class="id" title="variable">injf</span></a> : <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrfun.html#injective"><span class="id" title="definition">injective</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#FinCancel.f"><span class="id" title="variable">f</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="injF_onto"><span class="id" title="lemma">injF_onto</span></a> <span class="id" title="var">y</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#y"><span class="id" title="variable">y</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#46c9e8232fa09401e24f1934bb65029f"><span class="id" title="notation">\</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#46c9e8232fa09401e24f1934bb65029f"><span class="id" title="notation">in</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#codom"><span class="id" title="definition">codom</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#FinCancel.f"><span class="id" title="variable">f</span></a>. <br/> +<span class="id" title="keyword">Definition</span> <a name="invF"><span class="id" title="definition">invF</span></a> <span class="id" title="var">y</span> := <a class="idref" href="mathcomp.ssreflect.fintype.html#iinv"><span class="id" title="definition">iinv</span></a> (<a class="idref" href="mathcomp.ssreflect.fintype.html#injF_onto"><span class="id" title="lemma">injF_onto</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#y"><span class="id" title="variable">y</span></a>).<br/> +<span class="id" title="keyword">Lemma</span> <a name="invF_f"><span class="id" title="lemma">invF_f</span></a> : <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrfun.html#cancel"><span class="id" title="definition">cancel</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#FinCancel.f"><span class="id" title="variable">f</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#invF"><span class="id" title="definition">invF</span></a>. <br/> +<span class="id" title="keyword">Lemma</span> <a name="f_invF"><span class="id" title="lemma">f_invF</span></a> : <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrfun.html#cancel"><span class="id" title="definition">cancel</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#invF"><span class="id" title="definition">invF</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#FinCancel.f"><span class="id" title="variable">f</span></a>. <br/> +<span class="id" title="keyword">Lemma</span> <a name="injF_bij"><span class="id" title="lemma">injF_bij</span></a> : <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrfun.html#bijective"><span class="id" title="inductive">bijective</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#FinCancel.f"><span class="id" title="variable">f</span></a>. <br/> + +<br/> +<span class="id" title="keyword">End</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#FinCancel.Inv"><span class="id" title="section">Inv</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Hypothesis</span> <a name="FinCancel.fK"><span class="id" title="variable">fK</span></a> : <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrfun.html#cancel"><span class="id" title="definition">cancel</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#FinCancel.f"><span class="id" title="variable">f</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#FinCancel.g"><span class="id" title="variable">g</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="canF_sym"><span class="id" title="lemma">canF_sym</span></a> : <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrfun.html#cancel"><span class="id" title="definition">cancel</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#FinCancel.g"><span class="id" title="variable">g</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#FinCancel.f"><span class="id" title="variable">f</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="canF_LR"><span class="id" title="lemma">canF_LR</span></a> <span class="id" title="var">x</span> <span class="id" title="var">y</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#FinCancel.g"><span class="id" title="variable">g</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#y"><span class="id" title="variable">y</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#FinCancel.f"><span class="id" title="variable">f</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#y"><span class="id" title="variable">y</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="canF_RL"><span class="id" title="lemma">canF_RL</span></a> <span class="id" title="var">x</span> <span class="id" title="var">y</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#FinCancel.g"><span class="id" title="variable">g</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#y"><span class="id" title="variable">y</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#FinCancel.f"><span class="id" title="variable">f</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#y"><span class="id" title="variable">y</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="canF_eq"><span class="id" title="lemma">canF_eq</span></a> <span class="id" title="var">x</span> <span class="id" title="var">y</span> : <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">(</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#FinCancel.f"><span class="id" title="variable">f</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a> <a class="idref" href="mathcomp.ssreflect.eqtype.html#17d28d004d0863cb022d4ce832ddaaae"><span class="id" title="notation">==</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#y"><span class="id" title="variable">y</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">)</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">(</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a> <a class="idref" href="mathcomp.ssreflect.eqtype.html#17d28d004d0863cb022d4ce832ddaaae"><span class="id" title="notation">==</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#FinCancel.g"><span class="id" title="variable">g</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#y"><span class="id" title="variable">y</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">)</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="canF_invF"><span class="id" title="lemma">canF_invF</span></a> : <a class="idref" href="mathcomp.ssreflect.fintype.html#FinCancel.g"><span class="id" title="variable">g</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrfun.html#2500d48ed8e862ccfda98a44dff88963"><span class="id" title="notation">=1</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#invF"><span class="id" title="definition">invF</span></a> (<a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrfun.html#can_inj"><span class="id" title="lemma">can_inj</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#FinCancel.fK"><span class="id" title="variable">fK</span></a>).<br/> + +<br/> +<span class="id" title="keyword">End</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#FinCancel"><span class="id" title="section">FinCancel</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Section</span> <a name="EqImage"><span class="id" title="section">EqImage</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Variables</span> (<a name="EqImage.T"><span class="id" title="variable">T</span></a> : <a class="idref" href="mathcomp.ssreflect.fintype.html#finType"><span class="id" title="abbreviation">finType</span></a>) (<a name="EqImage.T'"><span class="id" title="variable">T'</span></a> : <span class="id" title="keyword">Type</span>).<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="eq_image"><span class="id" title="lemma">eq_image</span></a> (<span class="id" title="var">A</span> <span class="id" title="var">B</span> : <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#pred"><span class="id" title="definition">pred</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#EqImage.T"><span class="id" title="variable">T</span></a>) (<span class="id" title="var">f</span> <span class="id" title="var">g</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#EqImage.T"><span class="id" title="variable">T</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#EqImage.T'"><span class="id" title="variable">T'</span></a>) :<br/> + <a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#20bf07099d6d8cf369383b22fd37862e"><span class="id" title="notation">=</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#20bf07099d6d8cf369383b22fd37862e"><span class="id" title="notation">i</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#B"><span class="id" title="variable">B</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#f"><span class="id" title="variable">f</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrfun.html#2500d48ed8e862ccfda98a44dff88963"><span class="id" title="notation">=1</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#g"><span class="id" title="variable">g</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#image"><span class="id" title="abbreviation">image</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#f"><span class="id" title="variable">f</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#image"><span class="id" title="abbreviation">image</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#g"><span class="id" title="variable">g</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#B"><span class="id" title="variable">B</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="eq_codom"><span class="id" title="lemma">eq_codom</span></a> (<span class="id" title="var">f</span> <span class="id" title="var">g</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#EqImage.T"><span class="id" title="variable">T</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#EqImage.T'"><span class="id" title="variable">T'</span></a>) : <a class="idref" href="mathcomp.ssreflect.fintype.html#f"><span class="id" title="variable">f</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrfun.html#2500d48ed8e862ccfda98a44dff88963"><span class="id" title="notation">=1</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#g"><span class="id" title="variable">g</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#codom"><span class="id" title="definition">codom</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#f"><span class="id" title="variable">f</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#codom"><span class="id" title="definition">codom</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#g"><span class="id" title="variable">g</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="eq_invF"><span class="id" title="lemma">eq_invF</span></a> <span class="id" title="var">f</span> <span class="id" title="var">g</span> <span class="id" title="var">injf</span> <span class="id" title="var">injg</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#f"><span class="id" title="variable">f</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrfun.html#2500d48ed8e862ccfda98a44dff88963"><span class="id" title="notation">=1</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#g"><span class="id" title="variable">g</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> @<a class="idref" href="mathcomp.ssreflect.fintype.html#invF"><span class="id" title="definition">invF</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#EqImage.T"><span class="id" title="variable">T</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#f"><span class="id" title="variable">f</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#injf"><span class="id" title="variable">injf</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrfun.html#2500d48ed8e862ccfda98a44dff88963"><span class="id" title="notation">=1</span></a> @<a class="idref" href="mathcomp.ssreflect.fintype.html#invF"><span class="id" title="definition">invF</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#EqImage.T"><span class="id" title="variable">T</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#g"><span class="id" title="variable">g</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#injg"><span class="id" title="variable">injg</span></a>.<br/> + +<br/> +<span class="id" title="keyword">End</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#EqImage"><span class="id" title="section">EqImage</span></a>.<br/> + +<br/> +</div> + +<div class="doc"> + Standard finTypes +</div> +<div class="code"> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="unit_enumP"><span class="id" title="lemma">unit_enumP</span></a> : <a class="idref" href="mathcomp.ssreflect.fintype.html#axiom"><span class="id" title="definition">Finite.axiom</span></a> <a class="idref" href="mathcomp.ssreflect.seq.html#36229928b54642a4a7da943ccf8f9612"><span class="id" title="notation">[::</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Datatypes.html#tt"><span class="id" title="constructor">tt</span></a><a class="idref" href="mathcomp.ssreflect.seq.html#36229928b54642a4a7da943ccf8f9612"><span class="id" title="notation">]</span></a>. <br/> +<span class="id" title="keyword">Definition</span> <a name="unit_finMixin"><span class="id" title="definition">unit_finMixin</span></a> := <span class="id" title="keyword">Eval</span> <span class="id" title="tactic">hnf</span> <span class="id" title="tactic">in</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#FinMixin"><span class="id" title="abbreviation">FinMixin</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#unit_enumP"><span class="id" title="lemma">unit_enumP</span></a>.<br/> +<span class="id" title="keyword">Canonical</span> <span class="id" title="var">unit_finType</span> := <span class="id" title="keyword">Eval</span> <span class="id" title="tactic">hnf</span> <span class="id" title="tactic">in</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#FinType"><span class="id" title="abbreviation">FinType</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Datatypes.html#unit"><span class="id" title="inductive">unit</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#unit_finMixin"><span class="id" title="definition">unit_finMixin</span></a>.<br/> +<span class="id" title="keyword">Lemma</span> <a name="card_unit"><span class="id" title="lemma">card_unit</span></a> : <a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">#|</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#74a34ed1f9b36f83662203527a970b09"><span class="id" title="notation">{:</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Datatypes.html#unit"><span class="id" title="inductive">unit</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#74a34ed1f9b36f83662203527a970b09"><span class="id" title="notation">}</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">|</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> 1. <br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="bool_enumP"><span class="id" title="lemma">bool_enumP</span></a> : <a class="idref" href="mathcomp.ssreflect.fintype.html#axiom"><span class="id" title="definition">Finite.axiom</span></a> <a class="idref" href="mathcomp.ssreflect.seq.html#b2d6f6eec274c9f9919a378a42b5b183"><span class="id" title="notation">[::</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Datatypes.html#true"><span class="id" title="constructor">true</span></a><a class="idref" href="mathcomp.ssreflect.seq.html#b2d6f6eec274c9f9919a378a42b5b183"><span class="id" title="notation">;</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Datatypes.html#false"><span class="id" title="constructor">false</span></a><a class="idref" href="mathcomp.ssreflect.seq.html#b2d6f6eec274c9f9919a378a42b5b183"><span class="id" title="notation">]</span></a>. <br/> +<span class="id" title="keyword">Definition</span> <a name="bool_finMixin"><span class="id" title="definition">bool_finMixin</span></a> := <span class="id" title="keyword">Eval</span> <span class="id" title="tactic">hnf</span> <span class="id" title="tactic">in</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#FinMixin"><span class="id" title="abbreviation">FinMixin</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#bool_enumP"><span class="id" title="lemma">bool_enumP</span></a>.<br/> +<span class="id" title="keyword">Canonical</span> <span class="id" title="var">bool_finType</span> := <span class="id" title="keyword">Eval</span> <span class="id" title="tactic">hnf</span> <span class="id" title="tactic">in</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#FinType"><span class="id" title="abbreviation">FinType</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Datatypes.html#bool"><span class="id" title="inductive">bool</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#bool_finMixin"><span class="id" title="definition">bool_finMixin</span></a>.<br/> +<span class="id" title="keyword">Lemma</span> <a name="card_bool"><span class="id" title="lemma">card_bool</span></a> : <a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">#|</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#74a34ed1f9b36f83662203527a970b09"><span class="id" title="notation">{:</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Datatypes.html#bool"><span class="id" title="inductive">bool</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#74a34ed1f9b36f83662203527a970b09"><span class="id" title="notation">}</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">|</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> 2. <br/> + +<br/> + +<br/> +<span class="id" title="keyword">Section</span> <a name="OptionFinType"><span class="id" title="section">OptionFinType</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Variable</span> <a name="OptionFinType.T"><span class="id" title="variable">T</span></a> : <a class="idref" href="mathcomp.ssreflect.fintype.html#finType"><span class="id" title="abbreviation">finType</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Definition</span> <a name="option_enum"><span class="id" title="definition">option_enum</span></a> := <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Datatypes.html#None"><span class="id" title="constructor">None</span></a> <a class="idref" href="mathcomp.ssreflect.seq.html#d7fed0909a58e41c49e3ee117361b0a5"><span class="id" title="notation">::</span></a> <a class="idref" href="mathcomp.ssreflect.seq.html#map"><span class="id" title="definition">map</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrfun.html#some"><span class="id" title="abbreviation">some</span></a> (<a class="idref" href="mathcomp.ssreflect.fintype.html#enumF"><span class="id" title="abbreviation">enumF</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#OptionFinType.T"><span class="id" title="variable">T</span></a>).<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="option_enumP"><span class="id" title="lemma">option_enumP</span></a> : <a class="idref" href="mathcomp.ssreflect.fintype.html#axiom"><span class="id" title="definition">Finite.axiom</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#option_enum"><span class="id" title="definition">option_enum</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Definition</span> <a name="option_finMixin"><span class="id" title="definition">option_finMixin</span></a> := <span class="id" title="keyword">Eval</span> <span class="id" title="tactic">hnf</span> <span class="id" title="tactic">in</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#FinMixin"><span class="id" title="abbreviation">FinMixin</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#option_enumP"><span class="id" title="lemma">option_enumP</span></a>.<br/> +<span class="id" title="keyword">Canonical</span> <span class="id" title="var">option_finType</span> := <span class="id" title="keyword">Eval</span> <span class="id" title="tactic">hnf</span> <span class="id" title="tactic">in</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#FinType"><span class="id" title="abbreviation">FinType</span></a> (<a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Datatypes.html#option"><span class="id" title="inductive">option</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#OptionFinType.T"><span class="id" title="variable">T</span></a>) <a class="idref" href="mathcomp.ssreflect.fintype.html#option_finMixin"><span class="id" title="definition">option_finMixin</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="card_option"><span class="id" title="lemma">card_option</span></a> : <a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">#|</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#74a34ed1f9b36f83662203527a970b09"><span class="id" title="notation">{:</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Datatypes.html#option"><span class="id" title="inductive">option</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#OptionFinType.T"><span class="id" title="variable">T</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#74a34ed1f9b36f83662203527a970b09"><span class="id" title="notation">}</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">|</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">#|</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#OptionFinType.T"><span class="id" title="variable">T</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">|</span></a><a class="idref" href="mathcomp.ssreflect.ssrnat.html#361454269931ea8643f7b402f2ab7222"><span class="id" title="notation">.+1</span></a>.<br/> + +<br/> +<span class="id" title="keyword">End</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#OptionFinType"><span class="id" title="section">OptionFinType</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Section</span> <a name="TransferFinType"><span class="id" title="section">TransferFinType</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Variables</span> (<a name="TransferFinType.eT"><span class="id" title="variable">eT</span></a> : <a class="idref" href="mathcomp.ssreflect.choice.html#Countable.Exports.countType"><span class="id" title="abbreviation">countType</span></a>) (<a name="TransferFinType.fT"><span class="id" title="variable">fT</span></a> : <a class="idref" href="mathcomp.ssreflect.fintype.html#finType"><span class="id" title="abbreviation">finType</span></a>) (<a name="TransferFinType.f"><span class="id" title="variable">f</span></a> : <a class="idref" href="mathcomp.ssreflect.fintype.html#eT"><span class="id" title="variable">eT</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#fT"><span class="id" title="variable">fT</span></a>).<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="pcan_enumP"><span class="id" title="lemma">pcan_enumP</span></a> <span class="id" title="var">g</span> : <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrfun.html#pcancel"><span class="id" title="definition">pcancel</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#TransferFinType.f"><span class="id" title="variable">f</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#g"><span class="id" title="variable">g</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#axiom"><span class="id" title="definition">Finite.axiom</span></a> (<a class="idref" href="mathcomp.ssreflect.seq.html#undup"><span class="id" title="definition">undup</span></a> (<a class="idref" href="mathcomp.ssreflect.seq.html#pmap"><span class="id" title="definition">pmap</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#g"><span class="id" title="variable">g</span></a> (<a class="idref" href="mathcomp.ssreflect.fintype.html#enumF"><span class="id" title="abbreviation">enumF</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#TransferFinType.fT"><span class="id" title="variable">fT</span></a>))).<br/> + +<br/> +<span class="id" title="keyword">Definition</span> <a name="PcanFinMixin"><span class="id" title="definition">PcanFinMixin</span></a> <span class="id" title="var">g</span> <span class="id" title="var">fK</span> := <a class="idref" href="mathcomp.ssreflect.fintype.html#FinMixin"><span class="id" title="abbreviation">FinMixin</span></a> (@<a class="idref" href="mathcomp.ssreflect.fintype.html#pcan_enumP"><span class="id" title="lemma">pcan_enumP</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#g"><span class="id" title="variable">g</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#fK"><span class="id" title="variable">fK</span></a>).<br/> + +<br/> +<span class="id" title="keyword">Definition</span> <a name="CanFinMixin"><span class="id" title="definition">CanFinMixin</span></a> <span class="id" title="var">g</span> (<span class="id" title="var">fK</span> : <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrfun.html#cancel"><span class="id" title="definition">cancel</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#TransferFinType.f"><span class="id" title="variable">f</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#g"><span class="id" title="variable">g</span></a>) := <a class="idref" href="mathcomp.ssreflect.fintype.html#PcanFinMixin"><span class="id" title="definition">PcanFinMixin</span></a> (<a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrfun.html#can_pcan"><span class="id" title="lemma">can_pcan</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#fK"><span class="id" title="variable">fK</span></a>).<br/> + +<br/> +<span class="id" title="keyword">End</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#TransferFinType"><span class="id" title="section">TransferFinType</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Section</span> <a name="SubFinType"><span class="id" title="section">SubFinType</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Variables</span> (<a name="SubFinType.T"><span class="id" title="variable">T</span></a> : <a class="idref" href="mathcomp.ssreflect.choice.html#Choice.Exports.choiceType"><span class="id" title="abbreviation">choiceType</span></a>) (<a name="SubFinType.P"><span class="id" title="variable">P</span></a> : <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#pred"><span class="id" title="definition">pred</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#T"><span class="id" title="variable">T</span></a>).<br/> +<span class="id" title="keyword">Import</span> <span class="id" title="var">Finite</span>.<br/> + +<br/> +<span class="id" title="keyword">Structure</span> <a name="subFinType"><span class="id" title="record">subFinType</span></a> := <a name="SubFinType"><span class="id" title="constructor">SubFinType</span></a> {<br/> + <a name="subFin_sort"><span class="id" title="projection">subFin_sort</span></a> :> <a class="idref" href="mathcomp.ssreflect.eqtype.html#subType"><span class="id" title="record">subType</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#SubFinType.P"><span class="id" title="variable">P</span></a>;<br/> + <span class="id" title="var">_</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#mixin_of"><span class="id" title="record">mixin_of</span></a> (<a class="idref" href="mathcomp.ssreflect.eqtype.html#sub_eqType"><span class="id" title="definition">sub_eqType</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#subFin_sort"><span class="id" title="method">subFin_sort</span></a>)<br/> +}.<br/> + +<br/> +<span class="id" title="keyword">Definition</span> <a name="pack_subFinType"><span class="id" title="definition">pack_subFinType</span></a> <span class="id" title="var">U</span> :=<br/> + <span class="id" title="keyword">fun</span> <span class="id" title="var">cT</span> <span class="id" title="var">b</span> <span class="id" title="var">m</span> & <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrfun.html#phant_id"><span class="id" title="definition">phant_id</span></a> (<a class="idref" href="mathcomp.ssreflect.fintype.html#class"><span class="id" title="definition">class</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#cT"><span class="id" title="variable">cT</span></a>) (@<a class="idref" href="mathcomp.ssreflect.fintype.html#Class"><span class="id" title="constructor">Class</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#U"><span class="id" title="variable">U</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#b"><span class="id" title="variable">b</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#m"><span class="id" title="variable">m</span></a>) ⇒<br/> + <span class="id" title="keyword">fun</span> <span class="id" title="var">sT</span> <span class="id" title="var">m'</span> & <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrfun.html#phant_id"><span class="id" title="definition">phant_id</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#m'"><span class="id" title="variable">m'</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#m"><span class="id" title="variable">m</span></a> ⇒ @<a class="idref" href="mathcomp.ssreflect.fintype.html#SubFinType"><span class="id" title="constructor">SubFinType</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#sT"><span class="id" title="variable">sT</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#m'"><span class="id" title="variable">m'</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Implicit</span> <span class="id" title="keyword">Type</span> <span class="id" title="var">sT</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#subFinType"><span class="id" title="record">subFinType</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Definition</span> <a name="subFin_mixin"><span class="id" title="definition">subFin_mixin</span></a> <span class="id" title="var">sT</span> :=<br/> + <span class="id" title="keyword">let</span>: <a class="idref" href="mathcomp.ssreflect.fintype.html#SubFinType"><span class="id" title="constructor">SubFinType</span></a> <span class="id" title="var">_</span> <span class="id" title="var">m</span> := <a class="idref" href="mathcomp.ssreflect.fintype.html#sT"><span class="id" title="variable">sT</span></a> <span class="id" title="keyword">return</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#mixin_of"><span class="id" title="record">mixin_of</span></a> (<a class="idref" href="mathcomp.ssreflect.eqtype.html#sub_eqType"><span class="id" title="definition">sub_eqType</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#sT"><span class="id" title="variable">sT</span></a>) <span class="id" title="tactic">in</span> <span class="id" title="var">m</span>.<br/> + +<br/> +<span class="id" title="keyword">Coercion</span> <span class="id" title="var">subFinType_subCountType</span> <span class="id" title="var">sT</span> := @<a class="idref" href="mathcomp.ssreflect.choice.html#SubCountType"><span class="id" title="constructor">SubCountType</span></a> <span class="id" title="var">_</span> <span class="id" title="var">_</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#sT"><span class="id" title="variable">sT</span></a> (<a class="idref" href="mathcomp.ssreflect.fintype.html#subFin_mixin"><span class="id" title="definition">subFin_mixin</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#sT"><span class="id" title="variable">sT</span></a>).<br/> +<span class="id" title="keyword">Canonical</span> <span class="id" title="var">subFinType_subCountType</span>.<br/> + +<br/> +<span class="id" title="keyword">Coercion</span> <span class="id" title="var">subFinType_finType</span> <span class="id" title="var">sT</span> :=<br/> + <a class="idref" href="mathcomp.ssreflect.fintype.html#Pack"><span class="id" title="constructor">Pack</span></a> (@<a class="idref" href="mathcomp.ssreflect.fintype.html#Class"><span class="id" title="constructor">Class</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#sT"><span class="id" title="variable">sT</span></a> (<a class="idref" href="mathcomp.ssreflect.choice.html#sub_choiceClass"><span class="id" title="definition">sub_choiceClass</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#sT"><span class="id" title="variable">sT</span></a>) (<a class="idref" href="mathcomp.ssreflect.fintype.html#subFin_mixin"><span class="id" title="definition">subFin_mixin</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#sT"><span class="id" title="variable">sT</span></a>)) <a class="idref" href="mathcomp.ssreflect.fintype.html#sT"><span class="id" title="variable">sT</span></a>.<br/> +<span class="id" title="keyword">Canonical</span> <span class="id" title="var">subFinType_finType</span>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="codom_val"><span class="id" title="lemma">codom_val</span></a> <span class="id" title="var">sT</span> <span class="id" title="var">x</span> : <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">(</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#46c9e8232fa09401e24f1934bb65029f"><span class="id" title="notation">\</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#46c9e8232fa09401e24f1934bb65029f"><span class="id" title="notation">in</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#codom"><span class="id" title="definition">codom</span></a> (<a class="idref" href="mathcomp.ssreflect.eqtype.html#val"><span class="id" title="projection">val</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssreflect.html#4509b22bf26e3d6d771897e22bd8bc8f"><span class="id" title="notation">:</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#sT"><span class="id" title="variable">sT</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#SubFinType.T"><span class="id" title="variable">T</span></a>)<a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">)</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#SubFinType.P"><span class="id" title="variable">P</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a>.<br/> + +<br/> +<span class="id" title="keyword">End</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#SubFinType"><span class="id" title="section">SubFinType</span></a>.<br/> + +<br/> +</div> + +<div class="doc"> + This assumes that T has both finType and subCountType structures. +</div> +<div class="code"> +<span class="id" title="keyword">Notation</span> <a name="a701c7b60b4a16f07950761d8bf90924"><span class="id" title="notation">"</span></a>[ 'subFinType' 'of' T ]" := (@<a class="idref" href="mathcomp.ssreflect.fintype.html#pack_subFinType"><span class="id" title="definition">pack_subFinType</span></a> <span class="id" title="var">_</span> <span class="id" title="var">_</span> <span class="id" title="var">T</span> <span class="id" title="var">_</span> <span class="id" title="var">_</span> <span class="id" title="var">_</span> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrfun.html#id"><span class="id" title="abbreviation">id</span></a> <span class="id" title="var">_</span> <span class="id" title="var">_</span> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrfun.html#id"><span class="id" title="abbreviation">id</span></a>)<br/> + (<span class="id" title="tactic">at</span> <span class="id" title="keyword">level</span> 0, <span class="id" title="var">format</span> "[ 'subFinType' 'of' T ]") : <span class="id" title="var">form_scope</span>.<br/> + +<br/> +<span class="id" title="keyword">Section</span> <a name="FinTypeForSub"><span class="id" title="section">FinTypeForSub</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Variables</span> (<a name="FinTypeForSub.T"><span class="id" title="variable">T</span></a> : <a class="idref" href="mathcomp.ssreflect.fintype.html#finType"><span class="id" title="abbreviation">finType</span></a>) (<a name="FinTypeForSub.P"><span class="id" title="variable">P</span></a> : <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#pred"><span class="id" title="definition">pred</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#T"><span class="id" title="variable">T</span></a>) (<a name="FinTypeForSub.sT"><span class="id" title="variable">sT</span></a> : <a class="idref" href="mathcomp.ssreflect.choice.html#subCountType"><span class="id" title="record">subCountType</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#P"><span class="id" title="variable">P</span></a>).<br/> + +<br/> +<span class="id" title="keyword">Definition</span> <a name="sub_enum"><span class="id" title="definition">sub_enum</span></a> : <a class="idref" href="mathcomp.ssreflect.seq.html#seq"><span class="id" title="abbreviation">seq</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#FinTypeForSub.sT"><span class="id" title="variable">sT</span></a> := <a class="idref" href="mathcomp.ssreflect.seq.html#pmap"><span class="id" title="definition">pmap</span></a> <a class="idref" href="mathcomp.ssreflect.eqtype.html#insub"><span class="id" title="definition">insub</span></a> (<a class="idref" href="mathcomp.ssreflect.fintype.html#enumF"><span class="id" title="abbreviation">enumF</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#FinTypeForSub.T"><span class="id" title="variable">T</span></a>).<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="mem_sub_enum"><span class="id" title="lemma">mem_sub_enum</span></a> <span class="id" title="var">u</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#u"><span class="id" title="variable">u</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#46c9e8232fa09401e24f1934bb65029f"><span class="id" title="notation">\</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#46c9e8232fa09401e24f1934bb65029f"><span class="id" title="notation">in</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#sub_enum"><span class="id" title="definition">sub_enum</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="sub_enum_uniq"><span class="id" title="lemma">sub_enum_uniq</span></a> : <a class="idref" href="mathcomp.ssreflect.seq.html#uniq"><span class="id" title="definition">uniq</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#sub_enum"><span class="id" title="definition">sub_enum</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="val_sub_enum"><span class="id" title="lemma">val_sub_enum</span></a> : <a class="idref" href="mathcomp.ssreflect.seq.html#map"><span class="id" title="definition">map</span></a> <a class="idref" href="mathcomp.ssreflect.eqtype.html#val"><span class="id" title="projection">val</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#sub_enum"><span class="id" title="definition">sub_enum</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#enum"><span class="id" title="abbreviation">enum</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#FinTypeForSub.P"><span class="id" title="variable">P</span></a>.<br/> + +<br/> +</div> + +<div class="doc"> + We can't declare a canonical structure here because we've already + stated that subType_sort and FinType.sort unify via to the + subType_finType structure. +</div> +<div class="code"> + +<br/> +<span class="id" title="keyword">Definition</span> <a name="SubFinMixin"><span class="id" title="definition">SubFinMixin</span></a> := <a class="idref" href="mathcomp.ssreflect.fintype.html#UniqFinMixin"><span class="id" title="abbreviation">UniqFinMixin</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#sub_enum_uniq"><span class="id" title="lemma">sub_enum_uniq</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#mem_sub_enum"><span class="id" title="lemma">mem_sub_enum</span></a>.<br/> +<span class="id" title="keyword">Definition</span> <a name="SubFinMixin_for"><span class="id" title="definition">SubFinMixin_for</span></a> (<span class="id" title="var">eT</span> : <a class="idref" href="mathcomp.ssreflect.eqtype.html#Equality.Exports.eqType"><span class="id" title="abbreviation">eqType</span></a>) <span class="id" title="keyword">of</span> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssreflect.html#phant"><span class="id" title="inductive">phant</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#eT"><span class="id" title="variable">eT</span></a> :=<br/> + <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#eq_rect"><span class="id" title="definition">eq_rect</span></a> <span class="id" title="var">_</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#mixin_of"><span class="id" title="record">Finite.mixin_of</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#SubFinMixin"><span class="id" title="definition">SubFinMixin</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#eT"><span class="id" title="variable">eT</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Variable</span> <a name="FinTypeForSub.sfT"><span class="id" title="variable">sfT</span></a> : <a class="idref" href="mathcomp.ssreflect.fintype.html#subFinType"><span class="id" title="record">subFinType</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#FinTypeForSub.P"><span class="id" title="variable">P</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="card_sub"><span class="id" title="lemma">card_sub</span></a> : <a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">#|</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#FinTypeForSub.sfT"><span class="id" title="variable">sfT</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">|</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">#|</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#880a9790dece461a678db8aa0c091f63"><span class="id" title="notation">[</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#880a9790dece461a678db8aa0c091f63"><span class="id" title="notation">pred</span></a> <span class="id" title="var">x</span> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#880a9790dece461a678db8aa0c091f63"><span class="id" title="notation">|</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#FinTypeForSub.P"><span class="id" title="variable">P</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#880a9790dece461a678db8aa0c091f63"><span class="id" title="notation">]</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">|</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="eq_card_sub"><span class="id" title="lemma">eq_card_sub</span></a> (<span class="id" title="var">A</span> : <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#pred"><span class="id" title="definition">pred</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#FinTypeForSub.sfT"><span class="id" title="variable">sfT</span></a>) : <a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#20bf07099d6d8cf369383b22fd37862e"><span class="id" title="notation">=</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#20bf07099d6d8cf369383b22fd37862e"><span class="id" title="notation">i</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#predT"><span class="id" title="definition">predT</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">#|</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">|</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">#|</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#880a9790dece461a678db8aa0c091f63"><span class="id" title="notation">[</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#880a9790dece461a678db8aa0c091f63"><span class="id" title="notation">pred</span></a> <span class="id" title="var">x</span> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#880a9790dece461a678db8aa0c091f63"><span class="id" title="notation">|</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#FinTypeForSub.P"><span class="id" title="variable">P</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#880a9790dece461a678db8aa0c091f63"><span class="id" title="notation">]</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">|</span></a>.<br/> + +<br/> +<span class="id" title="keyword">End</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#FinTypeForSub"><span class="id" title="section">FinTypeForSub</span></a>.<br/> + +<br/> +</div> + +<div class="doc"> + This assumes that T has a subCountType structure over a type that + has a finType structure. +</div> +<div class="code"> +<span class="id" title="keyword">Notation</span> <a name="8c180561768185dd10396a5d3615104a"><span class="id" title="notation">"</span></a>[ 'finMixin' 'of' T 'by' <: ]" :=<br/> + (<a class="idref" href="mathcomp.ssreflect.fintype.html#SubFinMixin_for"><span class="id" title="definition">SubFinMixin_for</span></a> (<a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssreflect.html#Phant"><span class="id" title="constructor">Phant</span></a> <span class="id" title="var">T</span>) (<a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrfun.html#erefl"><span class="id" title="abbreviation">erefl</span></a> <span class="id" title="var">_</span>))<br/> + (<span class="id" title="tactic">at</span> <span class="id" title="keyword">level</span> 0, <span class="id" title="var">format</span> "[ 'finMixin' 'of' T 'by' <: ]") : <span class="id" title="var">form_scope</span>.<br/> + +<br/> +</div> + +<div class="doc"> + Regression for the subFinType stack +Record myb : Type := MyB {myv : bool; _ : ~~ myv}. +Canonical myb_sub := Eval hnf in [subType for myv]. +Definition myb_eqm := Eval hnf in [eqMixin of myb by <: ]. +Canonical myb_eq := Eval hnf in EqType myb myb_eqm. +Definition myb_chm := [choiceMixin of myb by <: ]. +Canonical myb_ch := Eval hnf in ChoiceType myb myb_chm. +Definition myb_cntm := [countMixin of myb by <: ]. +Canonical myb_cnt := Eval hnf in CountType myb myb_cntm. +Canonical myb_scnt := Eval hnf in [subCountType of myb]. +Definition myb_finm := [finMixin of myb by <: ]. +Canonical myb_fin := Eval hnf in FinType myb myb_finm. +Canonical myb_sfin := Eval hnf in [subFinType of myb]. +Print Canonical Projections. +Print myb_finm. +Print myb_cntm. + +</div> +<div class="code"> + +<br/> +<span class="id" title="keyword">Section</span> <a name="CardSig"><span class="id" title="section">CardSig</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Variables</span> (<a name="CardSig.T"><span class="id" title="variable">T</span></a> : <a class="idref" href="mathcomp.ssreflect.fintype.html#finType"><span class="id" title="abbreviation">finType</span></a>) (<a name="CardSig.P"><span class="id" title="variable">P</span></a> : <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#pred"><span class="id" title="definition">pred</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#T"><span class="id" title="variable">T</span></a>).<br/> + +<br/> +<span class="id" title="keyword">Definition</span> <a name="sig_finMixin"><span class="id" title="definition">sig_finMixin</span></a> := <a class="idref" href="mathcomp.ssreflect.fintype.html#8c180561768185dd10396a5d3615104a"><span class="id" title="notation">[</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#8c180561768185dd10396a5d3615104a"><span class="id" title="notation">finMixin</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#8c180561768185dd10396a5d3615104a"><span class="id" title="notation">of</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Specif.html#5b63cb9ed0fed82566685c66e56592e4"><span class="id" title="notation">{</span></a><span class="id" title="var">x</span> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Specif.html#5b63cb9ed0fed82566685c66e56592e4"><span class="id" title="notation">|</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#CardSig.P"><span class="id" title="variable">P</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Specif.html#5b63cb9ed0fed82566685c66e56592e4"><span class="id" title="notation">}</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#8c180561768185dd10396a5d3615104a"><span class="id" title="notation">by</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#8c180561768185dd10396a5d3615104a"><span class="id" title="notation"><:]</span></a>.<br/> +<span class="id" title="keyword">Canonical</span> <span class="id" title="var">sig_finType</span> := <span class="id" title="keyword">Eval</span> <span class="id" title="tactic">hnf</span> <span class="id" title="tactic">in</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#FinType"><span class="id" title="abbreviation">FinType</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Specif.html#5b63cb9ed0fed82566685c66e56592e4"><span class="id" title="notation">{</span></a><span class="id" title="var">x</span> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Specif.html#5b63cb9ed0fed82566685c66e56592e4"><span class="id" title="notation">|</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#CardSig.P"><span class="id" title="variable">P</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Specif.html#5b63cb9ed0fed82566685c66e56592e4"><span class="id" title="notation">}</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#sig_finMixin"><span class="id" title="definition">sig_finMixin</span></a>.<br/> +<span class="id" title="keyword">Canonical</span> <span class="id" title="var">sig_subFinType</span> := <span class="id" title="keyword">Eval</span> <span class="id" title="tactic">hnf</span> <span class="id" title="tactic">in</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#a701c7b60b4a16f07950761d8bf90924"><span class="id" title="notation">[</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#a701c7b60b4a16f07950761d8bf90924"><span class="id" title="notation">subFinType</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#a701c7b60b4a16f07950761d8bf90924"><span class="id" title="notation">of</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Specif.html#5b63cb9ed0fed82566685c66e56592e4"><span class="id" title="notation">{</span></a><span class="id" title="var">x</span> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Specif.html#5b63cb9ed0fed82566685c66e56592e4"><span class="id" title="notation">|</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#CardSig.P"><span class="id" title="variable">P</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Specif.html#5b63cb9ed0fed82566685c66e56592e4"><span class="id" title="notation">}</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#a701c7b60b4a16f07950761d8bf90924"><span class="id" title="notation">]</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="card_sig"><span class="id" title="lemma">card_sig</span></a> : <a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">#|</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#74a34ed1f9b36f83662203527a970b09"><span class="id" title="notation">{:</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Specif.html#5b63cb9ed0fed82566685c66e56592e4"><span class="id" title="notation">{</span></a><span class="id" title="var">x</span> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Specif.html#5b63cb9ed0fed82566685c66e56592e4"><span class="id" title="notation">|</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#CardSig.P"><span class="id" title="variable">P</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Specif.html#5b63cb9ed0fed82566685c66e56592e4"><span class="id" title="notation">}</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#74a34ed1f9b36f83662203527a970b09"><span class="id" title="notation">}</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">|</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">#|</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#880a9790dece461a678db8aa0c091f63"><span class="id" title="notation">[</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#880a9790dece461a678db8aa0c091f63"><span class="id" title="notation">pred</span></a> <span class="id" title="var">x</span> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#880a9790dece461a678db8aa0c091f63"><span class="id" title="notation">|</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#CardSig.P"><span class="id" title="variable">P</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#880a9790dece461a678db8aa0c091f63"><span class="id" title="notation">]</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">|</span></a>.<br/> + +<br/> +<span class="id" title="keyword">End</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#CardSig"><span class="id" title="section">CardSig</span></a>.<br/> + +<br/> +</div> + +<div class="doc"> + Subtype for an explicit enumeration. +</div> +<div class="code"> +<span class="id" title="keyword">Section</span> <a name="SeqSubType"><span class="id" title="section">SeqSubType</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Variables</span> (<a name="SeqSubType.T"><span class="id" title="variable">T</span></a> : <a class="idref" href="mathcomp.ssreflect.eqtype.html#Equality.Exports.eqType"><span class="id" title="abbreviation">eqType</span></a>) (<a name="SeqSubType.s"><span class="id" title="variable">s</span></a> : <a class="idref" href="mathcomp.ssreflect.seq.html#seq"><span class="id" title="abbreviation">seq</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#T"><span class="id" title="variable">T</span></a>).<br/> + +<br/> +<span class="id" title="keyword">Record</span> <a name="seq_sub"><span class="id" title="record">seq_sub</span></a> : <span class="id" title="keyword">Type</span> := <a name="SeqSub"><span class="id" title="constructor">SeqSub</span></a> {<a name="ssval"><span class="id" title="projection">ssval</span></a> : <a class="idref" href="mathcomp.ssreflect.fintype.html#SeqSubType.T"><span class="id" title="variable">T</span></a>; <a name="ssvalP"><span class="id" title="projection">ssvalP</span></a> : <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#in_mem"><span class="id" title="definition">in_mem</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#ssval"><span class="id" title="method">ssval</span></a> (@<a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#mem"><span class="id" title="definition">mem</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#SeqSubType.T"><span class="id" title="variable">T</span></a> <span class="id" title="var">_</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#SeqSubType.s"><span class="id" title="variable">s</span></a>)}.<br/> + +<br/> +<span class="id" title="keyword">Canonical</span> <span class="id" title="var">seq_sub_subType</span> := <span class="id" title="keyword">Eval</span> <span class="id" title="tactic">hnf</span> <span class="id" title="tactic">in</span> <a class="idref" href="mathcomp.ssreflect.eqtype.html#341c160c3e7b20d967b85d1852a7f89f"><span class="id" title="notation">[</span></a><a class="idref" href="mathcomp.ssreflect.eqtype.html#341c160c3e7b20d967b85d1852a7f89f"><span class="id" title="notation">subType</span></a> <a class="idref" href="mathcomp.ssreflect.eqtype.html#341c160c3e7b20d967b85d1852a7f89f"><span class="id" title="notation">for</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#ssval"><span class="id" title="projection">ssval</span></a><a class="idref" href="mathcomp.ssreflect.eqtype.html#341c160c3e7b20d967b85d1852a7f89f"><span class="id" title="notation">]</span></a>.<br/> +<span class="id" title="keyword">Definition</span> <a name="seq_sub_eqMixin"><span class="id" title="definition">seq_sub_eqMixin</span></a> := <span class="id" title="keyword">Eval</span> <span class="id" title="tactic">hnf</span> <span class="id" title="tactic">in</span> <a class="idref" href="mathcomp.ssreflect.eqtype.html#4bc2d2dce12edef0fb9c71d4a902ae5d"><span class="id" title="notation">[</span></a><a class="idref" href="mathcomp.ssreflect.eqtype.html#4bc2d2dce12edef0fb9c71d4a902ae5d"><span class="id" title="notation">eqMixin</span></a> <a class="idref" href="mathcomp.ssreflect.eqtype.html#4bc2d2dce12edef0fb9c71d4a902ae5d"><span class="id" title="notation">of</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#seq_sub"><span class="id" title="record">seq_sub</span></a> <a class="idref" href="mathcomp.ssreflect.eqtype.html#4bc2d2dce12edef0fb9c71d4a902ae5d"><span class="id" title="notation">by</span></a> <a class="idref" href="mathcomp.ssreflect.eqtype.html#4bc2d2dce12edef0fb9c71d4a902ae5d"><span class="id" title="notation"><:]</span></a>.<br/> +<span class="id" title="keyword">Canonical</span> <span class="id" title="var">seq_sub_eqType</span> := <span class="id" title="keyword">Eval</span> <span class="id" title="tactic">hnf</span> <span class="id" title="tactic">in</span> <a class="idref" href="mathcomp.ssreflect.eqtype.html#Equality.Exports.EqType"><span class="id" title="abbreviation">EqType</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#seq_sub"><span class="id" title="record">seq_sub</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#seq_sub_eqMixin"><span class="id" title="definition">seq_sub_eqMixin</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Definition</span> <a name="seq_sub_enum"><span class="id" title="definition">seq_sub_enum</span></a> : <a class="idref" href="mathcomp.ssreflect.seq.html#seq"><span class="id" title="abbreviation">seq</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#seq_sub"><span class="id" title="record">seq_sub</span></a> := <a class="idref" href="mathcomp.ssreflect.seq.html#undup"><span class="id" title="definition">undup</span></a> (<a class="idref" href="mathcomp.ssreflect.seq.html#pmap"><span class="id" title="definition">pmap</span></a> <a class="idref" href="mathcomp.ssreflect.eqtype.html#insub"><span class="id" title="definition">insub</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#SeqSubType.s"><span class="id" title="variable">s</span></a>).<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="mem_seq_sub_enum"><span class="id" title="lemma">mem_seq_sub_enum</span></a> <span class="id" title="var">x</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#46c9e8232fa09401e24f1934bb65029f"><span class="id" title="notation">\</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#46c9e8232fa09401e24f1934bb65029f"><span class="id" title="notation">in</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#seq_sub_enum"><span class="id" title="definition">seq_sub_enum</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="val_seq_sub_enum"><span class="id" title="lemma">val_seq_sub_enum</span></a> : <a class="idref" href="mathcomp.ssreflect.seq.html#uniq"><span class="id" title="definition">uniq</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#SeqSubType.s"><span class="id" title="variable">s</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> <a class="idref" href="mathcomp.ssreflect.seq.html#map"><span class="id" title="definition">map</span></a> <a class="idref" href="mathcomp.ssreflect.eqtype.html#val"><span class="id" title="projection">val</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#seq_sub_enum"><span class="id" title="definition">seq_sub_enum</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#SeqSubType.s"><span class="id" title="variable">s</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Definition</span> <a name="seq_sub_pickle"><span class="id" title="definition">seq_sub_pickle</span></a> <span class="id" title="var">x</span> := <a class="idref" href="mathcomp.ssreflect.seq.html#index"><span class="id" title="definition">index</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#seq_sub_enum"><span class="id" title="definition">seq_sub_enum</span></a>.<br/> +<span class="id" title="keyword">Definition</span> <a name="seq_sub_unpickle"><span class="id" title="definition">seq_sub_unpickle</span></a> <span class="id" title="var">n</span> := <a class="idref" href="mathcomp.ssreflect.seq.html#nth"><span class="id" title="definition">nth</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Datatypes.html#None"><span class="id" title="constructor">None</span></a> (<a class="idref" href="mathcomp.ssreflect.seq.html#map"><span class="id" title="definition">map</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrfun.html#some"><span class="id" title="abbreviation">some</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#seq_sub_enum"><span class="id" title="definition">seq_sub_enum</span></a>) <a class="idref" href="mathcomp.ssreflect.fintype.html#n"><span class="id" title="variable">n</span></a>.<br/> +<span class="id" title="keyword">Lemma</span> <a name="seq_sub_pickleK"><span class="id" title="lemma">seq_sub_pickleK</span></a> : <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrfun.html#pcancel"><span class="id" title="definition">pcancel</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#seq_sub_pickle"><span class="id" title="definition">seq_sub_pickle</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#seq_sub_unpickle"><span class="id" title="definition">seq_sub_unpickle</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Definition</span> <a name="seq_sub_countMixin"><span class="id" title="definition">seq_sub_countMixin</span></a> := <a class="idref" href="mathcomp.ssreflect.choice.html#Countable.Exports.CountMixin"><span class="id" title="abbreviation">CountMixin</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#seq_sub_pickleK"><span class="id" title="lemma">seq_sub_pickleK</span></a>.<br/> +<span class="id" title="keyword">Fact</span> <a name="seq_sub_axiom"><span class="id" title="lemma">seq_sub_axiom</span></a> : <a class="idref" href="mathcomp.ssreflect.fintype.html#axiom"><span class="id" title="definition">Finite.axiom</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#seq_sub_enum"><span class="id" title="definition">seq_sub_enum</span></a>.<br/> + <span class="id" title="keyword">Definition</span> <a name="seq_sub_finMixin"><span class="id" title="definition">seq_sub_finMixin</span></a> := <a class="idref" href="mathcomp.ssreflect.fintype.html#Mixin"><span class="id" title="constructor">Finite.Mixin</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#seq_sub_countMixin"><span class="id" title="definition">seq_sub_countMixin</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#seq_sub_axiom"><span class="id" title="lemma">seq_sub_axiom</span></a>.<br/> + +<br/> +</div> + +<div class="doc"> + Beware: these are not the canonical instances, as they are not consistent + with the generic sub_choiceType canonical instance. +</div> +<div class="code"> +<span class="id" title="keyword">Definition</span> <a name="adhoc_seq_sub_choiceMixin"><span class="id" title="definition">adhoc_seq_sub_choiceMixin</span></a> := <a class="idref" href="mathcomp.ssreflect.choice.html#PcanChoiceMixin"><span class="id" title="lemma">PcanChoiceMixin</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#seq_sub_pickleK"><span class="id" title="lemma">seq_sub_pickleK</span></a>.<br/> +<span class="id" title="keyword">Definition</span> <a name="adhoc_seq_sub_choiceType"><span class="id" title="definition">adhoc_seq_sub_choiceType</span></a> :=<br/> + <span class="id" title="keyword">Eval</span> <span class="id" title="tactic">hnf</span> <span class="id" title="tactic">in</span> <a class="idref" href="mathcomp.ssreflect.choice.html#Choice.Exports.ChoiceType"><span class="id" title="abbreviation">ChoiceType</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#seq_sub"><span class="id" title="record">seq_sub</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#adhoc_seq_sub_choiceMixin"><span class="id" title="definition">adhoc_seq_sub_choiceMixin</span></a>.<br/> +<span class="id" title="keyword">Definition</span> <a name="adhoc_seq_sub_finType"><span class="id" title="definition">adhoc_seq_sub_finType</span></a> :=<br/> + <a class="idref" href="mathcomp.ssreflect.fintype.html#8adb1b225d027f6dfac99128a373179e"><span class="id" title="notation">[</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#8adb1b225d027f6dfac99128a373179e"><span class="id" title="notation">finType</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#8adb1b225d027f6dfac99128a373179e"><span class="id" title="notation">of</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#seq_sub"><span class="id" title="record">seq_sub</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#8adb1b225d027f6dfac99128a373179e"><span class="id" title="notation">for</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#FinType"><span class="id" title="abbreviation">FinType</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#adhoc_seq_sub_choiceType"><span class="id" title="definition">adhoc_seq_sub_choiceType</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#seq_sub_finMixin"><span class="id" title="definition">seq_sub_finMixin</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#8adb1b225d027f6dfac99128a373179e"><span class="id" title="notation">]</span></a>.<br/> + +<br/> +<span class="id" title="keyword">End</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#SeqSubType"><span class="id" title="section">SeqSubType</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Section</span> <a name="SeqFinType"><span class="id" title="section">SeqFinType</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Variables</span> (<a name="SeqFinType.T"><span class="id" title="variable">T</span></a> : <a class="idref" href="mathcomp.ssreflect.choice.html#Choice.Exports.choiceType"><span class="id" title="abbreviation">choiceType</span></a>) (<a name="SeqFinType.s"><span class="id" title="variable">s</span></a> : <a class="idref" href="mathcomp.ssreflect.seq.html#seq"><span class="id" title="abbreviation">seq</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#T"><span class="id" title="variable">T</span></a>).<br/> + +<br/> +<span class="id" title="keyword">Definition</span> <a name="seq_sub_choiceMixin"><span class="id" title="definition">seq_sub_choiceMixin</span></a> := <a class="idref" href="mathcomp.ssreflect.choice.html#6c8b2d90ff1fbb8e9926bbf12495cb70"><span class="id" title="notation">[</span></a><a class="idref" href="mathcomp.ssreflect.choice.html#6c8b2d90ff1fbb8e9926bbf12495cb70"><span class="id" title="notation">choiceMixin</span></a> <a class="idref" href="mathcomp.ssreflect.choice.html#6c8b2d90ff1fbb8e9926bbf12495cb70"><span class="id" title="notation">of</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#sT"><span class="id" title="abbreviation">sT</span></a> <a class="idref" href="mathcomp.ssreflect.choice.html#6c8b2d90ff1fbb8e9926bbf12495cb70"><span class="id" title="notation">by</span></a> <a class="idref" href="mathcomp.ssreflect.choice.html#6c8b2d90ff1fbb8e9926bbf12495cb70"><span class="id" title="notation"><:]</span></a>.<br/> +<span class="id" title="keyword">Canonical</span> <span class="id" title="var">seq_sub_choiceType</span> := <span class="id" title="keyword">Eval</span> <span class="id" title="tactic">hnf</span> <span class="id" title="tactic">in</span> <a class="idref" href="mathcomp.ssreflect.choice.html#Choice.Exports.ChoiceType"><span class="id" title="abbreviation">ChoiceType</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#sT"><span class="id" title="abbreviation">sT</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#seq_sub_choiceMixin"><span class="id" title="definition">seq_sub_choiceMixin</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Canonical</span> <span class="id" title="var">seq_sub_countType</span> := <span class="id" title="keyword">Eval</span> <span class="id" title="tactic">hnf</span> <span class="id" title="tactic">in</span> <a class="idref" href="mathcomp.ssreflect.choice.html#Countable.Exports.CountType"><span class="id" title="abbreviation">CountType</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#sT"><span class="id" title="abbreviation">sT</span></a> (<a class="idref" href="mathcomp.ssreflect.fintype.html#seq_sub_countMixin"><span class="id" title="definition">seq_sub_countMixin</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#SeqFinType.s"><span class="id" title="variable">s</span></a>).<br/> +<span class="id" title="keyword">Canonical</span> <span class="id" title="var">seq_sub_subCountType</span> := <span class="id" title="keyword">Eval</span> <span class="id" title="tactic">hnf</span> <span class="id" title="tactic">in</span> <a class="idref" href="mathcomp.ssreflect.choice.html#8a7192fa64a42310658fd5be07ae4fcc"><span class="id" title="notation">[</span></a><a class="idref" href="mathcomp.ssreflect.choice.html#8a7192fa64a42310658fd5be07ae4fcc"><span class="id" title="notation">subCountType</span></a> <a class="idref" href="mathcomp.ssreflect.choice.html#8a7192fa64a42310658fd5be07ae4fcc"><span class="id" title="notation">of</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#sT"><span class="id" title="abbreviation">sT</span></a><a class="idref" href="mathcomp.ssreflect.choice.html#8a7192fa64a42310658fd5be07ae4fcc"><span class="id" title="notation">]</span></a>.<br/> +<span class="id" title="keyword">Canonical</span> <span class="id" title="var">seq_sub_finType</span> := <span class="id" title="keyword">Eval</span> <span class="id" title="tactic">hnf</span> <span class="id" title="tactic">in</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#FinType"><span class="id" title="abbreviation">FinType</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#sT"><span class="id" title="abbreviation">sT</span></a> (<a class="idref" href="mathcomp.ssreflect.fintype.html#seq_sub_finMixin"><span class="id" title="definition">seq_sub_finMixin</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#SeqFinType.s"><span class="id" title="variable">s</span></a>).<br/> +<span class="id" title="keyword">Canonical</span> <span class="id" title="var">seq_sub_subFinType</span> := <span class="id" title="keyword">Eval</span> <span class="id" title="tactic">hnf</span> <span class="id" title="tactic">in</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#a701c7b60b4a16f07950761d8bf90924"><span class="id" title="notation">[</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#a701c7b60b4a16f07950761d8bf90924"><span class="id" title="notation">subFinType</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#a701c7b60b4a16f07950761d8bf90924"><span class="id" title="notation">of</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#sT"><span class="id" title="abbreviation">sT</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#a701c7b60b4a16f07950761d8bf90924"><span class="id" title="notation">]</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="card_seq_sub"><span class="id" title="lemma">card_seq_sub</span></a> : <a class="idref" href="mathcomp.ssreflect.seq.html#uniq"><span class="id" title="definition">uniq</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#SeqFinType.s"><span class="id" title="variable">s</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">#|</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#74a34ed1f9b36f83662203527a970b09"><span class="id" title="notation">{:</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#sT"><span class="id" title="abbreviation">sT</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#74a34ed1f9b36f83662203527a970b09"><span class="id" title="notation">}</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">|</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.ssreflect.seq.html#size"><span class="id" title="definition">size</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#SeqFinType.s"><span class="id" title="variable">s</span></a>.<br/> + +<br/> +<span class="id" title="keyword">End</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#SeqFinType"><span class="id" title="section">SeqFinType</span></a>.<br/> + +<br/> +</div> + +<div class="doc"> + +<div class="paragraph"> </div> + + Ordinal finType : {0, ... , n-1} + +</div> +<div class="code"> + +<br/> +<span class="id" title="keyword">Section</span> <a name="OrdinalSub"><span class="id" title="section">OrdinalSub</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Variable</span> <a name="OrdinalSub.n"><span class="id" title="variable">n</span></a> : <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Datatypes.html#nat"><span class="id" title="inductive">nat</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Inductive</span> <a name="ordinal"><span class="id" title="inductive">ordinal</span></a> : <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#predArgType"><span class="id" title="definition">predArgType</span></a> := <a name="Ordinal"><span class="id" title="constructor">Ordinal</span></a> <span class="id" title="var">m</span> <span class="id" title="keyword">of</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#m"><span class="id" title="variable">m</span></a> <a class="idref" href="mathcomp.ssreflect.ssrnat.html#989c98e7ddd65d5bf37c334ff2076de8"><span class="id" title="notation"><</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#OrdinalSub.n"><span class="id" title="variable">n</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Coercion</span> <span class="id" title="var">nat_of_ord</span> <span class="id" title="var">i</span> := <span class="id" title="keyword">let</span>: <a class="idref" href="mathcomp.ssreflect.fintype.html#Ordinal"><span class="id" title="constructor">Ordinal</span></a> <span class="id" title="var">m</span> <span class="id" title="var">_</span> := <a class="idref" href="mathcomp.ssreflect.fintype.html#i"><span class="id" title="variable">i</span></a> <span class="id" title="tactic">in</span> <span class="id" title="var">m</span>.<br/> + +<br/> +<span class="id" title="keyword">Canonical</span> <span class="id" title="var">ordinal_subType</span> := <a class="idref" href="mathcomp.ssreflect.eqtype.html#341c160c3e7b20d967b85d1852a7f89f"><span class="id" title="notation">[</span></a><a class="idref" href="mathcomp.ssreflect.eqtype.html#341c160c3e7b20d967b85d1852a7f89f"><span class="id" title="notation">subType</span></a> <a class="idref" href="mathcomp.ssreflect.eqtype.html#341c160c3e7b20d967b85d1852a7f89f"><span class="id" title="notation">for</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#nat_of_ord"><span class="id" title="definition">nat_of_ord</span></a><a class="idref" href="mathcomp.ssreflect.eqtype.html#341c160c3e7b20d967b85d1852a7f89f"><span class="id" title="notation">]</span></a>.<br/> +<span class="id" title="keyword">Definition</span> <a name="ordinal_eqMixin"><span class="id" title="definition">ordinal_eqMixin</span></a> := <span class="id" title="keyword">Eval</span> <span class="id" title="tactic">hnf</span> <span class="id" title="tactic">in</span> <a class="idref" href="mathcomp.ssreflect.eqtype.html#4bc2d2dce12edef0fb9c71d4a902ae5d"><span class="id" title="notation">[</span></a><a class="idref" href="mathcomp.ssreflect.eqtype.html#4bc2d2dce12edef0fb9c71d4a902ae5d"><span class="id" title="notation">eqMixin</span></a> <a class="idref" href="mathcomp.ssreflect.eqtype.html#4bc2d2dce12edef0fb9c71d4a902ae5d"><span class="id" title="notation">of</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#ordinal"><span class="id" title="inductive">ordinal</span></a> <a class="idref" href="mathcomp.ssreflect.eqtype.html#4bc2d2dce12edef0fb9c71d4a902ae5d"><span class="id" title="notation">by</span></a> <a class="idref" href="mathcomp.ssreflect.eqtype.html#4bc2d2dce12edef0fb9c71d4a902ae5d"><span class="id" title="notation"><:]</span></a>.<br/> +<span class="id" title="keyword">Canonical</span> <span class="id" title="var">ordinal_eqType</span> := <span class="id" title="keyword">Eval</span> <span class="id" title="tactic">hnf</span> <span class="id" title="tactic">in</span> <a class="idref" href="mathcomp.ssreflect.eqtype.html#Equality.Exports.EqType"><span class="id" title="abbreviation">EqType</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#ordinal"><span class="id" title="inductive">ordinal</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#ordinal_eqMixin"><span class="id" title="definition">ordinal_eqMixin</span></a>.<br/> +<span class="id" title="keyword">Definition</span> <a name="ordinal_choiceMixin"><span class="id" title="definition">ordinal_choiceMixin</span></a> := <a class="idref" href="mathcomp.ssreflect.choice.html#6c8b2d90ff1fbb8e9926bbf12495cb70"><span class="id" title="notation">[</span></a><a class="idref" href="mathcomp.ssreflect.choice.html#6c8b2d90ff1fbb8e9926bbf12495cb70"><span class="id" title="notation">choiceMixin</span></a> <a class="idref" href="mathcomp.ssreflect.choice.html#6c8b2d90ff1fbb8e9926bbf12495cb70"><span class="id" title="notation">of</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#ordinal"><span class="id" title="inductive">ordinal</span></a> <a class="idref" href="mathcomp.ssreflect.choice.html#6c8b2d90ff1fbb8e9926bbf12495cb70"><span class="id" title="notation">by</span></a> <a class="idref" href="mathcomp.ssreflect.choice.html#6c8b2d90ff1fbb8e9926bbf12495cb70"><span class="id" title="notation"><:]</span></a>.<br/> +<span class="id" title="keyword">Canonical</span> <span class="id" title="var">ordinal_choiceType</span> :=<br/> + <span class="id" title="keyword">Eval</span> <span class="id" title="tactic">hnf</span> <span class="id" title="tactic">in</span> <a class="idref" href="mathcomp.ssreflect.choice.html#Choice.Exports.ChoiceType"><span class="id" title="abbreviation">ChoiceType</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#ordinal"><span class="id" title="inductive">ordinal</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#ordinal_choiceMixin"><span class="id" title="definition">ordinal_choiceMixin</span></a>.<br/> +<span class="id" title="keyword">Definition</span> <a name="ordinal_countMixin"><span class="id" title="definition">ordinal_countMixin</span></a> := <a class="idref" href="mathcomp.ssreflect.choice.html#99c739c8f4212f142296b27d3077c65e"><span class="id" title="notation">[</span></a><a class="idref" href="mathcomp.ssreflect.choice.html#99c739c8f4212f142296b27d3077c65e"><span class="id" title="notation">countMixin</span></a> <a class="idref" href="mathcomp.ssreflect.choice.html#99c739c8f4212f142296b27d3077c65e"><span class="id" title="notation">of</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#ordinal"><span class="id" title="inductive">ordinal</span></a> <a class="idref" href="mathcomp.ssreflect.choice.html#99c739c8f4212f142296b27d3077c65e"><span class="id" title="notation">by</span></a> <a class="idref" href="mathcomp.ssreflect.choice.html#99c739c8f4212f142296b27d3077c65e"><span class="id" title="notation"><:]</span></a>.<br/> +<span class="id" title="keyword">Canonical</span> <span class="id" title="var">ordinal_countType</span> := <span class="id" title="keyword">Eval</span> <span class="id" title="tactic">hnf</span> <span class="id" title="tactic">in</span> <a class="idref" href="mathcomp.ssreflect.choice.html#Countable.Exports.CountType"><span class="id" title="abbreviation">CountType</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#ordinal"><span class="id" title="inductive">ordinal</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#ordinal_countMixin"><span class="id" title="definition">ordinal_countMixin</span></a>.<br/> +<span class="id" title="keyword">Canonical</span> <span class="id" title="var">ordinal_subCountType</span> := <a class="idref" href="mathcomp.ssreflect.choice.html#8a7192fa64a42310658fd5be07ae4fcc"><span class="id" title="notation">[</span></a><a class="idref" href="mathcomp.ssreflect.choice.html#8a7192fa64a42310658fd5be07ae4fcc"><span class="id" title="notation">subCountType</span></a> <a class="idref" href="mathcomp.ssreflect.choice.html#8a7192fa64a42310658fd5be07ae4fcc"><span class="id" title="notation">of</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#ordinal"><span class="id" title="inductive">ordinal</span></a><a class="idref" href="mathcomp.ssreflect.choice.html#8a7192fa64a42310658fd5be07ae4fcc"><span class="id" title="notation">]</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="ltn_ord"><span class="id" title="lemma">ltn_ord</span></a> (<span class="id" title="var">i</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#ordinal"><span class="id" title="inductive">ordinal</span></a>) : <a class="idref" href="mathcomp.ssreflect.fintype.html#i"><span class="id" title="variable">i</span></a> <a class="idref" href="mathcomp.ssreflect.ssrnat.html#989c98e7ddd65d5bf37c334ff2076de8"><span class="id" title="notation"><</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#OrdinalSub.n"><span class="id" title="variable">n</span></a>. <br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="ord_inj"><span class="id" title="lemma">ord_inj</span></a> : <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrfun.html#injective"><span class="id" title="definition">injective</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#nat_of_ord"><span class="id" title="definition">nat_of_ord</span></a>. <br/> + +<br/> +<span class="id" title="keyword">Definition</span> <a name="ord_enum"><span class="id" title="definition">ord_enum</span></a> : <a class="idref" href="mathcomp.ssreflect.seq.html#seq"><span class="id" title="abbreviation">seq</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#ordinal"><span class="id" title="inductive">ordinal</span></a> := <a class="idref" href="mathcomp.ssreflect.seq.html#pmap"><span class="id" title="definition">pmap</span></a> <a class="idref" href="mathcomp.ssreflect.eqtype.html#insub"><span class="id" title="definition">insub</span></a> (<a class="idref" href="mathcomp.ssreflect.seq.html#iota"><span class="id" title="definition">iota</span></a> 0 <a class="idref" href="mathcomp.ssreflect.fintype.html#OrdinalSub.n"><span class="id" title="variable">n</span></a>).<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="val_ord_enum"><span class="id" title="lemma">val_ord_enum</span></a> : <a class="idref" href="mathcomp.ssreflect.seq.html#map"><span class="id" title="definition">map</span></a> <a class="idref" href="mathcomp.ssreflect.eqtype.html#val"><span class="id" title="projection">val</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#ord_enum"><span class="id" title="definition">ord_enum</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.ssreflect.seq.html#iota"><span class="id" title="definition">iota</span></a> 0 <a class="idref" href="mathcomp.ssreflect.fintype.html#OrdinalSub.n"><span class="id" title="variable">n</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="ord_enum_uniq"><span class="id" title="lemma">ord_enum_uniq</span></a> : <a class="idref" href="mathcomp.ssreflect.seq.html#uniq"><span class="id" title="definition">uniq</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#ord_enum"><span class="id" title="definition">ord_enum</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="mem_ord_enum"><span class="id" title="lemma">mem_ord_enum</span></a> <span class="id" title="var">i</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#i"><span class="id" title="variable">i</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#46c9e8232fa09401e24f1934bb65029f"><span class="id" title="notation">\</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#46c9e8232fa09401e24f1934bb65029f"><span class="id" title="notation">in</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#ord_enum"><span class="id" title="definition">ord_enum</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Definition</span> <a name="ordinal_finMixin"><span class="id" title="definition">ordinal_finMixin</span></a> :=<br/> + <span class="id" title="keyword">Eval</span> <span class="id" title="tactic">hnf</span> <span class="id" title="tactic">in</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#UniqFinMixin"><span class="id" title="abbreviation">UniqFinMixin</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#ord_enum_uniq"><span class="id" title="lemma">ord_enum_uniq</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#mem_ord_enum"><span class="id" title="lemma">mem_ord_enum</span></a>.<br/> +<span class="id" title="keyword">Canonical</span> <span class="id" title="var">ordinal_finType</span> := <span class="id" title="keyword">Eval</span> <span class="id" title="tactic">hnf</span> <span class="id" title="tactic">in</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#FinType"><span class="id" title="abbreviation">FinType</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#ordinal"><span class="id" title="inductive">ordinal</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#ordinal_finMixin"><span class="id" title="definition">ordinal_finMixin</span></a>.<br/> +<span class="id" title="keyword">Canonical</span> <span class="id" title="var">ordinal_subFinType</span> := <span class="id" title="keyword">Eval</span> <span class="id" title="tactic">hnf</span> <span class="id" title="tactic">in</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#a701c7b60b4a16f07950761d8bf90924"><span class="id" title="notation">[</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#a701c7b60b4a16f07950761d8bf90924"><span class="id" title="notation">subFinType</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#a701c7b60b4a16f07950761d8bf90924"><span class="id" title="notation">of</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#ordinal"><span class="id" title="inductive">ordinal</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#a701c7b60b4a16f07950761d8bf90924"><span class="id" title="notation">]</span></a>.<br/> + +<br/> +<span class="id" title="keyword">End</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#OrdinalSub"><span class="id" title="section">OrdinalSub</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Notation</span> <a name="9de6d53cccc27f521f3ab56b38159140"><span class="id" title="notation">"</span></a>''I_' n" := (<a class="idref" href="mathcomp.ssreflect.fintype.html#ordinal"><span class="id" title="inductive">ordinal</span></a> <span class="id" title="var">n</span>)<br/> + (<span class="id" title="tactic">at</span> <span class="id" title="keyword">level</span> 8, <span class="id" title="var">n</span> <span class="id" title="tactic">at</span> <span class="id" title="keyword">level</span> 2, <span class="id" title="var">format</span> "''I_' n").<br/> + +<br/> +<span class="id" title="keyword">Hint Resolve</span> <span class="id" title="var">ltn_ord</span>.<br/> + +<br/> +<span class="id" title="keyword">Section</span> <a name="OrdinalEnum"><span class="id" title="section">OrdinalEnum</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Variable</span> <a name="OrdinalEnum.n"><span class="id" title="variable">n</span></a> : <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Datatypes.html#nat"><span class="id" title="inductive">nat</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="val_enum_ord"><span class="id" title="lemma">val_enum_ord</span></a> : <a class="idref" href="mathcomp.ssreflect.seq.html#map"><span class="id" title="definition">map</span></a> <a class="idref" href="mathcomp.ssreflect.eqtype.html#val"><span class="id" title="projection">val</span></a> (<a class="idref" href="mathcomp.ssreflect.fintype.html#enum"><span class="id" title="abbreviation">enum</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#9de6d53cccc27f521f3ab56b38159140"><span class="id" title="notation">'</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#9de6d53cccc27f521f3ab56b38159140"><span class="id" title="notation">I_n</span></a>) <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.ssreflect.seq.html#iota"><span class="id" title="definition">iota</span></a> 0 <a class="idref" href="mathcomp.ssreflect.fintype.html#OrdinalEnum.n"><span class="id" title="variable">n</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="size_enum_ord"><span class="id" title="lemma">size_enum_ord</span></a> : <a class="idref" href="mathcomp.ssreflect.seq.html#size"><span class="id" title="definition">size</span></a> (<a class="idref" href="mathcomp.ssreflect.fintype.html#enum"><span class="id" title="abbreviation">enum</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#9de6d53cccc27f521f3ab56b38159140"><span class="id" title="notation">'</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#9de6d53cccc27f521f3ab56b38159140"><span class="id" title="notation">I_n</span></a>) <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#OrdinalEnum.n"><span class="id" title="variable">n</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="card_ord"><span class="id" title="lemma">card_ord</span></a> : <a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">#|</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#9de6d53cccc27f521f3ab56b38159140"><span class="id" title="notation">'</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#9de6d53cccc27f521f3ab56b38159140"><span class="id" title="notation">I_n</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">|</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#OrdinalEnum.n"><span class="id" title="variable">n</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="nth_enum_ord"><span class="id" title="lemma">nth_enum_ord</span></a> <span class="id" title="var">i0</span> <span class="id" title="var">m</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#m"><span class="id" title="variable">m</span></a> <a class="idref" href="mathcomp.ssreflect.ssrnat.html#989c98e7ddd65d5bf37c334ff2076de8"><span class="id" title="notation"><</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#OrdinalEnum.n"><span class="id" title="variable">n</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> <a class="idref" href="mathcomp.ssreflect.seq.html#nth"><span class="id" title="definition">nth</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#i0"><span class="id" title="variable">i0</span></a> (<a class="idref" href="mathcomp.ssreflect.fintype.html#enum"><span class="id" title="abbreviation">enum</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#9de6d53cccc27f521f3ab56b38159140"><span class="id" title="notation">'</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#9de6d53cccc27f521f3ab56b38159140"><span class="id" title="notation">I_n</span></a>) <a class="idref" href="mathcomp.ssreflect.fintype.html#m"><span class="id" title="variable">m</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#8f9364556521ebb498093f28eea2240f"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#m"><span class="id" title="variable">m</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#8f9364556521ebb498093f28eea2240f"><span class="id" title="notation">:></span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Datatypes.html#nat"><span class="id" title="inductive">nat</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="nth_ord_enum"><span class="id" title="lemma">nth_ord_enum</span></a> (<span class="id" title="var">i0</span> <span class="id" title="var">i</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#9de6d53cccc27f521f3ab56b38159140"><span class="id" title="notation">'</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#9de6d53cccc27f521f3ab56b38159140"><span class="id" title="notation">I_n</span></a>) : <a class="idref" href="mathcomp.ssreflect.seq.html#nth"><span class="id" title="definition">nth</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#i0"><span class="id" title="variable">i0</span></a> (<a class="idref" href="mathcomp.ssreflect.fintype.html#enum"><span class="id" title="abbreviation">enum</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#9de6d53cccc27f521f3ab56b38159140"><span class="id" title="notation">'</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#9de6d53cccc27f521f3ab56b38159140"><span class="id" title="notation">I_n</span></a>) <a class="idref" href="mathcomp.ssreflect.fintype.html#i"><span class="id" title="variable">i</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#i"><span class="id" title="variable">i</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="index_enum_ord"><span class="id" title="lemma">index_enum_ord</span></a> (<span class="id" title="var">i</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#9de6d53cccc27f521f3ab56b38159140"><span class="id" title="notation">'</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#9de6d53cccc27f521f3ab56b38159140"><span class="id" title="notation">I_n</span></a>) : <a class="idref" href="mathcomp.ssreflect.seq.html#index"><span class="id" title="definition">index</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#i"><span class="id" title="variable">i</span></a> (<a class="idref" href="mathcomp.ssreflect.fintype.html#enum"><span class="id" title="abbreviation">enum</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#9de6d53cccc27f521f3ab56b38159140"><span class="id" title="notation">'</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#9de6d53cccc27f521f3ab56b38159140"><span class="id" title="notation">I_n</span></a>) <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#i"><span class="id" title="variable">i</span></a>.<br/> + +<br/> +<span class="id" title="keyword">End</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#OrdinalEnum"><span class="id" title="section">OrdinalEnum</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="widen_ord_proof"><span class="id" title="lemma">widen_ord_proof</span></a> <span class="id" title="var">n</span> <span class="id" title="var">m</span> (<span class="id" title="var">i</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#9de6d53cccc27f521f3ab56b38159140"><span class="id" title="notation">'</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#9de6d53cccc27f521f3ab56b38159140"><span class="id" title="notation">I_n</span></a>) : <a class="idref" href="mathcomp.ssreflect.fintype.html#n"><span class="id" title="variable">n</span></a> <a class="idref" href="mathcomp.ssreflect.ssrnat.html#9b077c369e19739ef880736ba34623ff"><span class="id" title="notation">≤</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#m"><span class="id" title="variable">m</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#i"><span class="id" title="variable">i</span></a> <a class="idref" href="mathcomp.ssreflect.ssrnat.html#989c98e7ddd65d5bf37c334ff2076de8"><span class="id" title="notation"><</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#m"><span class="id" title="variable">m</span></a>.<br/> + <span class="id" title="keyword">Definition</span> <a name="widen_ord"><span class="id" title="definition">widen_ord</span></a> <span class="id" title="var">n</span> <span class="id" title="var">m</span> <span class="id" title="var">le_n_m</span> <span class="id" title="var">i</span> := <a class="idref" href="mathcomp.ssreflect.fintype.html#Ordinal"><span class="id" title="constructor">Ordinal</span></a> (@<a class="idref" href="mathcomp.ssreflect.fintype.html#widen_ord_proof"><span class="id" title="lemma">widen_ord_proof</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#n"><span class="id" title="variable">n</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#m"><span class="id" title="variable">m</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#i"><span class="id" title="variable">i</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#le_n_m"><span class="id" title="variable">le_n_m</span></a>).<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="cast_ord_proof"><span class="id" title="lemma">cast_ord_proof</span></a> <span class="id" title="var">n</span> <span class="id" title="var">m</span> (<span class="id" title="var">i</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#9de6d53cccc27f521f3ab56b38159140"><span class="id" title="notation">'</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#9de6d53cccc27f521f3ab56b38159140"><span class="id" title="notation">I_n</span></a>) : <a class="idref" href="mathcomp.ssreflect.fintype.html#n"><span class="id" title="variable">n</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#m"><span class="id" title="variable">m</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#i"><span class="id" title="variable">i</span></a> <a class="idref" href="mathcomp.ssreflect.ssrnat.html#989c98e7ddd65d5bf37c334ff2076de8"><span class="id" title="notation"><</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#m"><span class="id" title="variable">m</span></a>.<br/> + <span class="id" title="keyword">Definition</span> <a name="cast_ord"><span class="id" title="definition">cast_ord</span></a> <span class="id" title="var">n</span> <span class="id" title="var">m</span> <span class="id" title="var">eq_n_m</span> <span class="id" title="var">i</span> := <a class="idref" href="mathcomp.ssreflect.fintype.html#Ordinal"><span class="id" title="constructor">Ordinal</span></a> (@<a class="idref" href="mathcomp.ssreflect.fintype.html#cast_ord_proof"><span class="id" title="lemma">cast_ord_proof</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#n"><span class="id" title="variable">n</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#m"><span class="id" title="variable">m</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#i"><span class="id" title="variable">i</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#eq_n_m"><span class="id" title="variable">eq_n_m</span></a>).<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="cast_ord_id"><span class="id" title="lemma">cast_ord_id</span></a> <span class="id" title="var">n</span> <span class="id" title="var">eq_n</span> <span class="id" title="var">i</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#cast_ord"><span class="id" title="definition">cast_ord</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#eq_n"><span class="id" title="variable">eq_n</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#i"><span class="id" title="variable">i</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#8f9364556521ebb498093f28eea2240f"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#i"><span class="id" title="variable">i</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#8f9364556521ebb498093f28eea2240f"><span class="id" title="notation">:></span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#9de6d53cccc27f521f3ab56b38159140"><span class="id" title="notation">'</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#9de6d53cccc27f521f3ab56b38159140"><span class="id" title="notation">I_n</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="cast_ord_comp"><span class="id" title="lemma">cast_ord_comp</span></a> <span class="id" title="var">n1</span> <span class="id" title="var">n2</span> <span class="id" title="var">n3</span> <span class="id" title="var">eq_n2</span> <span class="id" title="var">eq_n3</span> <span class="id" title="var">i</span> :<br/> + @<a class="idref" href="mathcomp.ssreflect.fintype.html#cast_ord"><span class="id" title="definition">cast_ord</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#n2"><span class="id" title="variable">n2</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#n3"><span class="id" title="variable">n3</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#eq_n3"><span class="id" title="variable">eq_n3</span></a> (@<a class="idref" href="mathcomp.ssreflect.fintype.html#cast_ord"><span class="id" title="definition">cast_ord</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#n1"><span class="id" title="variable">n1</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#n2"><span class="id" title="variable">n2</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#eq_n2"><span class="id" title="variable">eq_n2</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#i"><span class="id" title="variable">i</span></a>) <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a><br/> + <a class="idref" href="mathcomp.ssreflect.fintype.html#cast_ord"><span class="id" title="definition">cast_ord</span></a> (<a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrfun.html#etrans"><span class="id" title="definition">etrans</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#eq_n2"><span class="id" title="variable">eq_n2</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#eq_n3"><span class="id" title="variable">eq_n3</span></a>) <a class="idref" href="mathcomp.ssreflect.fintype.html#i"><span class="id" title="variable">i</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="cast_ordK"><span class="id" title="lemma">cast_ordK</span></a> <span class="id" title="var">n1</span> <span class="id" title="var">n2</span> <span class="id" title="var">eq_n</span> :<br/> + <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrfun.html#cancel"><span class="id" title="definition">cancel</span></a> (@<a class="idref" href="mathcomp.ssreflect.fintype.html#cast_ord"><span class="id" title="definition">cast_ord</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#n1"><span class="id" title="variable">n1</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#n2"><span class="id" title="variable">n2</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#eq_n"><span class="id" title="variable">eq_n</span></a>) (<a class="idref" href="mathcomp.ssreflect.fintype.html#cast_ord"><span class="id" title="definition">cast_ord</span></a> (<a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrfun.html#esym"><span class="id" title="definition">esym</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#eq_n"><span class="id" title="variable">eq_n</span></a>)).<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="cast_ordKV"><span class="id" title="lemma">cast_ordKV</span></a> <span class="id" title="var">n1</span> <span class="id" title="var">n2</span> <span class="id" title="var">eq_n</span> :<br/> + <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrfun.html#cancel"><span class="id" title="definition">cancel</span></a> (<a class="idref" href="mathcomp.ssreflect.fintype.html#cast_ord"><span class="id" title="definition">cast_ord</span></a> (<a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrfun.html#esym"><span class="id" title="definition">esym</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#eq_n"><span class="id" title="variable">eq_n</span></a>)) (@<a class="idref" href="mathcomp.ssreflect.fintype.html#cast_ord"><span class="id" title="definition">cast_ord</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#n1"><span class="id" title="variable">n1</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#n2"><span class="id" title="variable">n2</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#eq_n"><span class="id" title="variable">eq_n</span></a>).<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="cast_ord_inj"><span class="id" title="lemma">cast_ord_inj</span></a> <span class="id" title="var">n1</span> <span class="id" title="var">n2</span> <span class="id" title="var">eq_n</span> : <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrfun.html#injective"><span class="id" title="definition">injective</span></a> (@<a class="idref" href="mathcomp.ssreflect.fintype.html#cast_ord"><span class="id" title="definition">cast_ord</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#n1"><span class="id" title="variable">n1</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#n2"><span class="id" title="variable">n2</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#eq_n"><span class="id" title="variable">eq_n</span></a>).<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="rev_ord_proof"><span class="id" title="lemma">rev_ord_proof</span></a> <span class="id" title="var">n</span> (<span class="id" title="var">i</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#9de6d53cccc27f521f3ab56b38159140"><span class="id" title="notation">'</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#9de6d53cccc27f521f3ab56b38159140"><span class="id" title="notation">I_n</span></a>) : <a class="idref" href="mathcomp.ssreflect.fintype.html#n"><span class="id" title="variable">n</span></a> <a class="idref" href="mathcomp.ssreflect.ssrnat.html#9482aae3d3b06e249765c1225dbb8cbb"><span class="id" title="notation">-</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#i"><span class="id" title="variable">i</span></a><a class="idref" href="mathcomp.ssreflect.ssrnat.html#361454269931ea8643f7b402f2ab7222"><span class="id" title="notation">.+1</span></a> <a class="idref" href="mathcomp.ssreflect.ssrnat.html#989c98e7ddd65d5bf37c334ff2076de8"><span class="id" title="notation"><</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#n"><span class="id" title="variable">n</span></a>.<br/> + <span class="id" title="keyword">Definition</span> <a name="rev_ord"><span class="id" title="definition">rev_ord</span></a> <span class="id" title="var">n</span> <span class="id" title="var">i</span> := <a class="idref" href="mathcomp.ssreflect.fintype.html#Ordinal"><span class="id" title="constructor">Ordinal</span></a> (@<a class="idref" href="mathcomp.ssreflect.fintype.html#rev_ord_proof"><span class="id" title="lemma">rev_ord_proof</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#n"><span class="id" title="variable">n</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#i"><span class="id" title="variable">i</span></a>).<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="rev_ordK"><span class="id" title="lemma">rev_ordK</span></a> <span class="id" title="var">n</span> : <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrfun.html#involutive"><span class="id" title="definition">involutive</span></a> (@<a class="idref" href="mathcomp.ssreflect.fintype.html#rev_ord"><span class="id" title="definition">rev_ord</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#n"><span class="id" title="variable">n</span></a>).<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="rev_ord_inj"><span class="id" title="lemma">rev_ord_inj</span></a> {<span class="id" title="var">n</span>} : <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrfun.html#injective"><span class="id" title="definition">injective</span></a> (@<a class="idref" href="mathcomp.ssreflect.fintype.html#rev_ord"><span class="id" title="definition">rev_ord</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#n"><span class="id" title="variable">n</span></a>).<br/> + +<br/> +</div> + +<div class="doc"> + bijection between any finType T and the Ordinal finType of its cardinal +</div> +<div class="code"> +<span class="id" title="keyword">Section</span> <a name="EnumRank"><span class="id" title="section">EnumRank</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Variable</span> <a name="EnumRank.T"><span class="id" title="variable">T</span></a> : <a class="idref" href="mathcomp.ssreflect.fintype.html#finType"><span class="id" title="abbreviation">finType</span></a>.<br/> +<span class="id" title="keyword">Implicit</span> <span class="id" title="keyword">Type</span> <span class="id" title="var">A</span> : <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#pred"><span class="id" title="definition">pred</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#EnumRank.T"><span class="id" title="variable">T</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="enum_rank_subproof"><span class="id" title="lemma">enum_rank_subproof</span></a> <span class="id" title="var">x0</span> <span class="id" title="var">A</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#x0"><span class="id" title="variable">x0</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#46c9e8232fa09401e24f1934bb65029f"><span class="id" title="notation">\</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#46c9e8232fa09401e24f1934bb65029f"><span class="id" title="notation">in</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> 0 <a class="idref" href="mathcomp.ssreflect.ssrnat.html#989c98e7ddd65d5bf37c334ff2076de8"><span class="id" title="notation"><</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">#|</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">|</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Definition</span> <a name="enum_rank_in"><span class="id" title="definition">enum_rank_in</span></a> <span class="id" title="var">x0</span> <span class="id" title="var">A</span> (<span class="id" title="var">Ax0</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#x0"><span class="id" title="variable">x0</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#46c9e8232fa09401e24f1934bb65029f"><span class="id" title="notation">\</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#46c9e8232fa09401e24f1934bb65029f"><span class="id" title="notation">in</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a>) <span class="id" title="var">x</span> :=<br/> + <a class="idref" href="mathcomp.ssreflect.eqtype.html#insubd"><span class="id" title="definition">insubd</span></a> (<a class="idref" href="mathcomp.ssreflect.fintype.html#Ordinal"><span class="id" title="constructor">Ordinal</span></a> (@<a class="idref" href="mathcomp.ssreflect.fintype.html#enum_rank_subproof"><span class="id" title="lemma">enum_rank_subproof</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x0"><span class="id" title="variable">x0</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrfun.html#3f6d75f5a9cb81b61e8423a7aac22056"><span class="id" title="notation">[</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrfun.html#3f6d75f5a9cb81b61e8423a7aac22056"><span class="id" title="notation">eta</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrfun.html#3f6d75f5a9cb81b61e8423a7aac22056"><span class="id" title="notation">]</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#Ax0"><span class="id" title="variable">Ax0</span></a>)) (<a class="idref" href="mathcomp.ssreflect.seq.html#index"><span class="id" title="definition">index</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a> (<a class="idref" href="mathcomp.ssreflect.fintype.html#enum"><span class="id" title="abbreviation">enum</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a>)).<br/> + +<br/> +<span class="id" title="keyword">Definition</span> <a name="enum_rank"><span class="id" title="definition">enum_rank</span></a> <span class="id" title="var">x</span> := @<a class="idref" href="mathcomp.ssreflect.fintype.html#enum_rank_in"><span class="id" title="definition">enum_rank_in</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#EnumRank.T"><span class="id" title="variable">T</span></a> (<a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrfun.html#erefl"><span class="id" title="abbreviation">erefl</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Datatypes.html#true"><span class="id" title="constructor">true</span></a>) <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="enum_default"><span class="id" title="lemma">enum_default</span></a> <span class="id" title="var">A</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#9de6d53cccc27f521f3ab56b38159140"><span class="id" title="notation">'</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#9de6d53cccc27f521f3ab56b38159140"><span class="id" title="notation">I_</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#9de6d53cccc27f521f3ab56b38159140"><span class="id" title="notation">(</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">#|</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">|</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#9de6d53cccc27f521f3ab56b38159140"><span class="id" title="notation">)</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#EnumRank.T"><span class="id" title="variable">T</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Definition</span> <a name="enum_val"><span class="id" title="definition">enum_val</span></a> <span class="id" title="var">A</span> <span class="id" title="var">i</span> := <a class="idref" href="mathcomp.ssreflect.seq.html#nth"><span class="id" title="definition">nth</span></a> (@<a class="idref" href="mathcomp.ssreflect.fintype.html#enum_default"><span class="id" title="lemma">enum_default</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrfun.html#3f6d75f5a9cb81b61e8423a7aac22056"><span class="id" title="notation">[</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrfun.html#3f6d75f5a9cb81b61e8423a7aac22056"><span class="id" title="notation">eta</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrfun.html#3f6d75f5a9cb81b61e8423a7aac22056"><span class="id" title="notation">]</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#i"><span class="id" title="variable">i</span></a>) (<a class="idref" href="mathcomp.ssreflect.fintype.html#enum"><span class="id" title="abbreviation">enum</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a>) <a class="idref" href="mathcomp.ssreflect.fintype.html#i"><span class="id" title="variable">i</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="enum_valP"><span class="id" title="lemma">enum_valP</span></a> <span class="id" title="var">A</span> <span class="id" title="var">i</span> : @<a class="idref" href="mathcomp.ssreflect.fintype.html#enum_val"><span class="id" title="definition">enum_val</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#i"><span class="id" title="variable">i</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#46c9e8232fa09401e24f1934bb65029f"><span class="id" title="notation">\</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#46c9e8232fa09401e24f1934bb65029f"><span class="id" title="notation">in</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="enum_val_nth"><span class="id" title="lemma">enum_val_nth</span></a> <span class="id" title="var">A</span> <span class="id" title="var">x</span> <span class="id" title="var">i</span> : @<a class="idref" href="mathcomp.ssreflect.fintype.html#enum_val"><span class="id" title="definition">enum_val</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#i"><span class="id" title="variable">i</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.ssreflect.seq.html#nth"><span class="id" title="definition">nth</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a> (<a class="idref" href="mathcomp.ssreflect.fintype.html#enum"><span class="id" title="abbreviation">enum</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a>) <a class="idref" href="mathcomp.ssreflect.fintype.html#i"><span class="id" title="variable">i</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="nth_image"><span class="id" title="lemma">nth_image</span></a> <span class="id" title="var">T'</span> <span class="id" title="var">y0</span> (<span class="id" title="var">f</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#EnumRank.T"><span class="id" title="variable">T</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#T'"><span class="id" title="variable">T'</span></a>) <span class="id" title="var">A</span> (<span class="id" title="var">i</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#9de6d53cccc27f521f3ab56b38159140"><span class="id" title="notation">'</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#9de6d53cccc27f521f3ab56b38159140"><span class="id" title="notation">I_</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">#|</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">|</span></a>) :<br/> + <a class="idref" href="mathcomp.ssreflect.seq.html#nth"><span class="id" title="definition">nth</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#y0"><span class="id" title="variable">y0</span></a> (<a class="idref" href="mathcomp.ssreflect.fintype.html#image"><span class="id" title="abbreviation">image</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#f"><span class="id" title="variable">f</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a>) <a class="idref" href="mathcomp.ssreflect.fintype.html#i"><span class="id" title="variable">i</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#f"><span class="id" title="variable">f</span></a> (<a class="idref" href="mathcomp.ssreflect.fintype.html#enum_val"><span class="id" title="definition">enum_val</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#i"><span class="id" title="variable">i</span></a>).<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="nth_codom"><span class="id" title="lemma">nth_codom</span></a> <span class="id" title="var">T'</span> <span class="id" title="var">y0</span> (<span class="id" title="var">f</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#EnumRank.T"><span class="id" title="variable">T</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#T'"><span class="id" title="variable">T'</span></a>) (<span class="id" title="var">i</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#9de6d53cccc27f521f3ab56b38159140"><span class="id" title="notation">'</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#9de6d53cccc27f521f3ab56b38159140"><span class="id" title="notation">I_</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">#|</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#EnumRank.T"><span class="id" title="variable">T</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">|</span></a>) :<br/> + <a class="idref" href="mathcomp.ssreflect.seq.html#nth"><span class="id" title="definition">nth</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#y0"><span class="id" title="variable">y0</span></a> (<a class="idref" href="mathcomp.ssreflect.fintype.html#codom"><span class="id" title="definition">codom</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#f"><span class="id" title="variable">f</span></a>) <a class="idref" href="mathcomp.ssreflect.fintype.html#i"><span class="id" title="variable">i</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#f"><span class="id" title="variable">f</span></a> (<a class="idref" href="mathcomp.ssreflect.fintype.html#enum_val"><span class="id" title="definition">enum_val</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#i"><span class="id" title="variable">i</span></a>).<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="nth_enum_rank_in"><span class="id" title="lemma">nth_enum_rank_in</span></a> <span class="id" title="var">x00</span> <span class="id" title="var">x0</span> <span class="id" title="var">A</span> <span class="id" title="var">Ax0</span> :<br/> + <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#5c59b35a0b51db520cf1fba473ecf127"><span class="id" title="notation">{</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#5c59b35a0b51db520cf1fba473ecf127"><span class="id" title="notation">in</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#5c59b35a0b51db520cf1fba473ecf127"><span class="id" title="notation">,</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrfun.html#cancel"><span class="id" title="definition">cancel</span></a> (@<a class="idref" href="mathcomp.ssreflect.fintype.html#enum_rank_in"><span class="id" title="definition">enum_rank_in</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x0"><span class="id" title="variable">x0</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#Ax0"><span class="id" title="variable">Ax0</span></a>) (<a class="idref" href="mathcomp.ssreflect.seq.html#nth"><span class="id" title="definition">nth</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x00"><span class="id" title="variable">x00</span></a> (<a class="idref" href="mathcomp.ssreflect.fintype.html#enum"><span class="id" title="abbreviation">enum</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a>))<a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#5c59b35a0b51db520cf1fba473ecf127"><span class="id" title="notation">}</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="nth_enum_rank"><span class="id" title="lemma">nth_enum_rank</span></a> <span class="id" title="var">x0</span> : <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrfun.html#cancel"><span class="id" title="definition">cancel</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#enum_rank"><span class="id" title="definition">enum_rank</span></a> (<a class="idref" href="mathcomp.ssreflect.seq.html#nth"><span class="id" title="definition">nth</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x0"><span class="id" title="variable">x0</span></a> (<a class="idref" href="mathcomp.ssreflect.fintype.html#enum"><span class="id" title="abbreviation">enum</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#EnumRank.T"><span class="id" title="variable">T</span></a>)).<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="enum_rankK_in"><span class="id" title="lemma">enum_rankK_in</span></a> <span class="id" title="var">x0</span> <span class="id" title="var">A</span> <span class="id" title="var">Ax0</span> :<br/> + <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#5c59b35a0b51db520cf1fba473ecf127"><span class="id" title="notation">{</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#5c59b35a0b51db520cf1fba473ecf127"><span class="id" title="notation">in</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#5c59b35a0b51db520cf1fba473ecf127"><span class="id" title="notation">,</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrfun.html#cancel"><span class="id" title="definition">cancel</span></a> (@<a class="idref" href="mathcomp.ssreflect.fintype.html#enum_rank_in"><span class="id" title="definition">enum_rank_in</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x0"><span class="id" title="variable">x0</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#Ax0"><span class="id" title="variable">Ax0</span></a>) <a class="idref" href="mathcomp.ssreflect.fintype.html#enum_val"><span class="id" title="definition">enum_val</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#5c59b35a0b51db520cf1fba473ecf127"><span class="id" title="notation">}</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="enum_rankK"><span class="id" title="lemma">enum_rankK</span></a> : <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrfun.html#cancel"><span class="id" title="definition">cancel</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#enum_rank"><span class="id" title="definition">enum_rank</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#enum_val"><span class="id" title="definition">enum_val</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="enum_valK_in"><span class="id" title="lemma">enum_valK_in</span></a> <span class="id" title="var">x0</span> <span class="id" title="var">A</span> <span class="id" title="var">Ax0</span> : <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrfun.html#cancel"><span class="id" title="definition">cancel</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#enum_val"><span class="id" title="definition">enum_val</span></a> (@<a class="idref" href="mathcomp.ssreflect.fintype.html#enum_rank_in"><span class="id" title="definition">enum_rank_in</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x0"><span class="id" title="variable">x0</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#Ax0"><span class="id" title="variable">Ax0</span></a>).<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="enum_valK"><span class="id" title="lemma">enum_valK</span></a> : <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrfun.html#cancel"><span class="id" title="definition">cancel</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#enum_val"><span class="id" title="definition">enum_val</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#enum_rank"><span class="id" title="definition">enum_rank</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="enum_rank_inj"><span class="id" title="lemma">enum_rank_inj</span></a> : <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrfun.html#injective"><span class="id" title="definition">injective</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#enum_rank"><span class="id" title="definition">enum_rank</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="enum_val_inj"><span class="id" title="lemma">enum_val_inj</span></a> <span class="id" title="var">A</span> : <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrfun.html#injective"><span class="id" title="definition">injective</span></a> (@<a class="idref" href="mathcomp.ssreflect.fintype.html#enum_val"><span class="id" title="definition">enum_val</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a>).<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="enum_val_bij_in"><span class="id" title="lemma">enum_val_bij_in</span></a> <span class="id" title="var">x0</span> <span class="id" title="var">A</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#x0"><span class="id" title="variable">x0</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#46c9e8232fa09401e24f1934bb65029f"><span class="id" title="notation">\</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#46c9e8232fa09401e24f1934bb65029f"><span class="id" title="notation">in</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#59b0bfb23a642e2d3d15d13178fc2b18"><span class="id" title="notation">{</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#59b0bfb23a642e2d3d15d13178fc2b18"><span class="id" title="notation">on</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#59b0bfb23a642e2d3d15d13178fc2b18"><span class="id" title="notation">,</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#59b0bfb23a642e2d3d15d13178fc2b18"><span class="id" title="notation">bijective</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#59b0bfb23a642e2d3d15d13178fc2b18"><span class="id" title="notation">(</span></a>@<a class="idref" href="mathcomp.ssreflect.fintype.html#enum_val"><span class="id" title="definition">enum_val</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#59b0bfb23a642e2d3d15d13178fc2b18"><span class="id" title="notation">)}</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="enum_rank_bij"><span class="id" title="lemma">enum_rank_bij</span></a> : <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrfun.html#bijective"><span class="id" title="inductive">bijective</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#enum_rank"><span class="id" title="definition">enum_rank</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="enum_val_bij"><span class="id" title="lemma">enum_val_bij</span></a> : <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrfun.html#bijective"><span class="id" title="inductive">bijective</span></a> (@<a class="idref" href="mathcomp.ssreflect.fintype.html#enum_val"><span class="id" title="definition">enum_val</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#EnumRank.T"><span class="id" title="variable">T</span></a>).<br/> + +<br/> +</div> + +<div class="doc"> + Due to the limitations of the Coq unification patterns, P can only be + inferred from the premise of this lemma, not its conclusion. As a result + this lemma will only be usable in forward chaining style. +</div> +<div class="code"> +<span class="id" title="keyword">Lemma</span> <a name="fin_all_exists"><span class="id" title="lemma">fin_all_exists</span></a> <span class="id" title="var">U</span> (<span class="id" title="var">P</span> : <span class="id" title="keyword">∀</span> <span class="id" title="var">x</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#EnumRank.T"><span class="id" title="variable">T</span></a>, <a class="idref" href="mathcomp.ssreflect.fintype.html#U"><span class="id" title="variable">U</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> <span class="id" title="keyword">Prop</span>) :<br/> + <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">(</span></a><span class="id" title="keyword">∀</span> <span class="id" title="var">x</span>, <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#84eb6d2849dbf3581b1c0c05add5f2d8"><span class="id" title="notation">∃</span></a> <span class="id" title="var">u</span><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#84eb6d2849dbf3581b1c0c05add5f2d8"><span class="id" title="notation">,</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#P"><span class="id" title="variable">P</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#u"><span class="id" title="variable">u</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">)</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">(</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#84eb6d2849dbf3581b1c0c05add5f2d8"><span class="id" title="notation">∃</span></a> <span class="id" title="var">u</span><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#84eb6d2849dbf3581b1c0c05add5f2d8"><span class="id" title="notation">,</span></a> <span class="id" title="keyword">∀</span> <span class="id" title="var">x</span>, <a class="idref" href="mathcomp.ssreflect.fintype.html#P"><span class="id" title="variable">P</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a> (<a class="idref" href="mathcomp.ssreflect.fintype.html#u"><span class="id" title="variable">u</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a>)<a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">)</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="fin_all_exists2"><span class="id" title="lemma">fin_all_exists2</span></a> <span class="id" title="var">U</span> (<span class="id" title="var">P</span> <span class="id" title="var">Q</span> : <span class="id" title="keyword">∀</span> <span class="id" title="var">x</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#EnumRank.T"><span class="id" title="variable">T</span></a>, <a class="idref" href="mathcomp.ssreflect.fintype.html#U"><span class="id" title="variable">U</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> <span class="id" title="keyword">Prop</span>) :<br/> + <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">(</span></a><span class="id" title="keyword">∀</span> <span class="id" title="var">x</span>, <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#28b18e493f7cb0bd8447607bdc385ff8"><span class="id" title="notation">exists2</span></a> <span class="id" title="var">u</span><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#28b18e493f7cb0bd8447607bdc385ff8"><span class="id" title="notation">,</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#P"><span class="id" title="variable">P</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#u"><span class="id" title="variable">u</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#28b18e493f7cb0bd8447607bdc385ff8"><span class="id" title="notation">&</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#Q"><span class="id" title="variable">Q</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#u"><span class="id" title="variable">u</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">)</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a><br/> + <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">(</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#28b18e493f7cb0bd8447607bdc385ff8"><span class="id" title="notation">exists2</span></a> <span class="id" title="var">u</span><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#28b18e493f7cb0bd8447607bdc385ff8"><span class="id" title="notation">,</span></a> <span class="id" title="keyword">∀</span> <span class="id" title="var">x</span>, <a class="idref" href="mathcomp.ssreflect.fintype.html#P"><span class="id" title="variable">P</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a> (<a class="idref" href="mathcomp.ssreflect.fintype.html#u"><span class="id" title="variable">u</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a>) <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#28b18e493f7cb0bd8447607bdc385ff8"><span class="id" title="notation">&</span></a> <span class="id" title="keyword">∀</span> <span class="id" title="var">x</span>, <a class="idref" href="mathcomp.ssreflect.fintype.html#Q"><span class="id" title="variable">Q</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a> (<a class="idref" href="mathcomp.ssreflect.fintype.html#u"><span class="id" title="variable">u</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a>)<a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">)</span></a>.<br/> + +<br/> +<span class="id" title="keyword">End</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#EnumRank"><span class="id" title="section">EnumRank</span></a>.<br/> + +<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="enum_rank_ord"><span class="id" title="lemma">enum_rank_ord</span></a> <span class="id" title="var">n</span> <span class="id" title="var">i</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#enum_rank"><span class="id" title="definition">enum_rank</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#i"><span class="id" title="variable">i</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#cast_ord"><span class="id" title="definition">cast_ord</span></a> (<a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrfun.html#esym"><span class="id" title="definition">esym</span></a> (<a class="idref" href="mathcomp.ssreflect.fintype.html#card_ord"><span class="id" title="lemma">card_ord</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#n"><span class="id" title="variable">n</span></a>)) <a class="idref" href="mathcomp.ssreflect.fintype.html#i"><span class="id" title="variable">i</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="enum_val_ord"><span class="id" title="lemma">enum_val_ord</span></a> <span class="id" title="var">n</span> <span class="id" title="var">i</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#enum_val"><span class="id" title="definition">enum_val</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#i"><span class="id" title="variable">i</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#cast_ord"><span class="id" title="definition">cast_ord</span></a> (<a class="idref" href="mathcomp.ssreflect.fintype.html#card_ord"><span class="id" title="lemma">card_ord</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#n"><span class="id" title="variable">n</span></a>) <a class="idref" href="mathcomp.ssreflect.fintype.html#i"><span class="id" title="variable">i</span></a>.<br/> + +<br/> +</div> + +<div class="doc"> + The integer bump / unbump operations. +</div> +<div class="code"> + +<br/> +<span class="id" title="keyword">Definition</span> <a name="bump"><span class="id" title="definition">bump</span></a> <span class="id" title="var">h</span> <span class="id" title="var">i</span> := <a class="idref" href="mathcomp.ssreflect.ssrnat.html#b3eea360671e1b32b18a26e15b3aace3"><span class="id" title="notation">(</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#h"><span class="id" title="variable">h</span></a> <a class="idref" href="mathcomp.ssreflect.ssrnat.html#9b077c369e19739ef880736ba34623ff"><span class="id" title="notation">≤</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#i"><span class="id" title="variable">i</span></a><a class="idref" href="mathcomp.ssreflect.ssrnat.html#b3eea360671e1b32b18a26e15b3aace3"><span class="id" title="notation">)</span></a> <a class="idref" href="mathcomp.ssreflect.ssrnat.html#b3eea360671e1b32b18a26e15b3aace3"><span class="id" title="notation">+</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#i"><span class="id" title="variable">i</span></a>.<br/> +<span class="id" title="keyword">Definition</span> <a name="unbump"><span class="id" title="definition">unbump</span></a> <span class="id" title="var">h</span> <span class="id" title="var">i</span> := <a class="idref" href="mathcomp.ssreflect.fintype.html#i"><span class="id" title="variable">i</span></a> <a class="idref" href="mathcomp.ssreflect.ssrnat.html#9482aae3d3b06e249765c1225dbb8cbb"><span class="id" title="notation">-</span></a> <a class="idref" href="mathcomp.ssreflect.ssrnat.html#9482aae3d3b06e249765c1225dbb8cbb"><span class="id" title="notation">(</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#h"><span class="id" title="variable">h</span></a> <a class="idref" href="mathcomp.ssreflect.ssrnat.html#989c98e7ddd65d5bf37c334ff2076de8"><span class="id" title="notation"><</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#i"><span class="id" title="variable">i</span></a><a class="idref" href="mathcomp.ssreflect.ssrnat.html#9482aae3d3b06e249765c1225dbb8cbb"><span class="id" title="notation">)</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="bumpK"><span class="id" title="lemma">bumpK</span></a> <span class="id" title="var">h</span> : <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrfun.html#cancel"><span class="id" title="definition">cancel</span></a> (<a class="idref" href="mathcomp.ssreflect.fintype.html#bump"><span class="id" title="definition">bump</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#h"><span class="id" title="variable">h</span></a>) (<a class="idref" href="mathcomp.ssreflect.fintype.html#unbump"><span class="id" title="definition">unbump</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#h"><span class="id" title="variable">h</span></a>).<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="neq_bump"><span class="id" title="lemma">neq_bump</span></a> <span class="id" title="var">h</span> <span class="id" title="var">i</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#h"><span class="id" title="variable">h</span></a> <a class="idref" href="mathcomp.ssreflect.eqtype.html#b1eeadc2feabc7422252baa895418c7b"><span class="id" title="notation">!=</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#bump"><span class="id" title="definition">bump</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#h"><span class="id" title="variable">h</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#i"><span class="id" title="variable">i</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="unbumpKcond"><span class="id" title="lemma">unbumpKcond</span></a> <span class="id" title="var">h</span> <span class="id" title="var">i</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#bump"><span class="id" title="definition">bump</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#h"><span class="id" title="variable">h</span></a> (<a class="idref" href="mathcomp.ssreflect.fintype.html#unbump"><span class="id" title="definition">unbump</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#h"><span class="id" title="variable">h</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#i"><span class="id" title="variable">i</span></a>) <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.ssreflect.ssrnat.html#b3eea360671e1b32b18a26e15b3aace3"><span class="id" title="notation">(</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#i"><span class="id" title="variable">i</span></a> <a class="idref" href="mathcomp.ssreflect.eqtype.html#17d28d004d0863cb022d4ce832ddaaae"><span class="id" title="notation">==</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#h"><span class="id" title="variable">h</span></a><a class="idref" href="mathcomp.ssreflect.ssrnat.html#b3eea360671e1b32b18a26e15b3aace3"><span class="id" title="notation">)</span></a> <a class="idref" href="mathcomp.ssreflect.ssrnat.html#b3eea360671e1b32b18a26e15b3aace3"><span class="id" title="notation">+</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#i"><span class="id" title="variable">i</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="unbumpK"><span class="id" title="lemma">unbumpK</span></a> <span class="id" title="var">h</span> : <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#5c59b35a0b51db520cf1fba473ecf127"><span class="id" title="notation">{</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#5c59b35a0b51db520cf1fba473ecf127"><span class="id" title="notation">in</span></a> <a class="idref" href="mathcomp.ssreflect.eqtype.html#predC1"><span class="id" title="definition">predC1</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#h"><span class="id" title="variable">h</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#5c59b35a0b51db520cf1fba473ecf127"><span class="id" title="notation">,</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrfun.html#cancel"><span class="id" title="definition">cancel</span></a> (<a class="idref" href="mathcomp.ssreflect.fintype.html#unbump"><span class="id" title="definition">unbump</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#h"><span class="id" title="variable">h</span></a>) (<a class="idref" href="mathcomp.ssreflect.fintype.html#bump"><span class="id" title="definition">bump</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#h"><span class="id" title="variable">h</span></a>)<a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#5c59b35a0b51db520cf1fba473ecf127"><span class="id" title="notation">}</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="bump_addl"><span class="id" title="lemma">bump_addl</span></a> <span class="id" title="var">h</span> <span class="id" title="var">i</span> <span class="id" title="var">k</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#bump"><span class="id" title="definition">bump</span></a> (<a class="idref" href="mathcomp.ssreflect.fintype.html#k"><span class="id" title="variable">k</span></a> <a class="idref" href="mathcomp.ssreflect.ssrnat.html#b3eea360671e1b32b18a26e15b3aace3"><span class="id" title="notation">+</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#h"><span class="id" title="variable">h</span></a>) (<a class="idref" href="mathcomp.ssreflect.fintype.html#k"><span class="id" title="variable">k</span></a> <a class="idref" href="mathcomp.ssreflect.ssrnat.html#b3eea360671e1b32b18a26e15b3aace3"><span class="id" title="notation">+</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#i"><span class="id" title="variable">i</span></a>) <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#k"><span class="id" title="variable">k</span></a> <a class="idref" href="mathcomp.ssreflect.ssrnat.html#b3eea360671e1b32b18a26e15b3aace3"><span class="id" title="notation">+</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#bump"><span class="id" title="definition">bump</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#h"><span class="id" title="variable">h</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#i"><span class="id" title="variable">i</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="bumpS"><span class="id" title="lemma">bumpS</span></a> <span class="id" title="var">h</span> <span class="id" title="var">i</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#bump"><span class="id" title="definition">bump</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#h"><span class="id" title="variable">h</span></a><a class="idref" href="mathcomp.ssreflect.ssrnat.html#361454269931ea8643f7b402f2ab7222"><span class="id" title="notation">.+1</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#i"><span class="id" title="variable">i</span></a><a class="idref" href="mathcomp.ssreflect.ssrnat.html#361454269931ea8643f7b402f2ab7222"><span class="id" title="notation">.+1</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.ssreflect.ssrnat.html#361454269931ea8643f7b402f2ab7222"><span class="id" title="notation">(</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#bump"><span class="id" title="definition">bump</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#h"><span class="id" title="variable">h</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#i"><span class="id" title="variable">i</span></a><a class="idref" href="mathcomp.ssreflect.ssrnat.html#361454269931ea8643f7b402f2ab7222"><span class="id" title="notation">).+1</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="unbump_addl"><span class="id" title="lemma">unbump_addl</span></a> <span class="id" title="var">h</span> <span class="id" title="var">i</span> <span class="id" title="var">k</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#unbump"><span class="id" title="definition">unbump</span></a> (<a class="idref" href="mathcomp.ssreflect.fintype.html#k"><span class="id" title="variable">k</span></a> <a class="idref" href="mathcomp.ssreflect.ssrnat.html#b3eea360671e1b32b18a26e15b3aace3"><span class="id" title="notation">+</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#h"><span class="id" title="variable">h</span></a>) (<a class="idref" href="mathcomp.ssreflect.fintype.html#k"><span class="id" title="variable">k</span></a> <a class="idref" href="mathcomp.ssreflect.ssrnat.html#b3eea360671e1b32b18a26e15b3aace3"><span class="id" title="notation">+</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#i"><span class="id" title="variable">i</span></a>) <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#k"><span class="id" title="variable">k</span></a> <a class="idref" href="mathcomp.ssreflect.ssrnat.html#b3eea360671e1b32b18a26e15b3aace3"><span class="id" title="notation">+</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#unbump"><span class="id" title="definition">unbump</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#h"><span class="id" title="variable">h</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#i"><span class="id" title="variable">i</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="unbumpS"><span class="id" title="lemma">unbumpS</span></a> <span class="id" title="var">h</span> <span class="id" title="var">i</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#unbump"><span class="id" title="definition">unbump</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#h"><span class="id" title="variable">h</span></a><a class="idref" href="mathcomp.ssreflect.ssrnat.html#361454269931ea8643f7b402f2ab7222"><span class="id" title="notation">.+1</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#i"><span class="id" title="variable">i</span></a><a class="idref" href="mathcomp.ssreflect.ssrnat.html#361454269931ea8643f7b402f2ab7222"><span class="id" title="notation">.+1</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.ssreflect.ssrnat.html#361454269931ea8643f7b402f2ab7222"><span class="id" title="notation">(</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#unbump"><span class="id" title="definition">unbump</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#h"><span class="id" title="variable">h</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#i"><span class="id" title="variable">i</span></a><a class="idref" href="mathcomp.ssreflect.ssrnat.html#361454269931ea8643f7b402f2ab7222"><span class="id" title="notation">).+1</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="leq_bump"><span class="id" title="lemma">leq_bump</span></a> <span class="id" title="var">h</span> <span class="id" title="var">i</span> <span class="id" title="var">j</span> : <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">(</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#i"><span class="id" title="variable">i</span></a> <a class="idref" href="mathcomp.ssreflect.ssrnat.html#9b077c369e19739ef880736ba34623ff"><span class="id" title="notation">≤</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#bump"><span class="id" title="definition">bump</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#h"><span class="id" title="variable">h</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#j"><span class="id" title="variable">j</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">)</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">(</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#unbump"><span class="id" title="definition">unbump</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#h"><span class="id" title="variable">h</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#i"><span class="id" title="variable">i</span></a> <a class="idref" href="mathcomp.ssreflect.ssrnat.html#9b077c369e19739ef880736ba34623ff"><span class="id" title="notation">≤</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#j"><span class="id" title="variable">j</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">)</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="leq_bump2"><span class="id" title="lemma">leq_bump2</span></a> <span class="id" title="var">h</span> <span class="id" title="var">i</span> <span class="id" title="var">j</span> : <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">(</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#bump"><span class="id" title="definition">bump</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#h"><span class="id" title="variable">h</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#i"><span class="id" title="variable">i</span></a> <a class="idref" href="mathcomp.ssreflect.ssrnat.html#9b077c369e19739ef880736ba34623ff"><span class="id" title="notation">≤</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#bump"><span class="id" title="definition">bump</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#h"><span class="id" title="variable">h</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#j"><span class="id" title="variable">j</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">)</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">(</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#i"><span class="id" title="variable">i</span></a> <a class="idref" href="mathcomp.ssreflect.ssrnat.html#9b077c369e19739ef880736ba34623ff"><span class="id" title="notation">≤</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#j"><span class="id" title="variable">j</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">)</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="bumpC"><span class="id" title="lemma">bumpC</span></a> <span class="id" title="var">h1</span> <span class="id" title="var">h2</span> <span class="id" title="var">i</span> :<br/> + <a class="idref" href="mathcomp.ssreflect.fintype.html#bump"><span class="id" title="definition">bump</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#h1"><span class="id" title="variable">h1</span></a> (<a class="idref" href="mathcomp.ssreflect.fintype.html#bump"><span class="id" title="definition">bump</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#h2"><span class="id" title="variable">h2</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#i"><span class="id" title="variable">i</span></a>) <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#bump"><span class="id" title="definition">bump</span></a> (<a class="idref" href="mathcomp.ssreflect.fintype.html#bump"><span class="id" title="definition">bump</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#h1"><span class="id" title="variable">h1</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#h2"><span class="id" title="variable">h2</span></a>) (<a class="idref" href="mathcomp.ssreflect.fintype.html#bump"><span class="id" title="definition">bump</span></a> (<a class="idref" href="mathcomp.ssreflect.fintype.html#unbump"><span class="id" title="definition">unbump</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#h2"><span class="id" title="variable">h2</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#h1"><span class="id" title="variable">h1</span></a>) <a class="idref" href="mathcomp.ssreflect.fintype.html#i"><span class="id" title="variable">i</span></a>).<br/> + +<br/> +</div> + +<div class="doc"> + The lift operations on ordinals; to avoid a messy dependent type, + unlift is a partial operation (returns an option). +</div> +<div class="code"> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="lift_subproof"><span class="id" title="lemma">lift_subproof</span></a> <span class="id" title="var">n</span> <span class="id" title="var">h</span> (<span class="id" title="var">i</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#9de6d53cccc27f521f3ab56b38159140"><span class="id" title="notation">'</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#9de6d53cccc27f521f3ab56b38159140"><span class="id" title="notation">I_n</span></a><a class="idref" href="mathcomp.ssreflect.ssrnat.html#1d63841e595f2805afd872744cbb1cce"><span class="id" title="notation">.-1</span></a>) : <a class="idref" href="mathcomp.ssreflect.fintype.html#bump"><span class="id" title="definition">bump</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#h"><span class="id" title="variable">h</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#i"><span class="id" title="variable">i</span></a> <a class="idref" href="mathcomp.ssreflect.ssrnat.html#989c98e7ddd65d5bf37c334ff2076de8"><span class="id" title="notation"><</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#n"><span class="id" title="variable">n</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Definition</span> <a name="lift"><span class="id" title="definition">lift</span></a> <span class="id" title="var">n</span> (<span class="id" title="var">h</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#9de6d53cccc27f521f3ab56b38159140"><span class="id" title="notation">'</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#9de6d53cccc27f521f3ab56b38159140"><span class="id" title="notation">I_n</span></a>) (<span class="id" title="var">i</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#9de6d53cccc27f521f3ab56b38159140"><span class="id" title="notation">'</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#9de6d53cccc27f521f3ab56b38159140"><span class="id" title="notation">I_n</span></a><a class="idref" href="mathcomp.ssreflect.ssrnat.html#1d63841e595f2805afd872744cbb1cce"><span class="id" title="notation">.-1</span></a>) := <a class="idref" href="mathcomp.ssreflect.fintype.html#Ordinal"><span class="id" title="constructor">Ordinal</span></a> (<a class="idref" href="mathcomp.ssreflect.fintype.html#lift_subproof"><span class="id" title="lemma">lift_subproof</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#h"><span class="id" title="variable">h</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#i"><span class="id" title="variable">i</span></a>).<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="unlift_subproof"><span class="id" title="lemma">unlift_subproof</span></a> <span class="id" title="var">n</span> (<span class="id" title="var">h</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#9de6d53cccc27f521f3ab56b38159140"><span class="id" title="notation">'</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#9de6d53cccc27f521f3ab56b38159140"><span class="id" title="notation">I_n</span></a>) (<span class="id" title="var">u</span> : <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Specif.html#5b63cb9ed0fed82566685c66e56592e4"><span class="id" title="notation">{</span></a><span class="id" title="var">j</span> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Specif.html#5b63cb9ed0fed82566685c66e56592e4"><span class="id" title="notation">|</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#j"><span class="id" title="variable">j</span></a> <a class="idref" href="mathcomp.ssreflect.eqtype.html#b1eeadc2feabc7422252baa895418c7b"><span class="id" title="notation">!=</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#h"><span class="id" title="variable">h</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Specif.html#5b63cb9ed0fed82566685c66e56592e4"><span class="id" title="notation">}</span></a>) : <a class="idref" href="mathcomp.ssreflect.fintype.html#unbump"><span class="id" title="definition">unbump</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#h"><span class="id" title="variable">h</span></a> (<a class="idref" href="mathcomp.ssreflect.eqtype.html#val"><span class="id" title="projection">val</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#u"><span class="id" title="variable">u</span></a>) <a class="idref" href="mathcomp.ssreflect.ssrnat.html#989c98e7ddd65d5bf37c334ff2076de8"><span class="id" title="notation"><</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#n"><span class="id" title="variable">n</span></a><a class="idref" href="mathcomp.ssreflect.ssrnat.html#1d63841e595f2805afd872744cbb1cce"><span class="id" title="notation">.-1</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Definition</span> <a name="unlift"><span class="id" title="definition">unlift</span></a> <span class="id" title="var">n</span> (<span class="id" title="var">h</span> <span class="id" title="var">i</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#9de6d53cccc27f521f3ab56b38159140"><span class="id" title="notation">'</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#9de6d53cccc27f521f3ab56b38159140"><span class="id" title="notation">I_n</span></a>) :=<br/> + <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrfun.html#omap"><span class="id" title="abbreviation">omap</span></a> (<span class="id" title="keyword">fun</span> <span class="id" title="var">u</span> : <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Specif.html#5b63cb9ed0fed82566685c66e56592e4"><span class="id" title="notation">{</span></a><span class="id" title="var">j</span> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Specif.html#5b63cb9ed0fed82566685c66e56592e4"><span class="id" title="notation">|</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#j"><span class="id" title="variable">j</span></a> <a class="idref" href="mathcomp.ssreflect.eqtype.html#b1eeadc2feabc7422252baa895418c7b"><span class="id" title="notation">!=</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#h"><span class="id" title="variable">h</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Specif.html#5b63cb9ed0fed82566685c66e56592e4"><span class="id" title="notation">}</span></a> ⇒ <a class="idref" href="mathcomp.ssreflect.fintype.html#Ordinal"><span class="id" title="constructor">Ordinal</span></a> (<a class="idref" href="mathcomp.ssreflect.fintype.html#unlift_subproof"><span class="id" title="lemma">unlift_subproof</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#u"><span class="id" title="variable">u</span></a>)) (<a class="idref" href="mathcomp.ssreflect.eqtype.html#insub"><span class="id" title="definition">insub</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#i"><span class="id" title="variable">i</span></a>).<br/> + +<br/> +<span class="id" title="keyword">CoInductive</span> <a name="unlift_spec"><span class="id" title="inductive">unlift_spec</span></a> <span class="id" title="var">n</span> <span class="id" title="var">h</span> <span class="id" title="var">i</span> : <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Datatypes.html#option"><span class="id" title="inductive">option</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#9de6d53cccc27f521f3ab56b38159140"><span class="id" title="notation">'</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#9de6d53cccc27f521f3ab56b38159140"><span class="id" title="notation">I_n</span></a><a class="idref" href="mathcomp.ssreflect.ssrnat.html#1d63841e595f2805afd872744cbb1cce"><span class="id" title="notation">.-1</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> <span class="id" title="keyword">Type</span> :=<br/> + | <a name="UnliftSome"><span class="id" title="constructor">UnliftSome</span></a> <span class="id" title="var">j</span> <span class="id" title="keyword">of</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#i"><span class="id" title="variable">i</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#lift"><span class="id" title="definition">lift</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#h"><span class="id" title="variable">h</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#j"><span class="id" title="variable">j</span></a> : <a class="idref" href="mathcomp.ssreflect.fintype.html#unlift_spec"><span class="id" title="inductive">unlift_spec</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#h"><span class="id" title="variable">h</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#i"><span class="id" title="variable">i</span></a> (<a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Datatypes.html#Some"><span class="id" title="constructor">Some</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#j"><span class="id" title="variable">j</span></a>)<br/> + | <a name="UnliftNone"><span class="id" title="constructor">UnliftNone</span></a> <span class="id" title="keyword">of</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#i"><span class="id" title="variable">i</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#h"><span class="id" title="variable">h</span></a> : <a class="idref" href="mathcomp.ssreflect.fintype.html#unlift_spec"><span class="id" title="inductive">unlift_spec</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#h"><span class="id" title="variable">h</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#i"><span class="id" title="variable">i</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Datatypes.html#None"><span class="id" title="constructor">None</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="unliftP"><span class="id" title="lemma">unliftP</span></a> <span class="id" title="var">n</span> (<span class="id" title="var">h</span> <span class="id" title="var">i</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#9de6d53cccc27f521f3ab56b38159140"><span class="id" title="notation">'</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#9de6d53cccc27f521f3ab56b38159140"><span class="id" title="notation">I_n</span></a>) : <a class="idref" href="mathcomp.ssreflect.fintype.html#unlift_spec"><span class="id" title="inductive">unlift_spec</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#h"><span class="id" title="variable">h</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#i"><span class="id" title="variable">i</span></a> (<a class="idref" href="mathcomp.ssreflect.fintype.html#unlift"><span class="id" title="definition">unlift</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#h"><span class="id" title="variable">h</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#i"><span class="id" title="variable">i</span></a>).<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="neq_lift"><span class="id" title="lemma">neq_lift</span></a> <span class="id" title="var">n</span> (<span class="id" title="var">h</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#9de6d53cccc27f521f3ab56b38159140"><span class="id" title="notation">'</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#9de6d53cccc27f521f3ab56b38159140"><span class="id" title="notation">I_n</span></a>) <span class="id" title="var">i</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#h"><span class="id" title="variable">h</span></a> <a class="idref" href="mathcomp.ssreflect.eqtype.html#b1eeadc2feabc7422252baa895418c7b"><span class="id" title="notation">!=</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#lift"><span class="id" title="definition">lift</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#h"><span class="id" title="variable">h</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#i"><span class="id" title="variable">i</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="unlift_none"><span class="id" title="lemma">unlift_none</span></a> <span class="id" title="var">n</span> (<span class="id" title="var">h</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#9de6d53cccc27f521f3ab56b38159140"><span class="id" title="notation">'</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#9de6d53cccc27f521f3ab56b38159140"><span class="id" title="notation">I_n</span></a>) : <a class="idref" href="mathcomp.ssreflect.fintype.html#unlift"><span class="id" title="definition">unlift</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#h"><span class="id" title="variable">h</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#h"><span class="id" title="variable">h</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Datatypes.html#None"><span class="id" title="constructor">None</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="unlift_some"><span class="id" title="lemma">unlift_some</span></a> <span class="id" title="var">n</span> (<span class="id" title="var">h</span> <span class="id" title="var">i</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#9de6d53cccc27f521f3ab56b38159140"><span class="id" title="notation">'</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#9de6d53cccc27f521f3ab56b38159140"><span class="id" title="notation">I_n</span></a>) :<br/> + <a class="idref" href="mathcomp.ssreflect.fintype.html#h"><span class="id" title="variable">h</span></a> <a class="idref" href="mathcomp.ssreflect.eqtype.html#b1eeadc2feabc7422252baa895418c7b"><span class="id" title="notation">!=</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#i"><span class="id" title="variable">i</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Specif.html#f5350ad671d3ce0e1e463e298917cf6e"><span class="id" title="notation">{</span></a><span class="id" title="var">j</span> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Specif.html#f5350ad671d3ce0e1e463e298917cf6e"><span class="id" title="notation">|</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#i"><span class="id" title="variable">i</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#lift"><span class="id" title="definition">lift</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#h"><span class="id" title="variable">h</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#j"><span class="id" title="variable">j</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Specif.html#f5350ad671d3ce0e1e463e298917cf6e"><span class="id" title="notation">&</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#unlift"><span class="id" title="definition">unlift</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#h"><span class="id" title="variable">h</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#i"><span class="id" title="variable">i</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Datatypes.html#Some"><span class="id" title="constructor">Some</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#j"><span class="id" title="variable">j</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Specif.html#f5350ad671d3ce0e1e463e298917cf6e"><span class="id" title="notation">}</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="lift_inj"><span class="id" title="lemma">lift_inj</span></a> <span class="id" title="var">n</span> (<span class="id" title="var">h</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#9de6d53cccc27f521f3ab56b38159140"><span class="id" title="notation">'</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#9de6d53cccc27f521f3ab56b38159140"><span class="id" title="notation">I_n</span></a>) : <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrfun.html#injective"><span class="id" title="definition">injective</span></a> (<a class="idref" href="mathcomp.ssreflect.fintype.html#lift"><span class="id" title="definition">lift</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#h"><span class="id" title="variable">h</span></a>).<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="liftK"><span class="id" title="lemma">liftK</span></a> <span class="id" title="var">n</span> (<span class="id" title="var">h</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#9de6d53cccc27f521f3ab56b38159140"><span class="id" title="notation">'</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#9de6d53cccc27f521f3ab56b38159140"><span class="id" title="notation">I_n</span></a>) : <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrfun.html#pcancel"><span class="id" title="definition">pcancel</span></a> (<a class="idref" href="mathcomp.ssreflect.fintype.html#lift"><span class="id" title="definition">lift</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#h"><span class="id" title="variable">h</span></a>) (<a class="idref" href="mathcomp.ssreflect.fintype.html#unlift"><span class="id" title="definition">unlift</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#h"><span class="id" title="variable">h</span></a>).<br/> + +<br/> +</div> + +<div class="doc"> + Shifting and splitting indices, for cutting and pasting arrays +</div> +<div class="code"> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="lshift_subproof"><span class="id" title="lemma">lshift_subproof</span></a> <span class="id" title="var">m</span> <span class="id" title="var">n</span> (<span class="id" title="var">i</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#9de6d53cccc27f521f3ab56b38159140"><span class="id" title="notation">'</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#9de6d53cccc27f521f3ab56b38159140"><span class="id" title="notation">I_m</span></a>) : <a class="idref" href="mathcomp.ssreflect.fintype.html#i"><span class="id" title="variable">i</span></a> <a class="idref" href="mathcomp.ssreflect.ssrnat.html#989c98e7ddd65d5bf37c334ff2076de8"><span class="id" title="notation"><</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#m"><span class="id" title="variable">m</span></a> <a class="idref" href="mathcomp.ssreflect.ssrnat.html#b3eea360671e1b32b18a26e15b3aace3"><span class="id" title="notation">+</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#n"><span class="id" title="variable">n</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="rshift_subproof"><span class="id" title="lemma">rshift_subproof</span></a> <span class="id" title="var">m</span> <span class="id" title="var">n</span> (<span class="id" title="var">i</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#9de6d53cccc27f521f3ab56b38159140"><span class="id" title="notation">'</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#9de6d53cccc27f521f3ab56b38159140"><span class="id" title="notation">I_n</span></a>) : <a class="idref" href="mathcomp.ssreflect.fintype.html#m"><span class="id" title="variable">m</span></a> <a class="idref" href="mathcomp.ssreflect.ssrnat.html#b3eea360671e1b32b18a26e15b3aace3"><span class="id" title="notation">+</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#i"><span class="id" title="variable">i</span></a> <a class="idref" href="mathcomp.ssreflect.ssrnat.html#989c98e7ddd65d5bf37c334ff2076de8"><span class="id" title="notation"><</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#m"><span class="id" title="variable">m</span></a> <a class="idref" href="mathcomp.ssreflect.ssrnat.html#b3eea360671e1b32b18a26e15b3aace3"><span class="id" title="notation">+</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#n"><span class="id" title="variable">n</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Definition</span> <a name="lshift"><span class="id" title="definition">lshift</span></a> <span class="id" title="var">m</span> <span class="id" title="var">n</span> (<span class="id" title="var">i</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#9de6d53cccc27f521f3ab56b38159140"><span class="id" title="notation">'</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#9de6d53cccc27f521f3ab56b38159140"><span class="id" title="notation">I_m</span></a>) := <a class="idref" href="mathcomp.ssreflect.fintype.html#Ordinal"><span class="id" title="constructor">Ordinal</span></a> (<a class="idref" href="mathcomp.ssreflect.fintype.html#lshift_subproof"><span class="id" title="lemma">lshift_subproof</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#n"><span class="id" title="variable">n</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#i"><span class="id" title="variable">i</span></a>).<br/> +<span class="id" title="keyword">Definition</span> <a name="rshift"><span class="id" title="definition">rshift</span></a> <span class="id" title="var">m</span> <span class="id" title="var">n</span> (<span class="id" title="var">i</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#9de6d53cccc27f521f3ab56b38159140"><span class="id" title="notation">'</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#9de6d53cccc27f521f3ab56b38159140"><span class="id" title="notation">I_n</span></a>) := <a class="idref" href="mathcomp.ssreflect.fintype.html#Ordinal"><span class="id" title="constructor">Ordinal</span></a> (<a class="idref" href="mathcomp.ssreflect.fintype.html#rshift_subproof"><span class="id" title="lemma">rshift_subproof</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#m"><span class="id" title="variable">m</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#i"><span class="id" title="variable">i</span></a>).<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="split_subproof"><span class="id" title="lemma">split_subproof</span></a> <span class="id" title="var">m</span> <span class="id" title="var">n</span> (<span class="id" title="var">i</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#9de6d53cccc27f521f3ab56b38159140"><span class="id" title="notation">'</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#9de6d53cccc27f521f3ab56b38159140"><span class="id" title="notation">I_</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#9de6d53cccc27f521f3ab56b38159140"><span class="id" title="notation">(</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#m"><span class="id" title="variable">m</span></a> <a class="idref" href="mathcomp.ssreflect.ssrnat.html#b3eea360671e1b32b18a26e15b3aace3"><span class="id" title="notation">+</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#n"><span class="id" title="variable">n</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#9de6d53cccc27f521f3ab56b38159140"><span class="id" title="notation">)</span></a>) : <a class="idref" href="mathcomp.ssreflect.fintype.html#i"><span class="id" title="variable">i</span></a> <a class="idref" href="mathcomp.ssreflect.ssrnat.html#08fe8636f4b45ae6787c490d19de1366"><span class="id" title="notation">≥</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#m"><span class="id" title="variable">m</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#i"><span class="id" title="variable">i</span></a> <a class="idref" href="mathcomp.ssreflect.ssrnat.html#9482aae3d3b06e249765c1225dbb8cbb"><span class="id" title="notation">-</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#m"><span class="id" title="variable">m</span></a> <a class="idref" href="mathcomp.ssreflect.ssrnat.html#989c98e7ddd65d5bf37c334ff2076de8"><span class="id" title="notation"><</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#n"><span class="id" title="variable">n</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Definition</span> <a name="split"><span class="id" title="definition">split</span></a> <span class="id" title="var">m</span> <span class="id" title="var">n</span> (<span class="id" title="var">i</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#9de6d53cccc27f521f3ab56b38159140"><span class="id" title="notation">'</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#9de6d53cccc27f521f3ab56b38159140"><span class="id" title="notation">I_</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#9de6d53cccc27f521f3ab56b38159140"><span class="id" title="notation">(</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#m"><span class="id" title="variable">m</span></a> <a class="idref" href="mathcomp.ssreflect.ssrnat.html#b3eea360671e1b32b18a26e15b3aace3"><span class="id" title="notation">+</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#n"><span class="id" title="variable">n</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#9de6d53cccc27f521f3ab56b38159140"><span class="id" title="notation">)</span></a>) : <a class="idref" href="mathcomp.ssreflect.fintype.html#9de6d53cccc27f521f3ab56b38159140"><span class="id" title="notation">'</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#9de6d53cccc27f521f3ab56b38159140"><span class="id" title="notation">I_m</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Datatypes.html#3dcaec3b772747610227247939f96b01"><span class="id" title="notation">+</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#9de6d53cccc27f521f3ab56b38159140"><span class="id" title="notation">'</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#9de6d53cccc27f521f3ab56b38159140"><span class="id" title="notation">I_n</span></a> :=<br/> + <span class="id" title="keyword">match</span> <a class="idref" href="mathcomp.ssreflect.ssrnat.html#ltnP"><span class="id" title="lemma">ltnP</span></a> (<a class="idref" href="mathcomp.ssreflect.fintype.html#i"><span class="id" title="variable">i</span></a>) <a class="idref" href="mathcomp.ssreflect.fintype.html#m"><span class="id" title="variable">m</span></a> <span class="id" title="keyword">with</span><br/> + | <a class="idref" href="mathcomp.ssreflect.ssrnat.html#LtnNotGeq"><span class="id" title="constructor">LtnNotGeq</span></a> <span class="id" title="var">lt_i_m</span> ⇒ <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Datatypes.html#inl"><span class="id" title="constructor">inl</span></a> <span class="id" title="var">_</span> (<a class="idref" href="mathcomp.ssreflect.fintype.html#Ordinal"><span class="id" title="constructor">Ordinal</span></a> <span class="id" title="var">lt_i_m</span>)<br/> + | <a class="idref" href="mathcomp.ssreflect.ssrnat.html#GeqNotLtn"><span class="id" title="constructor">GeqNotLtn</span></a> <span class="id" title="var">ge_i_m</span> ⇒ <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Datatypes.html#inr"><span class="id" title="constructor">inr</span></a> <span class="id" title="var">_</span> (<a class="idref" href="mathcomp.ssreflect.fintype.html#Ordinal"><span class="id" title="constructor">Ordinal</span></a> (<a class="idref" href="mathcomp.ssreflect.fintype.html#split_subproof"><span class="id" title="lemma">split_subproof</span></a> <span class="id" title="var">ge_i_m</span>))<br/> + <span class="id" title="keyword">end</span>.<br/> + +<br/> +<span class="id" title="keyword">CoInductive</span> <a name="split_spec"><span class="id" title="inductive">split_spec</span></a> <span class="id" title="var">m</span> <span class="id" title="var">n</span> (<span class="id" title="var">i</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#9de6d53cccc27f521f3ab56b38159140"><span class="id" title="notation">'</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#9de6d53cccc27f521f3ab56b38159140"><span class="id" title="notation">I_</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#9de6d53cccc27f521f3ab56b38159140"><span class="id" title="notation">(</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#m"><span class="id" title="variable">m</span></a> <a class="idref" href="mathcomp.ssreflect.ssrnat.html#b3eea360671e1b32b18a26e15b3aace3"><span class="id" title="notation">+</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#n"><span class="id" title="variable">n</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#9de6d53cccc27f521f3ab56b38159140"><span class="id" title="notation">)</span></a>) : <a class="idref" href="mathcomp.ssreflect.fintype.html#9de6d53cccc27f521f3ab56b38159140"><span class="id" title="notation">'</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#9de6d53cccc27f521f3ab56b38159140"><span class="id" title="notation">I_m</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Datatypes.html#3dcaec3b772747610227247939f96b01"><span class="id" title="notation">+</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#9de6d53cccc27f521f3ab56b38159140"><span class="id" title="notation">'</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#9de6d53cccc27f521f3ab56b38159140"><span class="id" title="notation">I_n</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Datatypes.html#bool"><span class="id" title="inductive">bool</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> <span class="id" title="keyword">Type</span> :=<br/> + | <a name="SplitLo"><span class="id" title="constructor">SplitLo</span></a> (<span class="id" title="var">j</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#9de6d53cccc27f521f3ab56b38159140"><span class="id" title="notation">'</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#9de6d53cccc27f521f3ab56b38159140"><span class="id" title="notation">I_m</span></a>) <span class="id" title="keyword">of</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#i"><span class="id" title="variable">i</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#8f9364556521ebb498093f28eea2240f"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#j"><span class="id" title="variable">j</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#8f9364556521ebb498093f28eea2240f"><span class="id" title="notation">:></span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Datatypes.html#nat"><span class="id" title="inductive">nat</span></a> : <a class="idref" href="mathcomp.ssreflect.fintype.html#split_spec"><span class="id" title="inductive">split_spec</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#i"><span class="id" title="variable">i</span></a> (<a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Datatypes.html#inl"><span class="id" title="constructor">inl</span></a> <span class="id" title="var">_</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#j"><span class="id" title="variable">j</span></a>) <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Datatypes.html#true"><span class="id" title="constructor">true</span></a><br/> + | <a name="SplitHi"><span class="id" title="constructor">SplitHi</span></a> (<span class="id" title="var">k</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#9de6d53cccc27f521f3ab56b38159140"><span class="id" title="notation">'</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#9de6d53cccc27f521f3ab56b38159140"><span class="id" title="notation">I_n</span></a>) <span class="id" title="keyword">of</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#i"><span class="id" title="variable">i</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#8f9364556521ebb498093f28eea2240f"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#m"><span class="id" title="variable">m</span></a> <a class="idref" href="mathcomp.ssreflect.ssrnat.html#b3eea360671e1b32b18a26e15b3aace3"><span class="id" title="notation">+</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#k"><span class="id" title="variable">k</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#8f9364556521ebb498093f28eea2240f"><span class="id" title="notation">:></span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Datatypes.html#nat"><span class="id" title="inductive">nat</span></a> : <a class="idref" href="mathcomp.ssreflect.fintype.html#split_spec"><span class="id" title="inductive">split_spec</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#i"><span class="id" title="variable">i</span></a> (<a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Datatypes.html#inr"><span class="id" title="constructor">inr</span></a> <span class="id" title="var">_</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#k"><span class="id" title="variable">k</span></a>) <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Datatypes.html#false"><span class="id" title="constructor">false</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="splitP"><span class="id" title="lemma">splitP</span></a> <span class="id" title="var">m</span> <span class="id" title="var">n</span> (<span class="id" title="var">i</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#9de6d53cccc27f521f3ab56b38159140"><span class="id" title="notation">'</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#9de6d53cccc27f521f3ab56b38159140"><span class="id" title="notation">I_</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#9de6d53cccc27f521f3ab56b38159140"><span class="id" title="notation">(</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#m"><span class="id" title="variable">m</span></a> <a class="idref" href="mathcomp.ssreflect.ssrnat.html#b3eea360671e1b32b18a26e15b3aace3"><span class="id" title="notation">+</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#n"><span class="id" title="variable">n</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#9de6d53cccc27f521f3ab56b38159140"><span class="id" title="notation">)</span></a>) : <a class="idref" href="mathcomp.ssreflect.fintype.html#split_spec"><span class="id" title="inductive">split_spec</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#i"><span class="id" title="variable">i</span></a> (<a class="idref" href="mathcomp.ssreflect.fintype.html#split"><span class="id" title="definition">split</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#i"><span class="id" title="variable">i</span></a>) (<a class="idref" href="mathcomp.ssreflect.fintype.html#i"><span class="id" title="variable">i</span></a> <a class="idref" href="mathcomp.ssreflect.ssrnat.html#989c98e7ddd65d5bf37c334ff2076de8"><span class="id" title="notation"><</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#m"><span class="id" title="variable">m</span></a>).<br/> + +<br/> +<span class="id" title="keyword">Definition</span> <a name="unsplit"><span class="id" title="definition">unsplit</span></a> <span class="id" title="var">m</span> <span class="id" title="var">n</span> (<span class="id" title="var">jk</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#9de6d53cccc27f521f3ab56b38159140"><span class="id" title="notation">'</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#9de6d53cccc27f521f3ab56b38159140"><span class="id" title="notation">I_m</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Datatypes.html#3dcaec3b772747610227247939f96b01"><span class="id" title="notation">+</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#9de6d53cccc27f521f3ab56b38159140"><span class="id" title="notation">'</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#9de6d53cccc27f521f3ab56b38159140"><span class="id" title="notation">I_n</span></a>) :=<br/> + <span class="id" title="keyword">match</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#jk"><span class="id" title="variable">jk</span></a> <span class="id" title="keyword">with</span> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Datatypes.html#inl"><span class="id" title="constructor">inl</span></a> <span class="id" title="var">j</span> ⇒ <a class="idref" href="mathcomp.ssreflect.fintype.html#lshift"><span class="id" title="definition">lshift</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#n"><span class="id" title="variable">n</span></a> <span class="id" title="var">j</span> | <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Datatypes.html#inr"><span class="id" title="constructor">inr</span></a> <span class="id" title="var">k</span> ⇒ <a class="idref" href="mathcomp.ssreflect.fintype.html#rshift"><span class="id" title="definition">rshift</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#m"><span class="id" title="variable">m</span></a> <span class="id" title="var">k</span> <span class="id" title="keyword">end</span>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="ltn_unsplit"><span class="id" title="lemma">ltn_unsplit</span></a> <span class="id" title="var">m</span> <span class="id" title="var">n</span> (<span class="id" title="var">jk</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#9de6d53cccc27f521f3ab56b38159140"><span class="id" title="notation">'</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#9de6d53cccc27f521f3ab56b38159140"><span class="id" title="notation">I_m</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Datatypes.html#3dcaec3b772747610227247939f96b01"><span class="id" title="notation">+</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#9de6d53cccc27f521f3ab56b38159140"><span class="id" title="notation">'</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#9de6d53cccc27f521f3ab56b38159140"><span class="id" title="notation">I_n</span></a>) : <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">(</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#unsplit"><span class="id" title="definition">unsplit</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#jk"><span class="id" title="variable">jk</span></a> <a class="idref" href="mathcomp.ssreflect.ssrnat.html#989c98e7ddd65d5bf37c334ff2076de8"><span class="id" title="notation"><</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#m"><span class="id" title="variable">m</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">)</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#jk"><span class="id" title="variable">jk</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="splitK"><span class="id" title="lemma">splitK</span></a> <span class="id" title="var">m</span> <span class="id" title="var">n</span> : <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrfun.html#cancel"><span class="id" title="definition">cancel</span></a> (@<a class="idref" href="mathcomp.ssreflect.fintype.html#split"><span class="id" title="definition">split</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#m"><span class="id" title="variable">m</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#n"><span class="id" title="variable">n</span></a>) (@<a class="idref" href="mathcomp.ssreflect.fintype.html#unsplit"><span class="id" title="definition">unsplit</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#m"><span class="id" title="variable">m</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#n"><span class="id" title="variable">n</span></a>).<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="unsplitK"><span class="id" title="lemma">unsplitK</span></a> <span class="id" title="var">m</span> <span class="id" title="var">n</span> : <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrfun.html#cancel"><span class="id" title="definition">cancel</span></a> (@<a class="idref" href="mathcomp.ssreflect.fintype.html#unsplit"><span class="id" title="definition">unsplit</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#m"><span class="id" title="variable">m</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#n"><span class="id" title="variable">n</span></a>) (@<a class="idref" href="mathcomp.ssreflect.fintype.html#split"><span class="id" title="definition">split</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#m"><span class="id" title="variable">m</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#n"><span class="id" title="variable">n</span></a>).<br/> + +<br/> +<span class="id" title="keyword">Section</span> <a name="OrdinalPos"><span class="id" title="section">OrdinalPos</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Variable</span> <a name="OrdinalPos.n'"><span class="id" title="variable">n'</span></a> : <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Datatypes.html#nat"><span class="id" title="inductive">nat</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Definition</span> <a name="ord0"><span class="id" title="definition">ord0</span></a> := <a class="idref" href="mathcomp.ssreflect.fintype.html#Ordinal"><span class="id" title="constructor">Ordinal</span></a> (<a class="idref" href="mathcomp.ssreflect.ssrnat.html#ltn0Sn"><span class="id" title="lemma">ltn0Sn</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#OrdinalPos.n'"><span class="id" title="variable">n'</span></a>).<br/> +<span class="id" title="keyword">Definition</span> <a name="ord_max"><span class="id" title="definition">ord_max</span></a> := <a class="idref" href="mathcomp.ssreflect.fintype.html#Ordinal"><span class="id" title="constructor">Ordinal</span></a> (<a class="idref" href="mathcomp.ssreflect.ssrnat.html#ltnSn"><span class="id" title="lemma">ltnSn</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#OrdinalPos.n'"><span class="id" title="variable">n'</span></a>).<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="leq_ord"><span class="id" title="lemma">leq_ord</span></a> (<span class="id" title="var">i</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#9de6d53cccc27f521f3ab56b38159140"><span class="id" title="notation">'</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#9de6d53cccc27f521f3ab56b38159140"><span class="id" title="notation">I_n</span></a>) : <a class="idref" href="mathcomp.ssreflect.fintype.html#i"><span class="id" title="variable">i</span></a> <a class="idref" href="mathcomp.ssreflect.ssrnat.html#9b077c369e19739ef880736ba34623ff"><span class="id" title="notation">≤</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#OrdinalPos.n'"><span class="id" title="variable">n'</span></a>. <br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="sub_ord_proof"><span class="id" title="lemma">sub_ord_proof</span></a> <span class="id" title="var">m</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#OrdinalPos.n'"><span class="id" title="variable">n'</span></a> <a class="idref" href="mathcomp.ssreflect.ssrnat.html#9482aae3d3b06e249765c1225dbb8cbb"><span class="id" title="notation">-</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#m"><span class="id" title="variable">m</span></a> <a class="idref" href="mathcomp.ssreflect.ssrnat.html#989c98e7ddd65d5bf37c334ff2076de8"><span class="id" title="notation"><</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#n"><span class="id" title="abbreviation">n</span></a>.<br/> + <span class="id" title="keyword">Definition</span> <a name="sub_ord"><span class="id" title="definition">sub_ord</span></a> <span class="id" title="var">m</span> := <a class="idref" href="mathcomp.ssreflect.fintype.html#Ordinal"><span class="id" title="constructor">Ordinal</span></a> (<a class="idref" href="mathcomp.ssreflect.fintype.html#sub_ord_proof"><span class="id" title="lemma">sub_ord_proof</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#m"><span class="id" title="variable">m</span></a>).<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="sub_ordK"><span class="id" title="lemma">sub_ordK</span></a> (<span class="id" title="var">i</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#9de6d53cccc27f521f3ab56b38159140"><span class="id" title="notation">'</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#9de6d53cccc27f521f3ab56b38159140"><span class="id" title="notation">I_n</span></a>) : <a class="idref" href="mathcomp.ssreflect.fintype.html#OrdinalPos.n'"><span class="id" title="variable">n'</span></a> <a class="idref" href="mathcomp.ssreflect.ssrnat.html#9482aae3d3b06e249765c1225dbb8cbb"><span class="id" title="notation">-</span></a> <a class="idref" href="mathcomp.ssreflect.ssrnat.html#9482aae3d3b06e249765c1225dbb8cbb"><span class="id" title="notation">(</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#OrdinalPos.n'"><span class="id" title="variable">n'</span></a> <a class="idref" href="mathcomp.ssreflect.ssrnat.html#9482aae3d3b06e249765c1225dbb8cbb"><span class="id" title="notation">-</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#i"><span class="id" title="variable">i</span></a><a class="idref" href="mathcomp.ssreflect.ssrnat.html#9482aae3d3b06e249765c1225dbb8cbb"><span class="id" title="notation">)</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#i"><span class="id" title="variable">i</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Definition</span> <a name="inord"><span class="id" title="definition">inord</span></a> <span class="id" title="var">m</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#9de6d53cccc27f521f3ab56b38159140"><span class="id" title="notation">'</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#9de6d53cccc27f521f3ab56b38159140"><span class="id" title="notation">I_n</span></a> := <a class="idref" href="mathcomp.ssreflect.eqtype.html#insubd"><span class="id" title="definition">insubd</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#ord0"><span class="id" title="definition">ord0</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#m"><span class="id" title="variable">m</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="inordK"><span class="id" title="lemma">inordK</span></a> <span class="id" title="var">m</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#m"><span class="id" title="variable">m</span></a> <a class="idref" href="mathcomp.ssreflect.ssrnat.html#989c98e7ddd65d5bf37c334ff2076de8"><span class="id" title="notation"><</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#n"><span class="id" title="abbreviation">n</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#inord"><span class="id" title="definition">inord</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#m"><span class="id" title="variable">m</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#8f9364556521ebb498093f28eea2240f"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#m"><span class="id" title="variable">m</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#8f9364556521ebb498093f28eea2240f"><span class="id" title="notation">:></span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Datatypes.html#nat"><span class="id" title="inductive">nat</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="inord_val"><span class="id" title="lemma">inord_val</span></a> (<span class="id" title="var">i</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#9de6d53cccc27f521f3ab56b38159140"><span class="id" title="notation">'</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#9de6d53cccc27f521f3ab56b38159140"><span class="id" title="notation">I_n</span></a>) : <a class="idref" href="mathcomp.ssreflect.fintype.html#inord"><span class="id" title="definition">inord</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#i"><span class="id" title="variable">i</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#i"><span class="id" title="variable">i</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="enum_ordS"><span class="id" title="lemma">enum_ordS</span></a> : <a class="idref" href="mathcomp.ssreflect.fintype.html#enum"><span class="id" title="abbreviation">enum</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#9de6d53cccc27f521f3ab56b38159140"><span class="id" title="notation">'</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#9de6d53cccc27f521f3ab56b38159140"><span class="id" title="notation">I_n</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#ord0"><span class="id" title="definition">ord0</span></a> <a class="idref" href="mathcomp.ssreflect.seq.html#d7fed0909a58e41c49e3ee117361b0a5"><span class="id" title="notation">::</span></a> <a class="idref" href="mathcomp.ssreflect.seq.html#map"><span class="id" title="definition">map</span></a> (<a class="idref" href="mathcomp.ssreflect.fintype.html#lift"><span class="id" title="definition">lift</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#ord0"><span class="id" title="definition">ord0</span></a>) (<a class="idref" href="mathcomp.ssreflect.fintype.html#enum"><span class="id" title="abbreviation">enum</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#9de6d53cccc27f521f3ab56b38159140"><span class="id" title="notation">'</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#9de6d53cccc27f521f3ab56b38159140"><span class="id" title="notation">I_n'</span></a>).<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="lift_max"><span class="id" title="lemma">lift_max</span></a> (<span class="id" title="var">i</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#9de6d53cccc27f521f3ab56b38159140"><span class="id" title="notation">'</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#9de6d53cccc27f521f3ab56b38159140"><span class="id" title="notation">I_n'</span></a>) : <a class="idref" href="mathcomp.ssreflect.fintype.html#lift"><span class="id" title="definition">lift</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#ord_max"><span class="id" title="definition">ord_max</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#i"><span class="id" title="variable">i</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#8f9364556521ebb498093f28eea2240f"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#i"><span class="id" title="variable">i</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#8f9364556521ebb498093f28eea2240f"><span class="id" title="notation">:></span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Datatypes.html#nat"><span class="id" title="inductive">nat</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="lift0"><span class="id" title="lemma">lift0</span></a> (<span class="id" title="var">i</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#9de6d53cccc27f521f3ab56b38159140"><span class="id" title="notation">'</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#9de6d53cccc27f521f3ab56b38159140"><span class="id" title="notation">I_n'</span></a>) : <a class="idref" href="mathcomp.ssreflect.fintype.html#lift"><span class="id" title="definition">lift</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#ord0"><span class="id" title="definition">ord0</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#i"><span class="id" title="variable">i</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#8f9364556521ebb498093f28eea2240f"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#i"><span class="id" title="variable">i</span></a><a class="idref" href="mathcomp.ssreflect.ssrnat.html#361454269931ea8643f7b402f2ab7222"><span class="id" title="notation">.+1</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#8f9364556521ebb498093f28eea2240f"><span class="id" title="notation">:></span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Datatypes.html#nat"><span class="id" title="inductive">nat</span></a>. <br/> + +<br/> +<span class="id" title="keyword">End</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#OrdinalPos"><span class="id" title="section">OrdinalPos</span></a>.<br/> + +<br/> + +<br/> +</div> + +<div class="doc"> + Product of two fintypes which is a fintype +</div> +<div class="code"> +<span class="id" title="keyword">Section</span> <a name="ProdFinType"><span class="id" title="section">ProdFinType</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Variable</span> <a name="ProdFinType.T1"><span class="id" title="variable">T1</span></a> <a name="ProdFinType.T2"><span class="id" title="variable">T2</span></a> : <a class="idref" href="mathcomp.ssreflect.fintype.html#finType"><span class="id" title="abbreviation">finType</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Definition</span> <a name="prod_enum"><span class="id" title="definition">prod_enum</span></a> := <a class="idref" href="mathcomp.ssreflect.seq.html#c212a7b762468fa83ed6c48a6ef21410"><span class="id" title="notation">[</span></a><a class="idref" href="mathcomp.ssreflect.seq.html#c212a7b762468fa83ed6c48a6ef21410"><span class="id" title="notation">seq</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Datatypes.html#44400027531d4bc3f586a1997dc874c0"><span class="id" title="notation">(</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#x1"><span class="id" title="variable">x1</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Datatypes.html#44400027531d4bc3f586a1997dc874c0"><span class="id" title="notation">,</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x2"><span class="id" title="variable">x2</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Datatypes.html#44400027531d4bc3f586a1997dc874c0"><span class="id" title="notation">)</span></a> <a class="idref" href="mathcomp.ssreflect.seq.html#c212a7b762468fa83ed6c48a6ef21410"><span class="id" title="notation">|</span></a> <span class="id" title="var">x1</span> <a class="idref" href="mathcomp.ssreflect.seq.html#c212a7b762468fa83ed6c48a6ef21410"><span class="id" title="notation"><-</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#enum"><span class="id" title="abbreviation">enum</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#ProdFinType.T1"><span class="id" title="variable">T1</span></a><a class="idref" href="mathcomp.ssreflect.seq.html#c212a7b762468fa83ed6c48a6ef21410"><span class="id" title="notation">,</span></a> <span class="id" title="var">x2</span> <a class="idref" href="mathcomp.ssreflect.seq.html#c212a7b762468fa83ed6c48a6ef21410"><span class="id" title="notation"><-</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#enum"><span class="id" title="abbreviation">enum</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#ProdFinType.T2"><span class="id" title="variable">T2</span></a><a class="idref" href="mathcomp.ssreflect.seq.html#c212a7b762468fa83ed6c48a6ef21410"><span class="id" title="notation">]</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="predX_prod_enum"><span class="id" title="lemma">predX_prod_enum</span></a> (<span class="id" title="var">A1</span> : <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#pred"><span class="id" title="definition">pred</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#ProdFinType.T1"><span class="id" title="variable">T1</span></a>) (<span class="id" title="var">A2</span> : <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#pred"><span class="id" title="definition">pred</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#ProdFinType.T2"><span class="id" title="variable">T2</span></a>) :<br/> + <a class="idref" href="mathcomp.ssreflect.seq.html#count"><span class="id" title="definition">count</span></a> <a class="idref" href="mathcomp.ssreflect.eqtype.html#a4c99a0dbc2a758b24afbd951fc3a580"><span class="id" title="notation">[</span></a><a class="idref" href="mathcomp.ssreflect.eqtype.html#a4c99a0dbc2a758b24afbd951fc3a580"><span class="id" title="notation">predX</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#A1"><span class="id" title="variable">A1</span></a> <a class="idref" href="mathcomp.ssreflect.eqtype.html#a4c99a0dbc2a758b24afbd951fc3a580"><span class="id" title="notation">&</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#A2"><span class="id" title="variable">A2</span></a><a class="idref" href="mathcomp.ssreflect.eqtype.html#a4c99a0dbc2a758b24afbd951fc3a580"><span class="id" title="notation">]</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#prod_enum"><span class="id" title="definition">prod_enum</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">#|</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#A1"><span class="id" title="variable">A1</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">|</span></a> <a class="idref" href="mathcomp.ssreflect.ssrnat.html#697e4695610f677ae98a52af81f779d2"><span class="id" title="notation">×</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">#|</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#A2"><span class="id" title="variable">A2</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">|</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="prod_enumP"><span class="id" title="lemma">prod_enumP</span></a> : <a class="idref" href="mathcomp.ssreflect.fintype.html#axiom"><span class="id" title="definition">Finite.axiom</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#prod_enum"><span class="id" title="definition">prod_enum</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Definition</span> <a name="prod_finMixin"><span class="id" title="definition">prod_finMixin</span></a> := <span class="id" title="keyword">Eval</span> <span class="id" title="tactic">hnf</span> <span class="id" title="tactic">in</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#FinMixin"><span class="id" title="abbreviation">FinMixin</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#prod_enumP"><span class="id" title="lemma">prod_enumP</span></a>.<br/> +<span class="id" title="keyword">Canonical</span> <span class="id" title="var">prod_finType</span> := <span class="id" title="keyword">Eval</span> <span class="id" title="tactic">hnf</span> <span class="id" title="tactic">in</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#FinType"><span class="id" title="abbreviation">FinType</span></a> (<a class="idref" href="mathcomp.ssreflect.fintype.html#ProdFinType.T1"><span class="id" title="variable">T1</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Datatypes.html#d19c7eafd0e2d195d10df94b392087b5"><span class="id" title="notation">×</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#ProdFinType.T2"><span class="id" title="variable">T2</span></a>) <a class="idref" href="mathcomp.ssreflect.fintype.html#prod_finMixin"><span class="id" title="definition">prod_finMixin</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="cardX"><span class="id" title="lemma">cardX</span></a> (<span class="id" title="var">A1</span> : <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#pred"><span class="id" title="definition">pred</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#ProdFinType.T1"><span class="id" title="variable">T1</span></a>) (<span class="id" title="var">A2</span> : <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#pred"><span class="id" title="definition">pred</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#ProdFinType.T2"><span class="id" title="variable">T2</span></a>) : <a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">#|</span></a><a class="idref" href="mathcomp.ssreflect.eqtype.html#a4c99a0dbc2a758b24afbd951fc3a580"><span class="id" title="notation">[</span></a><a class="idref" href="mathcomp.ssreflect.eqtype.html#a4c99a0dbc2a758b24afbd951fc3a580"><span class="id" title="notation">predX</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#A1"><span class="id" title="variable">A1</span></a> <a class="idref" href="mathcomp.ssreflect.eqtype.html#a4c99a0dbc2a758b24afbd951fc3a580"><span class="id" title="notation">&</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#A2"><span class="id" title="variable">A2</span></a><a class="idref" href="mathcomp.ssreflect.eqtype.html#a4c99a0dbc2a758b24afbd951fc3a580"><span class="id" title="notation">]</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">|</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">#|</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#A1"><span class="id" title="variable">A1</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">|</span></a> <a class="idref" href="mathcomp.ssreflect.ssrnat.html#697e4695610f677ae98a52af81f779d2"><span class="id" title="notation">×</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">#|</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#A2"><span class="id" title="variable">A2</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">|</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="card_prod"><span class="id" title="lemma">card_prod</span></a> : <a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">#|</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#74a34ed1f9b36f83662203527a970b09"><span class="id" title="notation">{:</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#ProdFinType.T1"><span class="id" title="variable">T1</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Datatypes.html#d19c7eafd0e2d195d10df94b392087b5"><span class="id" title="notation">×</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#ProdFinType.T2"><span class="id" title="variable">T2</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#74a34ed1f9b36f83662203527a970b09"><span class="id" title="notation">}</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">|</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">#|</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#ProdFinType.T1"><span class="id" title="variable">T1</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">|</span></a> <a class="idref" href="mathcomp.ssreflect.ssrnat.html#697e4695610f677ae98a52af81f779d2"><span class="id" title="notation">×</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">#|</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#ProdFinType.T2"><span class="id" title="variable">T2</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">|</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="eq_card_prod"><span class="id" title="lemma">eq_card_prod</span></a> (<span class="id" title="var">A</span> : <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#pred"><span class="id" title="definition">pred</span></a> (<a class="idref" href="mathcomp.ssreflect.fintype.html#ProdFinType.T1"><span class="id" title="variable">T1</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Datatypes.html#d19c7eafd0e2d195d10df94b392087b5"><span class="id" title="notation">×</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#ProdFinType.T2"><span class="id" title="variable">T2</span></a>)) : <a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#20bf07099d6d8cf369383b22fd37862e"><span class="id" title="notation">=</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#20bf07099d6d8cf369383b22fd37862e"><span class="id" title="notation">i</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#predT"><span class="id" title="definition">predT</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">#|</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#A"><span class="id" title="variable">A</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">|</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">#|</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#ProdFinType.T1"><span class="id" title="variable">T1</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">|</span></a> <a class="idref" href="mathcomp.ssreflect.ssrnat.html#697e4695610f677ae98a52af81f779d2"><span class="id" title="notation">×</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">#|</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#ProdFinType.T2"><span class="id" title="variable">T2</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">|</span></a>.<br/> + +<br/> +<span class="id" title="keyword">End</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#ProdFinType"><span class="id" title="section">ProdFinType</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Section</span> <a name="TagFinType"><span class="id" title="section">TagFinType</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Variables</span> (<a name="TagFinType.I"><span class="id" title="variable">I</span></a> : <a class="idref" href="mathcomp.ssreflect.fintype.html#finType"><span class="id" title="abbreviation">finType</span></a>) (<a name="TagFinType.T_"><span class="id" title="variable">T_</span></a> : <a class="idref" href="mathcomp.ssreflect.fintype.html#I"><span class="id" title="variable">I</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#d43e996736952df71ebeeae74d10a287"><span class="id" title="notation">→</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#finType"><span class="id" title="abbreviation">finType</span></a>).<br/> + +<br/> +<span class="id" title="keyword">Definition</span> <a name="tag_enum"><span class="id" title="definition">tag_enum</span></a> :=<br/> + <a class="idref" href="mathcomp.ssreflect.seq.html#flatten"><span class="id" title="definition">flatten</span></a> <a class="idref" href="mathcomp.ssreflect.seq.html#b7adbae1ad6b5f8e6d4ef64ae286f319"><span class="id" title="notation">[</span></a><a class="idref" href="mathcomp.ssreflect.seq.html#b7adbae1ad6b5f8e6d4ef64ae286f319"><span class="id" title="notation">seq</span></a> <a class="idref" href="mathcomp.ssreflect.seq.html#b7adbae1ad6b5f8e6d4ef64ae286f319"><span class="id" title="notation">[</span></a><a class="idref" href="mathcomp.ssreflect.seq.html#b7adbae1ad6b5f8e6d4ef64ae286f319"><span class="id" title="notation">seq</span></a> <a class="idref" href="mathcomp.ssreflect.eqtype.html#Tagged"><span class="id" title="definition">Tagged</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#TagFinType.T_"><span class="id" title="variable">T_</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a> <a class="idref" href="mathcomp.ssreflect.seq.html#b7adbae1ad6b5f8e6d4ef64ae286f319"><span class="id" title="notation">|</span></a> <span class="id" title="var">x</span> <a class="idref" href="mathcomp.ssreflect.seq.html#b7adbae1ad6b5f8e6d4ef64ae286f319"><span class="id" title="notation"><-</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#enumF"><span class="id" title="abbreviation">enumF</span></a> (<a class="idref" href="mathcomp.ssreflect.fintype.html#TagFinType.T_"><span class="id" title="variable">T_</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#i"><span class="id" title="variable">i</span></a>)<a class="idref" href="mathcomp.ssreflect.seq.html#b7adbae1ad6b5f8e6d4ef64ae286f319"><span class="id" title="notation">]</span></a> <a class="idref" href="mathcomp.ssreflect.seq.html#b7adbae1ad6b5f8e6d4ef64ae286f319"><span class="id" title="notation">|</span></a> <span class="id" title="var">i</span> <a class="idref" href="mathcomp.ssreflect.seq.html#b7adbae1ad6b5f8e6d4ef64ae286f319"><span class="id" title="notation"><-</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#enumF"><span class="id" title="abbreviation">enumF</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#TagFinType.I"><span class="id" title="variable">I</span></a><a class="idref" href="mathcomp.ssreflect.seq.html#b7adbae1ad6b5f8e6d4ef64ae286f319"><span class="id" title="notation">]</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="tag_enumP"><span class="id" title="lemma">tag_enumP</span></a> : <a class="idref" href="mathcomp.ssreflect.fintype.html#axiom"><span class="id" title="definition">Finite.axiom</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#tag_enum"><span class="id" title="definition">tag_enum</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Definition</span> <a name="tag_finMixin"><span class="id" title="definition">tag_finMixin</span></a> := <span class="id" title="keyword">Eval</span> <span class="id" title="tactic">hnf</span> <span class="id" title="tactic">in</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#FinMixin"><span class="id" title="abbreviation">FinMixin</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#tag_enumP"><span class="id" title="lemma">tag_enumP</span></a>.<br/> +<span class="id" title="keyword">Canonical</span> <span class="id" title="var">tag_finType</span> := <span class="id" title="keyword">Eval</span> <span class="id" title="tactic">hnf</span> <span class="id" title="tactic">in</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#FinType"><span class="id" title="abbreviation">FinType</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Specif.html#50b5d8dd6be4fba768e35617e518ad76"><span class="id" title="notation">{</span></a><span class="id" title="var">i</span> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Specif.html#50b5d8dd6be4fba768e35617e518ad76"><span class="id" title="notation">:</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#TagFinType.I"><span class="id" title="variable">I</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Specif.html#50b5d8dd6be4fba768e35617e518ad76"><span class="id" title="notation">&</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#TagFinType.T_"><span class="id" title="variable">T_</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#i"><span class="id" title="variable">i</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Specif.html#50b5d8dd6be4fba768e35617e518ad76"><span class="id" title="notation">}</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#tag_finMixin"><span class="id" title="definition">tag_finMixin</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="card_tagged"><span class="id" title="lemma">card_tagged</span></a> :<br/> + <a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">#|</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#74a34ed1f9b36f83662203527a970b09"><span class="id" title="notation">{:</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Specif.html#50b5d8dd6be4fba768e35617e518ad76"><span class="id" title="notation">{</span></a><span class="id" title="var">i</span> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Specif.html#50b5d8dd6be4fba768e35617e518ad76"><span class="id" title="notation">:</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#TagFinType.I"><span class="id" title="variable">I</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Specif.html#50b5d8dd6be4fba768e35617e518ad76"><span class="id" title="notation">&</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#TagFinType.T_"><span class="id" title="variable">T_</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#i"><span class="id" title="variable">i</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Specif.html#50b5d8dd6be4fba768e35617e518ad76"><span class="id" title="notation">}</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#74a34ed1f9b36f83662203527a970b09"><span class="id" title="notation">}</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">|</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.ssreflect.seq.html#sumn"><span class="id" title="definition">sumn</span></a> (<a class="idref" href="mathcomp.ssreflect.seq.html#map"><span class="id" title="definition">map</span></a> (<span class="id" title="keyword">fun</span> <span class="id" title="var">i</span> ⇒ <a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">#|</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#TagFinType.T_"><span class="id" title="variable">T_</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#i"><span class="id" title="variable">i</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">|</span></a>) (<a class="idref" href="mathcomp.ssreflect.fintype.html#enum"><span class="id" title="abbreviation">enum</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#TagFinType.I"><span class="id" title="variable">I</span></a>)).<br/> + +<br/> +<span class="id" title="keyword">End</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#TagFinType"><span class="id" title="section">TagFinType</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Section</span> <a name="SumFinType"><span class="id" title="section">SumFinType</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Variables</span> <a name="SumFinType.T1"><span class="id" title="variable">T1</span></a> <a name="SumFinType.T2"><span class="id" title="variable">T2</span></a> : <a class="idref" href="mathcomp.ssreflect.fintype.html#finType"><span class="id" title="abbreviation">finType</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Definition</span> <a name="sum_enum"><span class="id" title="definition">sum_enum</span></a> :=<br/> + <a class="idref" href="mathcomp.ssreflect.seq.html#b7adbae1ad6b5f8e6d4ef64ae286f319"><span class="id" title="notation">[</span></a><a class="idref" href="mathcomp.ssreflect.seq.html#b7adbae1ad6b5f8e6d4ef64ae286f319"><span class="id" title="notation">seq</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Datatypes.html#inl"><span class="id" title="constructor">inl</span></a> <span class="id" title="var">_</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#x"><span class="id" title="variable">x</span></a> <a class="idref" href="mathcomp.ssreflect.seq.html#b7adbae1ad6b5f8e6d4ef64ae286f319"><span class="id" title="notation">|</span></a> <span class="id" title="var">x</span> <a class="idref" href="mathcomp.ssreflect.seq.html#b7adbae1ad6b5f8e6d4ef64ae286f319"><span class="id" title="notation"><-</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#enumF"><span class="id" title="abbreviation">enumF</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#SumFinType.T1"><span class="id" title="variable">T1</span></a><a class="idref" href="mathcomp.ssreflect.seq.html#b7adbae1ad6b5f8e6d4ef64ae286f319"><span class="id" title="notation">]</span></a> <a class="idref" href="mathcomp.ssreflect.seq.html#2ac9001c05ad5bd2f6d5f68e59f48fbb"><span class="id" title="notation">++</span></a> <a class="idref" href="mathcomp.ssreflect.seq.html#b7adbae1ad6b5f8e6d4ef64ae286f319"><span class="id" title="notation">[</span></a><a class="idref" href="mathcomp.ssreflect.seq.html#b7adbae1ad6b5f8e6d4ef64ae286f319"><span class="id" title="notation">seq</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Datatypes.html#inr"><span class="id" title="constructor">inr</span></a> <span class="id" title="var">_</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#y"><span class="id" title="variable">y</span></a> <a class="idref" href="mathcomp.ssreflect.seq.html#b7adbae1ad6b5f8e6d4ef64ae286f319"><span class="id" title="notation">|</span></a> <span class="id" title="var">y</span> <a class="idref" href="mathcomp.ssreflect.seq.html#b7adbae1ad6b5f8e6d4ef64ae286f319"><span class="id" title="notation"><-</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#enumF"><span class="id" title="abbreviation">enumF</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#SumFinType.T2"><span class="id" title="variable">T2</span></a><a class="idref" href="mathcomp.ssreflect.seq.html#b7adbae1ad6b5f8e6d4ef64ae286f319"><span class="id" title="notation">]</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="sum_enum_uniq"><span class="id" title="lemma">sum_enum_uniq</span></a> : <a class="idref" href="mathcomp.ssreflect.seq.html#uniq"><span class="id" title="definition">uniq</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#sum_enum"><span class="id" title="definition">sum_enum</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="mem_sum_enum"><span class="id" title="lemma">mem_sum_enum</span></a> <span class="id" title="var">u</span> : <a class="idref" href="mathcomp.ssreflect.fintype.html#u"><span class="id" title="variable">u</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#46c9e8232fa09401e24f1934bb65029f"><span class="id" title="notation">\</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#46c9e8232fa09401e24f1934bb65029f"><span class="id" title="notation">in</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#sum_enum"><span class="id" title="definition">sum_enum</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Definition</span> <a name="sum_finMixin"><span class="id" title="definition">sum_finMixin</span></a> := <span class="id" title="keyword">Eval</span> <span class="id" title="tactic">hnf</span> <span class="id" title="tactic">in</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#UniqFinMixin"><span class="id" title="abbreviation">UniqFinMixin</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#sum_enum_uniq"><span class="id" title="lemma">sum_enum_uniq</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#mem_sum_enum"><span class="id" title="lemma">mem_sum_enum</span></a>.<br/> +<span class="id" title="keyword">Canonical</span> <span class="id" title="var">sum_finType</span> := <span class="id" title="keyword">Eval</span> <span class="id" title="tactic">hnf</span> <span class="id" title="tactic">in</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#FinType"><span class="id" title="abbreviation">FinType</span></a> (<a class="idref" href="mathcomp.ssreflect.fintype.html#SumFinType.T1"><span class="id" title="variable">T1</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Datatypes.html#3dcaec3b772747610227247939f96b01"><span class="id" title="notation">+</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#SumFinType.T2"><span class="id" title="variable">T2</span></a>) <a class="idref" href="mathcomp.ssreflect.fintype.html#sum_finMixin"><span class="id" title="definition">sum_finMixin</span></a>.<br/> + +<br/> +<span class="id" title="keyword">Lemma</span> <a name="card_sum"><span class="id" title="lemma">card_sum</span></a> : <a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">#|</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#74a34ed1f9b36f83662203527a970b09"><span class="id" title="notation">{:</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#SumFinType.T1"><span class="id" title="variable">T1</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Datatypes.html#3dcaec3b772747610227247939f96b01"><span class="id" title="notation">+</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#SumFinType.T2"><span class="id" title="variable">T2</span></a><a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.ssr.ssrbool.html#74a34ed1f9b36f83662203527a970b09"><span class="id" title="notation">}</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">|</span></a> <a class="idref" href="http://coq.inria.fr/distrib/8.8.0/stdlib//Coq.Init.Logic.html#1c39bf18749e5cc609e83c0a0ba5a372"><span class="id" title="notation">=</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">#|</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#SumFinType.T1"><span class="id" title="variable">T1</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">|</span></a> <a class="idref" href="mathcomp.ssreflect.ssrnat.html#b3eea360671e1b32b18a26e15b3aace3"><span class="id" title="notation">+</span></a> <a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">#|</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#SumFinType.T2"><span class="id" title="variable">T2</span></a><a class="idref" href="mathcomp.ssreflect.fintype.html#f01714bb99e6c7abc6cfb2e43eff7f6e"><span class="id" title="notation">|</span></a>.<br/> + +<br/> +<span class="id" title="keyword">End</span> <a class="idref" href="mathcomp.ssreflect.fintype.html#SumFinType"><span class="id" title="section">SumFinType</span></a>.<br/> +</div> +</div> + +<div id="footer"> +<hr/><a href="index.html">Index</a><hr/>This page has been generated by <a href="http://coq.inria.fr/">coqdoc</a> +</div> + +</div> + +</body> +</html>
\ No newline at end of file |
