This adds a new uPred law:
Lemma internal_eq_entails {A B : ofeT} (a1 a2 : A) (b1 b2 : B) :
(∀ n, a1 ≡{n}≡ a2 → b1 ≡{n}≡ b2) → a1 ≡ a2 ⊢ b1 ≡ b2.
That law was very useful in !486 (merged) because it means this lemma:
Local Lemma to_auth_map_singleton_includedN qe n m k e :
{[k := to_auth_elem qe e]} ≼{n} to_auth_map m → m !! k ≡{n}≡ Some e.
can be reused to prove the "internal" lemma
Local Lemma to_auth_map_singleton_includedI qe M m c k e :
to_auth_map m ≡ {[k := to_auth_elem qe e]} ⋅ c ⊢@{uPredI M} m !! k ≡ Some e.
Without internal_eq_entails
, I think I'd have to re-prove the exact same thing again, which would be rather painful (it's a 20-line proof script and relies on a few other lemmas that all would require "internal" equivalents, so overall -- a lot of extra work).
internal_eq_entails
is really just a special case of a law about siProp
that we should have once we have the infrastructure for that.