Module mathcomp.classical.functions
From mathcomp Require Import boot order finmap ssralg ssrnum ssrint rat.From HB Require Import structures.
#[warning="-warn-library-file-internal-analysis"]
From mathcomp Require Import unstable.
From mathcomp Require Import mathcomp_extra boolp classical_sets.
Add Search Blacklist "__canonical__".
Add Search Blacklist "__functions_".
Add Search Blacklist "_factory_".
Add Search Blacklist "_mixin_".
Unset SsrOldRewriteGoalsOrder.
Set Implicit Arguments.
Unset Strict Implicit.
Unset Printing Implicit Defensive.
Reserved Notation "f \_ D" (at level 10).
Reserved Notation "'{' 'fun' A '>->' B '}'"
(format "'{' 'fun' A '>->' B '}'").
Reserved Notation "'{' 'oinv' T '>->' U '}'"
(format "'{' 'oinv' T '>->' U '}'").
Reserved Notation "'{' 'inv' T '>->' U '}'"
(format "'{' 'inv' T '>->' U '}'").
Reserved Notation "'{' 'oinvfun' T '>->' U '}'"
(format "'{' 'oinvfun' T '>->' U '}'").
Reserved Notation "'{' 'invfun' T '>->' U '}'"
(format "'{' 'invfun' T '>->' U '}'").
Reserved Notation "'{' 'inj' A '>->' T '}'"
(format "'{' 'inj' A '>->' T '}'").
Reserved Notation "'{' 'splitinj' A '>->' T '}'"
(format "'{' 'splitinj' A '>->' T '}'").
Reserved Notation "'{' 'surj' A '>->' B '}'"
(format "'{' 'surj' A '>->' B '}'").
Reserved Notation "'{' 'splitsurj' A '>->' B '}'"
(format "'{' 'splitsurj' A '>->' B '}'").
Reserved Notation "'{' 'injfun' A '>->' B '}'"
(format "'{' 'injfun' A '>->' B '}'").
Reserved Notation "'{' 'surjfun' A '>->' B '}'"
(format "'{' 'surjfun' A '>->' B '}'").
Reserved Notation "'{' 'splitinjfun' A '>->' B '}'"
(format "'{' 'splitinjfun' A '>->' B '}'").
Reserved Notation "'{' 'splitsurjfun' A '>->' B '}'"
(format "'{' 'splitsurjfun' A '>->' B '}'").
Reserved Notation "'{' 'bij' A '>->' B '}'"
(format "'{' 'bij' A '>->' B '}'").
Reserved Notation "'{' 'splitbij' A '>->' B '}'"
(format "'{' 'splitbij' A '>->' B '}'").
Reserved Notation "[ 'fun' 'of' f ]" (format "[ 'fun' 'of' f ]").
Reserved Notation "[ 'fun' f 'in' A ]" (format "[ 'fun' f 'in' A ]").
Reserved Notation "[ 'oinv' 'of' f ]" (format "[ 'oinv' 'of' f ]").
Reserved Notation "[ 'inv' 'of' f ]" (format "[ 'inv' 'of' f ]").
Reserved Notation "[ 'oinv' 'of' f ]" (format "[ 'oinv' 'of' f ]").
Reserved Notation "[ 'inv' 'of' f ]" (format "[ 'inv' 'of' f ]").
Reserved Notation "[ 'inj' 'of' f ]" (format "[ 'inj' 'of' f ]").
Reserved Notation "[ 'splitinj' 'of' f ]" (format "[ 'splitinj' 'of' f ]").
Reserved Notation "[ 'surj' 'of' f ]" (format "[ 'surj' 'of' f ]").
Reserved Notation "[ 'splitsurj' 'of' f ]" (format "[ 'splitsurj' 'of' f ]").
Reserved Notation "[ 'injfun' 'of' f ]" (format "[ 'injfun' 'of' f ]").
Reserved Notation "[ 'surjfun' 'of' f ]" (format "[ 'surjfun' 'of' f ]").
Reserved Notation "[ 'splitinjfun' 'of' f ]"
(format "[ 'splitinjfun' 'of' f ]").
Reserved Notation "[ 'splitsurjfun' 'of' f ]"
(format "[ 'splitsurjfun' 'of' f ]").
Reserved Notation "[ 'bij' 'of' f ]" (format "[ 'bij' 'of' f ]").
Reserved Notation "[ 'splitbij' 'of' f ]" (format "[ 'splitbij' 'of' f ]").
Reserved Notation "''oinv_' f" (at level 8, f at level 2, format "''oinv_' f").
Reserved Notation "''funS_' f" (at level 8, f at level 2, format "''funS_' f").
Reserved Notation "''mem_fun_' f"
(at level 8, f at level 2, format "''mem_fun_' f").
Reserved Notation "''oinvK_' f"
(at level 8, f at level 2, format "''oinvK_' f").
Reserved Notation "''oinvS_' f"
(at level 8, f at level 2, format "''oinvS_' f").
Reserved Notation "''oinvP_' f"
(at level 8, f at level 2, format "''oinvP_' f").
Reserved Notation "''oinvT_' f"
(at level 8, f at level 2, format "''oinvT_' f").
Reserved Notation "''invK_' f"
(at level 8, f at level 2, format "''invK_' f").
Reserved Notation "''invS_' f"
(at level 8, f at level 2, format "''invS_' f").
Reserved Notation "''funoK_' f"
(at level 8, f at level 2, format "''funoK_' f").
Reserved Notation "''inj_' f"
(at level 8, f at level 2, format "''inj_' f").
Reserved Notation "''funK_' f"
(at level 8, f at level 2, format "''funK_' f").
Reserved Notation "''totalfun_' A"
(at level 8, A at level 2, format "''totalfun_' A").
Reserved Notation "''surj_' f"
(at level 8, f at level 2, format "''surj_' f").
Reserved Notation "''split_' a"
(at level 8, a at level 2, format "''split_' a").
Reserved Notation "''bijTT_' f"
(at level 8, f at level 2, format "''bijTT_' f").
Reserved Notation "''bij_' f" (at level 8, f at level 2, format "''bij_' f").
Reserved Notation "''valL_' v" (at level 8, v at level 2, format "''valL_' v").
Reserved Notation "''valLfun_' v"
(at level 8, v at level 2, format "''valLfun_' v").
Reserved Notation "''pinv_' dflt"
(at level 8, dflt at level 2, format "''pinv_' dflt").
Reserved Notation "''pPbij_' dflt"
(at level 8, dflt at level 2, format "''pPbij_' dflt").
Reserved Notation "''pPinj_' dflt"
(at level 8, dflt at level 2, format "''pPinj_' dflt").
Reserved Notation "''injpPfun_' dflt"
(at level 8, dflt at level 2, format "''injpPfun_' dflt").
Reserved Notation "''funpPinj_' dflt"
(at level 8, dflt at level 2, format "''funpPinj_' dflt").
Local Open Scope classical_set_scope.
Section MainProperties.
Context { } ( : set aT) ( : set rT) ( : aT -> rT).
Definition
Source code
Definition
set_fun : forall {aT rT : Type}, set aT -> set rT -> (aT -> rT) -> Prop set_fun is not universe polymorphic Arguments set_fun {aT rT}%_type_scope (A B)%_classical_set_scope f%_function_scope set_fun is transparent Expands to: Constant mathcomp.classical.functions.set_fun Declared in library mathcomp.classical.functions, line 251, characters 11-18
Source code
Definition
set_surj : forall {aT rT : Type}, set aT -> set rT -> (aT -> rT) -> Prop set_surj is not universe polymorphic Arguments set_surj {aT rT}%_type_scope (A B)%_classical_set_scope f%_function_scope set_surj is transparent Expands to: Constant mathcomp.classical.functions.set_surj Declared in library mathcomp.classical.functions, line 252, characters 11-19
Source code
Definition
set_inj : forall {aT rT : Type}, set aT -> (aT -> rT) -> Prop set_inj is not universe polymorphic Arguments set_inj {aT rT}%_type_scope A%_classical_set_scope f%_function_scope set_inj is transparent Expands to: Constant mathcomp.classical.functions.set_inj Declared in library mathcomp.classical.functions, line 253, characters 11-18
Source code
End MainProperties.
.
Source code
Source code
Source code
Source code
Source code
Source code
{ funS : set_fun A B f }.
.
Source code
Source code
Source code
Source code
Source code
Source code
{ of isFun _ _ A B f }.
Notation
Source code
Notation
Source code
.
Source code
Source code
Source code
Source code
Source code
.
Source code
Source code
Source code
Notation
Source code
Notation
Source code
form_scope.
Definition
set_bij : forall {aT rT : Type}, set aT -> set rT -> (aT -> rT) -> Prop set_bij is not universe polymorphic Arguments set_bij {aT rT}%_type_scope (A B)%_classical_set_scope f%_function_scope set_bij is transparent Expands to: Constant mathcomp.classical.functions.set_bij Declared in library mathcomp.classical.functions, line 254, characters 11-18
Source code
& phantom (_ -> _) f := @oinv _ _ f.
Notation
Source code
.
Source code
Source code
Source code
{ of OInv aT rT f & isFun aT rT A B f}.
Notation
Source code
Notation
Source code
[the {oinvfun _ >-> _} of f : _ -> _] : form_scope.
.
Source code
Source code
Source code
Source code
Source code
inv : rT -> aT;
oliftV : olift inv = 'oinv_f
}.
.
Source code
Source code
Source code
Source code
Source code
.
Source code
Source code
Source code
Source code
.
Source code
Source code
Source code
.
Source code
Source code
Source code
.
Source code
.
Source code
Source code
Source code
Notation
Source code
Notation
Source code
Definition
phant_oinv : forall [aT rT : Type] [f : {oinv aT >-> rT}], phantom (aT -> rT) f -> rT -> option aT phant_oinv is not universe polymorphic Arguments phant_oinv [aT rT]%_type_scope [f] _ _ phant_oinv is transparent Expands to: Constant mathcomp.classical.functions.phant_oinv Declared in library mathcomp.classical.functions, line 269, characters 11-21
Source code
@inv _ _ f.
Notation
Source code
Notation
Source code
(@phant_inv _ _ _ (Phantom (_ -> _) f%function)) : function_scope.
Notation
Source code
Notation
Source code
.
Source code
Source code
Source code
{ of Inv aT rT f & isFun aT rT A B f}.
Notation
Source code
Notation
Source code
[the {invfun _ >-> _} of f : _ -> _] : form_scope.
.
Source code
Source code
Source code
Source code
Source code
Source code
(f : aT -> rT) & OInv _ _ f := {
oinvS : {homo 'oinv_f : / B x >-> (some @` A) x};
oinvK : {in B, ocancel 'oinv_f f};
}.
.
Source code
Source code
Source code
Source code
Source code
Source code
oinv; oinvS : {homo oinv : / B x >-> (some @` A) x};
oinvK : {in B, ocancel oinv f};
}.
.
Source code
Source code
Source code
Source code
Source code
& OCanV _ _ A B f.
.
Source code
Source code
Source code
.
Source code
Source code
Source code
.
Source code
.
Source code
Source code
Source code
Source code
Notation
Source code
Notation
Source code
[the {surj _ >-> _} of f : _ -> _] : form_scope.
.
Source code
Source code
Source code
{ of @Surject aT rT A B f & @Fun _ _ A B f}.
Notation
Source code
Notation
Source code
[the {surjfun _ >-> _} of f : _ -> _] : form_scope.
.
Source code
Source code
Source code
{ of @Surject aT rT A B f & @Inv _ _ f}.
Notation
Source code
Notation
Source code
[the {splitsurj _ >-> _} of f : _ -> _] : form_scope.
.
Source code
Source code
Source code
{ of @SplitSurj aT rT A B f & @Fun _ _ A B f}.
Notation
Source code
(@SplitSurjFun.type _ _ A B) : type_scope.
Notation
Source code
[the {splitsurjfun _ >-> _} of f : _ -> _] : form_scope.
.
Source code
Source code
Source code
Source code
{ funoK : {in A, pcancel f 'oinv_f} }.
.
Source code
Source code
Source code
{ of OInv aT rT f & OInv_Can aT rT A f}.
Notation
Source code
Notation
Source code
.
Source code
Source code
Source code
Source code
Source code
Source code
{ of @Fun _ _ A B f & @Inject _ _ A f }.
Notation
Source code
Notation
Source code
[the {injfun _ >-> _} of f : _ -> _] : form_scope.
.
Source code
Source code
Source code
Source code
{ of @Inv aT rT f & @Inject aT rT A f}.
Notation
Source code
Notation
Source code
[the {splitinj _ >-> _} of f : _ -> _] : form_scope.
.
Source code
Source code
Source code
Source code
{ of @SplitInj _ rT A f & @isFun _ _ A B f}.
Notation
Source code
Notation
Source code
[the {splitinjfun _ >-> _} of f : _ -> _] : form_scope.
.
Source code
Source code
Source code
Source code
Source code
Source code
{ of @InjFun _ _ A B f & @SurjFun _ _ A B f}.
Notation
Source code
Notation
Source code
.
Source code
Source code
Source code
Source code
Source code
Source code
{ of @SplitInjFun _ _ A B f & @SplitSurjFun _ _ A B f}.
Notation
Source code
Notation
Source code
Module
Source code
Notation
Source code
Notation
Source code
Notation
Source code
Notation
Source code
Notation
Source code
Notation
Source code
Notation
Source code
Notation
Source code
Notation
Source code
Notation
Source code
Notation
Source code
Notation
Source code
Notation
Source code
Notation
Source code
Notation
Source code
End ShortFunSyntax.
Definition
phant_inv : forall [aT rT : Type] [f : { inv aT >-> rT}], phantom (aT -> rT) f -> rT -> aT phant_inv is not universe polymorphic Arguments phant_inv [aT rT]%_type_scope [f] _ _ phant_inv is transparent Expands to: Constant mathcomp.classical.functions.phant_inv Declared in library mathcomp.classical.functions, line 293, characters 11-20
Source code
( : {fun A >-> B}) & phantom (_ -> _) f := @funS _ _ _ _ f.
Notation
Source code
(at level 8, f at level 2) : form_scope.
#[global] Hint Extern 0 (set_fun _ _ _) => solve [apply: funS] : core.
#[global] Hint Extern 0 (prop_in1 _ _) => solve [apply: funS] : core.
Definition
phant_funS : forall [aT rT : Type] [A : set aT] [B : set rT] [f : {fun A >-> B}], phantom (aT -> rT) f -> set_fun A B f phant_funS is not universe polymorphic Expanded type for implicit arguments phant_funS : forall [aT rT : Type] [A : set aT] [B : set rT] [f : {fun A >-> B}], phantom (aT -> rT) f -> forall [x : aT], [eta A] x -> B (f x) Arguments phant_funS [aT rT]%_type_scope [A B]%_classical_set_scope [f] _ [x] _ phant_funS is transparent Expands to: Constant mathcomp.classical.functions.phant_funS Declared in library mathcomp.classical.functions, line 409, characters 11-21
Source code
image_subP.2 (@funS _ _ _ _ f).
Arguments fun_image_sub {aT rT A B}.
#[global] Hint Extern 0 (_ @` _ `<=` _) => solve [apply: fun_image_sub] : core.
Definition
fun_image_sub : forall {aT rT : Type} {A : set aT} {B : set rT} (f : {fun A >-> B}), ([set f x | x in A] `<=` B)%classic fun_image_sub is not universe polymorphic Arguments fun_image_sub {aT rT}%_type_scope {A B}%_classical_set_scope f t _ fun_image_sub is transparent Expands to: Constant mathcomp.classical.functions.fun_image_sub Declared in library mathcomp.classical.functions, line 416, characters 11-24
Source code
homo_setP.2 (@funS _ _ _ _ f).
#[global] Hint Extern 0 (prop_in1 _ _) => solve [apply: mem_fun] : core.
Definition
mem_fun : forall [aT rT : Type] [A : set aT] [B : set rT] (f : {fun A >-> B}), {homo f : x / x \in A >-> x \in B} mem_fun is not universe polymorphic Expanded type for implicit arguments mem_fun : forall [aT rT : Type] [A : set aT] [B : set rT] (f : {fun A >-> B}) [x : aT], (fun x0 : aT => is_true (x0 \in A)) x -> (f x \in B) = true Arguments mem_fun [aT rT]%_type_scope [A B]%_classical_set_scope f [x] _ mem_fun is transparent Expands to: Constant mathcomp.classical.functions.mem_fun Declared in library mathcomp.classical.functions, line 421, characters 11-18
Source code
( : {fun A >-> B}) & phantom (_ -> _) f := homo_setP.2 (@funS _ _ _ _ f).
Notation
Source code
(at level 8, f at level 2) : form_scope.
Lemma
Source code
Proof.
Definition
phant_mem_fun : forall [aT rT : Type] [A : set aT] [B : set rT] [f : {fun A >-> B}], phantom (aT -> rT) f -> {homo f : x / x \in A >-> x \in B} phant_mem_fun is not universe polymorphic Expanded type for implicit arguments phant_mem_fun : forall [aT rT : Type] [A : set aT] [B : set rT] [f : {fun A >-> B}], phantom (aT -> rT) f -> forall [x : aT], (fun x0 : aT => is_true (x0 \in A)) x -> (f x \in B) = true Arguments phant_mem_fun [aT rT]%_type_scope [A B]%_classical_set_scope [f] _ [x] _ phant_mem_fun is transparent Expands to: Constant mathcomp.classical.functions.phant_mem_fun Declared in library mathcomp.classical.functions, line 425, characters 11-24
Source code
( : {surj A >-> B}) & phantom (_ -> _) f := @oinvK _ _ _ _ f.
Notation
Source code
#[global] Hint Resolve oinvK : core.
Definition
phant_oinvK : forall [aT rT : Type] [A : set aT] [B : set rT] [f : {surj A >-> B}], phantom (aT -> rT) f -> {in B, ocancel 'oinv_f f} phant_oinvK is not universe polymorphic Expanded type for implicit arguments phant_oinvK : forall [aT rT : Type] [A : set aT] [B : set rT] [f : {surj A >-> B}], phantom (aT -> rT) f -> forall [x : rT], x \in B -> oapp f x ('oinv_f x) = x Arguments phant_oinvK [aT rT]%_type_scope [A B]%_classical_set_scope [f] _ [x] _ phant_oinvK is transparent Expands to: Constant mathcomp.classical.functions.phant_oinvK Declared in library mathcomp.classical.functions, line 433, characters 11-22
Source code
( : {surj A >-> B}) & phantom (_ -> _) f := @oinvS _ _ _ _ f.
Notation
Source code
#[global] Hint Resolve oinvS : core.
Variant
Source code
rT -> option aT -> Type :=
Source code
Lemma
Source code
B y -> oinv_spec f y y ('oinv_f y).
Proof.
Definition
phant_oinvS : forall [aT rT : Type] [A : set aT] [B : set rT] [f : {surj A >-> B}], phantom (aT -> rT) f -> {homo 'oinv_f : x / B x >-> [set Some x | x in A]%classic x} phant_oinvS is not universe polymorphic Expanded type for implicit arguments phant_oinvS : forall [aT rT : Type] [A : set aT] [B : set rT] [f : {surj A >-> B}], phantom (aT -> rT) f -> forall [x : rT], [eta B] x -> exists2 x0 : aT, A x0 & Some x0 = 'oinv_f x Arguments phant_oinvS [aT rT]%_type_scope [A B]%_classical_set_scope [f] _ [x] _ phant_oinvS is transparent Expands to: Constant mathcomp.classical.functions.phant_oinvS Declared in library mathcomp.classical.functions, line 438, characters 11-22
Source code
( : {surj A >-> B}) & phantom (_ -> _) f := @oinvP _ _ _ _ f.
Notation
Source code
#[global] Hint Resolve oinvP : core.
Lemma
Source code
B x -> 'oinv_f x.
Proof.
phant_oinvP : forall [aT rT : Type] [A : set aT] [B : set rT] [f : {surj A >-> B}], phantom (aT -> rT) f -> forall [y : rT], B y -> oinv_spec f y y ('oinv_f y) phant_oinvP is not universe polymorphic Arguments phant_oinvP [aT rT]%_type_scope [A B]%_classical_set_scope [f] _ [y] _ phant_oinvP is transparent Expands to: Constant mathcomp.classical.functions.phant_oinvP Declared in library mathcomp.classical.functions, line 454, characters 11-22
Source code
( : {surj A >-> B}) & phantom (_ -> _) f := @oinvT _ _ _ _ f.
Notation
Source code
#[global] Hint Resolve oinvT : core.
Lemma
Source code
{in B, cancel f^-1 f}.
Definition
phant_oinvT : forall [aT rT : Type] [A : set aT] [B : set rT] [f : {surj A >-> B}], phantom (aT -> rT) f -> forall [x : rT], B x -> 'oinv_f x phant_oinvT is not universe polymorphic Arguments phant_oinvT [aT rT]%_type_scope [A B]%_classical_set_scope [f] _ [x] _ phant_oinvT is transparent Expands to: Constant mathcomp.classical.functions.phant_oinvT Declared in library mathcomp.classical.functions, line 462, characters 11-22
Source code
( : {splitsurj A >-> B}) & phantom (_ -> _) f := @invK _ _ _ _ f.
Notation
Source code
#[global] Hint Resolve invK : core.
Lemma
Source code
{homo f^-1 : / B x >-> A x}.
Definition
phant_invK : forall [aT rT : Type] [A : set aT] [B : set rT] [f : {splitsurj A >-> B}], phantom (aT -> rT) f -> {in B, cancel f^-1 f} phant_invK is not universe polymorphic Expanded type for implicit arguments phant_invK : forall [aT rT : Type] [A : set aT] [B : set rT] [f : {splitsurj A >-> B}], phantom (aT -> rT) f -> forall [x : rT], x \in B -> f (f^-1 x) = x Arguments phant_invK [aT rT]%_type_scope [A B]%_classical_set_scope [f] _ [x] _ phant_invK is transparent Expands to: Constant mathcomp.classical.functions.phant_invK Declared in library mathcomp.classical.functions, line 470, characters 11-21
Source code
{ : {splitsurjfun A >-> B}} & phantom (_ -> _) f := @invS _ _ _ _ f.
Notation
Source code
#[global] Hint Resolve invS : core.
Definition
phant_invS : forall [aT rT : Type] [A : set aT] [B : set rT] {f : {splitsurjfun A >-> B}}, phantom (aT -> rT) f -> {homo f^-1 : x / B x >-> A x} phant_invS is not universe polymorphic Expanded type for implicit arguments phant_invS : forall [aT rT : Type] [A : set aT] [B : set rT] {f : {splitsurjfun A >-> B}}, phantom (aT -> rT) f -> forall [x : rT], [eta B] x -> A (f^-1 x) Arguments phant_invS [aT rT]%_type_scope [A B]%_classical_set_scope {f} _ [x] _ phant_invS is transparent Expands to: Constant mathcomp.classical.functions.phant_invS Declared in library mathcomp.classical.functions, line 478, characters 11-21
Source code
& phantom (_ -> _) f := @funoK _ _ _ f.
Notation
Source code
#[global] Hint Resolve funoK : core.
Definition
phant_funoK : forall [aT rT : Type] [A : set aT] [f : {inj A >-> rT}], phantom (aT -> rT) f -> {in A, pcancel f 'oinv_f} phant_funoK is not universe polymorphic Expanded type for implicit arguments phant_funoK : forall [aT rT : Type] [A : set aT] [f : {inj A >-> rT}], phantom (aT -> rT) f -> forall [x : aT], x \in A -> 'oinv_f (f x) = Some x Arguments phant_funoK [aT rT]%_type_scope [A]%_classical_set_scope [f] _ [x] _ phant_funoK is transparent Expands to: Constant mathcomp.classical.functions.phant_funoK Declared in library mathcomp.classical.functions, line 483, characters 11-22
Source code
{in A &, injective f} := pcan_in_inj funoK.
Definition
inj : forall {aT rT : nonPropType} {A : set aT} {f : {inj A >-> rT}}, {in A &, injective f} inj is not universe polymorphic Expanded type for implicit arguments inj : forall {aT rT : nonPropType} {A : set aT} {f : {inj A >-> rT}} [x y : aT], x \in A -> y \in A -> f x = f y -> x = y Arguments inj {aT rT} {A}%_classical_set_scope {f} [x y] _ _ _ inj is transparent Expands to: Constant mathcomp.classical.functions.inj Declared in library mathcomp.classical.functions, line 488, characters 11-14
Source code
phantom (_ -> _) f := @inj _ _ _ f.
Notation
Source code
Definition
phant_inj : forall [aT rT : Type] [A : set aT] [f : {inj A >-> rT}], phantom (aT -> rT) f -> {in A &, injective f} phant_inj is not universe polymorphic Expanded type for implicit arguments phant_inj : forall [aT rT : Type] [A : set aT] [f : {inj A >-> rT}], phantom (aT -> rT) f -> forall [x y : notProp aT], x \in A -> y \in A -> f x = f y -> x = y Arguments phant_inj [aT rT]%_type_scope [A]%_classical_set_scope [f] _ [x y] _ _ _ phant_inj is transparent Expands to: Constant mathcomp.classical.functions.phant_inj Declared in library mathcomp.classical.functions, line 490, characters 11-20
Source code
{in A &, injective f} := inj.
#[global] Hint Extern 0 {in _ &, injective _} => solve [apply: inj_hint] : core.
#[global] Hint Extern 0 (set_inj _ _) => solve [apply: inj_hint] : core.
Lemma
Source code
#[global] Hint Extern 0 (injective _) => solve [apply: injT] : core.
Lemma
Source code
{in A, cancel s s^-1}.
Definition
inj_hint : forall {aT rT : Type} {A : set aT} {f : {inj A >-> rT}}, {in A &, injective f} inj_hint is not universe polymorphic Expanded type for implicit arguments inj_hint : forall {aT rT : Type} {A : set aT} {f : {inj A >-> rT}} [x y : aT], x \in A -> y \in A -> f x = f y -> x = y Arguments inj_hint {aT rT}%_type_scope {A}%_classical_set_scope {f} [x y] _ _ _ inj_hint is transparent Expands to: Constant mathcomp.classical.functions.inj_hint Declared in library mathcomp.classical.functions, line 494, characters 11-19
Source code
& phantom (_ -> _) f := @funK _ _ _ f.
Notation
Source code
#[global] Hint Resolve funK : core.
Lemma
Source code
f = g <-> f =1 g.
Proof.
rewrite eqfg in ffun *; congr {| Fun.sort := _; Fun.class := {|
Fun.functions_isFun_mixin := {|isFun.funS := _|}|}|}.
exact: Prop_irrelevance.
Qed.
.
Source code
Source code
Source code
Source code
Source code
Source code
{ funK : {in A, cancel f f^-1} }.
.
Source code
Source code
Source code
Source code
Local Lemma
Source code
Proof.
Source code
Source code
Source code
.
Source code
.
Source code
Source code
Source code
Source code
Source code
Source code
& Inv aT rT f := {
invS : {homo f^-1 : / B x >-> A x};
invK : {in B, cancel f^-1 f};
}.
.
Source code
Source code
Source code
Source code
Source code
& Inv_CanV _ _ A B f.
#[local] Lemma
Source code
#[local] Lemma
Source code
.
Source code
Source code
Source code
.
Source code
Section OInverse.
Context { : Type} { : set aT} { : set rT}.
.
Source code
Source code
Source code
OInv.Build _ _ 'oinv_f (omap f).
Lemma
Source code
Proof.
.
Source code
Source code
Source code
isFun.Build rT (option aT) B (some @` A) 'oinv_f oinvS.
Lemma
Source code
Proof.
Source code
Source code
Source code
Lemma
Source code
OInv_CanV _ _ B (some @` A) 'oinv_f.
Proof.
Source code
Source code
Source code
.
Source code
Source code
Source code
End OInverse.
Section Inverse.
Context { : Type} { : set aT} { : set rT}.
.
Source code
Source code
Source code
.
Source code
Source code
Source code
Lemma
Source code
Proof.
.
Source code
Source code
Source code
isFun.Build rT aT B A f^-1 invS.
.
Source code
Source code
Source code
.
Source code
Source code
Source code
Inv_Can.Build _ _ _ f^-1 'invK_f.
.
Source code
Source code
Source code
Inv_CanV.Build _ _ _ _ f^-1 funS funK.
.
Source code
Source code
Source code
End Inverse.
Section Some.
Context {} { : set T}.
.
Source code
Source code
Source code
Lemma
Source code
Proof.
Lemma
Source code
Proof.
Source code
Source code
Source code
Lemma
Source code
Proof.
Source code
Source code
Source code
Lemma
Source code
Proof.
Source code
Source code
Source code
End Some.
Section OApply.
Context { } { : set aT} { : set rT} { : rT}.
Local Notation
Source code
.
Source code
Source code
Source code
Inv.Build _ _ (oapp f) 'oinv_f.
Lemma
Source code
Proof.
Source code
Proof.
Source code
Lemma
Source code
.
Source code
Source code
Source code
Lemma
Source code
.
Source code
Source code
Source code
Lemma
Source code
Proof.
Source code
Source code
Source code
.
Source code
Source code
Source code
.
Source code
Source code
Source code
.
Source code
Source code
Source code
.
Source code
Source code
Source code
End OApply.
Section OBind.
Context { } { : set aT} { : set (option rT)}.
Local Notation f := (oapp f None).
Local Notation
Source code
.
Source code
Source code
Source code
Inv.Build _ _ (obind f) 'oinv_f.
Lemma
Source code
Proof.
Source code
Proof.
Source code
.
Source code
Source code
Source code
.
Source code
Source code
Source code
.
Source code
Source code
Source code
.
Source code
Source code
Source code
.
Source code
Source code
Source code
.
Source code
Source code
Source code
End OBind.
Section Composition.
Context { } { : set aT} { : set rT} { : set sT}.
Local Lemma
Source code
isFun _ _ A C (g \o f).
.
Source code
Source code
Source code
Section OInv.
Context { : {oinv aT >-> rT}} { : {oinv rT >-> sT}}.
.
Source code
Source code
Source code
Lemma
Source code
Proof.
Section OInv.
Context { : {inv aT >-> rT}} { : {inv rT >-> sT}}.
Lemma
Source code
.
Source code
Source code
Source code
Lemma
Source code
Proof.
Lemma
Source code
OInv_Can aT sT A (g \o f).
.
Source code
Source code
Source code
.
Source code
Source code
Source code
Inject.on (g \o f).
.
Source code
Source code
Source code
(g : {splitinj B >-> sT}) := Inject.on (g \o f).
.
Source code
Source code
Source code
(g : {splitinjfun B >-> C}) := Inject.on (g \o f).
End Composition.
Section Composition.
Context { } { : set aT} { : set rT} { : set sT}.
Lemma
Source code
OInv_CanV _ _ A C (g \o f).
Proof.
apply: (@ocan_in_comp _ _ _ (mem B)) oinvK oinvK.
by move=> ? /set_mem; rewrite pred_oapp_set inE; apply: funS.
Qed.
.
Source code
Source code
Source code
.
Source code
Source code
Source code
Surject.on (g \o f).
.
Source code
Source code
Source code
Surject.on (g \o f).
.
Source code
Source code
Source code
(g : {splitsurjfun B >-> C}) := Surject.on (g \o f).
.
Source code
Source code
Source code
Surject.on (g \o f).
.
Source code
Source code
Source code
Surject.on (g \o f).
End Composition.
Section totalfun.
Context { : Type}.
Definition
phant_funK : forall [aT rT : Type] [A : set aT] [f : {splitinj A >-> rT}], phantom (aT -> rT) f -> {in A, cancel f f^-1} phant_funK is not universe polymorphic Expanded type for implicit arguments phant_funK : forall [aT rT : Type] [A : set aT] [f : {splitinj A >-> rT}], phantom (aT -> rT) f -> forall [x : aT], x \in A -> f^-1 (f x) = x Arguments phant_funK [aT rT]%_type_scope [A]%_classical_set_scope [f] _ [x] _ phant_funK is transparent Expands to: Constant mathcomp.classical.functions.phant_funK Declared in library mathcomp.classical.functions, line 507, characters 11-21
Source code
Context { : set aT}.
Local Notation
Source code
.
Source code
Source code
isFun.Build _ _ A setT (totalfun f) (fun _ _ => I).
.
Source code
Source code
Source code
.
Source code
Source code
Source code
.
Source code
Source code
Source code
Surject.on (totalfun f).
.
Source code
Source code
Source code
SplitSurj.on (totalfun f).
End totalfun.
Notation
Source code
Notation
Source code
Section Olift.
Context { } { : set aT} { : set rT}.
.
Source code
Source code
Source code
(Some \o f).
Lemma
Source code
Proof.
.
Source code
Source code
Source code
Inject.copy (olift f) (Some \o ('totalfun_A f)).
.
Source code
Source code
Source code
Surject.copy (olift f) (Some \o f).
.
Source code
Source code
Source code
.
Source code
Source code
Source code
.
Source code
Source code
Source code
.
Source code
Source code
Source code
.
Source code
Source code
Source code
End Olift.
Section Map.
Context { } { : set aT} { : set rT}.
Local Notation f := (obind (olift f)).
.
Source code
Source code
Source code
.
Source code
Source code
Source code
Inv.Build _ _ (omap f) (obind 'oinv_f).
Lemma
Source code
Proof.
Source code
Proof.
Source code
.
Source code
Source code
Source code
.
Source code
Source code
Source code
.
Source code
Source code
Source code
.
Source code
Source code
Source code
.
Source code
Source code
Source code
.
Source code
Source code
Source code
End Map.
.
Source code
Source code
Source code
Source code
Source code
Source code
{ inv; invS : {homo inv : / B x >-> A x}; invK : {in B, cancel inv f}; }.
.
Source code
Source code
Source code
Source code
Source code
.
Source code
Source code
Source code
.
Source code
Source code
Source code
.
Source code
.
Source code
Source code
Source code
Source code
Source code
Source code
@OInv _ _ f :=
{
funS : {homo f : / A x >-> B x};
oinvS : {homo 'oinv_f : / B x >-> (some @` A) x};
funoK : {in A, pcancel f 'oinv_f};
oinvK : {in B, ocancel 'oinv_f f};
}.
.
Source code
Source code
Source code
Source code
.
Source code
Source code
Source code
.
Source code
Source code
Source code
.
Source code
Source code
Source code
.
Source code
.
Source code
Source code
Source code
Source code
Source code
Source code
{ oinv; funS : {homo f : / A x >-> B x};
oinvS : {homo oinv : / B x >-> (some @` A) x};
funoK : {in A, pcancel f oinv};
oinvK : {in B, ocancel oinv f};
}.
.
Source code
Source code
Source code
Source code
.
Source code
Source code
Source code
.
Source code
Source code
Source code
.
Source code
.
Source code
Source code
Source code
Source code
Source code
Source code
{ inv; funK : {in A, cancel f inv} }.
.
Source code
Source code
Source code
Source code
.
Source code
Source code
Source code
.
Source code
Source code
Source code
.
Source code
.
Source code
Source code
Source code
Source code
Source code
Source code
Inv _ _ f :=
{ funS : {homo f : / A x >-> B x};
invS : {homo f^-1 : / B x >-> A x};
funK : {in A, cancel f f^-1};
invK : {in B, cancel f^-1 f};
}.
.
Source code
Source code
Source code
Source code
.
Source code
Source code
Source code
.
Source code
Source code
Source code
.
Source code
Source code
Source code
.
Source code
.
Source code
Source code
Source code
Source code
Source code
Source code
{ inv; funS : {homo f : / A x >-> B x};
invS : {homo inv : / B x >-> A x};
funK : {in A, cancel f inv};
invK : {in B, cancel inv f};
}.
.
Source code
Source code
Source code
Source code
.
Source code
Source code
Source code
.
Source code
Source code
Source code
.
Source code
.
Source code
Source code
Source code
Source code
Source code
Source code
@SplitInjFun _ _ A B f :=
{ invS : {homo f^-1 : / B x >-> A x}; injV : {in B &, injective f^-1} }.
.
Source code
Source code
Source code
Source code
Source code
Let
Source code
Local Lemma
Source code
.
Source code
Source code
Source code
.
Source code
.
Source code
Source code
Source code
Source code
Source code
.
Source code
Source code
Source code
Source code
Source code
Local Lemma
Source code
.
Source code
Source code
Source code
(fun => y) (fun => y)
(in1W (projT2 exg).1) (in1W (projT2 exg).2).
.
Source code
Section surj_oinv.
Context { } { : set aT} { : set rT} { : aT -> rT} (
Source code
Let
Source code
if pselect (B y) is left By then some (projT1 (cid2 (fsurj By))) else None.
Lemma
Source code
Proof.
Lemma
Source code
Proof.
by case: cid2 => //= x Ax fxy; exists x.
Qed.
Coercion
totalfun_ : forall {aT rT : Type}, set aT -> (aT -> rT) -> aT -> rT totalfun_ is not universe polymorphic Arguments totalfun_ {aT rT}%_type_scope A%_classical_set_scope f%_function_scope _ totalfun_ is transparent Expands to: Constant mathcomp.classical.functions.totalfun_ Declared in library mathcomp.classical.functions, line 741, characters 11-20
Source code
( : set_surj A B f) :=
OCanV.Build aT rT A B f (surjective_oinvS fS) (surjective_oinvK fS).
Section Psurj.
Context { } { : set aT} { : set rT} { : aT -> rT} (
Source code
Source code
Source code
Source code
Source code
Definition
surjective_ocanV : forall {aT rT : Type} {A : set aT} {B : set rT} {f : aT -> rT}, set_surj A B f -> OCanV.axioms_ aT rT A B f surjective_ocanV is not universe polymorphic Arguments surjective_ocanV {aT rT}%_type_scope {A B}%_classical_set_scope {f}%_function_scope fS surjective_ocanV is a coercion surjective_ocanV is transparent Expands to: Constant mathcomp.classical.functions.surjective_ocanV Declared in library mathcomp.classical.functions, line 905, characters 9-25
Source code
Lemma
Source code
End Psurj.
Coercion surjection_of_surj : set_surj >-> Surject.type.
Lemma
Source code
( : set_surj A B f) :
'oinv_fS y = if pselect (B y) is left By then some (projT1 (cid2 (fS y By))) else None.
Proof.
Lemma
Source code
Proof.
Definition
surjection_of_surj : forall {aT rT : Type} {A : set aT} {B : set rT} {f : aT -> rT}, set_surj A B f -> {surj A >-> B} surjection_of_surj is not universe polymorphic Arguments surjection_of_surj {aT rT}%_type_scope {A B}%_classical_set_scope {f}%_function_scope fsurj surjection_of_surj is a coercion surjection_of_surj is transparent Expands to: Constant mathcomp.classical.functions.surjection_of_surj Declared in library mathcomp.classical.functions, line 913, characters 11-29
Source code
& phantom (_ -> _) f := @surj _ _ _ _ f.
Notation
Source code
#[global] Hint Extern 0 (set_surj _ _ _) => solve [apply: surj] : core.
Section funin_surj.
Context { : Type}.
Definition
phant_surj : forall [aT rT : Type] [A : set aT] [B : set rT] [f : {surj A >-> B}], phantom (aT -> rT) f -> set_surj A B f phant_surj is not universe polymorphic Expanded type for implicit arguments phant_surj : forall [aT rT : Type] [A : set aT] [B : set rT] [f : {surj A >-> B}], phantom (aT -> rT) f -> forall [t : rT], B t -> exists2 x : aT, A x & f x = t Arguments phant_surj [aT rT]%_type_scope [A B]%_classical_set_scope [f] _ [t] _ phant_surj is transparent Expands to: Constant mathcomp.classical.functions.phant_surj Declared in library mathcomp.classical.functions, line 927, characters 11-21
Source code
Context { : set aT} { : set rT} ( : aT -> rT).
Lemma
Source code
Proof.
.
Source code
Source code
Source code
.
Source code
Source code
Source code
((fun _ => id) : set_surj A (f @` A) f).
End funin_surj.
Notation
Source code
#[global] Hint Resolve set_fun_image : core.
Section split.
Context { } ( : set aT) ( : set rT).
Definition
funin : forall {aT rT : Type}, set aT -> (aT -> rT) -> aT -> rT funin is not universe polymorphic Arguments funin {aT rT}%_type_scope A%_classical_set_scope f%_function_scope _ funin is transparent Expands to: Constant mathcomp.classical.functions.funin Declared in library mathcomp.classical.functions, line 935, characters 11-16
Source code
Source code
Context (
Source code
Local Notation
Source code
.
Source code
Source code
Source code
Section oinv.
Context ( : {oinv aT >-> rT}).
Let := odflt (dflt y) ('oinv_f y).
.
Source code
Source code
Source code
Lemma
Source code
Proof.
.
Source code
Source code
Source code
Lemma
Source code
.
Source code
Source code
Source code
.
Source code
Source code
Source code
Lemma
Source code
Lemma
Source code
.
Source code
Source code
Source code
.
Source code
Source code
Source code
.
Source code
Source code
Source code
End split.
Notation
Source code
Notation
Source code
.
Source code
Source code
Source code
Source code
Source code
Source code
{ inj : {in A &, injective f} }.
.
Source code
Source code
Source code
Source code
.
Source code
Source code
Source code
Lemma
Source code
Proof.
Source code
Source code
Source code
.
Source code
.
Source code
Source code
Source code
Source code
Source code
Source code
@SurjFun _ _ A B f := { inj : {in A &, injective f} }.
.
Source code
Source code
Source code
Source code
Source code
@SurjFun_Inj _ _ A B f.
Let := f.
.
Source code
Source code
Source code
Let
Source code
Proof.
Source code
Source code
Source code
.
Source code
.
Source code
Source code
Source code
Source code
Source code
Source code
@SplitSurjFun _ _ A B f :=
{ inj : {in A &, injective f} }.
.
Source code
Source code
Source code
Source code
Source code
@SplitSurjFun_Inj _ _ A B f.
Local Lemma
Source code
.
Source code
Source code
Source code
.
Source code
Section Inverses.
Context { : set aT} { : set rT}.
.
Source code
Source code
Source code
SurjFun_Inj.Build _ _ _ _ [fun f in A] 'inj_f.
End Inverses.
Section Pinj.
Context { } { : set aT} { : aT -> rT} (
Source code
Source code
Source code
Source code
Source code
Lemma
Source code
End Pinj.
Section Pfun.
Context { } { : set aT} { : set rT} { : aT -> rT}
(
Source code
Let : _ -> _ := f.
Source code
Source code
Source code
Source code
Lemma
Source code
End Pfun.
Section injPfun.
Context { } { : set aT} { : set rT} { : {inj A >-> rT}}
(
Source code
Let : _ -> _ := f.
Source code
Source code
Source code
Source code
Source code
Source code
Source code
Source code
Lemma
Source code
End injPfun.
Section funPinj.
Context { } { : set aT} { : set rT} { : {fun A >-> B}}
(
Source code
Let : _ -> _ := f.
Source code
Source code
Source code
Source code
Source code
Source code
Source code
Source code
Lemma
Source code
End funPinj.
Section funPsurj.
Context { } { : set aT} { : set rT} { : {fun A >-> B}}
(
Source code
Let : _ -> _ := f.
Source code
Source code
Source code
Source code
Source code
Source code
Source code
Source code
Lemma
Source code
End funPsurj.
Section surjPfun.
Context { } { : set aT} { : set rT} { : {surj A >-> B}}
(
Source code
Let : _ -> _ := f.
Source code
Source code
Source code
Source code
Source code
Source code
Source code
Source code
Lemma
Source code
End surjPfun.
Section Psplitinj.
Context { } { : set aT} { : aT -> rT} {} (
Source code
Source code
Source code
Source code
Source code
Lemma
Source code
End Psplitinj.
Section funPsplitinj.
Context { } { : set aT} { : set rT} { : {fun A >-> B}}.
Context {} (
Source code
Let : _ -> _ := f.
Source code
Source code
Source code
Source code
Source code
Source code
Source code
Source code
Lemma
Source code
Proof.
Lemma
Source code
{ : {splitinj [set: aT] >-> rT} | f = i}.
Section funPsplitsurj.
Context { } { : set aT} { : set rT} { : {fun A >-> B}}.
Context { : {fun B >-> A}} (
Source code
Let : _ -> _ := f.
Source code
Source code
Source code
Source code
Source code
Source code
Source code
Source code
Lemma
Source code
Proof.
Lemma
Source code
{ : {splitsurjfun [set: aT] >-> [set: rT]} | f = s}.
.
Source code
Source code
Source code
(fun => y) (fun => y) (fun _ _ => erefl) (fun _ _ => erefl).
Context {} { : set aT}.
Local Lemma
Source code
Proof.
.
Source code
Source code
Source code
Section OInv.
Context { : {oinv aT >-> aT}}.
.
Source code
Source code
Source code
(iter n (obind 'oinv_f) \o some).
Lemma
Source code
Proof.
Section OInv.
Context { : {inv aT >-> aT}}.
Lemma
Source code
Proof.
Source code
Source code
Source code
Lemma
Source code
Proof.
Lemma
Source code
Proof.
.
Source code
Source code
Source code
.
Source code
Source code
Source code
.
Source code
Source code
Source code
End iter_inv.
Section iter_surj.
Context {} { : set aT}.
Lemma
Source code
Proof.
elim: n=> // n IH; rewrite oinv_iter iterfSr iterfS.
apply: (@ocan_in_comp _ _ _ (mem A)) => //; last exact: oinvK.
elim: n {IH} => // n IH x Ax; move: (IH _ Ax); rewrite pred_oapp_set ?inE.
case=> y Ay /= ynf; case: (@oinvS _ _ _ _ f _ Ay) => z ? zfinv; exists z => //.
by rewrite zfinv /= -ynf.
Qed.
.
Source code
Source code
Source code
.
Source code
Source code
Source code
.
Source code
Source code
Source code
.
Source code
Source code
Source code
Surject.on (iter n f).
.
Source code
Source code
Source code
.
Source code
Source code
Source code
End iter_surj.
Section Unbind.
Context { } { : set aT} { : set rT} (
Source code
Definition
split_ : forall {aT rT : Type}, (rT -> aT) -> (aT -> rT) -> aT -> rT split_ is not universe polymorphic Arguments split_ {aT rT}%_type_scope (dflt f)%_function_scope _ split_ is transparent Expands to: Constant mathcomp.classical.functions.split_ Declared in library mathcomp.classical.functions, line 956, characters 11-17
Source code
Lemma
Source code
.
Source code
Source code
Source code
Section Oinv.
Context ( : {oinv aT >-> option rT}).
.
Source code
Source code
Source code
Lemma
Source code
Proof.
.
Source code
Source code
Source code
Section Inv.
Context ( : {inv aT >-> option rT}).
Lemma
Source code
Proof.
Source code
Source code
Source code
Lemma
Source code
Proof.
.
Source code
Source code
Source code
Lemma
Source code
@OInv_Can _ _ A (unbind f).
Proof.
Source code
Source code
Source code
.
Source code
Source code
Source code
Inject.on (unbind f).
Lemma
Source code
@OInv_CanV _ _ A B (unbind f).
Proof.
by case: oinvP => [|a]; [exists b | exists a].
by case: oinvP => [|a Aa /= ->]; first by exists b.
Qed.
Source code
Source code
Source code
.
Source code
Source code
Source code
Surject.on (unbind f).
.
Source code
Source code
Source code
Surject.on (unbind f).
.
Source code
Source code
Source code
Surject.on (unbind f).
.
Source code
Source code
Source code
.
Source code
Source code
Source code
End Unbind.
Section Odflt.
Context {} { : set T} ( : T).
Lemma
Source code
Proof.
.
Source code
Source code
Source code
.
Source code
Source code
Source code
[the {splitbij some @` A >-> A} of @unbind (option T) T (fun=> x) idfun].
End Odflt.
Section SubType.
Context { : Type} { : pred T} ( : subType P) ( : sT).
.
Source code
Source code
Source code
Lemma
Source code
Proof.
Lemma
Source code
Proof.
Source code
Source code
Source code
.
Source code
Source code
Source code
.
Source code
Source code
Source code
(odflt x0 \o 'split_(fun=> val x0) insub).
Lemma
Source code
Proof.
End SubType.
Definition
unbind : forall {aT rT : Type}, (aT -> rT) -> (aT -> option rT) -> aT -> rT unbind is not universe polymorphic Arguments unbind {aT rT}%_type_scope (dflt f)%_function_scope x unbind is transparent Expands to: Constant mathcomp.classical.functions.unbind Declared in library mathcomp.classical.functions, line 1210, characters 11-17
Source code
@SigSub _ _ _ x (mem_set I : x \in setT).
.
Source code
Source code
Source code
((fun _ _ => erefl) : {in setT, cancel to_setT val}).
.
Source code
Source code
Source code
.
Source code
Source code
SplitInjFun_CanV.Build T _ _ _ to_setT (fun => I) inj.
Definition
to_setT : forall {T : Type}, T -> [set: T]%classic to_setT is not universe polymorphic Arguments to_setT {T}%_type_scope x to_setT is transparent Expands to: Constant mathcomp.classical.functions.to_setT Declared in library mathcomp.classical.functions, line 1304, characters 11-18
Source code
Lemma
Source code
Proof.
Section subfun.
Context {} { : set T}.
Definition
setTbij : forall {T : Type}, {splitbij [set: T] >-> [set: [set: T]%classic]} setTbij is not universe polymorphic Arguments setTbij {T}%_type_scope setTbij is transparent Expands to: Constant mathcomp.classical.functions.setTbij Declared in library mathcomp.classical.functions, line 1311, characters 11-18
Source code
SigSub (mem_set (AB _ (set_valP a))).
Lemma
Source code
.
Source code
Source code
SurjFun.copy (subfun AB) [fun subfun AB in setT].
.
Source code
Source code
SurjFun_Inj.Build A B setT (subfun AB @` setT) (subfun AB) (in2W subfun_inj).
End subfun.
Section subfun_eq.
Context {} { : set T}.
Lemma
Source code
Lemma
Source code
olift (subfun (subsetCW AB)) = 'oinv_(subfun (subsetW AB)).
Proof.
Source code
Source code
OInv_Inv.Build A B (subfun (subsetW AB)) (subfun_inv_subproof AB).
End subfun_eq.
Section seteqfun.
Context { : Type}.
Definition
subfun : forall {T : Type} {A B : set T}, (A `<=` B)%classic -> A -> B subfun is not universe polymorphic Arguments subfun {T}%_type_scope {A B}%_classical_set_scope AB a subfun is transparent Expands to: Constant mathcomp.classical.functions.subfun Declared in library mathcomp.classical.functions, line 1320, characters 11-17
Source code
Context { : set T} ( : A = B).
.
Source code
Source code
Source code
Lemma
Source code
.
Source code
Source code
Source code
End seteqfun.
Section incl.
Context {} { : set T}.
Definition
seteqfun : forall {T : Type} {A B : set T}, A = B -> A -> B seteqfun is not universe polymorphic Arguments seteqfun {T}%_type_scope {A B}%_classical_set_scope AB a seteqfun is transparent Expands to: Constant mathcomp.classical.functions.seteqfun Declared in library mathcomp.classical.functions, line 1360, characters 11-19
Source code
.
Source code
Source code
.
Source code
Source code
.
Source code
Source code
Inv_Can.Build _ _ A (incl AB) (fun _ _ => erefl).
Definition
incl : forall {T : Type} {A B : set T}, (A `<=` B)%classic -> T -> T incl is not universe polymorphic Arguments incl {T}%_type_scope {A B}%_classical_set_scope AB x incl is transparent Expands to: Constant mathcomp.classical.functions.incl Declared in library mathcomp.classical.functions, line 1375, characters 11-15
Source code
.
Source code
Source code
Source code
Lemma
Source code
.
Source code
Source code
Source code
End incl.
Notation
Source code
Section mkfun.
Context {} {} { : set aT} { : set rT}.
Notation
Source code
Definition
eqincl : forall {T : Type} {A B : set T}, A = B -> T -> T eqincl is not universe polymorphic Arguments eqincl {T}%_type_scope {A B}%_classical_set_scope AB x eqincl is transparent Expands to: Constant mathcomp.classical.functions.eqincl Declared in library mathcomp.classical.functions, line 1382, characters 11-17
Source code
Source code
.
Source code
Source code
Source code
Source code
Definition
mkfun : forall {aT rT : Type} {A : set aT} {B : set rT} [f : aT -> rT], {homo f : x / A x >-> B x} -> aT -> rT mkfun is not universe polymorphic Arguments mkfun {aT rT}%_type_scope {A B}%_classical_set_scope [f]%_function_scope fAB _ mkfun is transparent Expands to: Constant mathcomp.classical.functions.mkfun Declared in library mathcomp.classical.functions, line 1396, characters 11-16
Source code
Source code
.
Source code
Source code
Source code
.
Source code
Source code
Source code
SplitInj.on (@mkfun f fAB).
.
Source code
Source code
Source code
Surject.on (@mkfun f fAB).
.
Source code
Source code
Source code
SplitSurj.on (@mkfun f fAB).
End mkfun.
Section set_val.
Context {} { : set T}.
Definition
mkfun_fun : forall {aT rT : Type} {A : set aT} {B : set rT} [f : aT -> rT], {homo f : x / A x >-> B x} -> {fun A >-> B} mkfun_fun is not universe polymorphic Arguments mkfun_fun {aT rT}%_type_scope {A B}%_classical_set_scope [f]%_function_scope fAB mkfun_fun is transparent Expands to: Constant mathcomp.classical.functions.mkfun_fun Declared in library mathcomp.classical.functions, line 1398, characters 11-20
Source code
.
Source code
Source code
Source code
Lemma
Source code
Proof.
Source code
Proof.
#[global]
Hint Extern 0 (is_true (set_val _ \in _)) => solve [apply: valP] : core.
.
Source code
Source code
Source code
(in1W unsquashK).
.
Source code
Source code
Source code
Definition
set_val : forall {T : Type} {A : set T}, A -> T set_val is not universe polymorphic Arguments set_val {T}%_type_scope {A}%_classical_set_scope _ set_val is transparent Expands to: Constant mathcomp.classical.functions.set_val Declared in library mathcomp.classical.functions, line 1412, characters 11-18
Source code
.
Source code
Source code
Source code
Inj.Build _ _ setT (@choice.pickle T) (in2W (pcan_inj choice.pickleK)).
.
Source code
Source code
Source code
isFun.Build _ _ setT setT (@choice.pickle T) (fun _ _ => I).
Lemma
Source code
Proof.
.
Source code
Source code
Inj.Build (@set0 T) P setT set0fun (in2W set0fun_inj).
.
Source code
Source code
isFun.Build _ _ setT setT (@set0fun P T) (fun _ _ => I).
.
Source code
Source code
Source code
Can2.Build 'I_m 'I_n setT setT (cast_ord eq_mn)
(fun _ _ => I) (fun _ _ => I)
(in1W (cast_ordK _)) (in1W (cast_ordKV _)).
.
Source code
Source code
Source code
Can2.Build T _ setT setT enum_rank (fun _ _ => I) (fun _ _ => I)
(in1W enum_rankK) (in1W enum_valK).
.
Source code
Source code
Source code
Can2.Build _ T setT setT enum_val (fun _ _ => I) (fun _ _ => I)
(in1W enum_valK) (in1W enum_rankK).
Definition
ssquash : forall {T : Type}, {splitsurj [set: T] >-> [set: $| T |]} ssquash is not universe polymorphic Arguments ssquash {T}%_type_scope ssquash is transparent Expands to: Constant mathcomp.classical.functions.ssquash Declared in library mathcomp.classical.functions, line 1426, characters 11-18
Source code
exist (fun => x \in [set` X]) (val x) (mem_set (valP x)).
Definition
finset_val : forall {T : choiceType} {X : {fset T}}, X -> [set` X]%classic finset_val is not universe polymorphic Arguments finset_val {T X} x finset_val is transparent Expands to: Constant mathcomp.classical.functions.finset_val Declared in library mathcomp.classical.functions, line 1464, characters 11-21
Source code
[` set_mem (valP x)]%fset.
Lemma
Source code
cancel (@finset_val T X) val_finset.
Proof.
Lemma
Source code
cancel (@val_finset T X) finset_val.
Proof.
.
Source code
Source code
Source code
Can2.Build X _ setT setT finset_val (fun _ _ => I) (fun _ _ => I)
(in1W finset_valK) (in1W val_finsetK).
.
Source code
Source code
Source code
Can2.Build _ X setT setT val_finset (fun _ _ => I) (fun _ _ => I)
(in1W val_finsetK) (in1W finset_valK).
.
Source code
Source code
Source code
(fun _ _ => I) (fun _ _ => I) (in1W ordIIK) (in1W IIordK).
.
Source code
Source code
Source code
Definition
val_finset : forall {T : choiceType} {X : {fset T}}, [set` X]%classic -> X val_finset is not universe polymorphic Arguments val_finset {T X} x val_finset is transparent Expands to: Constant mathcomp.classical.functions.val_finset Declared in library mathcomp.classical.functions, line 1466, characters 11-21
Source code
& [disjoint X & Y] & [disjoint A & B] :=
fun ( : T -> T') ( : T) => if u \in X then f u else g u.
Section Glue12.
Context { } { : set T} { : set T'}.
Context { : [disjoint X & Y]} { : [disjoint A & B]}.
Local Notation := (glue XY AB).
Definition
glue : forall {T T' : Type} {X Y : set T} {A B : set T'}, [disjoint X & Y]%classic -> [disjoint A & B]%classic -> (T -> T') -> (T -> T') -> T -> T' glue is not universe polymorphic Arguments glue {T T'}%_type_scope {X Y A B}%_classical_set_scope _ _ (f g)%_function_scope u glue is transparent Expands to: Constant mathcomp.classical.functions.glue Declared in library mathcomp.classical.functions, line 1494, characters 11-15
Source code
Proof.
Definition
glue1 : forall {T T' : Type} {X Y : set T} {A B : set T'} {XY : [disjoint X & Y]%classic} {AB : [disjoint A & B]%classic} (f g : T -> T'), {in X, glue XY AB f g =1 f} glue1 is not universe polymorphic Expanded type for implicit arguments glue1 : forall {T T' : Type} {X Y : set T} {A B : set T'} {XY : [disjoint X & Y]%classic} {AB : [disjoint A & B]%classic} (f g : T -> T') [x : T], x \in X -> glue XY AB f g x = f x Arguments glue1 {T T'}%_type_scope {X Y A B}%_classical_set_scope {XY AB} (f g)%_function_scope [x] _ glue1 is opaque Expands to: Constant mathcomp.classical.functions.glue1 Declared in library mathcomp.classical.functions, line 1503, characters 11-16
Source code
Proof.
Section Glue.
Context { } { : set T} { : set T'}.
Context { : [disjoint X & Y]} { : [disjoint A & B]}.
Local Notation := (glue XY AB).
Lemma
Source code
isFun T T' (X `|` Y) (A `|` B) (gl f g).
Proof.
Source code
Source code
Source code
.
Source code
Source code
Source code
OInv.Build _ _ (gl f g) (glue AB (eqbRL disj_set_some XY) 'oinv_f 'oinv_g).
.
Source code
Source code
Source code
OInversible.on (gl f g).
Lemma
Source code
'oinv_(gl f g) = glue AB (eqbRL disj_set_some XY) 'oinv_f 'oinv_g.
Proof.
Lemma
Source code
some \o (glue AB XY f^-1 g^-1) = 'oinv_(gl f g).
.
Source code
Source code
Source code
OInv_Inv.Build T T' (gl f g) (some_inv_glue_subproof f g).
.
Source code
Source code
Source code
Inversible.on (gl f g).
Lemma
Source code
(gl f g)^-1 = glue AB XY f^-1 g^-1.
Proof.
Lemma
Source code
OInv_Can _ _ (X `|` Y) (gl f g).
Proof.
Source code
Source code
Source code
.
Source code
Source code
Source code
(g : {splitinjfun Y >-> B}) := Inject.on (gl f g).
Lemma
Source code
OInv_CanV _ _ (X `|` Y) (A `|` B) (gl f g).
Proof.
- by move=> [] zP /=; [rewrite glue1|rewrite glue2]; rewrite ?inE//;
case: oinvP=> // x xX _; exists x => //; [left|right].
- by rewrite glue1 ?inE//; case: oinvP=> //= x xX _; rewrite glue1 ?inE.
- by rewrite glue2 ?inE//; case: oinvP=> //= x xX _; rewrite glue2 ?inE.
Qed.
Source code
Source code
Source code
.
Source code
Source code
Source code
Surject.on (gl f g).
.
Source code
Source code
Source code
Surject.on (gl f g).
.
Source code
Source code
Source code
Surject.on (gl f g).
.
Source code
Source code
Source code
Surject.on (gl f g).
.
Source code
Source code
Source code
Surject.on (gl f g).
End Glue.
Section addition.
Context { : zmodType} ( : V).
.
Source code
Source code
Source code
Lemma
Source code
Proof.
Lemma
Source code
.
Source code
Source code
Source code
End addition.
Section addition.
Context { : zmodType} ( : V).
Local Open Scope ring_scope.
.
Source code
Source code
Source code
Lemma
Source code
Proof.
Lemma
Source code
.
Source code
Source code
Source code
End addition.
Section empty.
Context { : emptyType} { : Type} { : set T}.
Implicit Type Y : set T'.
.
Source code
Source code
Source code
Lemma
Source code
.
Source code
Source code
Source code
Lemma
Source code
Proof.
Source code
Source code
Source code
Lemma
Source code
Proof.
Source code
Source code
Source code
End empty.
Section surj_lemmas.
Variables : Type.
Implicit Types (A : set aT) (B : set rT) (f : aT -> rT).
Lemma
Source code
Proof.
Lemma
Source code
Proof.
Lemma
Source code
Proof.
Lemma
Source code
Proof.
Lemma
Source code
Proof.
Lemma
Source code
Proof.
Lemma
Source code
{in B, cancel g f} -> g @` B `<=` A ->
set_surj A B f.
Proof.
by have := image_subP.1 gBA y; apply.
Qed.
Lemma
Source code
set_surj A B f -> {in A, g \o f =1 g' \o f} -> {in B, g =1 g'}.
Proof.
Lemma
Source code
forall ( : rT -> sT), {in A, g \o f =1 g' \o f} -> {in B, g =1 g'}.
Proof.
End surj_lemmas.
Arguments can_surj {aT rT} g [f A B].
Arguments surj_epi {aT rT sT} A {B} f {g}.
Lemma
Source code
set_surj A B f -> set_surj B C g -> set_surj A C (g \o f).
Lemma
Source code
Proof.
Lemma
Source code
( : {surj A >-> B}) { : set rT} :
C `<=` B -> 'oinv_f @` C `<=` some @` (f @^-1` C).
Proof.
by exists a => //; rewrite fay.
Qed.
Lemma
Source code
C `<=` f @` A -> some @` (A `&` f @^-1` C) `<=` 'oinv_f @` C.
Arguments oinv_Iimage_sub {aT rT A} f {C} _.
Lemma
Source code
{ : set rT} ( : C `<=` B) : 'oinv_f @` C = some @` (A `&` f @^-1` C).
Proof.
rewrite some_setI subsetI; split; last by apply: oinv_image_sub.
by apply: (subset_trans (image_subset CB)); rewrite image_eq.
Qed.
Lemma
Source code
{ : set rT} ( : C `<=` B) : some @` (f @^-1` C) = 'oinv_f @` C.
Proof.
Lemma
Source code
( : {splitsurj A >-> B}) { : set rT} :
C `<=` B -> f^-1 @` C `<=` f @^-1` C.
Arguments inv_image_sub {aT rT A B} f {C} _.
Lemma
Source code
C `<=` f @` A -> A `&` f @^-1` C `<=` f^-1 @` C.
Arguments inv_Iimage_sub {aT rT A} f {C} _.
Lemma
Source code
{ : set rT} ( : C `<=` B) :
f^-1 @` C = A `&` f @^-1` C.
Proof.
Lemma
Source code
{ : set rT} ( : C `<=` B) : f @^-1` C = f^-1 @` C.
Proof.
Lemma
Source code
( : I -> set rT) : set_fun P Q f -> set_surj P Q f ->
\bigcup_( in Q) F x = \bigcup_( in P) F (f x).
Proof.
Lemma
Source code
( : I -> set rT) : set_fun P Q f -> set_surj P Q f ->
\bigcap_( in Q) F x = \bigcap_( in P) F (f x).
Proof.
Lemma
Source code
J ->
\bigcap_( in D) \bigcup_( in E) F i j =
\bigcup_( in set_fun D E) \bigcap_( in D) F i (f i).
Proof.
Lemma
Source code
(forall , D i -> F i !=set0) -> trivIset D F -> set_inj D F.
Proof.
Section set_bij_lemmas.
Context { : Type} { : set aT} { : set rT} { : aT -> rT}.
Definition
glue2 : forall {T T' : Type} {X Y : set T} {A B : set T'} {XY : [disjoint X & Y]%classic} {AB : [disjoint A & B]%classic} (f g : T -> T'), {in Y, glue XY AB f g =1 g} glue2 is not universe polymorphic Expanded type for implicit arguments glue2 : forall {T T' : Type} {X Y : set T} {A B : set T'} {XY : [disjoint X & Y]%classic} {AB : [disjoint A & B]%classic} (f g : T -> T') [x : T], x \in Y -> glue XY AB f g x = g x Arguments glue2 {T T'}%_type_scope {X Y A B}%_classical_set_scope {XY AB} (f g)%_function_scope [x] _ glue2 is opaque Expands to: Constant mathcomp.classical.functions.glue2 Declared in library mathcomp.classical.functions, line 1506, characters 11-16
Source code
Context (
Source code
Local Notation := (fun_set_bij fbij).
Lemma
Source code
Proof.
Lemma
Source code
Proof.
Lemma
Source code
Proof.
Lemma
Source code
Proof.
.
Source code
Source code
Source code
.
Source code
Source code
Source code
.
Source code
Source code
Source code
End set_bij_lemmas.
Coercion fun_set_bij : set_bij >-> Funclass.
Coercion
fun_set_bij : forall {aT rT : Type} {A : set aT} {B : set rT} {f : aT -> rT}, set_bij A B f -> aT -> rT fun_set_bij is not universe polymorphic Arguments fun_set_bij {aT rT}%_type_scope {A B}%_classical_set_scope {f}%_function_scope _ _ fun_set_bij is a coercion fun_set_bij is transparent Expands to: Constant mathcomp.classical.functions.fun_set_bij Declared in library mathcomp.classical.functions, line 1792, characters 11-22
Source code
( : set_bij A B f) := Bij.on (fun_set_bij fS).
Section Pbij.
Context { } { : set aT} { : set rT} { : aT -> rT} (
Source code
Source code
Source code
Source code
Source code
Definition
set_bij_bijfun : forall [aT rT : Type] [A : set aT] [B : set rT] [f : aT -> rT] (fS : set_bij A B f), Bij.axioms_ A B fS set_bij_bijfun is not universe polymorphic Arguments set_bij_bijfun [aT rT]%_type_scope [A B]%_classical_set_scope [f]%_function_scope fS set_bij_bijfun is a coercion set_bij_bijfun is transparent Expands to: Constant mathcomp.classical.functions.set_bij_bijfun Declared in library mathcomp.classical.functions, line 1811, characters 9-23
Source code
Lemma
Source code
End Pbij.
Coercion bij_of_set_bijection : set_bij >-> Bij.type.
Lemma
Source code
Proof.
bij_of_set_bijection : forall {aT rT : Type} {A : set aT} {B : set rT} {f : aT -> rT}, set_bij A B f -> {bij A >-> B} bij_of_set_bijection is not universe polymorphic Arguments bij_of_set_bijection {aT rT}%_type_scope {A B}%_classical_set_scope {f}%_function_scope fbij bij_of_set_bijection is a coercion bij_of_set_bijection is transparent Expands to: Constant mathcomp.classical.functions.bij_of_set_bijection Declared in library mathcomp.classical.functions, line 1817, characters 11-31
Source code
phantom (_ -> _) f := @bij _ _ _ _ f.
Notation
Source code
#[global] Hint Extern 0 (set_bij _ _ _) => solve [apply: bij] : core.
Section PbijTT.
Context { } { : aT -> rT} (
Source code
Source code
Source code
Source code
Source code
Definition
phant_bij : forall [aT rT : Type] [A : set aT] [B : set rT] [f : {bij A >-> B}], phantom (aT -> rT) f -> set_bij A B f phant_bij is not universe polymorphic Arguments phant_bij [aT rT]%_type_scope [A B]%_classical_set_scope [f] _ phant_bij is transparent Expands to: Constant mathcomp.classical.functions.phant_bij Declared in library mathcomp.classical.functions, line 1824, characters 11-20
Source code
Lemma
Source code
End PbijTT.
Lemma
Source code
set_bij [set: aT] [set: rT] f = bijective f.
Proof.
Lemma
Source code
Proof.
bijection_of_bijective : forall {aT rT : Type} {f : aT -> rT}, bijective f -> {splitbij [set: aT] >-> [set: rT]} bijection_of_bijective is not universe polymorphic Arguments bijection_of_bijective {aT rT}%_type_scope {f}%_function_scope fbijTT bijection_of_bijective is transparent Expands to: Constant mathcomp.classical.functions.bijection_of_bijective Declared in library mathcomp.classical.functions, line 1832, characters 11-33
Source code
& phantom (_ -> _) f := @bijTT _ _ f.
Notation
Source code
#[global] Hint Extern 0 (bijective _) => solve [apply: bijTT] : core.
Section patch.
Context { : Type} ( : aT -> rT) ( : set aT).
Definition
phant_bijTT : forall [aT rT : Type] [f : {bij [set: aT] >-> [set: rT]}], phantom (aT -> rT) f -> bijective f phant_bijTT is not universe polymorphic Arguments phant_bijTT [aT rT]%_type_scope [f] _ phant_bijTT is transparent Expands to: Constant mathcomp.classical.functions.phant_bijTT Declared in library mathcomp.classical.functions, line 1848, characters 11-22
Source code
Lemma
Source code
Proof.
Source code
Lemma
Source code
Proof.
.
Source code
Source code
SurjFun.copy (patch f) [fun patch f in A].
Section inj.
Context ( : {inj A >-> rT}).
Let := patch f.
Lemma
Source code
.
Source code
Source code
Source code
.
Source code
Source code
Source code
End inj.
End patch.
Notation
Source code
Notation
Source code
Lemma
Source code
(f \_ B) x = if x \in B then f x else point.
Proof.
Lemma
Source code
patch d D f = fun => if D i then f i else d i.
Lemma
Source code
( : aT -> rT) ( : set aT) ( : set rT) :
(f \_ D) @^-1` B = (if point \in B then ~` D else set0) `|` D `&` f @^-1` B.
Proof.
Lemma
Source code
h \o patch g D f = patch (h \o g) D (h \o f).
Lemma
Source code
patch g (D `&` D') f = patch g D (patch g D' f).
Lemma
Source code
patch g set0 f = g.
Lemma
Source code
patch g setT f = f.
Lemma
Source code
h point = point -> (h \o f) \_ D = h \o (f \_ D).
Arguments restrict_comp {aT rT sT} h f D.
Lemma
Source code
trivIset D' (F \_ D) = trivIset (D `&` D') F.
Proof.
Section RestrictionLeft.
Context { : Type} ( : V) { : set U} { : set V}.
Local Notation
Source code
Definition
patch : forall {aT rT : Type}, (aT -> rT) -> set aT -> (aT -> rT) -> aT -> rT patch is not universe polymorphic Arguments patch {aT rT}%_type_scope d%_function_scope A%_classical_set_scope f%_function_scope u patch is transparent Expands to: Constant mathcomp.classical.functions.patch Declared in library mathcomp.classical.functions, line 1859, characters 11-16
Source code
Lemma
Source code
Proof.
Source code
Source code
Source code
Definition
sigL : forall {U V : Type} (A : set U), (U -> V) -> A -> V sigL is not universe polymorphic Arguments sigL {U V}%_type_scope A%_classical_set_scope f%_function_scope u / (where some original arguments have been renamed) The reduction tactics unfold sigL when applied to 5 arguments sigL is transparent Expands to: Constant mathcomp.classical.functions.sigL Declared in library mathcomp.classical.functions, line 1946, characters 11-15
Source code
Definition
sigLfun : forall {U V : Type} {A : set U} {B : set V}, {fun A >-> B} -> {fun [set: A] >-> B} sigLfun is not universe polymorphic Arguments sigLfun {U V}%_type_scope {A B}%_classical_set_scope f sigLfun is transparent Expands to: Constant mathcomp.classical.functions.sigLfun Declared in library mathcomp.classical.functions, line 1952, characters 11-18
Source code
Lemma
Source code
isFun _ _ A B (valL_ (f : _ -> _)).
Proof.
Source code
Source code
Source code
Definition
valL_ : forall {U V : Type}, V -> forall {A : set U}, (A -> V) -> U -> V valL_ is not universe polymorphic Arguments valL_ {U V}%_type_scope v {A}%_classical_set_scope f%_function_scope u / (where some original arguments have been renamed) The reduction tactics unfold valL_ when applied to 6 arguments valL_ is transparent Expands to: Constant mathcomp.classical.functions.valL_ Declared in library mathcomp.classical.functions, line 1953, characters 11-16
Source code
Lemma
Source code
sigL f (SigSub xA) = f x.
Proof.
Lemma
Source code
{in A, f =1 g} <-> sigL f = sigL g.
Proof.
Lemma
Source code
{in A, f =1 g} <-> sigLfun f = sigLfun g.
Lemma
Source code
Proof.
Lemma
Source code
Proof.
Lemma
Source code
Lemma
Source code
Lemma
Source code
Lemma
Source code
Lemma
Source code
Lemma
Source code
End RestrictionLeft.
Arguments sigL {U V} A f u /.
Arguments sigLE {U V} A f x.
Arguments valL_ {U V} v {A} f u /.
Notation
Source code
Notation
Source code
Notation
Source code
Section RestrictionRight.
Context { : Type} { : set V}.
Definition
valLfun_ : forall {U V : Type}, V -> forall {A : set U} {B : set V}, {fun [set: A] >-> B} -> {fun A >-> B} valLfun_ is not universe polymorphic Arguments valLfun_ {U V}%_type_scope v {A B}%_classical_set_scope f valLfun_ is transparent Expands to: Constant mathcomp.classical.functions.valLfun_ Declared in library mathcomp.classical.functions, line 1959, characters 11-19
Source code
SigSub (mem_set ('funS_f I) : f u \in A).
.
Source code
Source code
Source code
Definition
sigR : forall {U V : Type} {A : set V}, {fun [set: U] >-> A} -> U -> A sigR is not universe polymorphic Arguments sigR {U V}%_type_scope {A}%_classical_set_scope f u / The reduction tactics unfold sigR when applied to 5 arguments sigR is transparent Expands to: Constant mathcomp.classical.functions.sigR Declared in library mathcomp.classical.functions, line 2024, characters 11-15
Source code
.
Source code
Source code
Source code
Definition
valR : forall {U V : Type} {A : set V}, (U -> A) -> U -> V valR is not universe polymorphic Arguments valR {U V}%_type_scope {A}%_classical_set_scope f%_function_scope x valR is transparent Expands to: Constant mathcomp.classical.functions.valR Declared in library mathcomp.classical.functions, line 2028, characters 11-15
Source code
Lemma
Source code
Proof.
Lemma
Source code
Lemma
Source code
Proof.
Lemma
Source code
End RestrictionRight.
Arguments sigR {U V A} f u /.
Section RestrictionLeftInv.
Context { : Type} ( : V) { : set U} { : set V}.
Local Notation := (sigL A).
Local Notation := sigR.
Local Notation := 'valL_v.
Local Notation := valR.
.
Source code
Source code
Source code
@OInv.Build _ _ (rl f) (obind insub \o 'oinv_f).
.
Source code
Source code
Source code
Lemma
Source code
Proof.
Lemma
Source code
.
Source code
Source code
Source code
.
Source code
Source code
Source code
Lemma
Source code
Proof.
Source code
Source code
Source code
.
Source code
Source code
Source code
.
Source code
Source code
Source code
.
Source code
Source code
Source code
@OInv.Build _ _ (rr f) (rl 'oinv_f).
Lemma
Source code
'oinv_(rr f) = (rl 'oinv_f).
Proof.
Lemma
Source code
@OInv_Can _ _ setT (rr f).
.
Source code
Source code
Source code
Lemma
Source code
@OInv_CanV _ _ setT setT (rr f).
Proof.
Source code
Source code
Source code
Lemma
Source code
olift (rl f^-1) = 'oinv_(rr f).
Proof.
Source code
Source code
Source code
.
Source code
Source code
Source code
@OInv_Inv.Build _ _ (rr f) (rl f^-1) (sigR_some_inv f).
Lemma
Source code
Proof.
.
Source code
Source code
Source code
.
Source code
Source code
Source code
.
Source code
Source code
Source code
Lemma
Source code
olift (rr [fun of f^-1]) = 'oinv_(rl f).
Proof.
Source code
Source code
Source code
OInv_Inv.Build _ _ (rl f) (sigL_some_inv f).
Lemma
Source code
(rl f)^-1 = (rr [fun of f^-1]).
Proof.
.
Source code
Source code
Source code
@OInv.Build _ _ (el f) (omap set_val \o 'oinv_f).
.
Source code
Source code
Source code
Lemma
Source code
'oinv_(el f) = omap set_val \o 'oinv_f.
Proof.
Lemma
Source code
oapp (g \o f) (g x) y = g (oapp f x y).
Proof.
Lemma
Source code
Proof.
Source code
Source code
Source code
.
Source code
Source code
Source code
Lemma
Source code
Proof.
Source code
Source code
Source code
.
Source code
Source code
Source code
.
Source code
Source code
Source code
Lemma
Source code
Proof.
Source code
Source code
Source code
OInv_Inv.Build _ _ (el f) (valL_some_inv f).
.
Source code
Source code
Source code
Lemma
Source code
Proof.
.
Source code
Source code
Source code
.
Source code
Source code
Source code
.
Source code
Source code
Source code
.
Source code
Source code
Source code
.
Source code
Source code
Source code
Lemma
Source code
injective (rl f) <-> {in A &, injective f}.
Proof.
Lemma
Source code
set_surj [set: A] B (rl f) <-> set_surj A B f.
Proof.
Lemma
Source code
set_fun [set: A] B (rl f) <-> set_fun A B f.
Lemma
Source code
set_bij [set: A] B (rl f) <-> set_bij A B f.
Proof.
by split; [exact/sigL_funP|exact/sigL_injP|exact/sigL_surjP].
Qed.
Lemma
Source code
Lemma
Source code
set_surj A B (el f) <-> set_surj setT B f.
Proof.
Lemma
Source code
set_fun A B (el f) <-> set_fun setT B f.
Lemma
Source code
set_bij A B (el f) <-> set_bij setT B f.
End RestrictionLeftInv.
Section ExtentionLeftInv.
Context { : Type} { : set U} { : set V}.
Local Notation := 'valL_None.
Local Notation := valR.
.
Source code
Source code
Source code
@OInv.Build _ _ (er f) (el 'oinv_f).
Lemma
Source code
Proof.
Lemma
Source code
@OInv_Can _ _ setT (er f).
.
Source code
Source code
Source code
Lemma
Source code
@OInv_CanV _ _ setT A (er f).
Proof.
Source code
Source code
Source code
.
Source code
Source code
Source code
End ExtentionLeftInv.
Section Restrictions2.
Context { : Type} ( : V) { : set U} { : set V}.
Local Notation
Source code
Local Notation
Source code
Definition
valR_fun : forall {U V : Type} {A : set V}, (U -> A) -> {fun [set: U] >-> A} valR_fun is not universe polymorphic Arguments valR_fun {U V}%_type_scope {A}%_classical_set_scope f%_function_scope valR_fun is transparent Expands to: Constant mathcomp.classical.functions.valR_fun Declared in library mathcomp.classical.functions, line 2031, characters 11-19
Source code
.
Source code
Source code
Source code
Fun.copy (sigLR f) (totalfun _).
Definition
sigLR : forall {U V : Type} {A : set U} {B : set V}, {fun A >-> B} -> A -> B sigLR is not universe polymorphic Arguments sigLR {U V}%_type_scope {A B}%_classical_set_scope x u sigLR is transparent Expands to: Constant mathcomp.classical.functions.sigLR Declared in library mathcomp.classical.functions, line 2258, characters 11-16
Source code
Definition
valLR : forall {U V : Type}, V -> forall {A : set U} {B : set V}, (A -> B) -> U -> V valLR is not universe polymorphic Arguments valLR {U V}%_type_scope v {A B}%_classical_set_scope _%_function_scope _ valLR is transparent Expands to: Constant mathcomp.classical.functions.valLR Declared in library mathcomp.classical.functions, line 2263, characters 11-16
Source code
Lemma
Source code
Proof.
Source code
Proof.
Lemma
Source code
Lemma
Source code
Lemma
Source code
.
Source code
Source code
Source code
.
Source code
Source code
Source code
.
Source code
Source code
Source code
.
Source code
Source code
Source code
.
Source code
Source code
Source code
.
Source code
Source code
Source code
.
Source code
Source code
Source code
.
Source code
Source code
Source code
Lemma
Source code
injective (sigLR f) <-> {in A &, injective f}.
Proof.
Lemma
Source code
{in A &, injective (valLR f)} <-> injective f.
Proof.
Lemma
Source code
set_surj setT setT (sigLR f) <-> set_surj A B f.
Proof.
Lemma
Source code
set_surj A B (valLR f) <-> set_surj setT setT f.
Proof.
Lemma
Source code
set_bij A B f <->
exists (
Source code
bijective (sigLR [fun of mkfun fAB]).
Proof.
exists F; rewrite -setTT_bijective.
by split; [|apply: in2W; apply/sigLR_injP|apply/sigLR_surjP].
rewrite -setTT_bijective /set_bij.
set g := [fun of mkfun fAB] => -[_ /in2TT I S]; pose h : _ -> _ := g.
rewrite -[f]/h {}/h; move: g => g in I S *.
by split; [apply/image_subP|apply/sigLR_injP|apply/sigLR_surjP].
Qed.
Lemma
Source code
Proof.
Lemma
Source code
Proof.
End Restrictions2.
Section set_bij_basic_lemmas.
Context { : Type}.
Implicit Types (A : set aT) (B : set rT) (f : aT -> rT).
Lemma
Source code
Lemma
Source code
Lemma
Source code
Proof.
Lemma
Source code
set_bij (some @` A) (some @` B) (omap f) <-> set_bij A B f.
Proof.
Lemma
Source code
Proof.
End set_bij_basic_lemmas.
Lemma
Source code
( : {bij A >-> B}) : C `<=` A -> D `<=` B ->
set_bij D (some @` C) 'oinv_f <-> set_bij C D f.
Proof.
set_bij C D f -> set_bij D (some @` C) 'oinv_f; last first.
split=> bij_oinv; last exact: oinv_bij.
by apply/bij_omap; rewrite -oinvV; apply: oinv_bij => //; apply: image_subset.
move=> /Pbij[fC ffC]; suff /eq_set_bij-> : {in D, 'oinv_f =1 'oinv_fC} by [].
move=> x xD; apply: 'inj_(oapp f x); rewrite ?mem_fun//=.
- by apply/subsetP : x xD.
- by have := mem_set ((image_subset CA) _ ('oinvS_fC (set_mem xD))).
by rewrite oinvK ?ffC ?oinvK// ?(subsetP.2 _ _ xD).
Qed.
Lemma
Source code
( : {splitbij A >-> B}) : C `<=` A -> D `<=` B ->
set_bij D C f^-1 <-> set_bij C D f.
Proof.
Section set_bij_lemmas.
Context { : Type}.
Implicit Types (A : set aT) (B : set rT) (f : aT -> rT).
Lemma
Source code
Proof.
Lemma
Source code
Lemma
Source code
set_bij C D f.
End set_bij_lemmas.
Section set_bij_lemmas.
Context { : Type}.
Implicit Types (A : set aT) (B : set rT) (f : aT -> rT).
Lemma
Source code
set_bij C D f.
Proof.
Lemma
Source code
{homo f : / C x >-> D x} ->
{homo 'oinv_f : / D x >-> (some @` C) x} ->
set_bij C D f.
Proof.
Lemma
Source code
{homo f : / C x >-> D x} ->
{homo f^-1 : / D x >-> C x} ->
set_bij C D f.
Proof.
Lemma
Source code
{in A, cancel f g} -> {in B, cancel g f} -> set_bij A B f.
Proof.
Lemma
Source code
set_bij A (B `|` B') f -> set_bij (A `\` f @^-1` B') B f.
Proof.
Lemma
Source code
set_bij A (B `|` B') f -> set_bij (A `\` f @^-1` B) B' f.
Proof.
Lemma
Source code
set_bij (A `|` A') B f -> set_bij A (B `\` f @` A') f.
Proof.
apply: bij_sub => [|? []//||]; first exact: subsetUl.
move=> x Ax /=; split; first by apply: funS; left.
move=> [y] A'y /inj; rewrite !inE/= =>yx; apply: (AA' x).
by split=> //; rewrite -yx //; [right|left].
move=> z [Bz /= /not_exists2P /contrapT] A'fxz.
case: oinvP=> // x AA'x fxz; exists x => //.
by have := A'fxz x; rewrite fxz => -[|//]; case: AA'x.
Qed.
Lemma
Source code
set_bij (A `|` A') B f -> set_bij A' (B `\` f @` A) f.
Proof.
End set_bij_lemmas.
Lemma
Source code
set_bij `I_n.+1 A f -> set_bij `I_n (A `\ f n) f.
Proof.
by apply/disj_setPS => i [/= /[swap]->]; rewrite ltnn.
Qed.
Lemma
Source code
set_bij A B f -> set_bij B C g -> set_bij A C (g \o f).
Section pointed_inverse.
Context { } (
Source code
Implicit Types (f : T -> U) (i : {inj A >-> U}).
Definition
valLRfun : forall {U V : Type}, V -> forall {A : set U} {B : set V}, (A -> B) -> {fun A >-> B} valLRfun is not universe polymorphic Arguments valLRfun {U V}%_type_scope v {A B}%_classical_set_scope _%_function_scope valLRfun is transparent Expands to: Constant mathcomp.classical.functions.valLRfun Declared in library mathcomp.classical.functions, line 2264, characters 11-19
Source code
Local Notation
Source code
.
Source code
Source code
Source code
.
Source code
Source code
Source code
.
Source code
Source code
Source code
.
Source code
Source code
Source code
Lemma
Source code
Lemma
Source code
Lemma
Source code
set_surj (f @` A) A (pinv f).
Lemma
Source code
pinv f @` (f @` A) = A.
Lemma
Source code
set_bij (f @` A) A (pinv f).
Lemma
Source code
Lemma
Source code
Proof.
Lemma
Source code
Lemma
Source code
set_bij B (g @` B) g.
Proof.
Lemma
Source code
Section pPbij.
Context {: set U} { : T -> U} (
Source code
Lemma
Source code
Proof.
Section pPinj.
Context { : T -> U} (
Source code
Lemma
Source code
End pPinj.
Section injpPfun.
Context { : set U} { : {inj A >-> U}} (
Source code
Let : _ -> _ := f.
Source code
Source code
Source code
Source code
Source code
Source code
Source code
Source code
Lemma
Source code
Proof.
Section funpPinj.
Context { : set U} { : {fun A >-> B}} (
Source code
Lemma
Source code
End funpPinj.
End pointed_inverse.
Notation
Source code
Notation
Source code
Notation
Source code
Notation
Source code
Notation
Source code
Notation
Source code
Notation
Source code
Notation
Source code
Notation
Source code
Notation
Source code
Notation
Source code
Section function_space.
Local Open Scope ring_scope.
Import GRing.Theory.
Definition
cst : forall {T T' : Type}, T' -> T -> T' cst is not universe polymorphic Arguments cst {T T'}%_type_scope x _ / The reduction tactics unfold cst when applied to 4 arguments cst is transparent Expands to: Constant mathcomp.classical.functions.cst Declared in library mathcomp.classical.functions, line 2577, characters 11-14
Source code
Lemma
Source code
@cst rT _ a @^-1` A = if a \in A then setT else set0.
Proof.
Obligation Tactic := idtac.
Section fct_nmodType.
Variables ( : Type) ( : nmodType).
Implicit Types f g h : T -> M.
Let
Source code
Let
Source code
Let
Source code
.
Source code
Source code
Source code
End fct_nmodType.
Section fct_zmodType.
Variables ( : Type) ( : zmodType).
Implicit Types f : T -> M.
Let
Source code
.
Source code
Source code
Source code
End fct_zmodType.
Section fct_pzRingType.
Variables ( : Type) ( : pzRingType).
Implicit Types f g h : T -> M.
Let
Source code
Let
Source code
Let
Source code
Let
Source code
Let
Source code
.
Source code
Source code
Source code
(fun => f \* g) mulrA mul1r mulr1 mulrDl mulrDr.
End fct_pzRingType.
Section fct_nzRingType.
Variables ( : pointedType) ( : nzRingType).
Let
Source code
.
Source code
Source code
Source code
End fct_nzRingType.
Section fct_comPzRingType.
Variables ( : Type) ( : comPzRingType).
Let
Source code
.
Source code
Source code
GRing.SemiRing_hasCommutativeMul.Build (T -> M) mulrC.
End fct_comPzRingType.
.
Source code
Source code
Source code
GRing.ComPzRing.on (T -> M).
Section fct_lmod.
Variables ( : Type) ( : pzRingType) ( : lmodType R).
Program Definition
fct_lmodMixin : forall (U : Type) [R : pzRingType] (V : lmodType R), GRing.Zmodule_isLmodule.axioms_ R (U -> V) (HB_unnamed_factory_5 (fun=> V)) (HB_unnamed_factory_2 (fun=> V)) (HB_unnamed_mixin_1506 U V) (HB_unnamed_mixin_1499 U V) (HB_unnamed_mixin_1498 U V) (HB_unnamed_mixin_1507 U V) (HB_unnamed_mixin_1501 U V) (HB_unnamed_mixin_1500 U V) (HB_unnamed_mixin_1502 U V) fct_lmodMixin is not universe polymorphic Arguments fct_lmodMixin U%_type_scope [R] V fct_lmodMixin is transparent Expands to: Constant mathcomp.classical.functions.fct_lmodMixin Declared in library mathcomp.classical.functions, line 2669, characters 19-32
Source code
(fun => k \*: f) _ _ _ _.
.
Source code
Source code
Source code
End fct_lmod.
Lemma
Source code
\sum_( <- r | P i) f i = fun => \sum_( <- r | P i) f i x.
Lemma
Source code
( : I -> T -> M) :
\prod_( <- r | P i) f i = fun => \prod_( <- r | P i) f i x.
Lemma
Source code
r \*o f = r \o* f.
Lemma
Source code
(f \min g) = (f + g) - (f \max g).
Proof.
Lemma
Source code
(f \max g) = (f + g) - (f \min g).
Proof.
Lemma
Source code
f \max g = g \max f.
Proof.
Lemma
Source code
f \min g = g \min f.
Proof.
End function_space.
Section function_space_lemmas.
Local Open Scope ring_scope.
Import GRing.Theory.
Lemma
Source code
f + g = (fun => f x + g x).
Proof.
Lemma
Source code
\sum_( <- s) f = (fun => \sum_( <- s) f x).
Proof.
Lemma
Source code
\prod_( <- s) f = (fun => \prod_( <- s) f x).
Proof.
Lemma
Source code
f *+ n = (fun => f x *+ n).
Lemma
Source code
Proof.
Lemma
Source code
@interchange (U -> K) (fun => a - b) (fun => a + b).
Lemma
Source code
f * g = (fun => f x * g x).
Proof.
Lemma
Source code
( : T -> L) :
k *: f = (fun : T => k *: f x).
Proof.
Lemma
Source code
Proof.
Lemma
Source code
Proof.
Lemma
Source code
Proof.
Lemma
Source code
f ^+ n = (fun => f x ^+ n).
Lemma
Source code
g \o f = fun => g (f x).
Proof.
Definition
fctE : (forall (T T' : Type) (x : T), cst x = (fun=> x)) * (forall (T1 T2 T3 : Type) (f : T1 -> T2) (g : T2 -> T3), g \o f = (fun x : T1 => g (f x))) * (forall (T : Type) (K : GRing.Zmodule.Exports.zmodType) (f : T -> K), (- f)%R = (fun x : T => (- f x)%R)) * (forall (T : Type) (K : GRing.Nmodule.Exports.nmodType) (f g : T -> K), (f + g)%R = (fun x : T => (f x + g x)%R)) * (forall (T : Type) (K : pzRingType) (f g : T -> K), (f * g)%R = (fun x : T => (f x * g x)%R)) * (forall (T : Type) (K : pzRingType) (L : lmodType K) (k : K) (f : T -> L), (k *: f)%R = (fun x : T => (k *: f x)%R)) * (forall (T : Type) (K : pzRingType) (f : T -> K) (n : nat), (f ^+ n)%R = (fun x : T => (f x ^+ n)%R)) * (forall (T : Type) (K : GRing.Nmodule.Exports.nmodType) (x : T), (0%R : T -> K) x = 0%R) * (forall (T : Type) (K : pzRingType) (x : T), (1%R : T -> K) x = 1%R) fctE is not universe polymorphic fctE is transparent Expands to: Constant mathcomp.classical.functions.fctE Declared in library mathcomp.classical.functions, line 2766, characters 11-15
Source code
(cstE, compE, opprfctE, addrfctE, mulrfctE, scalerfctE, exprfctE,
zerofctE, onefctE).
Lemma
Source code
(f \+ g) @^-1`[set z] =
\bigcup_( in range f) (f @^-1` [set a] `&` g @^-1` [set z - a]).
Proof.
End function_space_lemmas.
#[deprecated(since="mathcomp-analysis 1.17.0", use=scalerfctE)]
Notation
Source code
Lemma
Source code
Local Open Scope ring_scope.
Import GRing.Theory.
Section linfun_pred.
Context { : numDomainType} { : lmodType K} { : lmodType K}
{ : K -> F -> F}.
linfun : forall {K : numDomainType} {E F : lmodType K}, (K -> F -> F) -> {pred E -> F} linfun is not universe polymorphic Arguments linfun {K E F} {s}%_function_scope _ linfun is transparent Expands to: Constant mathcomp.classical.functions.linfun Declared in library mathcomp.classical.functions, line 2796, characters 11-17
Source code
Definition
linfun_key : forall {K : numDomainType} {E F : lmodType K} {s : K -> F -> F}, pred_key (T:=E -> F) linfun linfun_key is not universe polymorphic Arguments linfun_key {K E F} {s}%_function_scope linfun_key is opaque Expands to: Constant mathcomp.classical.functions.linfun_key Declared in library mathcomp.classical.functions, line 2798, characters 11-21
Source code
Proof.
Canonical
linfun_keyed : forall {K : numDomainType} {E F : lmodType K} {s : K -> F -> F}, keyed_pred linfun_key linfun_keyed is not universe polymorphic Arguments linfun_keyed {K E F} {s}%_function_scope linfun_keyed is transparent Expands to: Constant mathcomp.classical.functions.linfun_keyed Declared in library mathcomp.classical.functions, line 2800, characters 10-22
Source code
End linfun_pred.
Section linfun.
Context { : numDomainType} { : lmodType R}
{ : lmodType R} { : GRing.Scale.law R F}.
Notation := {linear E -> F | s}.
Notation
Source code
Section Sub.
Context ( : E -> F) ( : f \in linfun).
#[local] Definition
linfun_Sub_subproof not a defined object.
Source code
@GRing.isLinear.Build _ E F s f (set_mem fP).
Source code
Source code
Source code
Source code
Definition
linfun_Sub : forall {R : numDomainType} {E F : lmodType R} {s : GRing.Scale.law R F} [f : E -> F], f \in linfun -> {linear E -> F | s} linfun_Sub is not universe polymorphic Arguments linfun_Sub {R E F s} [f]%_function_scope fP linfun_Sub is transparent Expands to: Constant mathcomp.classical.functions.linfun_Sub Declared in library mathcomp.classical.functions, line 2819, characters 11-21
Source code
End Sub.
Let
Source code
(forall ( : f \in linfun), K (linfun_Sub Pf)) -> forall : T, K u.
Proof.
set G := (G in K G).
have Pf : f \in linfun by rewrite inE /= => // x u y; rewrite Pf2 Pf3.
suff -> : G = linfun_Sub Pf by apply: Ksub.
rewrite {}/G.
congr (GRing.Linear.Pack (GRing.Linear.Class _ _)).
- by congr GRing.isNmodMorphism.Axioms_; exact: Prop_irrelevance.
- by congr GRing.isScalable.Axioms_; exact: Prop_irrelevance.
Qed.
Let
Source code
Proof.
.
Source code
Source code
Source code
Lemma
Source code
.
Source code
Source code
Source code
Variant
Source code
|
Source code
Lemma
Source code
Proof.
have {2}-> : f = linfun_Sub f_lc by rewrite linfun_valP.
by constructor.
Qed.
End linfun.
Section linfun_lmodtype.
Context { : numDomainType} { : lmodType R}.
Import GRing.Theory.
Let
Source code
Proof.
.
Source code
Source code
Source code
.
Source code
Source code
[SubChoice_isSubLmodule of {linear E -> F } by <:].
End linfun_lmodtype.
.
Source code
Source code
Source code
isPointed.Build {linear E -> F} 0.