Header menu logo F# Header menu logo Averest

ProofTactics Module

This module provides a framework for the interactive verification of Quartz modules. To use it, you first need to create a ProofContext by loading a Quartz module using one of the functions LoadModuleFromStream, LoadModuleFromString, or LoadModuleFromFile. You can then set a new proof goal \(\Gamma\vdash\varphi\) with a formula \(\varphi\) that must be derived from the given assumptions \(\Gamma\) using the function SetNewGoal. You must also specify a name for the proof goal which will become the name of the theorem once the proof goal has been proved. The proof goal created by function SetNewGoal is then the root goal of the subgoals that are generated during its proof. Proving a goal involves applying a sequence of tactics, each of which reduces the current proof goal to a list of subgoals. This extends the proof tree by adding the generated subgoals as child nodes of the current proof goal. The leftmost child node becomes then the new current proof goal. If a tactic does not generate new subgoals, the current proof goal is closed (proven), and the next open proof goal of the same root goal is considered as the new current proof goal. If there are no further open proof goals, the root goal becomes a theorem which can then be accessed with its name in other proofs. Functions PrintCurrGoal, PrintGoalNodes, PrintTheorems, and PrintCurrRootGoal can be used to print parts of the proof tree that is otherwise hidden from the user.

Functions and values

Function or value Description

AcceptTac ()

Full Usage: AcceptTac ()

Parameters:
    () : unit

AcceptTac should never be used. It will just accept the current proof goal and will then put the next subgoal of the current proof on the goal stack or if there is none, it will convert the root proof goal to a theorem (without having proved it). Just use this tactic for preliminary putting a proof goal aside that should then be proved later.

() : unit

AsmConjTac i ()

Full Usage: AsmConjTac i ()

Parameters:
    i : int
    () : unit

AsmConjTac destructs a conjunction in the assumptions: \[ \begin{array}{c} \gamma_0,\ldots,\gamma_{i-1},\varphi\wedge\psi,\gamma_{i+1},\ldots,\gamma_{n-1}\vdash\Phi \\\hline \gamma_0,\ldots,\gamma_{i-1},\varphi,\psi,\gamma_{i+1},\ldots,\gamma_{n-1}\vdash\Phi \end{array} \]

i : int
() : unit

AsmDisjTac i ()

Full Usage: AsmDisjTac i ()

Parameters:
    i : int
    () : unit

AsmDisjTac makes a case split on a disjunction in the assumptions: \[ \begin{array}{c} \gamma_0,\ldots,\gamma_{i-1},\varphi\vee\psi,\gamma_{i+1},\ldots,\gamma_{n-1}\vdash\Phi \\\hline \gamma_0,\ldots,\gamma_{i-1},\varphi,\gamma_{i+1},\ldots,\gamma_{n-1}\vdash\Phi \hspace{5mm} \gamma_0,\ldots,\gamma_{i-1},\psi,\gamma_{i+1},\ldots,\gamma_{n-1}\vdash\Phi \end{array} \]

i : int
() : unit

AsmDropListTac iL ()

Full Usage: AsmDropListTac iL ()

Parameters:
    iL : int list
    () : unit

AsmDropListTac removes the list of assumptions by repeatedly applying AsmDropTac.

iL : int list
() : unit

AsmDropTac i ()

Full Usage: AsmDropTac i ()

Parameters:
    i : int
    () : unit

AsmDropTac removes the assumption with the given index. \[ \begin{array}{c} \gamma_0,\ldots,\gamma_{n-1}\vdash\varphi \\\hline \gamma_0,\ldots,\gamma_{i-1},\gamma_{i+1},\ldots,\gamma_{n-1}\vdash\varphi \end{array} \]

i : int
() : unit

AsmInstNextTac nxt i ()

Full Usage: AsmInstNextTac nxt i ()

Parameters:
    nxt : int
    i : int
    () : unit

AsmInstNextTac takes the chosen assumption that must be of the form G phi and will add the new assumption phi derived from it using nxt next operators. \[ \begin{array}{c} \gamma_0,\ldots,\gamma_{i-1},\mathsf{G}\psi,\gamma_{i+1},\ldots,\gamma_{n-1}\vdash\varphi \\\hline \mathsf{X}^{nxt}\psi,\gamma_0,\ldots,\gamma_{i-1},\mathsf{G}\psi,\gamma_{i+1},\ldots,\gamma_{n-1}\vdash\varphi \end{array} \]

nxt : int
i : int
() : unit

AsmInstTac i ()

Full Usage: AsmInstTac i ()

Parameters:
    i : int
    () : unit

AsmInstTac takes the chosen assumption that must be of the form AG phi and will add the new assumption phi derived from it. \[ \begin{array}{c} \gamma_0,\ldots,\gamma_{i-1},\mathsf{G}\psi,\gamma_{i+1},\ldots,\gamma_{n-1}\vdash\varphi \\\hline \psi,\gamma_0,\ldots,\gamma_{i-1},\mathsf{G}\psi,\gamma_{i+1},\ldots,\gamma_{n-1}\vdash\varphi \end{array} \]

