2017-08-08 15:30:12 +02:00
|
|
|
|
Require Import HoTT.
|
|
|
|
|
|
|
|
|
|
Section binary_operation.
|
|
|
|
|
Variable A : Type.
|
|
|
|
|
|
|
|
|
|
Definition operation := A -> A -> A.
|
|
|
|
|
End binary_operation.
|
|
|
|
|
|
|
|
|
|
Section Defs.
|
|
|
|
|
Variable A : Type.
|
|
|
|
|
Variable f : A -> A -> A.
|
|
|
|
|
|
|
|
|
|
Class Commutative :=
|
|
|
|
|
commutative : forall x y, f x y = f y x.
|
|
|
|
|
|
|
|
|
|
Class Associative :=
|
|
|
|
|
associativity : forall x y z, f (f x y) z = f x (f y z).
|
|
|
|
|
|
|
|
|
|
Class Idempotent :=
|
|
|
|
|
idempotency : forall x, f x x = x.
|
|
|
|
|
|
|
|
|
|
Variable g : operation A.
|
|
|
|
|
|
|
|
|
|
Class Absorption :=
|
|
|
|
|
absorb : forall x y, f x (g x y) = x.
|
|
|
|
|
|
|
|
|
|
Variable n : A.
|
|
|
|
|
|
|
|
|
|
Class NeutralL :=
|
|
|
|
|
neutralityL : forall x, f n x = x.
|
|
|
|
|
|
|
|
|
|
Class NeutralR :=
|
|
|
|
|
neutralityR : forall x, f x n = x.
|
|
|
|
|
|
|
|
|
|
End Defs.
|
|
|
|
|
|
|
|
|
|
Arguments Commutative {_} _.
|
|
|
|
|
Arguments Associative {_} _.
|
|
|
|
|
Arguments Idempotent {_} _.
|
|
|
|
|
Arguments NeutralL {_} _ _.
|
|
|
|
|
Arguments NeutralR {_} _ _.
|
|
|
|
|
Arguments Absorption {_} _ _.
|
|
|
|
|
Arguments commutative {_} {_} {_} _ _.
|
|
|
|
|
Arguments associativity {_} {_} {_} _ _ _.
|
|
|
|
|
Arguments idempotency {_} {_} {_} _.
|
|
|
|
|
Arguments neutralityL {_} {_} {_} {_} _.
|
|
|
|
|
Arguments neutralityR {_} {_} {_} {_} _.
|
|
|
|
|
Arguments absorb {_} {_} {_} {_} _ _.
|
|
|
|
|
|
|
|
|
|
Section structure.
|
2017-08-08 17:00:30 +02:00
|
|
|
|
Variable (T A : Type).
|
2017-08-08 15:30:12 +02:00
|
|
|
|
|
|
|
|
|
Class hasMembership : Type :=
|
2017-08-08 17:00:30 +02:00
|
|
|
|
member : A -> T -> hProp.
|
|
|
|
|
|
|
|
|
|
Class hasMembership_decidable : Type :=
|
|
|
|
|
member_dec : A -> T -> Bool.
|
|
|
|
|
|
|
|
|
|
Class hasSubset : Type :=
|
|
|
|
|
subset : T -> T -> hProp.
|
|
|
|
|
|
|
|
|
|
Class hasSubset_decidable : Type :=
|
|
|
|
|
subset_dec : T -> T -> Bool.
|
2017-08-08 15:30:12 +02:00
|
|
|
|
|
|
|
|
|
Class hasEmpty : Type :=
|
2017-08-08 17:00:30 +02:00
|
|
|
|
empty : T.
|
2017-08-08 15:30:12 +02:00
|
|
|
|
|
|
|
|
|
Class hasSingleton : Type :=
|
2017-08-08 17:00:30 +02:00
|
|
|
|
singleton : A -> T.
|
2017-08-08 15:30:12 +02:00
|
|
|
|
|
|
|
|
|
Class hasUnion : Type :=
|
2017-08-08 17:00:30 +02:00
|
|
|
|
union : T -> T -> T.
|
2017-08-08 15:30:12 +02:00
|
|
|
|
|
|
|
|
|
Class hasIntersection : Type :=
|
2017-08-08 17:00:30 +02:00
|
|
|
|
intersection : T -> T -> T.
|
2017-08-08 15:30:12 +02:00
|
|
|
|
|
|
|
|
|
Class hasComprehension : Type :=
|
2017-08-08 17:00:30 +02:00
|
|
|
|
filter : (A -> Bool) -> T -> T.
|
2017-08-08 15:30:12 +02:00
|
|
|
|
End structure.
|
|
|
|
|
|
|
|
|
|
Arguments member {_} {_} {_} _ _.
|
2017-08-08 17:00:30 +02:00
|
|
|
|
Arguments subset {_} {_} _ _.
|
|
|
|
|
Arguments member_dec {_} {_} {_} _ _.
|
|
|
|
|
Arguments subset_dec {_} {_} _ _.
|
|
|
|
|
Arguments empty {_} {_}.
|
2017-08-08 15:30:12 +02:00
|
|
|
|
Arguments singleton {_} {_} {_} _.
|
2017-08-08 17:00:30 +02:00
|
|
|
|
Arguments union {_} {_} _ _.
|
|
|
|
|
Arguments intersection {_} {_} _ _.
|
2017-08-08 15:30:12 +02:00
|
|
|
|
Arguments filter {_} {_} {_} _ _.
|
|
|
|
|
|
|
|
|
|
Notation "∅" := empty.
|
|
|
|
|
Notation "{| x |}" := (singleton x).
|
|
|
|
|
Infix "∪" := union (at level 8, right associativity).
|
|
|
|
|
Notation "(∪)" := union (only parsing).
|
|
|
|
|
Notation "( X ∪)" := (union X) (only parsing).
|
|
|
|
|
Notation "( ∪ Y )" := (fun X => X ∪ Y) (only parsing).
|
|
|
|
|
Infix "∩" := intersection (at level 8, right associativity).
|
|
|
|
|
Notation "( ∩ )" := intersection (only parsing).
|
|
|
|
|
Notation "( X ∩ )" := (intersection X) (only parsing).
|
|
|
|
|
Notation "( ∩ Y )" := (fun X => X ∩ Y) (only parsing).
|
|
|
|
|
Notation "{| X & ϕ |}" := (filter ϕ X).
|
2017-08-08 17:00:30 +02:00
|
|
|
|
Infix "∈" := member (at level 9, right associativity).
|
|
|
|
|
Infix "⊆" := subset (at level 10, right associativity).
|
|
|
|
|
Infix "∈_d" := member_dec (at level 9, right associativity).
|
|
|
|
|
Infix "⊆_d" := subset_dec (at level 10, right associativity).
|