Documentation

EventStructures.Family.Trace

Traces up to independence #

Trace equivalence over an arbitrary independence relation.

inductive TraceEquiv {α : Type u_1} (R : ααProp) :
List αList αProp

Two traces are equivalent when one is obtained from the other by swapping adjacent independent events.

Instances For
    def labels {α : Type u_1} {L : Type u_2} (lbl : αL) (t : List α) :

    The label sequence of a trace.

    Equations
    Instances For
      def Trace.LabelEquiv {α : Type u_1} {L : Type u_2} (lbl : αL) (t₁ t₂ : List α) :

      Two traces are label-equivalent if they map to the same label sequence.

      Equations
      Instances For
        instance Trace.labelEquiv_refl {α : Type u_1} {L : Type u_2} (lbl : αL) :
        instance Trace.labelEquiv_symm {α : Type u_1} {L : Type u_2} (lbl : αL) :
        instance Trace.labelEquiv_trans {α : Type u_1} {L : Type u_2} (lbl : αL) :
        def Trace.LabelRespecting {α : Type u_1} {L : Type u_2} (R : ααProp) (lbl : αL) :

        A labelling respects independence if it assigns equal labels to independent events.

        Equations
        Instances For
          theorem Trace.labels_swap_iff {α : Type u_1} {L : Type u_2} (lbl : αL) {e₁ e₂ : α} {t₁ t₂ : List α} :
          labels lbl (t₁ ++ e₁ :: e₂ :: t₂) = labels lbl (t₁ ++ e₂ :: e₁ :: t₂) lbl e₁ = lbl e₂

          Swapping two adjacent events preserves the label sequence iff they share a label.

          instance Trace.traceEquiv_refl {α : Type u_1} (R : ααProp) :

          Trace equivalence is reflexive.

          instance Trace.traceEquiv_trans {α : Type u_1} (R : ααProp) :

          Trace equivalence is transitive.

          theorem Trace.traceEquiv_symm {α : Type u_1} (R : ααProp) (hsymm : Std.Symm R) :

          Trace equivalence is symmetric when independence is.

          theorem Trace.traceEquiv_imp_labelEquiv {α : Type u_1} {L : Type u_2} (R : ααProp) (lbl : αL) (hresp : LabelRespecting R lbl) {t₁ t₂ : List α} (h : TraceEquiv R t₁ t₂) :
          LabelEquiv lbl t₁ t₂

          Trace equivalence implies label equivalence for an independence-respecting labelling.

          theorem Trace.traceEquivEquivalence {α : Type u_1} (R : ααProp) (hsymm : Std.Symm R) :

          Trace equivalence is an equivalence relation when independence is symmetric.

          theorem Trace.traceEquiv_append_left {α : Type u_1} (R : ααProp) {t₁ t₂ : List α} (h : TraceEquiv R t₁ t₂) (t : List α) :
          TraceEquiv R (t ++ t₁) (t ++ t₂)

          Trace equivalence is a left congruence for append.

          theorem Trace.traceEquiv_append_right {α : Type u_1} (R : ααProp) {t₁ t₂ : List α} (h : TraceEquiv R t₁ t₂) (t : List α) :
          TraceEquiv R (t₁ ++ t) (t₂ ++ t)

          Trace equivalence is a right congruence for append.

          theorem Trace.traceEquiv_append {α : Type u_1} (R : ααProp) {t₁ t₂ t₃ t₄ : List α} (h₁ : TraceEquiv R t₁ t₂) (h₂ : TraceEquiv R t₃ t₄) :
          TraceEquiv R (t₁ ++ t₃) (t₂ ++ t₄)

          Trace equivalence is a congruence for append.

          def Trace.traceEquivSetoid {α : Type u_1} (R : ααProp) (hsymm : Std.Symm R) :

          Setoid of traces, for a symmetric independence relation.

          Equations
          Instances For

            Positional trace equivalence #

            For families, independence is relative to the configuration reached so far.

            def reach {L : Type u_3} (F : ConfFamily L) (c : Set F.Event) (t : List F.Event) :

            The configuration reached by running t from c.

            Equations
            Instances For
              theorem reach_append {L : Type u_3} (F : ConfFamily L) (c : Set F.Event) (t p : List F.Event) :
              reach F (reach F c t) p = reach F c (t ++ p)

              Running t and then p is running t ++ p.

              inductive ConfFamily.TraceEquivFrom {L : Type u_3} (F : ConfFamily L) (c : Set F.Event) :
              List F.EventList F.EventProp

              Traces equivalent from a configuration.

              Instances For
                theorem ConfFamily.TraceEquivFrom.trans {L : Type u_3} {F : ConfFamily L} {c : Set F.Event} {t₁ t₂ t₃ : List F.Event} (h₁₂ : F.TraceEquivFrom c t₁ t₂) (h₂₃ : F.TraceEquivFrom c t₂ t₃) :
                F.TraceEquivFrom c t₁ t₃
                theorem ConfFamily.TraceEquivFrom.symm {L : Type u_3} {F : ConfFamily L} {c : Set F.Event} {t₁ t₂ : List F.Event} :
                F.TraceEquivFrom c t₁ t₂F.TraceEquivFrom c t₂ t₁
                theorem ConfFamily.TraceEquivFrom.reach_eq {L : Type u_3} {F : ConfFamily L} {c : Set F.Event} {t₁ t₂ : List F.Event} (h : F.TraceEquivFrom c t₁ t₂) :
                reach F c t₁ = reach F c t₂

                Equivalent traces use the same events, so reach the same configuration.

                theorem ConfFamily.TraceEquivFrom.append_left {L : Type u_3} {F : ConfFamily L} {c : Set F.Event} {t₁ t₂ : List F.Event} (h : F.TraceEquivFrom c t₁ t₂) (t : List F.Event) :
                F.TraceEquivFrom c (t₁ ++ t) (t₂ ++ t)
                theorem ConfFamily.TraceEquivFrom.append_right {L : Type u_3} {F : ConfFamily L} {c : Set F.Event} (t : List F.Event) {t₁ t₂ : List F.Event} (h : F.TraceEquivFrom (reach F c t) t₁ t₂) :
                F.TraceEquivFrom c (t ++ t₁) (t ++ t₂)