User loginNavigation |
LtU ForumTuples, functions, ghost functions and higher order functionsSoftware verification depends on clearly specified functions with well defined properties. Functions can be objects by themselves, i.e. they should be first class values. Tuples can be used to treat functions with zero, one or more arguments and one or more return values uniformly. The article Tuples and functions demonstrate the versatility of tuples. Functions might be computable or not computable. Clearly, in actual computations only computable functions can be used. However on the assertions level (when one reasons about computations) not computable functions are a powerful tool (as long as the functions are well defined). Ghost functions can be defined to fill this gap. Higher order functions (i.e. functions that take functions as arguments and/or return functions as values) are standard in functional programming style. Higher order functions help to reason about software and can structure the assertions needed. The article Ghost functions and higher order functions describes the basic concepts. By hbrandl at 2012-04-30 14:55 | LtU Forum | login or register to post comments | other blogs | 5572 reads
Evaluating the Design of the R LanguageFrom our recent discussion on R, I thought this paper deserved its own post (ECOOP final version) by Floreal Morandat, Brandon Hill, Leo Osvald, and Jan Vitek; abstract:
Excerpts from the paper:
But then, they do a corpus analysis to see what features programmers actually use! We don't do enough of these in PL; examples from the paper:
And so on. A lot of great data-driven insights. By Sean McDirmid at 2012-04-25 00:34 | LtU Forum | login or register to post comments | other blogs | 29511 reads
Inheritance and formal verification of softwareInheritance is an important technique for abstraction in object oriented software. Functional languages like Haskell have some form of inheritance of concepts as well (e.g. the class Eq). Verification techniques should therefore take inheritance into account. By looking further into the topic it becomes evident that inheritance is a good vehicle for program verification as well i.e. inheritance helps verification. Abstract classes can make some assumptions and prove some other properties based on the assumptions and the defined functions within the absract class. A descendant of the abstract concepts just needs to substantiate the assumptions and can inherit all the proved proved properties of the abstract concept. This technique is described in the article "inheritance" and demonstrated with some examples like equality, partial order and total order. By hbrandl at 2012-04-24 14:23 | LtU Forum | login or register to post comments | other blogs | 4715 reads
FreneticFrenetic is a Python-embedded combinator notation for writing the control software for OpenFlow software-defined networking switches. Frenetic: A High-Level Language for OpenFlow Networks:
Frenetic: A Network Programming Language:
A Compiler and Run-time System for Network Programming Languages:
By Tommy McGuire at 2012-04-23 01:52 | LtU Forum | login or register to post comments | other blogs | 5218 reads
Specification and implementation of modules in Modern EiffelThe article talks about modules in Modern Eiffel (a variant of Eiffel which allows static verification). The main points are 1. integration of functional and object oriented style 2. physical separation of specification and implementation ad 2: This separation is not only possible for functions and procedures, but also for assertions. I.e. the specification part includes only the assertions. The proofs can reside in the implementation part of a module. By hbrandl at 2012-04-21 16:47 | LtU Forum | login or register to post comments | other blogs | 4271 reads
Why and How People Use RCompelling lecture by John Cook Certified Programming with Dependent Types: home stretch!For the last few years, I've been working on Certified Programming with Dependent Types, a book giving a pragmatic introduction to the Coq proof assistant. The drafts have been available for free online, and future versions should be as well; but I'm also working toward a traditional print version from MIT Press. I've recently finished the last non-trivial content changes that I've had planned, so I write to you to ask for your help in finding the last mistakes and opportunities for improvement! Once everything is in good shape, I can move forward with traditional publication. There are a few categories of known issues. One is font choice and other typesetting; this is coming from coqdoc, Coq's documentation generation program, and I expect to need to jump into the coqdoc source code to an extent, to get everything looking pretty without excessive countermeasures in the book source code. Where I could especially use help is finding appropriate citations to research papers and so on. There are few subjects that I'm already looking for the right citations on, and I figure LtU is a great place to find people who have favorites in these categories. So, could you please let me know if you have a citation to recommend for any of the following?
I'll also appreciate advice on any other points in the text that you think deserve citations, and I'll appreciate suggestions the most if they come with suggested citation targets. :) And any other finding of typos, confusing prose, and so on will be much appreciated! You can e-mail me or reply to this post, as seems appropriate. Thanks in advance! I'm looking forward to getting the book out there. Symmetry in type systemsType systems exhibit a certain symmetry that causes almost all features to be duplicated. For example: sums & products, covariance & contravariance, unions & intersections, universals & existentials, exstensible records & extensible variants, etc. In each case you can transform one into the other with callbacks (continuation passing). Even a function type like What should I read to understand this two-sidedness better? Some question I have are: in physics when there is symmetry in a problem, it can often be eliminated to make the problem simpler. Can the symmetry in type systems be eliminated? For example you can imagine a purely CPS language where you have a type K(T) that represents a continuation that takes a T. Then you have Another question is: does it make sense to separate the two pieces of a type? For example does it make sense to have a function type that only says "when given an int, v produces a string" but does not guarantee that the continuation will only call it with an int (perhaps in combination with other features like intersection and union)? Does this two-sidedness arise in other languages, like logic languages, where it's not so clear what are inputs and what are outputs? Reverend Bayes, meet Countess Lovelace: Probabilistic Programming for Machine LearningAndy Gordon's talk, Reverend Bayes, meet Countess Lovelace: Probabilistic Programming for Machine Learning, is online. Pythonect 0.1.0 ReleaseHi All, I'm pleased to announce the first beta release of Pythonect interpreter. Pythonect is a new, experimental, general-purpose dataflow programming language based on Python. It aims to combine the intuitive feel of shell scripting (and all of its perks like implicit parallelism) with the flexibility and agility of Python. Pythonect interpreter (and reference implementation) is written in Python, and is available under the BSD license. Here's a quick tour of Pythonect: The canonical "Hello, world" example program in Pythonect: >>> "Hello World" -> print '->' and '|' are both Pythonect operators. The pipe operator (i.e. '|') passes one item at a item, while the other operator passes all items at once. Python statements and other None-returning function are acting as a pass-through: >>> "Hello World" -> print -> print >>> 1 -> import math -> math.log Parallelization in Pythonect: >>> "Hello World" -> [ print , print ] >>> range(0,3) -> import math -> math.sqrt In the future, I am planning on adding support for multi-processing, and even distributed computing. The '_' identifier allow access to current item: >>> "Hello World" -> [ print , print ] -> _ + " and Python" >>> [ 1 , 2 ] -> _**_ True/False return values as filters: >>> "Hello World" -> _ == "Hello World" -> print >>> "Hello World" -> _ == "Hello World1" -> print >>> range(1,10) -> _ % 2 == 0 Last but not least, I have also added extra syntax for making remote procedure call easy: >>> 1 -> inc@xmlrpc://localhost:8000 -> print Download Pythonect v0.1.0 from: http://github.com/downloads/ikotler/pythonect/Pythonect-0.1.0.tar.gz More information can be found at: http://www.pythonect.org I will appreciate any input / feedback that you can give me. Thanks, Itzik Kotler |
Browse archives
Active forum topics |
Recent comments
9 weeks 6 days ago
9 weeks 6 days ago
10 weeks 11 hours ago
10 weeks 22 hours ago
10 weeks 4 days ago
10 weeks 4 days ago
10 weeks 5 days ago
10 weeks 5 days ago
10 weeks 5 days ago
10 weeks 5 days ago