Is there some way to use `congruence`

with setoid-equality?

What I’d like:

```
Variable (A : Type) (equiv : A -> A -> Prop) (H : Equivalence equiv).
Goal (forall x y z : A, equiv x y -> ~ equiv y z -> ~ equiv x z).
setoid_congruence equiv.
```

Explicitly specifying which equivalence to use is probably necessary.

`congruence`

does much more than you need here, since it knows that constructors are injective; I’ve seen `setoid_subst`

in stdpp, and it could be enough for your goal (tho I’ve never used it, and it looks like it could be very slow)

it also assumes you use stdpp’s `Equiv`

typeclass, but you might be able to adapt its Ltac1 implementation to your needs, or use `Equiv`

:-)

I’ll have a look. That `congruence`

knows about injectivity of constructors is also something which’d be useful, depending on context.

Then you'd need to use something like stdpp's Inj typeclass, but that's not in the stdlib, and performance might be a concern.

Last updated: Sep 23 2023 at 08:01 UTC