Skip to Content.
Sympa Menu

coq-club - Re: [Coq-Club] Prove associativity of composition of relations

coq-club AT inria.fr

Subject: The Coq mailing list

List archive

Re: [Coq-Club] Prove associativity of composition of relations


Chronological Thread 
  • From: scott constable <sdconsta AT syr.edu>
  • To: coq-club AT inria.fr
  • Subject: Re: [Coq-Club] Prove associativity of composition of relations
  • Date: Wed, 11 May 2016 14:05:56 -0400
  • Authentication-results: mail2-smtp-roc.national.inria.fr; spf=None smtp.pra=sdconsta AT syr.edu; spf=None smtp.mailfrom=sdconsta AT syr.edu; spf=None smtp.helo=postmaster AT smtp1.syr.edu
  • Ironport-phdr: 9a23:Tpcgnh0b7Wx4IR+bsmDT+DRfVm0co7zxezQtwd8ZsegVLfad9pjvdHbS+e9qxAeQG96LurQd1aGP6vqocFdDyKjCmUhKSIZLWR4BhJdetC0bK+nBN3fGKuX3ZTcxBsVIWQwt1Xi6NU9IBJS2PAWK8TWM5DIfUi/yKRBybrysXNWC3oLuiavrosebSj4LrQT+SIs6FA+xowTVu5teqqpZAYF19CH0pGBVcf9d32JiKAHbtR/94sCt4MwrqHwI6Lpyv/JHBK79ZuEzSaFSJDUgKWE8osPx5jfZSg7a/XAbTnlemR1OGBTM5hX3FsPqviD9sPFh0QGBLNewQLwpD2fxp5x3QQPl3X9UfwUy93va35R9

Ah, I think that propositional extensionality is the missing piece that I was looking for. Here is the complete solution:

Require Import FunctionalExtensionality.

Set Implicit Arguments.

Section Rels.

  Variables T U V : Type.
  Variable R1 : T -> U -> Prop.
  Variable R2 : U -> V -> Prop.

  Inductive Compose : T -> V -> Prop :=
  | comp_intro : forall x y z, R1 x y -> R2 y z -> Compose x z.

End Rels.

Notation "R2 @ R1" := (Compose R1 R2) (at level 55, right associativity).

Axiom prop_ext : forall (P Q : Prop), (P <-> Q) -> P = Q.

Section RelLemmas.

  Variables T U V W : Type.
  Variable R1 : T -> U -> Prop.
  Variable R2 : U -> V -> Prop.
  Variable R3 : V -> W -> Prop.

  Lemma compose_assoc : R3 @ R2 @ R1 = (R3 @ R2) @ R1.
  Proof.
    extensionality x; extensionality y.
    apply prop_ext; split; intro H;
      repeat match goal with
      | [ H : (_ @ _) _ _ |- _ ] => inversion_clear H; subst
      end; eauto using Compose.
  Qed.

End RelLemmas.

Thanks so much everyone!

~Scott Constable


On Wed, May 11, 2016 at 1:47 PM, Cyprien Mangin <cyprien.mangin AT m4x.org> wrote:
>
> You need a form of predicate extensionality:
>
> forall (T U : Type) (P Q : T -> U -> Prop), (forall x y, P x y <-> Q x y) -> P = Q
>
> As remarked in https://coq.inria.fr/cocorico/CoqAndAxioms, this is entailed by propositional extensionality + functional extensionality.
>
> On Wed, May 11, 2016 at 7:36 PM, scott constable <sdconsta AT syr.edu> wrote:
>>
>> Hi Cyprien,
>>
>> I realize that I can prove an IFF, but what I really need for my theorems is a Leibniz equality. I tried functional extensionality without any success. I'm not sure what other types of extensionality would be applicable.
>>
>> ~Scott
>>
>> On Wed, May 11, 2016 at 1:32 PM, Cyprien Mangin <cyprien.mangin AT m4x.org> wrote:
>>>
>>> Hello,
>>>
>>> You will need some kind of extensionality to prove exactly your lemma. What you can prove is the following:
>>>
>>> ∀ (R : U → V → Prop) (Q : V → T → Prop) (P : T → W → Prop) x y, (P ∘ Q ∘ R) x y  ↔ ((P ∘ Q) ∘ R) x y.
>>>
>>> --
>>> Cyprien
>>>
>>> On Wed, May 11, 2016 at 7:07 PM, scott constable <sdconsta AT syr.edu> wrote:
>>>>
>>>> Correction: "I think it should be possible to prove associativity of my definition of composition"...
>>>>
>>>> On Wed, May 11, 2016 at 1:06 PM, scott constable <sdconsta AT syr.edu> wrote:
>>>>>
>>>>> Thanks for the quick response Frédéric, but I already have a large project which relies heavily on my definition of composition, and the CoLoR library uses a different definition of composition. Hence I would have to rework a lot of my project to fit the CoLoR definition. I think it should be possible to prove associativity of my definition of relation in Coq, and I would like to know how to do so.
>>>>>
>>>>> ~Scott
>>>>>
>>>>> On Wed, May 11, 2016 at 1:00 PM, Frédéric Blanqui <frederic.blanqui AT inria.fr> wrote:
>>>>>>
>>>>>> Hello. You will find useful developments on relations in CoLoR.Util.RelUtil.v (coq-color on opam). See http://color.inria.fr/doc/CoLoR.Util.Relation.RelUtil.html for the definitions and theorems without the proofs. Best regards, Frédéric.
>>>>>>
>>>>>>
>>>>>> Le 11/05/2016 18:51, scott constable a écrit :
>>>>>>>
>>>>>>> Hi All,
>>>>>>>
>>>>>>> I have the following definition of composition:
>>>>>>>
>>>>>>> Inductive Compose : T → V → Prop :=
>>>>>>> | comp_intro : ∀ x y z, R1 x y → R2 y z → Compose x z.
>>>>>>>
>>>>>>> Notation "P ∘ R" := (Compose R P) (at level 55, right associativity).
>>>>>>>
>>>>>>> And I am hopelessly lost as to how to prove this theorem:
>>>>>>>
>>>>>>> Lemma compose_assoc : ∀ (R : U → V → Prop) (Q : V → T → Prop)
>>>>>>>                           (P : T → W → Prop), P ∘ Q ∘ R = (P ∘ Q) ∘ R.
>>>>>>>
>>>>>>> Any help would be extremely appreciated!
>>>>>>>
>>>>>>> Thanks in advance,
>>>>>>>
>>>>>>> ~Scott Constable
>>>>>>
>>>>>>
>>>>>
>>>>
>>>
>>
>



Archive powered by MHonArc 2.6.18.

Top of Page