예제 #1
0
 private CTLFormula(CTLFormula left, CTLFormula right, CTLOperator op, string atom)
 {
     this.Left = left;
     this.Right = right;
     this.Operator = op;
     this.Atomic = atom;
 }
예제 #2
0
 private bool Equals(CTLFormula other)
 {
     if (ReferenceEquals (null, other))
         return false;
     if (ReferenceEquals (this, other))
         return true;
     return Equals (other.Left, this.Left) && Equals (other.Right, this.Right) &&
            Equals (other.Operator, this.Operator) && Equals (other.Atomic, this.Atomic);
 }
예제 #3
0
        /// <summary>
        ///   Возвращает формулу "NOT <paramref name = "formula" />".
        /// </summary>
        /// <param name = "formula">Операнд.</param>
        /// <exception cref = "ArgumentNullException"><paramref name = "formula" /> является <c>null</c>.</exception>
        /// <returns>Логическое "NOT" формулы.</returns>
        public static CTLFormula Not(CTLFormula formula)
        {
            if (formula == null)
                throw new ArgumentNullException ("formula");

            return new CTLFormula (formula, null, CTLOperator.LOGIC_NOT, null);
        }
예제 #4
0
        /// <summary>
        ///   Возвращает формулу "<paramref name = "left" /> OR <paramref name = "right" />".
        /// </summary>
        /// <param name = "left">Левый операнд.</param>
        /// <param name = "right">Правый операнд.</param>
        /// <exception cref = "ArgumentNullException"><paramref name = "left" /> является <c>null</c>.</exception>
        /// <exception cref = "ArgumentNullException"><paramref name = "right" /> является <c>null</c>.</exception>
        /// <returns>Логическое "OR" двух формул.</returns>
        public static CTLFormula Or(CTLFormula left, CTLFormula right)
        {
            if (left == null)
                throw new ArgumentNullException ("left");

            if (right == null)
                throw new ArgumentNullException ("right");

            return new CTLFormula (left, right, CTLOperator.LOGIC_OR, null);
        }
예제 #5
0
 /// <summary>
 ///   Возвращает формулу "E[<paramref name = "left" /> R <paramref name = "right" />]".
 /// </summary>
 /// <remarks>
 ///   Темпоральная формула "E[f R g]" будет представлена в виде "NOT A[(NOT f) U (NOT g)]".
 /// </remarks>
 /// <param name = "left">Левый операнд.</param>
 /// <param name = "right">Правый операнд.</param>
 /// <exception cref = "ArgumentNullException"><paramref name = "left" /> является <c>null</c>.</exception>
 /// <exception cref = "ArgumentNullException"><paramref name = "right" /> является <c>null</c>.</exception>
 /// <seealso cref = "AU" />
 /// <seealso cref = "Not" />
 /// <returns>Темпоральное "ER" двух формул.</returns>
 public static CTLFormula ER(CTLFormula left, CTLFormula right)
 {
     return !AU (!left, !right);
 }
예제 #6
0
        /// <summary>
        ///   Возвращает формулу "EX <paramref name = "formula" />".
        /// </summary>
        /// <param name = "formula">Операнд.</param>
        /// <exception cref = "ArgumentNullException"><paramref name = "formula" /> является <c>null</c>.</exception>
        /// <returns>Темпоральное "EX" формулы.</returns>
        public static CTLFormula EX(CTLFormula formula)
        {
            if (formula == null)
                throw new ArgumentNullException ("formula");

            return new CTLFormula (formula, null, CTLOperator.CTL_EX, null);
        }
예제 #7
0
 /// <summary>
 ///   Возвращает формулу "EF <paramref name = "formula" />".
 /// </summary>
 /// <remarks>
 ///   Темпоральная формула "EF f" будет представлена в виде "TRUE EU f".
 /// </remarks>
 /// <param name = "formula">Операнд.</param>
 /// <exception cref = "ArgumentNullException"><paramref name = "formula" /> является <c>null</c>.</exception>
 /// <seealso cref = "EU" />
 /// <seealso cref = "TRUE" />
 /// <returns>Темпоральное "EF" формулы.</returns>
 public static CTLFormula EF(CTLFormula formula)
 {
     return EU (TRUE, formula);
 }
예제 #8
0
 /// <summary>
 ///   Возвращает формулу "AX <paramref name = "formula" />".
 /// </summary>
 /// <remarks>
 ///   Темпоральная формула "AX f" будет представлена в виде "NOT (EX (NOT f))".
 /// </remarks>
 /// <param name = "formula">Операнд.</param>
 /// <exception cref = "ArgumentNullException"><paramref name = "formula" /> является <c>null</c>.</exception>
 /// <seealso cref = "EX" />
 /// <seealso cref = "Not" />
 /// <returns>Темпоральное "AX" формулы.</returns>
 public static CTLFormula AX(CTLFormula formula)
 {
     return !EX (!formula);
 }
예제 #9
0
 /// <summary>
 ///   Возвращает формулу "A[<paramref name = "left" /> U <paramref name = "right" />]".
 /// </summary>
 /// <remarks>
 ///   Темпоральная формула "A[f U g]" будет представлена в виде "(NOT E[(NOT f) U ((NOT f) AND (NOT g))]) AND (NOT (EG (NOT g)))".
 /// </remarks>
 /// <param name = "left">Левый операнд.</param>
 /// <param name = "right">Правый операнд.</param>
 /// <exception cref = "ArgumentNullException"><paramref name = "left" /> является <c>null</c>.</exception>
 /// <exception cref = "ArgumentNullException"><paramref name = "right" /> является <c>null</c>.</exception>
 /// <seealso cref = "EU" />
 /// <seealso cref = "EG" />
 /// <seealso cref = "Not" />
 /// <seealso cref = "And" />
 /// <returns>Темпоральное "AU" двух формул.</returns>
 public static CTLFormula AU(CTLFormula left, CTLFormula right)
 {
     return (!EU (!right, (!left) & (!right))) & (!EG (!right));
 }
예제 #10
0
 /// <summary>
 ///   Возвращает формулу "AG <paramref name = "formula" />".
 /// </summary>
 /// <remarks>
 ///   Темпоральная формула "AG f" будет представлена в виде "NOT (EF (NOT f))".
 /// </remarks>
 /// <param name = "formula">Операнд.</param>
 /// <exception cref = "ArgumentNullException"><paramref name = "formula" /> является <c>null</c>.</exception>
 /// <seealso cref = "EF" />
 /// <seealso cref = "Not" />
 /// <returns>Темпоральное "AG" формулы.</returns>
 public static CTLFormula AG(CTLFormula formula)
 {
     return !EF (!formula);
 }
예제 #11
0
 /// <summary>
 ///   Возвращает формулу "AF <paramref name = "formula" />".
 /// </summary>
 /// <remarks>
 ///   Темпоральная формула "AF f" будет представлена в виде "NOT (EG (NOT f))".
 /// </remarks>
 /// <param name = "formula">Операнд.</param>
 /// <exception cref = "ArgumentNullException"><paramref name = "formula" /> является <c>null</c>.</exception>
 /// <seealso cref = "EG" />
 /// <seealso cref = "Not" />
 /// <returns>Темпоральное "AF" формулы.</returns>
 public static CTLFormula AF(CTLFormula formula)
 {
     return !EG (!formula);
 }