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 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 {aTSource code rTSource code} (ASource code : set aT) (BSource code : set rT) (fSource code : aT -> rT).
Definition set_fun
Used by
- mathcomp.classical.set_interval
- mathcomp.classical.cardinality
Source code := {homo f : xSource code / A x >-> B x}.
Definition set_surj
Used by
- mathcomp.analysis.measure_theory.measurable_structure
- mathcomp.analysis.realfun
- mathcomp.analysis.cantor
- mathcomp.analysis.normedtype_theory.num_normedtype
- mathcomp.classical.cardinality
Source code := B `<=` f @` A.
Definition set_inj
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
Used by
- mathcomp.analysis.esum
- mathcomp.analysis.measure_theory.measure_function
- mathcomp.analysis.cantor
- mathcomp.analysis.topology_theory.function_spaces
- mathcomp.classical.fsbigop
- mathcomp.classical.cardinality
Source code := {in A &, injective f}.
Definition set_bij
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
Used by
- mathcomp.analysis.esum
- mathcomp.analysis.kernel
- mathcomp.classical.set_interval
- mathcomp.classical.fsbigop
- mathcomp.classical.cardinality
Source code := [/\ set_fun, set_inj & set_surj].
End MainProperties.
HBUsed by
- mathcomp.analysis.realfun
- mathcomp.analysis.topology_theory.subspace_topology
Source code.mixinUsed by
- mathcomp.analysis.realfun
- mathcomp.analysis.topology_theory.subspace_topology
Source code RecordUsed by
- mathcomp.analysis.realfun
- mathcomp.analysis.topology_theory.subspace_topology
Source code isFunUsed by
- mathcomp.analysis.realfun
- mathcomp.analysis.topology_theory.subspace_topology
Source code {aTUsed by
- mathcomp.analysis.realfun
- mathcomp.analysis.topology_theory.subspace_topology
Source code rT}Used by
- mathcomp.analysis.realfun
- mathcomp.analysis.topology_theory.subspace_topology
Source code (AUsed by
- mathcomp.analysis.realfun
- mathcomp.analysis.topology_theory.subspace_topology
Source code :Used by
- mathcomp.analysis.realfun
- mathcomp.analysis.topology_theory.subspace_topology
Source code setUsed by
- mathcomp.analysis.realfun
- mathcomp.analysis.topology_theory.subspace_topology
Source code aT) (B : set rT) (f : aT -> rT) :=
{ funS : set_fun A B f }.
HBSource code.structureSource code DefinitionSource code FunSource code {aTSource code rT}Source code (ASource code :Source code setSource code aT) (B : set rT) :=
{ fSource code of isFun _ _ A B f }.
Notation "{ 'fun' A >-> B }"Source code := (@Fun.type _ _ A B) : form_scope.
Notation "[ 'fun' 'of' f ]"Source code := [the {fun _ >-> _} of f : _ -> _] : form_scope.
HBSource code.mixinSource code RecordSource code OInvSource code {aTSource code rT}Source code (fSource code :Source code aTSource code -> rT) := { oinv : rT -> option aT }.
HBSource code.structureSource code DefinitionSource code OInversibleSource code aTSource code rTSource code :=Source code {fSource code of OInv aT rT f}.
Notation "{ 'oinv' aT >-> rT }"Source code := (@OInversible.type aT rT) : type_scope.
Notation "[ 'oinv' 'of' f ]"Source code := [the {oinv _ >-> _} of f : _ -> _] :
form_scope.
Definition phant_oinv
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 aTSource code rTSource code (fSource code : {oinv aT >-> rT})
& phantom (_ -> _) f := @oinv _ _ f.
Notation "''oinv_' f"Source code := (@phant_oinv _ _ _ (Phantom (_ -> _) f%FUN)).
HBSource code.structureSource code DefinitionSource code OInvFunSource code aTSource code rTSource code ASource code BSource code :=Source code
{fSource code of OInv aT rT f & isFun aT rT A B f}.
Notation "{ 'oinvfun' A >-> B }"Source code := (@OInvFun.type _ _ A B) : type_scope.
Notation "[ 'oinvfun' 'of' f ]"Source code :=
[the {oinvfun _ >-> _} of f : _ -> _] : form_scope.
HBSource code.mixinSource code RecordSource code OInv_InvSource code {aTSource code rT}Source code (fSource code :Source code aTSource code -> rT) & OInv _ _ f := {
inv : rT -> aT;
oliftV : olift inv = 'oinv_f
}.
HBSource code.factorySource code RecordSource code InvSource code {aTSource code rT}Source code (fSource code :Source code aTSource code -> rT) := { inv : rT -> aT }.
HBSource code.buildersSource code ContextSource code {aTSource code rT}Source code (fSource code :Source code aTSource code -> rT) & Inv _ _ f.
HBSource code.instanceSource code DefinitionSource code _Source code :=Source code OInvSource code.Build _ _ f (olift inv).
HBSource code.instanceSource code DefinitionSource code _Source code :=Source code OInv_InvSource code.Build _ _ f erefl.
HBSource code.endSource code.
HBSource code.structureSource code DefinitionSource code InversibleSource code aTSource code rTSource code :=Source code {fSource code of Inv aT rT f}.
Notation "{ 'inv' aT >-> rT }"Source code := (@Inversible.type aT rT) : type_scope.
Notation "[ 'inv' 'of' f ]"Source code := [the {inv _ >-> _} of f : _ -> _] : form_scope.
Definition phant_inv
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 aTSource code rTSource code (fSource code : {inv aT >-> rT}) & phantom (_ -> _) f :=
@inv _ _ f.
Notation "f ^-1"Source code := (@inv _ _ f%function) (only printing) : function_scope.
Notation "f ^-1"Source code :=
(@phant_inv _ _ _ (Phantom (_ -> _) f%function)) : function_scope.
HBSource code.structureSource code DefinitionSource code InvFunSource code aTSource code rTSource code ASource code BSource code :=Source code
{fSource code of Inv aT rT f & isFun aT rT A B f}.
Notation "{ 'invfun' A >-> B }"Source code := (@InvFun.type _ _ A B) : type_scope.
Notation "[ 'invfun' 'of' f ]"Source code :=
[the {invfun _ >-> _} of f : _ -> _] : form_scope.
HBSource code.mixinSource code RecordSource code OInv_CanVSource code {aTSource code rT}Source code {ASource code :Source code setSource code aT} {B : set rT}
(f : aT -> rT) & OInv _ _ f := {
oinvS : {homo 'oinv_f : xSource code / B x >-> (some @` A) x};
oinvK : {in B, ocancel 'oinv_f f};
}.
HBSource code.factorySource code RecordSource code OCanVSource code {aTSource code rT}Source code {ASource code :Source code setSource code aT} {B : set rT} (f : aT -> rT) := {
oinv; oinvS : {homo oinv : xSource code / B x >-> (some @` A) x};
oinvK : {in B, ocancel oinv f};
}.
HBSource code.buildersSource code ContextSource code {aTSource code rT}Source code {ASource code :Source code setSource code aT} {B : set rT} (f : aT -> rT)
& OCanV _ _ A B f.
HBSource code.instanceSource code DefinitionSource code _Source code :=Source code OInvSource code.Build _ _ f oinv.
HBSource code.instanceSource code DefinitionSource code _Source code :=Source code OInv_CanVSource code.Build _ _ A B f oinvS oinvK.
HBSource code.endSource code.
HBSource code.structureSource code DefinitionSource code SurjectSource code {aTSource code rTSource code ASource code B}Source code :=Source code {fSource code of @OCanV aT rT A B f}.
Notation "{ 'surj' A >-> B }"Source code := (@Surject.type _ _ A B) : type_scope.
Notation "[ 'surj' 'of' f ]"Source code :=
[the {surj _ >-> _} of f : _ -> _] : form_scope.
HBSource code.structureSource code DefinitionSource code SurjFunSource code aTSource code rTSource code ASource code BSource code :=Source code
{fSource code of @Surject aT rT A B f & @Fun _ _ A B f}.
Notation "{ 'surjfun' A >-> B }"Source code := (@SurjFun.type _ _ A B) : type_scope.
Notation "[ 'surjfun' 'of' f ]"Source code :=
[the {surjfun _ >-> _} of f : _ -> _] : form_scope.
HBSource code.structureSource code DefinitionSource code SplitSurjSource code aTSource code rTSource code ASource code BSource code :=Source code
{fSource code of @Surject aT rT A B f & @Inv _ _ f}.
Notation "{ 'splitsurj' A >-> B }"Source code := (@SplitSurj.type _ _ A B) : type_scope.
Notation "[ 'splitsurj' 'of' f ]"Source code :=
[the {splitsurj _ >-> _} of f : _ -> _] : form_scope.
HBSource code.structureSource code DefinitionSource code SplitSurjFunSource code aTSource code rTSource code ASource code BSource code :=Source code
{fSource code of @SplitSurj aT rT A B f & @Fun _ _ A B f}.
Notation "{ 'splitsurjfun' A >-> B }"Source code :=
(@SplitSurjFun.type _ _ A B) : type_scope.
Notation "[ 'splitsurjfun' 'of' f ]"Source code :=
[the {splitsurjfun _ >-> _} of f : _ -> _] : form_scope.
HBSource code.mixinSource code RecordSource code OInv_CanSource code aTSource code rTSource code (ASource code :Source code setSource code aT) (f : aT -> rT) & OInv _ _ f :=
{ funoK : {in A, pcancel f 'oinv_f} }.
HBSource code.structureSource code DefinitionSource code InjectSource code aTSource code rTSource code ASource code :=Source code
{fSource code of OInv aT rT f & OInv_Can aT rT A f}.
Notation "{ 'inj' A >-> rT }"Source code := (@Inject.type _ rT A) : type_scope.
Notation "[ 'inj' 'of' f ]"Source code := [the {inj _ >-> _} of f : _ -> _] : form_scope.
HBSource code.structureSource code DefinitionSource code InjFunSource code {aTSource code rT}Source code (ASource code :Source code setSource code aT) (B : set rT) :=
{ fSource code of @Fun _ _ A B f & @Inject _ _ A f }.
Notation "{ 'injfun' A >-> B }"Source code := (@InjFun.type _ _ A B) : type_scope.
Notation "[ 'injfun' 'of' f ]"Source code :=
[the {injfun _ >-> _} of f : _ -> _] : form_scope.
HBSource code.structureSource code DefinitionSource code SplitInjSource code aTSource code rTSource code (ASource code :Source code setSource code aT) :=
{fSource code of @Inv aT rT f & @Inject aT rT A f}.
Notation "{ 'splitinj' A >-> rT }"Source code := (@SplitInj.type _ rT A) : type_scope.
Notation "[ 'splitinj' 'of' f ]"Source code :=
[the {splitinj _ >-> _} of f : _ -> _] : form_scope.
HBSource code.structureSource code DefinitionSource code SplitInjFunSource code aTSource code rTSource code (ASource code :Source code setSource code aT) (B : set rT) :=
{fSource code of @SplitInj _ rT A f & @isFun _ _ A B f}.
Notation "{ 'splitinjfun' A >-> B }"Source code := (@SplitInjFun.type _ _ A B) : type_scope.
Notation "[ 'splitinjfun' 'of' f ]"Source code :=
[the {splitinjfun _ >-> _} of f : _ -> _] : form_scope.
HBSource code.structureSource code DefinitionSource code BijSource code {aTSource code rT}Source code {ASource code :Source code setSource code aT} {B : set rT} :=
{fSource code of @InjFun _ _ A B f & @SurjFun _ _ A B f}.
Notation "{ 'bij' A >-> B }"Source code := (@Bij.type _ _ A B) : type_scope.
Notation "[ 'bij' 'of' f ]"Source code := [the {bij _ >-> _} of f] : form_scope.
HBSource code.structureSource code DefinitionSource code SplitBijSource code {aTSource code rT}Source code {ASource code :Source code setSource code aT} {B : set rT} :=
{fSource code of @SplitInjFun _ _ A B f & @SplitSurjFun _ _ A B f}.
Notation "{ 'splitbij' A >-> B }"Source code := (@SplitBij.type _ _ A B) : type_scope.
Notation "[ 'splitbij' 'of' f ]"Source code := [the {splitbij _ >-> _} of f] : form_scope.
Module ShortFunSyntaxSource code.
Notation "A ~> B"Source code := {fun A >-> B} (at level 70) : type_scope.
Notation "aT <=> rT"Source code := {oinv aT >-> rT} (at level 70) : type_scope.
Notation "A <~ B"Source code := {oinvfun A >-> B} (at level 70) : type_scope.
Notation "aT <<=> rT"Source code := {inv aT >-> rT} (at level 70) : type_scope.
Notation "A <<~ B"Source code := {invfun A >-> B} (at level 70) : type_scope.
Notation "A =>> B"Source code := {surj A >-> B} (at level 70) : type_scope.
Notation "A ~>> B"Source code := {surjfun A >-> B} (at level 70) : type_scope.
Notation "A ==>> B"Source code := {splitsurj A >-> B} (at level 70) : type_scope.
Notation "A ~~>> B"Source code := {splitsurjfun A >-> B} (at level 70) : type_scope.
Notation "A >=> rT"Source code := {inj A >-> rT} (at level 70) : type_scope.
Notation "A >~> B"Source code := {injfun A >-> B} (at level 70) : type_scope.
Notation "A >>=> rT"Source code := {splitinj A >-> rT} (at level 70) : type_scope.
Notation "A >>~> B"Source code := {splitinjfun A >-> B} (at level 70) : type_scope.
Notation "A <~> B"Source code := {bij A >-> B} (at level 70) : type_scope.
Notation "A <<~> B"Source code := {splitbij A >-> B} (at level 70) : type_scope.
End ShortFunSyntax.
Definition phant_funS
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 aTSource code rTSource code (ASource code : set aT) (BSource code : set rT)
(fSource code : {fun A >-> B}) & phantom (_ -> _) f := @funS _ _ _ _ f.
Notation "'funS_ f"Used by
- mathcomp.classical.cardinality
Source code := (phant_funS (Phantom (_ -> _) f))
(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 fun_image_sub
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
Used by
- mathcomp.classical.cardinality
Source code aTSource code rTSource code (ASource code : set aT) (BSource code : set rT) (fSource code : {fun A >-> B}) :=
image_subP.2 (@funS _ _ _ _ f).
Arguments fun_image_sub {aT rT A B}.
#[global] Hint Extern 0 (_ @` _ `<=` _) => solve [apply: fun_image_sub] : core.
Definition mem_fun
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 406, characters 11-21
Source code aTSource code rTSource code (ASource code : set aT) (BSource code : set rT) (fSource code : {fun A >-> B}) :=
homo_setP.2 (@funS _ _ _ _ f).
#[global] Hint Extern 0 (prop_in1 _ _) => solve [apply: mem_fun] : core.
Definition phant_mem_fun
fun_image_sub : forall {aT rT : Type} {A : set aT} {B : set rT} (f : {fun A >-> B}), ([set f x | x in [eta A]] `<=` [eta 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 413, characters 11-24
Source code aTSource code rTSource code (ASource code : set aT) (BSource code : set rT)
(fSource code : {fun A >-> B}) & phantom (_ -> _) f := homo_setP.2 (@funS _ _ _ _ f).
Notation "'mem_fun_ f"Source code := (phant_mem_fun (Phantom (_ -> _) f))
(at level 8, f at level 2) : form_scope.
Lemma some_invSource code {aTSource code rTSource code} (fSource code : {inv aT >-> rT}) xSource code : Some (f^-1 x) = 'oinv_f x.
Proof.
Definition phant_oinvK
mem_fun : forall [aT rT : Type] [A : set aT] [B : set rT] (f : {fun A >-> B}), {homo f : x / x \in [eta A] >-> x \in [eta 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 [eta A])) x -> (f x \in [eta 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 418, characters 11-18
Source code aTSource code rTSource code (ASource code : set aT) (BSource code : set rT)
(fSource code : {surj A >-> B}) & phantom (_ -> _) f := @oinvK _ _ _ _ f.
Notation "'oinvK_ f"Source code := (phant_oinvK (Phantom (_ -> _) f)) : form_scope.
#[global] Hint Resolve oinvK : core.
Definition phant_oinvS
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 [eta A] >-> x \in [eta 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 [eta A])) x -> (f x \in [eta 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 422, characters 11-24
Source code aTSource code rTSource code (ASource code : set aT) (BSource code : set rT)
(fSource code : {surj A >-> B}) & phantom (_ -> _) f := @oinvS _ _ _ _ f.
Notation "'oinvS_ f"Source code := (phant_oinvS (Phantom (_ -> _) f)) : form_scope.
#[global] Hint Resolve oinvS : core.
Variant oinv_specSource code {aTSource code} {rTSource code} {ASource code : set aT} {BSource code : set rT} (fSource code : {surj A >-> B}) ySource code :
rT -> option aT -> Type :=
OInvSpecSource code (xSource code : aT) of A x & f x = y : oinv_spec f y (f x) (Some x).
Lemma oinvPSource code aTSource code rTSource code (ASource code : set aT) (BSource code : set rT) (fSource code : {surj A >-> B}) ySource code :
B y -> oinv_spec f y y ('oinv_f y).
Proof.
Definition phant_oinvP
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 430, characters 11-22
Source code aTSource code rTSource code (ASource code : set aT) (BSource code : set rT)
(fSource code : {surj A >-> B}) & phantom (_ -> _) f := @oinvP _ _ _ _ f.
Notation "'oinvP_ f"Used by
- mathcomp.classical.cardinality
Source code := (phant_oinvP (Phantom (_ -> _) f)) : form_scope.
#[global] Hint Resolve oinvP : core.
Lemma oinvTSource code {aTSource code rTSource code} {ASource code : set aT} {BSource code : set rT} {fSource code : {surj A >-> B}} xSource code :
B x -> 'oinv_f x.
Proof.
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 435, characters 11-22
Source code aTSource code rTSource code (ASource code : set aT) (BSource code : set rT)
(fSource code : {surj A >-> B}) & phantom (_ -> _) f := @oinvT _ _ _ _ f.
Notation "'oinvT_ f"Source code := (phant_oinvT (Phantom (_ -> _) f)) : form_scope.
#[global] Hint Resolve oinvT : core.
Lemma invKUsed by
- mathcomp.analysis.esum
- mathcomp.analysis.probability_theory.random_variable
- mathcomp.analysis.measure_theory.measure_extension
- mathcomp.analysis.measure_theory.measurable_structure
- mathcomp.classical.fsbigop
- mathcomp.classical.cardinality
Source code {aTSource code rTSource code} {ASource code : set aT} {BSource code : set rT} {fSource code : {splitsurj A >-> B}} :
{in B, cancel f^-1 f}.
Definition phant_invK
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 451, characters 11-22
Source code aTSource code rTSource code (ASource code : set aT) (BSource code : set rT)
(fSource code : {splitsurj A >-> B}) & phantom (_ -> _) f := @invK _ _ _ _ f.
Notation "'invK_ f"Source code := (phant_invK (Phantom (_ -> _) f)) : form_scope.
#[global] Hint Resolve invK : core.
Lemma invSUsed by
- mathcomp.analysis.probability_theory.random_variable
Source code {aTSource code rTSource code} {ASource code : set aT} {BSource code : set rT} {fSource code : {splitsurj A >-> B}} :
{homo f^-1 : xSource code / B x >-> A x}.
Definition phant_invS
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 459, characters 11-22
Source code aTSource code rTSource code (ASource code : set aT) (BSource code : set rT)
{fSource code : {splitsurjfun A >-> B}} & phantom (_ -> _) f := @invS _ _ _ _ f.
Notation "'invS_ f"Used by
- mathcomp.analysis.measure_theory.measure_function
Source code := (phant_invS (Phantom (_ -> _) f)) : form_scope.
#[global] Hint Resolve invS : core.
Definition phant_funoK
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 467, characters 11-21
Source code aTSource code rTSource code (ASource code : set aT) (fSource code : {inj A >-> rT})
& phantom (_ -> _) f := @funoK _ _ _ f.
Notation "'funoK_ f"Used by
- mathcomp.classical.cardinality
Source code := (phant_funoK (Phantom (_ -> _) f)) : form_scope.
#[global] Hint Resolve funoK : core.
Definition inj
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 475, characters 11-21
Used by
- mathcomp.analysis.probability_theory.random_variable
- mathcomp.classical.fsbigop
- mathcomp.classical.cardinality
Source code {aTSource code rTSource code : nonPropType} {ASource code : set aT} {fSource code : {inj A >-> rT}} :
{in A &, injective f} := pcan_in_inj funoK.
Definition phant_inj
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 480, characters 11-22
Source code aTSource code rTSource code (ASource code : set aT) (fSource code : {inj A >-> rT}) &
phantom (_ -> _) f := @inj _ _ _ f.
Notation "'inj_ f"Used by
- mathcomp.analysis.measure_theory.measure_function
- mathcomp.classical.cardinality
Source code := (phant_inj (Phantom (_ -> _) f)) : form_scope.
Definition inj_hint
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 485, characters 11-14
Source code {aTSource code rTSource code} {ASource code : set aT} {fSource code : {inj A >-> rT}} :
{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 injTSource code {aTSource code rTSource code} {fSource code : {inj [set: aT] >-> rT}} : injective f.
#[global] Hint Extern 0 (injective _) => solve [apply: injT] : core.
Lemma funKUsed by
- mathcomp.analysis.measure_theory.measure_extension
- mathcomp.analysis.measure_theory.measure_function
- mathcomp.analysis.normedtype_theory.normed_module
- mathcomp.classical.cardinality
Source code {aTSource code rTSource code : Type} {ASource code : set aT} {sSource code : {splitinj A >-> rT}} :
{in A, cancel s s^-1}.
Definition phant_funK
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 487, characters 11-20
Source code aTSource code rTSource code (ASource code : set aT) (fSource code : {splitinj A >-> rT})
& phantom (_ -> _) f := @funK _ _ _ f.
Notation "'funK_ f"Source code := (phant_funK (Phantom (_ -> _) f)) : form_scope.
#[global] Hint Resolve funK : core.
Lemma funPSource code {aTSource code rTSource code} {ASource code : set aT} {BSource code : set rT} (fSource code gSource code : {fun A >-> B}) :
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.
HBSource code.factorySource code RecordSource code Inv_CanSource code {aTSource code rT}Source code {ASource code :Source code setSource code aT} (f : aT -> rT) & Inv _ _ f :=
{ funK : {in A, cancel f f^-1} }.
HBSource code.buildersSource code ContextSource code {aTSource code rT}Source code ASource code (fSource code :Source code aTSource code -> rT) & @Inv_Can _ _ A f.
Local Lemma funoKSource code: {in A, pcancel f 'oinv_f}.
Proof.
HBSource code.endSource code.
HBSource code.factorySource code RecordSource code Inv_CanVSource code {aTSource code rT}Source code {ASource code :Source code setSource code aT} {B : set rT} (f : aT -> rT)
& Inv aT rT f := {
invS : {homo f^-1 : xSource code / B x >-> A x};
invK : {in B, cancel f^-1 f};
}.
HBSource code.buildersSource code ContextSource code {aTSource code rT}Source code {ASource code :Source code setSource code aT} {B : set rT} (f : aT -> rT)
& Inv_CanV _ _ A B f.
#[local] Lemma oinvKSource code : {in B, ocancel 'oinv_f f}.
#[local] Lemma oinvSSource code : {homo 'oinv_f : xSource code / B x >-> (some @` A) x}.
HBSource code.instanceSource code DefinitionSource code _Source code :=Source code OInv_CanVSource code.Build _ _ _ _ f oinvS oinvK.
HBSource code.endSource code.
Section OInverse.
Context {aTSource code rTSource code : Type} {ASource code : set aT} {BSource code : set rT}.
HBSource code.instanceSource code DefinitionSource code _Source code {fSource code :Source code {oinvSource code aT >-> rT}} :=
OInv.Build _ _ 'oinv_f (omap f).
Lemma oinvVSource code {fSource code : {oinv aT >-> rT}} : 'oinv_('oinv_f) = omap f.
Proof.
HBSource code.instanceSource code DefinitionSource code _Source code (fSource code :Source code {surjSource code A >-> B}) :=
isFun.Build rT (option aT) B (some @` A) 'oinv_f oinvS.
Lemma surjoinv_inj_subproofSource code (fSource code : {surj A >-> B}) : OInv_Can _ _ B 'oinv_f.
Proof.
Lemma injoinv_surj_subproofSource code (fSource code : {injfun A >-> B}) :
OInv_CanV _ _ B (some @` A) 'oinv_f.
Proof.
HBSource code.instanceSource code DefinitionSource code _Source code {fSource code :Source code {bijSource code A >-> B}} := InjFun.on 'oinv_f.
End OInverse.
Section Inverse.
Context {aTSource code rTSource code : Type} {ASource code : set aT} {BSource code : set rT}.
HBSource code.instanceSource code DefinitionSource code _Source code (fSource code :Source code {invSource code aT >-> rT}) := Inv.Build rT aT f^-1 f.
HBSource code.instanceSource code DefinitionSource code _Source code (fSource code :Source code {invSource code aT >-> rT}) := Inversible.copy inv f^-1.
Lemma invVUsed by
- mathcomp.classical.cardinality
Source code (fSource code : {inv aT >-> rT}) : f^-1^-1 = f
Proof.
HBSource code.instanceSource code DefinitionSource code _Source code (fSource code :Source code {splitsurjSource code A >-> B}) :=
isFun.Build rT aT B A f^-1 invS.
HBSource code.instanceSource code DefinitionSource code _Source code (fSource code :Source code {splitsurjSource code A >-> B}) := Fun.copy inv f^-1.
HBSource code.instanceSource code DefinitionSource code _Source code {fSource code :Source code {splitsurjSource code A >-> B}} :=
Inv_Can.Build _ _ _ f^-1 'invK_f.
HBSource code.instanceSource code DefinitionSource code _Source code (fSource code :Source code {splitinjfunSource code A >-> B}) :=
Inv_CanV.Build _ _ _ _ f^-1 funS funK.
HBSource code.instanceSource code DefinitionSource code _Source code {fSource code :Source code {splitbijSource code A >-> B}} := InjFun.on f^-1.
End Inverse.
Section Some.
Context {TSource code} {ASource code : set T}.
HBSource code.instanceSource code DefinitionSource code _Source code :=Source code OInvSource code.Build _ _ (@Some T) id.
Lemma oinv_someSource code : 'oinv_(@Some T) = id
Proof.
Lemma some_can_subproofSource code : @OInv_Can _ _ A (@Some T)
Proof.
Lemma some_canV_subproofSource code : OInv_CanV _ _ A (some @` A) (@Some T).
Proof.
Lemma some_fun_subproofSource code : isFun _ _ A (some @` A) (@Some T).
Proof.
End Some.
Section OApply.
Context {aTSource code rTSource code} {ASource code : set aT} {BSource code : set rT} {b0Source code : rT}.
Local Notation oappSource code f := (oapp f b0).
HBSource code.instanceSource code DefinitionSource code _Source code {fSource code :Source code {oinvSource code aT >-> rT}} :=
Inv.Build _ _ (oapp f) 'oinv_f.
Lemma inv_oappSource code {fSource code : {oinv aT >-> rT}} : (oapp f)^-1 = 'oinv_f.
Proof.
Proof.
Lemma oapp_can_subproofSource code (fSource code : {inj A >-> rT}) : Inv_Can _ _ (some @` A) (oapp f).
HBSource code.instanceSource code DefinitionSource code _Source code fSource code :=Source code oapp_can_subproofSource code f.
Lemma oapp_surj_subproofSource code (fSource code : {surj A >-> B}) : Inv_CanV _ _ (some @` A) B (oapp f).
HBSource code.instanceSource code DefinitionSource code _Source code fSource code :=Source code oapp_surj_subproofSource code f.
Lemma oapp_fun_subproofSource code (fSource code : {fun A >-> B}) : isFun _ _ (some @` A) B (oapp f).
Proof.
HBSource code.instanceSource code DefinitionSource code _Source code (fSource code :Source code {oinvfunSource code A >-> B}) := Fun.on (oapp f).
HBSource code.instanceSource code DefinitionSource code _Source code (fSource code :Source code {injfunSource code A >-> B}) := Fun.on (oapp f).
HBSource code.instanceSource code DefinitionSource code _Source code (fSource code :Source code {surjfunSource code A >-> B}) := Fun.on (oapp f).
HBSource code.instanceSource code DefinitionSource code _Source code (fSource code :Source code {bijSource code A >-> B}) := Fun.on (oapp f).
End OApply.
Section OBind.
Context {aTSource code rTSource code} {ASource code : set aT} {BSource code : set (option rT)}.
Local Notation bSource code f := (oapp f None).
Local Notation orTSource code := (option rT).
HBSource code.instanceSource code DefinitionSource code _Source code {fSource code :Source code {oinvSource code aT >-> orT}} :=
Inv.Build _ _ (obind f) 'oinv_f.
Lemma inv_obindSource code {fSource code : {oinv aT >-> orT}} : (obind f)^-1 = 'oinv_f.
Proof.
Proof.
HBSource code.instanceSource code DefinitionSource code _Source code (fSource code :Source code {funSource code A >-> B}) := Fun.copy (obind f) (b f).
HBSource code.instanceSource code DefinitionSource code _Source code (fSource code :Source code {injSource code A >-> orT}) := Inject.copy (obind f) (b f).
HBSource code.instanceSource code DefinitionSource code _Source code (fSource code :Source code {injfunSource code A >-> B}) := Fun.on (obind f).
HBSource code.instanceSource code DefinitionSource code _Source code (fSource code :Source code {surjSource code A >-> B}) := Surject.copy (obind f) (b f).
HBSource code.instanceSource code DefinitionSource code _Source code (fSource code :Source code {surjfunSource code A >-> B}) := Fun.on (obind f).
HBSource code.instanceSource code DefinitionSource code _Source code (fSource code :Source code {bijSource code A >-> B}) := Fun.on (obind f).
End OBind.
Section Composition.
Context {aTSource code rTSource code sTSource code} {ASource code : set aT} {BSource code : set rT} {CSource code : set sT}.
Local Lemma comp_fun_subproofSource code (fSource code : {fun A >-> B}) (gSource code : {fun B >-> C}) :
isFun _ _ A C (g \o f).
HBSource code.instanceSource code DefinitionSource code _Source code fSource code gSource code :=Source code comp_fun_subproofSource code f g.
Section OInv.
Context {fSource code : {oinv aT >-> rT}} {gSource code : {oinv rT >-> sT}}.
HBSource code.instanceSource code DefinitionSource code _Source code :=Source code OInvSource code.Build _ _ (g \o f) (obind 'oinv_f \o 'oinv_g).
Lemma oinv_compSource code : 'oinv_(g \o f) = (obind 'oinv_f) \o 'oinv_g.
Proof.
Section OInv.
Context {fSource code : {inv aT >-> rT}} {gSource code : {inv rT >-> sT}}.
Lemma some_comp_invSource code : olift (f^-1 \o g^-1) = 'oinv_(g \o f).
HBSource code.instanceSource code DefinitionSource code _Source code :=Source code OInv_InvSource code.Build aT sT (g \o f) some_comp_inv.
Lemma inv_compSource code : (g \o f)^-1 = f^-1 \o g^-1
Proof.
Lemma comp_can_subproofSource code (fSource code : {injfun A >-> B}) (gSource code : {inj B >-> sT}) :
OInv_Can aT sT A (g \o f).
HBSource code.instanceSource code DefinitionSource code _Source code fSource code gSource code :=Source code comp_can_subproofSource code f g.
HBSource code.instanceSource code DefinitionSource code _Source code (fSource code :Source code {injfunSource code A >-> B}) (g : {injfun B >-> C}) :=
Inject.on (g \o f).
HBSource code.instanceSource code DefinitionSource code _Source code (fSource code :Source code {splitinjfunSource code A >-> B})
(g : {splitinj B >-> sT}) := Inject.on (g \o f).
HBSource code.instanceSource code DefinitionSource code _Source code (fSource code :Source code {splitinjfunSource code A >-> B})
(g : {splitinjfun B >-> C}) := Inject.on (g \o f).
End Composition.
Section Composition.
Context {aTSource code rTSource code sTSource code} {ASource code : set aT} {BSource code : set rT} {CSource code : set sT}.
Lemma comp_surj_subproofSource code (fSource code : {surj A >-> B}) (gSource code : {surj B >-> C}) :
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.
HBSource code.instanceSource code DefinitionSource code _Source code fSource code gSource code :=Source code comp_surj_subproofSource code f g.
HBSource code.instanceSource code DefinitionSource code _Source code (fSource code :Source code {splitsurjSource code A >-> B}) (g : {splitsurj B >-> C}) :=
Surject.on (g \o f).
HBSource code.instanceSource code DefinitionSource code _Source code (fSource code :Source code {surjfunSource code A >-> B}) (g : {surjfun B >-> C}) :=
Surject.on (g \o f).
HBSource code.instanceSource code DefinitionSource code _Source code (fSource code :Source code {splitsurjfunSource code A >-> B})
(g : {splitsurjfun B >-> C}) := Surject.on (g \o f).
HBSource code.instanceSource code DefinitionSource code _Source code (fSource code :Source code {bijSource code A >-> B}) (g : {bij B >-> C}) :=
Surject.on (g \o f).
HBSource code.instanceSource code DefinitionSource code _Source code (fSource code :Source code {splitbijSource code A >-> B}) (g : {splitbij B >-> C}) :=
Surject.on (g \o f).
End Composition.
Section totalfun.
Context {aTSource code rTSource code : Type}.
Definition totalfun_
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 491, characters 11-19
Source code (ASource code : set aT) (fSource code : aT -> rT) := f.
Context {ASource code : set aT}.
Local Notation totalfunSource code := (totalfun_ A).
HBSource code.instanceSource code DefinitionSource code _Source code (fSource code :Source code aTSource code -> rT) :=
isFun.Build _ _ A setT (totalfun f) (fun _ _ => I).
HBSource code.instanceSource code DefinitionSource code _Source code (fSource code :Source code {injSource code A >-> rT}) := Inject.on (totalfun f).
HBSource code.instanceSource code DefinitionSource code _Source code (fSource code :Source code {splitinjSource code A >-> rT}) := SplitInj.on (totalfun f).
HBSource code.instanceSource code DefinitionSource code _Source code (fSource code :Source code {surjSource code A >-> [set: rT]}) :=
Surject.on (totalfun f).
HBSource code.instanceSource code DefinitionSource code _Source code (fSource code :Source code {splitsurjSource code A >-> [set: rT]}) :=
SplitSurj.on (totalfun f).
End totalfun.
Notation "''totalfun_' A"Used by
- mathcomp.classical.cardinality
Source code := (totalfun_ A) : form_scope.
Notation totalfunSource code := (totalfun_ setT).
Section Olift.
Context {aTSource code rTSource code} {ASource code : set aT} {BSource code : set rT}.
HBSource code.instanceSource code DefinitionSource code _Source code {fSource code :Source code {oinvSource code aT >-> rT}} := OInversible.copy (olift f)
(Some \o f).
Lemma oinv_oliftSource code {fSource code : {oinv aT >-> rT}} : 'oinv_(olift f) = obind 'oinv_f.
Proof.
HBSource code.instanceSource code DefinitionSource code _Source code (fSource code :Source code {injSource code A >-> rT}) :=
Inject.copy (olift f) (Some \o ('totalfun_A f)).
HBSource code.instanceSource code DefinitionSource code _Source code (fSource code :Source code {surjSource code A >-> B}) :=
Surject.copy (olift f) (Some \o f).
HBSource code.instanceSource code DefinitionSource code _Source code (fSource code :Source code {funSource code A >-> B}) := Fun.copy (olift f) (Some \o f).
HBSource code.instanceSource code DefinitionSource code _Source code (fSource code :Source code {oinvfunSource code A >-> B}) := Fun.on (olift f).
HBSource code.instanceSource code DefinitionSource code _Source code (fSource code :Source code {injfunSource code A >-> B}) := Fun.on (olift f).
HBSource code.instanceSource code DefinitionSource code _Source code (fSource code :Source code {surjfunSource code A >-> B}) := Fun.on (olift f).
HBSource code.instanceSource code DefinitionSource code _Source code (fSource code :Source code {bijSource code A >-> B}) := Fun.on (olift f).
End Olift.
Section Map.
Context {aTSource code rTSource code} {ASource code : set aT} {BSource code : set rT}.
Local Notation mSource code f := (obind (olift f)).
HBSource code.instanceSource code DefinitionSource code _Source code (fSource code :Source code {funSource code A >-> B}) := Fun.copy (omap f) (m f).
HBSource code.instanceSource code DefinitionSource code _Source code {fSource code :Source code {oinvSource code aT >-> rT}} :=
Inv.Build _ _ (omap f) (obind 'oinv_f).
Lemma inv_omapSource code {fSource code : {oinv aT >-> rT}} : (omap f)^-1 = obind 'oinv_f.
Proof.
Proof.
HBSource code.instanceSource code DefinitionSource code _Source code (fSource code :Source code {oinvfunSource code A >-> B}) := Fun.on (omap f).
HBSource code.instanceSource code DefinitionSource code _Source code (fSource code :Source code {injSource code A >-> rT}) := Inject.copy (omap f) (m f).
HBSource code.instanceSource code DefinitionSource code _Source code (fSource code :Source code {injfunSource code A >-> B}) := Fun.on (omap f).
HBSource code.instanceSource code DefinitionSource code _Source code (fSource code :Source code {surjSource code A >-> B}) := Surject.copy (omap f) (m f).
HBSource code.instanceSource code DefinitionSource code _Source code (fSource code :Source code {surjfunSource code A >-> B}) := Fun.on (omap f).
HBSource code.instanceSource code DefinitionSource code _Source code (fSource code :Source code {bijSource code A >-> B}) := Fun.on (omap f).
End Map.
HBSource code.factorySource code RecordSource code CanVSource code {aTSource code rT}Source code {ASource code :Source code setSource code aT} {B : set rT} (f : aT -> rT) :=
{ inv; invS : {homo inv : xSource code / B x >-> A x}; invK : {in B, cancel inv f}; }.
HBSource code.buildersSource code ContextSource code {aTSource code rT}Source code {ASource code :Source code setSource code aT} {B : set rT} (f : aT -> rT) & CanV _ _ A B f.
HBSource code.instanceSource code DefinitionSource code _Source code :=Source code InvSource code.Build _ _ f inv.
HBSource code.instanceSource code DefinitionSource code _Source code :=Source code Inv_CanVSource code.Build _ _ _ _ f invS invK.
HBSource code.endSource code.
HBSource code.factorySource code RecordSource code OInv_Can2Source code {aTSource code rT}Source code {ASource code :Source code setSource code aT} {B : set rT} (f : aT -> rT) &
@OInv _ _ f :=
{
funS : {homo f : xSource code / A x >-> B x};
oinvS : {homo 'oinv_f : xSource code / B x >-> (some @` A) x};
funoK : {in A, pcancel f 'oinv_f};
oinvK : {in B, ocancel 'oinv_f f};
}.
HBSource code.buildersSource code ContextSource code {aTSource code rT}Source code ASource code BSource code (fSource code :Source code aTSource code -> rT) & OInv_Can2 _ _ A B f.
HBSource code.instanceSource code DefinitionSource code _Source code :=Source code isFunSource code.Build aT rT _ _ f funS.
HBSource code.instanceSource code DefinitionSource code _Source code :=Source code OInv_CanSource code.Build aT rT _ f funoK.
HBSource code.instanceSource code DefinitionSource code _Source code :=Source code OInv_CanVSource code.Build aT rT _ _ f oinvS oinvK.
HBSource code.endSource code.
HBSource code.factorySource code RecordSource code OCan2Source code {aTSource code rT}Source code {ASource code :Source code setSource code aT} {B : set rT} (f : aT -> rT) :=
{ oinv; funS : {homo f : xSource code / A x >-> B x};
oinvS : {homo oinv : xSource code / B x >-> (some @` A) x};
funoK : {in A, pcancel f oinv};
oinvK : {in B, ocancel oinv f};
}.
HBSource code.buildersSource code ContextSource code {aTSource code rT}Source code ASource code BSource code (fSource code :Source code aTSource code -> rT) & OCan2 _ _ A B f.
HBSource code.instanceSource code DefinitionSource code _Source code :=Source code OInvSource code.Build aT rT f oinv.
HBSource code.instanceSource code DefinitionSource code _Source code :=Source code OInv_Can2Source code.Build aT rT _ _ f funS oinvS funoK oinvK.
HBSource code.endSource code.
HBSource code.factorySource code RecordSource code CanSource code {aTSource code rT}Source code {ASource code :Source code setSource code aT} (f : aT -> rT) :=
{ inv; funK : {in A, cancel f inv} }.
HBSource code.buildersSource code ContextSource code {aTSource code rT}Source code ASource code (fSource code :Source code aTSource code -> rT) & @Can _ _ A f.
HBSource code.instanceSource code DefinitionSource code _Source code :=Source code InvSource code.Build _ _ f inv.
HBSource code.instanceSource code DefinitionSource code _Source code :=Source code Inv_CanSource code.Build _ _ _ f funK.
HBSource code.endSource code.
HBSource code.factorySource code RecordSource code Inv_Can2Source code {aTSource code rT}Source code {ASource code :Source code setSource code aT} {B : set rT} (f : aT -> rT) &
Inv _ _ f :=
{ funS : {homo f : xSource code / A x >-> B x};
invS : {homo f^-1 : xSource code / B x >-> A x};
funK : {in A, cancel f f^-1};
invK : {in B, cancel f^-1 f};
}.
HBSource code.buildersSource code ContextSource code {aTSource code rT}Source code ASource code BSource code (fSource code :Source code aTSource code -> rT) & Inv_Can2 _ _ A B f.
HBSource code.instanceSource code DefinitionSource code _Source code :=Source code isFunSource code.Build aT rT A B f funS.
HBSource code.instanceSource code DefinitionSource code _Source code :=Source code Inv_CanSource code.Build aT rT A f funK.
HBSource code.instanceSource code DefinitionSource code _Source code :=Source code @Inv_CanVSource code.Build aT rT A B f invS invK.
HBSource code.endSource code.
HBSource code.factorySource code RecordSource code Can2Source code {aTSource code rT}Source code {ASource code :Source code setSource code aT} {B : set rT} (f : aT -> rT) :=
{ inv; funS : {homo f : xSource code / A x >-> B x};
invS : {homo inv : xSource code / B x >-> A x};
funK : {in A, cancel f inv};
invK : {in B, cancel inv f};
}.
HBSource code.buildersSource code ContextSource code {aTSource code rT}Source code ASource code BSource code (fSource code :Source code aTSource code -> rT) & Can2 _ _ A B f.
HBSource code.instanceSource code DefinitionSource code _Source code :=Source code InvSource code.Build aT rT f inv.
HBSource code.instanceSource code DefinitionSource code _Source code :=Source code Inv_Can2Source code.Build aT rT A B f funS invS funK invK.
HBSource code.endSource code.
HBSource code.factorySource code RecordSource code SplitInjFun_CanVSource code {aTSource code rT}Source code {ASource code :Source code setSource code aT} {B : set rT} (f : aT -> rT) &
@SplitInjFun _ _ A B f :=
{ invS : {homo f^-1 : xSource code / B x >-> A x}; injV : {in B &, injective f^-1} }.
HBSource code.buildersSource code ContextSource code {aTSource code rT}Source code {ASource code :Source code setSource code aT} {B : set rT} (f : aT -> rT) & SplitInjFun_CanV _ _ A B f.
Let mem_invSource code := homo_setP.2 invS.
Local Lemma invKSource code : {in B, cancel f^-1 f}.
HBSource code.instanceSource code DefinitionSource code _Source code :=Source code Inv_CanVSource code.Build aT rT A B f invS invK.
HBSource code.endSource code.
HBSource code.factorySource code RecordSource code BijTTSource code {aTSource code rT}Source code (fSource code :Source code aTSource code -> rT) := { bij : bijective f }.
HBSource code.buildersSource code ContextSource code {aTSource code rT}Source code fSource code &Source code BijTTSource code aT rT f.
Local Lemma exgSource code : {gSource code | cancel f g /\ cancel g f}.
HBSource code.instanceSource code DefinitionSource code _Source code :=Source code Can2Source code.Build aT rT setT setT f
(fun xSource code ySource code => y) (fun xSource code ySource code => y)
(in1W (projT2 exg).1) (in1W (projT2 exg).2).
HBSource code.endSource code.
Section surj_oinv.
Context {aTSource code rTSource code} {ASource code : set aT} {BSource code : set rT} {fSource code : aT -> rT} (fsurjSource code : set_surj A B f).
Let surjective_oinvSource code (ySource code : rT) :=
if pselect (B y) is left By then some (projT1 (cid2 (fsurj By))) else None.
Lemma surjective_oinvKSource code : {in B, ocancel surjective_oinv f}.
Proof.
Lemma surjective_oinvSSource code : set_fun B (some @` A) surjective_oinv.
Proof.
by case: cid2 => //= x Ax fxy; exists x.
Qed.
Coercion surjective_ocanV
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 504, characters 11-21
Source code {aTSource code rTSource code} {ASource code : set aT} {BSource code : set rT} {fSource code : aT -> rT}
(fSSource code : set_surj A B f) :=
OCanV.Build aT rT A B f (surjective_oinvS fS) (surjective_oinvK fS).
Section Psurj.
Context {aTSource code rTSource code} {ASource code : set aT} {BSource code : set rT} {fSource code : aT -> rT} (fsurjSource code : set_surj A B f).
#[local]Source code HBSource code.instanceSource code DefinitionSource code _Source code :Source code OCanVSource code _ _ A B f := fsurj.
Definition surjection_of_surj
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 738, characters 11-20
Source code := [surj of f].
Lemma PsurjUsed by
- mathcomp.analysis.cantor
- mathcomp.classical.cardinality
Source code : {sSource code : {surj A >-> B} | f = s}
End Psurj.
Coercion surjection_of_surj : set_surj >-> Surject.type.
Lemma oinv_surjSource code {aTSource code rTSource code} {ASource code : set aT} {BSource code : set rT} {fSource code : aT -> rT}
(fSSource code : set_surj A B f) ySource code :
'oinv_fS y = if pselect (B y) is left By then some (projT1 (cid2 (fS y By))) else None.
Proof.
Lemma surjUsed by
- mathcomp.analysis.cantor
- mathcomp.analysis.topology_theory.uniform_structure
- mathcomp.classical.cardinality
Source code {aTSource code rTSource code} {ASource code : set aT} {BSource code : set rT} {fSource code : {surj A >-> B}} : set_surj A B f.
Proof.
Definition phant_surj
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 902, characters 9-25
Source code aTSource code rTSource code (ASource code : set aT) (BSource code : set rT) (fSource code : {surj A >-> B})
& phantom (_ -> _) f := @surj _ _ _ _ f.
Notation "'surj_ f"Used by
- mathcomp.classical.cardinality
Source code := (phant_surj (Phantom (_ -> _) f)) : form_scope.
#[global] Hint Extern 0 (set_surj _ _ _) => solve [apply: surj] : core.
Section funin_surj.
Context {aTSource code rTSource code : Type}.
Definition funin
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 910, characters 11-29
Source code (ASource code : set aT) (fSource code : aT -> rT) := f.
Context {ASource code : set aT} {BSource code : set rT} (fSource code : aT -> rT).
Lemma set_fun_imageSource code : set_fun A (f @` A) f.
Proof.
HBSource code.instanceSource code DefinitionSource code _Source code :=Source code
@isFunSource code.Build _ _ _ _ (funin A f) set_fun_image.
HBSource code.instanceSource code DefinitionSource code _Source code :Source code OCanVSource code _ _ A (f @` A) (funin A f) :=
((fun _ => id) : set_surj A (f @` A) f).
End funin_surj.
Notation "[ 'fun' f 'in' A ]"Source code := (funin A f) : function_scope.
#[global] Hint Resolve set_fun_image : core.
Section split.
Context {aTSource code rTSource code} (ASource code : set aT) (BSource code : set rT).
Definition split_
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 924, characters 11-21
Source code (dfltSource code : rT -> aT) (fSource code : aT -> rT) := f.
Context (dfltSource code : rT -> aT).
Local Notation splitUsed by
- mathcomp.analysis.measure_theory.measurable_structure
- mathcomp.classical.cardinality
Source code := (split_ dflt).
HBSource code.instanceSource code DefinitionSource code _Source code (fSource code :Source code {funSource code A >-> B}) := Fun.on (split f).
Section oinv.
Context (fSource code : {oinv aT >-> rT}).
Let gSource code ySource code := odflt (dflt y) ('oinv_f y).
HBSource code.instanceSource code DefinitionSource code _Source code :=Source code InvSource code.Build _ _ (split f) g.
Lemma splitVSource code : (split f)^-1 = g
Proof.
HBSource code.instanceSource code DefinitionSource code _Source code (fSource code :Source code {oinvfunSource code A >-> B}) := Fun.on (split f).
Lemma splitis_inj_subproofSource code (fSource code : {inj A >-> rT}) : Inv_Can _ _ A (split f).
HBSource code.instanceSource code DefinitionSource code _Source code fSource code :=Source code splitis_inj_subproofSource code f.
HBSource code.instanceSource code DefinitionSource code _Source code (fSource code :Source code {injfunSource code A >-> B}) := Inject.on (split f).
Lemma splitidSource code (fSource code : {splitinjfun A >-> B}) : (split f)^-1 = f^-1.
Lemma splitsurj_subproofSource code (fSource code : {surj A >-> B}) : Inv_CanV _ _ A B (split f).
HBSource code.instanceSource code DefinitionSource code _Source code fSource code :=Source code splitsurj_subproofSource code f.
HBSource code.instanceSource code DefinitionSource code _Source code (fSource code :Source code {surjfunSource code A >-> B}) := Surject.on (split f).
HBSource code.instanceSource code DefinitionSource code _Source code (fSource code :Source code {bijSource code A >-> B}) := Surject.on (split f).
End split.
Notation "''split_' a"Source code := (split_ a) : form_scope.
Notation splitUsed by
- mathcomp.analysis.measure_theory.measurable_structure
- mathcomp.classical.cardinality
Source code := 'split_(fun=> point).
HBSource code.factorySource code RecordSource code InjSource code {aTSource code rT}Source code (ASource code :Source code setSource code aT) (f : aT -> rT) :=
{ inj : {in A &, injective f} }.
HBSource code.buildersSource code ContextSource code {aTSource code rT}Source code ASource code (fSource code :Source code aTSource code -> rT) & Inj _ _ A f.
HBSource code.instanceSource code DefinitionSource code _Source code :=Source code OInversibleSource code.copy f [fun f in A].
Lemma funoKSource code : {in A, pcancel f 'oinv_f}.
Proof.
HBSource code.endSource code.
HBSource code.factorySource code RecordSource code SurjFun_InjSource code {aTSource code rT}Source code {ASource code :Source code setSource code aT} {B : set rT} (f : aT -> rT) &
@SurjFun _ _ A B f := { inj : {in A &, injective f} }.
HBSource code.buildersSource code ContextSource code {aTSource code rT}Source code {ASource code :Source code setSource code aT} {B : set rT} (f : aT -> rT) &
@SurjFun_Inj _ _ A B f.
Let gSource code := f.
HBSource code.instanceSource code DefinitionSource code _Source code :=Source code InjSource code.Build _ _ A g inj.
Let fcanSource code : OInv_Can aT rT A f.
Proof.
HBSource code.endSource code.
HBSource code.factorySource code RecordSource code SplitSurjFun_InjSource code {aTSource code rT}Source code {ASource code :Source code setSource code aT} {B : set rT} (f : aT -> rT) &
@SplitSurjFun _ _ A B f :=
{ inj : {in A &, injective f} }.
HBSource code.buildersSource code ContextSource code {aTSource code rT}Source code {ASource code :Source code setSource code aT} {B : set rT} (f : aT -> rT) &
@SplitSurjFun_Inj _ _ A B f.
Local Lemma funKSource code : {in A, cancel f f^-1%FUN}.
HBSource code.instanceSource code DefinitionSource code _Source code :=Source code Inv_CanSource code.Build aT rT _ f funK.
HBSource code.endSource code.
Section Inverses.
Context aTSource code rTSource code {ASource code : set aT} {BSource code : set rT}.
HBSource code.instanceSource code DefinitionSource code _Source code (fSource code :Source code {injSource code A >-> rT}) :=
SurjFun_Inj.Build _ _ _ _ [fun f in A] 'inj_f.
End Inverses.
Section Pinj.
Context {aTSource code rTSource code} {ASource code : set aT} {fSource code : aT -> rT} (finjSource code : {in A &, injective f}).
#[local]Source code HBSource code.instanceSource code DefinitionSource code _Source code :=Source code InjSource code.Build _ _ _ f finj.
Lemma PinjUsed by
- mathcomp.classical.cardinality
Source code : {iSource code : {inj A >-> rT} | f = i}
End Pinj.
Section Pfun.
Context {aTSource code rTSource code} {ASource code : set aT} {BSource code : set rT} {fSource code : aT -> rT}
(ffunSource code : {homo f : xSource code / A x >-> B x}).
Let gSource code : _ -> _ := f.
#[local]Source code HBSource code.instanceSource code DefinitionSource code _Source code :=Source code isFunSource code.Build _ _ _ _ g ffun.
Lemma PfunUsed by
- mathcomp.classical.cardinality
Source code : {iSource code : {fun A >-> B} | f = i}
End Pfun.
Section injPfun.
Context {aTSource code rTSource code} {ASource code : set aT} {BSource code : set rT} {fSource code : {inj A >-> rT}}
(ffunSource code : {homo f : xSource code / A x >-> B x}).
Let gSource code : _ -> _ := f.
#[local]Source code HBSource code.instanceSource code DefinitionSource code _Source code :=Source code InjectSource code.on g.
#[local]Source code HBSource code.instanceSource code DefinitionSource code _Source code :=Source code isFunSource code.Build _ _ A B g ffun.
Lemma injPfunUsed by
- mathcomp.classical.cardinality
Source code : {iSource code : {injfun A >-> B} | f = i :> (_ -> _)}.
End injPfun.
Section funPinj.
Context {aTSource code rTSource code} {ASource code : set aT} {BSource code : set rT} {fSource code : {fun A >-> B}}
(finjSource code : {in A &, injective f}).
Let gSource code : _ -> _ := f.
#[local]Source code HBSource code.instanceSource code DefinitionSource code _Source code :=Source code FunSource code.on g.
#[local]Source code HBSource code.instanceSource code DefinitionSource code _Source code :=Source code InjSource code.Build _ _ _ g finj.
Lemma funPinjUsed by
- mathcomp.classical.cardinality
Source code : {iSource code : {injfun A >-> B} | f = i}.
End funPinj.
Section funPsurj.
Context {aTSource code rTSource code} {ASource code : set aT} {BSource code : set rT} {fSource code : {fun A >-> B}}
(fsurjSource code : set_surj A B f).
Let gSource code : _ -> _ := f.
#[local]Source code HBSource code.instanceSource code DefinitionSource code _Source code :=Source code FunSource code.on g.
#[local]Source code HBSource code.instanceSource code DefinitionSource code _Source code :Source code OCanVSource code _ _ A B g := fsurj.
Lemma funPsurjSource code : {sSource code : {surjfun A >-> B} | f = s}.
End funPsurj.
Section surjPfun.
Context {aTSource code rTSource code} {ASource code : set aT} {BSource code : set rT} {fSource code : {surj A >-> B}}
(ffunSource code : {homo f : xSource code / A x >-> B x}).
Let gSource code : _ -> _ := f.
#[local]Source code HBSource code.instanceSource code DefinitionSource code _Source code :=Source code SurjectSource code.on g.
#[local]Source code HBSource code.instanceSource code DefinitionSource code _Source code :=Source code isFunSource code.Build _ _ A B g ffun.
Lemma surjPfunSource code : {sSource code : {surjfun A >-> B} | f = s :> (_ -> _)}.
End surjPfun.
Section Psplitinj.
Context {aTSource code rTSource code} {ASource code : set aT} {fSource code : aT -> rT} {gSource code} (funKSource code : {in A, cancel f g}).
#[local]Source code HBSource code.instanceSource code DefinitionSource code _Source code :=Source code CanSource code.Build _ _ A f funK.
Lemma PsplitinjSource code : {iSource code : {splitinj A >-> rT} | f = i}.
End Psplitinj.
Section funPsplitinj.
Context {aTSource code rTSource code} {ASource code : set aT} {BSource code : set rT} {fSource code : {fun A >-> B}}.
Context {gSource code} (funKSource code : {in A, cancel f g}).
Let f'Source code : _ -> _ := f.
#[local]Source code HBSource code.instanceSource code DefinitionSource code _Source code :=Source code FunSource code.on f'.
#[local]Source code HBSource code.instanceSource code DefinitionSource code _Source code :=Source code CanSource code.Build _ _ A f' funK.
Lemma funPsplitinjSource code : {iSource code : {splitinjfun A >-> B} | f = i}.
Proof.
Lemma PsplitinjTSource code {aTSource code rTSource code} {fSource code : aT -> rT} {gSource code} : cancel f g ->
{iSource code : {splitinj [set: aT] >-> rT} | f = i}.
Section funPsplitsurj.
Context {aTSource code rTSource code} {ASource code : set aT} {BSource code : set rT} {fSource code : {fun A >-> B}}.
Context {gSource code : {fun B >-> A}} (funKSource code : {in B, cancel g f}).
Let f'Source code : _ -> _ := f.
#[local]Source code HBSource code.instanceSource code DefinitionSource code _Source code :=Source code FunSource code.on f'.
#[local]Source code HBSource code.instanceSource code DefinitionSource code _Source code :=Source code CanVSource code.Build _ _ A B f' funS funK.
Lemma funPsplitsurjSource code : {sSource code : {splitsurjfun A >-> B} | f = s :> (_ -> _)}.
Proof.
Lemma PsplitsurjTSource code {aTSource code rTSource code} {fSource code : aT -> rT} {gSource code} : cancel g f ->
{sSource code : {splitsurjfun [set: aT] >-> [set: rT]} | f = s}.
HBSource code.instanceSource code DefinitionSource code _Source code TSource code ASource code :=Source code @Can2Source code.Build T T A A idfun idfun
(fun xSource code ySource code => y) (fun xSource code ySource code => y) (fun _ _ => erefl) (fun _ _ => erefl).
Context {aTSource code} {ASource code : set aT}.
Local Lemma iter_fun_subproofSource code nSource code (fSource code : {fun A >-> A}) : isFun _ _ A A (iter n f).
Proof.
HBSource code.instanceSource code DefinitionSource code _Source code nSource code fSource code :=Source code iter_fun_subproofSource code n f.
Section OInv.
Context {fSource code : {oinv aT >-> aT}}.
HBSource code.instanceSource code DefinitionSource code _Source code nSource code :=Source code OInvSource code.Build _ _ (iter n f)
(iter n (obind 'oinv_f) \o some).
Lemma oinv_iterSource code nSource code : 'oinv_(iter n f) = iter n (obind 'oinv_f) \o some.
Proof.
Section OInv.
Context {fSource code : {inv aT >-> aT}}.
Lemma some_iter_invSource code nSource code : olift (iter n f^-1) = 'oinv_(iter n f).
Proof.
Lemma inv_iterSource code nSource code : (iter n f)^-1 = iter n f^-1
Proof.
Lemma iter_can_subproofSource code nSource code (fSource code : {injfun A >-> A}) : OInv_Can aT aT A (iter n f).
Proof.
HBSource code.instanceSource code DefinitionSource code _Source code fSource code gSource code :=Source code iter_can_subproofSource code f g.
HBSource code.instanceSource code DefinitionSource code _Source code nSource code (fSource code :Source code {injfunSource code A >-> A}) := Inject.on (iter n f).
HBSource code.instanceSource code DefinitionSource code _Source code nSource code (fSource code :Source code {splitinjfunSource code A >-> A}) := Inject.on (iter n f).
End iter_inv.
Section iter_surj.
Context {aTSource code} {ASource code : set aT}.
Lemma iter_surj_subproofSource code nSource code (fSource code : {surj A >-> A}) : OInv_CanV _ _ A A (iter n f).
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.
HBSource code.instanceSource code DefinitionSource code _Source code nSource code fSource code :=Source code iter_surj_subproofSource code n f.
HBSource code.instanceSource code DefinitionSource code _Source code nSource code (fSource code :Source code {splitsurjSource code A >-> A}) := Surject.on (iter n f).
HBSource code.instanceSource code DefinitionSource code _Source code nSource code (fSource code :Source code {surjfunSource code A >-> A}) := Surject.on (iter n f).
HBSource code.instanceSource code DefinitionSource code _Source code nSource code (fSource code :Source code {splitsurjfunSource code A >-> A}) :=
Surject.on (iter n f).
HBSource code.instanceSource code DefinitionSource code _Source code nSource code (fSource code :Source code {bijSource code A >-> A}) := Surject.on (iter n f).
HBSource code.instanceSource code DefinitionSource code _Source code nSource code (fSource code :Source code {splitbijSource code A >-> A}) := Surject.on (iter n f).
End iter_surj.
Section Unbind.
Context {aTSource code rTSource code} {ASource code : set aT} {BSource code : set rT} (dfltSource code : aT -> rT).
Definition unbind
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 932, characters 11-16
Source code (fSource code : aT -> option rT) xSource code := odflt (dflt x) (f x).
Lemma unbind_fun_subproofSource code (fSource code : {fun A >-> some @` B}) : isFun _ _ A B (unbind f).
HBSource code.instanceSource code DefinitionSource code _Source code fSource code :=Source code unbind_fun_subproofSource code f.
Section Oinv.
Context (fSource code : {oinv aT >-> option rT}).
HBSource code.instanceSource code DefinitionSource code _Source code :=Source code OInvSource code.Build _ _ (unbind f) ('oinv_f \o some).
Lemma oinv_unbindSource code : 'oinv_(unbind f) = 'oinv_f \o some
Proof.
HBSource code.instanceSource code DefinitionSource code _Source code (fSource code :Source code {oinvfunSource code A >-> some @` B}) := Fun.on (unbind f).
Section Inv.
Context (fSource code : {inv aT >-> option rT}).
Lemma inv_unbind_subproofSource code : olift (f^-1 \o some) = 'oinv_(unbind f).
Proof.
Lemma inv_unbindSource code : (unbind f)^-1 = f^-1 \o some
Proof.
HBSource code.instanceSource code DefinitionSource code _Source code (fSource code :Source code {invfunSource code A >-> some @` B}) := Fun.on (unbind f).
Lemma unbind_inj_subproofSource code (fSource code : {injfun A >-> some @` B}) :
@OInv_Can _ _ A (unbind f).
Proof.
HBSource code.instanceSource code DefinitionSource code _Source code (fSource code :Source code {splitinjfunSource code A >-> some @` B}) :=
Inject.on (unbind f).
Lemma unbind_surj_subproofSource code (fSource code : {surj A >-> some @` B}) :
@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.
HBSource code.instanceSource code DefinitionSource code _Source code (fSource code :Source code {surjfunSource code A >-> some @` B}) :=
Surject.on (unbind f).
HBSource code.instanceSource code DefinitionSource code _Source code (fSource code :Source code {splitsurjSource code A >-> some @` B}) :=
Surject.on (unbind f).
HBSource code.instanceSource code DefinitionSource code _Source code (fSource code :Source code {splitsurjfunSource code A >-> some @` B}) :=
Surject.on (unbind f).
HBSource code.instanceSource code DefinitionSource code _Source code (fSource code :Source code {bijSource code A >-> some @` B}) := Surject.on (unbind f).
HBSource code.instanceSource code DefinitionSource code _Source code (fSource code :Source code {splitbijSource code A >-> some @` B}) := Bij.on (unbind f).
End Unbind.
Section Odflt.
Context {TSource code} {ASource code : set T} (xSource code : T).
Lemma odflt_unbindSource code : odflt x = unbind (fun=> x) idfun
Proof.
HBSource code.instanceSource code DefinitionSource code _Source code :=Source code InvSource code.Build _ _ (odflt x) some.
HBSource code.instanceSource code DefinitionSource code _Source code :=Source code SplitBijSource code.copy (odflt x)
[the {splitbij some @` A >-> A} of @unbind (option T) T (fun=> x) idfun].
End Odflt.
Section SubType.
Context {TSource code : Type} {PSource code : pred T} (sTSource code : subType P) (x0Source code : sT).
HBSource code.instanceSource code DefinitionSource code _Source code :=Source code OInvSource code.Build sT T val insub.
Lemma oinv_valSource code : 'oinv_val = insub
Proof.
Lemma val_bij_subproofSource code : OInv_Can2 sT T setT [set` P] val.
Proof.
HBSource code.instanceSource code DefinitionSource code _Source code :=Source code BijSource code.copy insub 'oinv_val.
HBSource code.instanceSource code DefinitionSource code _Source code :=Source code SplitBijSource code.copy (insubd x0)
(odflt x0 \o 'split_(fun=> val x0) insub).
Lemma inv_insubdSource code : (insubd x0)^-1 = val
Proof.
End SubType.
Definition to_setT
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 953, characters 11-17
Used by
- mathcomp.analysis.topology_theory.num_topology
- mathcomp.analysis.normedtype_theory.normed_module
- mathcomp.classical.cardinality
Source code {TSource code} (xSource code : T) : [set: T] :=
@SigSub _ _ _ x (mem_set I : x \in setT).
HBSource code.instanceSource code DefinitionSource code _Source code TSource code :=Source code CanSource code.Build T [set: T] setT to_setT
((fun _ _ => erefl) : {in setT, cancel to_setT val}).
HBSource code.instanceSource code DefinitionSource code _Source code TSource code :=Source code isFunSource code.Build T _ setT setT to_setT (fun _ _ => I).
HBSource code.instanceSource code DefinitionSource code _Source code TSource code :=Source code
SplitInjFun_CanV.Build T _ _ _ to_setT (fun xSource code ySource code => I) inj.
Definition setTbij
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 1207, characters 11-17
Source code {TSource code} := [splitbij of @to_setT T].
Lemma inv_to_setTUsed by
- mathcomp.analysis.normedtype_theory.normed_module
Source code TSource code : (@to_setT T)^-1 = val
Proof.
Section subfun.
Context {TSource code} {ASource code BSource code : set T}.
Definition subfun
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 1301, characters 11-18
Used by
- mathcomp.classical.cardinality
Source code (ABSource code : A `<=` B) (aSource code : A) : B :=
SigSub (mem_set (AB _ (set_valP a))).
Lemma subfun_injSource code {ABSource code : A `<=` B} : injective (subfun AB).
HBSource code.instanceSource code DefinitionSource code _Source code (ABSource code :Source code ASource code `<=` B) :=
SurjFun.copy (subfun AB) [fun subfun AB in setT].
HBSource code.instanceSource code DefinitionSource code _Source code (ABSource code :Source code ASource code `<=` B) :=
SurjFun_Inj.Build A B setT (subfun AB @` setT) (subfun AB) (in2W subfun_inj).
End subfun.
Section subfun_eq.
Context {TSource code} {ASource code BSource code : set T}.
Lemma subfun_imageTSource code (ABSource code : A `<=` B) (BASource code : B `<=` A) : subfun AB @` setT = setT.
Lemma subfun_inv_subproofSource code (ABSource code : A = B) :
olift (subfun (subsetCW AB)) = 'oinv_(subfun (subsetW AB)).
Proof.
OInv_Inv.Build A B (subfun (subsetW AB)) (subfun_inv_subproof AB).
End subfun_eq.
Section seteqfun.
Context {TSource code : Type}.
Definition seteqfun
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 1308, characters 11-18
Source code {ASource code BSource code : set T} (ABSource code : A = B) := subfun (subsetW AB).
Context {ASource code BSource code : set T} (ABSource code : A = B).
HBSource code.instanceSource code DefinitionSource code _Source code :=Source code InvSource code.Build A B (seteqfun AB) (seteqfun (esym AB)).
Lemma seteqfun_can2_subproofSource code : Inv_Can2 A B setT setT (seteqfun AB).
HBSource code.instanceSource code DefinitionSource code _Source code :=Source code seteqfun_can2_subproofSource code.
End seteqfun.
Section incl.
Context {TSource code} {ASource code BSource code : set T}.
Definition incl
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 1317, characters 11-17
Used by
- mathcomp.classical.cardinality
Source code (ABSource code : A `<=` B) := @id T.
HBSource code.instanceSource code DefinitionSource code _Source code (ABSource code :Source code ASource code `<=` B) := Inv.Build _ _ (incl AB) id.
HBSource code.instanceSource code DefinitionSource code _Source code (ABSource code :Source code ASource code `<=` B) := isFun.Build _ _ A B (incl AB) AB.
HBSource code.instanceSource code DefinitionSource code _Source code (ABSource code :Source code ASource code `<=` B) :=
Inv_Can.Build _ _ A (incl AB) (fun _ _ => erefl).
Definition eqincl
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 1357, characters 11-19
Used by
- mathcomp.analysis.topology_theory.function_spaces
Source code (ABSource code : A = B) := incl (subsetW AB).
HBSource code.instanceSource code DefinitionSource code _Source code ABSource code :=Source code InversibleSource code.on (eqincl AB).
Lemma eqincl_surjSource code ABSource code : Inv_Can2 _ _ A B (eqincl AB).
HBSource code.instanceSource code DefinitionSource code _Source code ABSource code :=Source code eqincl_surjSource code AB.
End incl.
Notation inclTUsed by
- mathcomp.classical.cardinality
Source code A := (incl (@subsetT _ _)).
Section mkfun.
Context {aTSource code} {rTSource code} {ASource code : set aT} {BSource code : set rT}.
Notation isfunSource code f := {homo f : xSource code / A x >-> B x}.
Definition mkfun
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 1372, characters 11-15
Source code fSource code (fABSource code : isfun f) := f.
HBSource code.instanceSource code DefinitionSource code _Source code fSource code fABSource code :=Source code @isFunSource code.Build _ _ A B (@mkfun f fAB) fAB.
Definition mkfun_fun
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 1379, characters 11-17
Source code fSource code fABSource code := [fun of @mkfun f fAB].
HBSource code.instanceSource code DefinitionSource code _Source code (fSource code :Source code {injSource code A >-> rT}) fAB := Inject.on (@mkfun f fAB).
HBSource code.instanceSource code DefinitionSource code _Source code (fSource code :Source code {splitinjSource code A >-> rT}) fAB :=
SplitInj.on (@mkfun f fAB).
HBSource code.instanceSource code DefinitionSource code _Source code (fSource code :Source code {surjSource code A >-> B}) fAB :=
Surject.on (@mkfun f fAB).
HBSource code.instanceSource code DefinitionSource code _Source code (fSource code :Source code {splitsurjSource code A >-> B}) fAB :=
SplitSurj.on (@mkfun f fAB).
End mkfun.
Section set_val.
Context {TSource code} {ASource code : set T}.
Definition set_val
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 1393, characters 11-16
Used by
- mathcomp.analysis.topology_theory.subtype_topology
- mathcomp.analysis.topology_theory.function_spaces
- mathcomp.analysis.topology_theory.num_topology
- mathcomp.analysis.normedtype_theory.normed_module
- mathcomp.classical.cardinality
Source code : A -> T := eqincl (set_mem_set A) \o val.
HBSource code.instanceSource code DefinitionSource code _Source code :=Source code BijSource code.on set_val.
Lemma oinv_set_valUsed by
- mathcomp.analysis.topology_theory.function_spaces
Source code : 'oinv_set_val = insub
Proof.
- mathcomp.analysis.topology_theory.subtype_topology
- mathcomp.analysis.normedtype_theory.normed_module
Source code : set_val = val
Proof.
#[global]
Hint Extern 0 (is_true (set_val _ \in _)) => solve [apply: valP] : core.
HBSource code.instanceSource code DefinitionSource code _Source code TSource code :=Source code CanVSource code.Build T $|T| setT setT squash (fun _ _ => I)
(in1W unsquashK).
HBSource code.instanceSource code DefinitionSource code _Source code TSource code :=Source code SplitInjSource code.copy (@unsquash T) squash^-1%FUN.
Definition ssquash
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 1395, characters 11-20
Source code {TSource code} := [splitsurj of @squash T].
HBSource code.instanceSource code DefinitionSource code _Source code (TSource code :Source code countTypeSource code) :=
Inj.Build _ _ setT (@choice.pickle T) (in2W (pcan_inj choice.pickleK)).
HBSource code.instanceSource code DefinitionSource code _Source code (TSource code :Source code countTypeSource code) :=
isFun.Build _ _ setT setT (@choice.pickle T) (fun _ _ => I).
Lemma set0fun_injSource code {PSource code TSource code} : injective (@set0fun P T).
Proof.
HBSource code.instanceSource code DefinitionSource code _Source code PSource code TSource code :=Source code
Inj.Build (@set0 T) P setT set0fun (in2W set0fun_inj).
HBSource code.instanceSource code DefinitionSource code _Source code PSource code TSource code :=Source code
isFun.Build _ _ setT setT (@set0fun P T) (fun _ _ => I).
HBSource code.instanceSource code DefinitionSource code _Source code {mSource code n}Source code {eq_mnSource code :Source code mSource code = n} :=
Can2.Build 'I_m 'I_n setT setT (cast_ord eq_mn)
(fun _ _ => I) (fun _ _ => I)
(in1W (cast_ordK _)) (in1W (cast_ordKV _)).
HBSource code.instanceSource code DefinitionSource code _Source code (TSource code :Source code finTypeSource code) :=
Can2.Build T _ setT setT enum_rank (fun _ _ => I) (fun _ _ => I)
(in1W enum_rankK) (in1W enum_valK).
HBSource code.instanceSource code DefinitionSource code _Source code (TSource code :Source code finTypeSource code) :=
Can2.Build _ T setT setT enum_val (fun _ _ => I) (fun _ _ => I)
(in1W enum_valK) (in1W enum_rankK).
Definition finset_val
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 1409, characters 11-18
Used by
- mathcomp.classical.cardinality
Source code {TSource code : choiceType} {XSource code : {fset T}} (xSource code : X) : [set` X] :=
exist (fun xSource code => x \in [set` X]) (val x) (mem_set (valP x)).
Definition val_finset
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 1423, characters 11-18
Used by
- mathcomp.classical.cardinality
Source code {TSource code : choiceType} {XSource code : {fset T}} (xSource code : [set` X]) : X :=
[` set_mem (valP x)]%fset.
Lemma finset_valKSource code {TSource code : choiceType} {XSource code : {fset T}} :
cancel (@finset_val T X) val_finset.
Proof.
Lemma val_finsetKSource code {TSource code : choiceType} {XSource code : {fset T}} :
cancel (@val_finset T X) finset_val.
Proof.
HBSource code.instanceSource code DefinitionSource code _Source code {TSource code :Source code choiceType}Source code {X : {fset T}} :=
Can2.Build X _ setT setT finset_val (fun _ _ => I) (fun _ _ => I)
(in1W finset_valK) (in1W val_finsetK).
HBSource code.instanceSource code DefinitionSource code _Source code {TSource code :Source code choiceType}Source code {X : {fset T}} :=
Can2.Build _ X setT setT val_finset (fun _ _ => I) (fun _ _ => I)
(in1W val_finsetK) (in1W finset_valK).
HBSource code.instanceSource code DefinitionSource code _Source code nSource code :=Source code Can2Source code.Build _ _ setT setT (@ordII n)
(fun _ _ => I) (fun _ _ => I) (in1W ordIIK) (in1W IIordK).
HBSource code.instanceSource code DefinitionSource code _Source code nSource code :=Source code SplitBijSource code.copy (@IIord n) (ordII^-1).
Definition glue
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 1461, characters 11-21
Used by
- mathcomp.classical.cardinality
Source code {TSource code T'Source code} {XSource code YSource code : set T} {ASource code BSource code : set T'}
& [disjoint X & Y] & [disjoint A & B] :=
fun (fSource code gSource code : T -> T') (uSource code : T) => if u \in X then f u else g u.
Section Glue12.
Context {TSource code T'Source code} {XSource code YSource code : set T} {ASource code BSource code : set T'}.
Context {XYSource code : [disjoint X & Y]} {ABSource code : [disjoint A & B]}.
Local Notation glSource code := (glue XY AB).
Definition glue1
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 1463, characters 11-21
Used by
- mathcomp.classical.cardinality
Source code (fSource code gSource code : T -> T') : {in X, gl f g =1 f}.
Proof.
Definition glue2
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 1491, characters 11-15
Source code (fSource code gSource code : T -> T') : {in Y, gl f g =1 g}.
Proof.
Section Glue.
Context {TSource code T'Source code} {XSource code YSource code : set T} {ASource code BSource code : set T'}.
Context {XYSource code : [disjoint X & Y]} {ABSource code : [disjoint A & B]}.
Local Notation glSource code := (glue XY AB).
Lemma glue_fun_subproofSource code (fSource code : {fun X >-> A}) (gSource code : {fun Y >-> B}) :
isFun T T' (X `|` Y) (A `|` B) (gl f g).
Proof.
HBSource code.instanceSource code DefinitionSource code _Source code (fSource code gSource code :Source code {oinvSource code T >-> T'}) :=
OInv.Build _ _ (gl f g) (glue AB (eqbRL disj_set_some XY) 'oinv_f 'oinv_g).
HBSource code.instanceSource code DefinitionSource code _Source code (fSource code :Source code {oinvfunSource code X >-> A}) (g : {oinvfun Y >-> B}) :=
OInversible.on (gl f g).
Lemma oinv_glueSource code (fSource code : {oinv T >-> T'}) (gSource code : {oinv T >-> T'}) :
'oinv_(gl f g) = glue AB (eqbRL disj_set_some XY) 'oinv_f 'oinv_g.
Proof.
Lemma some_inv_glue_subproofSource code (fSource code gSource code : {inv T >-> T'}) :
some \o (glue AB XY f^-1 g^-1) = 'oinv_(gl f g).
HBSource code.instanceSource code DefinitionSource code _Source code (fSource code gSource code :Source code {invSource code T >-> T'}) :=
OInv_Inv.Build T T' (gl f g) (some_inv_glue_subproof f g).
HBSource code.instanceSource code DefinitionSource code _Source code (fSource code :Source code {invfunSource code X >-> A}) (g : {invfun Y >-> B}) :=
Inversible.on (gl f g).
Lemma inv_glueSource code (fSource code : {invfun X >-> A}) (gSource code : {invfun Y >-> B}) :
(gl f g)^-1 = glue AB XY f^-1 g^-1.
Proof.
Lemma glueo_can_subproofSource code (fSource code : {injfun X >-> A}) (gSource code : {injfun Y >-> B}) :
OInv_Can _ _ (X `|` Y) (gl f g).
Proof.
HBSource code.instanceSource code DefinitionSource code _Source code (fSource code :Source code {splitinjfunSource code X >-> A})
(g : {splitinjfun Y >-> B}) := Inject.on (gl f g).
Lemma glue_canv_subproofSource code (fSource code : {surj X >-> A}) (gSource code : {surj Y >-> B}) :
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.
HBSource code.instanceSource code DefinitionSource code _Source code (fSource code :Source code {surjfunSource code X >-> A}) (g : {surjfun Y >-> B}) :=
Surject.on (gl f g).
HBSource code.instanceSource code DefinitionSource code _Source code (fSource code :Source code {splitsurjSource code X >-> A}) (g : {splitsurj Y >-> B}) :=
Surject.on (gl f g).
HBSource code.instanceSource code DefinitionSource code _Source code (fSource code :Source code {splitsurjfunSource code X >-> A}) (g : {splitsurjfun Y >-> B}) :=
Surject.on (gl f g).
HBSource code.instanceSource code DefinitionSource code _Source code (fSource code :Source code {bijSource code X >-> A}) (g : {bij Y >-> B}) :=
Surject.on (gl f g).
HBSource code.instanceSource code DefinitionSource code _Source code (fSource code :Source code {splitbijSource code X >-> A}) (g : {splitbij Y >-> B}) :=
Surject.on (gl f g).
End Glue.
Section addition.
Context {VSource code : zmodType} (xSource code : V).
HBSource code.instanceSource code DefinitionSource code _Source code :=Source code InvSource code.Build V V (+%R x) (+%R (- x)).
Lemma inv_addrSource code : (+%R x)^-1 = (+%R (- x))
Proof.
Lemma addr_can2_subproofSource code : Inv_Can2 V V setT setT (+%R x).
HBSource code.instanceSource code DefinitionSource code _Source code :=Source code addr_can2_subproofSource code.
End addition.
Section addition.
Context {VSource code : zmodType} (xSource code : V).
Local Open Scope ring_scope.
HBSource code.instanceSource code DefinitionSource code _Source code :=Source code InvSource code.Build V V (-%R) (-%R).
Lemma inv_opprUsed by
- mathcomp.analysis.topology_theory.num_topology
Source code : (-%R)^-1%FUN = (-%R)
Proof.
Lemma oppr_can2_subproofSource code : Inv_Can2 V V setT setT (-%R).
HBSource code.instanceSource code DefinitionSource code _Source code :=Source code oppr_can2_subproofSource code.
End addition.
Section empty.
Context {TSource code : emptyType} {T'Source code : Type} {XSource code : set T}.
Implicit Type Y : set T'.
HBSource code.instanceSource code DefinitionSource code _Source code :=Source code OInvSource code.Build _ _ (@any T T') (fun=> None).
Lemma empty_can_subproofSource code : OInv_Can T T' X any.
HBSource code.instanceSource code DefinitionSource code _Source code :=Source code empty_can_subproofSource code.
Lemma empty_fun_subproofSource code YSource code : isFun T T' X Y any.
Proof.
Lemma empty_canv_subproofSource code : OInv_CanV T T' X set0 any
Proof.
End empty.
Section surj_lemmas.
Variables aTSource code rTSource code : Type.
Implicit Types (A : set aT) (B : set rT) (f : aT -> rT).
Lemma surj_idSource code ASource code : set_surj A A (@idfun aT)
Proof.
Lemma surj_set0Source code BSource code fSource code : set_surj set0 B f -> B = set0.
Proof.
Lemma surjESource code fSource code ASource code BSource code : set_surj A B f = (B `<=` f @` A)
Proof.
Lemma surj_image_eqUsed by
- mathcomp.analysis.probability_theory.random_variable
- mathcomp.analysis.normedtype_theory.num_normedtype
Source code BSource code ASource code fSource code : f @` A `<=` B -> set_surj A B f -> f @` A = B.
Proof.
Lemma subl_surjUsed by
- mathcomp.analysis.measure_theory.measurable_structure
- mathcomp.classical.cardinality
Source code ASource code A'Source code BSource code fSource code : A `<=` A' -> set_surj A B f -> set_surj A' B f.
Proof.
Lemma subr_surjSource code ASource code BSource code B'Source code fSource code : B' `<=` B -> set_surj A B f -> set_surj A B' f.
Proof.
Lemma can_surjUsed by
- mathcomp.analysis.realfun
Source code gSource code fSource code (ASource code : set aT) (BSource code : set rT) :
{in B, cancel g f} -> g @` B `<=` A ->
set_surj A B f.
Proof.
by have := image_subP.1 gBA y; apply.
Qed.
Lemma surj_epiSource code sTSource code ASource code BSource code (fSource code : aT -> rT) (gSource code g'Source code : rT -> sT) :
set_surj A B f -> {in A, g \o f =1 g' \o f} -> {in B, g =1 g'}.
Proof.
Lemma epiPSource code ASource code BSource code (fSource code : aT -> rT) : set_surj A B f <->
forall sTSource code (gSource code g'Source code : 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 surj_compSource code T1Source code T2Source code T3Source code (ASource code : set T1) (BSource code : set T2) (CSource code : set T3) fSource code gSource code:
set_surj A B f -> set_surj B C g -> set_surj A C (g \o f).
Lemma image_eqUsed by
- mathcomp.analysis.esum
- mathcomp.analysis.measure_theory.measure_extension
- mathcomp.analysis.measure_theory.measure_function
- mathcomp.classical.set_interval
- mathcomp.classical.fsbigop
- mathcomp.classical.cardinality
Source code {aTSource code rTSource code} {ASource code : set aT} {BSource code : set rT} (fSource code : {surjfun A >-> B}) : f @` A = B.
Proof.
Lemma oinv_image_subSource code {aTSource code rTSource code : Type} {ASource code : set aT} {BSource code : set rT}
(fSource code : {surj A >-> B}) {CSource code : set rT} :
C `<=` B -> 'oinv_f @` C `<=` some @` (f @^-1` C).
Proof.
by exists a => //; rewrite fay.
Qed.
Lemma oinv_Iimage_subSource code {aTSource code rTSource code : Type} {ASource code : set aT} (fSource code : {inj A >-> rT}) {CSource code : set rT} :
C `<=` f @` A -> some @` (A `&` f @^-1` C) `<=` 'oinv_f @` C.
Arguments oinv_Iimage_sub {aT rT A} f {C} _.
Lemma oinv_sub_imageSource code {aTSource code rTSource code} {ASource code : set aT} {BSource code : set rT} {fSource code : {bij A >-> B}}
{CSource code : set rT} (CBSource code : 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 preimageEoinvSource code {aTSource code rTSource code} {BSource code : set rT} {fSource code : {bij [set: aT] >-> B}}
{CSource code : set rT} (CBSource code : C `<=` B) : some @` (f @^-1` C) = 'oinv_f @` C.
Proof.
Lemma inv_image_subSource code {aTSource code rTSource code : Type} {ASource code : set aT} {BSource code : set rT}
(fSource code : {splitsurj A >-> B}) {CSource code : set rT} :
C `<=` B -> f^-1 @` C `<=` f @^-1` C.
Arguments inv_image_sub {aT rT A B} f {C} _.
Lemma inv_Iimage_subSource code {aTSource code rTSource code : Type} {ASource code : set aT} (fSource code : {splitinj A >-> rT}) {CSource code : set rT} :
C `<=` f @` A -> A `&` f @^-1` C `<=` f^-1 @` C.
Arguments inv_Iimage_sub {aT rT A} f {C} _.
Lemma inv_sub_imageUsed by
- mathcomp.classical.cardinality
Source code {aTSource code rTSource code} {ASource code : set aT} {BSource code : set rT} {fSource code : {splitbij A >-> B}}
{CSource code : set rT} (CBSource code : C `<=` B) :
f^-1 @` C = A `&` f @^-1` C.
Proof.
Lemma preimageEinvUsed by
- mathcomp.analysis.topology_theory.num_topology
Source code {aTSource code rTSource code} {BSource code : set rT} {fSource code : {splitbij [set: aT] >-> B}}
{CSource code : set rT} (CBSource code : C `<=` B) : f @^-1` C = f^-1 @` C.
Proof.
Lemma reindex_bigcupUsed by
- mathcomp.analysis.measure_theory.measurable_structure
- mathcomp.analysis.normedtype_theory.normed_module
Source code {aTSource code rTSource code ISource code} (fSource code : aT -> I) (PSource code : set aT) (QSource code : set I)
(FSource code : I -> set rT) : set_fun P Q f -> set_surj P Q f ->
\bigcup_(xSource code in Q) F x = \bigcup_(xSource code in P) F (f x).
Proof.
Lemma reindex_bigcapSource code {aTSource code rTSource code ISource code} (fSource code : aT -> I) (PSource code : set aT) (QSource code : set I)
(FSource code : I -> set rT) : set_fun P Q f -> set_surj P Q f ->
\bigcap_(xSource code in Q) F x = \bigcap_(xSource code in P) F (f x).
Proof.
Lemma bigcap_bigcupSource code TSource code ISource code JSource code (DSource code : set I) (ESource code : set J) (FSource code : I -> J -> set T) :
J ->
\bigcap_(iSource code in D) \bigcup_(jSource code in E) F i j =
\bigcup_(fSource code in set_fun D E) \bigcap_(iSource code in D) F i (f i).
Proof.
move=> /(_ _ _)/cid2 ff.
have /(all_sig2_cond j) (iSource code : I) : i \in D -> {x0Source code : J | E x0 & F i x0 x}.
by move=> /set_mem; apply: ff.
by move=> [f /(_ _ (mem_set _))Ef /(_ _ (mem_set _))Ff]; exists f.
by move=> [f fDE fF i Fi]; exists (f i); [apply: fDE|apply: fF].
Qed.
Lemma trivIset_injUsed by
- mathcomp.analysis.measure_theory.measure_function
Source code TSource code ISource code (DSource code : set I) (FSource code : I -> set T) :
(forall iSource code, D i -> F i !=set0) -> trivIset D F -> set_inj D F.
Proof.
Section set_bij_lemmas.
Context {aTSource code rTSource code : Type} {ASource code : set aT} {BSource code : set rT} {fSource code : aT -> rT}.
Definition fun_set_bij
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 1500, characters 11-16
Source code & set_bij A B f := f.
Context (fbijSource code : set_bij A B f).
Local Notation gSource code := (fun_set_bij fbij).
Lemma set_bij_injUsed by
- mathcomp.analysis.probability_theory.random_variable
- mathcomp.analysis.borel_hierarchy
Source code : {in A &, injective f}
Proof.
Lemma set_bij_homoSource code : {homo f : xSource code / A x >-> B x}
Proof.
Lemma set_bij_subUsed by
- mathcomp.analysis.probability_theory.random_variable
Source code : f @` A `<=` B
Proof.
Lemma set_bij_surjUsed by
- mathcomp.analysis.probability_theory.random_variable
Source code : set_surj A B f
Proof.
HBSource code.instanceSource code DefinitionSource code _Source code :Source code OCanVSource code _ _ _ _ g := set_bij_surj.
HBSource code.instanceSource code DefinitionSource code _Source code :=Source code isFunSource code.Build _ _ A B g set_bij_homo.
HBSource code.instanceSource code DefinitionSource code _Source code :=Source code SurjFun_InjSource code.Build _ _ A B g set_bij_inj.
End set_bij_lemmas.
Coercion fun_set_bij : set_bij >-> Funclass.
Coercion set_bij_bijfun
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 1503, characters 11-16
Source code aTSource code rTSource code (ASource code : set aT) (BSource code : set rT) (fSource code : aT -> rT)
(fSSource code : set_bij A B f) := Bij.on (fun_set_bij fS).
Section Pbij.
Context {aTSource code rTSource code} {ASource code : set aT} {BSource code : set rT} {fSource code : aT -> rT} (fbijSource code : set_bij A B f).
#[local]Source code HBSource code.instanceSource code DefinitionSource code _Source code :Source code @BijSource code _ _ A B f := fbij.
Definition bij_of_set_bijection
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 1789, characters 11-22
Source code := [bij of f].
Lemma PbijUsed by
- mathcomp.analysis.esum
- mathcomp.classical.set_interval
- mathcomp.classical.fsbigop
- mathcomp.classical.cardinality
Source code : {sSource code : {bij A >-> B} | f = s}
End Pbij.
Coercion bij_of_set_bijection : set_bij >-> Bij.type.
Lemma bijSource code {aTSource code rTSource code} {ASource code : set aT} {BSource code : set rT} {fSource code : {bij A >-> B}} : set_bij A B f.
Proof.
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 1808, characters 9-23
Source code aTSource code rTSource code (ASource code : set aT) (BSource code : set rT) (fSource code : {bij A >-> B}) &
phantom (_ -> _) f := @bij _ _ _ _ f.
Notation "''bij_' f"Used by
- mathcomp.classical.cardinality
Source code := (phant_bij (Phantom (_ -> _) f)) : form_scope.
#[global] Hint Extern 0 (set_bij _ _ _) => solve [apply: bij] : core.
Section PbijTT.
Context {aTSource code rTSource code} {fSource code : aT -> rT} (fbijTTSource code : bijective f).
#[local]Source code HBSource code.instanceSource code DefinitionSource code _Source code :=Source code @BijTTSource code.Build _ _ f fbijTT.
Definition bijection_of_bijective
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 1814, characters 11-31
Used by
- mathcomp.classical.cardinality
Source code := [splitbij of f].
Lemma PbijTTUsed by
- mathcomp.classical.cardinality
Source code : {sSource code : {splitbij [set: aT] >-> [set: rT]} | f = s}.
End PbijTT.
Lemma setTT_bijectiveUsed by
- mathcomp.analysis.real_measure.lebesgue_measure
- mathcomp.analysis.cantor
- mathcomp.analysis.kernel
- mathcomp.analysis.normedtype_theory.normed_module
- mathcomp.classical.fsbigop
Source code aTSource code rTSource code (fSource code : aT -> rT) :
set_bij [set: aT] [set: rT] f = bijective f.
Proof.
Lemma bijTTUsed by
- mathcomp.analysis.kernel
Source code {aTSource code rTSource code} {fSource code : {bij [set: aT] >-> [set: rT]}} : bijective f.
Proof.
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 1821, characters 11-20
Source code aTSource code rTSource code (fSource code : {bij [set: aT] >-> [set: rT]})
& phantom (_ -> _) f := @bijTT _ _ f.
Notation "''bijTT_' f"Source code := (phant_bijTT (Phantom (_ -> _) f)) : form_scope.
#[global] Hint Extern 0 (bijective _) => solve [apply: bijTT] : core.
Section patch.
Context {aTSource code rTSource code : Type} (dSource code : aT -> rT) (ASource code : set aT).
Definition patch
bijection_of_bijective : forall {aT rT : Type} {f : aT -> rT}, bijective f -> {splitbij [set: aT] >-> [set: rT]} bijection_of_bijective is not universe polymorphic Arguments bijection_of_bijective {aT rT}%_type_scope {f}%_function_scope fbijTT bijection_of_bijective is transparent Expands to: Constant mathcomp.classical.functions.bijection_of_bijective Declared in library mathcomp.classical.functions, line 1829, characters 11-33
Used by
- mathcomp.analysis.real_measure.measurable_realfun
- mathcomp.analysis.measure_theory.measure_function
- mathcomp.analysis.topology_theory.function_spaces
- mathcomp.analysis.topology_theory.subspace_topology
- mathcomp.analysis.numfun
- mathcomp.analysis.lebesgue_integral_theory.lebesgue_integral_nonneg
- mathcomp.analysis.lebesgue_integral_theory.lebesgue_integral_monotone_convergence
- mathcomp.analysis.lebesgue_integral_theory.simple_functions
- mathcomp.analysis.lebesgue_integral_theory.lebesgue_integral_definition
- mathcomp.analysis.lebesgue_integral_theory.measurable_fun_approximation
- mathcomp.classical.fsbigop
Source code (fSource code : aT -> rT) uSource code := if u \in A then f u else d u.
Lemma patchTUsed by
- mathcomp.analysis.measure_theory.measure_function
- mathcomp.analysis.lebesgue_integral_theory.lebesgue_integral_nonneg
Source code fSource code : {in A, patch f =1 f}
Proof.
- mathcomp.analysis.lebesgue_integral_theory.lebesgue_integral_nonneg
Source code fSource code : {in [predC A], patch f =1 d}.
Lemma patchCUsed by
- mathcomp.analysis.measure_theory.measure_function
Source code fSource code : {in ~` A, patch f =1 d}.
Proof.
HBSource code.instanceSource code DefinitionSource code _Source code fSource code :=Source code
SurjFun.copy (patch f) [fun patch f in A].
Section inj.
Context (fSource code : {inj A >-> rT}).
Let gSource code := patch f.
Lemma patch_inj_subproofSource code : Inj aT rT A g.
HBSource code.instanceSource code DefinitionSource code _Source code :=Source code patch_inj_subproofSource code.
HBSource code.instanceSource code DefinitionSource code _Source code :=Source code InjectSource code.copy (patch f) [fun g in A].
End inj.
End patch.
Notation restrictUsed by
- mathcomp.analysis.ereal
- mathcomp.analysis.topology_theory.function_spaces
- mathcomp.analysis.numfun
- mathcomp.analysis.lebesgue_integral_theory.lebesgue_integral_nonneg
- mathcomp.analysis.lebesgue_integral_theory.lebesgue_integral_dominated_convergence
- mathcomp.analysis.lebesgue_integral_theory.radon_nikodym
- mathcomp.analysis.lebesgue_integral_theory.lebesgue_integrable
Source code := (patch (fun=> point)).
Notation "f \_ D"Source code := (restrict D f) : function_scope.
Lemma patchEUsed by
- mathcomp.analysis.probability_theory.exponential_distribution
- mathcomp.analysis.probability_theory.beta_distribution
- mathcomp.analysis.probability_theory.uniform_distribution
- mathcomp.analysis.probability_theory.random_variable
- mathcomp.analysis.probability_theory.normal_distribution
- mathcomp.analysis.real_measure.measurable_realfun
- mathcomp.analysis.ftc
- mathcomp.analysis.kernel
- mathcomp.analysis.ereal
- mathcomp.analysis.numfun
- mathcomp.analysis.lebesgue_integral_theory.lebesgue_integral_nonneg
- mathcomp.analysis.lebesgue_integral_theory.lebesgue_Rintegral
- mathcomp.analysis.lebesgue_integral_theory.lebesgue_integral_fubini
- mathcomp.analysis.lebesgue_integral_theory.lebesgue_integral_differentiation
- mathcomp.analysis.lebesgue_integral_theory.measurable_fun_approximation
- mathcomp.analysis.normedtype_theory.normed_module
Source code aTSource code (rTSource code : pointedType) (fSource code : aT -> rT) (BSource code : set aT) xSource code :
(f \_ B) x = if x \in B then f x else point.
Proof.
Lemma patch_predUsed by
- mathcomp.analysis.measure_theory.measure_function
Source code {ISource code TSource code} (DSource code : {pred I}) (dSource code fSource code : I -> T) :
patch d D f = fun iSource code => if D i then f i else d i.
Lemma preimage_restrictUsed by
- mathcomp.analysis.measure_theory.measurable_function
- mathcomp.analysis.lebesgue_integral_theory.lebesgue_integral_nonneg
Source code (aTSource code : Type) (rTSource code : pointedType)
(fSource code : aT -> rT) (DSource code : set aT) (BSource code : set rT) :
(f \_ D) @^-1` B = (if point \in B then ~` D else set0) `|` D `&` f @^-1` B.
Proof.
Lemma comp_patchUsed by
- mathcomp.analysis.lebesgue_integral_theory.lebesgue_integral_definition
Source code {aTSource code rTSource code sTSource code : Type} (gSource code : aT -> rT) DSource code (fSource code : aT -> rT) (hSource code : rT -> sT) :
h \o patch g D f = patch (h \o g) D (h \o f).
Lemma patch_setIUsed by
- mathcomp.analysis.ftc
- mathcomp.analysis.lebesgue_integral_theory.lebesgue_integral_definition
- mathcomp.classical.fsbigop
Source code {aTSource code rTSource code : Type} (gSource code : aT -> rT) DSource code D'Source code (fSource code : aT -> rT) :
patch g (D `&` D') f = patch g D (patch g D' f).
Lemma patch_set0Used by
- mathcomp.analysis.numfun
Source code {aTSource code rTSource code : Type} (gSource code : aT -> rT) (fSource code : aT -> rT) :
patch g set0 f = g.
Lemma patch_setTUsed by
- mathcomp.analysis.lebesgue_integral_theory.lebesgue_integral_definition
- mathcomp.analysis.lebesgue_integral_theory.lebesgue_integral_differentiation
Source code {aTSource code rTSource code : Type} (gSource code : aT -> rT) (fSource code : aT -> rT) :
patch g setT f = f.
Lemma restrict_compSource code {aTSource code} {rTSource code sTSource code : pointedType} (hSource code : rT -> sT) (fSource code : aT -> rT) DSource code :
h point = point -> (h \o f) \_ D = h \o (f \_ D).
Arguments restrict_comp {aT rT sT} h f D.
Lemma trivIset_restrUsed by
- mathcomp.analysis.measure_theory.measure_function
Source code (TSource code ISource code : Type) (DSource code D'Source code : set I) (FSource code : I -> set T) :
trivIset D' (F \_ D) = trivIset (D `&` D') F.
Proof.
Section RestrictionLeft.
Context {USource code VSource code : Type} (vSource code : V) {ASource code : set U} {BSource code : set V}.
Local Notation restrictUsed by
- mathcomp.analysis.ereal
- mathcomp.analysis.topology_theory.function_spaces
- mathcomp.analysis.numfun
- mathcomp.analysis.lebesgue_integral_theory.lebesgue_integral_nonneg
- mathcomp.analysis.lebesgue_integral_theory.lebesgue_integral_dominated_convergence
- mathcomp.analysis.lebesgue_integral_theory.radon_nikodym
- mathcomp.analysis.lebesgue_integral_theory.lebesgue_integrable
Source code := (patch (fun=> v) A).
Definition sigL
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 1845, characters 11-22
Used by
- mathcomp.analysis.topology_theory.subtype_topology
- mathcomp.analysis.topology_theory.function_spaces
Source code (fSource code : U -> V) : A -> V := f \o set_val.
Lemma sigL_isfunSource code (fSource code : {fun A >-> B}) : isFun _ _ [set: A] B (sigL f).
Proof.
Definition sigLfun
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 1856, characters 11-16
Source code (fSource code : {fun A >-> B}) := [fun of sigL f].
Definition valL_
sigL : forall {U V : Type} (A : set U), (U -> V) -> A -> V sigL is not universe polymorphic Arguments sigL {U V}%_type_scope A%_classical_set_scope f%_function_scope u / (where some original arguments have been renamed) The reduction tactics unfold sigL when applied to 5 arguments sigL is transparent Expands to: Constant mathcomp.classical.functions.sigL Declared in library mathcomp.classical.functions, line 1943, characters 11-15
Used by
- mathcomp.analysis.topology_theory.subtype_topology
Source code (fSource code : A -> V) : U -> V := ((@oapp _ _)^~ v) f \o 'oinv_set_val.
Lemma valL_isfunSource code (fSource code : {fun [set: A] >-> B}) :
isFun _ _ A B (valL_ (f : _ -> _)).
Proof.
Definition valLfun_
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 1949, characters 11-18
Source code (fSource code : {fun [set: A] >-> B}) := [fun of valL_ f].
Lemma sigLEUsed by
- mathcomp.analysis.topology_theory.function_spaces
Source code (fSource code : U -> V) xSource code (xASource code : x \in A) :
sigL f (SigSub xA) = f x.
Proof.
Lemma eq_sigLPUsed by
- mathcomp.analysis.topology_theory.function_spaces
Source code (fSource code gSource code : U -> V):
{in A, f =1 g} <-> sigL f = sigL g.
Proof.
Lemma eq_sigLfunPSource code (fSource code gSource code : {fun A >-> B}) :
{in A, f =1 g} <-> sigLfun f = sigLfun g.
Lemma sigLKUsed by
- mathcomp.analysis.topology_theory.function_spaces
Source code : valL_ \o sigL = restrict.
Proof.
Lemma valLKUsed by
- mathcomp.analysis.topology_theory.subtype_topology
Source code : cancel valL_ sigL.
Proof.
Lemma valLfunKSource code : cancel valLfun_ sigLfun.
Lemma sigL_valLSource code : sigL \o valL_ = id.
Lemma sigL_valLfunSource code : sigLfun \o valLfun_ = id.
Lemma sigL_restrictUsed by
- mathcomp.analysis.topology_theory.function_spaces
Source code : sigL \o restrict = sigL.
Lemma image_sigLUsed by
- mathcomp.analysis.topology_theory.function_spaces
Source code : range sigL = setT.
Lemma eq_restrictPUsed by
- mathcomp.analysis.lebesgue_integral_theory.lebesgue_integral_definition
Source code (fSource code gSource code : U -> V): {in A, f =1 g} <-> restrict f = restrict g.
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 "''valL_' v"Source code := (valL_ v) : form_scope.
Notation "''valLfun_' v"Source code := (valLfun_ v) : form_scope.
Notation valLUsed by
- mathcomp.analysis.topology_theory.subtype_topology
- mathcomp.analysis.topology_theory.function_spaces
Source code := (valL_ point).
Section RestrictionRight.
Context {USource code VSource code : Type} {ASource code : set V}.
Definition sigR
valL_ : forall {U V : Type}, V -> forall {A : set U}, (A -> V) -> U -> V valL_ is not universe polymorphic Arguments valL_ {U V}%_type_scope v {A}%_classical_set_scope f%_function_scope u / (where some original arguments have been renamed) The reduction tactics unfold valL_ when applied to 6 arguments valL_ is transparent Expands to: Constant mathcomp.classical.functions.valL_ Declared in library mathcomp.classical.functions, line 1950, characters 11-16
Source code (fSource code : {fun [set: U] >-> A}) (uSource code : U) : A :=
SigSub (mem_set ('funS_f I) : f u \in A).
HBSource code.instanceSource code DefinitionSource code _Source code fSource code :=Source code FunSource code.copy (sigR f) (totalfun _).
Definition valR
valLfun_ : forall {U V : Type}, V -> forall {A : set U} {B : set V}, {fun [set: A] >-> B} -> {fun A >-> B} valLfun_ is not universe polymorphic Arguments valLfun_ {U V}%_type_scope v {A B}%_classical_set_scope f valLfun_ is transparent Expands to: Constant mathcomp.classical.functions.valLfun_ Declared in library mathcomp.classical.functions, line 1956, characters 11-19
Source code (fSource code : U -> A) := set_val \o totalfun f.
HBSource code.instanceSource code DefinitionSource code _Source code fSource code :=Source code FunSource code.on (valR f).
Definition valR_fun
sigR : forall {U V : Type} {A : set V}, {fun [set: U] >-> A} -> U -> A sigR is not universe polymorphic Arguments sigR {U V}%_type_scope {A}%_classical_set_scope f u / The reduction tactics unfold sigR when applied to 5 arguments sigR is transparent Expands to: Constant mathcomp.classical.functions.sigR Declared in library mathcomp.classical.functions, line 2021, characters 11-15
Source code (fSource code : U -> A) : {fun [set: U] >-> A} := [fun of valR f].
Lemma sigRKSource code (fSource code : {fun [set: U] >-> A}) : valR (sigR f) = f.
Proof.
Lemma sigR_funKSource code (fSource code : {fun [set: U] >-> A}) : valR_fun (sigR f) = f.
Lemma valRPSource code (fSource code : U -> A) xSource code : A (valR f x)
Proof.
Lemma valRKSource code : cancel valR_fun sigR.
End RestrictionRight.
Arguments sigR {U V A} f u /.
Section RestrictionLeftInv.
Context {USource code VSource code : Type} (vSource code : V) {ASource code : set U} {BSource code : set V}.
Local Notation rlSource code := (sigL A).
Local Notation rrSource code := sigR.
Local Notation elSource code := 'valL_v.
Local Notation erSource code := valR.
HBSource code.instanceSource code DefinitionSource code _Source code (fSource code :Source code {oinvSource code U >-> V}) :=
@OInv.Build _ _ (rl f) (obind insub \o 'oinv_f).
HBSource code.instanceSource code DefinitionSource code _Source code (fSource code :Source code {oinvfunSource code A >-> B}) := Fun.on (rl f).
Lemma oinv_sigLSource code (fSource code : {oinv U >-> V}) : 'oinv_(rl f) = obind insub \o 'oinv_f.
Proof.
Lemma sigL_inj_subproofSource code (fSource code : {inj A >-> V}) : @OInv_Can _ _ setT (rl f).
HBSource code.instanceSource code DefinitionSource code _Source code fSource code :=Source code sigL_inj_subproofSource code f.
HBSource code.instanceSource code DefinitionSource code _Source code (fSource code :Source code {injfunSource code A >-> B}) := Fun.on (rl f).
Lemma sigL_surj_subproofSource code (fSource code : {surj A >-> B}) : @OInv_CanV _ _ setT B (rl f).
Proof.
HBSource code.instanceSource code DefinitionSource code _Source code (fSource code :Source code {surjfunSource code A >-> B}) := Fun.on (rl f).
HBSource code.instanceSource code DefinitionSource code _Source code (fSource code :Source code {bijSource code A >-> B}) := Fun.on (rl f).
HBSource code.instanceSource code DefinitionSource code _Source code (fSource code :Source code {oinvfunSource code [set: V] >-> A}) :=
@OInv.Build _ _ (rr f) (rl 'oinv_f).
Lemma oinv_sigRSource code (fSource code : {oinvfun [set: V] >-> A}) :
'oinv_(rr f) = (rl 'oinv_f).
Proof.
Lemma sigR_inj_subproofSource code (fSource code : {injfun [set: V] >-> A}) :
@OInv_Can _ _ setT (rr f).
HBSource code.instanceSource code DefinitionSource code _Source code fSource code :=Source code sigR_inj_subproofSource code f.
Lemma sigR_surj_subproofSource code (fSource code : {surjfun [set: V] >-> A}) :
@OInv_CanV _ _ setT setT (rr f).
Proof.
Lemma sigR_some_invSource code (fSource code : {invfun [set: V] >-> A}) :
olift (rl f^-1) = 'oinv_(rr f).
Proof.
HBSource code.instanceSource code DefinitionSource code _Source code (fSource code :Source code {invfunSource code [set: V] >-> A}) :=
@OInv_Inv.Build _ _ (rr f) (rl f^-1) (sigR_some_inv f).
Lemma inv_sigRSource code (fSource code : {invfun [set: V] >-> A}) : (rr f)^-1 = (rl f^-1).
Proof.
HBSource code.instanceSource code DefinitionSource code _Source code (fSource code :Source code {splitinjfunSource code [set: V] >-> A}) := Inject.on (rr f).
HBSource code.instanceSource code DefinitionSource code _Source code (fSource code :Source code {splitsurjfunSource code [set: V] >-> A}) := Surject.on (rr f).
HBSource code.instanceSource code DefinitionSource code _Source code (fSource code :Source code {splitbijSource code [set: V] >-> A}) := Fun.on (rr f).
Lemma sigL_some_invSource code (fSource code : {splitbij A >-> [set: V]}) :
olift (rr [fun of f^-1]) = 'oinv_(rl f).
Proof.
OInv_Inv.Build _ _ (rl f) (sigL_some_inv f).
Lemma inv_sigLSource code (fSource code : {splitbij A >-> [set: V]}) :
(rl f)^-1 = (rr [fun of f^-1]).
Proof.
HBSource code.instanceSource code DefinitionSource code _Source code (fSource code :Source code {oinvSource code A >-> V}) :=
@OInv.Build _ _ (el f) (omap set_val \o 'oinv_f).
HBSource code.instanceSource code DefinitionSource code _Source code (fSource code :Source code {oinvfunSource code [set: A] >-> B}) := Fun.on (el f).
Lemma oinv_valLSource code (fSource code : {oinv A >-> V}) :
'oinv_(el f) = omap set_val \o 'oinv_f.
Proof.
Lemma oapp_comp_xSource code {aTSource code rTSource code sTSource code} (fSource code : aT -> rT) (gSource code : rT -> sT) (xSource code : rT) ySource code :
oapp (g \o f) (g x) y = g (oapp f x y).
Proof.
Lemma valL_inj_subproofSource code (fSource code : {inj [set: A] >-> V}) : @OInv_Can _ _ A (el f).
Proof.
HBSource code.instanceSource code DefinitionSource code _Source code (fSource code :Source code {injfunSource code [set: A] >-> B}) := Inject.on (el f).
Lemma valL_surj_subproofSource code (fSource code : {surj [set: A] >-> B}) : @OInv_CanV _ _ A B (el f).
Proof.
HBSource code.instanceSource code DefinitionSource code _Source code (fSource code :Source code {surjfunSource code [set: A] >-> B}) := Surject.on (el f).
HBSource code.instanceSource code DefinitionSource code _Source code (fSource code :Source code {bijSource code [set: A] >-> B}) := Surject.on (el f).
Lemma valL_some_invSource code (fSource code : {inv A >-> V}) : olift (er f^-1) = 'oinv_(el f).
Proof.
OInv_Inv.Build _ _ (el f) (valL_some_inv f).
HBSource code.instanceSource code DefinitionSource code _Source code (fSource code :Source code {invfunSource code [set: A] >-> B}) := Fun.on (el f).
Lemma inv_valLSource code (fSource code : {inv A >-> V}) : (el f)^-1 = er f^-1.
Proof.
HBSource code.instanceSource code DefinitionSource code _Source code (fSource code :Source code {splitinjSource code [set: A] >-> V}) := Inject.on (el f).
HBSource code.instanceSource code DefinitionSource code _Source code (fSource code :Source code {splitinjfunSource code [set: A] >-> B}) := Fun.on (el f).
HBSource code.instanceSource code DefinitionSource code _Source code (fSource code :Source code {splitsurjSource code [set: A] >-> B}) := Surject.on (el f).
HBSource code.instanceSource code DefinitionSource code _Source code (fSource code :Source code {splitsurjfunSource code [set: A] >-> B}) := Fun.on (el f).
HBSource code.instanceSource code DefinitionSource code _Source code (fSource code :Source code {splitbijSource code [set: A] >-> B}) := Fun.on (el f).
Lemma sigL_injPSource code (fSource code : U -> V) :
injective (rl f) <-> {in A &, injective f}.
Proof.
Lemma sigL_surjPSource code (fSource code : U -> V) :
set_surj [set: A] B (rl f) <-> set_surj A B f.
Proof.
Lemma sigL_funPSource code (fSource code : U -> V) :
set_fun [set: A] B (rl f) <-> set_fun A B f.
Lemma sigL_bijPSource code (fSource code : U -> V) :
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 valL_injPSource code (fSource code : A -> V) : {in A &, injective (el f)} <-> injective f.
Lemma valL_surjPSource code (fSource code : A -> V) :
set_surj A B (el f) <-> set_surj setT B f.
Proof.
Lemma valLfunPSource code (fSource code : A -> V) :
set_fun A B (el f) <-> set_fun setT B f.
Lemma valL_bijPSource code (fSource code : A -> V) :
set_bij A B (el f) <-> set_bij setT B f.
End RestrictionLeftInv.
Section ExtentionLeftInv.
Context {USource code VSource code : Type} {ASource code : set U} {BSource code : set V}.
Local Notation elSource code := 'valL_None.
Local Notation erSource code := valR.
HBSource code.instanceSource code DefinitionSource code _Source code (fSource code :Source code {oinvSource code V >-> A}) :=
@OInv.Build _ _ (er f) (el 'oinv_f).
Lemma oinv_valRSource code (fSource code : {oinv V >-> A}) : 'oinv_(er f) = (el 'oinv_f).
Proof.
Lemma valR_inj_subproofSource code (fSource code : {inj [set: V] >-> A}) :
@OInv_Can _ _ setT (er f).
HBSource code.instanceSource code DefinitionSource code _Source code fSource code :=Source code valR_inj_subproofSource code f.
Lemma valR_surj_subproofSource code (fSource code : {surj [set: V] >-> [set: A]}) :
@OInv_CanV _ _ setT A (er f).
Proof.
HBSource code.instanceSource code DefinitionSource code _Source code (fSource code :Source code {bijSource code [set: V] >-> [set: A]}) := Fun.on (er f).
End ExtentionLeftInv.
Section Restrictions2.
Context {USource code VSource code : Type} (vSource code : V) {ASource code : set U} {BSource code : set V}.
Local Notation valLUsed by
- mathcomp.analysis.topology_theory.subtype_topology
- mathcomp.analysis.topology_theory.function_spaces
Source code := 'valL_v.
Local Notation valLfunSource code := 'valLfun_v.
Definition sigLR
valR : forall {U V : Type} {A : set V}, (U -> A) -> U -> V valR is not universe polymorphic Arguments valR {U V}%_type_scope {A}%_classical_set_scope f%_function_scope x valR is transparent Expands to: Constant mathcomp.classical.functions.valR Declared in library mathcomp.classical.functions, line 2025, characters 11-15
Used by
- mathcomp.classical.cardinality
Source code := sigR \o (@sigLfun U V A B).
HBSource code.instanceSource code DefinitionSource code _Source code (fSource code :Source code {funSource code A >-> B}) :=
Fun.copy (sigLR f) (totalfun _).
Definition valLR
valR_fun : forall {U V : Type} {A : set V}, (U -> A) -> {fun [set: U] >-> A} valR_fun is not universe polymorphic Arguments valR_fun {U V}%_type_scope {A}%_classical_set_scope f%_function_scope valR_fun is transparent Expands to: Constant mathcomp.classical.functions.valR_fun Declared in library mathcomp.classical.functions, line 2028, characters 11-19
Used by
- mathcomp.classical.cardinality
Source code : (A -> B) -> U -> V := valL \o valR_fun.
Definition valLRfun
sigLR : forall {U V : Type} {A : set U} {B : set V}, {fun A >-> B} -> A -> B sigLR is not universe polymorphic Arguments sigLR {U V}%_type_scope {A B}%_classical_set_scope x u sigLR is transparent Expands to: Constant mathcomp.classical.functions.sigLR Declared in library mathcomp.classical.functions, line 2255, characters 11-16
Source code : (A -> B) -> {fun A >-> B} := valLfun \o valR_fun.
Lemma valLRESource code (fSource code : A -> B) : valLR f = valL (valR f)
Proof.
Proof.
Lemma sigL2KSource code (fSource code : {fun A >-> B}) : {in A, valLR (sigLR f) =1 f}.
Lemma valLRKSource code : cancel valLRfun sigLR.
Lemma valLRfun_injSource code : injective valLRfun.
HBSource code.instanceSource code DefinitionSource code _Source code (fSource code :Source code {oinvfunSource code A >-> B}) := OInversible.on (sigLR f).
HBSource code.instanceSource code DefinitionSource code _Source code (fSource code :Source code {injfunSource code A >-> B}) := Inject.on (sigLR f).
HBSource code.instanceSource code DefinitionSource code _Source code (fSource code :Source code {surjfunSource code A >-> B}) := Surject.on (sigLR f).
HBSource code.instanceSource code DefinitionSource code _Source code (fSource code :Source code {bijSource code A >-> B}) := Fun.on (sigLR f).
HBSource code.instanceSource code DefinitionSource code _Source code (fSource code :Source code {oinvSource code A >-> B}) := OInvFun.on (valLR f).
HBSource code.instanceSource code DefinitionSource code _Source code (fSource code :Source code {injSource code [set: A] >-> B}) := Inject.on (valLR f).
HBSource code.instanceSource code DefinitionSource code _Source code (fSource code :Source code {surjSource code [set: A] >-> [set: B]}) := Surject.on (valLR f).
HBSource code.instanceSource code DefinitionSource code _Source code (fSource code :Source code {bijSource code [set: A] >-> [set: B]}) := Fun.on (valLR f).
Lemma sigLR_injPSource code (fSource code : {fun A >-> B}) :
injective (sigLR f) <-> {in A &, injective f}.
Proof.
Lemma valLR_injPSource code (fSource code : A -> B) :
{in A &, injective (valLR f)} <-> injective f.
Proof.
Lemma sigLR_surjPSource code (fSource code : {fun A >-> B}) :
set_surj setT setT (sigLR f) <-> set_surj A B f.
Proof.
Lemma valLR_surjPSource code (fSource code : A -> B) :
set_surj A B (valLR f) <-> set_surj setT setT f.
Proof.
Lemma sigLR_bijPSource code (fSource code : U -> V) :
set_bij A B f <->
exists (fABSource code : {homo f : xSource code / A x >-> B x}),
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 sigLRfun_bijPSource code fSource code : bijective (sigLR f) <-> set_bij A B f.
Proof.
Lemma valLR_bijPSource code fSource code : set_bij A B (valLR f) <-> bijective f.
Proof.
End Restrictions2.
Section set_bij_basic_lemmas.
Context {aTSource code rTSource code : Type}.
Implicit Types (A : set aT) (B : set rT) (f : aT -> rT).
Lemma eq_set_bijRLSource code ASource code BSource code fSource code gSource code : {in A, f =1 g} -> set_bij A B f -> set_bij A B g.
Lemma eq_set_bijLRSource code ASource code BSource code fSource code gSource code : {in A, f =1 g} -> set_bij A B g -> set_bij A B f.
Lemma eq_set_bijSource code ASource code BSource code fSource code gSource code : {in A, f =1 g} -> set_bij A B f = set_bij A B g.
Proof.
Lemma bij_omapSource code ASource code BSource code fSource code :
set_bij (some @` A) (some @` B) (omap f) <-> set_bij A B f.
Proof.
Lemma bij_oliftSource code ASource code BSource code fSource code : set_bij A (some @` B) (olift f) <-> set_bij A B f.
Proof.
End set_bij_basic_lemmas.
Lemma bij_sub_symSource code {aTSource code rTSource code} {ASource code CSource code : set aT} {BSource code DSource code : set rT}
(fSource 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 splitbij_sub_symUsed by
- mathcomp.classical.set_interval
Source code {aTSource code rTSource code} {ASource code CSource code : set aT} {BSource code DSource code : set rT}
(fSource 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 {aTSource code rTSource code : Type}.
Implicit Types (A : set aT) (B : set rT) (f : aT -> rT).
Lemma set_bij00Source code TSource code USource code (fSource code : T -> U) : set_bij set0 set0 f.
Proof.
Lemma inj_bijUsed by
- mathcomp.analysis.esum
- mathcomp.classical.fsbigop
- mathcomp.classical.cardinality
Source code ASource code fSource code : {in A &, injective f} -> set_bij A (f @` A) f.
Lemma bij_sublSource code ASource code BSource code CSource code DSource code (fSource code : {bij A >-> B}) : C `<=` A -> f @` C = D ->
set_bij C D f.
End set_bij_lemmas.
Section set_bij_lemmas.
Context {aTSource code rTSource code : Type}.
Implicit Types (A : set aT) (B : set rT) (f : aT -> rT).
Lemma bij_subrUsed by
- mathcomp.classical.set_interval
Source code ASource code BSource code CSource code DSource code (fSource code : {bij A >-> B}) : C = A `&` (f @^-1` D) -> D `<=` B ->
set_bij C D f.
Proof.
Lemma bij_subSource code ASource code BSource code CSource code DSource code (fSource code : {bij A >-> B}) : C `<=` A -> D `<=` B ->
{homo f : xSource code / C x >-> D x} ->
{homo 'oinv_f : xSource code / D x >-> (some @` C) x} ->
set_bij C D f.
Proof.
Lemma splitbij_subUsed by
- mathcomp.classical.fsbigop
Source code ASource code BSource code CSource code DSource code (fSource code : {splitbij A >-> B}) : C `<=` A -> D `<=` B ->
{homo f : xSource code / C x >-> D x} ->
{homo f^-1 : xSource code / D x >-> C x} ->
set_bij C D f.
Proof.
Lemma can2_bijSource code ASource code BSource code (fSource code : {fun A >-> B}) (gSource code : {fun B >-> A}) :
{in A, cancel f g} -> {in B, cancel g f} -> set_bij A B f.
Proof.
Lemma bij_sub_setUrlSource code ASource code BSource code B'Source code fSource code : [disjoint B & B'] ->
set_bij A (B `|` B') f -> set_bij (A `\` f @^-1` B') B f.
Proof.
Lemma bij_sub_setUrrSource code ASource code BSource code B'Source code fSource code : [disjoint B & B'] ->
set_bij A (B `|` B') f -> set_bij (A `\` f @^-1` B) B' f.
Proof.
Lemma bij_sub_setUllSource code ASource code A'Source code BSource code fSource code : [disjoint A & A'] ->
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 bij_sub_setUlrSource code ASource code A'Source code BSource code fSource code : [disjoint A & A'] ->
set_bij (A `|` A') B f -> set_bij A' (B `\` f @` A) f.
Proof.
End set_bij_lemmas.
Lemma bij_II_D1Used by
- mathcomp.classical.cardinality
Source code TSource code nSource code (ASource code : set T) (fSource code : nat -> T) :
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 set_bij_compSource code T1Source code T2Source code T3Source code (ASource code : set T1) (BSource code : set T2) (CSource code : set T3) fSource code gSource code :
set_bij A B f -> set_bij B C g -> set_bij A C (g \o f).
Section pointed_inverse.
Context {TSource code USource code} (dfltSource code : U -> T) (ASource code : set T).
Implicit Types (f : T -> U) (i : {inj A >-> U}).
Definition pinv_
valLR : forall {U V : Type}, V -> forall {A : set U} {B : set V}, (A -> B) -> U -> V valLR is not universe polymorphic Arguments valLR {U V}%_type_scope v {A B}%_classical_set_scope _%_function_scope _ valLR is transparent Expands to: Constant mathcomp.classical.functions.valLR Declared in library mathcomp.classical.functions, line 2260, characters 11-16
Source code fSource code := ('split_dflt [fun f in A])^-1.
Local Notation pinvUsed by
- mathcomp.analysis.probability_theory.random_variable
- mathcomp.analysis.realfun
- mathcomp.classical.cardinality
Source code := pinv_.
HBSource code.instanceSource code DefinitionSource code _Source code fSource code :=Source code InvSource code.Build _ _ (pinv f) f.
HBSource code.instanceSource code DefinitionSource code _Source code fSource code :=Source code FunSource code.on (pinv f).
HBSource code.instanceSource code DefinitionSource code _Source code fSource code :=Source code SplitInjFunSource code.on (pinv f).
HBSource code.instanceSource code DefinitionSource code _Source code iSource code :=Source code SplitBijSource code.on (pinv i).
Lemma pinvKUsed by
- mathcomp.analysis.probability_theory.random_variable
- mathcomp.analysis.realfun
Source code fSource code : {in f @` A, cancel (pinv f) f}.
Lemma pinvKVUsed by
- mathcomp.analysis.probability_theory.random_variable
- mathcomp.analysis.real_measure.lebesgue_measure
- mathcomp.analysis.realfun
- mathcomp.analysis.borel_hierarchy
Source code fSource code : {in A &, injective f} -> {in A, cancel f (pinv f)}.
Lemma injpinv_surjSource code fSource code : {in A &, injective f} ->
set_surj (f @` A) A (pinv f).
Lemma injpinv_imageUsed by
- mathcomp.analysis.real_measure.lebesgue_measure
- mathcomp.analysis.measure_theory.measurable_structure
Source code fSource code : {in A &, injective f} ->
pinv f @` (f @` A) = A.
Lemma injpinv_bijSource code fSource code : {in A &, injective f} ->
set_bij (f @` A) A (pinv f).
Lemma surjpKSource code BSource code fSource code : set_surj A B f -> {in B, cancel (pinv f) f}.
Lemma surjpinv_image_subSource code BSource code fSource code : set_surj A B f -> pinv f @` B `<=` A.
Proof.
Lemma surjpinv_injSource code BSource code fSource code : set_surj A B f -> {in B &, injective (pinv f)}.
Lemma surjpinv_bijSource code BSource code fSource code (gSource code := pinv f) : set_surj A B f ->
set_bij B (g @` B) g.
Proof.
Lemma bijpinv_bijSource code BSource code fSource code : set_bij A B f -> set_bij B A (pinv f).
Section pPbij.
Context {BSource code: set U} {fSource code : T -> U} (fbijSource code : set_bij A B f).
Lemma pPbij_Source code : {sSource code : {splitbij A >-> B} | f = s}.
Proof.
Section pPinj.
Context {fSource code : T -> U} (finjSource code : {in A &, injective f}).
Lemma pPinj_Source code : {iSource code : {splitinj A >-> U} | f = i}.
End pPinj.
Section injpPfun.
Context {BSource code : set U} {fSource code : {inj A >-> U}} (ffunSource code : {homo f : xSource code / A x >-> B x}).
Let gSource code : _ -> _ := f.
#[local]Source code HBSource code.instanceSource code DefinitionSource code _Source code :=Source code SplitInjSource code.copy g ('split_dflt [fun g in A]).
#[local]Source code HBSource code.instanceSource code DefinitionSource code _Source code :=Source code isFunSource code.Build _ _ _ _ g ffun.
Lemma injpPfun_Source code : {iSource code : {splitinjfun A >-> B} | f = i :> (_ -> _)}.
Proof.
Section funpPinj.
Context {BSource code : set U} {fSource code : {fun A >-> B}} (finjSource code : {in A &, injective f}).
Lemma funpPinj_Source code : {iSource code : {splitinjfun A >-> B} | f = i :> (_ -> _)}.
End funpPinj.
End pointed_inverse.
Notation "''pinv_' dflt"Used by
- mathcomp.analysis.real_measure.lebesgue_measure
- mathcomp.analysis.measure_theory.measurable_structure
- mathcomp.analysis.borel_hierarchy
Source code := (pinv_ dflt) : form_scope.
Notation pinvUsed by
- mathcomp.analysis.probability_theory.random_variable
- mathcomp.analysis.realfun
- mathcomp.classical.cardinality
Source code := 'pinv_(fun=> point).
Notation "''pPbij_' dflt"Source code := (pPbij_ dflt) : form_scope.
Notation pPbijUsed by
- mathcomp.analysis.esum
- mathcomp.classical.fsbigop
- mathcomp.classical.cardinality
Source code := 'pPbij_(fun=> point).
Notation selfPbijSource code := 'pPbij_id.
Notation "''pPinj_' dflt"Source code := (pPinj_ dflt) : form_scope.
Notation pPinjSource code := 'pPinj_(fun=> point).
Notation "''injpPfun_' dflt"Source code := (injpPfun_ dflt) : form_scope.
Notation injpPfunSource code := 'injpPfun_(fun=> point).
Notation "''funpPinj_' dflt"Source code := (funpPinj_ dflt) : form_scope.
Notation funpPinjSource code := 'funpPinj_(fun=> point).
Section function_space.
Local Open Scope ring_scope.
Import GRing.Theory.
Definition cst
pinv_ : forall {T U : Type}, (U -> T) -> set T -> (T -> U) -> U -> T pinv_ is not universe polymorphic Arguments pinv_ {T U}%_type_scope dflt%_function_scope A%_classical_set_scope f%_function_scope _ pinv_ is transparent Expands to: Constant mathcomp.classical.functions.pinv_ Declared in library mathcomp.classical.functions, line 2484, characters 11-16
Used by
- mathcomp.analysis.ess_sup_inf
- mathcomp.analysis.esum
- mathcomp.analysis.probability_theory.beta_distribution
- mathcomp.analysis.probability_theory.random_variable
- mathcomp.analysis.probability_theory.normal_distribution
- mathcomp.analysis.real_measure.measurable_realfun
- mathcomp.analysis.real_measure.lebesgue_measure
- mathcomp.analysis.measure_theory.measure_extension
- mathcomp.analysis.measure_theory.signed_measure
- mathcomp.analysis.measure_theory.measure_function
- mathcomp.analysis.measure_theory.probability_measure
- mathcomp.analysis.measure_theory.measurable_structure
- mathcomp.analysis.measure_theory.counting_measure
- mathcomp.analysis.measure_theory.measure_negligible
- mathcomp.analysis.measure_theory.measurable_function
- mathcomp.analysis.measure_theory.dirac_measure
- mathcomp.analysis.hoelder
- mathcomp.analysis.realfun
- mathcomp.analysis.cantor
- mathcomp.analysis.ftc
- mathcomp.analysis.kernel
- mathcomp.analysis.gauss_integral
- mathcomp.analysis.ereal
- mathcomp.analysis.topology_theory.topology_structure
- mathcomp.analysis.topology_theory.function_spaces
- mathcomp.analysis.topology_theory.separation_axioms
- mathcomp.analysis.topology_theory.subspace_topology
- mathcomp.analysis.homotopy_theory.continuous_path
- mathcomp.analysis.derive
- mathcomp.analysis.numfun
- mathcomp.analysis.sequences
- mathcomp.analysis.landau
- mathcomp.analysis.lebesgue_integral_theory.lebesgue_integral_nonneg
- mathcomp.analysis.lebesgue_integral_theory.simple_functions
- mathcomp.analysis.lebesgue_integral_theory.lebesgue_integral_definition
- mathcomp.analysis.lebesgue_integral_theory.lebesgue_integral_under
- mathcomp.analysis.lebesgue_integral_theory.lebesgue_integral_dominated_convergence
- mathcomp.analysis.lebesgue_integral_theory.radon_nikodym
- mathcomp.analysis.lebesgue_integral_theory.lebesgue_integral_differentiation
- mathcomp.analysis.lebesgue_integral_theory.lebesgue_integrable
- mathcomp.analysis.lebesgue_integral_theory.measurable_fun_approximation
- mathcomp.analysis.normedtype_theory.pseudometric_normed_Zmodule
- mathcomp.analysis.normedtype_theory.urysohn
- mathcomp.analysis.normedtype_theory.normed_module
- mathcomp.classical.set_interval
- mathcomp.classical.cardinality
- mathcomp.experimental_reals.realsum
Source code {TSource code T'Source code : Type} (xSource code : T') : T -> T' := fun=> x.
Lemma preimage_cstUsed by
- mathcomp.analysis.measure_theory.measurable_function
- mathcomp.analysis.lebesgue_integral_theory.lebesgue_integral_definition
Source code {aTSource code rTSource code : Type} (aSource code : aT) (ASource code : set aT) :
@cst rT _ a @^-1` A = if a \in A then setT else set0.
Proof.
Obligation Tactic := idtac.
Section fct_nmodType.
Variables (TSource code : Type) (MSource code : nmodType).
Implicit Types f g h : T -> M.
Let addrASource code : associative (fun fSource code gSource code => f \+ g).
Let addrCSource code : commutative (fun fSource code gSource code => f \+ g).
Let add0rSource code : left_id \0 (fun fSource code gSource code => f \+ g).
HBSource code.instanceSource code DefinitionSource code _Source code :=Source code
@GRingSource code.isNmodule.Build (T -> M) \0 (fun fSource code gSource code => f \+ g) addrA addrC add0r.
End fct_nmodType.
Section fct_zmodType.
Variables (TSource code : Type) (MSource code : zmodType).
Implicit Types f : T -> M.
Let addNrSource code : left_inverse 0 (fun fSource code => \- f) +%R.
HBSource code.instanceSource code DefinitionSource code _Source code :=Source code
@GRingSource code.Nmodule_isZmodule.Build (T -> M) (fun fSource code => \- f) addNr.
End fct_zmodType.
Section fct_pzRingType.
Variables (TSource code : Type) (MSource code : pzRingType).
Implicit Types f g h : T -> M.
Let mulrASource code : associative (fun fSource code gSource code => f \* g).
Let mul1rSource code : left_id (cst 1) (fun fSource code gSource code => f \* g).
Let mulr1Source code : right_id (cst 1) (fun fSource code gSource code => f \* g).
Let mulrDlSource code : left_distributive (fun fSource code gSource code => f \* g) +%R.
Let mulrDrSource code : right_distributive (fun fSource code gSource code => f \* g) +%R.
HBSource code.instanceSource code DefinitionSource code _Source code :=Source code @GRingSource code.Zmodule_isPzRing.Build (T -> M) (cst 1)
(fun fSource code gSource code => f \* g) mulrA mul1r mulr1 mulrDl mulrDr.
End fct_pzRingType.
Section fct_nzRingType.
Variables (TSource code : pointedType) (MSource code : nzRingType).
Let oner_neq0Source code : cst 1 != 0 :> (T -> M).
HBSource code.instanceSource code DefinitionSource code _Source code :=Source code
@GRingSource code.PzSemiRing_isNonZero.Build (T -> M) oner_neq0.
End fct_nzRingType.
Section fct_comPzRingType.
Variables (TSource code : Type) (MSource code : comPzRingType).
Let mulrCSource code : commutative (@GRing.mul (T -> M)).
HBSource code.instanceSource code DefinitionSource code _Source code :=Source code
GRing.SemiRing_hasCommutativeMul.Build (T -> M) mulrC.
End fct_comPzRingType.
HBSource code.instanceSource code DefinitionSource code _Source code (TSource code :Source code pointedTypeSource code) (M : comNzRingType) :=
GRing.ComPzRing.on (T -> M).
Section fct_lmod.
Variables (USource code : Type) (RSource code : pzRingType) (VSource code : lmodType R).
Program Definition fct_lmodMixin
cst : forall {T T' : Type}, T' -> T -> T' cst is not universe polymorphic Arguments cst {T T'}%_type_scope x _ / The reduction tactics unfold cst when applied to 4 arguments cst is transparent Expands to: Constant mathcomp.classical.functions.cst Declared in library mathcomp.classical.functions, line 2574, characters 11-14
Source code := @GRing.Zmodule_isLmodule.Build R (U -> V)
(fun kSource code fSource code => k \*: f) _ _ _ _.
HBSource code.instanceSource code DefinitionSource code _Source code :=Source code fct_lmodMixinSource code.
End fct_lmod.
Lemma fct_sumEUsed by
- mathcomp.analysis.derive
- mathcomp.analysis.numfun
Source code (ISource code TSource code : Type) (MSource code : nmodType) rSource code (PSource code : {pred I}) (fSource code : I -> T -> M) :
\sum_(iSource code <- r | P i) f i = fun xSource code => \sum_(iSource code <- r | P i) f i x.
Lemma fct_prodESource code (ISource code TSource code : Type) (MSource code : pzRingType) rSource code (PSource code : {pred I})
(fSource code : I -> T -> M) :
\prod_(iSource code <- r | P i) f i = fun xSource code => \prod_(iSource code <- r | P i) f i x.
Lemma mul_funCUsed by
- mathcomp.analysis.derive
Source code (TSource code : Type) {RSource code : comPzSemiRingType} (fSource code : T -> R) (rSource code : R) :
r \*o f = r \o* f.
Lemma min_fun_to_maxUsed by
- mathcomp.analysis.derive
Source code (TSource code : Type) (T'Source code : numDomainType) (fSource code gSource code : T -> T') :
(f \min g) = (f + g) - (f \max g).
Proof.
Lemma max_fun_to_minSource code (TSource code : Type) (T'Source code : numDomainType) (fSource code gSource code : T -> T') :
(f \max g) = (f + g) - (f \min g).
Proof.
Lemma fun_maxCUsed by
- mathcomp.analysis.derive
Source code (TSource code : Type) dSource code (T'Source code : orderType d) (fSource code gSource code : T -> T') :
f \max g = g \max f.
Proof.
Lemma fun_minCUsed by
- mathcomp.analysis.derive
Source code (TSource code : Type) dSource code (T'Source code : orderType d) (fSource code gSource code : T -> T') :
f \min g = g \min f.
Proof.
End function_space.
Section function_space_lemmas.
Local Open Scope ring_scope.
Import GRing.Theory.
Lemma addrfctEUsed by
- mathcomp.analysis.lebesgue_integral_theory.lebesgue_integral_differentiation
Source code (TSource code : Type) (KSource code : nmodType) (fSource code gSource code : T -> K) :
f + g = (fun xSource code => f x + g x).
Proof.
Lemma sumrfctESource code (TSource code : Type) (KSource code : nmodType) (sSource code : seq (T -> K)) :
\sum_(fSource code <- s) f = (fun xSource code => \sum_(fSource code <- s) f x).
Proof.
Lemma prodrfctESource code (TSource code : Type) (KSource code : pzRingType) (sSource code : seq (T -> K)) :
\prod_(fSource code <- s) f = (fun xSource code => \prod_(fSource code <- s) f x).
Proof.
Lemma natmulfctESource code (USource code : Type) (KSource code : nmodType) (fSource code : U -> K) nSource code :
f *+ n = (fun xSource code => f x *+ n).
Lemma opprfctEUsed by
- mathcomp.analysis.derive
- mathcomp.analysis.lebesgue_integral_theory.lebesgue_integral_differentiation
- mathcomp.analysis.normedtype_theory.normed_module
Source code (TSource code : Type) (KSource code : zmodType) (fSource code : T -> K) : - f = (fun xSource code => - f x).
Proof.
Lemma addBrfctEUsed by
- mathcomp.analysis.numfun
Source code (USource code : Type) (KSource code : zmodType) :
@interchange (U -> K) (fun aSource code bSource code => a - b) (fun aSource code bSource code => a + b).
Lemma mulrfctESource code (TSource code : Type) (KSource code : pzRingType) (fSource code gSource code : T -> K) :
f * g = (fun xSource code => f x * g x).
Proof.
Lemma scalerfctESource code (TSource code : Type) (KSource code : pzRingType) (LSource code : lmodType K)
kSource code (fSource code : T -> L) :
k *: f = (fun xSource code : T => k *: f x).
Proof.
Lemma zerofctESource code (TSource code : Type) (KSource code : nmodType) xSource code : (0 : T -> K) x = 0.
Proof.
Lemma onefctESource code (TSource code : Type) (KSource code : pzRingType) xSource code : (1 : T -> K) x = 1.
Proof.
Lemma cstESource code (TSource code T'Source code: Type) (xSource code : T) : cst x = fun _: T' => x.
Proof.
Lemma exprfctEUsed by
- mathcomp.analysis.derive
Source code (TSource code : Type) (KSource code : pzRingType) (fSource code : T -> K) nSource code :
f ^+ n = (fun xSource code => f x ^+ n).
Lemma compEUsed by
- mathcomp.analysis.showcase.pnt
Source code (T1Source code T2Source code T3Source code : Type) (fSource code : T1 -> T2) (gSource code : T2 -> T3) :
g \o f = fun xSource code => g (f x).
Proof.
Definition fctE
fctE : (forall (T T' : Type) (x : T), cst x = fun=> x) * (forall (T1 T2 T3 : Type) (f : T1 -> T2) (g : T2 -> T3), g \o f = (fun x : T1 => g (f x))) * (forall (T : Type) (K : GRing.Zmodule.Exports.zmodType) (f : T -> K), (- f)%R = (fun x : T => (- f x)%R)) * (forall (T : Type) (K : GRing.Nmodule.Exports.nmodType) (f g : T -> K), (f + g)%R = (fun x : T => (f x + g x)%R)) * (forall (T : Type) (K : pzRingType) (f g : T -> K), (f * g)%R = (fun x : T => (f x * g x)%R)) * (forall (T : Type) (K : pzRingType) (L : lmodType K) (k : K) (f : T -> L), (k *: f)%R = (fun x : T => (k *: f x)%R)) * (forall (T : Type) (K : pzRingType) (f : T -> K) (n : nat), (f ^+ n)%R = (fun x : T => (f x ^+ n)%R)) * (forall (T : Type) (K : GRing.Nmodule.Exports.nmodType) (x : T), (0%R : T -> K) x = 0%R) * (forall (T : Type) (K : pzRingType) (x : T), (1%R : T -> K) x = 1%R) fctE is not universe polymorphic fctE is transparent Expands to: Constant mathcomp.classical.functions.fctE Declared in library mathcomp.classical.functions, line 2763, characters 11-15
Used by
- mathcomp.analysis.probability_theory.beta_distribution
- mathcomp.analysis.probability_theory.independence
- mathcomp.analysis.probability_theory.random_variable
- mathcomp.analysis.probability_theory.normal_distribution
- mathcomp.analysis.realfun
- mathcomp.analysis.ftc
- mathcomp.analysis.gauss_integral
- mathcomp.analysis.elementary_functions.trigonometry_functions
- mathcomp.analysis.derive
- mathcomp.analysis.numfun
- mathcomp.analysis.lebesgue_integral_theory.lebesgue_integral_under
- mathcomp.analysis.exp
Source code :=
(cstE, compE, opprfctE, addrfctE, mulrfctE, scalerfctE, exprfctE,
zerofctE, onefctE).
Lemma preimageD1Used by
- mathcomp.analysis.lebesgue_integral_theory.lebesgue_integral_definition
Source code {TSource code : Type} {ZSource code : zmodType} (fSource code gSource code : T -> Z) (zSource code : Z) :
(f \+ g) @^-1`[set z] =
\bigcup_(aSource code 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 scalrfctESource code := scalerfctE.
Lemma inv_funKUsed by
- mathcomp.analysis.normedtype_theory.normed_module
Source code TSource code (RSource code : unitRingType) (fSource code : T -> R) : (f\^-1\^-1)%R = f.
Local Open Scope ring_scope.
Import GRing.Theory.
Section linfun_pred.
Context {KSource code : numDomainType} {ESource code : lmodType K} {FSource code : lmodType K}
{sSource code : K -> F -> F}.
linfun : forall {K : numDomainType} {E F : lmodType K}, (K -> F -> F) -> {pred E -> F} linfun is not universe polymorphic Arguments linfun {K E F} {s}%_function_scope _ linfun is transparent Expands to: Constant mathcomp.classical.functions.linfun Declared in library mathcomp.classical.functions, line 2793, characters 11-17
Source code : {pred E -> F} := mem [set fSource code | linear_for s f ].
Definition linfun_key
linfun_key : forall {K : numDomainType} {E F : lmodType K} {s : K -> F -> F}, pred_key (T:=E -> F) linfun linfun_key is not universe polymorphic Arguments linfun_key {K E F} {s}%_function_scope linfun_key is opaque Expands to: Constant mathcomp.classical.functions.linfun_key Declared in library mathcomp.classical.functions, line 2795, characters 11-21
Source code : pred_key linfun
Proof.
Canonical linfun_keyed
linfun_keyed : forall {K : numDomainType} {E F : lmodType K} {s : K -> F -> F}, keyed_pred linfun_key linfun_keyed is not universe polymorphic Arguments linfun_keyed {K E F} {s}%_function_scope linfun_keyed is transparent Expands to: Constant mathcomp.classical.functions.linfun_keyed Declared in library mathcomp.classical.functions, line 2797, characters 10-22
Source code := KeyedPred linfun_key.
End linfun_pred.
Section linfun.
Context {RSource code : numDomainType} {ESource code : lmodType R}
{FSource code : lmodType R} {sSource code : GRing.Scale.law R F}.
Notation TSource code := {linear E -> F | s}.
Notation linfunSource code := (@linfun _ E F s).
Section Sub.
Context (fSource code : E -> F) (fPSource code : f \in linfun).
#[local] Definition linfun_Sub_subproof
linfun_Sub_subproof not a defined object.
Source code :=
@GRing.isLinear.Build _ E F s f (set_mem fP).
#[local]Source code HBSource code.instanceSource code DefinitionSource code _Source code :=Source code linfun_Sub_subproofSource code.
Definition linfun_Sub
linfun_Sub : forall {R : numDomainType} {E F : lmodType R} {s : GRing.Scale.law R F} [f : E -> F], f \in linfun -> {linear E -> F | s} linfun_Sub is not universe polymorphic Arguments linfun_Sub {R E F s} [f]%_function_scope fP linfun_Sub is transparent Expands to: Constant mathcomp.classical.functions.linfun_Sub Declared in library mathcomp.classical.functions, line 2816, characters 11-21
Source code : {linear _ -> _ | _ } := f.
End Sub.
Let linfun_rectSource code (KSource code : T -> Type) :
(forall fSource code (PfSource code : f \in linfun), K (linfun_Sub Pf)) -> forall uSource code : 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 linfun_valPSource code fSource code (PfSource code : f \in linfun) : linfun_Sub Pf = f :> (_ -> _).
Proof.
HBSource code.instanceSource code DefinitionSource code _Source code :=Source code isSubSource code.Build _ _ T linfun_rect linfun_valP.
Lemma linfun_eqPSource code (fSource code gSource code : {linear E -> F | s}) : f = g <-> f =1 g.
HBSource code.instanceSource code DefinitionSource code _Source code :=Source code [ChoiceSource code of {linear E -> F | s} by <:].
Variant linfun_specSource code (fSource code : E -> F) : (E -> F) -> bool -> Type :=
| IslinfunSource code (lSource code : {linear E -> F | s}) : linfun_spec f l true.
Lemma linfunPSource code (fSource code : E -> F) : f \in linfun -> linfun_spec f f (f \in linfun).
Proof.
have {2}-> : f = linfun_Sub f_lc by rewrite linfun_valP.
by constructor.
Qed.
End linfun.
Section linfun_lmodtype.
Context {RSource code : numDomainType} {ESource code FSource code : lmodType R}.
Import GRing.Theory.
Let linfun_submod_closedSource code : submod_closed (@linfun R E F *:%R).
Proof.
HBSource code.instanceSource code DefinitionSource code _Source code :=Source code
@GRingSource code.isSubmodClosed.Build _ _ linfun linfun_submod_closed.
HBSource code.instanceSource code DefinitionSource code _Source code :=Source code
[SubChoice_isSubLmodule of {linear E -> F } by <:].
End linfun_lmodtype.
HBSource code.instanceSource code DefinitionSource code _Source code {RSource code :Source code numDomainType}Source code (E F : lmodType R) :=
isPointed.Build {linear E -> F} 0.