cpsa-3.3.0: src/CPSA/Lib/Goal.hs
-- Security Goals
-- Copyright (c) 2015 The MITRE Corporation
--
-- This program is free software: you can redistribute it and/or
-- modify it under the terms of the BSD License as published by the
-- University of California.
module CPSA.Lib.Goal where
import CPSA.Lib.Protocol
-- Syntax for the atomic formulas
data AForm t
= RolePred (Role t) Int t
| ParamPred (Role t) t t t
| StrPrec t t
| Prec t t
| Non t
| Pnon t
| Uniq t
| UniqAt t t
| UgenAt t t
| Ugen t
| Equals t t
deriving Show
data Goal t
= Goal { uvars :: [t], -- Universally quantified variables
antec :: [AForm t], -- Antecedent
concl :: [[AForm t]] } -- Conclusion
-- Ordering used to sort by constructor order.
aFormOrder :: AForm t -> AForm t -> Ordering
aFormOrder (RolePred _ _ _) (RolePred _ _ _) = EQ
aFormOrder (RolePred _ _ _) (ParamPred _ _ _ _) = LT
aFormOrder (RolePred _ _ _) (StrPrec _ _) = LT
aFormOrder (RolePred _ _ _) (Prec _ _) = LT
aFormOrder (RolePred _ _ _) (Non _) = LT
aFormOrder (RolePred _ _ _) (Pnon _) = LT
aFormOrder (RolePred _ _ _) (Uniq _) = LT
aFormOrder (RolePred _ _ _) (UniqAt _ _) = LT
aFormOrder (RolePred _ _ _) (UgenAt _ _) = LT
aFormOrder (RolePred _ _ _) (Ugen _) = LT
aFormOrder (RolePred _ _ _) (Equals _ _) = LT
aFormOrder (ParamPred _ _ _ _) (RolePred _ _ _) = GT
aFormOrder (ParamPred _ _ _ _) (ParamPred _ _ _ _) = EQ
aFormOrder (ParamPred _ _ _ _) (StrPrec _ _) = LT
aFormOrder (ParamPred _ _ _ _) (Prec _ _) = LT
aFormOrder (ParamPred _ _ _ _) (Non _) = LT
aFormOrder (ParamPred _ _ _ _) (Pnon _) = LT
aFormOrder (ParamPred _ _ _ _) (Uniq _) = LT
aFormOrder (ParamPred _ _ _ _) (UniqAt _ _) = LT
aFormOrder (ParamPred _ _ _ _) (UgenAt _ _) = LT
aFormOrder (ParamPred _ _ _ _) (Ugen _) = LT
aFormOrder (ParamPred _ _ _ _) (Equals _ _) = LT
aFormOrder (StrPrec _ _) (RolePred _ _ _) = GT
aFormOrder (StrPrec _ _) (ParamPred _ _ _ _) = GT
aFormOrder (StrPrec _ _) (StrPrec _ _) = EQ
aFormOrder (StrPrec _ _) (Prec _ _) = LT
aFormOrder (StrPrec _ _) (Non _) = LT
aFormOrder (StrPrec _ _) (Pnon _) = LT
aFormOrder (StrPrec _ _) (Uniq _) = LT
aFormOrder (StrPrec _ _) (UniqAt _ _) = LT
aFormOrder (StrPrec _ _) (UgenAt _ _) = LT
aFormOrder (StrPrec _ _) (Ugen _) = LT
aFormOrder (StrPrec _ _) (Equals _ _) = LT
aFormOrder (Prec _ _) (RolePred _ _ _) = GT
aFormOrder (Prec _ _) (ParamPred _ _ _ _) = GT
aFormOrder (Prec _ _) (StrPrec _ _) = GT
aFormOrder (Prec _ _) (Prec _ _) = EQ
aFormOrder (Prec _ _) (Non _) = LT
aFormOrder (Prec _ _) (Pnon _) = LT
aFormOrder (Prec _ _) (Uniq _) = LT
aFormOrder (Prec _ _) (UniqAt _ _) = LT
aFormOrder (Prec _ _) (UgenAt _ _) = LT
aFormOrder (Prec _ _) (Ugen _) = LT
aFormOrder (Prec _ _) (Equals _ _) = LT
aFormOrder (Non _) (RolePred _ _ _) = GT
aFormOrder (Non _) (ParamPred _ _ _ _) = GT
aFormOrder (Non _) (StrPrec _ _) = GT
aFormOrder (Non _) (Prec _ _) = GT
aFormOrder (Non _) (Non _) = EQ
aFormOrder (Non _) (Pnon _) = LT
aFormOrder (Non _) (Uniq _) = LT
aFormOrder (Non _) (UniqAt _ _) = LT
aFormOrder (Non _) (UgenAt _ _) = LT
aFormOrder (Non _) (Ugen _) = LT
aFormOrder (Non _) (Equals _ _) = LT
aFormOrder (Pnon _) (RolePred _ _ _) = GT
aFormOrder (Pnon _) (ParamPred _ _ _ _) = GT
aFormOrder (Pnon _) (StrPrec _ _) = GT
aFormOrder (Pnon _) (Prec _ _) = GT
aFormOrder (Pnon _) (Non _) = GT
aFormOrder (Pnon _) (Pnon _) = EQ
aFormOrder (Pnon _) (Uniq _) = LT
aFormOrder (Pnon _) (UniqAt _ _) = LT
aFormOrder (Pnon _) (UgenAt _ _) = LT
aFormOrder (Pnon _) (Ugen _) = LT
aFormOrder (Pnon _) (Equals _ _) = LT
aFormOrder (Uniq _) (RolePred _ _ _) = GT
aFormOrder (Uniq _) (ParamPred _ _ _ _) = GT
aFormOrder (Uniq _) (StrPrec _ _) = GT
aFormOrder (Uniq _) (Prec _ _) = GT
aFormOrder (Uniq _) (Non _) = GT
aFormOrder (Uniq _) (Pnon _) = GT
aFormOrder (Uniq _) (Uniq _) = EQ
aFormOrder (Uniq _) (UniqAt _ _) = LT
aFormOrder (Uniq _) (UgenAt _ _) = LT
aFormOrder (Uniq _) (Ugen _) = LT
aFormOrder (Uniq _) (Equals _ _) = LT
aFormOrder (UniqAt _ _) (RolePred _ _ _) = GT
aFormOrder (UniqAt _ _) (ParamPred _ _ _ _) = GT
aFormOrder (UniqAt _ _) (StrPrec _ _) = GT
aFormOrder (UniqAt _ _) (Prec _ _) = GT
aFormOrder (UniqAt _ _) (Non _) = GT
aFormOrder (UniqAt _ _) (Pnon _) = GT
aFormOrder (UniqAt _ _) (Uniq _) = GT
aFormOrder (UniqAt _ _) (UniqAt _ _) = EQ
aFormOrder (UniqAt _ _) (UgenAt _ _) = LT
aFormOrder (UniqAt _ _) (Ugen _) = LT
aFormOrder (UniqAt _ _) (Equals _ _) = LT
aFormOrder (UgenAt _ _) (RolePred _ _ _) = GT
aFormOrder (UgenAt _ _) (ParamPred _ _ _ _) = GT
aFormOrder (UgenAt _ _) (StrPrec _ _) = GT
aFormOrder (UgenAt _ _) (Prec _ _) = GT
aFormOrder (UgenAt _ _) (Non _) = GT
aFormOrder (UgenAt _ _) (Pnon _) = GT
aFormOrder (UgenAt _ _) (Uniq _) = GT
aFormOrder (UgenAt _ _) (UniqAt _ _) = GT
aFormOrder (UgenAt _ _) (UgenAt _ _) = EQ
aFormOrder (UgenAt _ _) (Ugen _) = LT
aFormOrder (UgenAt _ _) (Equals _ _) = LT
aFormOrder (Ugen _) (RolePred _ _ _) = GT
aFormOrder (Ugen _) (ParamPred _ _ _ _) = GT
aFormOrder (Ugen _) (StrPrec _ _) = GT
aFormOrder (Ugen _) (Prec _ _) = GT
aFormOrder (Ugen _) (Non _) = GT
aFormOrder (Ugen _) (Pnon _) = GT
aFormOrder (Ugen _) (Uniq _) = GT
aFormOrder (Ugen _) (UniqAt _ _) = GT
aFormOrder (Ugen _) (UgenAt _ _) = GT
aFormOrder (Ugen _) (Ugen _) = EQ
aFormOrder (Ugen _) (Equals _ _) = LT
aFormOrder (Equals _ _) (RolePred _ _ _) = GT
aFormOrder (Equals _ _) (ParamPred _ _ _ _) = GT
aFormOrder (Equals _ _) (StrPrec _ _) = GT
aFormOrder (Equals _ _) (Prec _ _) = GT
aFormOrder (Equals _ _) (Non _) = GT
aFormOrder (Equals _ _) (Pnon _) = GT
aFormOrder (Equals _ _) (Uniq _) = GT
aFormOrder (Equals _ _) (UniqAt _ _) = GT
aFormOrder (Equals _ _) (UgenAt _ _) = GT
aFormOrder (Equals _ _) (Ugen _) = GT
aFormOrder (Equals _ _) (Equals _ _) = EQ