> 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 <axiom...@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