(* * Copyright (c) 2009-2011, Andrew Appel, Robert Dockins and Aquinas Hobor. * *)
(** This library defines boolean algebras defined from an order-theoretic perspective.  In short, a boolean algebra is a complemented distributive lattice.  We additionally require that the boolean algebra be non-trivial.  From this definition we can recover the axioms of boolean algebras as defined in allp algebra.  We also define module interfaces for boolean algebras with a splitting operator, with a relativization operator, and those which support token counting.  We then say that a share model is a boolean algebra which satisfies all three module interfaces.  We also require that the elements have a decidable equality. *)
Module Type BOOLEAN_ALGEBRA.
Parameters (t:Type) (Ord : t -> t -> Prop)
(top bot : t) (lub glb : t -> t -> t) (comp : t -> t).
Delimit Scope ba with ba. Open Scope ba.
Notation "x <= y" := (Ord x y) (at level 70, no associativity) : ba.

Axiom lub_least : forall x y z, x <= z -> y <= z -> (lub x y) <= z.