mirror of https://github.com/nmvdw/HITs-Examples
116 lines
3.1 KiB
Coq
116 lines
3.1 KiB
Coq
(** Interface for lattices and join semilattices. *)
|
|
Require Import HoTT.
|
|
|
|
Section binary_operation.
|
|
Definition operation (A : Type) := A -> A -> A.
|
|
|
|
Variable (A : Type)
|
|
(f : operation A).
|
|
|
|
Class Commutative :=
|
|
commutativity : 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 binary_operation.
|
|
|
|
Arguments Commutative {_} _.
|
|
Arguments Associative {_} _.
|
|
Arguments Idempotent {_} _.
|
|
Arguments NeutralL {_} _ _.
|
|
Arguments NeutralR {_} _ _.
|
|
Arguments Absorption {_} _ _.
|
|
Arguments commutativity {_} {_} {_} _ _.
|
|
Arguments associativity {_} {_} {_} _ _ _.
|
|
Arguments idempotency {_} {_} {_} _.
|
|
Arguments neutralityL {_} {_} {_} {_} _.
|
|
Arguments neutralityR {_} {_} {_} {_} _.
|
|
Arguments absorb {_} {_} {_} {_} _ _.
|
|
|
|
Section lattice_operations.
|
|
Variable (A : Type).
|
|
|
|
Class maximum :=
|
|
max_L : operation A.
|
|
|
|
Class minimum :=
|
|
min_L : operation A.
|
|
|
|
Class bottom :=
|
|
empty : A.
|
|
End lattice_operations.
|
|
|
|
Arguments max_L {_} {_} _.
|
|
Arguments min_L {_} {_} _.
|
|
Arguments empty {_}.
|
|
|
|
Section JoinSemiLattice.
|
|
Variable A : Type.
|
|
Context {max_L : maximum A} {empty_L : bottom A}.
|
|
|
|
Class JoinSemiLattice :=
|
|
{
|
|
commutative_max_js :> Commutative max_L ;
|
|
associative_max_js :> Associative max_L ;
|
|
idempotent_max_js :> Idempotent max_L ;
|
|
neutralL_max_js :> NeutralL max_L empty_L ;
|
|
neutralR_max_js :> NeutralR max_L empty_L ;
|
|
}.
|
|
End JoinSemiLattice.
|
|
|
|
Arguments JoinSemiLattice _ {_} {_}.
|
|
|
|
Create HintDb joinsemilattice_hints.
|
|
Hint Resolve associativity : joinsemilattice_hints.
|
|
Hint Resolve (associativity _ _ _)^ : joinsemilattice_hints.
|
|
Hint Resolve commutativity : joinsemilattice_hints.
|
|
Hint Resolve idempotency : joinsemilattice_hints.
|
|
Hint Resolve neutralityL : joinsemilattice_hints.
|
|
Hint Resolve neutralityR : joinsemilattice_hints.
|
|
|
|
Section Lattice.
|
|
Variable A : Type.
|
|
Context {max_L : maximum A} {min_L : minimum A} {empty_L : bottom A}.
|
|
|
|
Class Lattice :=
|
|
{
|
|
commutative_min :> Commutative min_L ;
|
|
commutative_max :> Commutative max_L ;
|
|
associative_min :> Associative min_L ;
|
|
associative_max :> Associative max_L ;
|
|
idempotent_min :> Idempotent min_L ;
|
|
idempotent_max :> Idempotent max_L ;
|
|
neutralL_max :> NeutralL max_L empty_L ;
|
|
neutralR_max :> NeutralR max_L empty_L ;
|
|
absorption_min_max :> Absorption min_L max_L ;
|
|
absorption_max_min :> Absorption max_L min_L
|
|
}.
|
|
End Lattice.
|
|
|
|
Arguments Lattice _ {_} {_} {_}.
|
|
|
|
Create HintDb lattice_hints.
|
|
Hint Resolve associativity : lattice_hints.
|
|
Hint Resolve (associativity _ _ _)^ : lattice_hints.
|
|
Hint Resolve commutativity : lattice_hints.
|
|
Hint Resolve absorb : lattice_hints.
|
|
Hint Resolve idempotency : lattice_hints.
|
|
Hint Resolve neutralityL : lattice_hints.
|
|
Hint Resolve neutralityR : lattice_hints.
|