Generate the map function for a product, sum, or option type.
(deffold-map-gen-prod/sum/option-map
sum mutrecp suffix
targets extra-args overrides fty-table)
→
eventIn the FTY table, these are all stored as sum types, but with a discriminator as the type macro.
Function:
(defun deffold-map-gen-prod/sum/option-map (sum mutrecp suffix targets extra-args overrides fty-table) (declare (xargs :guard (and (flexsum-p sum) (booleanp mutrecp) (symbolp suffix) (symbol-listp targets) (true-listp extra-args) (alistp overrides) (alistp fty-table)))) (let ((__function__ 'deffold-map-gen-prod/sum/option-map)) (declare (ignorable __function__)) (b* ((typemacro (flexsum->typemacro sum))) (cond ((eq typemacro 'defprod) (deffold-map-gen-prod-map sum mutrecp suffix targets extra-args overrides fty-table)) ((eq typemacro 'deftagsum) (deffold-map-gen-sum-map sum mutrecp suffix targets extra-args overrides fty-table)) ((eq typemacro 'defoption) (deffold-map-gen-option-map sum mutrecp suffix extra-args fty-table)) (t (prog2$ (raise "Internal error: unsupported sum type ~x0." sum) '(_)))))))
Theorem:
(defthm pseudo-event-formp-of-deffold-map-gen-prod/sum/option-map (b* ((event (deffold-map-gen-prod/sum/option-map sum mutrecp suffix targets extra-args overrides fty-table))) (acl2::pseudo-event-formp event)) :rule-classes :rewrite)