private LTLFormula(LTLFormula left, LTLFormula right, LTLOperator op, string atom) { this.Left = left; this.Right = right; this.Operator = op; this.Atomic = atom; }
private bool Equals(LTLFormula 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> /// Возвращает формулу "X <paramref name = "formula" />". /// </summary> /// <param name = "formula">Операнд.</param> /// <exception cref = "ArgumentNullException"><paramref name = "formula" /> является <c>null</c>.</exception> /// <returns>Темпоральный "сдвиг по времени" формулы.</returns> public static LTLFormula X(LTLFormula formula) { if (formula == null) throw new ArgumentNullException ("formula"); return new LTLFormula (formula, null, LTLOperator.LTL_X, null); }
/// <summary> /// Возвращает формулу "<paramref name = "left" /> U <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>Темпоральное "условное ожидание" формул.</returns> public static LTLFormula U(LTLFormula left, LTLFormula right) { if (left == null) throw new ArgumentNullException ("left"); if (right == null) throw new ArgumentNullException ("right"); return new LTLFormula (left, right, LTLOperator.LTL_U, null); }
/// <summary> /// Возвращает формулу "<paramref name = "left" /> R <paramref name = "right" />". /// </summary> /// <remarks> /// Темпоральная формула "f R g" будет представлена в виде "NOT ((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> /// <see cref = "U" /> /// <see cref = "Not" /> /// <returns>Темпоральная "разблокировка" формул.</returns> public static LTLFormula R(LTLFormula left, LTLFormula right) { return !(U (!left, !right)); }
/// <summary> /// Возвращает формулу "G <paramref name = "formula" />". /// </summary> /// <remarks> /// Темпоральная формула "G f" будет представлена в виде "NOT (F (NOT f))". /// </remarks> /// <param name = "formula">Операнд.</param> /// <exception cref = "ArgumentNullException"><paramref name = "formula" /> является <c>null</c>.</exception> /// <see cref = "F" /> /// <see cref = "Not" /> /// <returns>Темпоральный "оператор инвариантности" формулы.</returns> public static LTLFormula G(LTLFormula formula) { return !F (!formula); }
/// <summary> /// Возвращает формулу "F <paramref name = "formula" />". /// </summary> /// <remarks> /// Темпоральная формула "F f" будет представлена в виде "TRUE U f". /// </remarks> /// <param name = "formula">Операнд.</param> /// <exception cref = "ArgumentNullException"><paramref name = "formula" /> является <c>null</c>.</exception> /// <seealso cref = "U" /> /// <seealso cref = "TRUE" /> /// <returns>Темпоральный "оператор происшествия" формулы.</returns> public static LTLFormula F(LTLFormula formula) { return U (TRUE, formula); }