Documentation

GL.Split.Proof

Defining GL-split proof systems. #

Here we define the GL-split-proof system along with finitization and basic properties. We use the namespace Split to distinguish from our general GL-proofs.

Basic components of the GL-split proof system. #

inductive Split.RuleApp :

Rule applications for the GL-split proof system.

Instances For

    Endofunctor for the GL-split proof system.

    Equations
    • One or more equations did not get rendered due to their size.
    Instances For

      Given a RuleApp, obtain the non-principal formulas.

      Equations
      Instances For
        theorem Split.fₙ_alternate (r : RuleApp) :
        fₙ r = match r with | RuleApp.topₗ Δ a => Δ \ {Sum.inl } | RuleApp.topᵣ Δ a => Δ \ {Sum.inr } | RuleApp.axₗₗ Δ n a => Δ \ {Sum.inl (at n), Sum.inl (na n)} | RuleApp.axₗᵣ Δ n a => Δ \ {Sum.inl (at n), Sum.inr (na n)} | RuleApp.axᵣₗ Δ n a => Δ \ {Sum.inr (at n), Sum.inl (na n)} | RuleApp.axᵣᵣ Δ n a => Δ \ {Sum.inr (at n), Sum.inr (na n)} | RuleApp.andₗ Δ A B a => Δ \ {Sum.inl (A&B)} | RuleApp.andᵣ Δ A B a => Δ \ {Sum.inr (A&B)} | RuleApp.orₗ Δ A B a => Δ \ {Sum.inl (A v B)} | RuleApp.orᵣ Δ A B a => Δ \ {Sum.inr (A v B)} | RuleApp.boxₗ Δ A a => Δ \ {Sum.inl (A)} | RuleApp.boxᵣ Δ A a => Δ \ {Sum.inr (A)}

        Relating principal formulas, non-principal formulas, and the sequent.

        def Split.r {X : Type} (α : XT.obj X) (x : X) :

        Get RuleApp of a node (first projection).

        Equations
        Instances For
          def Split.p {X : Type} (α : XT.obj X) (x : X) :

          Get premises of a node (second projection).

          Equations
          Instances For
            def Split.edge {X : Type} (α : XT.obj X) (x y : X) :

            Edge relation induced by p.

            Equations
            Instances For
              structure Split.Proof :

              Defininion of GL-split proof.

              Instances For
                def Split.proves (𝕏 : Proof) (Δ : SplitSequent) :
                Equations
                Instances For
                  Equations
                  Instances For
                    def Split.equiv (φ ψ : Formula) :
                    Equations
                    Instances For

                      Fischer-Ladner properties of GL-split proofs #

                      theorem Split.edge_in_FL {𝕏 : Proof} {x y : 𝕏.X} (x_y : edge 𝕏.α x y) :
                      f (r 𝕏.α y) (f (r 𝕏.α x)).FL

                      Every edge is contained in FL closure.

                      theorem Split.path_in_FL {𝕏 : Proof} {x y : 𝕏.X} (x_y : Relation.ReflTransGen (edge 𝕏.α) x y) :
                      f (r 𝕏.α y) (f (r 𝕏.α x)).FL

                      Every path is contained in FL closure.

                      Point Generated GL-split Proofs #

                      def Split.αPoint (𝕐 : Proof) (x : 𝕐.X) :
                      { y : 𝕐.X // Relation.ReflTransGen (edge 𝕐.α) x y }T.obj { y : 𝕐.X // Relation.ReflTransGen (edge 𝕐.α) x y }

                      Structure morphism for Point Generation.

                      Equations
                      Instances For
                        def Split.pointGeneratedProof (𝕐 : Proof) (x : 𝕐.X) :

                        Point Generated Split Proof.

                        Equations
                        Instances For
                          theorem Split.node_in_pg_sequent_in_FL (𝕏 : Proof) (x : 𝕏.X) (y : (pointGeneratedProof 𝕏 x).X) :
                          f (r (αPoint 𝕏 x) y) (f (r 𝕏.α x)).FL

                          Filtration of GL-Proofs #

                          instance Split.instSetoidX (𝕏 : Proof) :
                          Setoid 𝕏.X

                          Equivelance relation used for Filtration.

                          Equations
                          noncomputable def Split.αQuot (𝕐 : Proof) (x : Quotient (instSetoidX 𝕐)) :

                          Structure morphism for Filtration.

                          Equations
                          Instances For
                            noncomputable def Split.filtration (𝕐 : Proof) :

                            Filtration of a GL-split Proof is a GL-split proof.

                            Equations
                            Instances For

                              Finite Model Property #

                              theorem Split.finite_proof_of_proof (𝕏 : Proof) (Δ : SplitSequent) :
                              (𝕏Δ) → ∃ (𝕐 : Proof), Finite 𝕐.X (𝕐Δ)

                              Given a split proof of Δ there exists a finite split proof of Δ

                              Properties of (infinite) paths #

                              def Split.nbEdge {X : Type} (α : XT.obj X) (x y : X) :
                              Equations
                              Instances For
                                theorem Split.lt_if_not_box_edge {𝕏 : Proof} {x y : 𝕏.X} (x_y : nbEdge 𝕏.α x y) :
                                (f (r 𝕏.α y)).length < (f (r 𝕏.α x)).length

                                Non box edges reduce sequent size.

                                theorem Split.lt_if_not_box_path {𝕏 : Proof} {x y : 𝕏.X} :
                                Relation.TransGen (nbEdge 𝕏.α) x y(f (r 𝕏.α y)).length < (f (r 𝕏.α x)).length

                                Non box paths reduce sequent size.

                                theorem Split.no_non_box_loop {𝕏 : Proof} (x : 𝕏.X) :

                                Non box paths do not loop.

                                theorem Split.exists_box_on_le_path {𝕏 : Proof} (x y : 𝕏.X) :
                                Relation.TransGen (edge 𝕏.α) x y(f (r 𝕏.α x)).length (f (r 𝕏.α y)).length∃ (z : 𝕏.X), Relation.ReflTransGen (edge 𝕏.α) x z Relation.ReflTransGen (edge 𝕏.α) z y (r 𝕏.α z).isBox

                                Every path of increasing size has a box rule application.

                                theorem Split.exists_box_on_loop {𝕏 : Proof} (x : 𝕏.X) :
                                Relation.TransGen (edge 𝕏.α) x x∃ (z : 𝕏.X), Relation.ReflTransGen (edge 𝕏.α) x z Relation.ReflTransGen (edge 𝕏.α) z x (r 𝕏.α z).isBox

                                Every loop has a box edge.

                                def Split.edgeRestr {𝕏 : Proof} (p : 𝕏.XProp) :
                                𝕏.X𝕏.XProp

                                Edge relation restricted to nodes satisfying predicate p.

                                Equations
                                Instances For
                                  theorem Split.exists_box_on_le_restr_path {𝕏 : Proof} (x y : 𝕏.X) (p : 𝕏.XProp) :
                                  Relation.TransGen (edgeRestr p) x y(f (r 𝕏.α x)).length (f (r 𝕏.α y)).length∃ (z : 𝕏.X), Relation.ReflTransGen (edgeRestr p) x z Relation.TransGen (edgeRestr p) z y (r 𝕏.α z).isBox

                                  Every restricted path of increasing size has a box rule application.

                                  theorem Split.exists_box_on_restr_loop {𝕏 : Proof} (x : 𝕏.X) (p : 𝕏.XProp) :
                                  Relation.TransGen (edgeRestr p) x x∃ (z : 𝕏.X), (r 𝕏.α z).isBox p z Relation.TransGen (edgeRestr p) z z

                                  Every restricted loop has a box edge.

                                  theorem Split.inf_path_has_inf_boxes {𝕏 : Proof} (g : 𝕏.X) (h : ∀ (n : ), edge 𝕏.α (g n) (g (n + 1))) (n : ) :
                                  ∃ (m : ), (r 𝕏.α (g (n + m))).isBox

                                  Every infinite path has an infinite number of nodes which are box rule applications.

                                  theorem Split.finite_and_no_loop_implies_exists_leaf {𝕏 : Proof} [fin_X : Fintype 𝕏.X] (h : 𝕏.XProp) (x : 𝕏.X) (x_sat : h x) :
                                  (¬∃ (y : 𝕏.X), Relation.TransGen (edgeRestr h) y y) → ∃ (y : 𝕏.X), h y zp 𝕏.α y, ¬h z

                                  If a proof is finite and there are no loops under a restriction, then there must exist a leaf.

                                  theorem Split.in_vocab_of_path_left {𝕏 : Proof} {x y : 𝕏.X} (x_y : Relation.ReflTransGen (edge 𝕏.α) x y) {n : } (n_in : n (f (r 𝕏.α y)).left.vocab) :
                                  n (f (r 𝕏.α x)).left.vocab
                                  theorem Split.in_vocab_of_path_right {𝕏 : Proof} {x y : 𝕏.X} (x_y : Relation.ReflTransGen (edge 𝕏.α) x y) {n : } (n_in : n (f (r 𝕏.α y)).right.vocab) :
                                  n (f (r 𝕏.α x)).right.vocab