Example of abbreviations and illegal variable assignment

Here's an example of an abbreviation, and expanding it either in a valid way, or in a way which produces an error.

The easiest way to get some kinds and terms to work with is going to be to import one of our existing interfaces; here we pick Interface:Classical_propositional_calculus.  import (PROPOSITIONAL Interface:Classical_propositional_calculus ) 

Our abbreviation is for one particular way of defining negated conjunction. Because the right hand side of the abbreviation contains exactly those variables found on the left hand side, it is a case where JHilbert's current  provides all the functionality which is envisaged for a new abbreviation feature.

 var (formula p q) def ((| p q) ((¬ p) ∨ (¬ q))) 

The abbreviation can be used, and expanded to.

 thm (Valid  ((p | q) → ((¬ p) ∨ (¬ q))) ( (p | q) ImplicationReflexivity )) 

And it gets expanded the same way in error cases.

 thm (Invalid  ((p | q) → ((¬ q) ∨ (¬ p))) ( (p | q) ImplicationReflexivity )) 