i : int
() : unit

AsmMpTac i ()

Full Usage: AsmMpTac i ()

Parameters:
    i : int
    () : unit

AsmMpTac takes the chosen assumption that must be an implication, and applies the modus ponens to reduce the proof goal: \[ \begin{array}{c} \psi\to\varphi,\Gamma\vdash\varphi \\\hline \Gamma\vdash\psi \end{array} \]

i : int
() : unit

AsmRewriteTac ()

Full Usage: AsmRewriteTac ()

Parameters:
    () : unit

AsmRewriteTac scans the assumptions for literals (possibly negated variables) and replaces them in the goal by either true or false

() : unit

AsmSplitTac ()

Full Usage: AsmSplitTac ()

Parameters:
    () : unit

AsmSplitTac converts all assumptions into DNF and makes then case splits on all cubes of the DNF, where also the atoms of each cube are split into single assumptions.

() : unit

AssumeInstThmTac thm ()

Full Usage: AssumeInstThmTac thm ()

Parameters:
    thm : string
    () : unit

AssumeInstThmTac similar to AssumeThmTac, this tactic also adds an already proved theorem to the assumptions of the goal. However, this tactic can be applied to a non-initial goal provided that the theorem is a safety property which is instantiated accordingly.

thm : string
() : unit

AssumeNextInstThmTac thm ()

Full Usage: AssumeNextInstThmTac thm ()

Parameters:
    thm : string
    () : unit

AssumeNextInstThmTac is similar to AssumeInstThmTac, this tactic also adds an already proved theorem to the assumptions of the goal. However, this tactic can be applied to a non-initial goal provided that the theorem is a safety property which is instantiated accordingly.

thm : string
() : unit

AssumeThmTac thm ()

Full Usage: AssumeThmTac thm ()

Parameters:
    thm : string
    () : unit

AssumeThmTac converts the theorem with the specified name to an implication that is added to the assumptions. Since all theorems refer to the initial point of time, this tactic can only be applied to initial goals.

thm : string
() : unit

AxiomTac ()

Full Usage: AxiomTac ()

Parameters:
    () : unit

AxiomTac checks whether the conclusion also occurs in the assumptions and if so, this subgoal is proven, and otherwise, it fails.

() : unit

BoolCasesTac psi ()

Full Usage: BoolCasesTac psi ()

Parameters:

BoolCasesTac makes a case distinction on the given boolean expression: \[ \begin{array}{c} \Gamma\vdash\varphi \\\hline \neg\psi,\Gamma\vdash\varphi \hspace{5mm} \psi,\Gamma\vdash\varphi \end{array} \]

psi : SpecExpr
() : unit

BoolListCasesTac psiL ()

Full Usage: BoolListCasesTac psiL ()

Parameters:

BoolListCasesTac makes a case distinction on the given list of boolean expressions. Since an exponential number of subgoals is generated, this tactic must be used with care, i.e., with small lists of expressions.

psiL : SpecExpr list
() : unit

BootTac ()

Full Usage: BootTac ()

Parameters:
    () : unit

BootTac replaces all control-flow labels and variables with their initial values provided that the goal is an initial goal. Note that this tactic can only be applied to initial goals.

() : unit

ConjLeftTac ()

Full Usage: ConjLeftTac ()

Parameters:
    () : unit

ConjLeftTac splits a conjunction into two subgoals: \[ \begin{array}{c} \Gamma\vdash\varphi\wedge\psi \\ \hline \Gamma\vdash\varphi \hspace{5mm} \varphi,\Gamma\vdash\psi \end{array} \]

() : unit

ConjRightTac ()

Full Usage: ConjRightTac ()

Parameters:
    () : unit

ConjRightTac splits a conjunction into two subgoals: \[ \begin{array}{c} \Gamma\vdash\varphi\wedge\psi \\ \hline \Gamma\vdash\psi \hspace{5mm} \psi,\Gamma\vdash\varphi \end{array} \]

() : unit

ConjTac ()

Full Usage: ConjTac ()

Parameters:
    () : unit

ConjTac splits a conjunction into two subgoals: \[ \begin{array}{c} \Gamma\vdash\varphi\wedge\psi \\ \hline \Gamma\vdash\varphi \hspace{5mm} \Gamma\vdash\psi \end{array} \]

() : unit

ContraposTac ()

Full Usage: ContraposTac ()

Parameters:
    () : unit

ContraposTac applies the law of contraposition \[ \begin{array}{c} \Gamma\vdash\varphi\to\psi \\ \hline \Gamma\vdash\neg\psi\to\neg\varphi \end{array} \]

() : unit

CutTac psi ()

Full Usage: CutTac psi ()

