Documentation

GL.Split.Completeness

Prover winning the GL-split game builds a GL-split proof. #

If Prover has a winning strategy in the game starting from Γ, then there is a proof of Γ, proven in prover_win_builds_proof, all other definitions and proofs in this file are helpers.

Rewinding the history one step to get previous move.

Equations
Instances For

    Rewinding the history one step is still in the cone of the game.

    @[irreducible]
    def Split.rewind_history (g : Game.Pos) (n : Fin ((if Game.turn g = Prover then min (2 * g.2.1.length + 1) (2 * g.2.2.length) else min (2 * g.2.1.length) (2 * g.2.2.length + 1)) + 1)) :

    Rewinding the history n steps.

    Equations
    Instances For
      @[irreducible]
      theorem Split.rewind_history_in_cone {Γ : SplitSequent} (g : Game.Pos) (n : Fin ((if Game.turn g = Prover then min (2 * g.2.1.length + 1) (2 * g.2.2.length) else min (2 * g.2.1.length) (2 * g.2.2.length + 1)) + 1)) (strat : Strategy coalgebraGame Prover) (in_cone : inMyCone strat (startPos Γ) g) :

      Rewinding the history n steps is still in the cone of the game.

      This is the type of the coalgebra we will use to build the proof of Γ.

      Equations
      Instances For
        Equations
        Instances For
          def Split.next_next {Γ Δ : SplitSequent} {strat : Strategy coalgebraGame Prover} (g : proof_type Γ strat) (h : winning strat (startPos Γ)) (nrep : Δ(↑g).2.1) (pos : Δ (builder_RuleApp g ).splitSequents) :
          proof_type Γ strat

          Defines the premise when we do not have a repeat.

          Equations
          Instances For
            theorem Split.next_next_cor {Γ Δ : SplitSequent} {strat : Strategy coalgebraGame Prover} (g : proof_type Γ strat) (h : winning strat (startPos Γ)) (nrep : Δ(↑g).2.1) (pos : Δ (builder_RuleApp g ).splitSequents) :
            f (builder_RuleApp (next_next g h nrep pos) ) = Δ

            The sequent at the premise defined by next_next is the sequent Δ which we expect.

            theorem Split.history_length_in_cone {Γ : SplitSequent} (strat : Strategy coalgebraGame Prover) (g : Game.Pos) (in_cone : inMyCone strat (startPos Γ) g) :
            (Game.turn g = Proverg.2.1.length = g.2.2.length) (Game.turn g = Builderg.2.1.length = g.2.2.length + 1)

            Comparison of rule app history length and sequent history length.

            def Split.rep_pos {Γ Δ : SplitSequent} {strat : Strategy coalgebraGame Prover} (g : proof_type Γ strat) (rep : Δ (↑g).2.1) :

            Defines the premise when we do not have a repeat.

            Equations
            Instances For
              @[irreducible]
              theorem Split.rewind_turn_one_step {g : Game.Pos} {n : } {h1 : n + 1 < (if Game.turn g = Prover then min (2 * g.2.1.length + 1) (2 * g.2.2.length) else min (2 * g.2.1.length) (2 * g.2.2.length + 1)) + 1} {h2 : n < (if Game.turn g = Prover then min (2 * g.2.1.length + 1) (2 * g.2.2.length) else min (2 * g.2.1.length) (2 * g.2.2.length + 1)) + 1} :

              Rewinding the game one step changes the player.

              theorem Split.rewind_turn {g : Game.Pos} {n : Fin ((if Game.turn g = Prover then min (2 * g.2.1.length + 1) (2 * g.2.2.length) else min (2 * g.2.1.length) (2 * g.2.2.length + 1)) + 1)} :

              Rewinding an even number of moves is the same players turn, rewinding an odd number is other players turn.

              The sequent at the one step rewind can be found in the history.

              @[irreducible]
              theorem Split.rewind_history_correspondence (Γ : SplitSequent) (g : Game.Pos) (strat : Strategy coalgebraGame Prover) (n : ) (h2 : n < g.2.1.length) (h3 : 2 * n < (if Game.turn g = Prover then min (2 * g.2.1.length + 1) (2 * g.2.2.length) else min (2 * g.2.1.length) (2 * g.2.2.length + 1)) + 1) (h4 : 2 * n + 1 < (if Game.turn g = Prover then min (2 * g.2.1.length + 1) (2 * g.2.2.length) else min (2 * g.2.1.length) (2 * g.2.2.length + 1)) + 1) (h6 : n < g.2.1.length) (in_cone : inMyCone strat (startPos Γ) g) :
              (∀ (b_turn_g : Game.turn g = Builder), f (builder_RuleApp (rewind_history g 2 * n, h3) ) = g.2.1[n]) ∀ (p_turn_q : Game.turn g = Prover), f (builder_RuleApp (rewind_history g 2 * n + 1, h4) ) = g.2.1[n]

              The sequent at the n step rewind can be found in the history.

              def Split.rep_next (Γ : SplitSequent) {Δ : SplitSequent} {strat : Strategy coalgebraGame Prover} (g : proof_type Γ strat) (rep : Δ (↑g).2.1) :
              proof_type Γ strat

              Defines the premise when we have a repeat.

              Equations
              Instances For
                theorem Split.rep_next_cor (Γ : SplitSequent) {Δ : SplitSequent} {strat : Strategy coalgebraGame Prover} (g : proof_type Γ strat) (rep : Δ (↑g).2.1) :
                f (builder_RuleApp (rep_next Γ g rep) ) = Δ

                The sequent at the premise defined by rep_next is the sequent Δ which we expect.

                def Split.builder_move_premises {Γ : SplitSequent} {strat : Strategy coalgebraGame Prover} (g : proof_type Γ strat) (h : winning strat (startPos Γ)) :
                List (proof_type Γ strat)

                Define the list of premises from a Builder move.

                Equations
                Instances For

                  If Prover has a winning strategy in the game starting from Γ, then there is a proof of Γ.

                  Builder winning the GL-split game builds a GL-model. #

                  If Builder has a winning strategy in the game starting from Γ, then there is a proof of Γ, proven in builder_win_builds_model, all other definitions and proofs in this file are helpers.

                  Equations
                  Instances For
                    Equations
                    Instances For
                      Instances For
                        Equations
                        Instances For
                          Equations
                          Instances For
                            @[irreducible]
                            Equations
                            • One or more equations did not get rendered due to their size.
                            Instances For
                              @[irreducible]
                              @[irreducible]
                              theorem Split.make_path_is_in_cone (Δ : SplitSequent) (strat : Strategy coalgebraGame Builder) (g : Game.Pos) (in_cone : inMyCone strat (startPos Δ) g) (h : winning strat (startPos Δ)) (i : Fin (make_path_from strat g).length) :
                              inMyCone strat (startPos Δ) ((make_path_from strat g).get i)
                              theorem Split.always_exists_maximal_path_from_root_or_after (Γ : SplitSequent) (strat : Strategy coalgebraGame Builder) (h : winning strat (startPos Γ)) (g : Game.Pos) (in_cone : inMyCone strat (startPos Γ) g) (head_cases : after_box g g = startPos Γ) :
                              ∃ (π : MaximalPath Γ strat), π.first = g
                              def Split.path_relation (Γ : SplitSequent) (strat : Strategy coalgebraGame Builder) (π₁ π₂ : MaximalPath Γ strat) :

                              Two maximal paths are related if two steps in the game can connect tail to head.

                              Equations
                              Instances For

                                Builds the counter-model from a Builder winning strategy.

                                Equations
                                • One or more equations did not get rendered due to their size.
                                Instances For
                                  @[irreducible]
                                  theorem Split.diamond_in_last_of_diamond_in_first {Γ : SplitSequent} {strat : Strategy coalgebraGame Builder} (h : winning strat (startPos Γ)) (π : MaximalPath Γ strat) (φ : Formula) (i : ) (lt : i < π.list.length) (helper : π.list.length - i - 1 < π.list.length) (ps : Game.turn π.list[π.list.length - i - 1] = Prover) :
                                  @[irreducible]
                                  theorem Split.builder_win_strong {Δ : SplitSequent} (strat : Strategy coalgebraGame Builder) (h : winning strat (startPos Δ)) (π : MaximalPath Δ strat) (φ : Formula) (i : ) (lt : i < π.list.length) (helper : π.list.length - i - 1 < π.list.length) (ps : Game.turn π.list[π.list.length - i - 1] = Prover) :

                                  If Builder wins, no formula in the sequents at Prover positions evaluates to true.

                                  If Builder wins, there exists a counter-model.

                                  Completeness! Comes as a corrolary of gamedet, prover_win_builds_proof, and builder_win_builds_model.

                                  theorem Split.equiv_iff_sem_equiv {φ ψ : Formula} :
                                  semEquiv φ ψ (φψ)

                                  Corollary of completeness_sseq, used in Interpolants.lean

                                  theorem Split.single_preserves_equiv (n : ) (φ ψ χ : Formula) (equiv : φψ) :
                                  single n χ φsingle n χ ψ