Require Export ListFunctions.
Set Implicit Arguments.
Unset Strict Implicit.
(*Definition of security class, and its standard partial order.      *)
(* SECLEV: security levels CATEGORY: categories, departments or need-to-know *)
Definition SECLEV := nat.
Parameter CATEGORY : Set.
(*SecClass: security class or access class*)
Record SecClass : Set := sclass {level : SECLEV; categs : set CATEGORY}.
Definition eq_sc (a b : SecClass) : Prop :=
level a = level b /\ categs a = categs b.
Definition le_sc (a b : SecClass) : Prop :=
level a <= level b /\ Included (categs a) (categs b).
Hint Unfold eq_sc le_sc.
(*********************************************************************)
(*                  Security Policy Subjects                         *)
(*********************************************************************)
(*This are global parameters introducing the basic sets of the model.*)
(* SUBJECT: all the subjects of the system GRPNAME: all the group names of the system root: UNIX superuser secofr: security officer, in charge of MAC attributes *)
Parameter SUBJECT GRPNAME : Set.
Parameter root secofr : SUBJECT.
(*These axioms are needed by functions of ListSet.                   *)

(* Specifications: *)
Axiom SUBeq_dec : forall x y : SUBJECT, {x = y} + {x <> y}.
Axiom GRPeq_dec : forall x y : GRPNAME, {x = y} + {x <> y}.
Hint Resolve SUBeq_dec GRPeq_dec.