Math is great and should be well studied by programmers, but in general I oppose this idea. Mathematicians define things the way they do because they have neither flip-flops nor do they have a defined execution method as part of their foundational system. These two things radically change the interaction we have with any given formal system put on top of it.
> Functions map members of a set A to members of a set B.
> Something that has side effects all over the place should just not be called a function
Leibniz defines functions as a quantity that depends on some geometry like a curve. Bernoulli later defined it as a quantity that results from a variable. The latin word "functio" means process, not implying a mapping but an arbitrary sequential performance. Mathematicians are prone to taking words from elsewhere, either twisting their meaning or inventing wholly new meaning out of thin air, all according to their whimsy for their own particular needs. I do not think a reasonable case can be made to assert we have to respect ZFC's narrow conception of a function when we do not live in a ZFC world.
> Functions map members of a set A to members of a set B.
> Something that has side effects all over the place should just not be called a function
Leibniz defines functions as a quantity that depends on some geometry like a curve. Bernoulli later defined it as a quantity that results from a variable. The latin word "functio" means process, not implying a mapping but an arbitrary sequential performance. Mathematicians are prone to taking words from elsewhere, either twisting their meaning or inventing wholly new meaning out of thin air, all according to their whimsy for their own particular needs. I do not think a reasonable case can be made to assert we have to respect ZFC's narrow conception of a function when we do not live in a ZFC world.