Documentation

EventStructures.Family.Path

structure Edge {L : Type u_1} (F : ConfFamily L) (c₁ c₂ : F.Conf) :
Type u_2

An edge in the configuration graph: from c₁ to c₂ by adding one event.

Instances For
    inductive Path {L : Type u_1} (F : ConfFamily L) :
    F.ConfF.ConfType u_2

    A path in the configuration graph of an event structure.

    Instances For
      def Path.path_id {L : Type u_1} (F : ConfFamily L) (c : F.Conf) :
      Path F c c

      Identity path.

      Equations
      Instances For
        def Path.path_comp {L : Type u_1} (F : ConfFamily L) {c₁ c₂ c₃ : F.Conf} (h₁₂ : Path F c₁ c₂) (h₂₃ : Path F c₂ c₃) :
        Path F c₁ c₃

        Composition of paths.

        Equations
        Instances For
          def Path.nextConf {L : Type u_1} (F : ConfFamily L) (c : F.Conf) (e : F.Event) (h : F.enables (↑c) e) :

          Next configuration after executing an enabled event.

          Equations
          Instances For
            inductive Path.ExecList {L : Type u_1} (F : ConfFamily L) :
            F.ConfList F.EventF.ConfType u_2

            Execute a list of events from a configuration.

            Instances For
              theorem Path.path_comp_id {L : Type u_1} (F : ConfFamily L) {c₁ c₂ : F.Conf} (h : Path F c₁ c₂) :
              path_comp F h (path_id F c₂) = h

              Left identity law: composing with the identity path on the right.

              theorem Path.path_id_comp {L : Type u_1} (F : ConfFamily L) {c₁ c₂ : F.Conf} (h : Path F c₁ c₂) :
              path_comp F (path_id F c₁) h = h

              Right identity law: composing with the identity path on the left.

              theorem Path.path_comp_assoc {L : Type u_1} (F : ConfFamily L) {c₁ c₂ c₃ c₄ : F.Conf} (h₁₂ : Path F c₁ c₂) (h₂₃ : Path F c₂ c₃) (h₃₄ : Path F c₃ c₄) :
              path_comp F (path_comp F h₁₂ h₂₃) h₃₄ = path_comp F h₁₂ (path_comp F h₂₃ h₃₄)

              Associativity law: composition of paths is associative.

              def Path.trace {L : Type u_1} (F : ConfFamily L) {c₁ c₂ : F.Conf} (hPath : Path F c₁ c₂) :

              Trace of the path

              Equations
              Instances For
                def Path.length {L : Type u_1} (F : ConfFamily L) {c₁ c₂ : F.Conf} (hPath : Path F c₁ c₂) :

                Length of a path, defined as the length of its trace.

                Equations
                Instances For
                  def Path.labels {L : Type u_1} (F : ConfFamily L) {c₁ c₂ : F.Conf} (p : Path F c₁ c₂) :

                  The label sequence of a path: the trace mapped through F.label.

                  Equations
                  Instances For
                    @[simp]
                    theorem Path.length_refl {L : Type u_1} (F : ConfFamily L) {c : F.Conf} :
                    @[simp]
                    theorem Path.length_step {L : Type u_1} (F : ConfFamily L) {c₁ c₂ c₃ : F.Conf} (hEdge : Edge F c₁ c₂) (hPath : Path F c₂ c₃) :
                    length F (step hEdge hPath) = (length F hPath).succ
                    def Path.execList_to_path {L : Type u_1} (F : ConfFamily L) {c₁ c₂ : F.Conf} {t : List F.Event} (h : ExecList F c₁ t c₂) :
                    Path F c₁ c₂

                    Build a path from an executable list.

                    Equations
                    Instances For
                      @[simp]
                      theorem Path.execList_trace {L : Type u_1} (F : ConfFamily L) {c₁ c₂ : F.Conf} {t : List F.Event} (h : ExecList F c₁ t c₂) :
                      @[simp]
                      theorem Path.execList_length {L : Type u_1} (F : ConfFamily L) {c₁ c₂ : F.Conf} {t : List F.Event} (h : ExecList F c₁ t c₂) :
                      theorem Path.execList_target_eq_union {L : Type u_1} (F : ConfFamily L) {c₁ c₂ : F.Conf} {t : List F.Event} (h : ExecList F c₁ t c₂) :
                      c₂ = c₁ {e : F.Event | e t}

                      Target configuration from an exec list is the source plus the list's events.

                      noncomputable def Path.execList_lift {L : Type u_1} (F : ConfFamily L) {c_small c_large c_target : F.Conf} {t : List F.Event} (hsub : c_smallc_large) (hmono : ∀ {c₁ c₂ : F.Conf} {e : F.Event}, c₁c₂F.enables (↑c₁) eF.enables (↑c₂) e) (h : ExecList F c_small t c_target) :
                      (c_target' : F.Conf) × ExecList F c_large t c_target'

                      Lift an exec list from a smaller configuration to a larger one.

                      Equations
                      • One or more equations did not get rendered due to their size.
                      Instances For
                        theorem Path.pathLengthExists {L : Type u_1} (F : ConfFamily L) {c₁ c₂ : F.Conf} (h : Nonempty (Path F c₁ c₂)) :
                        ∃ (n : ) (p : Path F c₁ c₂), length F p = n

                        Existence of a path length.

                        noncomputable def Path.minPathLength {L : Type u_1} (F : ConfFamily L) {c₁ c₂ : F.Conf} (h : Nonempty (Path F c₁ c₂)) :

                        Minimal path length between two configurations, given existence of a path.

                        Equations
                        Instances For
                          theorem Path.minPathLength_spec {L : Type u_1} (F : ConfFamily L) {c₁ c₂ : F.Conf} (h : Nonempty (Path F c₁ c₂)) :
                          ∃ (p : Path F c₁ c₂), length F p = minPathLength F h
                          theorem Path.minPathLength_le {L : Type u_1} (F : ConfFamily L) {c₁ c₂ : F.Conf} (h : Nonempty (Path F c₁ c₂)) (p : Path F c₁ c₂) :
                          theorem Path.execList_to_path_trace {L : Type u_1} (F : ConfFamily L) {c₁ c₂ : F.Conf} {t : List F.Event} (h : ExecList F c₁ t c₂) :

                          The trace of an execList_to_path is exactly the original list.

                          def Path.execList_of_path {L : Type u_1} (F : ConfFamily L) {c₁ c₂ : F.Conf} (p : Path F c₁ c₂) :
                          ExecList F c₁ (trace F p) c₂

                          Extract an executable list from a path.

                          Equations
                          Instances For
                            @[instance_reducible]
                            instance Path.pathSetoid {L : Type u_1} (F : ConfFamily L) (c₁ c₂ : F.Conf) :
                            Setoid (Path F c₁ c₂)

                            Paths are equivalent when their traces commute adjacent independent events.

                            Equations
                            theorem Path.path_target_eq_reach {L : Type u_1} (F : ConfFamily L) {c₁ c₂ : F.Conf} (p : Path F c₁ c₂) :
                            c₂ = reach F (↑c₁) (trace F p)

                            The target of a path is the source extended by the trace.

                            def Path.PathEquiv {L : Type u_1} (F : ConfFamily L) {c₁ c₂ : F.Conf} (p₁ p₂ : Path F c₁ c₂) :

                            Two paths are equivalent if their traces are trace equivalent

                            Equations
                            Instances For
                              instance Path.pathEquiv_refl {L : Type u_1} (F : ConfFamily L) {c₁ c₂ : F.Conf} :

                              Path equivalence is reflexive.

                              instance Path.pathEquiv_symm {L : Type u_1} (F : ConfFamily L) {c₁ c₂ : F.Conf} :

                              Path equivalence is symmetric.

                              instance Path.pathEquiv_trans {L : Type u_1} (F : ConfFamily L) {c₁ c₂ : F.Conf} :
                              IsTrans (Path F c₁ c₂) (PathEquiv F)

                              Path equivalence is transitive.

                              theorem Path.pathEquivEquivalence {L : Type u_1} (F : ConfFamily L) (c₁ c₂ : F.Conf) :

                              Path equivalence is an equivalence relation.

                              theorem Path.trace_comp {L : Type u_1} (F : ConfFamily L) {c₁ c₂ c₃ : F.Conf} (p₁₂ : Path F c₁ c₂) (p₂₃ : Path F c₂ c₃) :
                              trace F (path_comp F p₁₂ p₂₃) = trace F p₁₂ ++ trace F p₂₃

                              Trace of path composition is concatenation of traces.

                              theorem Path.labels_comp {L : Type u_1} (F : ConfFamily L) {c₁ c₂ c₃ : F.Conf} (p₁₂ : Path F c₁ c₂) (p₂₃ : Path F c₂ c₃) :
                              labels F (path_comp F p₁₂ p₂₃) = labels F p₁₂ ++ labels F p₂₃

                              Path labels are concatenated under path composition.

                              def Path.Async {L : Type u_1} (F : ConfFamily L) (c₁ c₂ : F.Conf) :
                              Type u_2

                              Asynchronous path: paths quotiented by path equivalence.

                              Equations
                              Instances For
                                def Path.Async.mk {L : Type u_1} (F : ConfFamily L) {c₁ c₂ : F.Conf} (p : Path F c₁ c₂) :
                                Async F c₁ c₂

                                Lift a path to an asynchronous path.

                                Equations
                                Instances For
                                  def Path.Async.async_path_id {L : Type u_1} (F : ConfFamily L) (c : F.Conf) :
                                  Async F c c

                                  Identity asynchronous path.

                                  Equations
                                  Instances For
                                    def Path.Async.async_path_comp {L : Type u_1} (F : ConfFamily L) {c₁ c₂ c₃ : F.Conf} (p₁₂ : Async F c₁ c₂) (p₂₃ : Async F c₂ c₃) :
                                    Async F c₁ c₃

                                    Composition of asynchronous paths.

                                    Equations
                                    Instances For
                                      theorem Path.Async.async_path_id_comp {L : Type u_1} (F : ConfFamily L) {c₁ c₂ : F.Conf} (p : Async F c₁ c₂) :

                                      Left identity law for asynchronous path composition.

                                      theorem Path.Async.async_path_comp_id {L : Type u_1} (F : ConfFamily L) {c₁ c₂ : F.Conf} (p : Async F c₁ c₂) :

                                      Right identity law for asynchronous path composition.

                                      theorem Path.Async.assoc {L : Type u_1} (F : ConfFamily L) {c₁ c₂ c₃ c₄ : F.Conf} (p₁₂ : Async F c₁ c₂) (p₂₃ : Async F c₂ c₃) (p₃₄ : Async F c₃ c₄) :
                                      async_path_comp F (async_path_comp F p₁₂ p₂₃) p₃₄ = async_path_comp F p₁₂ (async_path_comp F p₂₃ p₃₄)

                                      Associativity law for asynchronous path composition.

                                      theorem Path.trace_length_eq_length {L : Type u_1} (F : ConfFamily L) {c₁ c₂ : F.Conf} (p : Path F c₁ c₂) :
                                      (trace F p).length = length F p

                                      For a path from c₁ to c₂, every event in the trace appears exactly once.

                                      theorem Path.path_subset {L : Type u_1} (F : ConfFamily L) {c₁ c₂ : F.Conf} (p : Path F c₁ c₂) :
                                      c₁c₂

                                      Paths are monotone: the source configuration is a subset of the target.

                                      theorem Path.trace_of_path {L : Type u_1} (F : ConfFamily L) {c₁ c₂ : F.Conf} (p : Path F c₁ c₂) (e : F.Event) :
                                      e trace F pe c₂

                                      Events executed in a path must be added to reach the target configuration.

                                      theorem Path.path_length_ge_trace_length {L : Type u_1} (F : ConfFamily L) {c₁ c₂ : F.Conf} (p : Path F c₁ c₂) :
                                      length F p = (trace F p).length

                                      A path requires executing at least the events in its trace.

                                      @[instance_reducible]

                                      The path category of the configuration family.

                                      Equations
                                      @[instance_reducible]

                                      The asynchronous path category of the configuration family.

                                      Equations