find all assumptions of the shape ¬ (p ∧ q)
or ¬ (p ∨ q)
and
replace them using de Morgan's law.
The following definitions maintain a path compression datastructure, i.e. a forest such that:
- every node is the type of a hypothesis
- there is a edge between two nodes only if they are provably equivalent
- every edge is labelled with a proof of equivalence for its vertices
- edges are added when normalizing propositions.
If there exists a symmetry lemma that can be applied to the hypothesis e
,
store it.
Retrieve the root of the hypothesis e
from the proof forest.
If e
has not been internalized, add it to the proof forest.
Given hypotheses a
and b
, build a proof that a
is equivalent to b
,
applying congruence and recursing into arguments if a
and b
are applications of function symbols.
Configuration options for tauto
.
If classical
is tt
, runs classical
before the rest of tauto
.
closer
is run on any remaining subgoals left by tauto_core; basic_tauto_tacs
.
tautology
breaks down assumptions of the form _ ∧ _
, _ ∨ _
, _ ↔ _
and ∃ _, _
and splits a goal of the form _ ∧ _
, _ ↔ _
or ∃ _, _
until it can be discharged
using reflexivity
or solve_by_elim
.
This is a finishing tactic: it either closes the goal or raises an error.
The variant tautology!
uses the law of excluded middle.
tautology {closer := tac}
will use tac
on any subgoals created by tautology
that it is unable to solve before failing.
tauto
breaks down assumptions of the form _ ∧ _
, _ ∨ _
, _ ↔ _
and ∃ _, _
and splits a goal of the form _ ∧ _
, _ ↔ _
or ∃ _, _
until it can be discharged
using reflexivity
or solve_by_elim
.
This is a finishing tactic: it either closes the goal or raises an error.
The variant tauto!
uses the law of excluded middle.
tauto {closer := tac}
will use tac
on any subgoals created by tauto
that it is unable to solve before failing.