  We present semantic correctness proofs of forward-mode Automatic
Differentiation (AD) for languages with sources of partiality such as partial
operations, lazy conditionals on real parameters, iteration, and term and type
recursion. We first define an AD macro on a standard call-by-value language
with some primitive operations for smooth partial functions and constructs for
real conditionals and iteration, as a unique structure preserving macro
determined by its action on the primitive operations. We define a semantics for
the language in terms of diffeological spaces, where the key idea is to make
use of a suitable partiality monad. A semantic logical relations argument,
constructed through a subsconing construction over diffeological spaces, yields
a correctness proof of the defined AD macro. A key insight is that, to reason
about differentiation at sum types, we work with relations which form sheaves.
Next, we extend our language with term and type recursion. To model this in our
semantics, we introduce a new notion of space, suitable for modeling both
recursion and differentiation, by equipping a diffeological space with a
compatible $\omega$cpo-structure. We demonstrate that our whole development
extends to this setting. By making use of a semantic, rather than syntactic,
logical relations argument, we circumvent the usual technicalities of logical
relations techniques for type recursion.
