Algorithms, term rewriting and compile time reflection
thedeemon via Digitalmars-d
digitalmars-d at puremagic.com
Thu Oct 23 02:41:02 PDT 2014
On Wednesday, 22 October 2014 at 23:09:17 UTC, Ola Fosheim
Grøstad wrote:
> I would always assume it has been done plenty of work related
> to proving properties about a program since this is the holy
> grail of CS!
>
> I think it is related to so-called dependent types?
> http://en.wikipedia.org/wiki/Dependent_type
Yes, dependent types allow expressing properties like the ones
you describe. However
a) it's not easy at all even for simple data structures, often
requiring defining many additional types and lemmas,
b) checking them requires turning your compiler into a
proof-checker,
c) what works in "clean room" (like high-level total functional
language) is hardly feasible in a "dirty" language like D where
you can go as unsafe as you want.
> I'd like to take a look at Xanadu some time…
> http://www.cs.bu.edu/~hwxi/Xanadu/Xanadu.html
That's obsolete, I guess, better take a look at ATS language from
the same author. It's really really close to what you're thinking
of here, minus the rewriting.
> And Agda which also guarantee termination!
> http://en.wikipedia.org/wiki/Agda_(programming_language)
Yep, all dependently typed languages like Agda, ATS or Idris
require the functions you use in types to be terminating
(otherwise your proofs become unsound and worthless) and they all
include termination checking.
To scare you well, here, for example, is my Smoothsort
implementation in ATS
http://stuff.thedeemon.com/lj/smooth_dats.html
that includes proofs that the array really gets sorted and the
Leonardo heaps used in the process have proper form and
properties. Writing it took me a few weeks. You don't want to
turn D into this mess. ;)
More information about the Digitalmars-d
mailing list