Giter VIP home page Giter VIP logo

systemfr's Introduction

System FR Build Status

System FR's logo

Description

This project aims to formalize in Coq part of the Stainless project. It describes a call-by-value lambda-calculus and defines a rich type system (based on computations) that describes behaviors of lambda-calculus terms. Supported types include: System F polymorphism, recursive types, infinite intersections, refinement and dependent types, equality types.

Requirements

The proofs require Coq and Coq-Equations, which can be installed using opam with the coq and coq-equations packages. Some instructions are available here and there.

  • Coq 8.14.0
  • Coq-Equations 1.3.0+8.14

Compiling the Proofs

After installing Coq, you can compile the proofs using:

./configure
make -j4     # should take around 25 minutes

Overview of the proofs

All trees (for terms and for types) are defined in Trees.v. The operational semantics is given in SmallStep.v. The semantic definition of types is given in ReducibilityDefinition.v. We then prove soundness of inference rules for these types in the Erased*.v files (for erased terms) and in the Annotated*.v files (for annotated terms).

The file dependencies.pdf has an overview of the dependencies between all files.

Proofs for Scala Dependent Types project

We prove the following properties and the soundness of the typing rules. We rely on the following assumptions:

  • The terms and types appearing in goals/context satisfy some well-formedness conditions
  • The types are appearing in goals/context are non-empty
  • Inferred types are always syntactically singletons
  • During delta-beta reduction, the term being evaluated has type T_top (or equivalently, another arbitrary type)
  • In untangle (Untangle.v), we know which terms have the Tau property, and we rely on the abstract model of update and tlookup specified using axioms in TauProperty.v

Properties

  • widen gives a larger type widen_open_subtype in InferApp.v
  • delta_beta_reduction gives observationally equivalent terms: delta_beta_obs_equiv in DeltaBetaReduction.v
  • untangle returns an equivalent type untangle_open_equivalent_types in Untangle.v

Normalization Rules

Inference Rules

Subtyping Rules

systemfr's People

Contributors

clementblaudeau avatar jad-hamza avatar pialex99 avatar romac avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.