I am trying to read the code of HOL-Hoare and I have trouble understanding the functionalities of many functions in hoare_tac.ML and hoare_syntax.ML. For instance, in
fun mk_abstupleC [] body = absfree ("x", HOLogic.unitT) body
| mk_abstupleC [v] body = absfree (dest_Free v) body
| mk_abstupleC (v :: w) body =
let
val (x, T) = dest_Free v;
val z = mk_abstupleC w body;
val T2 =
(case z of
Abs (_, T, _) => T
| Const (_, Type (_, [_, Type (_, [T, _])])) $ _ => T);
in
Const (\<^const_name>‹case_prod›,
(T --> T2 --> HOLogic.boolT) --> HOLogic.mk_prodT (T, T2) --> HOLogic.boolT) $
absfree (x, T) z
end;
I can't understand the functionality of absfree and dest_Free and I have to make some tests to get their meanings. I have found some functionality description in The Isabelle/Isar Reference Manual and implementation, but not all functions are found. So My question is how to search functions conveniently?