(* ||M|| This file is part of HELM, an Hypertextual, Electronic ||A|| Library of Mathematics, developed at the Computer Science ||T|| Department, University of Bologna, Italy. ||I|| ||T|| HELM is free software; you can redistribute it and/or ||A|| modify it under the terms of the GNU General Public License \ / version 2 or (at your option) any later version. \ / This software is distributed as is, NO WARRANTY. V_______________________________________________________________ *) module P = Printf module L = Log module A = Aut type counters = { sections: int; contexts: int; blocks: int; decls: int; defs: int; sorts: int; grefs: int; appls: int; absts: int; pars: int } let initial_counters = { sections = 0; contexts = 0; blocks = 0; decls = 0; defs = 0; sorts = 0; grefs = 0; appls = 0; absts = 0; pars = 0 } let rec count_term f c = function | A.Sort _ -> f {c with sorts = succ c.sorts} | A.GRef (_, ts) -> let c = {c with grefs = succ c.grefs} in let c = {c with pars = c.pars + List.length ts} in Cps.list_fold_left f count_term c ts | A.Appl (v, t) -> let c = {c with appls = succ c.appls} in let f c = count_term f c t in count_term f c v | A.Abst (_, w, t) -> let c = {c with absts = succ c.absts} in let f c = count_term f c t in count_term f c w let count_item f c = function | A.Section _ -> f {c with sections = succ c.sections} | A.Context _ -> f {c with contexts = succ c.contexts} | A.Block (_, w) -> let c = {c with blocks = succ c.blocks} in count_term f c w | A.Decl (_, w) -> let c = {c with decls = succ c.decls} in count_term f c w | A.Def (_, w, _, t) -> let c = {c with defs = succ c.defs} in let f c = count_term f c t in count_term f c w let print_counters f c = let terms = c.sorts + c.grefs + c.appls + c.absts in let items = c.sections + c.contexts + c.blocks + c.decls + c.defs in L.warn (P.sprintf " Automath representation summary"); L.warn (P.sprintf " Total book items: %7u" items); L.warn (P.sprintf " Section items: %7u" c.sections); L.warn (P.sprintf " Context items: %7u" c.contexts); L.warn (P.sprintf " Block items: %7u" c.blocks); L.warn (P.sprintf " Declaration items: %7u" c.decls); L.warn (P.sprintf " Definition items: %7u" c.defs); L.warn (P.sprintf " Total Parameter items: %7u" c.pars); L.warn (P.sprintf " Application items: %7u" c.pars); L.warn (P.sprintf " Total term items: %7u" terms); L.warn (P.sprintf " Sort items: %7u" c.sorts); L.warn (P.sprintf " Reference items: %7u" c.grefs); L.warn (P.sprintf " Application items: %7u" c.appls); L.warn (P.sprintf " Abstraction items: %7u" c.absts); f ()