5
(* The axioms for groups *)
8
1, (1, (Term("*", [Term("U", []); Var 1]), Var 1));
9
2, (1, (Term("*", [Term("I", [Var 1]); Var 1]), Term("U", [])));
10
3, (3, (Term("*", [Term("*", [Var 1; Var 2]); Var 3]),
11
Term("*", [Var 1; Term("*", [Var 2; Var 3])])))
14
let group_precedence op1 op2 =
15
if op1 = op2 then Equal else
16
if (op1 = "I") or (op2 = "U") then Greater else NotGE
19
let group_order = rpo group_precedence lex_ext
25
1, (1, (Term ("*", [(Term ("U", [])); (Var 1)]), (Var 1)));
26
2, (1, (Term ("*", [(Term ("I", [(Var 1)])); (Var 1)]), (Term ("U", []))));
27
3, (3, (Term ("*", [(Term ("*", [(Var 1); (Var 2)])); (Var 3)]),
28
(Term ("*", [(Var 1); (Term ("*", [(Var 2); (Var 3)]))]))));
29
4, (0, (Term ("*", [(Term ("A", [])); (Term ("B", []))]),
30
(Term ("*", [(Term ("B", [])); (Term ("A", []))]))));
31
5, (0, (Term ("*", [(Term ("C", [])); (Term ("C", []))]), (Term ("U", []))));
36
(Term ("*", [(Term ("A", [])); (Term ("I", [(Term ("C", []))]))]))]),
37
(Term ("I", [(Term ("A", []))]))));
42
(Term ("*", [(Term ("B", [])); (Term ("I", [(Term ("C", []))]))]))]),
46
let geom_rank = function
53
| _ -> failwith "Geom_rank"
56
let geom_precedence op1 op2 =
57
let r1 = geom_rank op1
58
and r2 = geom_rank op2 in
59
if r1 = r2 then Equal else
60
if r1 > r2 then Greater else NotGE
63
let geom_order = rpo geom_precedence lex_ext
66
kb_complete (gt_ord group_order) [] group_rules;;
68
(* If you have a fast machine, you may uncomment the following line: *)
70
(* print_newline(); kb_complete (gt_ord geom_order) [] geom_rules;; *)