Parameters:

CutTac implements the well-known cut rule of sequent calculus. It can be understood as a tactic that first proves the given property as a lemma that is then used as an assumption to prove the current goal. \[ \begin{array}{c} \Gamma\vdash \varphi \\ \hline \Gamma\vdash \psi \hspace{5mm} \psi,\Gamma\vdash\varphi \end{array} \]

psi : SpecExpr
() : unit

DischTac ()

Full Usage: DischTac ()

Parameters:
    () : unit

DischTac discharges an implication: \[ \begin{array}{c} \Gamma\vdash\varphi\to\psi \\ \hline \varphi,\Gamma\vdash\psi \end{array} \] It also works for negations (viewing them as implications): \[ \begin{array}{c} \Gamma\vdash\neg\varphi \\ \hline \varphi,\Gamma\vdash\mathsf{false} \end{array} \]

() : unit

DisjLeftTac ()

Full Usage: DisjLeftTac ()

Parameters:
    () : unit

This tactic reduces a disjunction to its left part while using the negation of its right part as a further assumption: \[ \begin{array}{c} \Gamma\vdash\varphi\vee\psi\\\hline \neg\psi,\Gamma\vdash\varphi \end{array} \]

() : unit

DisjRightTac ()

Full Usage: DisjRightTac ()

Parameters:
    () : unit

This tactic reduces a disjunction to its right part while using the negation of its left part as a further assumption: \[ \begin{array}{c} \Gamma\vdash\varphi\vee\psi\\\hline \neg\varphi,\Gamma\vdash\psi \end{array} \]

() : unit

ExpandAllEquTac ()

Full Usage: ExpandAllEquTac ()

Parameters:
    () : unit

expand the current goal with the next assignments followed by repeated expansions with the now assignments until there are no further changes (caution: this may not terminate in case of causality conflicts)

() : unit

ExpandAllNowEquTac ()

Full Usage: ExpandAllNowEquTac ()

Parameters:
    () : unit

expand the current goal with the immediate assignments of the system, i.e., with the abbreviations and the immediate assignments of the dataflow

() : unit

ExpandAllNxtEquTac ()

Full Usage: ExpandAllNxtEquTac ()

Parameters:
    () : unit

expand the current goal with the next assignments of the system, using the next assignments of the control- and dataflow

() : unit

ExpandNowEquTac vName ()

Full Usage: ExpandNowEquTac vName ()

Parameters:
    vName : string
    () : unit

expand the current goal with the immediate assignment whose name of the left hand side variable is given as argument

vName : string
() : unit

ExpandNxtEquTac vName ()

Full Usage: ExpandNxtEquTac vName ()

Parameters:
    vName : string
    () : unit

expand the current goal with the next assignments of the system, using the next assignments of the control- and dataflow

vName : string
() : unit

FairnessTac ()

Full Usage: FairnessTac ()

Parameters:
    () : unit

FairnessTac applies induction for proving fairness properties: \[ \begin{array}{c} \Gamma\vdash\mathsf{GF}\varphi\\ \hline \Gamma\vdash\mathsf{F}\varphi \hspace{5mm} \Gamma\vdash\mathsf{G}(\varphi\to\mathsf{XF}\varphi) \end{array} \]

() : unit

GenTac ()

Full Usage: GenTac ()

Parameters:
    () : unit

GenTac removes universal path and time quantification which converts an initial goal to a universal goal: \[ \begin{array}{cc} \begin{array}{c} \Gamma\vdash \mathsf{A}\varphi\\ \hline \Gamma\vdash \varphi \end{array} & \begin{array}{c} \Gamma\vdash \mathsf{G}\varphi\\ \hline \Gamma\vdash \varphi \end{array} \end{array} \] Note that assumptions which refer to the current point of time have to be removed by this tactic.

() : unit

IffTac ()

Full Usage: IffTac ()

Parameters:
    () : unit

IffTac replaces an equivalence to two implications: \[ \begin{array}{c} \Gamma\vdash \varphi\leftrightarrow\psi \\ \hline \Gamma\vdash\varphi\to\psi \hspace{5mm} \Gamma\vdash\psi\to\varphi \end{array} \]

() : unit

ImpResTac ()

Full Usage: ImpResTac ()

Parameters:
    () : unit

ImpResTac searches for implications and equivalences in the assumptions and derives new assumptions as follows: \[ \begin{array}{cc} \begin{array}{c} \varphi,\varphi\to\psi,\Gamma\vdash\gamma \\\hline \varphi,\psi,\Gamma\vdash\gamma \end{array} & \begin{array}{c} \varphi,\varphi\leftrightarrow\psi,\Gamma\vdash\gamma \\\hline \varphi,\psi,\Gamma\vdash\gamma \end{array} \end{array} \]

() : unit

InductInvTac chi ()

Full Usage: InductInvTac chi ()

Parameters:

