## NOTE-3-5(R)

ACL2 Version 3.5(r) (May, 2009) Notes
```Major Section:  RELEASE-NOTES
```

Please also see note-3-5 for changes in Version 3.5 of ACL2.

This release incorporates improvements from Ruben Gamboa in support for non-standard analysis in ACL2(r), in the following ways:

ACL2(r) now supports non-classical objects that are not also numeric, e.g., non-classical cons pairs. Consequently, the built-in `standard-numberp` has been replaced with `standardp`.

If `f` is a classical function, the value `(f x1 ... xn)` is guaranteed to be standard when the `xi` are standard. ACL2(r) can now recognize this fact automatically, using `defun-std`. For example, the following can be used to assert that the square root of 2 is a standard value.

```(defthm-std sqrt-2-rational
(standardp (acl2-sqrt 2)))
```
More generally, the expression `(f x1 ... xn)` can contain free variables, but the result is guaranteed to be standard when the variables take on standard variables, as in the following:
```(defthm-std sqrt-x-rational
(implies (standardp x)
(standardp (acl2-sqrt x))))
```

A potential soundness bug in `encapsulate` was fixed. Specifically, when a classical, constrained function is instantiated with a lambda expression containing free variables, it may produce non-standard values depending on the values of the free variables. This means that the functional instantiation cannot be used to justify a non-classical theorem. For example, consider the following sequence:

```(encapsulate
((f (x) t))
(local (defun f (x) x)))
(defthm-std f-x-standard
(implies (standardp x)
(standardp (f x))))
(defthm plus-x-standard
(implies (standardp x)
(standardp (+ x y)))
:hints (("Goal"
:use ((:functional-instance f-x-standard
(f (lambda (x) (+ x y))))))))
(defthm plus-x-eps-not-standard
(implies (standardp x)
(not (standardp (+ x (/ (i-large-integer)))))))
(defthm nil-iff-t
nil
:hints (("Goal"
:use ((:instance plus-x-standard
(y (/ (i-large-integer))))
(:instance plus-x-eps-not-standard)))))
```

ACL2(r) also supports the introduction of non-classical functions with `defchoose`. These behave just as normal functions introduced with `defchoose`, but they have a non-classical choice property.

Finally, ACL2(r) now comes with a revamped library supporting non-standard analysis, still distributed separately as `books/nonstd/`. The new library uses `defchoose` to state more natural and useful versions of the IVT, MVT, etc. It also supports the introduction of inverse functions, e.g., logarithms. Finally, the library has much more extensive support for differentiation.