The user can select a hypothesis $H$, and change the goal to $\neg H$:

...

...

@@ -303,6 +305,9 @@ $$\TACTIC{\Delta\models\,G}{%

\Delta,\neg C \models G

\end{array}}$$

\paragraph{Definition} Unfold predicate and logic function definition\\

The user simply select a term $f(e_1,\ldots,e_n)$ or a predicate $P(e_1,\ldots,e_n)$ which is replaced by its definition, when available.

\paragraph{Filter} Erase Hypotheses \\

The tactic is always applicable. It removes hypotheses from the goal on a variable used basis. When variables are compounds (record and arrays) a finer heuristics is used to detect which parts of the variable is relevant. A transitive closure of dependencies is also used. However, it is always possible that too many hypotheses are removed.

The user start by selecting a term in the goal. Then, the search button in the tactic panel will display a list of lemma related to the term. Then, he can instantiate the parameters of the lemma, like with the Instance tactic.

\paragraph{Intuition} Decompose with Conjunctive/Disjunctive Normal Form\\

The user can select a hypothesis or a goal with nested conjunctions and disjunctions. The tactics then computes the conjunctive or disjunctive normal form of the selection and split the goal accordingly.

\paragraph{Range} Enumerate a range of values for an integer term\\

The user select any integer expression $e$ in the proof, and a range of numerical values $a\ldots b$. The proof goes by case for each $e=a\ldots e=b$, plus the side cases $e<a$ and $e>b$:

$$\TACTIC{\Delta\models\,G}{%

\begin{array}[t]{ll}

\Delta,e<a &\models G \\

\Delta,e=a &\models G \\

&\vdots\\

\Delta,e=b &\models G \\

\Delta,e>b &\models G

\end{array}}$$

\paragraph{Lemma} Search \& Instantiate Lemma\\

The user start by selecting a term in the goal. Then, the search button in the tactic panel will display a list of lemma related to the term. Then, he can instantiate the parameters of the lemma, like with the Instance tactic.

\paragraph{Rewrite} Replace Terms\\

This tactic uses an equality in a hypothesis to replace each occurrence of term by another one.

...

...

@@ -384,49 +378,7 @@ Finally, when the user select a arithmetic comparison over $a$ and $b$, the tact

\Delta,a>b&\models G

\end{array}}\]

\paragraph{Definition} Unfold predicate and logic function definition\\

The user simply select a term $f(e_1,\ldots,e_n)$ or a predicate $P(e_1,\ldots,e_n)$ which is replaced by its definition, when available.

\paragraph{Bitwise} Decompose equalities over $N$-bits\\

The use selects an integer equality and a number of bits.

Providing the two members of the equality are in range $0..2^N-1$,

the equality is decomposed into $N$ bit-tests equalities:

This tactic rewrites machine integer conversions by identify,

This tactic rewrites machine integer conversions by identity,

providing the converted value is in available range. The tactic applies on expression

with pattern $\mathtt{to\_iota(e)}$ where \texttt{iota} is a a machine-integer name,

\emph{eg.}\texttt{to\_uint32}.

...

...

@@ -485,6 +459,36 @@ with pattern $\mathtt{to\_iota(e)}$ where \texttt{iota} is a a machine-integer n

where $\sigma=[\mathtt{to\_iota}(e)\mapsto e ]$ and $[a..b]$ is the range

of the \texttt{iota} integer domain.

\paragraph{Range} Enumerate a range of values for an integer term\\

The user select any integer expression $e$ in the proof, and a range of numerical values $a\ldots b$. The proof goes by case for each $e=a\ldots e=b$, plus the side cases $e<a$ and $e>b$:

$$\TACTIC{\Delta\models\,G}{%

\begin{array}[t]{ll}

\Delta,e<a &\models G \\

\Delta,e=a &\models G \\

&\vdots\\

\Delta,e=b &\models G \\

\Delta,e>b &\models G

\end{array}}$$

\paragraph{Shift} Transform logical shifts into arithmetics\\

For positive integers, logical shifts such as \lstinline{a << k}

and \lstinline{a >> k} where \lstinline$k$ is a constant can be interpreted into a multiplication or a division by $2^k$.

When selecting a logical-shift, the tactic performs:

\[\TACTIC{\Delta\models G}{%

\begin{array}[t]{rcl}

\Delta\phantom{)}&\models&0\leq a \\

\sigma(\Delta)&\models&\sigma(G)

\end{array}

}\]

where:

\begin{tabular}[t]{ll}

$\sigma=[\mathtt{lsl}(a,k)\leftarrow a *2^k ]$&

for left-shift, \\

$\sigma=[\mathtt{lsr}(a,k)\leftarrow a /2^k ]$&

for right-shifts.

\end{tabular}

\subsection{Strategies}

Strategies are heuristics that generate a prioritized bunch of tactics to be tried on the current goal.