27
The type system of Axiom Erik Poll Radboud University of Nijmegen Erik Poll – p.1/28

The type system of Axiom - Radboud Universiteit - Radboud Universiteit

  • Upload
    others

  • View
    6

  • Download
    0

Embed Size (px)

Citation preview

Page 1: The type system of Axiom - Radboud Universiteit - Radboud Universiteit

The type system of AxiomErik Poll

Radboud University of Nijmegen

Erik Poll – p.1/28

Page 2: The type system of Axiom - Radboud Universiteit - Radboud Universiteit

• joint work with Simon Thompson at University of Kentat Canterbury (UKC)

• work done last century, so probably outdated in parts

Erik Poll – p.2/28

Page 3: The type system of Axiom - Radboud Universiteit - Radboud Universiteit

Mathoinformatics

Doing mathematics with a computer:

• Computer Algebra• eg. Mathematica, Maple• millions of users

(practitioners)

• Computer Logic (theorem proving)• eg. Automath, Mizar, Coq, PVS, HOL, . . .

Simplify, SAT & SMT solvers. . .• hundreds of users

(researchers, esp. computer scientists)

Erik Poll – p.3/28

Page 4: The type system of Axiom - Radboud Universiteit - Radboud Universiteit

Computer Algebra vs Logic

• Computer Algebra• usually untyped• bad at doing logic• unsound, due to unchecked side-conditions (eg.

continuity of function), silent switching from domain(eg. from real to complex numbers), etc

• Computer logic• usually typed• bad at doing algebra

A combination of computer logic and computer algebrawould be great . . .

Erik Poll – p.4/28

Page 5: The type system of Axiom - Radboud Universiteit - Radboud Universiteit

Axiom/Aldor

Axiom is a computer algebra system, that is unusual inhaving a rich strong type system.

Axiom comes with an associated programming language,Aldor, the Axiom extension language and library compiler.Aldor code runs inside the Axiom system.

The type system is (almost) expressive enough to encode alogic using the Curry-Howard-de Bruijn isomorphism,which offers a way to combine computer algebra withcomputer logic . . .

Erik Poll – p.5/28

Page 6: The type system of Axiom - Radboud Universiteit - Radboud Universiteit

History of Axiom/Aldor

• started life as Scratchpad by IBM, with a languageSpad in 1971.

• renamed to Axiom

