Look up the main function in a file.
(lookup-main-function file) → fundecl?
We go through the file and return
the declaration of the first function named
Function:
(defun lookup-main-function-aux (decls) (declare (xargs :guard (topdecl-listp decls))) (let ((__function__ 'lookup-main-function-aux)) (declare (ignorable __function__)) (b* (((when (endp decls)) nil) (decl (car decls)) ((unless (topdecl-case decl :function)) (lookup-main-function-aux (cdr decls))) (fundecl (topdecl-function->get decl)) ((when (equal (fundecl->name fundecl) (identifier "main"))) fundecl)) (lookup-main-function-aux (cdr decls)))))
Theorem:
(defthm fundecl-optionp-of-lookup-main-function-aux (b* ((fundecl? (lookup-main-function-aux decls))) (fundecl-optionp fundecl?)) :rule-classes :rewrite)
Theorem:
(defthm lookup-main-function-aux-of-topdecl-list-fix-decls (equal (lookup-main-function-aux (topdecl-list-fix decls)) (lookup-main-function-aux decls)))
Theorem:
(defthm lookup-main-function-aux-topdecl-list-equiv-congruence-on-decls (implies (topdecl-list-equiv decls decls-equiv) (equal (lookup-main-function-aux decls) (lookup-main-function-aux decls-equiv))) :rule-classes :congruence)
Function:
(defun lookup-main-function (file) (declare (xargs :guard (filep file))) (let ((__function__ 'lookup-main-function)) (declare (ignorable __function__)) (lookup-main-function-aux (programdecl->items (file->program file)))))
Theorem:
(defthm fundecl-optionp-of-lookup-main-function (b* ((fundecl? (lookup-main-function file))) (fundecl-optionp fundecl?)) :rule-classes :rewrite)
Theorem:
(defthm lookup-main-function-of-file-fix-file (equal (lookup-main-function (file-fix file)) (lookup-main-function file)))
Theorem:
(defthm lookup-main-function-file-equiv-congruence-on-file (implies (file-equiv file file-equiv) (equal (lookup-main-function file) (lookup-main-function file-equiv))) :rule-classes :congruence)