-
Notifications
You must be signed in to change notification settings - Fork 4
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Public views #149
Comments
We should talk about the theory behind this (also with @mjp41). Intuitively, it seems obvious that under this scheme we can verify modules and clients separately, but it's not captured in our current formalisation. |
First thing is getting the specific soundness question down. Are we trying to say that, in this case, given a proof |
The first result we could do with is that adding the defining views of What we need to do is work out exactly what The other thing is that we need to be able to treat commands from So, this is effectively proving that |
Though I presume that last idea needs rewriting in terms of the Starling proof rule. |
@septract another thing I was wondering is, from an engineering point of view, how a client should use this. Would a client always be proven against a specific lock implementation (and thus just take its public views directly from the lock cvf), or would you have some sort of separated approach where the 'specification' of a lock in terms of public views would be written somewhere (in the client or in a third file) and Starling would check that the concrete lock obeys that specification on inclusion? |
If we get a general set of proof modularity rules, theoretically speaking they shouldn't need a physical file boundary either. You could imagine being able to analyse and partition single Starling files with several disjoint variable access patterns (but perhaps common pure views) into disjoint proof sections with their own set of defining views, variables, and axioms. Cutting down on the defining views per axiom would probably make more pathological proofs a bit faster to crunch through. I wouldn't want to implement that though! |
As a testbed for ideas about Starling's modularity, and based on ideas from @septract, we're considering adding a module system to Starling. The first, and perhaps easiest, thing to add would be a way of marking views and constraints 'public'.
Public views and constraints represent the surface of knowledge transfer that can leave the system described in a Starling file.
For example, the ticket lock would now look like:
Public constraints cannot name shared variables or non-public views. (In future, we might want to make it so they can name a
public
subset of shared state, but this needs some thought). As such,emp
cannot ever be a public constraint.This stage is fairly trivial to implement:
public
keyword to views and constraints;The text was updated successfully, but these errors were encountered: