To define the booleans, we extend the language with two contant symbols TT and FF. Then the booleans are defined by the following predicate I B x:
True.total.B added as introduction rule (abbrev: True
, options: -i -c
)
False.total.B added as introduction rule (abbrev: False
, options: -i -c
)
is_True.total.B added as introduction rule (abbrev: is_True
, options: )
is_False.total.B added as introduction rule (abbrev: is_False
, options: )
case.B added as elimination rule (abbrev: case
, options: )
These theorems are added respectively as introduction and
elimination rules for the predicate I B with the given
abbreviation (This implies for instance that elim True.total.B
is
equivalent to intro True
). Moreover the last rule is invertible
and the third rule is not necessary for completeness.
True_not_False_left.B added as elimination rule (abbrev: True_not_False
, options: -i -n
)
False_not_True_left.B added as elimination rule (abbrev: False_not_True
, options: -i -n
)
equal_True_left.B added as elimination rule (abbrev: equal_True_left
, options: -i -n
)
True_equal_left.B added as elimination rule (abbrev: left_True
, options: -i -n
)
equal_False_left.B added as elimination rule (abbrev: equal_False_left
, options: -i -n
)
False_equal_left.B added as elimination rule (abbrev: left_False
, options: -i -n
)
elim.B added as elimination rule (abbrev: elim
, options: -n
)
Using the previous axiom, we can prove (instuitionistically) the decidability of the equality on booleans.
eq_dec.B added as introduction rule (abbrev: B
, options: -i -t
)