Module mathcomp.classical.functions
From mathcomp Require Import all_ssreflect_compat 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_".
Set 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
Source code
Definition
Source code
Definition
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
Order.default_display : disp_t Order.default_display is not universe polymorphic Order.default_display is transparent Expands to: Constant mathcomp.classical.mathcomp_extra.Order.default_display Declared in library mathcomp.classical.mathcomp_extra, line 32, characters 11-26
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
proj : forall {I : Type} {T : I -> Type} (i : I), (forall i0 : I, T i0) -> T i proj is not universe polymorphic Arguments proj {I}%type_scope {T}%function_scope i f%function_scope proj is transparent Expands to: Constant mathcomp.classical.mathcomp_extra.proj Declared in library mathcomp.classical.mathcomp_extra, line 36, characters 11-15
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
dfwith : forall {I : eqType} {T : I -> Type}, (forall i : I, T i) -> forall [i : I], T i -> forall j : I, T j dfwith is not universe polymorphic Arguments dfwith {I} {T}%function_scope f%function_scope [i] x j dfwith is transparent Expands to: Constant mathcomp.boot.eqtype.dfwith Declared in library mathcomp.boot.eqtype, line 509, characters 11-17
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
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
Source code
homo_setP.2 (@funS _ _ _ _ f).
#[global] Hint Extern 0 (prop_in1 _ _) => solve [apply: mem_fun] : core.
Definition
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
Source code
( : {surj A >-> B}) & phantom (_ -> _) f := @oinvK _ _ _ _ f.
Notation
Source code
#[global] Hint Resolve oinvK : core.
Definition
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
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.
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
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 238, characters 11-18
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
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 239, characters 11-19
Source code
{ : {splitsurjfun A >-> B}} & phantom (_ -> _) f := @invS _ _ _ _ f.
Notation
Source code
#[global] Hint Resolve invS : core.
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 240, characters 11-18
Source code
& phantom (_ -> _) f := @funoK _ _ _ f.
Notation
Source code
#[global] Hint Resolve funoK : core.
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 241, characters 11-18
Source code
{in A &, injective f} := pcan_in_inj funoK.
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 256, characters 11-21
Source code
phantom (_ -> _) f := @inj _ _ _ f.
Notation
Source code
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 280, 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
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 396, characters 11-21
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
.
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
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 403, characters 11-24
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
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 => Datatypes.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 408, characters 11-18
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
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 => Datatypes.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 412, characters 11-24
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
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 420, characters 11-22
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_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 425, characters 11-22
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
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 441, characters 11-22
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
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 449, characters 11-22
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
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%FUN 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%FUN 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 457, characters 11-21
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
phant_invS : forall [aT rT : Type] [A : set aT] [B : set rT] {f : {splitsurjfun A >-> B}}, phantom (aT -> rT) f -> {homo f^-1%FUN : 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%FUN 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 465, characters 11-21
Source code
Lemma
Source code
Proof.
Section subfun.
Context {} { : set T}.
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 470, characters 11-22
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
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 475, characters 11-14
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
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 477, characters 11-20
Source code
.
Source code
Source code
.
Source code
Source code
.
Source code
Source code
Inv_Can.Build _ _ A (incl AB) (fun _ _ => erefl).
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 481, characters 11-19
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
phant_funK : forall [aT rT : Type] [A : set aT] [f : {splitinj A >-> rT}], phantom (aT -> rT) f -> {in A, cancel f f^-1%FUN} 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%FUN (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 494, characters 11-21
Source code
Source code
.
Source code
Source code
Source code
Source code
Definition
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 727, characters 11-20
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
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 891, characters 9-25
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
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 899, characters 11-29
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
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 913, characters 11-21
Source code
exist (fun => x \in [set` X]) (val x) (mem_set (valP x)).
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 921, characters 11-16
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
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 942, characters 11-17
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
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 1196, characters 11-17
Source code
Proof.
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 1290, characters 11-18
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
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 1297, characters 11-18
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
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 1306, characters 11-17
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
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 1346, characters 11-19
Source code
Lemma
Source code
End Pbij.
Coercion bij_of_set_bijection : set_bij >-> Bij.type.
Lemma
Source code
Proof.
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 1361, characters 11-15
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
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 1368, characters 11-17
Source code
Lemma
Source code
End PbijTT.
Lemma
Source code
set_bij [set: aT] [set: rT] f = bijective f.
Proof.
Lemma
Source code
Proof.
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 1382, characters 11-16
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
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 1384, characters 11-20
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
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 1398, characters 11-18
Source code
Lemma
Source code
Proof.
Source code
Source code
Source code
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 1412, characters 11-18
Source code
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 1450, characters 11-21
Source code
Lemma
Source code
isFun _ _ A B (valL_ (f : _ -> _)).
Proof.
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 1452, characters 11-21
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
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 1480, characters 11-15
Source code
SigSub (mem_set ('funS_f I) : f u \in A).
.
Source code
Source code
Source code
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 1489, characters 11-16
Source code
.
Source code
Source code
Source code
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 1492, characters 11-16
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
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 1778, characters 11-22
Source code
.
Source code
Source code
Source code
Fun.copy (sigLR f) (totalfun _).
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 1797, characters 9-23
Source code
Definition
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 1803, characters 11-31
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
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 1810, characters 11-20
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
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 1834, characters 11-22
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.PzRing_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
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 1845, characters 11-16
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
f ^+ n = (fun => f x ^+ n).
Lemma
Source code
g \o f = fun => g (f x).
Proof.
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 1938, characters 11-18
Source code
(cstE, compE, opprfctE, addrfctE, mulrfctE, scalrfctE, exprfctE).
End function_space_lemmas.
Lemma
Source code