Skip to content

New definition of contractive.

Robbert Krebbers requested to merge contractive into master

The current notion of Contractive does not allow one to deal with functions with multiple arguments, for example, binary functions that are contractive in both arguments (like lft_vs in lambdarust), or binary functions that are contractive in one of their arguments.

To that end, I propose I reformulate the notion of Contractive so that we can express being contractive using a Proper. The new definition is:

Definition dist_later {A : ofeT} (n : nat) (x y : A) : Prop :=
  match n with 0 => True | S n => x ≡{n}≡ y end.
Notation Contractive f := (∀ n, Proper (dist_later n ==> dist n) f).

Also, it turns out that using this definition we can implement a solve_contractive tactic in the same way as the solve_proper tactic.

Unfortunately, the new tactic does not quite work for the weakest precondition connective in Iris because the proof involves induction, and the induction hypothesis does not quite fit into the new solve_contractive tactic.

Merge request reports