InductInvTac applies temporal induction using an induction lemma \(\chi\): \[ \begin{array}{c} \Gamma\vdash \mathsf{G}\varphi \\ \hline \Gamma\vdash \chi \hspace{5mm} \Gamma\vdash \mathsf{G}(\chi\to\varphi\wedge\mathsf{X}\chi) \end{array} \]

chi : SpecExpr
() : unit

InductTac ()

Full Usage: InductTac ()

Parameters:
    () : unit

InductTac applies temporal induction \[ \begin{array}{c} \Gamma\vdash \mathsf{G}\varphi \\ \hline \Gamma\vdash \varphi \hspace{5mm} \Gamma\vdash \mathsf{G}(\varphi\to\mathsf{X}\varphi) \end{array} \]

() : unit

InductWeakBeforeInvTac chi ()

Full Usage: InductWeakBeforeInvTac chi ()

Parameters:

InductWeakBeforeInvTac implements induction for a Weak-Before formula using an induction lemma \(\chi\): \[ \begin{array}{c} \Gamma\vdash [\varphi\;\mathsf{B}\;\psi] \\ \hline \Gamma\vdash\chi\hspace{5mm} \Gamma\vdash\mathsf{G}((\varphi\to\psi)\wedge\chi\to\neg\psi\wedge\mathsf{X}\chi) \end{array} \] The rule is correct and complete, i.e., we can always find a suitable invariant \(\chi\) to prove the goal. Moreover, note that \((\varphi\to\psi)\wedge\chi\to\neg\psi\wedge\mathsf{X}\chi\) is equivalent to \(\chi\to\neg\psi\wedge(\varphi\vee\mathsf{X}\chi)\) which is used in the translation to \(\omega\)-automata.

chi : SpecExpr
() : unit

InductWeakBeforeTac ()

Full Usage: InductWeakBeforeTac ()

Parameters:
    () : unit

InductWeakBeforeTac implements induction for a Weak-Before formula using invariant \(\chi := \neg\psi\) in InductWeakBeforeInvTac: \[ \begin{array}{c} \Gamma\vdash [\varphi\;\mathsf{B}\;\psi] \\ \hline \Gamma\vdash\neg\psi\hspace{5mm} \Gamma\vdash\mathsf{G}(\neg\varphi\wedge\neg\psi\to\mathsf{X}\neg\psi) \end{array} \] Note that the subgoals imply the root goal, but not vice versa!

() : unit

InductWeakUntilInvTac chi ()

Full Usage: InductWeakUntilInvTac chi ()

Parameters:

InductWeakUntilInvTac implements induction for a Weak-Until formula using an induction lemma \(\chi\): \[ \begin{array}{c} \Gamma\vdash [\varphi\;\mathsf{U}\;\psi] \\ \hline \Gamma\vdash\chi\hspace{5mm} \Gamma\vdash\mathsf{G}(\neg\psi\wedge\chi\to\varphi\wedge\mathsf{X}\chi) \end{array} \] The rule is correct and complete, i.e., we can always find a suitable invariant \(\chi\) to prove the goal. Moreover, note that \(\neg\psi\wedge\chi\to\varphi\wedge\mathsf{X}\chi\) is equivalent to \(\chi\to\psi\vee\varphi\wedge\mathsf{X}\chi\) which is used in the translation to \(\omega\)-automata.

chi : SpecExpr
() : unit

InductWeakUntilTac ()

Full Usage: InductWeakUntilTac ()

Parameters:
    () : unit

InductWeakUntilTac implements induction for a Weak-Until formula using invariant \(\chi := \varphi\vee\psi\) in InductWeakUntilInvTac: \[ \begin{array}{c} \Gamma\vdash [\varphi\;\mathsf{U}\;\psi] \\ \hline \Gamma\vdash\varphi\vee\psi\hspace{5mm} \Gamma\vdash\mathsf{G}(\varphi\wedge\neg\psi\to\mathsf{X}(\varphi\vee\psi)) \end{array} \] Note that the subgoals imply the root goal, but not vice versa since the \([\varphi\;\mathsf{U}\;\psi]\) may be satisfied by a prefix of a path while the induction step must always hold: If \(\psi\) holds first, then also \([\varphi\;\mathsf{U}\;\psi]\) holds, but if afterwards, we have \(\varphi\wedge\neg\psi\) and after that \(\neg\varphi\wedge\neg\psi\), then the induction step fails.

() : unit

InductWeakWhenInvTac chi ()

Full Usage: InductWeakWhenInvTac chi ()

Parameters:

