Skip to content
Snippets Groups Projects

List of Tactics

In effort to make it easier for new users to get started with the Prosa project, the idea is to maintain a list of the tactics used in the project in this file.

Each tactic should be named and briefly described (just a few sentences). Please add links to additional documentation elsewhere (if available).

Tactics from VBase

Tactics taken from the standard library of Viktor Vafeiadis.

  • ins: combination of intros, simpl and eauto. Some trivial proofs follow from by ins.

  • exploit H: When applied to a hypothesis/lemma H, converts pre-conditions into goals in order to infer the post-condition of H, which is then added to the local context.

  • feed H: Same as exploit, but only generates a goal for the first pre-condition. That is, applying exploit to H: P1 -> P2 -> P3 produces H: P2 -> P3 and converts P1 into a goal. This is useful for cleaning up induction hypotheses.

  • feed_n k H: Same as feed, but generates goals up to the k-th pre-condition.

  • specialize (H x1 x2 x3): instantiates hypothesis H in place with values x1, x2, and x3.

To be continued… please help out.

Tactics from ssreflect

  • have y := f x1 x2 x3: creates an alias to f x1 x2 x3 called y (in the local context). Note that f can be a function or a proposition/lemma. It's usually easier to read than move: (f x1 x2 x3) => y.

To be continued… please help out.

Standard Coq Tactics

Generally speaking, in new code, prefer ssreflect tactics over standard Coq tactics whenever possible. While the current code base is a mix of classic Coq tactics and ssreflect tactics, that's only a historical accident not worth emulating.

  • lia: Solves arithmetic goals, including ones with ssreflect's definitions (thanks to the coq-mathcomp-zify dependency).

To be continued… please help out.

PROSA Tactics

  • move_neq_down H: moves inequality H : t1 <= t2 (or H : t1 < t2) from the context into goals as t1 > t2 (or t1 >= t2)
  • move_neq_up H: the reverse operation that moves inequality t1 <= t2 (or t1 < t2) from goals into the context as H : t1 > t2 (or H : t1 >= t2)
  • interval_to_duration t1 t2 k: any interval [t1, t2] can be represented as [t1, t1 + k] for some natural number k. This tactic searches for inequality t1 <= t2 (or t1 < t2) in the context and replaces t2 with t1 + k. Note: k is the name of a newly created natural number.
  • rt_auto: equivalent to auto with basic_rt_facts
  • rt_eauto: equivalent to eauto with basic_rt_facts