Built with Alectryon, running Coq+SerAPI v8.19.0+0.19.3. Bubbles () indicate interactive fragments: hover for details, tap to reveal contents. Use Ctrl+↑Ctrl+↓ to navigate, Ctrl+🖱️ to focus. On Mac, use ⌘ instead of Ctrl.
[Loading ML file number_string_notation_plugin.cmxs (using legacy method) ... done]
(** * Classes *)(** ** Pointwise Lemmas *)SectionPointwise.Context {A : Type} {B : A -> Type} (R : foralla, Relation (B a)).Definitionrelation_pointwise : Relation (forallx, B x)
:= funPQ => forallx, R x (P x) (Q x).
A: Type B: A -> Type R: foralla : A, Relation (B a) H: foralla : A, Reflexive (R a)
Reflexive relation_pointwise
A: Type B: A -> Type R: foralla : A, Relation (B a) H: foralla : A, Reflexive (R a)
Reflexive relation_pointwise
intros P a; reflexivity.Defined.
A: Type B: A -> Type R: foralla : A, Relation (B a) H: foralla : A, Transitive (R a)
Transitive relation_pointwise
A: Type B: A -> Type R: foralla : A, Relation (B a) H: foralla : A, Transitive (R a)
Transitive relation_pointwise
A: Type B: A -> Type R: foralla : A, Relation (B a) H: foralla : A, Transitive (R a) P, Q, S: forallx : A, B x r: relation_pointwise P Q s: relation_pointwise Q S a: A
R a (P a) (S a)
bytransitivity (Q a).Defined.
A: Type B: A -> Type R: foralla : A, Relation (B a) H: foralla : A, Symmetric (R a)
Symmetric relation_pointwise
A: Type B: A -> Type R: foralla : A, Relation (B a) H: foralla : A, Symmetric (R a)
Symmetric relation_pointwise
A: Type B: A -> Type R: foralla : A, Relation (B a) H: foralla : A, Symmetric (R a) P, Q: forallx : A, B x r: relation_pointwise P Q a: A
R a (Q a) (P a)
bysymmetry.Defined.EndPointwise.Hint Immediate reflexive_pointwise : typeclass_instances.Hint Immediate transitive_pointwise : typeclass_instances.Hint Immediate symmetric_pointwise : typeclass_instances.Definitionpointwise_precomp {A'A : Type} {B : A -> Type} (R : foralla, Relation (B a))
(f : A' -> A) (PQ : forallx, B x)
: relation_pointwise R P Q -> relation_pointwise (R o f) (P o f) (Q o f)
:= funr => r o f.(** This is easiest to state when [B] is a constant type family. *)
A, A', B: Type R: Relation B H: Reflexive R H0: Transitive R f: A' <~> A P: A -> B Q: A' -> B
relation_pointwise (fun_ : A => R) P (Q o f^-1) ->
relation_pointwise (fun_ : A' => R) (P o f) Q
A, A', B: Type R: Relation B H: Reflexive R H0: Transitive R f: A' <~> A P: A -> B Q: A' -> B
relation_pointwise (fun_ : A => R) P (Q o f^-1) ->
relation_pointwise (fun_ : A' => R) (P o f) Q
A, A', B: Type R: Relation B H: Reflexive R H0: Transitive R f: A' <~> A P: A -> B Q: A' -> B r: relation_pointwise (fun_ : A => R) P (Q o f^-1) a: A'
R (P (f a)) (Q a)
A, A', B: Type R: Relation B H: Reflexive R H0: Transitive R f: A' <~> A P: A -> B Q: A' -> B r: relation_pointwise (fun_ : A => R) P (Q o f^-1) a: A'
R (P (f a)) (Q (f^-1 (f a)))
A, A', B: Type R: Relation B H: Reflexive R H0: Transitive R f: A' <~> A P: A -> B Q: A' -> B r: relation_pointwise (fun_ : A => R) P (Q o f^-1) a: A'
R (Q (f^-1 (f a))) (Q a)
A, A', B: Type R: Relation B H: Reflexive R H0: Transitive R f: A' <~> A P: A -> B Q: A' -> B r: relation_pointwise (fun_ : A => R) P (Q o f^-1) a: A'
R (Q (f^-1 (f a))) (Q a)
A, A', B: Type R: Relation B H: Reflexive R H0: Transitive R f: A' <~> A P: A -> B Q: A' -> B r: relation_pointwise (fun_ : A => R) P (Q o f^-1) a: A'
Q (f^-1 (f a)) = Q a
apply (ap Q), eissect.Defined.Definitionpointwise_moveL_equiv {AA'B : Type} (R : Relation B)
`{Reflexive _ R} `{Transitive _ R}
(f : A <~> A') (P : A -> B) (Q : A' -> B)
: relation_pointwise (fun_ => R) (P o f^-1) Q -> relation_pointwise (fun_ => R) P (Q o f)
:= pointwise_moveR_equiv (flip R) f Q P.(** ** Injective Functions *)ClassIsInjective {AB : Type} (f : A -> B)
:= injective : forallxy, f x = f y -> x = y.Arguments injective {A B} f {_} _ _.
A, B: Type f: A -> B IsInjective0: IsInjective f
forallxy : A, x <> y -> f x <> f y
A, B: Type f: A -> B IsInjective0: IsInjective f
forallxy : A, x <> y -> f x <> f y
A, B: Type f: A -> B IsInjective0: IsInjective f x, y: A np: x <> y q: f x = f y
Empty
A, B: Type f: A -> B IsInjective0: IsInjective f x, y: A np: x <> y q: f x = f y
f x = f y
exact q.Defined.Instanceisinj_idmapA : @IsInjective A A idmap
:= funxy => idmap.#[export] Hint Unfold IsInjective : typeclass_instances.
A, B, C: Type f: A -> B g: B -> C H: IsInjective g H0: IsInjective f
IsInjective (g o f)
A, B, C: Type f: A -> B g: B -> C H: IsInjective g H0: IsInjective f
IsInjective (g o f)
A, B, C: Type f: A -> B g: B -> C H: IsInjective g H0: IsInjective f x, y: A p: g (f x) = g (f y)
x = y
byapply (injective f), (injective g).Defined.#[export] Hint Immediate isinj_compose : typeclass_instances.
A, B, C: Type f: A -> B g: B -> C IsInjective0: IsInjective (g o f)
IsInjective f
A, B, C: Type f: A -> B g: B -> C IsInjective0: IsInjective (g o f)
IsInjective f
A, B, C: Type f: A -> B g: B -> C IsInjective0: IsInjective (g o f) x, y: A p: f x = f y
x = y
A, B, C: Type f: A -> B g: B -> C IsInjective0: IsInjective (g o f) x, y: A p: f x = f y
g (f x) = g (f y)
exact (ap g p).Defined.(** ** Antisymmetric Relations *)ClassAntiSymmetric {A : Type} (R : A -> A -> Type) : Type
:= antisymmetry : forallxy, R x y -> R y x -> x = y.Arguments antisymmetry {A} R {AntiSymmetric} x y _ _.