InductWeakWhenInvTac implements induction for a Weak-When formula using an induction lemma \(\chi\): \[ \begin{array}{c} \Gamma\vdash [\varphi\;\mathsf{W}\;\psi] \\ \hline \Gamma\vdash\chi\hspace{5mm} \Gamma\vdash\mathsf{G}(\neg(\varphi\wedge\psi)\wedge\chi\to\neg\psi\wedge\mathsf{X}\chi) \end{array} \] The rule is correct and complete, i.e., we can always find a suitable invariant \(\chi\) to prove the goal. Moreover, note that \(\neg(\varphi\wedge\psi)\wedge\chi\to\neg\psi\wedge\mathsf{X}\chi\) is equivalent to \(\chi\to(\psi\to\varphi)\wedge(\neg\psi\to\mathsf{X}\chi)\) and also equivalent to \(\chi\to \varphi\wedge\psi \vee \neg\psi\wedge\mathsf{X}\chi\) which are used in the translation to \(\omega\)-automata.

chi : SpecExpr
() : unit

InductWeakWhenTac ()

Full Usage: InductWeakWhenTac ()

Parameters:
    () : unit

InductWeakWhenTac implements induction for a Weak-When formula using invariant \(\chi := \psi\to\varphi\) in InductWeakWhenInvTac: \[ \begin{array}{c} \Gamma\vdash [\varphi\;\mathsf{W}\;\psi] \\ \hline \Gamma\vdash\psi\to\varphi\hspace{5mm} \Gamma\vdash\mathsf{G}(\neg\psi\to\mathsf{X}(\psi\to\varphi)) \end{array} \] Note that the subgoals imply the root goal, but not vice versa!

() : unit

IsNewGoalName gName

Full Usage: IsNewGoalName gName

Parameters:
    gName : string

Returns: bool

check whether a given name is already used by some goal

gName : string
Returns: bool

LTL2DetOmegaTac ()

Full Usage: LTL2DetOmegaTac ()

Parameters:
    () : unit

LTL2DetOmegaTac translates a LTL formula to a deterministic automaton.

() : unit

LTL2OmegaTac tryFG ()

Full Usage: LTL2OmegaTac tryFG ()

Parameters:
    tryFG : bool
    () : unit

LTL2OmegaTac translates a LTL formula to a nondeterministic automaton. The translation computes a universal automaton, so that the transition relation becomes an assumption in form of a AG formula. Moreover, potential fairness constraints are also added as assumptions. The option tryFG is used to avoid fairness constraints as much as possible.

tryFG : bool
() : unit

LTLTac ()

Full Usage: LTLTac ()

Parameters:
    () : unit

LTLTac proves the given goal by by abstracting it into a LTL formula where the abstraction is made for any atom which is not a boolean variable or a boolean expression

() : unit

LivenessBoundTac bound ()

Full Usage: LivenessBoundTac bound ()

Parameters:
    bound : int
    () : unit

The tactic can be used to prove a liveness property by unrolling of the liveness property \(\psi\): \[ \begin{array}{c} \Gamma\vdash\mathsf{F}\psi\\ \hline \Gamma\vdash \psi\vee \mathsf{X}(\psi\vee \mathsf{X}(\ldots)) \end{array} \] This rule can be used if the liveness is guaranteed to hold in a finite bound on the number of steps where the bound must be independent of the inputs of the program.

bound : int
() : unit

LivenessNextTac ()

Full Usage: LivenessNextTac ()

Parameters:
    () : unit

The tactic can be used to prove a liveness property if the property holds at the next point in time: \[ \begin{array}{c} \Gamma\vdash\mathsf{F}\psi\\ \hline \Gamma\vdash \mathsf{X}\psi \end{array} \]

() : unit

LivenessRankInvTac rho chi ()

Full Usage: LivenessRankInvTac rho chi ()

Parameters:

The tactic can be used to prove a liveness property by means of a ranking function which is defined by an tuple of nat expressions \(\varrho\) and an invariant \(\chi\) such that the invariant holds until and when the liveness property \(\psi\) holds, and such that the ranking function is strictly decreasing until \(\psi\) holds and \(\psi\) holds when \(\varrho\) becomes zero: \[ \begin{array}{c} \Gamma\vdash\mathsf{F}\psi\\ \hline \Gamma\vdash \chi \hspace{5mm} \Gamma\vdash \mathsf{G} (\chi \wedge \neg\psi \to \mathsf{next}(\varrho)<\varrho \wedge \mathsf{X} \chi) \end{array} \]

rho : NatExpr list
chi : SpecExpr
() : unit

LivenessRankSeqTac rankList ()

Full Usage: LivenessRankSeqTac rankList ()

Parameters:

This tactic can prove a liveness property by a ranking sequence which is inspired by the iteration $\varphi_{i+1} := \mathsf{AX}\varphi_i$. However, due to abstract states, there may be pseudo-cycles so that the subgoals only demand $\varphi_{i+1}\to\mathsf{F}\varphi_i$ which allows one to prove the latter by disproving the existence of the pseudo-cycles: \[ \begin{array}{c} \Gamma\vdash \mathsf{G}\left(\psi\mathsf{F}\varphi_0\right)\\ \hline \Gamma\vdash \psi\to\bigvee_{j=0}^n\varphi_j \hspace{5mm} \bigwedge_{i=0}^{n-1}\Gamma\vdash \mathsf{G}(\varphi_{i+1}\to\mathsf{F}\bigvee_{j=0}^i\varphi_j) \end{array} \]

