|
Warning: this is an htmlized version!
The original is here, and the conversion rules are here. |
% (find-LATEX "2025bad-foundations.tex")
% (defun c () (interactive) (find-LATEXsh "lualatex -record 2025bad-foundations.tex" :end))
% (defun C () (interactive) (find-LATEXsh "lualatex 2025bad-foundations.tex" "Success!!!"))
% (defun D () (interactive) (find-pdf-page "~/LATEX/2025bad-foundations.pdf"))
% (defun d () (interactive) (find-pdftools-page "~/LATEX/2025bad-foundations.pdf"))
% (defun e () (interactive) (find-LATEX "2025bad-foundations.tex"))
% (defun o () (interactive) (find-LATEX "2026logica-para-pessoas.tex"))
% (defun u () (interactive) (find-latex-upload-links "2025bad-foundations"))
% (defun v () (interactive) (find-2a '(e) '(d)))
% (defun b () (interactive) (find-LATEX "education.bib"))
% (defun d0 () (interactive) (find-ebuffer "2025bad-foundations.pdf"))
% (defun cv () (interactive) (C) (ee-kill-this-buffer) (v) (g))
% (defun oe () (interactive) (find-2a '(o) '(e)))
% (code-eec-LATEX "2025bad-foundations")
% (find-pdf-page "~/LATEX/2025bad-foundations.pdf")
% (find-sh0 "cp -v ~/LATEX/2025bad-foundations.pdf /tmp/")
% (find-sh0 "cp -v ~/LATEX/2025bad-foundations.pdf /tmp/pen/")
% (find-xournalpp "/tmp/2025bad-foundations.pdf")
% file:///home/edrx/LATEX/2025bad-foundations.pdf
% file:///tmp/2025bad-foundations.pdf
% file:///tmp/pen/2025bad-foundations.pdf
% http://anggtwu.net/LATEX/2025bad-foundations.pdf
% (find-LATEX "2019.mk")
% (find-Deps1-links "Caepro5 Piecewise2 Maxima2")
% (find-Deps1-cps "Caepro5 Piecewise2 Maxima2 PictureDots1")
% (find-Deps1-cps "Caepro5 Piecewise2 Maxima3 PictureDots1 Pygments1")
% (find-Deps1-anggs "Caepro5 Piecewise2 Maxima2")
% (find-MM-aula-links "2025bad-foundations" "2" "baf" "baf")
%
% https://mail.google.com/mail/u/0/#inbox/QgrcJHsHkKFxDXxmNjZWwGplHrHCNVcBbgb Bruno
% «.defs» (to "defs")
% «.defs-T-and-B» (to "defs-T-and-B")
% «.defs-caepro» (to "defs-caepro")
% «.defs-pict2e» (to "defs-pict2e")
% «.defs-maxima» (to "defs-maxima")
% «.defs-V» (to "defs-V")
% «.defs-Verbatim» (to "defs-Verbatim")
% «.defs-comprehensions» (to "defs-comprehensions")
% «.defs-co» (to "defs-co")
% «.defs-S» (to "defs-S")
% «.defs-picturedots» (to "defs-picturedots")
% «.defs-processsubfile» (to "defs-processsubfile")
% «.defs-pygvbt» (to "defs-pygvbt")
% «.defs-T1-T2-T3-T4» (to "defs-T1-T2-T3-T4")
%
% «.title» (to "title")
% «.abstract» (to "abstract")
% «.dedic» (to "dedic")
% «.toc» (to "toc")
%
% «.introduction» (to "introduction")
% «.subst-early» (to "subst-early")
% «.expandable-objects» (to "expandable-objects")
% «.proofs-with-justs» (to "proofs-with-justs")
% «.free-and-dependent» (to "free-and-dependent")
% «.maxima» (to "maxima")
% «.maxima-eq-reta» (to "maxima-eq-reta")
% «.substitution» (to "substitution")
% «.subst-juxtaposition» (to "subst-juxtaposition")
% «.subst-proc-object» (to "subst-proc-object")
% «.subst-infix» (to "subst-infix")
% «.subst-lazy-ops» (to "subst-lazy-ops")
% «.subst-pretty» (to "subst-pretty")
% «.subst-functions» (to "subst-functions")
% «.subst-decyphering» (to "subst-decyphering")
% «.why-not-lean» (to "why-not-lean")
% «.holes» (to "holes")
% «.qparts» (to "qparts")
% «.trial-and-improve» (to "trial-and-improve")
% «.flipped» (to "flipped")
% «.pattern-matching» (to "pattern-matching")
% «.expandable-links» (to "expandable-links")
% «.expandable» (to "expandable")
% «.solving-equations» (to "solving-equations")
% «.functions-of-xy» (to "functions-of-xy")
% «.proofs-with-justifications» (to "proofs-with-justifications")
% «.bad-foundations» (to "bad-foundations")
%
% «.references» (to "references")
% «.make-with-bib» (to "make-with-bib")
% ;-- headers
\documentclass[oneside,12pt]{article}
\usepackage[colorlinks,citecolor=DarkRed,urlcolor=DarkRed]{hyperref} % (find-es "tex" "hyperref")
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage{pict2e}
\usepackage[x11names,svgnames]{xcolor} % (find-es "tex" "xcolor")
\usepackage{colorweb} % (find-es "tex" "colorweb")
\usepackage{tocloft} % (find-es "tex" "tocloft")
\usepackage{setspace} % (find-es "tex" "setspace")
\usepackage{indentfirst}
%\usepackage{tikz}
\usepackage{fancyvrb} % for pygments
\usepackage{color} % for pygments
%
% (find-LATEX "dednat7-test1.tex")
%\usepackage{proof} % For derivation trees ("%:" lines)
%\input diagxy % For 2D diagrams ("%D" lines)
%\xyoption{curve} % For the ".curve=" feature in 2D diagrams
%
\usepackage{edrx21} % (find-LATEX "edrx21.sty")
\input edrxaccents.tex % (find-LATEX "edrxaccents.tex")
\input edrx21chars.tex % (find-LATEX "edrx21chars.tex")
\input edrxheadfoot.tex % (find-LATEX "edrxheadfoot.tex")
\input edrxgac2.tex % (find-LATEX "edrxgac2.tex")
%
% (find-es "tex" "geometry")
%\usepackage[a6paper, landscape,
% top=1.5cm, bottom=.25cm, left=1cm, right=1cm, includefoot
% ]{geometry}
%
\usepackage[backend=biber,
style=alphabetic]{biblatex} % (find-es "tex" "biber")
\addbibresource{catsem-ab.bib} % (find-LATEX "catsem-ab.bib")
\addbibresource{education.bib} % (find-LATEX "education.bib")
%
\begin{document}
% «defs» (to ".defs")
% (find-LATEX "edrx21defs.tex" "colors")
% (find-LATEX "edrx21.sty")
\def\drafturl{http://anggtwu.net/LATEX/2025-2-C2.pdf}
\def\drafturl{http://anggtwu.net/2025.2-C2.html}
\def\draftfooter{\tiny \href{\drafturl}{\jobname{}} \ColorBrown{\shorttoday{} \hours}}
% (find-LATEX "2024-1-C2-carro.tex" "defs-caepro")
% (find-LATEX "2024-1-C2-carro.tex" "defs-pict2e")
\catcode`\^^J=10
\directlua{dofile "dednat7load.lua"} % (find-LATEX "dednat7load.lua")
\directlua{dednat7preamble()} % (find-angg "LUA/DednatPreamble1.lua")
\directlua{dednat7oldheads()} % (find-angg "LUA/Dednat7oldheads.lua")
% «defs-T-and-B» (to ".defs-T-and-B")
\long\def\ColorDarkOrange#1{{\color{orange!90!black}#1}}
\def\T(Total: #1 pts){{\bf(Total: #1)}}
\def\T(Total: #1 pts){{\bf(Total: #1 pts)}}
\def\T(Total: #1 pts){\ColorRed{\bf(Total: #1 pts)}}
\def\B (#1 pts){\ColorDarkOrange{\bf(#1 pts)}}
% «defs-caepro» (to ".defs-caepro")
%L dofile "Caepro5.lua" -- (find-angg "LUA/Caepro5.lua" "LaTeX")
\def\Caurl #1{\expr{Caurl("#1")}}
\def\Cahref#1#2{\href{\Caurl{#1}}{#2}}
\def\Ca #1{\Cahref{#1}{#1}}
% «defs-pict2e» (to ".defs-pict2e")
%L dofile "Piecewise2.lua" -- (find-LATEX "Piecewise2.lua")
%L --dofile "Escadas1.lua" -- (find-LATEX "Escadas1.lua")
%L dofile "ExprDxDy1.lua" -- (find-LATEX "ExprDxDy1.lua")
\def\pictgridstyle{\color{GrayPale}\linethickness{0.3pt}}
\def\pictaxesstyle{\linethickness{0.5pt}}
\def\pictnaxesstyle{\color{GrayPale}\linethickness{0.5pt}}
\celllower=2.5pt
% «defs-maxima» (to ".defs-maxima")
% See: (find-LATEX "edrx21.sty" "maximablue-red")
%L dofile "Maxima3.lua" -- (find-angg "LUA/Maxima3.lua")
\pu
% «defs-V» (to ".defs-V")
%L --- See: (find-angg "LUA/MiniV1.lua" "problem-with-V")
%L V = MiniV
%L v = V.fromab
\pu
% «defs-Verbatim» (to ".defs-Verbatim")
% See: (find-LATEX "Verbatim3.lua" "Verbatim" " defvbt =")
% (find-LATEX "Verbatim3.lua" "dednat6" "defvbt =")
% (find-LATEX "Verbatim3.lua" "dednat6-tests")
% (find-LATEX "edrx21.sty" "defvbt")
% (find-LATEX "edrx21.sty" "defvbt" "\\vbtbgboxcolor")
%L dofile "Verbatim3.lua" -- (find-LATEX "Verbatim3.lua")
\pu
\def\vbtbgboxcolor{YellowOrangeLight!45}
% «defs-comprehensions» (to ".defs-comprehensions")
% For: (find-angg "LUA/Comprehensions1.lua" "Comprehension-tests")
% (find-LATEX "2026defs-comprehensions.tex")
\input 2026defs-comprehensions.tex % loads the defs
%L processsubfile "2026defs-comprehensions.tex" -- runs the "%L"s
\pu
\def\vbtc#1{\myvcenter{\vbt{#1}}}
\def\comprehensionbox#1{\ensuremath{\sm{#1}}}
\def\comprehensionbox#1{\ensuremath{\mat{#1}}}
\def\comprehensionbox#1{\ensuremath{\fbox{\sm{#1}}}}
\def\comprehensionbox#1{\fbox{\ensuremath{\mat{#1}}}}
\def\comprehensionbox#1{\fbox{\ensuremath{\sm{#1}}}}
\def\comprehensionbox#1{\vbtbgbox{\ensuremath{\mat{#1}}}}
\def\V{\mathbf{V}}
\def\F{\mathbf{F}}
\def\Stop{\omit\vrule\phantom{$\scriptstyle($}\hss}
\def\Stop{\omit|\hss}
\def\HLine{\hline\\[0pt]}
\def\HLine{\hline}
\def\rarr{\ColorRed{⇒}}
% «defs-co» (to ".defs-co")
% From: (find-LATEX "2022on-the-missing.tex" "defs")
% \co: a low-level way to typeset code; a poor man's "\verb"
\def\co#1{{%
\def\%{\char37}%
\def\\{\char92}%
\def\^{\char94}%
\def\~{\char126}%
\tt#1%
}}
\def\qco#1{`\co{#1}'}
\def\qqco#1{``\co{#1}''}
% «defs-S» (to ".defs-S")
\input 2025-1-C2-S-defs.tex % (find-LATEX "2025-1-C2-S-defs.tex")
% «defs-picturedots» (to ".defs-picturedots")
%L dofile "PictureDots1.lua" -- (find-LATEX "PictureDots1.lua")
\pu
\def\picturedots(#1,#2)(#3,#4)#5{\expr{
PictureDots.from(#1,#2, #3,#4, "#5"):topict():pgat("patc")
}}
% «defs-processsubfile» (to ".defs-processsubfile")
% See: (find-LATEX "dednat7load.lua")
% «defs-pygvbt» (to ".defs-pygvbt")
%L dofile "Pygments1.lua" -- (find-LATEX "Pygments1.lua")
\pu
% «defs-T1-T2-T3-T4» (to ".defs-T1-T2-T3-T4")
% See: (find-LATEX "2025bad-foundations-lean.tex" "defs")
% (find-LATEX "2025bad-foundations-lean.tex" "T1-T2-T3-T4")
\input 2025bad-foundations-lean.tex % loads the defs
%L processsubfile "2025bad-foundations-lean.tex" -- runs the "defpygvbt"s
\pu
% Test:
% \vbt{T1 T2 T3 T4}
% (find-dednat7debug-links "~/LATEX/2025bad-foundations.tex")
%\doublespacing
%\newpage
% ;-- title
%
% _____ _ _ _
% |_ _(_) |_| | ___ _ __ __ _ __ _ ___
% | | | | __| |/ _ \ | '_ \ / _` |/ _` |/ _ \
% | | | | |_| | __/ | |_) | (_| | (_| | __/
% |_| |_|\__|_|\___| | .__/ \__,_|\__, |\___|
% |_| |___/
%
% «title» (to ".title")
% (bafp 1 "title")
% (bafa "title")
% (find-Deps1-cps "Caepro5 Piecewise2 Maxima3 PictureDots1")
% (find-dednat7debug-links "~/LATEX/2025bad-foundations.tex")
\title{Bad Foundations \\ and Manipulable Objects}
\author{%
Eduardo Ochs%
%{\large Eduardo Ochs}%
\thanks{eduardoochs@gmail.com}\\
%{\small UFF, Rio das Ostras, RJ, Brasil}\\
}
\maketitle
% «abstract» (to ".abstract")
% Orig: (favp 1 "abstract")
% (fava "abstract")
\begin{abstract}
Imagine a student---let's call him $E$, and make him a ``he''---that
is enrolled in Calculus 2, and who believes that to pass in Maths
courses he only needs to memorize methods and apply them quickly and
without errors. Let's imagine that $E$ is an extreme case of ``bad
foundations'', and that he knows how to solve $x+2=5$ by doing
$x=5-2=3$, but he doesn't know how to substitute the $x$ in $x+2=5$
by 3, and the only way that he knows of ``testing the solution'' is
to apply the same method again and check that he got the same
result.
When we are teaching Calculus to classes that have many students
that are extreme cases of bad foundations we need new strategies and
tools; for example, we can't pretend that ``taking a particular
case'' is an obvious operation anymore --- instead we need ways to
make these operations easy to visualize. This article shows a way to
do that using Maxima.
\end{abstract}
% ;-- dedic
% «dedic» (to ".dedic")
% (bafp 1 "dedic")
% (bafa "dedic")
% (wld2026p 4 "dedicatoria")
% (wld2026a "dedicatoria")
% (find-es "tex" "dedication")
\def\Dedic{
\begin{tabular}{l}
Para Walter Machado Pinheiro, \\
que não leu e não vai ler \\
documento nenhum, e se ler \\
não vai entender \\
\end{tabular}
}
\hfill\Dedic
% (find-books "__analysis/__analysis.el" "sfard" "241" "3. Rituals")
% (find-books "__analysis/__analysis.el" "tall-amt" "28" "Most mathematics instruction, from elementary school through college courses,\nteaches what might be called rituals")
% «toc» (to ".toc")
% (find-LATEX "2022on-the-missing.tex" "toc")
% (find-es "tex" "tocloft")
%\renewcommand{\cfttoctitlefont}{\bfseries}
%\setlength{\cftbeforesecskip}{2.5pt}
%\tableofcontents
% ;-- introduction
% «introduction» (to ".introduction")
\section{Introduction}
\label{Introduction}
Let me start by some stories. I teach Calculus 2 and 3 in a
low-prestige campus of a high-prestige federal university in Brazil,
and all the characters that I am going to mention are based on real
students that I had in Calculus 2 -- that I will sometimes abbreviate
as ``C2''.
% (find-books "__analysis/__analysis.el" "schoenfeld-wgt" "7" "Belief 3: Only geniuses")
% (find-books "__analysis/__analysis.el" "engelbrecht")
\msk
`B'en is a student that has `B'ad foundations and `E'ric is a student
who has `E'extremely bad foundations. They are taking Calculus 2 with
me, and in the second test, that has some questions abouts ODEs, they
commit the same error: they find $y=\sqrt{25-x^2}+3$ as the solution
of a certain ODE, and in the item in which they have to draw its
graph, they simplify $y=\sqrt{25-x^2}+3$ by doing this:
%
% (c2m252introp 5 "aprender-A-e-B")
% (c2m252introa "aprender-A-e-B")
% (c2m252introa "aprender-A-e-B" "x^2")
%
$$\begin{array}{rcl}
y &\eqnp{1}& \sqrt{25-x^2} + 3 \\
&=& \sqrt{5^2 - x^2} + 3 \\
&=& 5 - x + 3 \\
&=& 8 - x \\
\end{array}
$$
I tell them that in the third `$=$' sign they used a rule that is
invalid. They panic, and they say: ``oh no, sorry, we got distracted
-- that won't happen again!!!''. Then I ask them to tell me what rule
they used there, and I discover that they don't have any idea of what
I mean... for them Maths is about memorizing methods and applying
them; ``understanding'' is only for geniuses
(\cite[p.7]{SchoenfeldWhenGood}), and all their knowledge about Maths
is {\sl procedural}, not {\sl conceptual}
(\cite{EngelbrechtBergsten}). I will explain more about bad
foundations on section \ref{bad-foundations}.
\msk
% (find-books "__analysis/__analysis.el" "boaler" "33" "speed was very important")
`Q'uentin is a student who believes that the goal of learning Maths is
to get answers `Q'uickly (\cite[p.33]{Boaler}). In a test question
that asked to calculate $\intx{\sqrt{1-x^2}}$ his answer was just
this:
%
$$\frac12 \left( \arcsen(x) + x\sqrt{1-x^2} \right)$$
%
I tried to explain to him that the ``right'' answer to that question
would a calculation with many steps, in which each `=' would be ``easy
to understand, to justify, and to verify'', but none of my arguments
made any sense to him.
% {\sl but that was several semesters ago -- I believe that I have
% better arguments now.}
\msk
`F'abian is a student who is more `F'riendly and talkative than most.
He tells me that he had very good grades in Calculus 1 and that he was
very good at calculating derivatives, and I decide that he will be my
reference for understanding what the students know about `F'unctions.
I ask him to show me how he would calculate
$\ddx \sen(\cos(\tan(42x))$; he tries but he gets stuck, and my hints
don't help him. It turns out that he learned the Chain Rule by a
method similar to the one in \cite[p.154]{Stewart8}, in which he had
to {\sl remember} what are the ``outer function'', the ``inner
function'', and their derivatives; he didn't have a way to write these
four functions down on paper.
The method the Fabian learned is optimized for speed, and in complex
cases, like $\ddx \sen(\cos(\tan(42x))$, it needs a lot of working
memory to be carried out... and Fabian had a memory overflow.
\msk
% (wld2026p 29 "so-notacao")
% (wld2026a "so-notacao")
\sa{ddx sin(42x) diagram}{
\sa{nw}{\pmat{\ddx f(g(x)) = \\ f'(g(x))g'(x)}}
\sa{ne}{\pmat{\ddx f(42x) = \\ f'(42x)·42}}
\sa{sw}{\pmat{\ddx \sin(g(x)) = \\ \cos(g(x))g'(x)}}
\sa{se}{\pmat{\ddx \sin(42x) = \\ \cos(42x)·42}}
%
\begin{array}{ccc}
\ga{nw} & → & \ga{ne} \\\\[-5pt]
↓ & \searrow & ↓ \\\\[-5pt]
\ga{sw} & → & \ga{se} \\
\end{array}
}
{}
One day I ask all the students to calculate
$\ddx \,f(\sen(x^4) + \ln x)$. They all drop the `$f$', and the best
students get the result $\cos(x^4)·4x^3 + \frac{1}{x}$. I ask them how
they got there, and they say that the `$f$' was ``just notation'' and
meant ``function'', so they calculated ``the derivative of the
function $\sen(x^4) + \ln x$''.
I discuss that with Fabian, and I draw this diagram:
%
$$\ga{ddx sin(42x) diagram}$$
We name its nodes as $\sm{(1)&→&(2)\\↓&\searrow&↓\\(3)&→&(4)}$, and
Fabian tells me that (4) makes all sense to him and he recognizes (1)
as being the formula of the Chain Rule, but he doesn't have any idea
of what are (2) and (3).
% (find-books "__analysis/__analysis.el" "filloy-rojano" "19" "pre-symbolic algebra textbooks")
% (find-books "__analysis/__analysis.el" "stacey-chick" "189" "Luis Puig and Teresa Rojano")
% (find-books "__analysis/__analysis.el" "stacey-chick" "216" "non-operation on the unknown")
%
This reveals that the students know far less than they should, but is
not totally surprising -- we know that books written in the 13th, 14th
and 15th centuries didn't treat unknowns like `$x$' as entities with
the same algebraic properties as numbers (\cite{FilloyRojano},
\cite[p.216]{PuigRojano}), and the nodes (1), (2), and (3) in the
diagram above talk about unknown {\sl functions}, which is much worse
conceptually than unknown {\sl numbers}.
What did these students learn in Calculus 1? My colleagues share
practically nothing of their didactic strategies and teaching
materials, but they brag that in their courses they present
demonstrations, and that the students wouldn't see any demonstrations
if we let the engineers teach Calculus to them -- see
\cite{AhmadApplebyEdwards}...
Here's a hypothesis:
\begin{quote}
When my students took C1 they saw a version of the Chain Rule ``for
analysts'', in which (1) is a part of the statement of a theorem,
and in the full statement $f$ and $g$ are quantified -- either as
``for any $f,g:\R→\R$ differentiable everywhere'', or as something
like that but with different domains and different requirements of
differentiability -- but the students retained very little from what
they saw because they are in a ``procedural'' stage, and they didn't
know how to operate on those quantifiers.
\end{quote}
% (find-books "__analysis/__analysis.el" "pumpfilter" "62" "Carlson" "Gulick")
Let me take a paragraph from \cite[p.62]{CarlsonGulick}:
\begin{quote}
At the same time certain participants emphasized that the
fundamental concepts in calculus must remain in the course, along
with at least a certain amount of drill work to develop manipulative
skill. We must minimize the tedium of working problems where no
thought at all is necessary. A basic question is the following: What
would be an appropriate blend between geometrically-motivated
concepts, definitions and theorems, relevant applications, and
rigorous proofs?
\end{quote}
% ;-- subst-early
% «subst-early» (to ".subst-early")
% (bafp 7 "subst-early")
% (bafa "subst-early")
% Generated by:
% (find-angg "MAXIMA/2026-lpp.mac" "subst-early")
\sa {subst early} {\begin{pmatrix}&{\frac{d}{d\,x}}\,f\left(g\left(x\right)\right)\cr \mbox{ = }&f'\left(g\left(x\right)\right)\,g'\left(x\right)\cr \end{pmatrix}\,\begin{bmatrix}g\left(x\right) := 42\,x\cr g'\left(x\right) := 42\cr \end{bmatrix}=\begin{pmatrix}&{\frac{d}{d\,x}}\,f\left(42\,x\right)\cr \mbox{ = }&f'\left(42\,x\right)\,42\cr \end{pmatrix}}
In this article I will discuss an unusual answer for the question
``What would be an appropriate blend...?'' above. My proposal is that
{\sl when we have lots of students like the ones that I described
above} it is a good idea to present expressions and trees as some of
our most basic objects, and present this substitution operation
%
$$\ga{subst early}$$
%
very early in the course, before theorems and quantifiers.
\msk
\def\eqnp#1{\overset{\scriptscriptstyle{(#1)}}{=}}
\def\foo#1#2#3#4#5{ \text{#1} & #2 & =^#3 & #4 & \text{#5} \\ }
\def\foo#1#2#3#4#5{ \text{#1\;\;\;} & #2 & =^#3 & #4 & \text{\;\;\;#5} \\ }
\def\foo#1#2#3#4#5{ \text{#1\;\;\;} & #2 & \eqnp{#3} & #4 & \text{\;\;\;#5} \\ }
The figure below has a `L'eft part with particles `if', `then', and
`and', a `M'iddle part with equalities, and a `R'ight part with
justifications:
%
$$%
\begin{array}{rrcll}
\foo {If} {f(g(x))} {1} {x} {}
\foo {then} {\ddx f(g(x))} {2} {\ddx x} {by (1)}
\foo {and} {} {3} {1} {}
\foo {and} {\ddx f(g(x))} {4} {f'(g(x)) g'(x)} {the chain rule}
\foo {and} {f'(g(x)) g'(x)} {5} {1} {by (4), (2), (3)}
\foo {and} {g'(x)} {6} {1 / f'(g(x))} {by (5)}
\end{array}
$$
One day I write the part `M' on the blackboard and I ask the students
a) if that is how they learned that $\ddx \ln x = 1/x$ in Calculus 1,
and b) if all the steps are ``obvious'' to them. `ST'eve says that
that's not obvious at all, and asks me if I can make that clearer. I
show that we can write the columns `L' and `R', and I ask him what is
the first step that doesn't make sense to him. He answers that it's
`$\eqnp{5}$', and I write this expanded version:
%
$$%
\begin{array}{rrcll}
\foo {If} {f(g(x))} {1} {x} {}
\foo {then} {\ddx f(g(x))} {2} {\ddx x} {by (1)}
\foo {and} {} {3} {1} {}
\foo {and} {\ddx f(g(x))} {4} {f'(g(x)) g'(x)} {the chain rule}
\foo {and} {f'(g(x)) g'(x)} {5} {\ddx f(g(x))} {by (4)}
\foo {and} {} {6} {\ddx x} {by (2)}
\foo {and} {} {7} {1} {}
\foo {and} {f'(g(x)) g'(x)} {8} {1} {by (5), (6), (7)}
\foo {and} {g'(x)} {9} {1 / f'(g(x))} {by (5)}
\end{array}
$$
% (wld2026p 59 "variaveis-e-igual")
% (wld2026a "variaveis-e-igual")
% (find-books "__analysis/__analysis.el" "fischbein" "10" "The equals sign")
% (find-books "__analysis/__analysis.el" "rest-is-algebra" "179" "10.3 Equations")
%
We discover that `ST'eve did not know that the equality is `S'ymmetric
and `T'ransitive. He only knew three meanings for the `=' sign:
``compute'', ``simplify'', and ``solve this'' -- see for example
\cite[p.10]{FischbeinTacit} and \cite[p.179]{ThomasRethinking}.
% ;-- expandable-objects
% «expandable-objects» (to ".expandable-objects")
% (bafp 6 "expandable-objects")
% (bafa "expandable-objects")
\section{Expandable objects}
\label{expandable-objects}
% (find-books "__comp/__comp.el" "haskell-hutton" "174" "produce the following game tree")
% (c2m251stp 9 "tictactoe")
% (c2m251sta "tictactoe")
% ;-- game-trees
{\bf Game trees.} The tree below is {\sl essentially the same} as the
one in \cite[Section 11.8]{Hutton},
%
$$\def\TTT{\tictactoe}
\sa{tictactoe-O}{\ColorOrange{\textsf{O}}}
\sa{tictactoe-X}{\ColorOrange{\textsf{X}}}
\sa{tictactoe-X}{\ColorGreen{\textsf{X}}}
\scalebox{0.75}{$\mat{
\TTT o.. xxo xo. & \TTT oO. xxo xo. & \TTT ooX xXo Xo. \\\\[-6pt]
& & \TTT oo. xxo xoX & \TTT OOO xxo xox \\\\[-6pt]
& \TTT o.O xxo xo. & \TTT oXo xxo xo. & \TTT oxO xxO xoO \\\\[-6pt]
& & \TTT o.o xxo xoX & \TTT OOO xxo xoX \\\\[-6pt]
& \TTT o.. xxo xoO & \TTT oX. xxo xoo & \TTT oxO xxO xoO \\\\[-6pt]
& & \TTT o.X xXo Xoo \\
}$}
$$
%
but the one in Hutton's book has the root node at the top, has lines
from each parent node to its child nodes, and is in black and white;
our tree draws child nodes to the right, like this,
$\bsm{1 & 1.1 & 1.1.1 \\ && 1.1.2 \\ & 1.2 & 1.2.1}$, and uses colors
to indicate the most recent move and the winning lines.
Modern students are able to see immediately that the tree above is
something that could be drawn by a computer interface, and it is easy
for them to imagine that the interface has buttons that turn colors on
and off, that turns arrows on and off, that switches between that
layout and Hutton's, and that displays or hides other parts of the
tree. {\sl The full tree would be so big that we don't want to see all
of it} -- lots of objects in Mathematics are like that, and I will
call them {\sl expandable objects}.
\msk
% ;-- set-comprehensions
{\bf Set comprehensions.} Set comprehensions are also expandable
objects. We can calculate the results of simple set comprehensions,
like $\setofst{10a}{a∈\{2,3,4\}}$, by ``reading them aloud'' in the
right way, i.e., by translating the mathematical notation into
English; but if we need to explain our mental process, or to handle
more complex cases, we need other techniques -- like 1) annotating the
parts of the comprehension as ``generators'', ``filters'', and
``resulting expression'', 2) converting the two standard notations for
comprehensions, $\setofst{10a}{a∈\{2,3,4\}}$ and
$\setofst{a∈\{2,3,4\}}{a^2<5}$, to a unified notation in which the
resulting expression always appears at the right, 3) converting them
to programs, and 4) using trees to calculate the result. The figure
below shows (1), (2), and (3):
%
$$\scalebox{0.8}{$
\begin{array}{rcll}
\ga{compr a^2<10} &=& \ga{compr a^2<10 u} \\
&=& \ga{compr a^2<10 u;} & \ph{mm} \vbtsmash{compr a^2<10} \\
&=& \{4,9\} \\
\\
\ga{compr 10*a} &=& \ga{compr 10*a u} \\
&=& \ga{compr 10*a u;} & \ph{mm} \vbtsmash{compr 10*a} \\
&=& \{20,30,40\} \\
\end{array}
$}
$$
\unitlength=4pt
\def\closeddot{\circle*{0.6}}
Here is an example of (4):
%
% (wld2026p 13 "set-comprehensions-2")
% (wld2026a "set-comprehensions-2")
%
$$\ga{compr triangle u;} \;=\;
\ga{compr triangle dots} % \ph{mmmmm}
$$
%
$$\scalebox{0.8}{$
\vbtsmash{compr triangle}
\qquad
\myvcenter{\ga{compr triangle tree thin}}
\qquad
\myvcenter{\ga{compr triangle tree wide}}
$}
$$
Note that the two tree/tables above are ``simple'' in different ways:
in the one in the center it is obvious how we chose its columns, but
the one at the right is simpler to follow. See \cite{OchsNSC2026} for
more details and some class activities using set comprehensions.
\msk
% ;-- proofs-with-justs
% «proofs-with-justs» (to ".proofs-with-justs")
% (bafp 8 "proofs-with-justs")
% (bafa "proofs-with-justs")
{\bf Proofs with justifications.} For example:
%
% (wld2026p 10 "contas-expandiveis")
% (wld2026a "contas-expandiveis")
% (find-includegraphics-links "/tmp/example-6-just-4.pdf")
% (find-pdf-page "~/LATEX/2026logica-para-pessoas/example-6-just-4.pdf")
$$\includegraphics[width=12cm]{2026logica-para-pessoas/example-6-just-4.pdf}$$
%
Imagine that this is a proof of $((6x^3)(7x^4))' = 294x^6$ that has a
computer interface. We could toggle off the display of the
intermediate steps, and we would get just $((6x^3)(7x^4))' = 294x^6$,
but we told the computer a) to display it as a series of steps that
are easy to justify, b) to number its equalities, c) to highlight what
changed between the left hand side and the right hand side of
`$\eqnp{4}$', d) to show the name of the rule that was used there e)
to show that rule ``as a formula'', f) to show what particular case we
used there ($n=3$), and g) to show what that formula becomes in that
particular case.
% ;-- free-and-dependent
% «free-and-dependent» (to ".free-and-dependent")
% (bafp 8 "free-and-dependent")
% (bafa "free-and-dependent")
\section{Free and dependent variables}
Some people find dependent variables confusing. I was an extreme case
of that; I am not anymore, but I do believe that the students who find
dependent variables confusing deserve support -- like translations.
% (find-books "__analysis/__analysis.el" "apex-calculus" "101" "Example 2.5.2 Using the Chain Rule")
This is the first example of the chain rule in
\cite[p.101]{ApexCalculus4}, slightly reordered:
%
$$\def\Text#1{\text{#1:}\;\;\;}
%
\begin{array}{lrcl}
\Text{If} & y &=& f(g(x)) \\
\Text{then} & y' &=& f'(g(x))g'(x). \\
\Text{If} & f(x) &=& x^2 \\
\Text{and} & g(x) &=& 1-x \\
\Text{then} & f'(x) &=& 2x, \\
& g'(x) &=& -x, \\
& y &=& (1-x)^2, \\
& y' &=& 2(1-x)·(-1). \\
\end{array}
$$
We can use set comprehensions to make this more concrete to students
who don't understand equations well because they have problems with
free variables. The last two lines above say that the derivative of
the function with this graph
%
$$\setofst{(x,y)∈\R^2}{y=(1-x)^2}$$
%
is the function with this graph,
$$\setofst{(x,y')∈\R^2}{y'=2(1-x)·(-1)}$$
%
and we can change the $y'$ to $y$.
In the simplest examples, in which we can ignore the conditions on
smoothness and on domains, the chain rule is just
$\ddx f(g(x)) = f'(g(x))g'(x)$, and the derivative of the function
with this graph
%
$$\setofst{(x,y)∈\R^2}{y=f(g(x))}$$
%
is the function with this graph:
%
$$\begin{array}{cl}
& \setofst{(x,y)∈\R^2}{y=\ddx f(g(x))} \\
= & \setofst{(x,y)∈\R^2}{y=f'(g(x))g'(x)} \\
\end{array}
$$
Here is another way to write, and draw, that. If $f(x)=x^2$ and
$g(x)=1-x$ then $f'(x)=2x$ and $g'(x)=-1$, and:
$$\def\und#1#2{\underbrace{#1}_{\textstyle#2}}
% (find-pdf-page "~/LATEX/2026logica-para-pessoas/chainruleapex_001.pdf")
% (find-pdf-page "~/LATEX/2026logica-para-pessoas/chainruleapex_002.pdf")
\def\draw#1{\includegraphics[width=2cm]{2026logica-para-pessoas/chainruleapex_00#1.pdf}}
%
\sa {L1} {f(g(x))}
\sa {L2} {\und{\ga{L1}}{(1-x)^2}}
\sa {L3} {\und{\ga{L2}}{\draw{1}}}
%
\sa {R1} {f'(g(x))g'(x)}
\sa {R2} {\und{\ga{R1}}{2(1-x)·(-1)}}
\sa {R3} {\und{\ga{R2}}{\draw{2}}}
%
\scalebox{2.0}{$
\ddx \ga{L3} \;=\; \ga{R3}
$}
$$
% ;-- maxima
% «maxima» (to ".maxima")
% (bafp 10 "maxima")
% (bafa "maxima")
% (wld2026p 42 "maxima-arvores-e-subst")
% (wld2026a "maxima-arvores-e-subst")
% (find-angg "MAXIMA/2026-lpp.mac" "maxima-intro")
\section{Maxima}
Maxima is a computer algebra system that is very extensible, and in
which we can define new operators and set lots of properties for any
operators -- for example we can set how they are \LaTeX{}ed, as in the
examples in the first column below. Note that \qco{matrix} is
standard, \qco{bmatrix} uses \qco{\\begin\{bmatrix\}} and
\qco{\\end\{bmatrix\}}, that use square brackets, \qco{barematrix}
doesn't draw any outer brackets, and \qco{verbatimmatrix} uses a kind
of verbatim box.
The internal representation of \co{f(a,b)} is \co{((\$F SIMP) \$A
\$B)}, that is a tree in Lisp, in a format that is hard to
visualize. The result of \co{lisptreem(expr)} is the internal
representation of the result of \co{expr}, drawn as a 2D tree, as a
\qco{verbatimmatrix}.
The result of \co{lisptree2(expr)} includes the result of \co{expr}
and \co{lisptreem(expr)}.
The last input/output pair below, in \co{(\%i11)} and \co{(\%o11)},
shows how we can draw a series of equalities using a matrix.
%M (%i1) matrix([10,20],[30,40]);
%M (%o1) \begin{pmatrix}10&20\cr 30&40\cr \end{pmatrix}
%M (%i2) bmatrix([10,20],[30,40]);
%M (%o2) \begin{bmatrix}10&20\cr 30&40\cr \end{bmatrix}
%M (%i3) barematrix([10,20],[30,40]);
%M (%o3) \begin{matrix}10&20\cr 30&40\cr \end{matrix}
%M (%i4) verbatimmatrix(["a"], ["bcd"]);
%M (%o4) \myvcenter{\vbtbgbox{\vbox{\vbthbox{a}\vbthbox{bcd}}}}
%M (%i5) lisptreem(f(a,b));
%M (%o5) \myvcenter{\vbtbgbox{\vbox{\vbthbox{f\char95 \char95 .}\vbthbox{|\ \ |}\vbthbox{a\ \ b}}}}
%M (%i6) lisptree2(f(a,b));
%M (%o6) f\left(a , b\right)=\myvcenter{\vbtbgbox{\vbox{\vbthbox{f\char95 \char95 .}\vbthbox{|\ \ |}\vbthbox{a\ \ b}}}}
%L
%L maximahead:sa("mintro matrixes 1", "")
\pu
%M (%i7) lisptree2( matrix([10,20],[30,40]));
%M (%o7) \begin{pmatrix}10&20\cr 30&40\cr \end{pmatrix}=\myvcenter{\vbtbgbox{\vbox{\vbthbox{matrix\char95 \char95 .\ \ \ \ \ }\vbthbox{|\ \ \ \ \ \ \ |\ \ \ \ \ }\vbthbox{[\char95 \char95 \char95 .\ \ \ [\char95 \char95 \char95 .\ }\vbthbox{|\ \ \ |\ \ \ |\ \ \ |\ }\vbthbox{10\ \ 20\ \ 30\ \ 40}}}}
%M (%i8) lisptree2( bmatrix([10,20],[30,40]));
%M (%o8) \begin{bmatrix}10&20\cr 30&40\cr \end{bmatrix}=\myvcenter{\vbtbgbox{\vbox{\vbthbox{bmatrix\char95 \char95 .\ \ \ \ \ }\vbthbox{|\ \ \ \ \ \ \ \ |\ \ \ \ \ }\vbthbox{[\char95 \char95 \char95 .\ \ \ \ [\char95 \char95 \char95 .\ }\vbthbox{|\ \ \ |\ \ \ \ |\ \ \ |\ }\vbthbox{10\ \ 20\ \ \ 30\ \ 40}}}}
%M (%i9) lisptree2(barematrix([10,20],[30,40]));
%M (%o9) \begin{matrix}10&20\cr 30&40\cr \end{matrix}=\myvcenter{\vbtbgbox{\vbox{\vbthbox{barematrix\char95 \char95 .\ \ \ \ \ }\vbthbox{|\ \ \ \ \ \ \ \ \ \ \ |\ \ \ \ \ }\vbthbox{[\char95 \char95 \char95 .\ \ \ \ \ \ \ [\char95 \char95 \char95 .\ }\vbthbox{|\ \ \ |\ \ \ \ \ \ \ |\ \ \ |\ }\vbthbox{10\ \ 20\ \ \ \ \ \ 30\ \ 40}}}}
%M (%i10) lisptree2(verbatimmatrix(["a"], ["bcd"]));
%M (%o10) \myvcenter{\vbtbgbox{\vbox{\vbthbox{a}\vbthbox{bcd}}}}=\myvcenter{\vbtbgbox{\vbox{\vbthbox{verbatimmatrix\char95 \char95 .\ \ }\vbthbox{|\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ |\ \ }\vbthbox{[\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ [\ \ }\vbthbox{|\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ |\ \ }\vbthbox{a\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ bcd}}}}
%M (%i11) lisptree2(matrix([a,"=",b],["","=",c]));
%M (%o11) \begin{pmatrix}a&\mbox{ = }&b\cr &\mbox{ = }&c\cr \end{pmatrix}=\myvcenter{\vbtbgbox{\vbox{\vbthbox{matrix\char95 \char95 \char95 .\ \ \ \ \ \ }\vbthbox{|\ \ \ \ \ \ \ \ |\ \ \ \ \ \ }\vbthbox{[\char95 \char95 .\char95 \char95 .\ \ [\char95 \char95 .\char95 \char95 .}\vbthbox{|\ \ |\ \ |\ \ |\ \ |\ \ |}\vbthbox{a\ \ =\ \ b\ \ \ \ \ =\ \ c}}}}
%L
%L maximahead:sa("mintro matrixes 2", "")
\pu
\scalebox{0.6}{\def\colwidth{9cm}\firstcol{
\maximagavbox{0cm}{9cm}{mintro matrixes 1}
}\def\colwidth{9cm}\anothercol{
\maximagavbox{0cm}{9cm}{mintro matrixes 2}
}}
\newpage
% ;-- maxima-eq-reta
% «maxima-eq-reta» (to ".maxima-eq-reta")
% (bafp 11 "maxima-eq-reta")
% (bafa "maxima-eq-reta")
% (find-angg "MAXIMA/2026-lpp.mac" "eq-reta")
Remember that in our Section 1 `ST'eve knew very few meanings for the
equality sign. We can use the code below to show him more meanings --
that are written in the same way in mathematical notation but
differently in Maxima:
%M (%i1) P : [1,2]$
%M (%i2) Q : [3,-4]$
%M (%i3) f(x) := a*x + b$
%M (%i4) eq1 : f(P[1]) = P[2];
%M (%o4) b+a=2
%M (%i5) eq2 : f(Q[1]) = Q[2];
%M (%o5) b+3\,a=-4
%M (%i6) ab : solve([eq1,eq2], [a,b]);
%M (%o6) \left[ \left[ a=-3 , b=5 \right] \right]
%L
%L maximahead:sa("de-a-equacao-da-reta", "")
\pu
%M (%i7) subst(ab, f(x));
%M (%o7) 5-3\,x
%M (%i8) define(g(x), %);
%M (%o8) g\left(x\right):=5-3\,x
%M (%i9) g(1);
%M (%o9) 2
%M (%i10) g(3);
%M (%o10) -4
%L
%L maximahead:sa("de-a-equacao-da-reta 2", "")
\pu
%M (%i11) subst([a=-3,b=5], a*x+b);
%M (%o11) 5-3\,x
%L
%L maximahead:sa("de-a-equacao-da-reta 3", "")
\pu
\scalebox{0.6}{\def\colwidth{9cm}\firstcol{
\maximagavbox{0cm}{9cm}{de-a-equacao-da-reta}
}\def\colwidth{9cm}\anothercol{
\maximagavbox{0cm}{9cm}{de-a-equacao-da-reta 2}
}\def\colwidth{9cm}\anothercol{
% \maximagavbox{0cm}{9cm}{de-a-equacao-da-reta 3}
}}
Typing \qco{2+3;} and then \co{RET} means ``calculate this and show
the result''; \qco{\$} means ``calculate this and don't show the
result''; \qco{:} is assignment; \qco{:=} defines a function; \qco{eq1
: f(P[1]) = P[2]} stores an equality, as an expression, in \co{eq1};
\qco{solve([eq1,eq2], [a,b])} treats the equalities in \co{eq1} and
two equations to be solved and returns the solution as two other
equalities.
\def\und#1#2{\underbrace{#1}_{\textstyle#2}}
\msk
% ;-- substitution
% «substitution» (to ".substitution")
% (bafp 11 "substitution")
% (bafa "substitution")
\subsection{Substitution}
This, that is an expanded version of the \co{(\%i7)} above,
%
$$\maximagavbox{0cm}{9cm}{de-a-equacao-da-reta 3}
$$
%$$subst([a=-3,b=5], a*x+b);$$
%
is similar to the operation that we were using to obtain particular
cases of equations, but here we are ``obtaing a particular case'' of
an expression, \qco{a*x+b}, that is not an equation. In the notation
that we used in section \ref{expandable-objects} this would be
%
$$\und{(ax+b) \bmat{a:=-3 \\ b:=5}}{-3x+6}
$$
%
or:
%
$$(ax+b) \bmat{a:=-3 \\ b:=5} = -3x+6
$$
% ;-- subst-juxtaposition
% «subst-juxtaposition» (to ".subst-juxtaposition")
{\bf Juxtaposition.} In some cases, like $2(3+4)$, the juxtaposion
means an operation that was elided, but whose name we know, and we can
write it explicitly: $2·(3+4)$. In other cases the operation doesn't
have a standard notation, and we have to improvise. Let's use the
symbol `\standout{ap}' for application, and `\standout{s}' for
substitute:
%
$$\begin{array}{rcl}
2(y+z) & \rarr & 2·(y+z) \\
f(y+z) & \rarr & f \; \standout{ap} \; (y+z) \\
(a+b)[a:=42] & \rarr & (a+b) \; \standout{s} \; [a:=42] \\
\end{array}
$$
% (find-books "__comp/__comp.el" "harper" "6" "Variables are given meaning by substitution")
% (find-books "__logic/__logic.el" "hindley-seldin2" "7" "Definition 1.12 (Substitution)")
%
% (find-books "__analysis/__analysis.el" "drijvers-sae")
% (find-books "__analysis/__analysis.el" "drijvers-sae" "146" "Substitute a = 3 and b = 2 in:")
% (find-books "__analysis/__analysis.el" "drijvers-sae" "149" "formal sub-\\nstitution, which concerns replacing single variables with expressions")
% (find-books "__analysis/__analysis.el" "drijvers-sae" "167" "FORMAL SUBSTITUTION")
%
% (find-books "__analysis/__analysis.el" "freudenthal")
% (find-books "__analysis/__analysis.el" "freudenthal" "482" "16.14. Formal Substitution")
% (find-books "__analysis/__analysis.el" "freudenthal" "488" "16.18. The (formal) substitution")
%
This operation is common in Logic and Computer Science -- see for
example \cite[p.6]{Harper} and \cite[p.7]{HindleySeldin2008} -- but it
is mostly treated as ``obvious'' in other places; some exceptions are
\cite[p.146, p.149, p.167]{Kindt} and \cite[p.482 e p.488]{FreudenthalDPh}.
\msk
\sa{s a by 42}{\text{$a$ by 42}}
\sa{s a by 42}{\mat{\text{substitute}\\
{\text{$a$ by 42}}}}
% ;-- subst-proc-object
% «subst-proc-object» (to ".subst-proc-object")
% (bafp 12 "subst-proc-object")
% (bafa "subst-proc-object")
{\bf Process and object.} We can see the substitution as a process,
drawn as an arrow below,
%
$$a+b \xrightarrow{\ga{s a by 42}} 42+b
$$
%
% (find-sfardpage (+ 26 44) "3.1 Reification")
% (find-sfardtext (+ 26 44) "3.1 Reification")
%
that was reified, as in \cite[p.44]{Sfard}, and written as a suffix:
%
$$\sa{a by 42} {\text{$a$ by 42}}
\sa{a:=42} {\und{\mathstrut a:=42}{\ga{a by 42}}}
\sa{[a:=42]} {\und{[ \; \ga{a:=42} \;]}
{\ga{s a by 42}}}
%
(a+b) \;\; \ga{[a:=42]} = 42+b
$$
\msk
% ;-- subst-infix
% «subst-infix» (to ".subst-infix")
% (bafp 12 "subst-infix")
% (bafa "subst-infix")
%M (%i1) "_s_"(expr,substs) := subst(substs,expr)$
%M (%i2) infix("_s_")$
%M (%i3) (a+b) _s_ [a=42];
%M (%o3) b+42
%L
%L maximahead:sa("infix 1", "")
\pu
%M (%i1) diff(x^2, x);
%M (%o1) 2\,x
%M (%i2) 'diff(x^2, x);
%M (%o2) {\frac{d}{d\,x}}\,x^2
%L
%L maximahead:sa("infix 2", "")
\pu
%M (%i1) a+b=b+a;
%M (%o1) b+a=b+a
%M (%i2) a+.b=b+.a;
%M (%o2) a+b=b+a
%M (%i3) (a+.b=b+.a) _s_ [a=2,b=3];
%M (%o3) 2+3=3+2
%L
%L maximahead:sa("infix 3", "")
\pu
{\bf Infix.} In Maxima we can define new operators, and we can make
them infix, prefix, postfix, or n-ary. So we can do this, and
implement `\standout{s}' as \qco{}:
%
$$\scalebox{1.0}{
\maximagavbox{0cm}{9cm}{infix 1}
}
$$
% ;-- subst-lazy-ops
% «subst-lazy-ops» (to ".subst-lazy-ops")
% (bafp 12 "subst-lazy-ops")
% (bafa "subst-lazy-ops")
{\bf Simplification and lazyness.} The result in \qco{(\%o3)} above
was $b+42$, not $42+b$, because Maxima (almost) always simplifies
expressions, and its algorithm for simplifying sums can reorder and
collapse terms, and it can transform, for example, \co{2+3+4x+5x} into
\co{9x+5}.
Some functions in Maxima have versions that are less ``active'', in
the sense that they perform fewer simplifications. For example:
%
$$\scalebox{0.8}{$
\maximagavbox{0cm}{9cm}{infix 2}
$}
$$
%
In the terminology of Maxima \co{diff} is a ``verb'' and \co{'diff} is
a ``noun''.
\ssk
Another way to obtain operations that are simplified less, or that are
not simplified at all, is to create new operations and copy most of
the properties from the original versions to the copies, but omit the
properties that say how they are simplified. In the example below
\qco{+.} is a variant of \qco{+} that was created in that way:
%
$$\scalebox{0.8}{$
\maximagavbox{0cm}{9cm}{infix 3}
$}
$$
I call these less active operations ``lazy operations''.
\msk
\newpage
% ;-- subst-pretty
% «subst-pretty» (to ".subst-pretty")
% (bafp 13 "subst-pretty")
% (bafa "subst-pretty")
% See: (find-angg "MAXIMA/2026-lpp.mac" "pretty-subst")
%M (%i1) o : a+.b=b+.a$
%M (%i2) S : [a=2,b=3]$
%M (%i3) V(S);
%M (%o3) \begin{bmatrix}a := 2\cr b := 3\cr \end{bmatrix}
%M (%i4) lisptreem(V(S));
%M (%o4) \myvcenter{\vbtbgbox{\vbox{\vbthbox{bmatrix\char95 \char95 \char95 \char95 \char95 .\ \ \ \ \ \ \ \ \ }\vbthbox{|\ \ \ \ \ \ \ \ \ \ \ |\ \ \ \ \ \ \ \ \ }\vbthbox{[\ \ \ \ \ \ \ \ \ \ \ [\ \ \ \ \ \ \ \ \ }\vbthbox{|\ \ \ \ \ \ \ \ \ \ \ |\ \ \ \ \ \ \ \ \ }\vbthbox{becomes\char95 \char95 .\ \ becomes\char95 \char95 .}\vbthbox{|\ \ \ \ \ \ \ \ |\ \ |\ \ \ \ \ \ \ \ |}\vbthbox{a\ \ \ \ \ \ \ \ 2\ \ b\ \ \ \ \ \ \ \ 3}}}}
%M (%i5) o _ss_ S;
%M (%o5) \left(a+b=b+a\right)\,\begin{bmatrix}a := 2\cr b := 3\cr \end{bmatrix}
%M (%i6) o _sss_ S;
%M (%o6) \left(a+b=b+a\right)\,\begin{bmatrix}a := 2\cr b := 3\cr \end{bmatrix}=\left(2+3=3+2\right)
%M (%i7) o _ssu_ S;
%M (%o7) \underbrace{\left(a+b=b+a\right)\,\begin{bmatrix}a := 2\cr b := 3\cr \end{bmatrix}}_{\textstyle 2+3=3+2}
%L
%L maximahead:sa("pretty subst", "")
\pu
{\bf Prettifying.} The mathematical notation for parallel substitution
uses `:='s instead of `='s, puts each `:=' on a different line, and
uses square brackets. We can implement that with an operation \qco{V}
that pretty-prints the kinds of substitutions that \co{subst} expects,
like \co{[a=2,b=3]}, as \qco{bmatrix}es. The example below also shows
\qco{\_ss\_}, \qco{\_sss\_}, and \qco{\_ssu\_}, that use \qco{V} to
print substitutions in nice ways:
$$\scalebox{0.8}{$
\maximagavbox{0cm}{9cm}{pretty subst}
$}
$$
\msk
\newpage
% ;-- subst-functions
% «subst-functions» (to ".subst-functions")
% (bafp 13 "subst-functions")
% (bafa "subst-functions")
%M (%i1) o : f(g(x))$
%M (%i2) S1 : [f(x)=g(g(x)),
%M g(x)=f(f(x))]$
%M (%i3) S2 : [f=lambda([x],g(g(x))),
%M g=lambda([x],f(f(x)))]$
%M (%i4) subst(S1,o); /* wrong: */
%M (%o4) f\left(f\left(f\left(x\right)\right)\right)
%M (%i5) psubst(S1,o); /* wrong: */
%M (%o5) f\left(f\left(f\left(x\right)\right)\right)
%M (%i6) psubst(S2,o); /* ok: */
%M (%o6) g\left(g\left(f\left(f\left(x\right)\right)\right)\right)
%M (%i7) o _sss_ S2; /* ok: */
%M (%o7) f\left(g\left(x\right)\right)\,\begin{bmatrix}f := \lambda\left(\left[ x \right] , g\left(g\left(x\right)\right)\right)\cr g := \lambda\left(\left[ x \right] , f\left(f\left(x\right)\right)\right)\cr \end{bmatrix}=g\left(g\left(f\left(f\left(x\right)\right)\right)\right)
%M (%i8) o _sss_ S1; /* ok: */
%M (%o8) f\left(g\left(x\right)\right)\,\begin{bmatrix}f\left(x\right) := g\left(g\left(x\right)\right)\cr g\left(x\right) := f\left(f\left(x\right)\right)\cr \end{bmatrix}=g\left(g\left(f\left(f\left(x\right)\right)\right)\right)
%L
%L maximahead:sa("tricky subst", "")
\pu
{\bf Substituting functions.} Substitutions like
$\bsm{f(x):=x^2 \\ f'(x):=2x}$ are used a lot in Calculus, but they
are tricky to implement -- let's see why. We want to have this:
%
$$f(g(t)) \; \bmat{f(x):=g(g(x)) \\ g(x):=f(f(x))} \;=\; g(g(f(f(t))))$$
%
but look at this code:
%
$$\scalebox{0.8}{$
\maximagavbox{0cm}{9cm}{tricky subst}
$}
$$
%
\noindent both \qco{subst} and \qco{psubst}, that are Maxima
built-ins, don't do what we expect when we use \qco{S1}, but they work
well with \qco{S2}, in which we translated the functions to lambdas.
A good solution is to make \qco{\_s\_} translate functions to lambdas
when needed. Note that the lines \co{(\%i7)} and \co{(\%i8)} above
both yield $g(g(f(f(x))))$ -- that's because \qco{\_sss\_} calls this
more complex \qco{\_s\_}, that calls a function called
\qco{\_\_s\_fstolambdas} to perform this translation.
% (wld2026p 44 "subst-detalhes-tecnicos")
% (wld2026a "subst-detalhes-tecnicos")
% (find-2026lppvideo "48:13" "subst-detalhes-tecnicos")
% (find-2026lpplsubs "48:13")
% (find-books "__logic/__logic.el" "hindley-seldin2" "7" "Definition 1.12 (Substitution)")
% (find-books "__logic/__logic.el" "hindley-seldin2" "11" "1C β-reduction")
% (find-books "__logic/__logic.el" "hindley-seldin2" "14" "Theorem 1.32 (Church–Rosser theorem")
% (find-angg "MAXIMA/2025-1-s.mac" "_s_")
% Generated by:
% (find-angg "MAXIMA/2026-lpp.mac" "ggff")
\sa {ggff small} {f\left(g\left(t\right)\right)\,\begin{bmatrix}f\left(x\right) := g\left(g\left(x\right)\right)\cr g\left(x\right) := f\left(f\left(x\right)\right)\cr \end{bmatrix}=g\left(g\left(f\left(f\left(t\right)\right)\right)\right)}
\sa {ggff big} {\underbrace{\underbrace{f\left(g\left(t\right)\right)}_{\textstyle \myvcenter{\vbtbgbox{\vbox{\vbthbox{f}\vbthbox{|}\vbthbox{g}\vbthbox{|}\vbthbox{t}}}}}}_{\textstyle \myvcenter{\vbtbgbox{\vbox{\vbthbox{ap\char95 \char95 .\ \ \ \ }\vbthbox{|\ \ \ |\ \ \ \ }\vbthbox{f\ \ \ ap\char95 \char95 .}\vbthbox{\ \ \ \ |\ \ \ |}\vbthbox{\ \ \ \ g\ \ \ t}}}}}\,\underbrace{\underbrace{\underbrace{\begin{bmatrix}f\left(x\right) := g\left(g\left(x\right)\right)\cr g\left(x\right) := f\left(f\left(x\right)\right)\cr \end{bmatrix}}_{\textstyle \begin{bmatrix}f := λ\left(x , g\left(g\left(x\right)\right)\right)\cr g := λ\left(x , f\left(f\left(x\right)\right)\right)\cr \end{bmatrix}}}_{\textstyle \begin{bmatrix}f := λ\left(x , g\left(g\left(x\right)\right)\right)\cr g := λ\left(y , f\left(f\left(y\right)\right)\right)\cr \end{bmatrix}}}_{\textstyle \begin{bmatrix}f := \myvcenter{\vbtbgbox{\vbox{\vbthbox{λ\char95 \char95 .}\vbthbox{|\ \ |}\vbthbox{x\ \ g}\vbthbox{\ \ \ |}\vbthbox{\ \ \ g}\vbthbox{\ \ \ |}\vbthbox{\ \ \ x}}}}\cr g := \myvcenter{\vbtbgbox{\vbox{\vbthbox{λ\char95 \char95 .}\vbthbox{|\ \ |}\vbthbox{y\ \ f}\vbthbox{\ \ \ |}\vbthbox{\ \ \ f}\vbthbox{\ \ \ |}\vbthbox{\ \ \ y}}}}\cr \end{bmatrix}}=\underbrace{\underbrace{g\left(g\left(f\left(f\left(t\right)\right)\right)\right)}_{\textstyle \myvcenter{\vbtbgbox{\vbox{\vbthbox{g}\vbthbox{|}\vbthbox{g}\vbthbox{|}\vbthbox{f}\vbthbox{|}\vbthbox{f}\vbthbox{|}\vbthbox{t}}}}}}_{\textstyle \myvcenter{\vbtbgbox{\vbox{\vbthbox{ap\char95 \char95 \char95 \char95 .\ \ \ \ \ \ }\vbthbox{|\ \ \ \ \ |\ \ \ \ \ \ }\vbthbox{λ\char95 \char95 .\ \ ap\char95 \char95 \char95 \char95 .}\vbthbox{|\ \ |\ \ |\ \ \ \ \ |}\vbthbox{x\ \ g\ \ λ\char95 \char95 .\ \ t}\vbthbox{\ \ \ |\ \ |\ \ |\ \ \ }\vbthbox{\ \ \ g\ \ y\ \ f\ \ \ }\vbthbox{\ \ \ |\ \ \ \ \ |\ \ \ }\vbthbox{\ \ \ x\ \ \ \ \ f\ \ \ }\vbthbox{\ \ \ \ \ \ \ \ \ |\ \ \ }\vbthbox{\ \ \ \ \ \ \ \ \ y\ \ \ }}}}}}
%V "_s_"(obj, substs) := psubst(substs, obj);
%V infix("_s_");
%L defvbt("s")
\pu
Here's a way to visualize how this substitution works:
%
$$\ga{ggff big}$$
The path is $\psm{•&&•\\↓&&↑\\•&→&•}$, and in the last part, the
`$↑$', Maxima handles the $β$-reductions in the standard way, in which
Church-Rosser theorem guarantees that the order of the reductions
doesn't matter. See \cite[pages 7, 11, and 14]{HindleySeldin2008} for
the details, and note that the clause (g) in p.7 ``{\sl chang[es]
bound variables to avoid clashes}''.
\msk
A few years I thought that the right thing to do would be to implement
this `[:=]' in Lean ``to show how natural it is''. That turned to be
much harder than I expected, and to make things worse Lean doesn't
have a REPL and doesn't have a built-in \LaTeX{} generator... while in
Maxima \qco{\_\_s\_fstolambdas} is just 9 lines and the rest of
\qco{\_s\_} is just 6 lines. I wanted to convince people that this
`[:=]' is a natural operation, {\sl even though I couldn't find it
explained in details in the literature}, and showing how it can be
implemented in 15 lines in Maxima seemed to be a good way.
I will explain more reasons for not using Lean in the next section.
% ;-- subst-decyphering
% «subst-decyphering» (to ".subst-decyphering")
% DELETED
\newpage
% ;-- why-not-lean
% «why-not-lean» (to ".why-not-lean")
% (find-books "__analysis/__analysis.el" "bottoni")
% (find-books "__analysis/__analysis.el" "engelbrecht")
% (find-books "__comp/__comp.el" "yalep")
% (find-books "__comp/__comp.el" "yalep" "23" "B.1 A pedagogical progression")
% (find-books "__comp/__comp.el" "yalep-survey")
\section{Why not Lean?}
The ``right way'' to handle ``procedural students'' that don't know
anything about Logic would be to teach Logic to them. There is a very
good example of how to do that in \cite{Yalep} -- note in particular
the ``Pedagogical progression'' in its Appendix B -- and a comparison
with other computational approaches in \cite{YalepSurvey}... {\sl but
we don't have time for the right way.}
Let me quote a few sentences from
\cite[p.30]{BottoniTFM}:
\begin{quote}
However, Lean is not currently suitable for high school or
undergraduate university teaching. High school mathematics curricula
in Switzerland are already crowded, and introducing abstract topics
like first-order logic or natural induction would push the limits.
\end{quote}
The syllabus of Calculus 2 in my campus is huge, and it was hard to
cover it completely even when the students came in much better
prepared. I needed an approach in which a) the non-textbook material
would be just a small part of each class, b) the students with little
experience with computers would be able to follow almost everything,
and c) the programs would be easy to install at home, and easy to use
both at home and at the computer lab. So I ended up using Maxima with
the interface described in \cite{OchsEmacsConf2024}; my presentation
at the EBL 2025 (\cite{OchsEBL2025}) was about how people who
installed Maxima in that way could install Lean easily and then follow
a basic tutorial on Lean, but in Calculus 2 I show Lean very briefly,
just as a curiosity.
% (find-eev2024lsubs "0:42")
% (find-eev2024lsubs "18:00")
% [0:42--1:20, 18:00--end]
% (find-TH "math-b" "2025-ebl")
%\cite[0:42--1:20, 18:00--end]{OchsEmacsConf2024}
% but my situation is similar to the one described in \cite{EngelbrechtBergsten}.
% (find-sh "dict curriculum")
% (find-sh "dict syllabus")
% (find-sh "dict class")
% ;-- holes
% «holes» (to ".holes")
% (bafp 17 "holes")
% (bafa "holes")
%M (%i1) o : 2 +. 3 +. 4 = 2 +. 7;
%M (%o1) 2+3+4=2+7
%M (%i2) lisptree2(o);
%M (%o2) 2+3+4=2+7=\myvcenter{\vbtbgbox{\vbox{\vbthbox{=\char95 \char95 \char95 \char95 \char95 \char95 \char95 \char95 \char95 .\ \ \ \ }\vbthbox{|\ \ \ \ \ \ \ \ \ |\ \ \ \ }\vbthbox{+.\char95 \char95 .\char95 \char95 .\ \ +.\char95 \char95 .}\vbthbox{|\ \ \ |\ \ |\ \ |\ \ \ |}\vbthbox{2\ \ \ 3\ \ 4\ \ 2\ \ \ 7}}}}
%M (%i3) lisptree2(dpart(o,2,1));
%M (%o3) 2+3+4=\boxed{2}+7=\myvcenter{\vbtbgbox{\vbox{\vbthbox{=\char95 \char95 \char95 \char95 \char95 \char95 \char95 \char95 \char95 .\ \ \ \ \ }\vbthbox{|\ \ \ \ \ \ \ \ \ |\ \ \ \ \ }\vbthbox{+.\char95 \char95 .\char95 \char95 .\ \ +.\char95 \char95 \char95 .}\vbthbox{|\ \ \ |\ \ |\ \ |\ \ \ \ |}\vbthbox{2\ \ \ 3\ \ 4\ \ box\ \ 7}\vbthbox{\ \ \ \ \ \ \ \ \ \ |\ \ \ \ \ }\vbthbox{\ \ \ \ \ \ \ \ \ \ 2\ \ \ \ \ }}}}
%M (%i4) lisptree2(substpart("?",o,2,1));
%M (%o4) 2+3+4=\mbox{ ? }+7=\myvcenter{\vbtbgbox{\vbox{\vbthbox{=\char95 \char95 \char95 \char95 \char95 \char95 \char95 \char95 \char95 .\ \ \ \ }\vbthbox{|\ \ \ \ \ \ \ \ \ |\ \ \ \ }\vbthbox{+.\char95 \char95 .\char95 \char95 .\ \ +.\char95 \char95 .}\vbthbox{|\ \ \ |\ \ |\ \ |\ \ \ |}\vbthbox{2\ \ \ 3\ \ 4\ \ ?\ \ \ 7}}}}
%L
%L maximahead:sa("holes 1", "")
\pu
%M (%i5) S : [f (x)=x^3,
%M fp(x)=3*x^2,
%M g (x)=log(x)+x^2,
%M gp(x)=1/x+2*x]$
%M (%i6) o : RCV _ssu_ S;
%M (%o6) \underbrace{\begin{pmatrix}&{\frac{d}{d\,x}}\,f\left(g\left(x\right)\right)\cr \mbox{ = }&f'\left(g\left(x\right)\right)\,g'\left(x\right)\cr \end{pmatrix}\,\begin{bmatrix}f\left(x\right) := x^3\cr f'\left(x\right) := 3\,x^2\cr g\left(x\right) := \log x+x^2\cr g'\left(x\right) := 2\,x+{\frac{1}{x}}\cr \end{bmatrix}}_{\textstyle \begin{pmatrix}&{\frac{d}{d\,x}}\,\left(\log x+x^2\right)^3\cr \mbox{ = }&3\,\left(\log x+x^2\right)^2\,\left(2\,x+{\frac{1}{x}}\right)\cr \end{pmatrix}}
%M (%i7) mkholes(o, /* [1,2,1,1,2], */
%M [1,2,2,1,2],
%M [1,2,3,1,2],
%M [1,2,4,1,2],
%M [2,2,2]);
%M (%o7) \underbrace{\begin{pmatrix}&{\frac{d}{d\,x}}\,f\left(g\left(x\right)\right)\cr \mbox{ = }&f'\left(g\left(x\right)\right)\,g'\left(x\right)\cr \end{pmatrix}\,\begin{bmatrix}f\left(x\right) := x^3\cr f'\left(x\right) := \mbox{ ? }\cr g\left(x\right) := \mbox{ ? }\cr g'\left(x\right) := \mbox{ ? }\cr \end{bmatrix}}_{\textstyle \begin{pmatrix}&{\frac{d}{d\,x}}\,\left(\log x+x^2\right)^3\cr \mbox{ = }&\mbox{ ? }\cr \end{pmatrix}}
%L
%L maximahead:sa("holes 2", "")
\pu
\section{Holes}
Maxima comes with a function called \qco{dpath}, that expects an
object and a ``path'', and `d'isplays a box around subobject obtained
by following that path. In the examples below the path is \qco{2,1},
that means ``second child node, then first child node'':
%
$$\scalebox{0.8}{$
\maximagavbox{0cm}{9cm}{holes 1}
$}
$$
In the last line we used \qco{substpart("?", obj, <path>)}, that does
something similar to \qco{dpart} but replaces the object there by a
\qco{"?"}.
% (find-books "__analysis/__analysis.el" "freudenthal" "465" "7 + · = 12")
Note that in the example above we started with $2+3+4=2+7$, that is
{\sl true}, and we obtained $2+3+4=\Rq+7$, that is {\sl a problem}. I
will refer to the `$\Rq$' as a {\sl hole}; see
\cite[p.465]{FreudenthalDPh}.
Many exercises in Calculus books can be rewritten as true expressions
with holes. For example, the exercise 11 in
\cite[p.109]{ApexCalculus4} is ``compute the derivative
$\ddx (\ln x + x^2)^3$ using the chain rule'', and we can obtain
recreate as a problem with holes by doing this:
%
$$\scalebox{0.8}{$
\maximagavbox{0cm}{14cm}{holes 2}
$}
$$
This program is a {\sl manipulable object}: students can, for example,
duplicate the 4-line command with the definition of \qco{S}, modify
the substitutions in the copy, and run the new code in the REPL to see
what changes in the result...
\msk
\standout{TODO:} more examples!
% (find-books "__analysis/__analysis.el" "apex-calculus" "109" "Exercises 2.5")
% (adabp 14 "manga")
% (adaba "manga")
% ;-- bad-foundations
% «bad-foundations» (to ".bad-foundations")
% (bafp 18 "bad-foundations")
% (bafa "bad-foundations")
\section{Extremely Bad Foundations}
\label{bad-foundations}
% \ref{introduction}
In \cite{FeynmanJoking} Richard Feynman tells several stories about
his stays in Brazil and his experiences teaching classes here. This is
from one of them, about a class that he taught in 1952:
\begin{quote}
I taught a course at the engineering school on mathematical methods
in physics, in which I tried to show how to solve problems by trial
and error. It's something that people don't usually learn, so I
began with some simple examples of arithmetic to illustrate the
method. I was surprised that only about eight out of the eighty or
so students turned in the first assignment. So I gave a strong
lecture about having to actually {\sl try} it, not just sit back and
watch {\sl me} do it.
After the lecture some students came up to me in a little
delegation, and told me that I didn't understand the backgrounds
that they have, that they can study without doing the problems, that
they have already learned arithmetic, and that this stuff was
beneath them.
\end{quote}
% (find-books "__analysis/__analysis.el" "drijvers-sae" "180" "AN EXAMPLE: TRIAL-AND-IMPROVE")
We use the term ``Foundations of Mathematics'' for the axioms and
logical rules behind the maths that a person does; nowadays the most
common foundations are ZFC and Type Theories. I will use the
(non-standard) term ``Bad Foundations'' for people who don't know any
logical rules and who do mathematics by just memorizing methods and
applying them, and ``Extremely Bad Foundations'' for people who not
only have bad foundations but who also believe that all methods that
require trial and error -- or even trial-and-improve; see
\cite[p.180]{DrijversBoonReeuwijk} -- are wrong, and they refuse to
learn them.
\msk
Some courses are supposed to work like sieves that only let through
the students whose mathematical skills are fine enough. But the system
was already dysfunctional, and then we had COVID and now LLMs, and now
lots of very coarse students with Extremely Bad Foundations are
reaching classes like Calculus 2, and we need to do some something for
them that is better than just failing them, or, even worse, letting
them pass these advanced courses unchanged...
\msk
% (find-books "__analysis/__analysis.el" "mason" "4" "one part involved in calculation while another")
One idea -- {\sl that I am treating as a work in progress; I have only
a few examples ready, and they were tested only on small classes,
and without a rigorous methodology} -- is that we can use Computer
Algebra Systems like Maxima to treat some methods from Calculus as
expandable objects, make the computer draw the expanded versions of
some examples, and use that to show to students whe extremely bad
foundation how the other students think, and what are the steps that
they don't write down. It should be possible to use ``holes'' to
convert these expanded version into exercises, and if the students
with bad and extremely bad foundations do these exercises then it {\sl
may be possible} that they will develop certain pattern-matching
skills by drill, and they {\sl may} reach the point that John Mason
describes in \cite[p.4]{MasonShift}, in which there happens ``{\sl a
splitting of attention, [with] one part [of the mind] involved in
calculation while another part remains aloof but observant}''.
% (find-books "__analysis/__analysis.el" "stewart8" "639" "9.3 Separable Equations")
\msk
I will close with an example of the idea above. \cite[p.639]{Stewart8}
explains ODEs with separable variables starting by the method in the
general case, and doing some calculations with differentials that
include steps that many students find hard to believe; and then its
Example 1, in the following page, is $\dydx = \frac{x^2}{y^2}$, that
has solutions that are very hard to draw by hand...
% (wld2026p 40 "edovs-arquetipal")
% (wld2026a "edovs-arquetipal")
% Generated by:
% (find-angg "MAXIMA/2026-lpp.mac" "edovs-arquetipal")
\sa {EDOVS def [M]} {\ga{[M]}=\begin{pmatrix}{\frac{\textit{dy}}{\textit{dx}}}&\mbox{ = }&{\frac{g\left(x\right)}{h\left(y\right)}}\cr h\left(y\right)\,\textit{dy}&\mbox{ = }&g\left(x\right)\,\textit{dx}\cr \int {h\left(y\right)}{\;dy}\big.&\mbox{ = }&\int {g\left(x\right)}{\;dx}\big.\cr \mbox{ || }&&\mbox{ || }\cr H\left(y\right)+C_1 &\mbox{ = }&G\left(x\right)+C_2 \cr H\left(y\right)&\mbox{ = }&G\left(x\right)+C_3 \cr H^{-1}\left(H\left(y\right)\right)&\mbox{ = }&H^{-1}\left(G\left(x\right)+C_3 \right)\cr \mbox{ || }&&\cr y&&\cr \end{pmatrix}}
\sa {EDOVS def [A]} {\ga{[A]}=\begin{pmatrix}{\frac{\textit{dy}}{\textit{dx}}}&\mbox{ = }&{\frac{-\left(2\,x\right)}{2\,y}}\cr 2\,y\,\textit{dy}&\mbox{ = }&-\left(2\,x\right)\,\textit{dx}\cr \int {2\,y}{\;dy}\big.&\mbox{ = }&\int {-\left(2\,x\right)}{\;dx}\big.\cr \mbox{ || }&&\mbox{ || }\cr y^2+C_1 &\mbox{ = }&-x^2+C_2 \cr y^2&\mbox{ = }&-x^2+C_3 \cr \sqrt{y^2}&\mbox{ = }&\sqrt{-x^2+C_3 }\cr \mbox{ || }&&\cr y&&\cr \end{pmatrix}}
\sa {EDOVS def [S5]} {\ga{[S5]}=\begin{bmatrix}g\left(x\right) := -\left(2\,x\right)\cr h\left(y\right) := 2\,y\cr G\left(x\right) := -x^2\cr H\left(y\right) := y^2\cr H^{-1}\left(y\right) := \sqrt{y}\cr \end{bmatrix}}
\sa{[M]}{\CFname{M}{}}
\sa{[A]}{\CFname{A}{}}
\sa{[S5]}{\CFname{S5}{}}
For me the ``archetypal'' ODE with separable variables is
$\dydx = -\frac{x}{y}$, whose solutions are circles centered on
$(0,0)$, and the general method can be reconstruced from that
archetypal case. The archetypal case and the general method are:
%
$$\scalebox{0.8}{$
\ga{EDOVS def [A]}
\quad
\ga{EDOVS def [M]}
$}
$$
%
and the techniques for working on the ``archetypal case'' and the
``general case'' in parallel are explained in \cite{OchsIDARCT} and
\cite{OchsMD}. {\sl I hope to finish the details for this example
soon.}
% \cite{RestIsAlgebra}
% \cite{McGowen}
% \cite{Boaler}
% \cite{Hewitt1}
% \cite{Hewitt2}
% \cite{Hewitt3}
% (find-books "__analysis/__analysis.el" "mason" "4" "one part involved in calculation while another")
%\newpage
% ;-- references
% «references» (to ".references")
\printbibliography
\GenericWarning{Success:}{Success!!!} % Used by `M-x cv'
\end{document}
% «make-with-bib» (to ".make-with-bib")
% (misa "make-arxiv")
* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
cd ~/LATEX/
which biber
# biber --version
make -f 2019.mk STEM=2025bad-foundations veryclean
lualatex 2025bad-foundations.tex
biber 2025bad-foundations
lualatex 2025bad-foundations.tex
# (find-pdf-page "~/LATEX/2025bad-foundations.pdf")
% (find-pdfpages2-links "~/LATEX/" "2025bad-foundations")
% Local Variables:
% coding: utf-8-unix
% outline-regexp: "% +;--"
% ee-tla: "baf"
% End: