Addition of a tactic that proves a sequent by applying a generic theorem on facts provided by the user. It can be used via `by Apply(thm).on(fact1, fact2,...)`. Replaces cases where using `Tautology` was overkill.
## 2024-02-05
The "draft()" option can now be used at the start of a file to skip checking proofs of theorem outside this file during development.
* Search the premises of a sequent to find one that is matched by a given formula.
* Performing the resulting substitution inside this premise gives the formula passed as argument.
*
* @param seq the sequent whose premises are references
* @param f the formula to match
* @param takenTVars any term variable in the template which cannot be substituted, i.e., treated as constant
* @param takenFVars any formula variable in the template which cannot be substituted, i.e., treated as constant
* @return a variable assignment such that substituting the variables of seq makes f appear in one of its premises. If no such substitution exists return None.
* Search the premises of a sequent to find one that matches a given formula.
* Performing the resulting substitution inside this formula gives the premise.
*
* @param seq the sequent whose premises are being searched
* @param f the reference formula
* @param takenTVars any term variable in the template which cannot be substituted, i.e., treated as constant
* @param takenFVars any formula variable in the template which cannot be substituted, i.e., treated as constant
* @return a variable assignment such that substituting the variables of f makes f appear in one of seq's premises. If no such substitution exists return None.