rankList : SpecExpr list
() : unit

LivenessRankTac rho ()

Full Usage: LivenessRankTac rho ()

Parameters:

The tactic can be used to prove a liveness property by means of a ranking function which is defined by a tuple of nat expressions \(\varrho\) which is strictly decreasing until \(\psi\) holds: \[ \begin{array}{c} \Gamma\vdash\mathsf{F}\psi\\ \hline \Gamma\vdash[(\mathsf{next}(\varrho)<\varrho)\;\mathsf{U}\;\psi] \end{array} \]

rho : NatExpr list
() : unit

LoadModuleFromFile filename

Full Usage: LoadModuleFromFile filename

Parameters:
    filename : string

generate a new proof context for a Quartz module loaded from a file

filename : string

LoadModuleFromInternet url

Full Usage: LoadModuleFromInternet url

Parameters:
    url : string

generate a new proof context for a Quartz module loaded from the internet

url : string

LoadModuleFromStream inStream

Full Usage: LoadModuleFromStream inStream

Parameters:

generate a new proof context for a Quartz module loaded from a stream

inStream : TextReader

LoadModuleFromString s

Full Usage: LoadModuleFromString s

Parameters:
    s : string

generate a new proof context for a Quartz module loaded from a string

s : string

MpTac psi ()

Full Usage: MpTac psi ()

Parameters:

MpTac applies the well-known logic rule of modus ponens which can be used to strengthen a proof goal: \[ \begin{array}{c} \Gamma\vdash \varphi \\ \hline \Gamma\vdash\psi \hspace{5mm} \Gamma\vdash\psi\to\varphi \end{array} \]

psi : SpecExpr
() : unit

NextTac ()

Full Usage: NextTac ()

Parameters:
    () : unit

drive an outermost temporal next operator inwards to the atoms of its subformulas, and convert it to a BoolNext operator for expanding with transition equations

() : unit

NoTac ()

Full Usage: NoTac ()

Parameters:
    () : unit

NoTac does nothing, but is useful with OrelseTac tac NoTac to catch failing tactics.

() : unit

OrelseTac tac1 tac2 ()

Full Usage: OrelseTac tac1 tac2 ()

Parameters:
    tac1 : unit -> unit
    tac2 : unit -> unit
    () : unit

OrelseTac applies the first tactic, and uses the second one if that fails.

tac1 : unit -> unit
tac2 : unit -> unit
() : unit

ParseExprFromString s

Full Usage: ParseExprFromString s

Parameters:
    s : string

Returns: Expr

parsing an expression from a string using the variable declarations of the proof context

s : string
Returns: Expr

ParseSpecExprFromString s

Full Usage: ParseSpecExprFromString s

Parameters:
    s : string

Returns: SpecExpr

parsing a SpecExpr from a string using the variable declarations of the proof context

s : string
Returns: SpecExpr

PersistenceTac chi ()

Full Usage: PersistenceTac chi ()

Parameters:

PersistenceTac proves persistence properties by a property \(\chi\) which is after the point of time where the properties becomes invariantly true: \[ \begin{array}{c} \Gamma\vdash\mathsf{FG}\varphi\\ \hline \Gamma\vdash\mathsf{F}\chi \hspace{5mm} \Gamma\vdash\mathsf{G}(\chi\to\mathsf{G}\varphi) \end{array} \]

chi : SpecExpr
() : unit

PrintCurrGoal ()

Full Usage: PrintCurrGoal ()

Parameters:
    () : unit

print the topmost proof goal

() : unit

PrintCurrRootGoal ()

Full Usage: PrintCurrRootGoal ()

Parameters:
    () : unit

print the root goal of the current (open) proof goal

() : unit

PrintInitEquations ()

Full Usage: PrintInitEquations ()

Parameters:
    () : unit

print init equations

() : unit

PrintNowEquations ()

Full Usage: PrintNowEquations ()

Parameters:
    () : unit

print now equations

() : unit

PrintNxtEquations ()

Full Usage: PrintNxtEquations ()

Parameters:
    () : unit

print next (transition) equations

() : unit

PrintOpenGoals ()

Full Usage: PrintOpenGoals ()

Parameters:
    () : unit

print all open proof goals

() : unit

PrintProofOfThm thmName

Full Usage: PrintProofOfThm thmName

Parameters:
    thmName : string

print the proof of an already proved theorem

thmName : string

PrintProofTreeOfCurrGoal ()

Full Usage: PrintProofTreeOfCurrGoal ()

Parameters:
    () : unit

print the proof tree of the current proof goal

() : unit

PrintProofTreeOfNode i

