Commit 0495154c authored by Jacques-Henri Jourdan's avatar Jacques-Henri Jourdan

Upred : explain why things are how they are.

parent 8f3ebec4
......@@ -8,7 +8,26 @@ Set Default Proof Using "Type".
Record uPred (M : ucmraT) : Type := IProp {
uPred_holds :> nat M Prop;
(* [uPred_mono] is used to prove non-expansiveness (guaranteed by
[uPred_ne]). Therefore, it is important that we do not restrict
it to only valid elements. *)
uPred_mono n x1 x2 : uPred_holds n x1 x1 {n} x2 uPred_holds n x2;
(* We have to restrict this to hold only for valid elements,
otherwise this condition is no longer limit preserving, and uPred
does no longer form a COFE (i.e., [uPred_compl] breaks). This is
because the distance and equivalence on this cofe ignores the
truth valid on invalid elements. This, in turns, is required by
the fact that entailment has to ignore invalid elements, which is
itself essential for proving [ownM_valid].
We could, actually, make the following condition true even for
invalid elements: we have proved that uPred is isomorphic to a
sub-COFE of the COFE of predicates that are monotonous both with
respect to the step index and with respect to x. However, that
would essentially require changing (by making more complicated)
the model of many connectives of the logic, which we don't want. *)
uPred_closed n1 n2 x : uPred_holds n1 x n2 n1 {n2} x uPred_holds n2 x
}.
Arguments uPred_holds {_} _ _ _ : simpl never.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment