/// <summary> /// Create a probe that evaluates to "true" when the value returned by <paramref name="p1"/> /// is less than the value returned by <paramref name="p2"/> /// </summary> public Probe Lt(Probe p1, Probe p2) { Contract.Requires(p1 != null); Contract.Requires(p2 != null); Contract.Ensures(Contract.Result<Probe>() != null); CheckContextMatch(p1); CheckContextMatch(p2); return new Probe(this, Native.Z3_probe_lt(nCtx, p1.NativeObject, p2.NativeObject)); }
/// <summary> /// Create a tactic that fails if the probe <paramref name="p"/> evaluates to false. /// </summary> public Tactic FailIf(Probe p) { Contract.Requires(p != null); Contract.Ensures(Contract.Result<Tactic>() != null); CheckContextMatch(p); return new Tactic(this, Native.Z3_tactic_fail_if(nCtx, p.NativeObject)); }
/// <summary> /// Create a tactic that applies <paramref name="t"/> to a given goal if the probe /// <paramref name="p"/> evaluates to true. /// </summary> /// <remarks> /// If <paramref name="p"/> evaluates to false, then the new tactic behaves like the <c>skip</c> tactic. /// </remarks> public Tactic When(Probe p, Tactic t) { Contract.Requires(p != null); Contract.Requires(t != null); Contract.Ensures(Contract.Result<Tactic>() != null); CheckContextMatch(t); CheckContextMatch(p); return new Tactic(this, Native.Z3_tactic_when(nCtx, p.NativeObject, t.NativeObject)); }
/// <summary> /// Create a tactic that applies <paramref name="t1"/> to a given goal if the probe /// <paramref name="p"/> evaluates to true and <paramref name="t2"/> otherwise. /// </summary> public Tactic Cond(Probe p, Tactic t1, Tactic t2) { Contract.Requires(p != null); Contract.Requires(t1 != null); Contract.Requires(t2 != null); Contract.Ensures(Contract.Result<Tactic>() != null); CheckContextMatch(p); CheckContextMatch(t1); CheckContextMatch(t2); return new Tactic(this, Native.Z3_tactic_cond(nCtx, p.NativeObject, t1.NativeObject, t2.NativeObject)); }
/// <summary> /// Create a probe that evaluates to "true" when the value <paramref name="p"/> /// does not evaluate to "true". /// </summary> public Probe Not(Probe p) { Contract.Requires(p != null); Contract.Ensures(Contract.Result<Probe>() != null); CheckContextMatch(p); return new Probe(this, Native.Z3_probe_not(nCtx, p.NativeObject)); }