File: bug_19066.v

package info (click to toggle)
coq 9.1.0%2Bdfsg-3
  • links: PTS, VCS
  • area: main
  • in suites: experimental
  • size: 35,964 kB
  • sloc: ml: 239,908; sh: 4,355; python: 2,985; ansic: 2,644; makefile: 874; lisp: 171; javascript: 63; xml: 24; sed: 2
file content (36 lines) | stat: -rw-r--r-- 1,341 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
Set Universe Polymorphism.
Unset Strict Universe Declaration.
Set Primitive Projections.

Axiom Relation@{u} : Type@{u} -> Type@{u}.
Inductive GraphQuotient {A : Type@{i}} (R : Relation A) : Type@{u} :=
| gq : A -> GraphQuotient R.

Arguments gq {A R} a.

Axiom IsConnMap@{i} : forall {A B : Type@{i}}, (A -> B) -> Type@{i}.

Definition class_of@{i k} {A : Type@{i}} (R : Relation@{i} A) : A -> GraphQuotient@{i k} R := gq.

Axiom issurj_class_of : forall {A : Type} (R : Relation A), IsConnMap (class_of R).

Record Homomorphism {σ} {A B : σ -> Type} : Type := BuildHomomorphism
  { def_hom : forall (s : σ), A s -> B s }.

Arguments Homomorphism {σ}.

Arguments BuildHomomorphism {σ A B} def_hom.

Definition QuotientAlgebra  {σ : Type} (A : σ -> Type) (Φ : forall s, Relation (A s)) (s : σ) : Type :=
  GraphQuotient (Φ s).

Definition def_hom_quotient {σ} {A : σ -> Type} (Φ : forall s, Relation (A s)) (s : σ) (x : A s) :
  (QuotientAlgebra A Φ) s := class_of (Φ s) x.
Definition hom_quotient {σ} {A : σ -> Type} (Φ : forall s, Relation (A s)) : Homomorphism A (QuotientAlgebra A Φ) :=
  BuildHomomorphism (def_hom_quotient Φ).

Lemma surjection_quotient : forall {σ} {A : σ -> Type} (Φ : forall s, Relation (A s)) s, IsConnMap (def_hom (hom_quotient Φ) s).
Proof.
intros σ A Φ s.
apply issurj_class_of.
Qed.