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
itv_open_ends : forall {d : Order.disp_t} {T : porderType d}, interval T -> bool itv_open_ends is not universe polymorphic Arguments itv_open_ends {d T} i itv_open_ends is transparent Expands to: Constant mathcomp.classical.set_interval.itv_open_ends Declared in library mathcomp.classical.set_interval, line 961, characters 11-24
Source code
Definition
itv_is_closed_unbounded : forall {d : Order.disp_t} {T : porderType d}, interval T -> bool itv_is_closed_unbounded is not universe polymorphic Arguments itv_is_closed_unbounded {d T} i itv_is_closed_unbounded is transparent Expands to: Constant mathcomp.classical.set_interval.itv_is_closed_unbounded Declared in library mathcomp.classical.set_interval, line 988, characters 11-34
Source code
Definition
itv_is_cc : forall {d : Order.disp_t} {T : porderType d}, interval T -> bool itv_is_cc is not universe polymorphic Arguments itv_is_cc {d T} i itv_is_cc is transparent Expands to: Constant mathcomp.classical.set_interval.itv_is_cc Declared in library mathcomp.classical.set_interval, line 994, characters 11-20
Source code
Definition
itv_closed_ends : forall {d : Order.disp_t} {T : porderType d}, interval T -> bool itv_closed_ends is not universe polymorphic Arguments itv_closed_ends {d T} i itv_closed_ends is transparent Expands to: Constant mathcomp.classical.set_interval.itv_closed_ends Declared in library mathcomp.classical.set_interval, line 996, characters 11-26
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
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
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
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
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
Order.default_display : disp_t Order.default_display is not universe polymorphic Order.default_display is transparent Expands to: Constant mathcomp.classical.unstable.Order.default_display Declared in library mathcomp.classical.unstable, line 58, characters 11-26
Source code
{ : {splitsurjfun A >-> B}} & phantom (_ -> _) f := @invS _ _ _ _ f.
Notation
Source code
#[global] Hint Resolve invS : core.
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.unstable.proj Declared in library mathcomp.classical.unstable, line 63, characters 11-15
Source code
& phantom (_ -> _) f := @funoK _ _ _ f.
Notation
Source code
#[global] Hint Resolve funoK : core.
Definition
monotonic : forall [d : disp_t] [T : porderType d] [d' : disp_t] [T' : porderType d'] [pT : predType T], pT -> (T -> T') -> Prop monotonic is not universe polymorphic Arguments monotonic [d T d' T' pT] A f%_function_scope monotonic is transparent Expands to: Constant mathcomp.classical.unstable.monotonic Declared in library mathcomp.classical.unstable, line 218, characters 11-20
Source code
{in A &, injective f} := pcan_in_inj funoK.
Definition
strict_monotonic : forall [d : disp_t] [T : porderType d] [d' : disp_t] [T' : porderType d'] [pT : predType T], pT -> (T -> T') -> Prop strict_monotonic is not universe polymorphic Arguments strict_monotonic [d T d' T' pT] A f%_function_scope strict_monotonic is transparent Expands to: Constant mathcomp.classical.unstable.strict_monotonic Declared in library mathcomp.classical.unstable, line 222, characters 11-27
Source code
phantom (_ -> _) f := @inj _ _ _ f.
Notation
Source code
Definition
onem : forall {R : pzRingType}, R -> R onem is not universe polymorphic Arguments onem {R} r%_ring_scope onem is transparent Expands to: Constant mathcomp.classical.unstable.onem Declared in library mathcomp.classical.unstable, line 326, characters 11-15
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
inv_fun : forall {T : Type} {R : unitRingType}, (T -> R) -> T -> R inv_fun is not universe polymorphic Arguments inv_fun {T}%_type_scope {R} f%_function_scope x / The reduction tactics unfold inv_fun when applied to 4 arguments inv_fun is transparent Expands to: Constant mathcomp.classical.unstable.inv_fun Declared in library mathcomp.classical.unstable, line 416, characters 11-18
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
bound_side : forall [d : disp_t] [T : porderType d], bool -> itv_bound T -> bool bound_side is not universe polymorphic Arguments bound_side [d T] c%_bool_scope x bound_side is transparent Expands to: Constant mathcomp.classical.unstable.bound_side Declared in library mathcomp.classical.unstable, line 420, 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
swap : forall {T1 T2 : Type}, T1 * T2 -> T2 * T1 swap is not universe polymorphic Arguments swap {T1 T2}%_type_scope x swap is transparent Expands to: Constant mathcomp.classical.unstable.swap Declared in library mathcomp.classical.unstable, line 427, characters 11-15
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
prodA : forall {X Y Z : Type}, X * Y * Z -> X * (Y * Z) prodA is not universe polymorphic Arguments prodA {X Y Z}%_type_scope xyz prodA is transparent Expands to: Constant mathcomp.classical.unstable.prodA Declared in library mathcomp.classical.unstable, line 432, characters 11-16
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
prodAr : forall {X Y Z : Type}, X * (Y * Z) -> X * Y * Z prodAr is not universe polymorphic Arguments prodAr {X Y Z}%_type_scope xyz prodAr is transparent Expands to: Constant mathcomp.classical.unstable.prodAr Declared in library mathcomp.classical.unstable, line 435, characters 11-17
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
map_pair : forall {S U : Type}, (S -> U) -> S * S -> U * U map_pair is not universe polymorphic Arguments map_pair {S U}%_type_scope f%_function_scope x map_pair is transparent Expands to: Constant mathcomp.classical.unstable.map_pair Declared in library mathcomp.classical.unstable, line 449, characters 11-19
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
sigT_fun : forall {I : Type} {X : I -> Type} {T : Type}, (forall i : I, X i -> T) -> {i : I & X i} -> T sigT_fun is not universe polymorphic Arguments sigT_fun {I}%_type_scope {X}%_function_scope {T}%_type_scope f%_function_scope x sigT_fun is transparent Expands to: Constant mathcomp.classical.unstable.sigT_fun Declared in library mathcomp.classical.unstable, line 498, characters 11-19
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
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
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
Source code
Lemma
Source code
Proof.
Section subfun.
Context {} { : set T}.
Definition
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
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
Source code
.
Source code
Source code
.
Source code
Source code
.
Source code
Source code
Inv_Can.Build _ _ A (incl AB) (fun _ _ => erefl).
Definition
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
Source code
Source code
.
Source code
Source code
Source code
Source code
Definition
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
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
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
Source code
exist (fun => x \in [set` X]) (val x) (mem_set (valP x)).
Definition
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
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
Source code
Proof.
Definition
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
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
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_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
Lemma
Source code
End Pbij.
Coercion bij_of_set_bijection : set_bij >-> Bij.type.
Lemma
Source code
Proof.
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
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
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
Lemma
Source code
End PbijTT.
Lemma
Source code
set_bij [set: aT] [set: rT] f = bijective f.
Proof.
Lemma
Source code
Proof.
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 := @bijTT _ _ f.
Notation
Source code
#[global] Hint Extern 0 (bijective _) => solve [apply: bijTT] : core.
Section patch.
Context { : Type} ( : aT -> rT) ( : set aT).
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
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
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
Lemma
Source code
Proof.
Source code
Source code
Source code
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
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
Lemma
Source code
isFun _ _ A B (valL_ (f : _ -> _)).
Proof.
Source code
Source code
Source code
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
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
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
SigSub (mem_set ('funS_f I) : f u \in A).
.
Source code
Source code
Source code
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
.
Source code
Source code
Source code
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
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
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
.
Source code
Source code
Source code
Fun.copy (sigLR f) (totalfun _).
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
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
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_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
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
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
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
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
(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
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
(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}.
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
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
Proof.
Canonical
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
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
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
@GRing.isLinear.Build _ E F s f (set_mem fP).
Source code
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 956, characters 11-17
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.