Parametrize Omega by the thread_id
2 unresolved threads
2 unresolved threads
Compare changes
Files
16@@ -27,7 +27,7 @@ Section data_race.
@@ -75,7 +75,7 @@ Section data_race.
@@ -119,7 +119,7 @@ Section data_race.
Why not actually change
val_rel
to have the desired type? That'd avoid all users having to care about this...I assume
val_rel
in the future needs to depend on the thread ID?On my branch,
val_rel
still has typeval → val → PROP
. I use that to defineweak_val_rel
which additionally talks about the thread id (https://gitlab.mpi-sws.org/iris/simuliris/-/blob/msammler/dataraces/theories/simplang/heap_bij_races.v#L1053), but there are quite a few cases where one still needsval_rel
instead ofweak_val_rel
. (E.g. the values in the heap bijection are related withval_rel
, notweak_val_rel
.)What I mean is: I don't think we should have
const val_rel
everywhere. If that relation is widely used, it should have a name. And since the name is repeated a lot, it should be a short one --val_rel
seems good.The thing only used in state_interp can have a longer name.
I agree that the repeated
const val_rel
is a bit annoying. I've fixed it in the other example by using a notation like we do else where. This file will actually change to use aweak_val_rel
instead ofconst val_rel
on my branch, so there is already a separate definition. Note that bothweak_val_rel
andval_rel
are visible outside of the state interpretation andval_rel
is probably used more often (weak_val_rel
is only really relevant for the calls).That doesn't even typecheck. Do you mean
const weak_val_rel
? But I don't understand why that would ever be used.No, I mean
weak_val_rel
. Bothweak_val_rel
andconst val_rel
have typethread_id → val → val → PROP
. Butweak_val_rel
should probably be named differently, maybeext_rel
? (because this is the relation for interacting with external functions)Sounds like this is the value relation, and should thus be called
val_rel
.The point of the value relation is to relate values that are passed to and returned from external functions, and the final return value for the top-level observation. So whatever relation does that job, should be called
val_rel
.The point is that what I call
ext_rel
is not just relating the values that are passed from and to external functions. It also contains additional ghost state (weak_col π c
in my case) that does not have anything to do with the values that are passed. The relation that relates the values would still be calledval_rel
.I don't follow. It is still a relation that is satisified each time values are passed across an external boundary. The fact that it has a component that is independent of values is immaterial: this is still most definitely the thing that is called the "value relation" in the typical logical relation setup, or is it not?
The thing that does not contain
weak_col
(what's "col" for? the only association I have is "column" -- so maybe this should also get a more self-explaining name ;) should then get a different name. IIRC this is about executing synchronization instructions, so maybe it should be calledval_rel_nosync
(andweak_col
should probably also havesync
somewhere in its name)?I am not sure which of the two relations corresponds to the value relation in typical logical relations. Maybe it makes more sense to continue this bikeshedding at some meeting. At that occasion we could also find a better name for
weak_col
(which I agree is not a good name).I think it's pretty clear: it's the thing that shows up in
expr_rel
and the key soundness theorems.Well, I think there's a concrete change you should do in this MR: don't use
const val_rel
, instead change the definition ofval_rel
to already be what everyone needs.Specifically, I think
expr_rel
should look like this after this MR -- do you agree (up to alpha renaming)?It would seem rather strange to me if
expr_rel
would make use ofweak_val_rel
... that indicates we are not following the usual naming scheme.I understand that point, but my main problem is that I don't know how to name the other relation if we use
val_rel
as you suggest. If we find a good name for the other relation, I am fine with usingval_rel
as you suggest. The name should be a short and easy to understand name as it occurs in many lemmas. I don't likeval_rel_nosync
because I don't think that thenosync
postfix explains much.val_rel_nothreadid
would be better in that regard but is quite long. Also the other relation is what really does the relating of values so maybe we should call itreal_val_rel
? Orraw_val_rel
? Orv_rel
? My favourite would beraw_val_rel
. What do you think or do you have other suggestions?From your proposals, I prefer
raw_val_rel
-- but "raw" is a kind of meaningless prefix (but then so is "weak"^^). Other ideas:pre_val_rel
/val_rel_pre
(another meaningless prefix^^)val_rel_obj
(the "objective" part of the value relation, which is GPFSL terminology for 'does not depend on the thread')I like
val_rel_obj
orobj_val_rel
. Any preference between the two?I think I prefer
val_rel_obj
as this is primarily about values, not about being objective.Please leave a comment explaining what the "obj" means. :) (I often see abbreviations that are not explained, and then puzzle about what they mean.^^)