Full Usage: PrintProofTreeOfNode i

Parameters:
    i : int

print the proof tree below a node in the proof tree

i : int

PrintTacticOfNode i

Full Usage: PrintTacticOfNode i

Parameters:
    i : int

print the tactic used so far for the given node in the proof tree

i : int

PrintTacticOfThm thmName

Full Usage: PrintTacticOfThm thmName

Parameters:
    thmName : string

print the tactic of an already proved theorem

thmName : string

PrintTheorems ()

Full Usage: PrintTheorems ()

Parameters:
    () : unit

print all proved goals, i.e., the available theorems

() : unit

ProveThm name phi tactic

Full Usage: ProveThm name phi tactic

Parameters:
    name : string
    phi : SpecExpr
    tactic : unit -> unit

This function uses argument phi to set a new initial goal without assumptions and applies the given tactic. If the tactic proves the goal, it will be converted to a theorem and will be stored under the given name. Using successful tactics, this function can be considered as a proof based on the used tactics.

name : string
phi : SpecExpr
tactic : unit -> unit

ProveThmAsm name asm phi tactic

Full Usage: ProveThmAsm name asm phi tactic

Parameters:

This function uses argument phi to set a new initial goal with given assumptions and applies the given tactic. If the tactic proves the goal, it will be converted to a theorem and will be stored under the given name. Using successful tactics, this function can be considered as a proof based on the used tactics.

name : string
asm : SpecExpr list
phi : SpecExpr
tactic : unit -> unit

RemoveCurrGoal ()

Full Usage: RemoveCurrGoal ()

Parameters:
    () : unit

remove the current goal with all of its subgoals

() : unit

RepeatTac tac ()

Full Usage: RepeatTac tac ()

Parameters:
    tac : unit -> unit
    () : unit

RepeatTac applies the given tactic as long as there are changes.

tac : unit -> unit
() : unit

ResetProofContext ()

Full Usage: ResetProofContext ()

Parameters:
    () : unit

reset the proof tree without changing the contained AIF system and the related substitutions

() : unit

SetNewGoal name asm concl

Full Usage: SetNewGoal name asm concl

Parameters:

set a new proof goal with a name to store it later as a theorem

name : string
asm : SpecExpr list
concl : SpecExpr

SmtZ3Tac thmL ()

Full Usage: SmtZ3Tac thmL ()

Parameters:
    thmL : string seq
    () : unit

This tactic uses Microsoft's SMT solver Z3 to prove the proof goal. It expects a list of theorems of the form AG phi which are instantiated to the current point of time, and are then added to the assumptions for proving the goal with its assumptions. A counterexample is printed if the goal cannot be proved. In contrast to TautTac, this tactic can deal with arithmetic, i.e., proving that n+1==1+n.

thmL : string seq
() : unit

StrongAsWeakTac ()

Full Usage: StrongAsWeakTac ()

Parameters:
    () : unit

 The tactic replaces a strong temporal logic operator on top of the goal
 by a conjunction with the corresponding weak temporal logic operator and
 a liveness constraint:
 \[
 \begin{array}{l}
 [\varphi\;\mathsf{\underline{B}}\;\psi] = 
      [\varphi\;\mathsf{B}\;\psi] \wedge (\mathsf{F}\phi)\\
 [\varphi\;\mathsf{\underline{U}}\;\psi] = 
      [\varphi\;\mathsf{U}\;\psi] \wedge (\mathsf{F}\psi)\\
 [\varphi\;\mathsf{\underline{W}}\;\psi] = 
      [\varphi\;\mathsf{W}\;\psi] \wedge (\mathsf{F}\psi)\\
 \end{array}
 \]
() : unit

StrongBeforeTac ()

Full Usage: StrongBeforeTac ()

Parameters:
    () : unit

StrongBeforeTac reduces Strong-Before to Weak-Before and Eventual: \[ \begin{array}{c} \Gamma\vdash [\varphi\;\mathsf{\underline{B}}\;\psi] \\ \hline \Gamma\vdash [\varphi\;\mathsf{B}\;\psi] \hspace{5mm} \Gamma\vdash\mathsf{F}\phi \end{array} \]

() : unit

StrongUntilTac ()

Full Usage: StrongUntilTac ()

Parameters:
    () : unit

StrongUntilTac reduces Strong-Until to Weak-Until and Eventual: \[ \begin{array}{c} \Gamma\vdash [\varphi\;\mathsf{\underline{U}}\;\psi] \\ \hline \Gamma\vdash [\varphi\;\mathsf{U}\;\psi] \hspace{5mm} \Gamma\vdash\mathsf{F}\psi \end{array} \]

() : unit

StrongWhenTac ()

Full Usage: StrongWhenTac ()

Parameters:
    () : unit

