axiom-developer
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Lean4 and dependent type theory


From: Jeremy Avigad
Subject: Re: Lean4 and dependent type theory
Date: Fri, 3 Dec 2021 13:20:46 -0500

> Are you aware of any LEAN4 design documents that addresses these questions?

No. The best reference for Lean's type system is Theorem Proving in Lean; a version has been ported to Lean 4.

Jeremy

On Fri, Dec 3, 2021 at 12:04 PM Tim Daly <axiomcas@gmail.com> wrote:
Axiom allows the user to dynamically create dependent types.
For example, matrix(3,3) is a 3x3 matrix. This may
seem trivial but it is not.

Consider that to construct the "domain" (as it is called
in Axiom) of 3x3 matrices you need to evaluate the
arguments. Again, in this case it is trivial but, in general,
it is not. Among other things it defines what functions
are available to manipulate 3x3 matrices, e.g. inverse.

Several issues arise. One is the "representation" (aka
"carriers" in logic-speak). There is no reason to assume
that the entries are integers. In the new Axiom (aka SANE)
the "representation" is orthogonal to the domain and can
be specified at construction.

Axiom allows matrices that contain anything. When
constructing a new matrix, e.g. [[2.3,...],[4.4,...]..] the
entries may be from other "domains", in this case the
floats. But they could just as well be polynomials. So
from matrix(3,3) you need to dynamically construct
matrix(3,3,FLOAT).

Another issue is inheriting theorems and definitions that
support the newly constructed domain. In the new Axiom,
the theorems and definitions are associated with the
"category hierarchy". They are inherited based on the
dynamically constructed domain. These are available to
prove functions in the constructed domain.

A matrix(3,3) is commutative but matrix(3,4) is not. The
property of commutativity is inherited from the hierarchy
but only for square matrices. This has to be decided at
the time the domain is constructed.

This allows proofs of functions in the 3x3 domain to use
the commutative theorems of square matrices. These
are not available for functions in the 3x4 domain.
So, clearly, we need to evaluate the arguments when
constructing the domain.

Ah, but evaluating the arguments of a dependent type is
NOT trivial in general. You could, for example, construct
domains which contain themselves in the argument,
such as matrix(matrix(...

More fun exists because one could, for example, introduce
a new "category" into the hierarchy that has additional
definitions and theorems related to square matrices over
some new domain. These have to be dynamically inherited
in particular cases.

Worse yet, the elements don't have to be PROP but
could be anywhere in the type hierarchy. The elements
could be functors, for example.

I've spent a great deal of time pondering these problems.

My current "solution path" involves constructing objects
in CLOS (Common Lisp Object System) which allows me
to achieve very fine-grained control due to the MOP
(Meta Object Protocol). In addition, I'm trying to make the
domains as "declarative" as possible so that most of the
details are not hidden in obscure code.

CLOS allows both dynamic construction and dynamic
re-shaping. I have no idea how LEAN4 will handle these
without the MOP.

Are you aware of any LEAN4 design documents that addresses
these questions?


reply via email to

[Prev in Thread] Current Thread [Next in Thread]