private CTLFormula(CTLFormula left, CTLFormula right, CTLOperator op, string atom) { this.Left = left; this.Right = right; this.Operator = op; this.Atomic = atom; }
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); }
/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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)); }
/// <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); }
/// <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); }