StrongWhenTac reduces Strong-When to Weak-When and Eventual: \[ \begin{array}{c} \Gamma\vdash [\varphi\;\mathsf{\underline{W}}\;\psi] \\ \hline \Gamma\vdash [\varphi\;\mathsf{W}\;\psi] \hspace{5mm} \Gamma\vdash\mathsf{F}\psi \end{array} \]

() : unit

TautTac thmL ()

Full Usage: TautTac thmL ()

Parameters:
    thmL : string seq
    () : unit

This tactic uses Microsoft's SMT solver Z3 to prove the proof goal. It expects a list of theorems of the form AG phi which are instantiated to the current point of time, and are then added to the assumptions for proving the goal with its assumptions. A counterexample is printed if the goal cannot be proved. In contrast to SmtZ3Tac, this tactic abstracts atoms to propositional variables, so that an atom like n+1==1+n can be made false to generate a counterexample.

thmL : string seq
() : unit

ThenAll tac1 tac2 ()

Full Usage: ThenAll tac1 tac2 ()

Parameters:
    tac1 : unit -> unit
    tac2 : unit -> unit
    () : unit

ThenAll applies the first tactic to generate subgoals g[0..n-1] and then applies the second tactic to all subgoals g[i].

tac1 : unit -> unit
tac2 : unit -> unit
() : unit

ThenL tac tacL ()

Full Usage: ThenL tac tacL ()

Parameters:
    tac : unit -> unit
    tacL : (unit -> unit) list
    () : unit

ThenL applies the given tactic to generate subgoals g[0..n-1] and then applies tacL[i] to g[i]. It fails if the number of subgoals does not match with the number of provided tactics.

tac : unit -> unit
tacL : (unit -> unit) list
() : unit

TransEventualTac chi ()

Full Usage: TransEventualTac chi ()

Parameters:

TransEventualTac makes use of the transitivity of the F operator: \[ \begin{array}{c} \Gamma\vdash \mathsf{G}(\varphi\to\mathsf{F}\psi) \\ \hline \Gamma\vdash \mathsf{G}(\varphi\to\mathsf{F}\chi) \hspace{5mm} \Gamma\vdash \mathsf{G}(\chi\to\mathsf{F}\psi) \]

chi : SpecExpr
() : unit

TransIffTac alpha ()

Full Usage: TransIffTac alpha ()

Parameters:

TransIffTac makes use of the transitivity of equivalences: \[ \begin{array}{c} \Gamma\vdash \psi\leftrightarrow\varphi \\ \hline \Gamma\vdash\psi\leftrightarrow\alpha \hspace{5mm} \Gamma\vdash\alpha\leftrightarrow\varphi \end{array} \]

alpha : SpecExpr
() : unit

TransImpTac alpha ()

Full Usage: TransImpTac alpha ()

Parameters:

TransImpTac makes use of the transitivity of implications by interpolation: \[ \begin{array}{c} \Gamma\vdash \psi\to\varphi \\ \hline \Gamma\vdash\psi\to\alpha \hspace{5mm} \Gamma\vdash\alpha\to\varphi \end{array} \]

alpha : SpecExpr
() : unit

TransWhenTac chi ()

Full Usage: TransWhenTac chi ()

Parameters:

TransWhenTac makes use of the transitivity of the W operator: \[ \begin{array}{c} \Gamma\vdash \mathsf{G}(\alpha\to[[\beta\;\mathsf{W}\;\gamma]\;\mathsf{W}\;\delta]) \\ \hline \Gamma\vdash \mathsf{G}(\alpha\to[\chi\;\mathsf{W}\;\delta]) \hspace{5mm} \Gamma\vdash \mathsf{G}(\chi\wedge\delta\to[\beta\;\mathsf{W}\;\gamma]) \]

chi : SpecExpr
() : unit

UndischTac i ()

Full Usage: UndischTac i ()

Parameters:
    i : int
    () : unit

UndischTac moves a chosen assumption to the conclusion by creating an implication: \[ \begin{array}{c} \varphi,\Gamma\vdash\psi \\ \hline \Gamma\vdash\varphi\to\psi \end{array} \]

i : int
() : unit

UndoTac ()

Full Usage: UndoTac ()

Parameters:
    () : unit

undo the previous tactic that was applied to the current proof goal (it will fail if the current proof goal is its root goal; in that case you should use function RemoveCurrGoal).

() : unit

UnrollTempOpsTac ()

Full Usage: UnrollTempOpsTac ()

Parameters:
    () : unit

UnrollTempOpsTac unrolls temporal logic operators such that all temporal operators will occur under Next, PastWeakNext, or PastStrongNext.

() : unit

scriptMode

Full Usage: scriptMode

Returns: bool

scriptMode being true will print messages when loading modules and proving theorems which is the desired output in scripting mode

Returns: bool

verboseMode

Full Usage: verboseMode

Returns: bool

verboseMode being true will print messages of the tactics which is used in the interactive mode and may be disabled in scripting mode

Returns: bool

Type something to start searching.