- new_theory "example";
<<HOL message: Created theory "example">>
> val it = () : unit
- val _ = Hol_datatype `example = First | Second`;
<<HOL message: Defined type: "example">>
- val example_def = Define
`(example First = Second) /\ (example Second = First)`;
Definition has been stored under "example_def".
> val example_def = |- (example First = Second) /\ (example Second = First) :
thm
- save_thm("example_thm",
METIS_PROVE [example_def, theorem "example_nchotomy"]
``!x. example (example x) = x``);
metis: r[+0+5]+0+0+0+0+6+2+2+1+0+1+1#
> val it = |- !x. example (example x) = x : thm
- theorems "example";
> val it =
[("num2example_example2num", |- !a. num2example (example2num a) = a),
("example2num_num2example",
|- !r. r < 2 = (example2num (num2example r) = r)),
("num2example_11",
|- !r r'.
r < 2 ==> r' < 2 ==> ((num2example r = num2example r') = (r = r'))),
("example2num_11", |- !a a'. (example2num a = example2num a') = (a = a')),
("num2example_ONTO", |- !a. ?r. (a = num2example r) /\ r < 2),
("example2num_ONTO", |- !r. r < 2 = ?a. r = example2num a),
("num2example_thm",
|- (num2example 0 = First) /\ (num2example 1 = Second)),
("example2num_thm",
|- (example2num First = 0) /\ (example2num Second = 1)),
("example_EQ_example",
|- !a a'. (a = a') = (example2num a = example2num a')),
("example_case_def",
|- (!v0 v1. (case First of First -> v0 || Second -> v1) = v0) /\
!v0 v1. (case Second of First -> v0 || Second -> v1) = v1),
("datatype_example", |- DATATYPE (example First Second)),
("example_distinct", |- ~(First = Second)),
("example_case_cong",
|- !M M' v0 v1.
(M = M') /\ ((M' = First) ==> (v0 = v0')) /\
((M' = Second) ==> (v1 = v1')) ==>
((case M of First -> v0 || Second -> v1) =
case M' of First -> v0' || Second -> v1')),
("example_nchotomy", |- !a. (a = First) \/ (a = Second)),
("example_Axiom", |- !x0 x1. ?f. (f First = x0) /\ (f Second = x1)),
("example_induction", |- !P. P First /\ P Second ==> !a. P a),
("example_thm", |- !x. example (example x) = x)] : (string * thm) list
- EmitTeX.non_type_theorems "example";
> val it = [("example_thm", |- !x. example (example x) = x)] :
(string * thm) list