• new compiler Aldor (aka A# and Axiom-XL) built byStephen Watt et.al. 1985-94

• sold to NAG (Numerical Algorithms Group) in mid 90’s

• open source since 2002:see www.aldor.org and www.nongnu.org/axiom

• there were rumours about linking Maple and Axiom,and using Aldor for Maple libraries; I don’t know whathappened to that.

Erik Poll – p.6/28

Page 7: The type system of Axiom - Radboud Universiteit - Radboud Universiteit

Aldor

• interpreted or compiled to Common Lisp or C, viaintermediate language FOAM (First Order AbstractMachine)

• includes a complete functional programminglanguage, with higher order functions etc.

• also has references, overloading, inheritance,subtyping, courtesy conversions, macros, multiplevalues . . .

• the type system is very expressive and complex

• to understand the type system we implemented a toolthat maps Aldor terms to type-annotated terms inHTML (using the type checker in the compiler)

Erik Poll – p.7/28

Page 8: The type system of Axiom - Radboud Universiteit - Radboud Universiteit

The type system of Axiom

Erik Poll – p.8/28

Page 9: The type system of Axiom - Radboud Universiteit - Radboud Universiteit

Types as values

Aldor provides explicit parametric polymorphism

polyid (T:Type, t:T) : T = t;

and treats types as first class citizens

idType (T:Type) : Type = T;

(Aldor allows overloading, so we could give both functions thesame name, but that would get confusing.)

Erik Poll – p.9/28

Page 10: The type system of Axiom - Radboud Universiteit - Radboud Universiteit

Types as values

Alternatively, using Aldor’s notation for λ,

polyid : (T:Type)->T->T

== (T:Type)(t:T):T +-> t;

idType : Type -> Type

== (T:Type):Type +-> T;

In Aldor, (λx:A.b) is written as (x:A):B +-> b

Erik Poll – p.10/28

Page 11: The type system of Axiom - Radboud Universiteit - Radboud Universiteit

Impredicativity and Type:Type

The type of the polymorphic identity is a type

PolyidType : Type == (T:Type)->T -> T;

In fact, Type is a type

MyType : Type == Type;

MyTypeArrowType : Type == Type -> Type;

MyType2 : Type == (polyid Type) Type ;

Warning: application associates to the right!

Erik Poll – p.11/28

Page 12: The type system of Axiom - Radboud Universiteit - Radboud Universiteit

Categories

Aldor provides a powerful notion of abstract datatype

Monoid : Category == BasicType with {

1 : %;

* : (%,%) -> %

}

Intuitively, this is the type of all monoids.

In type theory, ΣX:Type.Record(1:X,*:X×X->X)

Erik Poll – p.12/28

Page 13: The type system of Axiom - Radboud Universiteit - Radboud Universiteit

Domains

Elements of categories are domains

IntegerAdditiveMonoid : Monoid == add {

Rep == Integer;

import from Integer;

1 : % == per 0;

(x:%)*(y:%) : % == per((rep x) + (rep y))

}

Here per:%->Rep and rep:Rep->% are conversionfunctions between the abstract carrier % and the concreterepresentation Integer.

NB. no guarantee that elements of Monoid are monoids!

Erik Poll – p.13/28

Page 14: The type system of Axiom - Radboud Universiteit - Radboud Universiteit

Inheritance

Categories can extend other categories, eg.

Monoid : Category == BasicType with {

1 : %;

* : (%,%) -> %

}

extends

BasicType : Category == with {

= : (%,%) -> %;

}

This provides a rich subtyping hierarchy

Erik Poll – p.14/28

Page 15: The type system of Axiom - Radboud Universiteit - Radboud Universiteit

Aldor’s category hierarchy

Erik Poll – p.15/28

Page 16: The type system of Axiom - Radboud Universiteit - Radboud Universiteit

Category as values

Categories are first-class citizens, eg.

FancyOutput(c:Category) : Category

== c with { prettyPrint : % -> BoundingBox };

In fact, Category is a type

MyCategory : Type == Category;

Erik Poll – p.16/28

Page 17: The type system of Axiom - Radboud Universiteit - Radboud Universiteit

Dependent types

Aldor supports dependent types, eg. we can define

Vector: (n:Integer) Type;

vectorSum: (n:Integer) -> Vector(n) -> Integer;

append: (n:Integer,m:Integer,Vector(n),Vector(m))

-> Vector(n+m);

This suggests Aldor is powerful enough to code up a logic,using the Curry-Howard-de Bruijn isomorphism.

Erik Poll – p.17/28

Page 18: The type system of Axiom - Radboud Universiteit - Radboud Universiteit

Axioms in Aldor

Eg using dependent types we could include the monoidaxioms in the Monoid category, as follows

Monoid : Category == BasicType with {

1 : %;

* : (%,%) -> %

leftUnit(x:%) : (1*x=x);

rightUnit(x:%) : (x*1=x);

assoc(x:%,y:%,z:%) : (x*(y*z)=(x*y)*z);

}

However, . . .

Erik Poll – p.18/28

Page 19: The type system of Axiom - Radboud Universiteit - Radboud Universiteit

Limits of Aldor: type conversion

Aldor performs no computation in types during typechecking.

So

append (2,3,vec2,vec3) : Vector(2+3)

but not

append (2,3,vec2,vec3) : Vector(5)

As Aldor is not strongly normalising, this shouldn’t reallysurprise us.

Erik Poll – p.19/28

Page 20: The type system of Axiom - Radboud Universiteit - Radboud Universiteit

Limits of Aldor: type conversion

Another example

eight : Integer == 8;

but not

idType (T:Type) : Type = T;

seven : idType(Integer) == 7;

Erik Poll – p.20/28

Page 21: The type system of Axiom - Radboud Universiteit - Radboud Universiteit

Logic with Aldor (1)

We could use Aldor as a logic if we

• extended Aldor to allow with type conversion,

• imposed restrictions to avoid inconsistencies by eg.Girard’s paradox or nonterminating functions.

• Simon Thompson and Leonid Timochouck definedAldor- -, a purely functional language, a subset ofAldor, that does support evaluation in types.

Erik Poll – p.21/28

Page 22: The type system of Axiom - Radboud Universiteit - Radboud Universiteit

pretend

Aldor is not type safe, as it has the following pretendconstruct:

t:T S:Type

(t pretend S) : S

We can use pretend in those places where the typechecker fails to compute/convert types.

Erik Poll – p.22/28

Page 23: The type system of Axiom - Radboud Universiteit - Radboud Universiteit

pretend

We can use pretend to fix the problematic examplesearlier

append (2,3,vec2,vec3) pretend Vector(5)

: Vector(5)

seven : idType(Integer)

== 7 pretend idType(Integer);

Every use of pretend induces a proof obligation

Erik Poll – p.23/28

Page 24: The type system of Axiom - Radboud Universiteit - Radboud Universiteit

Logic with Aldor (2)

We could use Aldor as a logic if we

• emit a proof obligation for every use of pretend

• imposed restrictions to avoid inconsistencies by eg.Girard’s paradox or nonterminating functions.

• We could use pretend not just for computations intypes, but also to conjure up proofs for say that somestructure is a monoid, some function is continuous,etc.

• We could choose not to prove the obligations, butsimply use pretend as a lightweight formal method tokeep track of assumptions that are made.

Erik Poll – p.24/28

Page 25: The type system of Axiom - Radboud Universiteit - Radboud Universiteit

Conclusions

• Several ways of combining computer algebra andtheorem proving have been proposed; exploiting thetype system of Aldor is another.

• Reasoning could be supported by extending (a subsetof) Aldor to compute with types when typechecking, orby exporting proof obligations for every use ofpretend.

• Restrictions would be needed to avoid inconsistenciesby eg. Girard’s paradox or nonterminating functions.

• Different levels of rigour are possible, eg. one couldsimply use pretend to document assumptions thatare made.

Erik Poll – p.25/28

Page 26: The type system of Axiom - Radboud Universiteit - Radboud Universiteit

Links and references

• Aldor : www.aldor.org

• Axiom : www.nongnu.org/axiom

Papers:

• The type system of Aldor. Erik Poll and SimonThompson, 1999.

• Adding the axioms to Axiom. Erik Poll and SimonThompson, 1999.

• Logic and dependent types in the Aldor ComputerAlgebra System. Simon Thompson, 2000.

• The Aldor- - language. Simon Thompson and LeonidTimochouck, 2001.

Erik Poll – p.26/28

Page 27: The type system of Axiom - Radboud Universiteit - Radboud Universiteit

Computation in types

Computation in types is not without drawbacks!

• decidabilityTyping effectively becomes semi-decidable:eg. deciding Vector(Ack(100,100)+1) =Vector(1+Ack(100,100)), where Ack is Ackermanfunction, takes ages.(This does not appear to be a problem in practice?)

• abstractionWhether Vector(x+0) = Vector(x) depends ondefinition of +.So definition of a function like + (and the intensionalequality its provides) affects all theories that use it.

Erik Poll – p.27/28