Built with Alectryon, running Coq+SerAPI v8.17.0+0.17.1. Bubbles () indicate interactive fragments: hover for details, tap to reveal contents. Use Ctrl+↑ Ctrl+↓ to navigate, Ctrl+πŸ–±οΈ to focus. On Mac, use ⌘ instead of Ctrl.
From OGS Require Import Prelude.
From OGS.Utils Require Import Psh Rel.
From OGS.Ctx Require Import All Ctx Covering Subset.
From OGS.ITree Require Import Event ITree Eq Delay Structure Properties.
From OGS.OGS Require Import Soundness. 

In this file we instanciate our OGS construction with the fully-dual polarized mu-mu-tilde calculus 'System D' from P. Downen & Z. Ariola. The presentation may be slightly unusual as we go for one-sided sequent. The only real divergence from the original calculus is the addition of a restricted form of recursion, making the language non-normalizing.

Types

Type have polarities, basically whether their values are CBV-biased or CBN-biased

Variant pol : Type := pos | neg .

Syntax of types. We have a fully dual type system with:

  • 0, positive void (no constructor),
  • ⊀, negative unit (no destructor),
  • βŠ₯, negative void (one trivial destructor),
  • 1, positive unit (one trivial constructor),
  • A βŠ— B, positive product (pairs with pattern-matching),
  • A β…‹ B, negative sum (one binary destructor),
  • A βŠ• B, positive sum (usual coproduct with injections),
  • A & B, negative product (usual product with projections),
  • ↓ A, positive shift (thunking),
  • ↑ A, negative shift ('returners'),
  • βŠ– A, positive negation (approximately continuations accepting an A),
  • Β¬ A, negative negation (approximately refutations of A).

We opt for an explicit treatment of polarity, by indexing the family of types.

Inductive pre_ty : pol -> Type :=
| Zer : pre_ty pos
| Top : pre_ty neg
| One : pre_ty pos
| Bot : pre_ty neg
| Tens : pre_ty pos -> pre_ty pos -> pre_ty pos
| Par : pre_ty neg -> pre_ty neg -> pre_ty neg
| Or : pre_ty pos -> pre_ty pos -> pre_ty pos
| And : pre_ty neg -> pre_ty neg -> pre_ty neg
| ShiftP : pre_ty neg -> pre_ty pos
| ShiftN : pre_ty pos -> pre_ty neg
| NegP : pre_ty neg -> pre_ty pos
| NegN : pre_ty pos -> pre_ty neg
.
Notation "0" := (Zer) : ty_scope .
Notation "1" := (One) : ty_scope .
Notation "⊀" := (Top) : ty_scope .
Notation "βŠ₯" := (Bot) : ty_scope .
Notation "A βŠ— B" := (Tens A B) (at level 40) : ty_scope.
Notation "A β…‹ B" := (Par A B) (at level 40) : ty_scope .
Notation "A βŠ• B" := (Or A B) (at level 40) : ty_scope.
Notation "A & B" := (And A B) (at level 40) : ty_scope.
Notation "↓ A" := (ShiftP A) (at level 40) : ty_scope.
Notation "↑ A" := (ShiftN A) (at level 40) : ty_scope.
Notation "βŠ– A" := (NegP A) (at level 5) : ty_scope .
Notation "Β¬ A" := (NegN A) (at level 5) : ty_scope .

As hinted above, we go for one-sided sequents. This enables to have only one context instead of two, simplifying the theory of substitution. On the flip-side, as we still need two kinds of variables, the 'normal' ones and the co-variables, our contexts will not contain bare types but side-annotated types. A variable of type A will thus be stored as \`-A in the context while a co-variable of type A will be stored as \`-A.

Variant ty : Type :=
| LTy {p} : pre_ty p -> ty
| RTy {p} : pre_ty p -> ty
.
Notation "'`+' t" := (LTy t) (at level 5) : ty_scope .
Notation "'`-' t" := (RTy t) (at level 5) : ty_scope .

Equations t_neg : ty -> ty :=
  t_neg `+a := `-a ;
  t_neg `-a := `+a .
Notation "a †" := (t_neg a) (at level 5) : ty_scope.

Finally we define contexts as backward lists of side-annotated types.

Definition t_ctx : Type := Ctx.ctx ty.

Terms

We define the well-typed syntax of the language with 3 mutually defined syntactic categories: terms, weak head-normal forms and states ('language configurations' in the paper).

Nothing should be too surprising. A first notable point is that by choosing to have an explicit notion of 'side' of a variable, we can have a single construct for both mu and mu-tilde. A second notable point is our new slightly exotic RecL and RecR constructions. They allow arbitrary recursion at co-terms of positive types and at terms of negative types. These polarity restrictions allow us to have minimal disruption of the evaluation rules.

Inductive term : t_ctx -> ty -> Type :=
| Mu {Ξ“ A} : state (Ξ“ β–Άβ‚“ A†) -> term Ξ“ A
| RecL {Ξ“} {A : pre_ty pos} : term (Ξ“ β–Άβ‚“ `-A) `-A -> term Ξ“ `-A
| RecR {Ξ“} {A : pre_ty neg} : term (Ξ“ β–Άβ‚“ `+A) `+A -> term Ξ“ `+A
| Whn {Ξ“ A} : whn Ξ“ A -> term Ξ“ A
with whn : t_ctx -> ty -> Type :=
| Var {Ξ“ A} : Ξ“ βˆ‹ A -> whn Ξ“ A
| ZerL {Ξ“} : whn Ξ“ `-0
| TopR {Ξ“} : whn Ξ“ `+⊀
| OneR {Ξ“} : whn Ξ“ `+1
| OneL {Ξ“} : state Ξ“ -> whn Ξ“ `-1
| BotR {Ξ“} : state Ξ“ -> whn Ξ“ `+βŠ₯
| BotL {Ξ“} : whn Ξ“ `-βŠ₯
| TenR {Ξ“ A B} : whn Ξ“ `+A -> whn Ξ“ `+B -> whn Ξ“ `+(A βŠ— B)
| TenL {Ξ“ A B} : state (Ξ“ β–Άβ‚“ `+A β–Άβ‚“ `+B) -> whn Ξ“ `-(A βŠ— B)
| ParR {Ξ“ A B} : state (Ξ“ β–Άβ‚“ `-A β–Άβ‚“ `-B) -> whn Ξ“ `+(A β…‹ B)
| ParL {Ξ“ A B} : whn Ξ“ `-A -> whn Ξ“ `-B -> whn Ξ“ `-(A β…‹ B)
| OrR1 {Ξ“ A B} : whn Ξ“ `+A -> whn Ξ“ `+(A βŠ• B)
| OrR2 {Ξ“ A B} : whn Ξ“ `+B -> whn Ξ“ `+(A βŠ• B)
| OrL {Ξ“ A B} : state (Ξ“ β–Άβ‚“ `+A) -> state (Ξ“ β–Άβ‚“ `+B) -> whn Ξ“ `-(A βŠ• B)
| AndR {Ξ“ A B} : state (Ξ“ β–Άβ‚“ `-A) -> state (Ξ“ β–Άβ‚“ `-B) -> whn Ξ“ `+(A & B)
| AndL1 {Ξ“ A B} : whn Ξ“ `-A -> whn Ξ“ `-(A & B)
| AndL2 {Ξ“ A B} : whn Ξ“ `-B -> whn Ξ“ `-(A & B)
| ShiftPR {Ξ“ A} : term Ξ“ `+A -> whn Ξ“ `+(↓ A)
| ShiftPL {Ξ“ A} : state (Ξ“ β–Άβ‚“ `+A) -> whn Ξ“ `-(↓ A)
| ShiftNR {Ξ“ A} : state (Ξ“ β–Άβ‚“ `-A) -> whn Ξ“ `+(↑ A)
| ShiftNL {Ξ“ A} : term Ξ“ `-A -> whn Ξ“ `-(↑ A)
| NegPR {Ξ“ A} : whn Ξ“ `-A -> whn Ξ“ `+(βŠ– A)
| NegPL {Ξ“ A} : state (Ξ“ β–Άβ‚“ `-A) -> whn Ξ“ `-(βŠ– A)
| NegNR {Ξ“ A} : state (Ξ“ β–Άβ‚“ `+A) -> whn Ξ“ `+(Β¬ A)
| NegNL {Ξ“ A} : whn Ξ“ `+A -> whn Ξ“ `-(Β¬ A)
with state : t_ctx -> Type :=
| Cut {Ξ“} p {A : pre_ty p} : term Ξ“ `+A -> term Ξ“ `-A -> state Ξ“
.

Definition Cut' {Ξ“ A} : term Ξ“ A -> term Ξ“ A† -> state Ξ“ :=
  match A with
  | `+A => fun t1 t2 => Cut _ t1 t2
  | `-A => fun t1 t2 => Cut _ t2 t1
  end .

Values are not exactly weak head-normal forms, but depend on the polarity of the type. As positive types have CBV evaluation, their values are weak head-normal forms, but their co-values (evaluation contexts) are just any co-term (context) as they are delayed anyways. Dually for negative types, values are delayed hence can be any term while co-values must be weak head-normal form contexts.

Equations val : t_ctx -> ty -> Type :=
  val Ξ“ (@LTy pos A) := whn Ξ“ `+A ;
  val Ξ“ (@RTy pos A) := term Ξ“ `-A ;
  val Ξ“ (@LTy neg A) := term Ξ“ `+A ;
  val Ξ“ (@RTy neg A) := whn Ξ“ `-A .
Arguments val _ _ /.

We provide a 'smart-constructor' for variables, embedding variables in values.

Equations var : c_var ⇒₁ val :=
  var _ (@LTy pos _) i := Var i ;
  var _ (@RTy pos _) i := Whn (Var i) ;
  var _ (@LTy neg _) i := Whn (Var i) ;
  var _ (@RTy neg _) i := Var i .
#[global] Arguments var {Ξ“} [x] / i.

Renaming

Without surprise parallel renaming goes by a big mutual induction, shifting the renaming apropriately while going under binders. Note the use of the internal substitution hom to type it.

Equations t_rename : term ⇒₁ ⟦ c_var , term βŸ§β‚ :=
  t_rename _ _ (Mu c)    _ f := Mu (s_rename _ c _ (r_shift1 f)) ;
  t_rename _ _ (RecL t)  _ f := RecL (t_rename _ _ t _ (r_shift1 f)) ;
  t_rename _ _ (RecR t)  _ f := RecR (t_rename _ _ t _ (r_shift1 f)) ;
  t_rename _ _ (Whn v)   _ f := Whn (w_rename _ _ v _ f) ;
with w_rename : whn ⇒₁ ⟦ c_var , whn βŸ§β‚ :=
  w_rename _  _ (Var i)       _ f := Var (f _ i) ;
  w_rename _  _ (ZerL)        _ f := ZerL ;
  w_rename _  _ (TopR)        _ f := TopR ;
  w_rename _  _ (OneR)        _ f := OneR ;
  w_rename _  _ (OneL c)      _ f := OneL (s_rename _ c _ f) ;
  w_rename _  _ (BotR c)      _ f := BotR (s_rename _ c _ f) ;
  w_rename _  _ (BotL)        _ f := BotL ;
  w_rename _  _ (TenR v1 v2)  _ f := TenR (w_rename _ _ v1 _ f) (w_rename _ _ v2 _ f) ;
  w_rename _  _ (TenL c)      _ f := TenL (s_rename _ c _ (r_shift2 f)) ;
  w_rename _  _ (ParR c)      _ f := ParR (s_rename _ c _ (r_shift2 f)) ;
  w_rename _  _ (ParL k1 k2)  _ f := ParL (w_rename _ _ k1 _ f) (w_rename _ _ k2 _ f) ;
  w_rename _  _ (OrR1 v)      _ f := OrR1 (w_rename _ _ v _ f) ;
  w_rename _  _ (OrR2 v)      _ f := OrR2 (w_rename _ _ v _ f) ;
  w_rename _  _ (OrL c1 c2)   _ f := OrL (s_rename _ c1 _ (r_shift1 f))
                                         (s_rename _ c2 _ (r_shift1 f)) ;
  w_rename _  _ (AndR c1 c2)  _ f := AndR (s_rename _ c1 _ (r_shift1 f))
                                          (s_rename _ c2 _ (r_shift1 f)) ;
  w_rename _  _ (AndL1 k)     _ f := AndL1 (w_rename _ _ k _ f) ;
  w_rename _  _ (AndL2 k)     _ f := AndL2 (w_rename _ _ k _ f) ;
  w_rename _  _ (ShiftPR t)   _ f := ShiftPR (t_rename _ _ t _ f) ;
  w_rename _  _ (ShiftPL c)   _ f := ShiftPL (s_rename _ c _ (r_shift1 f)) ;
  w_rename _  _ (ShiftNR c)   _ f := ShiftNR (s_rename _ c _ (r_shift1 f)) ;
  w_rename _  _ (ShiftNL t)   _ f := ShiftNL (t_rename _ _ t _ f) ;
  w_rename _  _ (NegPR k)     _ f := NegPR (w_rename _ _ k _ f) ;
  w_rename _  _ (NegPL c)     _ f := NegPL (s_rename _ c _ (r_shift1 f)) ;
  w_rename _  _ (NegNR c)     _ f := NegNR (s_rename _ c _ (r_shift1 f)) ;
  w_rename _  _ (NegNL v)     _ f := NegNL (w_rename _ _ v _ f) ;
with s_rename : state β‡’β‚€ ⟦ c_var , state βŸ§β‚€ :=
  s_rename _ (Cut _ v k) _ f := Cut _ (t_rename _ _ v _ f) (t_rename _ _ k _ f) .

We extend it to values...

Equations v_rename : val ⇒₁ ⟦ c_var , val βŸ§β‚ :=
  v_rename _ (@LTy pos a) := w_rename _ _ ;
  v_rename _ (@RTy pos a) := t_rename _ _ ;
  v_rename _ (@LTy neg a) := t_rename _ _ ;
  v_rename _ (@RTy neg a) := w_rename _ _ .

... provide a couple infix notations...

Notation "t β‚œβŠ›α΅£ r" := (t_rename _ _ t _ r%asgn) (at level 14).
Notation "w `α΅₯βŠ›α΅£ r" := (w_rename _ _ w _ r%asgn) (at level 14).
Notation "v α΅₯βŠ›α΅£ r" := (v_rename _ _ v _ r%asgn) (at level 14).
Notation "s β‚›βŠ›α΅£ r" := (s_rename _ s _ r%asgn) (at level 14).

... and extend it to assignments.

Definition a_ren {Ξ“1 Ξ“2 Ξ“3} : Ξ“1 =[val]> Ξ“2 -> Ξ“2 βŠ† Ξ“3 -> Ξ“1 =[val]> Ξ“3 :=
  fun f g _ i => v_rename _ _ (f _ i) _ g .
Arguments a_ren {_ _ _} _ _ _ _ /.
Notation "a βŠ›α΅£ r" := (a_ren a r%asgn) (at level 14) : asgn_scope.

The following bunch of shifting functions will help us define parallel substitution.

Definition t_shift1 {Ξ“ y} : term Ξ“ β‡’α΅’ term (Ξ“ β–Άβ‚“ y)  := fun _ t => t β‚œβŠ›α΅£ r_pop.
Definition w_shift1 {Ξ“ y} : whn Ξ“ β‡’α΅’ whn (Ξ“ β–Άβ‚“ y)    := fun _ w => w `α΅₯βŠ›α΅£ r_pop.
Definition s_shift1 {Ξ“ y} : state Ξ“ -> state (Ξ“ β–Άβ‚“ y) := fun s => s β‚›βŠ›α΅£ r_pop.
Definition v_shift1 {Ξ“ y} : val Ξ“ β‡’α΅’ val (Ξ“ β–Άβ‚“ y)    := fun _ v => v α΅₯βŠ›α΅£ r_pop.
Definition v_shift2 {Ξ“ y z} : val Ξ“ β‡’α΅’ val (Ξ“ β–Άβ‚“ y β–Άβ‚“ z) := fun _ v => v α΅₯βŠ›α΅£ (r_pop α΅£βŠ› r_pop).
Definition a_shift1 {Ξ“ Ξ”} [y] (a : Ξ“ =[val]> Ξ”) : (Ξ“ β–Άβ‚“ y) =[val]> (Ξ” β–Άβ‚“ y)
  := [ fun _ i => v_shift1 _ (a _ i) ,β‚“ var top ].
Definition a_shift2 {Ξ“ Ξ”} [y z] (a : Ξ“ =[val]> Ξ”) : (Ξ“ β–Άβ‚“ y β–Άβ‚“ z) =[val]> (Ξ” β–Άβ‚“ y β–Άβ‚“ z)
  := [ [ fun _ i => v_shift2 _ (a _ i) ,β‚“ var (pop top) ] ,β‚“ var top ].

We also define two embeddings linking the various syntactical categories.

Equations v_of_w Ξ“ A : whn Ξ“ A -> val Ξ“ A :=
  v_of_w _ (@LTy pos _) v := v ;
  v_of_w _ (@RTy pos _) u := Whn u ;
  v_of_w _ (@LTy neg _) u := Whn u ;
  v_of_w _ (@RTy neg _) k := k .
Arguments v_of_w {Ξ“ A} v.
#[global] Coercion v_of_w : whn >-> val.

Equations t_of_v Ξ“ A : val Ξ“ A -> term Ξ“ A :=
  t_of_v _ (@LTy pos _) v := Whn v ;
  t_of_v _ (@RTy pos _) u := u ;
  t_of_v _ (@LTy neg _) u := u ;
  t_of_v _ (@RTy neg _) k := Whn k .
Arguments t_of_v {Ξ“ A} v.
#[global] Coercion t_of_v : val >-> term.

Substitution

Having done with renaming, we reapply the same pattern to define parallel substitution. Note that substituting a weak head-normal form with values may not yield a weak head-normal form, but only a value!

Equations t_subst : term ⇒₁ ⟦ val , term βŸ§β‚ :=
  t_subst _ _ (Mu c)    _ f := Mu (s_subst _ c _ (a_shift1 f)) ;
  t_subst _ _ (RecL t)  _ f := RecL (t_subst _ _ t _ (a_shift1 f)) ;
  t_subst _ _ (RecR t)  _ f := RecR (t_subst _ _ t _ (a_shift1 f)) ;
  t_subst _ _ (Whn v)   _ f := w_subst _ _ v _ f ;
with w_subst : whn ⇒₁ ⟦ val , val βŸ§β‚ :=
  w_subst _  _ (Var i)      _ f := f _ i ;
  w_subst _  _ (ZerL)       _ f := Whn ZerL ;
  w_subst _  _ (TopR)       _ f := Whn TopR ;
  w_subst _  _ (OneR)       _ f := OneR ;
  w_subst _  _ (OneL c)     _ f := Whn (OneL (s_subst _ c _ f)) ;
  w_subst _  _ (BotR c)     _ f := Whn (BotR (s_subst _ c _ f)) ;
  w_subst _  _ (BotL)       _ f := BotL ;
  w_subst _  _ (TenR v1 v2) _ f := TenR (w_subst _ _ v1 _ f) (w_subst _ _ v2 _ f) ;
  w_subst _  _ (TenL c)     _ f := Whn (TenL (s_subst _ c _ (a_shift2 f))) ;
  w_subst _  _ (ParR c)     _ f := Whn (ParR (s_subst _ c _ (a_shift2 f))) ;
  w_subst _  _ (ParL k1 k2) _ f := ParL (w_subst _ _ k1 _ f) (w_subst _ _ k2 _ f) ;
  w_subst _  _ (OrR1 v)     _ f := OrR1 (w_subst _ _ v _ f) ;
  w_subst _  _ (OrR2 v)     _ f := OrR2 (w_subst _ _ v _ f) ;
  w_subst _  _ (OrL c1 c2)  _ f := Whn (OrL (s_subst _ c1 _ (a_shift1 f))
                                            (s_subst _ c2 _ (a_shift1 f))) ;
  w_subst _  _ (AndR c1 c2) _ f := Whn (AndR (s_subst _ c1 _ (a_shift1 f))
                                             (s_subst _ c2 _ (a_shift1 f))) ;
  w_subst _  _ (AndL1 k)    _ f := AndL1 (w_subst _ _ k _ f) ;
  w_subst _  _ (AndL2 k)    _ f := AndL2 (w_subst _ _ k _ f) ;
  w_subst _  _ (ShiftPR t)  _ f := ShiftPR (t_subst _ _ t _ f) ;
  w_subst _  _ (ShiftPL c)  _ f := Whn (ShiftPL (s_subst _ c _ (a_shift1 f))) ;
  w_subst _  _ (ShiftNR c)  _ f := Whn (ShiftNR (s_subst _ c _ (a_shift1 f))) ;
  w_subst _  _ (ShiftNL t)  _ f := ShiftNL (t_subst _ _ t _ f) ;
  w_subst _  _ (NegPR k)    _ f := NegPR (w_subst _ _ k _ f) ;
  w_subst _  _ (NegPL c)    _ f := Whn (NegPL (s_subst _ c _ (a_shift1 f))) ;
  w_subst _  _ (NegNR c)    _ f := Whn (NegNR (s_subst _ c _ (a_shift1 f))) ;
  w_subst _  _ (NegNL v)    _ f := NegNL (w_subst _ _ v _ f) ;
with s_subst : state β‡’β‚€ ⟦ val , state βŸ§β‚€ :=
   s_subst _ (Cut p v k) _ f := Cut p (t_subst _ _ v _ f) (t_subst _ _ k _ f) .

Notation "t `β‚œβŠ› a" := (t_subst _ _ t _ a%asgn) (at level 30).
Notation "w `α΅₯βŠ› a" := (w_subst _ _ w _ a%asgn) (at level 30).

Equations v_subst : val ⇒₁ ⟦ val , val βŸ§β‚ :=
  v_subst _ (@LTy pos a) v _ f := v `α΅₯βŠ› f ;
  v_subst _ (@RTy pos a) t _ f := t `β‚œβŠ› f ;
  v_subst _ (@LTy neg a) t _ f := t `β‚œβŠ› f ;
  v_subst _ (@RTy neg a) k _ f := k `α΅₯βŠ› f .

With this in hand we can instanciate the relevant part of substitution monoid and module structures for values and states. This will provide us with the missing infix notations.

#[global] Instance val_m_monoid : subst_monoid val :=
  {| v_var := @var ; v_sub := v_subst |} .
#[global] Instance state_module : subst_module val state :=
  {| c_sub := s_subst |} .

We now define helpers for substituting the top one or top two variables from a context.

Definition asgn1 {Ξ“ a} (v : val Ξ“ a) : (Ξ“ β–Άβ‚“ a) =[val]> Ξ“ := [ var ,β‚“ v ] .
Definition asgn2 {Ξ“ a b} (v1 : val Ξ“ a) (v2 : val Ξ“ b) : (Ξ“ β–Άβ‚“ a β–Άβ‚“ b) =[val]> Ξ“
  := [ [ var ,β‚“ v1 ] ,β‚“ v2 ].

Arguments asgn1 {_ _} & _.
Arguments asgn2 {_ _ _} & _ _.

Notation "₁[ v ]" := (asgn1 v).
Notation "β‚‚[ v1 , v2 ]" := (asgn2 v1 v2).

Observations

When defining (co-)patterns, we will enforce a form of focalisation, where no negative variables are introduced. In this context, 'negative' is a new notion applying to side-annotated types, mixing both type polarity and side annotation: a side-annotated variable is positive iff it is a positive variable or a negative co-variable.

Equations is_neg : ty -> SProp :=
  is_neg (@LTy pos a) := sEmpty ;
  is_neg (@RTy pos a) := sUnit ;
  is_neg (@LTy neg a) := sUnit ;
  is_neg (@RTy neg a) := sEmpty .

We define negative types as a subset of types, and negative contexts as a subset of contexts. Our generic infrastructure for contexts and variables really shines here as the type of variables in a negative context is convertible to the type of variables in the underlying context. See Ctx/Subset.v.

Definition neg_ty : Type := sigS is_neg.
Definition neg_coe : neg_ty -> ty := sub_elt.
Global Coercion neg_coe : neg_ty >-> ty.

Definition neg_ctx : Type := ctxS ty t_ctx is_neg.
Definition neg_c_coe : neg_ctx -> ctx ty := sub_elt.
Global Coercion neg_c_coe : neg_ctx >-> ctx.

We can now define patterns...

Inductive pat : ty -> Type :=
| PVarP (A : pre_ty neg) : pat `+A
| PVarN (A : pre_ty pos) : pat `-A
| POne : pat `+1
| PBot : pat `-βŠ₯
| PTen {A B} : pat `+A -> pat `+B -> pat `+(A βŠ— B)
| PPar {A B} : pat `-A -> pat `-B -> pat `-(A β…‹ B)
| POr1 {A B} : pat `+A -> pat `+(A βŠ• B)
| POr2 {A B} : pat `+B -> pat `+(A βŠ• B)
| PAnd1 {A B} : pat `-A -> pat `-(A & B)
| PAnd2 {A B} : pat `-B -> pat `-(A & B)
| PShiftP A : pat `+(↓ A)
| PShiftN A : pat `-(↑ A)
| PNegP {A} : pat `-A -> pat `+(βŠ– A)
| PNegN {A} : pat `+A -> pat `-(Β¬ A)
.

... and their domain, i.e. the context they bind.

Equations p_dom {t} : pat t -> neg_ctx :=
  p_dom (PVarP A)    := βˆ…β‚› β–Άβ‚› {| sub_elt := `+A ; sub_prf := stt |} ;
  p_dom (PVarN A)    := βˆ…β‚› β–Άβ‚› {| sub_elt := `-A ; sub_prf := stt |} ;
  p_dom (POne)       := βˆ…β‚› ;
  p_dom (PBot)       := βˆ…β‚› ;
  p_dom (PTen p1 p2) := p_dom p1 +β–Άβ‚› p_dom p2 ;
  p_dom (PPar p1 p2) := p_dom p1 +β–Άβ‚› p_dom p2 ;
  p_dom (POr1 p)     := p_dom p ;
  p_dom (POr2 p)     := p_dom p ;
  p_dom (PAnd1 p)    := p_dom p ;
  p_dom (PAnd2 p)    := p_dom p ;
  p_dom (PShiftP A)  := βˆ…β‚› β–Άβ‚› {| sub_elt := `+A ; sub_prf := stt |} ;
  p_dom (PShiftN A)  := βˆ…β‚› β–Άβ‚› {| sub_elt := `-A ; sub_prf := stt |} ;
  p_dom (PNegP p)    := p_dom p ;
  p_dom (PNegN p)    := p_dom p .

We finally instanciate the observation structure. Note that our generic formalization mostly cares about 'observations', that is co-patterns. As such we instanciate observations by patterns at the dual type.

Definition obs_op : Oper ty neg_ctx :=
  {| o_op A := pat A† ; o_dom _ p := p_dom p |} .

Now come a rather tedious set of embeddings between syntactic categories related to patterns. We start by embedding patterns into weak head-normal forms.

Equations w_of_p {a} (p : pat a) : whn (p_dom p) a :=
  w_of_p (PVarP _)    := Var top ;
  w_of_p (PVarN _)    := Var top ;
  w_of_p (POne)       := OneR ;
  w_of_p (PBot)       := BotL ;
  w_of_p (PTen p1 p2) := TenR (w_of_p p1 `α΅₯βŠ›α΅£ r_cat_l) (w_of_p p2 `α΅₯βŠ›α΅£ r_cat_r) ;
  w_of_p (PPar p1 p2) := ParL (w_of_p p1 `α΅₯βŠ›α΅£ r_cat_l) (w_of_p p2 `α΅₯βŠ›α΅£ r_cat_r) ;
  w_of_p (POr1 p)     := OrR1 (w_of_p p) ;
  w_of_p (POr2 p)     := OrR2 (w_of_p p) ;
  w_of_p (PAnd1 p)    := AndL1 (w_of_p p) ;
  w_of_p (PAnd2 p)    := AndL2 (w_of_p p) ;
  w_of_p (PShiftP _)  := ShiftPR (Whn (Var top)) ;
  w_of_p (PShiftN _)  := ShiftNL (Whn (Var top)) ;
  w_of_p (PNegP p)    := NegPR (w_of_p p) ;
  w_of_p (PNegN p)    := NegNL (w_of_p p) .
#[global] Coercion w_of_p : pat >-> whn.

Now we explain how to split (some) weak head-normal forms into a pattern filled with values. I am sorry in advance for your CPU-cycles wasted to typechecking these quite hard dependent pattern matchings. We start off by two helpers for refuting impossible variables in negative context, which because of the use of SProp give trouble to Equations for deriving functional elimination principles if inlined.

Definition elim_var_p {Ξ“ : neg_ctx} {A : pre_ty pos} {X : Type} : Ξ“ βˆ‹ `+A -> X
  := fun i => match s_prf i with end .

Definition elim_var_n {Ξ“ : neg_ctx} {A : pre_ty neg} {X : Type} : Ξ“ βˆ‹ `-A -> X
  := fun i => match s_prf i with end .

Equations p_of_w_0p {Ξ“ : neg_ctx} (A : pre_ty pos) : whn Ξ“ `+A -> pat `+A :=
  p_of_w_0p (0)     (Var i)      := elim_var_p i ;
  p_of_w_0p (1)     (Var i)      := elim_var_p i ;
  p_of_w_0p (A βŠ— B) (Var i)      := elim_var_p i ;
  p_of_w_0p (A βŠ• B) (Var i)      := elim_var_p i ;
  p_of_w_0p (↓ A)   (Var i)      := elim_var_p i ;
  p_of_w_0p (βŠ– A)   (Var i)      := elim_var_p i ;
  p_of_w_0p (1)     (OneR)       := POne ;
  p_of_w_0p (A βŠ— B) (TenR v1 v2) := PTen (p_of_w_0p A v1) (p_of_w_0p B v2) ;
  p_of_w_0p (A βŠ• B) (OrR1 v)     := POr1 (p_of_w_0p A v) ;
  p_of_w_0p (A βŠ• B) (OrR2 v)     := POr2 (p_of_w_0p B v) ;
  p_of_w_0p (↓ A)   (ShiftPR _)  := PShiftP A ;
  p_of_w_0p (βŠ– A)   (NegPR k)    := PNegP (p_of_w_0n A k) ;
with p_of_w_0n {Ξ“ : neg_ctx} (A : pre_ty neg) : whn Ξ“ `-A -> pat `-A :=
  p_of_w_0n (⊀)     (Var i)      := elim_var_n i ;
  p_of_w_0n (βŠ₯)     (Var i)      := elim_var_n i ;
  p_of_w_0n (A β…‹ B) (Var i)      := elim_var_n i ;
  p_of_w_0n (A & B) (Var i)      := elim_var_n i ;
  p_of_w_0n (↑ A)   (Var i)      := elim_var_n i ;
  p_of_w_0n (Β¬ A)   (Var i)      := elim_var_n i ;
  p_of_w_0n (βŠ₯)     (BotL)       := PBot ;
  p_of_w_0n (A β…‹ B) (ParL k1 k2) := PPar (p_of_w_0n A k1) (p_of_w_0n B k2) ;
  p_of_w_0n (A & B) (AndL1 k)    := PAnd1 (p_of_w_0n A k) ;
  p_of_w_0n (A & B) (AndL2 k)    := PAnd2 (p_of_w_0n B k) ;
  p_of_w_0n (↑ A)   (ShiftNL _)  := PShiftN A ;
  p_of_w_0n (Β¬ A)   (NegNL v)    := PNegN (p_of_w_0p A v) .

Equations p_dom_of_w_0p {Ξ“ : neg_ctx} (A : pre_ty pos) (v : whn Ξ“ `+A)
          : p_dom (p_of_w_0p A v) =[val]> Ξ“ by struct A :=
  p_dom_of_w_0p (0)     (Var i)      := elim_var_p i ;
  p_dom_of_w_0p (1)     (Var i)      := elim_var_p i ;
  p_dom_of_w_0p (A βŠ— B) (Var i)      := elim_var_p i ;
  p_dom_of_w_0p (A βŠ• B) (Var i)      := elim_var_p i ;
  p_dom_of_w_0p (↓ A)   (Var i)      := elim_var_p i ;
  p_dom_of_w_0p (βŠ– A)   (Var i)      := elim_var_p i ;
  p_dom_of_w_0p (1)     (OneR)       := a_empty ;
  p_dom_of_w_0p (A βŠ— B) (TenR v1 v2) := [ p_dom_of_w_0p A v1 , p_dom_of_w_0p B v2 ] ;
  p_dom_of_w_0p (A βŠ• B) (OrR1 v)     := p_dom_of_w_0p A v ;
  p_dom_of_w_0p (A βŠ• B) (OrR2 v)     := p_dom_of_w_0p B v ;
  p_dom_of_w_0p (↓ A)   (ShiftPR x)  := a_append a_empty x ;
  p_dom_of_w_0p (βŠ– A)   (NegPR k)    := p_dom_of_w_0n A k ;
     with p_dom_of_w_0n {Ξ“ : neg_ctx} (A : pre_ty neg) (k : whn Ξ“ `-A)
          : p_dom (p_of_w_0n A k) =[val]> Ξ“ by struct A :=
  p_dom_of_w_0n (⊀)     (Var i)      := elim_var_n i ;
  p_dom_of_w_0n (βŠ₯)     (Var i)      := elim_var_n i ;
  p_dom_of_w_0n (A β…‹ B) (Var i)      := elim_var_n i ;
  p_dom_of_w_0n (A & B) (Var i)      := elim_var_n i ;
  p_dom_of_w_0n (↑ A)   (Var i)      := elim_var_n i ;
  p_dom_of_w_0n (Β¬ A)   (Var i)      := elim_var_n i ;
  p_dom_of_w_0n (βŠ₯)     (BotL)       := a_empty ;
  p_dom_of_w_0n (A β…‹ B) (ParL k1 k2) := [ p_dom_of_w_0n A k1 , p_dom_of_w_0n B k2 ] ;
  p_dom_of_w_0n (A & B) (AndL1 k)    := p_dom_of_w_0n A k ;
  p_dom_of_w_0n (A & B) (AndL2 k)    := p_dom_of_w_0n B k ;
  p_dom_of_w_0n (↑ A)   (ShiftNL x)  := a_append a_empty x ;
  p_dom_of_w_0n (Β¬ A)   (NegNL v)    := p_dom_of_w_0p A v .

We can now package up all these auxiliary functions into the following ones, abstracting polarity and side-annotation.

Equations p_of_v {Ξ“ : neg_ctx} A : val Ξ“ A -> pat A :=
  p_of_v (@LTy pos A) v := p_of_w_0p A v ;
  p_of_v (@RTy pos A) _ := PVarN A ;
  p_of_v (@LTy neg A) _ := PVarP A ;
  p_of_v (@RTy neg A) k := p_of_w_0n A k .

Equations p_dom_of_v {Ξ“ : neg_ctx} A (v : val Ξ“ A) : p_dom (p_of_v A v) =[val]> Ξ“ :=
  p_dom_of_v (@LTy pos A) v := p_dom_of_w_0p A v ;
  p_dom_of_v (@RTy pos A) x := [ ! ,β‚“ x ] ;
  p_dom_of_v (@LTy neg A) x := [ ! ,β‚“ x ] ;
  p_dom_of_v (@RTy neg A) k := p_dom_of_w_0n A k .

Definition v_split_p {Ξ“ : neg_ctx} {A} (v : whn Ξ“ `+A) : (obs_op # val) Ξ“ `-A
  := (p_of_w_0p A v : o_op obs_op `-A) ⦇ p_dom_of_w_0p A v ⦈.

Definition v_split_n {Ξ“ : neg_ctx} {A} (v : whn Ξ“ `-A) : (obs_op # val) Ξ“ `+A
  := (p_of_w_0n A v : o_op obs_op `+_) ⦇ p_dom_of_w_0n A v ⦈.

Evaluation

With patterns and observations now in hand we prepare for the definition of evaluation and define a shorthand for normal forms. 'Normal forms' are here understood---as in the paper---in our slightly non-standard presentation of triplets of a variable, an observation and an assignment.

Definition nf : Famβ‚€ ty neg_ctx := c_var βˆ₯β‚› (obs_op # val).

Now the bulk of evaluation: the step function. Once again we are greatful for Equations providing us with a justification for the fact that this complex dependent pattern-matching is indeed total.

Equations eval_aux {Ξ“ : neg_ctx} : state Ξ“ -> (state Ξ“ + nf Ξ“) :=
  eval_aux (Cut pos (Mu c)  (x))    := inl (c β‚œβŠ› ₁[ x ]) ;
  eval_aux (Cut neg (x)     (Mu c)) := inl (c β‚œβŠ› ₁[ x ]) ;

  eval_aux (Cut pos (Whn v) (Mu c))  := inl (c β‚œβŠ› ₁[ v ]) ;
  eval_aux (Cut neg (Mu c)  (Whn k)) := inl (c β‚œβŠ› ₁[ k ]) ;

  eval_aux (Cut pos (Whn v)  (RecL k)) := inl (Cut pos (Whn v) (k `β‚œβŠ› ₁[ RecL k ])) ;
  eval_aux (Cut neg (RecR t) (Whn k))  := inl (Cut neg (t `β‚œβŠ› ₁[ RecR t ]) (Whn k)) ;

  eval_aux (Cut pos (Whn v)       (Whn (Var i))) := inr (s_var_upg i β‹… v_split_p v) ;
  eval_aux (Cut neg (Whn (Var i)) (Whn k))       := inr (s_var_upg i β‹… v_split_n k) ;

  eval_aux (Cut pos (Whn (Var i)) (Whn _))       := elim_var_p i ;
  eval_aux (Cut neg (Whn _)       (Whn (Var i))) := elim_var_n i ;

  eval_aux (Cut pos (Whn (OneR))       (Whn (OneL c)))     := inl c ;
  eval_aux (Cut neg (Whn (BotR c))     (Whn (BotL)))       := inl c ;
  eval_aux (Cut pos (Whn (TenR v1 v2)) (Whn (TenL c)))     := inl (c β‚œβŠ› β‚‚[ v1 , v2 ]) ;
  eval_aux (Cut neg (Whn (ParR c))     (Whn (ParL k1 k2))) := inl (c β‚œβŠ› β‚‚[ k1 , k2 ]) ;
  eval_aux (Cut pos (Whn (OrR1 v))     (Whn (OrL c1 c2)))  := inl (c1 β‚œβŠ› ₁[ v ]) ;
  eval_aux (Cut pos (Whn (OrR2 v))     (Whn (OrL c1 c2)))  := inl (c2 β‚œβŠ› ₁[ v ]) ;
  eval_aux (Cut neg (Whn (AndR c1 c2)) (Whn (AndL1 k)))    := inl (c1 β‚œβŠ› ₁[ k ]) ;
  eval_aux (Cut neg (Whn (AndR c1 c2)) (Whn (AndL2 k)))    := inl (c2 β‚œβŠ› ₁[ k ]) ;
  eval_aux (Cut pos (Whn (ShiftPR x))  (Whn (ShiftPL c)))  := inl (c β‚œβŠ› ₁[ x ]) ;
  eval_aux (Cut neg (Whn (ShiftNR c))  (Whn (ShiftNL x)))  := inl (c β‚œβŠ› ₁[ x ]) ;
  eval_aux (Cut pos (Whn (NegPR k))    (Whn (NegPL c)))    := inl (c β‚œβŠ› ₁[ k ]) ;
  eval_aux (Cut neg (Whn (NegNR c))    (Whn (NegNL v)))    := inl (c β‚œβŠ› ₁[ v ]) .

Finally we define evaluation as the iteration of the step function in the Delay monad, and also define application of an observation with arguments to a value.

Definition eval {Ξ“ : neg_ctx} : state Ξ“ -> delay (nf Ξ“)
  := iter_delay (fun c => Ret' (eval_aux c)).

Definition p_app {Ξ“ A} (v : val Ξ“ A) (m : pat A†) (e : p_dom m =[val]> Ξ“) : state Ξ“ :=
  Cut' v (m `α΅₯βŠ› e) .

Metatheory

Now comes a rather ugly part: the metatheory of our syntax. Comments will be rather more sparse. For a thorough explaination of its structure, see Examples/Lambda/CBLTyped.v. We will here be concerned with extensional equality preservation, identity and composition laws for renaming and substitution, and also refolding lemmas for splitting and embedding patterns. You are encouraged to just skip until line ~1300.

Scheme term_mut := Induction for term Sort Prop
  with whn_mut := Induction for whn Sort Prop
  with state_mut := Induction for state Sort Prop.

Record syn_ind_args
  (P_t : forall Ξ“ A, term Ξ“ A -> Prop)
  (P_w : forall Ξ“ A, whn Ξ“ A -> Prop)
  (P_s : forall Ξ“, state Ξ“ -> Prop) :=
{
  ind_mu : forall Ξ“ A s (H : P_s _ s), P_t Ξ“ A (Mu s) ;
  ind_recp : forall Ξ“ A t (H : P_t _ _ t), P_t Ξ“ `-A (RecL t) ;
  ind_recn : forall Ξ“ A t (H : P_t _ _ t), P_t Ξ“ `+A (RecR t) ;
  ind_whn : forall Ξ“ A w (H : P_w _ _ w), P_t Ξ“ A (Whn w) ;
  ind_var : forall Ξ“ A h, P_w Ξ“ A (Var h) ;
  ind_zerl : forall Ξ“, P_w Ξ“ `-0 ZerL ;
  ind_topr : forall Ξ“, P_w Ξ“ `+⊀ TopR ;
  ind_oner : forall Ξ“, P_w Ξ“ `+1 OneR ;
  ind_onel : forall Ξ“ s, P_s Ξ“ s -> P_w Ξ“ `-1 (OneL s) ;
  ind_botr : forall Ξ“ s, P_s Ξ“ s -> P_w Ξ“ `+βŠ₯ (BotR s) ;
  ind_botl : forall Ξ“, P_w Ξ“ `-βŠ₯ BotL ;
  ind_tenr : forall Ξ“ A B w1 (H1 : P_w _ _ w1) w2 (H2 : P_w _ _ w2), P_w Ξ“ `+(A βŠ— B) (TenR w1 w2) ;
  ind_tenl : forall Ξ“ A B s (H : P_s _ s), P_w Ξ“ `-(A βŠ— B) (TenL s) ;
  ind_parr : forall Ξ“ A B s (H : P_s _ s), P_w Ξ“ `+(A β…‹ B) (ParR s) ;
  ind_parl : forall Ξ“ A B w1 (H1 : P_w _ _ w1) w2 (H2 : P_w Ξ“ `-B w2), P_w Ξ“ `-(A β…‹ B) (ParL w1 w2) ;
  ind_orr1 : forall Ξ“ A B w (H : P_w _ _ w), P_w Ξ“ `+(A βŠ• B) (OrR1 w) ;
  ind_orr2 : forall Ξ“ A B w (H : P_w _ _ w), P_w Ξ“ `+(A βŠ• B) (OrR2 w) ;
  ind_orl : forall Ξ“ A B s1 (H1 : P_s _ s1) s2 (H2 : P_s _ s2), P_w Ξ“ `-(A βŠ• B) (OrL s1 s2) ;
  ind_andr : forall Ξ“ A B s1 (H1 : P_s _ s1) s2 (H2 : P_s _ s2), P_w Ξ“ `+(A & B) (AndR s1 s2) ;
  ind_andl1 : forall Ξ“ A B w (H : P_w _ _ w), P_w Ξ“ `-(A & B) (AndL1 w) ;
  ind_andl2 : forall Ξ“ A B w (H : P_w _ _ w), P_w Ξ“ `-(A & B) (AndL2 w) ;
  ind_shiftpr : forall Ξ“ A t (H : P_t _ _ t), P_w Ξ“ `+(↓ A) (ShiftPR t) ;
  ind_shiftpl : forall Ξ“ A s (H : P_s _ s), P_w Ξ“ `-(↓ A) (ShiftPL s) ;
  ind_shiftnr : forall Ξ“ A s (H : P_s _ s), P_w Ξ“ `+(↑ A) (ShiftNR s) ;
  ind_shiftnl : forall Ξ“ A t (H : P_t _ _ t), P_w Ξ“ `-(↑ A) (ShiftNL t) ;
  ind_negpr : forall Ξ“ A w (H : P_w _ _ w), P_w Ξ“ `+(βŠ– A) (NegPR w) ;
  ind_negpl : forall Ξ“ A s (H : P_s _ s), P_w Ξ“ `-(βŠ– A) (NegPL s) ;
  ind_negnr : forall Ξ“ A s (H : P_s _ s), P_w Ξ“ `+(Β¬ A) (NegNR s) ;
  ind_negnl : forall Ξ“ A w (H : P_w _ _ w), P_w Ξ“ `-(Β¬ A) (NegNL w) ;
  ind_cut : forall Ξ“ p A t1 (H1 : P_t _ _ t1) t2 (H2 : P_t _ _ t2), P_s Ξ“ (@Cut _ p A t1 t2)
} .

P_t: forall (Ξ“ : t_ctx) (A : ty), term Ξ“ A -> Prop
P_w: forall (Ξ“ : t_ctx) (A : ty), whn Ξ“ A -> Prop
P_s: forall Ξ“ : t_ctx, state Ξ“ -> Prop
H: syn_ind_args P_t P_w P_s
Ξ“: t_ctx
A: ty
t: term Ξ“ A

P_t Ξ“ A t
destruct H; now apply (term_mut P_t P_w P_s). Qed.
P_t: forall (Ξ“ : t_ctx) (A : ty), term Ξ“ A -> Prop
P_w: forall (Ξ“ : t_ctx) (A : ty), whn Ξ“ A -> Prop
P_s: forall Ξ“ : t_ctx, state Ξ“ -> Prop
H: syn_ind_args P_t P_w P_s
Ξ“: t_ctx
A: ty
w: whn Ξ“ A

P_w Ξ“ A w
destruct H; now apply (whn_mut P_t P_w P_s). Qed.
P_t: forall (Ξ“ : t_ctx) (A : ty), term Ξ“ A -> Prop
P_w: forall (Ξ“ : t_ctx) (A : ty), whn Ξ“ A -> Prop
P_s: forall Ξ“ : t_ctx, state Ξ“ -> Prop
H: syn_ind_args P_t P_w P_s
Ξ“: t_ctx
s: state Ξ“

P_s Ξ“ s
destruct H; now apply (state_mut P_t P_w P_s). Qed. Definition t_ren_proper_P Ξ“ A (t : term Ξ“ A) : Prop := forall Ξ” (f1 f2 : Ξ“ βŠ† Ξ”), f1 ≑ₐ f2 -> t β‚œβŠ›α΅£ f1 = t β‚œβŠ›α΅£ f2 . Definition w_ren_proper_P Ξ“ A (v : whn Ξ“ A) : Prop := forall Ξ” (f1 f2 : Ξ“ βŠ† Ξ”), f1 ≑ₐ f2 -> v `α΅₯βŠ›α΅£ f1 = v `α΅₯βŠ›α΅£ f2 . Definition s_ren_proper_P Ξ“ (s : state Ξ“) : Prop := forall Ξ” (f1 f2 : Ξ“ βŠ† Ξ”), f1 ≑ₐ f2 -> s β‚›βŠ›α΅£ f1 = s β‚›βŠ›α΅£ f2 .

syn_ind_args t_ren_proper_P w_ren_proper_P s_ren_proper_P

forall (Ξ“ : t_ctx) (A : ty) (s : state (Ξ“ β–Άβ‚“ A †)), s_ren_proper_P (Ξ“ β–Άβ‚“ A †) s -> t_ren_proper_P Ξ“ A (Mu s)

forall (Ξ“ : t_ctx) (A : pre_ty pos) (t : term (Ξ“ β–Άβ‚“ `- A) `- A), t_ren_proper_P (Ξ“ β–Άβ‚“ `- A) `- A t -> t_ren_proper_P Ξ“ `- A (RecL t)

forall (Ξ“ : t_ctx) (A : pre_ty neg) (t : term (Ξ“ β–Άβ‚“ `+ A) `+ A), t_ren_proper_P (Ξ“ β–Άβ‚“ `+ A) `+ A t -> t_ren_proper_P Ξ“ `+ A (RecR t)

forall (Ξ“ : t_ctx) (A : ty) (w : whn Ξ“ A), w_ren_proper_P Ξ“ A w -> t_ren_proper_P Ξ“ A (Whn w)

forall (Ξ“ : t_ctx) (A : ty) (h : Ξ“ βˆ‹ A), w_ren_proper_P Ξ“ A (Var h)

forall Ξ“ : t_ctx, w_ren_proper_P Ξ“ `- 0 ZerL

forall Ξ“ : t_ctx, w_ren_proper_P Ξ“ `+ ⊀ TopR

forall Ξ“ : t_ctx, w_ren_proper_P Ξ“ `+ 1 OneR

forall (Ξ“ : t_ctx) (s : state Ξ“), s_ren_proper_P Ξ“ s -> w_ren_proper_P Ξ“ `- 1 (OneL s)

forall (Ξ“ : t_ctx) (s : state Ξ“), s_ren_proper_P Ξ“ s -> w_ren_proper_P Ξ“ `+ βŠ₯ (BotR s)

forall Ξ“ : t_ctx, w_ren_proper_P Ξ“ `- βŠ₯ BotL

forall (Ξ“ : t_ctx) (A B : pre_ty pos) (w1 : whn Ξ“ `+ A), w_ren_proper_P Ξ“ `+ A w1 -> forall w2 : whn Ξ“ `+ B, w_ren_proper_P Ξ“ `+ B w2 -> w_ren_proper_P Ξ“ `+ (A βŠ— B) (TenR w1 w2)

forall (Ξ“ : t_ctx) (A B : pre_ty pos) (s : state (Ξ“ β–Άβ‚“ `+ A β–Άβ‚“ `+ B)), s_ren_proper_P (Ξ“ β–Άβ‚“ `+ A β–Άβ‚“ `+ B) s -> w_ren_proper_P Ξ“ `- (A βŠ— B) (TenL s)

forall (Ξ“ : t_ctx) (A B : pre_ty neg) (s : state (Ξ“ β–Άβ‚“ `- A β–Άβ‚“ `- B)), s_ren_proper_P (Ξ“ β–Άβ‚“ `- A β–Άβ‚“ `- B) s -> w_ren_proper_P Ξ“ `+ (A β…‹ B) (ParR s)

forall (Ξ“ : t_ctx) (A B : pre_ty neg) (w1 : whn Ξ“ `- A), w_ren_proper_P Ξ“ `- A w1 -> forall w2 : whn Ξ“ `- B, w_ren_proper_P Ξ“ `- B w2 -> w_ren_proper_P Ξ“ `- (A β…‹ B) (ParL w1 w2)

forall (Ξ“ : t_ctx) (A B : pre_ty pos) (w : whn Ξ“ `+ A), w_ren_proper_P Ξ“ `+ A w -> w_ren_proper_P Ξ“ `+ (A βŠ• B) (OrR1 w)

forall (Ξ“ : t_ctx) (A B : pre_ty pos) (w : whn Ξ“ `+ B), w_ren_proper_P Ξ“ `+ B w -> w_ren_proper_P Ξ“ `+ (A βŠ• B) (OrR2 w)

forall (Ξ“ : t_ctx) (A B : pre_ty pos) (s1 : state (Ξ“ β–Άβ‚“ `+ A)), s_ren_proper_P (Ξ“ β–Άβ‚“ `+ A) s1 -> forall s2 : state (Ξ“ β–Άβ‚“ `+ B), s_ren_proper_P (Ξ“ β–Άβ‚“ `+ B) s2 -> w_ren_proper_P Ξ“ `- (A βŠ• B) (OrL s1 s2)

forall (Ξ“ : t_ctx) (A B : pre_ty neg) (s1 : state (Ξ“ β–Άβ‚“ `- A)), s_ren_proper_P (Ξ“ β–Άβ‚“ `- A) s1 -> forall s2 : state (Ξ“ β–Άβ‚“ `- B), s_ren_proper_P (Ξ“ β–Άβ‚“ `- B) s2 -> w_ren_proper_P Ξ“ `+ (A & B) (AndR s1 s2)

forall (Ξ“ : t_ctx) (A B : pre_ty neg) (w : whn Ξ“ `- A), w_ren_proper_P Ξ“ `- A w -> w_ren_proper_P Ξ“ `- (A & B) (AndL1 w)

forall (Ξ“ : t_ctx) (A B : pre_ty neg) (w : whn Ξ“ `- B), w_ren_proper_P Ξ“ `- B w -> w_ren_proper_P Ξ“ `- (A & B) (AndL2 w)

forall (Ξ“ : t_ctx) (A : pre_ty neg) (t : term Ξ“ `+ A), t_ren_proper_P Ξ“ `+ A t -> w_ren_proper_P Ξ“ `+ (↓ A) (ShiftPR t)

forall (Ξ“ : t_ctx) (A : pre_ty neg) (s : state (Ξ“ β–Άβ‚“ `+ A)), s_ren_proper_P (Ξ“ β–Άβ‚“ `+ A) s -> w_ren_proper_P Ξ“ `- (↓ A) (ShiftPL s)

forall (Ξ“ : t_ctx) (A : pre_ty pos) (s : state (Ξ“ β–Άβ‚“ `- A)), s_ren_proper_P (Ξ“ β–Άβ‚“ `- A) s -> w_ren_proper_P Ξ“ `+ (↑ A) (ShiftNR s)

forall (Ξ“ : t_ctx) (A : pre_ty pos) (t : term Ξ“ `- A), t_ren_proper_P Ξ“ `- A t -> w_ren_proper_P Ξ“ `- (↑ A) (ShiftNL t)

forall (Ξ“ : t_ctx) (A : pre_ty neg) (w : whn Ξ“ `- A), w_ren_proper_P Ξ“ `- A w -> w_ren_proper_P Ξ“ `+ (βŠ– A) (NegPR w)

forall (Ξ“ : t_ctx) (A : pre_ty neg) (s : state (Ξ“ β–Άβ‚“ `- A)), s_ren_proper_P (Ξ“ β–Άβ‚“ `- A) s -> w_ren_proper_P Ξ“ `- (βŠ– A) (NegPL s)

forall (Ξ“ : t_ctx) (A : pre_ty pos) (s : state (Ξ“ β–Άβ‚“ `+ A)), s_ren_proper_P (Ξ“ β–Άβ‚“ `+ A) s -> w_ren_proper_P Ξ“ `+ (Β¬ A) (NegNR s)

forall (Ξ“ : t_ctx) (A : pre_ty pos) (w : whn Ξ“ `+ A), w_ren_proper_P Ξ“ `+ A w -> w_ren_proper_P Ξ“ `- (Β¬ A) (NegNL w)

forall (Ξ“ : t_ctx) (p : pol) (A : pre_ty p) (t1 : term Ξ“ `+ A), t_ren_proper_P Ξ“ `+ A t1 -> forall t2 : term Ξ“ `- A, t_ren_proper_P Ξ“ `- A t2 -> s_ren_proper_P Ξ“ (Cut p t1 t2)

forall (Ξ“ : t_ctx) (A : ty) (s : state (Ξ“ β–Άβ‚“ A †)), (forall (Ξ” : t_ctx) (f1 f2 : (Ξ“ β–Άβ‚“ A †) βŠ† Ξ”), f1 ≑ₐ f2 -> s β‚›βŠ›α΅£ f1 = s β‚›βŠ›α΅£ f2) -> forall (Ξ” : t_ctx) (f1 f2 : Ξ“ βŠ† Ξ”), f1 ≑ₐ f2 -> Mu s β‚œβŠ›α΅£ f1 = Mu s β‚œβŠ›α΅£ f2

forall (Ξ“ : t_ctx) (A : pre_ty pos) (t : term (Ξ“ β–Άβ‚“ `- A) `- A), (forall (Ξ” : t_ctx) (f1 f2 : (Ξ“ β–Άβ‚“ `- A) βŠ† Ξ”), f1 ≑ₐ f2 -> t β‚œβŠ›α΅£ f1 = t β‚œβŠ›α΅£ f2) -> forall (Ξ” : t_ctx) (f1 f2 : Ξ“ βŠ† Ξ”), f1 ≑ₐ f2 -> RecL t β‚œβŠ›α΅£ f1 = RecL t β‚œβŠ›α΅£ f2

forall (Ξ“ : t_ctx) (A : pre_ty neg) (t : term (Ξ“ β–Άβ‚“ `+ A) `+ A), (forall (Ξ” : t_ctx) (f1 f2 : (Ξ“ β–Άβ‚“ `+ A) βŠ† Ξ”), f1 ≑ₐ f2 -> t β‚œβŠ›α΅£ f1 = t β‚œβŠ›α΅£ f2) -> forall (Ξ” : t_ctx) (f1 f2 : Ξ“ βŠ† Ξ”), f1 ≑ₐ f2 -> RecR t β‚œβŠ›α΅£ f1 = RecR t β‚œβŠ›α΅£ f2

forall (Ξ“ : t_ctx) (A : ty) (w : whn Ξ“ A), (forall (Ξ” : t_ctx) (f1 f2 : Ξ“ βŠ† Ξ”), f1 ≑ₐ f2 -> w `α΅₯βŠ›α΅£ f1 = w `α΅₯βŠ›α΅£ f2) -> forall (Ξ” : t_ctx) (f1 f2 : Ξ“ βŠ† Ξ”), f1 ≑ₐ f2 -> Whn w β‚œβŠ›α΅£ f1 = Whn w β‚œβŠ›α΅£ f2

forall (Ξ“ : t_ctx) (A : ty) (h : Ξ“ βˆ‹ A) (Ξ” : t_ctx) (f1 f2 : Ξ“ βŠ† Ξ”), f1 ≑ₐ f2 -> Var h `α΅₯βŠ›α΅£ f1 = Var h `α΅₯βŠ›α΅£ f2

forall (Ξ“ Ξ” : t_ctx) (f1 f2 : Ξ“ βŠ† Ξ”), f1 ≑ₐ f2 -> ZerL `α΅₯βŠ›α΅£ f1 = ZerL `α΅₯βŠ›α΅£ f2

forall (Ξ“ Ξ” : t_ctx) (f1 f2 : Ξ“ βŠ† Ξ”), f1 ≑ₐ f2 -> TopR `α΅₯βŠ›α΅£ f1 = TopR `α΅₯βŠ›α΅£ f2

forall (Ξ“ Ξ” : t_ctx) (f1 f2 : Ξ“ βŠ† Ξ”), f1 ≑ₐ f2 -> OneR `α΅₯βŠ›α΅£ f1 = OneR `α΅₯βŠ›α΅£ f2

forall (Ξ“ : t_ctx) (s : state Ξ“), (forall (Ξ” : t_ctx) (f1 f2 : Ξ“ βŠ† Ξ”), f1 ≑ₐ f2 -> s β‚›βŠ›α΅£ f1 = s β‚›βŠ›α΅£ f2) -> forall (Ξ” : t_ctx) (f1 f2 : Ξ“ βŠ† Ξ”), f1 ≑ₐ f2 -> OneL s `α΅₯βŠ›α΅£ f1 = OneL s `α΅₯βŠ›α΅£ f2

forall (Ξ“ : t_ctx) (s : state Ξ“), (forall (Ξ” : t_ctx) (f1 f2 : Ξ“ βŠ† Ξ”), f1 ≑ₐ f2 -> s β‚›βŠ›α΅£ f1 = s β‚›βŠ›α΅£ f2) -> forall (Ξ” : t_ctx) (f1 f2 : Ξ“ βŠ† Ξ”), f1 ≑ₐ f2 -> BotR s `α΅₯βŠ›α΅£ f1 = BotR s `α΅₯βŠ›α΅£ f2

forall (Ξ“ Ξ” : t_ctx) (f1 f2 : Ξ“ βŠ† Ξ”), f1 ≑ₐ f2 -> BotL `α΅₯βŠ›α΅£ f1 = BotL `α΅₯βŠ›α΅£ f2

forall (Ξ“ : t_ctx) (A B : pre_ty pos) (w1 : whn Ξ“ `+ A), (forall (Ξ” : t_ctx) (f1 f2 : Ξ“ βŠ† Ξ”), f1 ≑ₐ f2 -> w1 `α΅₯βŠ›α΅£ f1 = w1 `α΅₯βŠ›α΅£ f2) -> forall w2 : whn Ξ“ `+ B, (forall (Ξ” : t_ctx) (f1 f2 : Ξ“ βŠ† Ξ”), f1 ≑ₐ f2 -> w2 `α΅₯βŠ›α΅£ f1 = w2 `α΅₯βŠ›α΅£ f2) -> forall (Ξ” : t_ctx) (f1 f2 : Ξ“ βŠ† Ξ”), f1 ≑ₐ f2 -> TenR w1 w2 `α΅₯βŠ›α΅£ f1 = TenR w1 w2 `α΅₯βŠ›α΅£ f2

forall (Ξ“ : t_ctx) (A B : pre_ty pos) (s : state (Ξ“ β–Άβ‚“ `+ A β–Άβ‚“ `+ B)), (forall (Ξ” : t_ctx) (f1 f2 : (Ξ“ β–Άβ‚“ `+ A β–Άβ‚“ `+ B) βŠ† Ξ”), f1 ≑ₐ f2 -> s β‚›βŠ›α΅£ f1 = s β‚›βŠ›α΅£ f2) -> forall (Ξ” : t_ctx) (f1 f2 : Ξ“ βŠ† Ξ”), f1 ≑ₐ f2 -> TenL s `α΅₯βŠ›α΅£ f1 = TenL s `α΅₯βŠ›α΅£ f2

forall (Ξ“ : t_ctx) (A B : pre_ty neg) (s : state (Ξ“ β–Άβ‚“ `- A β–Άβ‚“ `- B)), (forall (Ξ” : t_ctx) (f1 f2 : (Ξ“ β–Άβ‚“ `- A β–Άβ‚“ `- B) βŠ† Ξ”), f1 ≑ₐ f2 -> s β‚›βŠ›α΅£ f1 = s β‚›βŠ›α΅£ f2) -> forall (Ξ” : t_ctx) (f1 f2 : Ξ“ βŠ† Ξ”), f1 ≑ₐ f2 -> ParR s `α΅₯βŠ›α΅£ f1 = ParR s `α΅₯βŠ›α΅£ f2

forall (Ξ“ : t_ctx) (A B : pre_ty neg) (w1 : whn Ξ“ `- A), (forall (Ξ” : t_ctx) (f1 f2 : Ξ“ βŠ† Ξ”), f1 ≑ₐ f2 -> w1 `α΅₯βŠ›α΅£ f1 = w1 `α΅₯βŠ›α΅£ f2) -> forall w2 : whn Ξ“ `- B, (forall (Ξ” : t_ctx) (f1 f2 : Ξ“ βŠ† Ξ”), f1 ≑ₐ f2 -> w2 `α΅₯βŠ›α΅£ f1 = w2 `α΅₯βŠ›α΅£ f2) -> forall (Ξ” : t_ctx) (f1 f2 : Ξ“ βŠ† Ξ”), f1 ≑ₐ f2 -> ParL w1 w2 `α΅₯βŠ›α΅£ f1 = ParL w1 w2 `α΅₯βŠ›α΅£ f2

forall (Ξ“ : t_ctx) (A B : pre_ty pos) (w : whn Ξ“ `+ A), (forall (Ξ” : t_ctx) (f1 f2 : Ξ“ βŠ† Ξ”), f1 ≑ₐ f2 -> w `α΅₯βŠ›α΅£ f1 = w `α΅₯βŠ›α΅£ f2) -> forall (Ξ” : t_ctx) (f1 f2 : Ξ“ βŠ† Ξ”), f1 ≑ₐ f2 -> OrR1 w `α΅₯βŠ›α΅£ f1 = OrR1 w `α΅₯βŠ›α΅£ f2

forall (Ξ“ : t_ctx) (A B : pre_ty pos) (w : whn Ξ“ `+ B), (forall (Ξ” : t_ctx) (f1 f2 : Ξ“ βŠ† Ξ”), f1 ≑ₐ f2 -> w `α΅₯βŠ›α΅£ f1 = w `α΅₯βŠ›α΅£ f2) -> forall (Ξ” : t_ctx) (f1 f2 : Ξ“ βŠ† Ξ”), f1 ≑ₐ f2 -> OrR2 w `α΅₯βŠ›α΅£ f1 = OrR2 w `α΅₯βŠ›α΅£ f2

forall (Ξ“ : t_ctx) (A B : pre_ty pos) (s1 : state (Ξ“ β–Άβ‚“ `+ A)), (forall (Ξ” : t_ctx) (f1 f2 : (Ξ“ β–Άβ‚“ `+ A) βŠ† Ξ”), f1 ≑ₐ f2 -> s1 β‚›βŠ›α΅£ f1 = s1 β‚›βŠ›α΅£ f2) -> forall s2 : state (Ξ“ β–Άβ‚“ `+ B), (forall (Ξ” : t_ctx) (f1 f2 : (Ξ“ β–Άβ‚“ `+ B) βŠ† Ξ”), f1 ≑ₐ f2 -> s2 β‚›βŠ›α΅£ f1 = s2 β‚›βŠ›α΅£ f2) -> forall (Ξ” : t_ctx) (f1 f2 : Ξ“ βŠ† Ξ”), f1 ≑ₐ f2 -> OrL s1 s2 `α΅₯βŠ›α΅£ f1 = OrL s1 s2 `α΅₯βŠ›α΅£ f2

forall (Ξ“ : t_ctx) (A B : pre_ty neg) (s1 : state (Ξ“ β–Άβ‚“ `- A)), (forall (Ξ” : t_ctx) (f1 f2 : (Ξ“ β–Άβ‚“ `- A) βŠ† Ξ”), f1 ≑ₐ f2 -> s1 β‚›βŠ›α΅£ f1 = s1 β‚›βŠ›α΅£ f2) -> forall s2 : state (Ξ“ β–Άβ‚“ `- B), (forall (Ξ” : t_ctx) (f1 f2 : (Ξ“ β–Άβ‚“ `- B) βŠ† Ξ”), f1 ≑ₐ f2 -> s2 β‚›βŠ›α΅£ f1 = s2 β‚›βŠ›α΅£ f2) -> forall (Ξ” : t_ctx) (f1 f2 : Ξ“ βŠ† Ξ”), f1 ≑ₐ f2 -> AndR s1 s2 `α΅₯βŠ›α΅£ f1 = AndR s1 s2 `α΅₯βŠ›α΅£ f2

forall (Ξ“ : t_ctx) (A B : pre_ty neg) (w : whn Ξ“ `- A), (forall (Ξ” : t_ctx) (f1 f2 : Ξ“ βŠ† Ξ”), f1 ≑ₐ f2 -> w `α΅₯βŠ›α΅£ f1 = w `α΅₯βŠ›α΅£ f2) -> forall (Ξ” : t_ctx) (f1 f2 : Ξ“ βŠ† Ξ”), f1 ≑ₐ f2 -> AndL1 w `α΅₯βŠ›α΅£ f1 = AndL1 w `α΅₯βŠ›α΅£ f2

forall (Ξ“ : t_ctx) (A B : pre_ty neg) (w : whn Ξ“ `- B), (forall (Ξ” : t_ctx) (f1 f2 : Ξ“ βŠ† Ξ”), f1 ≑ₐ f2 -> w `α΅₯βŠ›α΅£ f1 = w `α΅₯βŠ›α΅£ f2) -> forall (Ξ” : t_ctx) (f1 f2 : Ξ“ βŠ† Ξ”), f1 ≑ₐ f2 -> AndL2 w `α΅₯βŠ›α΅£ f1 = AndL2 w `α΅₯βŠ›α΅£ f2

forall (Ξ“ : t_ctx) (A : pre_ty neg) (t : term Ξ“ `+ A), (forall (Ξ” : t_ctx) (f1 f2 : Ξ“ βŠ† Ξ”), f1 ≑ₐ f2 -> t β‚œβŠ›α΅£ f1 = t β‚œβŠ›α΅£ f2) -> forall (Ξ” : t_ctx) (f1 f2 : Ξ“ βŠ† Ξ”), f1 ≑ₐ f2 -> ShiftPR t `α΅₯βŠ›α΅£ f1 = ShiftPR t `α΅₯βŠ›α΅£ f2

forall (Ξ“ : t_ctx) (A : pre_ty neg) (s : state (Ξ“ β–Άβ‚“ `+ A)), (forall (Ξ” : t_ctx) (f1 f2 : (Ξ“ β–Άβ‚“ `+ A) βŠ† Ξ”), f1 ≑ₐ f2 -> s β‚›βŠ›α΅£ f1 = s β‚›βŠ›α΅£ f2) -> forall (Ξ” : t_ctx) (f1 f2 : Ξ“ βŠ† Ξ”), f1 ≑ₐ f2 -> ShiftPL s `α΅₯βŠ›α΅£ f1 = ShiftPL s `α΅₯βŠ›α΅£ f2

forall (Ξ“ : t_ctx) (A : pre_ty pos) (s : state (Ξ“ β–Άβ‚“ `- A)), (forall (Ξ” : t_ctx) (f1 f2 : (Ξ“ β–Άβ‚“ `- A) βŠ† Ξ”), f1 ≑ₐ f2 -> s β‚›βŠ›α΅£ f1 = s β‚›βŠ›α΅£ f2) -> forall (Ξ” : t_ctx) (f1 f2 : Ξ“ βŠ† Ξ”), f1 ≑ₐ f2 -> ShiftNR s `α΅₯βŠ›α΅£ f1 = ShiftNR s `α΅₯βŠ›α΅£ f2

forall (Ξ“ : t_ctx) (A : pre_ty pos) (t : term Ξ“ `- A), (forall (Ξ” : t_ctx) (f1 f2 : Ξ“ βŠ† Ξ”), f1 ≑ₐ f2 -> t β‚œβŠ›α΅£ f1 = t β‚œβŠ›α΅£ f2) -> forall (Ξ” : t_ctx) (f1 f2 : Ξ“ βŠ† Ξ”), f1 ≑ₐ f2 -> ShiftNL t `α΅₯βŠ›α΅£ f1 = ShiftNL t `α΅₯βŠ›α΅£ f2

forall (Ξ“ : t_ctx) (A : pre_ty neg) (w : whn Ξ“ `- A), (forall (Ξ” : t_ctx) (f1 f2 : Ξ“ βŠ† Ξ”), f1 ≑ₐ f2 -> w `α΅₯βŠ›α΅£ f1 = w `α΅₯βŠ›α΅£ f2) -> forall (Ξ” : t_ctx) (f1 f2 : Ξ“ βŠ† Ξ”), f1 ≑ₐ f2 -> NegPR w `α΅₯βŠ›α΅£ f1 = NegPR w `α΅₯βŠ›α΅£ f2

forall (Ξ“ : t_ctx) (A : pre_ty neg) (s : state (Ξ“ β–Άβ‚“ `- A)), (forall (Ξ” : t_ctx) (f1 f2 : (Ξ“ β–Άβ‚“ `- A) βŠ† Ξ”), f1 ≑ₐ f2 -> s β‚›βŠ›α΅£ f1 = s β‚›βŠ›α΅£ f2) -> forall (Ξ” : t_ctx) (f1 f2 : Ξ“ βŠ† Ξ”), f1 ≑ₐ f2 -> NegPL s `α΅₯βŠ›α΅£ f1 = NegPL s `α΅₯βŠ›α΅£ f2

forall (Ξ“ : t_ctx) (A : pre_ty pos) (s : state (Ξ“ β–Άβ‚“ `+ A)), (forall (Ξ” : t_ctx) (f1 f2 : (Ξ“ β–Άβ‚“ `+ A) βŠ† Ξ”), f1 ≑ₐ f2 -> s β‚›βŠ›α΅£ f1 = s β‚›βŠ›α΅£ f2) -> forall (Ξ” : t_ctx) (f1 f2 : Ξ“ βŠ† Ξ”), f1 ≑ₐ f2 -> NegNR s `α΅₯βŠ›α΅£ f1 = NegNR s `α΅₯βŠ›α΅£ f2

forall (Ξ“ : t_ctx) (A : pre_ty pos) (w : whn Ξ“ `+ A), (forall (Ξ” : t_ctx) (f1 f2 : Ξ“ βŠ† Ξ”), f1 ≑ₐ f2 -> w `α΅₯βŠ›α΅£ f1 = w `α΅₯βŠ›α΅£ f2) -> forall (Ξ” : t_ctx) (f1 f2 : Ξ“ βŠ† Ξ”), f1 ≑ₐ f2 -> NegNL w `α΅₯βŠ›α΅£ f1 = NegNL w `α΅₯βŠ›α΅£ f2

forall (Ξ“ : t_ctx) (p : pol) (A : pre_ty p) (t1 : term Ξ“ `+ A), (forall (Ξ” : t_ctx) (f1 f2 : Ξ“ βŠ† Ξ”), f1 ≑ₐ f2 -> t1 β‚œβŠ›α΅£ f1 = t1 β‚œβŠ›α΅£ f2) -> forall t2 : term Ξ“ `- A, (forall (Ξ” : t_ctx) (f1 f2 : Ξ“ βŠ† Ξ”), f1 ≑ₐ f2 -> t2 β‚œβŠ›α΅£ f1 = t2 β‚œβŠ›α΅£ f2) -> forall (Ξ” : t_ctx) (f1 f2 : Ξ“ βŠ† Ξ”), f1 ≑ₐ f2 -> Cut p t1 t2 β‚›βŠ›α΅£ f1 = Cut p t1 t2 β‚›βŠ›α΅£ f2
Ξ“: t_ctx
A: ty
s: state (Ξ“ β–Άβ‚“ A †)
H: forall (Ξ” : t_ctx) (f1 f2 : (Ξ“ β–Άβ‚“ A †) βŠ† Ξ”), f1 ≑ₐ f2 -> s β‚›βŠ›α΅£ f1 = s β‚›βŠ›α΅£ f2
Ξ”: t_ctx
f1, f2: Ξ“ βŠ† Ξ”
H0: f1 ≑ₐ f2

s β‚›βŠ›α΅£ r_shift1 f1 = s β‚›βŠ›α΅£ r_shift1 f2
Ξ“: t_ctx
A: pre_ty pos
t: term (Ξ“ β–Άβ‚“ `- A) `- A
H: forall (Ξ” : t_ctx) (f1 f2 : (Ξ“ β–Άβ‚“ `- A) βŠ† Ξ”), f1 ≑ₐ f2 -> t β‚œβŠ›α΅£ f1 = t β‚œβŠ›α΅£ f2
Ξ”: t_ctx
f1, f2: Ξ“ βŠ† Ξ”
H0: f1 ≑ₐ f2
t β‚œβŠ›α΅£ r_shift1 f1 = t β‚œβŠ›α΅£ r_shift1 f2
Ξ“: t_ctx
A: pre_ty neg
t: term (Ξ“ β–Άβ‚“ `+ A) `+ A
H: forall (Ξ” : t_ctx) (f1 f2 : (Ξ“ β–Άβ‚“ `+ A) βŠ† Ξ”), f1 ≑ₐ f2 -> t β‚œβŠ›α΅£ f1 = t β‚œβŠ›α΅£ f2
Ξ”: t_ctx
f1, f2: Ξ“ βŠ† Ξ”
H0: f1 ≑ₐ f2
t β‚œβŠ›α΅£ r_shift1 f1 = t β‚œβŠ›α΅£ r_shift1 f2
Ξ“: t_ctx
A: ty
h: Ξ“ βˆ‹ A
Ξ”: t_ctx
f1, f2: Ξ“ βŠ† Ξ”
H: f1 ≑ₐ f2
f1 A h = f2 A h
Ξ“: t_ctx
A, B: pre_ty pos
s: state (Ξ“ β–Άβ‚“ `+ A β–Άβ‚“ `+ B)
H: forall (Ξ” : t_ctx) (f1 f2 : (Ξ“ β–Άβ‚“ `+ A β–Άβ‚“ `+ B) βŠ† Ξ”), f1 ≑ₐ f2 -> s β‚›βŠ›α΅£ f1 = s β‚›βŠ›α΅£ f2
Ξ”: t_ctx
f1, f2: Ξ“ βŠ† Ξ”
H0: f1 ≑ₐ f2
s β‚›βŠ›α΅£ r_shift2 f1 = s β‚›βŠ›α΅£ r_shift2 f2
Ξ“: t_ctx
A, B: pre_ty neg
s: state (Ξ“ β–Άβ‚“ `- A β–Άβ‚“ `- B)
H: forall (Ξ” : t_ctx) (f1 f2 : (Ξ“ β–Άβ‚“ `- A β–Άβ‚“ `- B) βŠ† Ξ”), f1 ≑ₐ f2 -> s β‚›βŠ›α΅£ f1 = s β‚›βŠ›α΅£ f2
Ξ”: t_ctx
f1, f2: Ξ“ βŠ† Ξ”
H0: f1 ≑ₐ f2
s β‚›βŠ›α΅£ r_shift2 f1 = s β‚›βŠ›α΅£ r_shift2 f2
Ξ“: t_ctx
A, B: pre_ty pos
s1: state (Ξ“ β–Άβ‚“ `+ A)
H1: forall (Ξ” : t_ctx) (f1 f2 : (Ξ“ β–Άβ‚“ `+ A) βŠ† Ξ”), f1 ≑ₐ f2 -> s1 β‚›βŠ›α΅£ f1 = s1 β‚›βŠ›α΅£ f2
s2: state (Ξ“ β–Άβ‚“ `+ B)
H2: forall (Ξ” : t_ctx) (f1 f2 : (Ξ“ β–Άβ‚“ `+ B) βŠ† Ξ”), f1 ≑ₐ f2 -> s2 β‚›βŠ›α΅£ f1 = s2 β‚›βŠ›α΅£ f2
Ξ”: t_ctx
f1, f2: Ξ“ βŠ† Ξ”
H: f1 ≑ₐ f2
s1 β‚›βŠ›α΅£ r_shift1 f1 = s1 β‚›βŠ›α΅£ r_shift1 f2
Ξ“: t_ctx
A, B: pre_ty pos
s1: state (Ξ“ β–Άβ‚“ `+ A)
H1: forall (Ξ” : t_ctx) (f1 f2 : (Ξ“ β–Άβ‚“ `+ A) βŠ† Ξ”), f1 ≑ₐ f2 -> s1 β‚›βŠ›α΅£ f1 = s1 β‚›βŠ›α΅£ f2
s2: state (Ξ“ β–Άβ‚“ `+ B)
H2: forall (Ξ” : t_ctx) (f1 f2 : (Ξ“ β–Άβ‚“ `+ B) βŠ† Ξ”), f1 ≑ₐ f2 -> s2 β‚›βŠ›α΅£ f1 = s2 β‚›βŠ›α΅£ f2
Ξ”: t_ctx
f1, f2: Ξ“ βŠ† Ξ”
H: f1 ≑ₐ f2
s2 β‚›βŠ›α΅£ r_shift1 f1 = s2 β‚›βŠ›α΅£ r_shift1 f2
Ξ“: t_ctx
A, B: pre_ty neg
s1: state (Ξ“ β–Άβ‚“ `- A)
H1: forall (Ξ” : t_ctx) (f1 f2 : (Ξ“ β–Άβ‚“ `- A) βŠ† Ξ”), f1 ≑ₐ f2 -> s1 β‚›βŠ›α΅£ f1 = s1 β‚›βŠ›α΅£ f2
s2: state (Ξ“ β–Άβ‚“ `- B)
H2: forall (Ξ” : t_ctx) (f1 f2 : (Ξ“ β–Άβ‚“ `- B) βŠ† Ξ”), f1 ≑ₐ f2 -> s2 β‚›βŠ›α΅£ f1 = s2 β‚›βŠ›α΅£ f2
Ξ”: t_ctx
f1, f2: Ξ“ βŠ† Ξ”
H: f1 ≑ₐ f2
s1 β‚›βŠ›α΅£ r_shift1 f1 = s1 β‚›βŠ›α΅£ r_shift1 f2
Ξ“: t_ctx
A, B: pre_ty neg
s1: state (Ξ“ β–Άβ‚“ `- A)
H1: forall (Ξ” : t_ctx) (f1 f2 : (Ξ“ β–Άβ‚“ `- A) βŠ† Ξ”), f1 ≑ₐ f2 -> s1 β‚›βŠ›α΅£ f1 = s1 β‚›βŠ›α΅£ f2
s2: state (Ξ“ β–Άβ‚“ `- B)
H2: forall (Ξ” : t_ctx) (f1 f2 : (Ξ“ β–Άβ‚“ `- B) βŠ† Ξ”), f1 ≑ₐ f2 -> s2 β‚›βŠ›α΅£ f1 = s2 β‚›βŠ›α΅£ f2
Ξ”: t_ctx
f1, f2: Ξ“ βŠ† Ξ”
H: f1 ≑ₐ f2
s2 β‚›βŠ›α΅£ r_shift1 f1 = s2 β‚›βŠ›α΅£ r_shift1 f2
Ξ“: t_ctx
A: pre_ty neg
s: state (Ξ“ β–Άβ‚“ `+ A)
H: forall (Ξ” : t_ctx) (f1 f2 : (Ξ“ β–Άβ‚“ `+ A) βŠ† Ξ”), f1 ≑ₐ f2 -> s β‚›βŠ›α΅£ f1 = s β‚›βŠ›α΅£ f2
Ξ”: t_ctx
f1, f2: Ξ“ βŠ† Ξ”
H0: f1 ≑ₐ f2
s β‚›βŠ›α΅£ r_shift1 f1 = s β‚›βŠ›α΅£ r_shift1 f2
Ξ“: t_ctx
A: pre_ty pos
s: state (Ξ“ β–Άβ‚“ `- A)
H: forall (Ξ” : t_ctx) (f1 f2 : (Ξ“ β–Άβ‚“ `- A) βŠ† Ξ”), f1 ≑ₐ f2 -> s β‚›βŠ›α΅£ f1 = s β‚›βŠ›α΅£ f2
Ξ”: t_ctx
f1, f2: Ξ“ βŠ† Ξ”
H0: f1 ≑ₐ f2
s β‚›βŠ›α΅£ r_shift1 f1 = s β‚›βŠ›α΅£ r_shift1 f2
Ξ“: t_ctx
A: pre_ty neg
s: state (Ξ“ β–Άβ‚“ `- A)
H: forall (Ξ” : t_ctx) (f1 f2 : (Ξ“ β–Άβ‚“ `- A) βŠ† Ξ”), f1 ≑ₐ f2 -> s β‚›βŠ›α΅£ f1 = s β‚›βŠ›α΅£ f2
Ξ”: t_ctx
f1, f2: Ξ“ βŠ† Ξ”
H0: f1 ≑ₐ f2
s β‚›βŠ›α΅£ r_shift1 f1 = s β‚›βŠ›α΅£ r_shift1 f2
Ξ“: t_ctx
A: pre_ty pos
s: state (Ξ“ β–Άβ‚“ `+ A)
H: forall (Ξ” : t_ctx) (f1 f2 : (Ξ“ β–Άβ‚“ `+ A) βŠ† Ξ”), f1 ≑ₐ f2 -> s β‚›βŠ›α΅£ f1 = s β‚›βŠ›α΅£ f2
Ξ”: t_ctx
f1, f2: Ξ“ βŠ† Ξ”
H0: f1 ≑ₐ f2
s β‚›βŠ›α΅£ r_shift1 f1 = s β‚›βŠ›α΅£ r_shift1 f2
Ξ“: t_ctx
A: ty
s: state (Ξ“ β–Άβ‚“ A †)
H: forall (Ξ” : t_ctx) (f1 f2 : (Ξ“ β–Άβ‚“ A †) βŠ† Ξ”), f1 ≑ₐ f2 -> s β‚›βŠ›α΅£ f1 = s β‚›βŠ›α΅£ f2
Ξ”: t_ctx
f1, f2: Ξ“ βŠ† Ξ”
H0: f1 ≑ₐ f2

r_shift1 f1 ≑ₐ r_shift1 f2
Ξ“: t_ctx
A: pre_ty pos
t: term (Ξ“ β–Άβ‚“ `- A) `- A
H: forall (Ξ” : t_ctx) (f1 f2 : (Ξ“ β–Άβ‚“ `- A) βŠ† Ξ”), f1 ≑ₐ f2 -> t β‚œβŠ›α΅£ f1 = t β‚œβŠ›α΅£ f2
Ξ”: t_ctx
f1, f2: Ξ“ βŠ† Ξ”
H0: f1 ≑ₐ f2
r_shift1 f1 ≑ₐ r_shift1 f2
Ξ“: t_ctx
A: pre_ty neg
t: term (Ξ“ β–Άβ‚“ `+ A) `+ A
H: forall (Ξ” : t_ctx) (f1 f2 : (Ξ“ β–Άβ‚“ `+ A) βŠ† Ξ”), f1 ≑ₐ f2 -> t β‚œβŠ›α΅£ f1 = t β‚œβŠ›α΅£ f2
Ξ”: t_ctx
f1, f2: Ξ“ βŠ† Ξ”
H0: f1 ≑ₐ f2
r_shift1 f1 ≑ₐ r_shift1 f2
Ξ“: t_ctx
A, B: pre_ty pos
s: state (Ξ“ β–Άβ‚“ `+ A β–Άβ‚“ `+ B)
H: forall (Ξ” : t_ctx) (f1 f2 : (Ξ“ β–Άβ‚“ `+ A β–Άβ‚“ `+ B) βŠ† Ξ”), f1 ≑ₐ f2 -> s β‚›βŠ›α΅£ f1 = s β‚›βŠ›α΅£ f2
Ξ”: t_ctx
f1, f2: Ξ“ βŠ† Ξ”
H0: f1 ≑ₐ f2
r_shift2 f1 ≑ₐ r_shift2 f2
Ξ“: t_ctx
A, B: pre_ty neg
s: state (Ξ“ β–Άβ‚“ `- A β–Άβ‚“ `- B)
H: forall (Ξ” : t_ctx) (f1 f2 : (Ξ“ β–Άβ‚“ `- A β–Άβ‚“ `- B) βŠ† Ξ”), f1 ≑ₐ f2 -> s β‚›βŠ›α΅£ f1 = s β‚›βŠ›α΅£ f2
Ξ”: t_ctx
f1, f2: Ξ“ βŠ† Ξ”
H0: f1 ≑ₐ f2
r_shift2 f1 ≑ₐ r_shift2 f2
Ξ“: t_ctx
A, B: pre_ty pos
s1: state (Ξ“ β–Άβ‚“ `+ A)
H1: forall (Ξ” : t_ctx) (f1 f2 : (Ξ“ β–Άβ‚“ `+ A) βŠ† Ξ”), f1 ≑ₐ f2 -> s1 β‚›βŠ›α΅£ f1 = s1 β‚›βŠ›α΅£ f2
s2: state (Ξ“ β–Άβ‚“ `+ B)
H2: forall (Ξ” : t_ctx) (f1 f2 : (Ξ“ β–Άβ‚“ `+ B) βŠ† Ξ”), f1 ≑ₐ f2 -> s2 β‚›βŠ›α΅£ f1 = s2 β‚›βŠ›α΅£ f2
Ξ”: t_ctx
f1, f2: Ξ“ βŠ† Ξ”
H: f1 ≑ₐ f2
r_shift1 f1 ≑ₐ r_shift1 f2
Ξ“: t_ctx
A, B: pre_ty pos
s1: state (Ξ“ β–Άβ‚“ `+ A)
H1: forall (Ξ” : t_ctx) (f1 f2 : (Ξ“ β–Άβ‚“ `+ A) βŠ† Ξ”), f1 ≑ₐ f2 -> s1 β‚›βŠ›α΅£ f1 = s1 β‚›βŠ›α΅£ f2
s2: state (Ξ“ β–Άβ‚“ `+ B)
H2: forall (Ξ” : t_ctx) (f1 f2 : (Ξ“ β–Άβ‚“ `+ B) βŠ† Ξ”), f1 ≑ₐ f2 -> s2 β‚›βŠ›α΅£ f1 = s2 β‚›βŠ›α΅£ f2
Ξ”: t_ctx
f1, f2: Ξ“ βŠ† Ξ”
H: f1 ≑ₐ f2
r_shift1 f1 ≑ₐ r_shift1 f2
Ξ“: t_ctx
A, B: pre_ty neg
s1: state (Ξ“ β–Άβ‚“ `- A)
H1: forall (Ξ” : t_ctx) (f1 f2 : (Ξ“ β–Άβ‚“ `- A) βŠ† Ξ”), f1 ≑ₐ f2 -> s1 β‚›βŠ›α΅£ f1 = s1 β‚›βŠ›α΅£ f2
s2: state (Ξ“ β–Άβ‚“ `- B)
H2: forall (Ξ” : t_ctx) (f1 f2 : (Ξ“ β–Άβ‚“ `- B) βŠ† Ξ”), f1 ≑ₐ f2 -> s2 β‚›βŠ›α΅£ f1 = s2 β‚›βŠ›α΅£ f2
Ξ”: t_ctx
f1, f2: Ξ“ βŠ† Ξ”
H: f1 ≑ₐ f2
r_shift1 f1 ≑ₐ r_shift1 f2
Ξ“: t_ctx
A, B: pre_ty neg
s1: state (Ξ“ β–Άβ‚“ `- A)
H1: forall (Ξ” : t_ctx) (f1 f2 : (Ξ“ β–Άβ‚“ `- A) βŠ† Ξ”), f1 ≑ₐ f2 -> s1 β‚›βŠ›α΅£ f1 = s1 β‚›βŠ›α΅£ f2
s2: state (Ξ“ β–Άβ‚“ `- B)
H2: forall (Ξ” : t_ctx) (f1 f2 : (Ξ“ β–Άβ‚“ `- B) βŠ† Ξ”), f1 ≑ₐ f2 -> s2 β‚›βŠ›α΅£ f1 = s2 β‚›βŠ›α΅£ f2
Ξ”: t_ctx
f1, f2: Ξ“ βŠ† Ξ”
H: f1 ≑ₐ f2
r_shift1 f1 ≑ₐ r_shift1 f2
Ξ“: t_ctx
A: pre_ty neg
s: state (Ξ“ β–Άβ‚“ `+ A)
H: forall (Ξ” : t_ctx) (f1 f2 : (Ξ“ β–Άβ‚“ `+ A) βŠ† Ξ”), f1 ≑ₐ f2 -> s β‚›βŠ›α΅£ f1 = s β‚›βŠ›α΅£ f2
Ξ”: t_ctx
f1, f2: Ξ“ βŠ† Ξ”
H0: f1 ≑ₐ f2
r_shift1 f1 ≑ₐ r_shift1 f2
Ξ“: t_ctx
A: pre_ty pos
s: state (Ξ“ β–Άβ‚“ `- A)
H: forall (Ξ” : t_ctx) (f1 f2 : (Ξ“ β–Άβ‚“ `- A) βŠ† Ξ”), f1 ≑ₐ f2 -> s β‚›βŠ›α΅£ f1 = s β‚›βŠ›α΅£ f2
Ξ”: t_ctx
f1, f2: Ξ“ βŠ† Ξ”
H0: f1 ≑ₐ f2
r_shift1 f1 ≑ₐ r_shift1 f2
Ξ“: t_ctx
A: pre_ty neg
s: state (Ξ“ β–Άβ‚“ `- A)
H: forall (Ξ” : t_ctx) (f1 f2 : (Ξ“ β–Άβ‚“ `- A) βŠ† Ξ”), f1 ≑ₐ f2 -> s β‚›βŠ›α΅£ f1 = s β‚›βŠ›α΅£ f2
Ξ”: t_ctx
f1, f2: Ξ“ βŠ† Ξ”
H0: f1 ≑ₐ f2
r_shift1 f1 ≑ₐ r_shift1 f2
Ξ“: t_ctx
A: pre_ty pos
s: state (Ξ“ β–Άβ‚“ `+ A)
H: forall (Ξ” : t_ctx) (f1 f2 : (Ξ“ β–Άβ‚“ `+ A) βŠ† Ξ”), f1 ≑ₐ f2 -> s β‚›βŠ›α΅£ f1 = s β‚›βŠ›α΅£ f2
Ξ”: t_ctx
f1, f2: Ξ“ βŠ† Ξ”
H0: f1 ≑ₐ f2
r_shift1 f1 ≑ₐ r_shift1 f2
all: first [ apply r_shift1_eq | apply r_shift2_eq ]; auto. Qed.
Ξ“: t_ctx
a: ty
t: term Ξ“ a
Ξ”: t_ctx

Proper (asgn_eq Ξ“ Ξ” ==> eq) (t_rename Ξ“ a t Ξ”)
intros f1 f2 H1; now apply (term_ind_mut _ _ _ ren_proper_prf). Qed.
Ξ“: t_ctx
a: ty
v: whn Ξ“ a
Ξ”: t_ctx

Proper (asgn_eq Ξ“ Ξ” ==> eq) (w_rename Ξ“ a v Ξ”)
intros f1 f2 H1; now apply (whn_ind_mut _ _ _ ren_proper_prf). Qed.
Ξ“: t_ctx
s: state Ξ“
Ξ”: t_ctx

Proper (asgn_eq Ξ“ Ξ” ==> eq) (s_rename Ξ“ s Ξ”)
intros f1 f2 H1; now apply (state_ind_mut _ _ _ ren_proper_prf). Qed.
Ξ“: t_ctx
a: ty
v: val Ξ“ a
Ξ”: t_ctx

Proper (asgn_eq Ξ“ Ξ” ==> eq) (v_rename Ξ“ a v Ξ”)
Ξ“: t_ctx
p: pre_ty pos
v: val Ξ“ `+ p
Ξ”: t_ctx

Proper (asgn_eq Ξ“ Ξ” ==> eq) (v_rename Ξ“ `+ p v Ξ”)
Ξ“: t_ctx
p: pre_ty neg
v: val Ξ“ `+ p
Ξ”: t_ctx
Proper (asgn_eq Ξ“ Ξ” ==> eq) (v_rename Ξ“ `+ p v Ξ”)
Ξ“: t_ctx
p: pre_ty pos
v: val Ξ“ `- p
Ξ”: t_ctx
Proper (asgn_eq Ξ“ Ξ” ==> eq) (v_rename Ξ“ `- p v Ξ”)
Ξ“: t_ctx
p: pre_ty neg
v: val Ξ“ `- p
Ξ”: t_ctx
Proper (asgn_eq Ξ“ Ξ” ==> eq) (v_rename Ξ“ `- p v Ξ”)
Ξ“: t_ctx
p: pre_ty neg
v: val Ξ“ `+ p
Ξ”: t_ctx

Proper (asgn_eq Ξ“ Ξ” ==> eq) (v_rename Ξ“ `+ p v Ξ”)
Ξ“: t_ctx
p: pre_ty pos
v: val Ξ“ `- p
Ξ”: t_ctx
Proper (asgn_eq Ξ“ Ξ” ==> eq) (v_rename Ξ“ `- p v Ξ”)
Ξ“: t_ctx
p: pre_ty neg
v: val Ξ“ `- p
Ξ”: t_ctx
Proper (asgn_eq Ξ“ Ξ” ==> eq) (v_rename Ξ“ `- p v Ξ”)
Ξ“: t_ctx
p: pre_ty pos
v: val Ξ“ `- p
Ξ”: t_ctx

Proper (asgn_eq Ξ“ Ξ” ==> eq) (v_rename Ξ“ `- p v Ξ”)
Ξ“: t_ctx
p: pre_ty neg
v: val Ξ“ `- p
Ξ”: t_ctx
Proper (asgn_eq Ξ“ Ξ” ==> eq) (v_rename Ξ“ `- p v Ξ”)
Ξ“: t_ctx
p: pre_ty neg
v: val Ξ“ `- p
Ξ”: t_ctx

Proper (asgn_eq Ξ“ Ξ” ==> eq) (v_rename Ξ“ `- p v Ξ”)
now apply w_ren_eq. Qed.
Ξ“1, Ξ“2, Ξ“3: t_ctx

Proper (asgn_eq Ξ“1 Ξ“2 ==> asgn_eq Ξ“2 Ξ“3 ==> asgn_eq Ξ“1 Ξ“3) a_ren
intros r1 r2 H1 a1 a2 H2 ? i; cbn; now rewrite H1, (v_ren_eq _ _ H2). Qed.
Ξ“, Ξ”: t_ctx
A: ty

Proper (asgn_eq Ξ“ Ξ” ==> asgn_eq (Ξ“ β–Άβ‚“ A) (Ξ” β–Άβ‚“ A)) (a_shift1 (y:=A))
Ξ“, Ξ”: t_ctx
A: ty
x, y: Ξ“ =[ val ]> Ξ”
H: x ≑ₐ y
a: ty
h: Ξ“ β–Άβ‚“ A βˆ‹ a

a_shift1 x a h = a_shift1 y a h
dependent elimination h; auto; cbn; now rewrite H. Qed.
Ξ“, Ξ”: t_ctx
A, B: ty

Proper (asgn_eq Ξ“ Ξ” ==> asgn_eq (Ξ“ β–Άβ‚“ A β–Άβ‚“ B) (Ξ” β–Άβ‚“ A β–Άβ‚“ B)) (a_shift2 (z:=B))
Ξ“, Ξ”: t_ctx
A, B: ty
x, y: Ξ“ =[ val ]> Ξ”
H: x ≑ₐ y
a: ty
v: Ξ“ β–Άβ‚“ A β–Άβ‚“ B βˆ‹ a

a_shift2 x a v = a_shift2 y a v
Ξ“1: ctx ty
Ξ”: t_ctx
y1, y0: ty
x, y: Ξ“1 =[ val ]> Ξ”
H: x ≑ₐ y
a: ty
v: Ctx.var a Ξ“1

a_shift2 x a (pop (pop v)) = a_shift2 y a (pop (pop v))
cbn; now rewrite H. Qed. Definition t_ren_ren_P Ξ“1 A (t : term Ξ“1 A) : Prop := forall Ξ“2 Ξ“3 (f1 : Ξ“1 βŠ† Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (t β‚œβŠ›α΅£ f1) β‚œβŠ›α΅£ f2 = t β‚œβŠ›α΅£ (f1 α΅£βŠ› f2) . Definition w_ren_ren_P Ξ“1 A (v : whn Ξ“1 A) : Prop := forall Ξ“2 Ξ“3 (f1 : Ξ“1 βŠ† Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (v `α΅₯βŠ›α΅£ f1) `α΅₯βŠ›α΅£ f2 = v `α΅₯βŠ›α΅£ (f1 α΅£βŠ› f2) . Definition s_ren_ren_P Ξ“1 (s : state Ξ“1) : Prop := forall Ξ“2 Ξ“3 (f1 : Ξ“1 βŠ† Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (s β‚›βŠ›α΅£ f1) β‚›βŠ›α΅£ f2 = s β‚›βŠ›α΅£ (f1 α΅£βŠ› f2) .

syn_ind_args t_ren_ren_P w_ren_ren_P s_ren_ren_P

forall (Ξ“ : t_ctx) (A : ty) (s : state (Ξ“ β–Άβ‚“ A †)), s_ren_ren_P (Ξ“ β–Άβ‚“ A †) s -> t_ren_ren_P Ξ“ A (Mu s)

forall (Ξ“ : t_ctx) (A : pre_ty pos) (t : term (Ξ“ β–Άβ‚“ `- A) `- A), t_ren_ren_P (Ξ“ β–Άβ‚“ `- A) `- A t -> t_ren_ren_P Ξ“ `- A (RecL t)

forall (Ξ“ : t_ctx) (A : pre_ty neg) (t : term (Ξ“ β–Άβ‚“ `+ A) `+ A), t_ren_ren_P (Ξ“ β–Άβ‚“ `+ A) `+ A t -> t_ren_ren_P Ξ“ `+ A (RecR t)

forall (Ξ“ : t_ctx) (A : ty) (w : whn Ξ“ A), w_ren_ren_P Ξ“ A w -> t_ren_ren_P Ξ“ A (Whn w)

forall (Ξ“ : t_ctx) (A : ty) (h : Ξ“ βˆ‹ A), w_ren_ren_P Ξ“ A (Var h)

forall Ξ“ : t_ctx, w_ren_ren_P Ξ“ `- 0 ZerL

forall Ξ“ : t_ctx, w_ren_ren_P Ξ“ `+ ⊀ TopR

forall Ξ“ : t_ctx, w_ren_ren_P Ξ“ `+ 1 OneR

forall (Ξ“ : t_ctx) (s : state Ξ“), s_ren_ren_P Ξ“ s -> w_ren_ren_P Ξ“ `- 1 (OneL s)

forall (Ξ“ : t_ctx) (s : state Ξ“), s_ren_ren_P Ξ“ s -> w_ren_ren_P Ξ“ `+ βŠ₯ (BotR s)

forall Ξ“ : t_ctx, w_ren_ren_P Ξ“ `- βŠ₯ BotL

forall (Ξ“ : t_ctx) (A B : pre_ty pos) (w1 : whn Ξ“ `+ A), w_ren_ren_P Ξ“ `+ A w1 -> forall w2 : whn Ξ“ `+ B, w_ren_ren_P Ξ“ `+ B w2 -> w_ren_ren_P Ξ“ `+ (A βŠ— B) (TenR w1 w2)

forall (Ξ“ : t_ctx) (A B : pre_ty pos) (s : state (Ξ“ β–Άβ‚“ `+ A β–Άβ‚“ `+ B)), s_ren_ren_P (Ξ“ β–Άβ‚“ `+ A β–Άβ‚“ `+ B) s -> w_ren_ren_P Ξ“ `- (A βŠ— B) (TenL s)

forall (Ξ“ : t_ctx) (A B : pre_ty neg) (s : state (Ξ“ β–Άβ‚“ `- A β–Άβ‚“ `- B)), s_ren_ren_P (Ξ“ β–Άβ‚“ `- A β–Άβ‚“ `- B) s -> w_ren_ren_P Ξ“ `+ (A β…‹ B) (ParR s)

forall (Ξ“ : t_ctx) (A B : pre_ty neg) (w1 : whn Ξ“ `- A), w_ren_ren_P Ξ“ `- A w1 -> forall w2 : whn Ξ“ `- B, w_ren_ren_P Ξ“ `- B w2 -> w_ren_ren_P Ξ“ `- (A β…‹ B) (ParL w1 w2)

forall (Ξ“ : t_ctx) (A B : pre_ty pos) (w : whn Ξ“ `+ A), w_ren_ren_P Ξ“ `+ A w -> w_ren_ren_P Ξ“ `+ (A βŠ• B) (OrR1 w)

forall (Ξ“ : t_ctx) (A B : pre_ty pos) (w : whn Ξ“ `+ B), w_ren_ren_P Ξ“ `+ B w -> w_ren_ren_P Ξ“ `+ (A βŠ• B) (OrR2 w)

forall (Ξ“ : t_ctx) (A B : pre_ty pos) (s1 : state (Ξ“ β–Άβ‚“ `+ A)), s_ren_ren_P (Ξ“ β–Άβ‚“ `+ A) s1 -> forall s2 : state (Ξ“ β–Άβ‚“ `+ B), s_ren_ren_P (Ξ“ β–Άβ‚“ `+ B) s2 -> w_ren_ren_P Ξ“ `- (A βŠ• B) (OrL s1 s2)

forall (Ξ“ : t_ctx) (A B : pre_ty neg) (s1 : state (Ξ“ β–Άβ‚“ `- A)), s_ren_ren_P (Ξ“ β–Άβ‚“ `- A) s1 -> forall s2 : state (Ξ“ β–Άβ‚“ `- B), s_ren_ren_P (Ξ“ β–Άβ‚“ `- B) s2 -> w_ren_ren_P Ξ“ `+ (A & B) (AndR s1 s2)

forall (Ξ“ : t_ctx) (A B : pre_ty neg) (w : whn Ξ“ `- A), w_ren_ren_P Ξ“ `- A w -> w_ren_ren_P Ξ“ `- (A & B) (AndL1 w)

forall (Ξ“ : t_ctx) (A B : pre_ty neg) (w : whn Ξ“ `- B), w_ren_ren_P Ξ“ `- B w -> w_ren_ren_P Ξ“ `- (A & B) (AndL2 w)

forall (Ξ“ : t_ctx) (A : pre_ty neg) (t : term Ξ“ `+ A), t_ren_ren_P Ξ“ `+ A t -> w_ren_ren_P Ξ“ `+ (↓ A) (ShiftPR t)

forall (Ξ“ : t_ctx) (A : pre_ty neg) (s : state (Ξ“ β–Άβ‚“ `+ A)), s_ren_ren_P (Ξ“ β–Άβ‚“ `+ A) s -> w_ren_ren_P Ξ“ `- (↓ A) (ShiftPL s)

forall (Ξ“ : t_ctx) (A : pre_ty pos) (s : state (Ξ“ β–Άβ‚“ `- A)), s_ren_ren_P (Ξ“ β–Άβ‚“ `- A) s -> w_ren_ren_P Ξ“ `+ (↑ A) (ShiftNR s)

forall (Ξ“ : t_ctx) (A : pre_ty pos) (t : term Ξ“ `- A), t_ren_ren_P Ξ“ `- A t -> w_ren_ren_P Ξ“ `- (↑ A) (ShiftNL t)

forall (Ξ“ : t_ctx) (A : pre_ty neg) (w : whn Ξ“ `- A), w_ren_ren_P Ξ“ `- A w -> w_ren_ren_P Ξ“ `+ (βŠ– A) (NegPR w)

forall (Ξ“ : t_ctx) (A : pre_ty neg) (s : state (Ξ“ β–Άβ‚“ `- A)), s_ren_ren_P (Ξ“ β–Άβ‚“ `- A) s -> w_ren_ren_P Ξ“ `- (βŠ– A) (NegPL s)

forall (Ξ“ : t_ctx) (A : pre_ty pos) (s : state (Ξ“ β–Άβ‚“ `+ A)), s_ren_ren_P (Ξ“ β–Άβ‚“ `+ A) s -> w_ren_ren_P Ξ“ `+ (Β¬ A) (NegNR s)

forall (Ξ“ : t_ctx) (A : pre_ty pos) (w : whn Ξ“ `+ A), w_ren_ren_P Ξ“ `+ A w -> w_ren_ren_P Ξ“ `- (Β¬ A) (NegNL w)

forall (Ξ“ : t_ctx) (p : pol) (A : pre_ty p) (t1 : term Ξ“ `+ A), t_ren_ren_P Ξ“ `+ A t1 -> forall t2 : term Ξ“ `- A, t_ren_ren_P Ξ“ `- A t2 -> s_ren_ren_P Ξ“ (Cut p t1 t2)

forall (Ξ“ : t_ctx) (A : ty) (s : state (Ξ“ β–Άβ‚“ A †)), (forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ A †) βŠ† Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (s β‚›βŠ›α΅£ f1) β‚›βŠ›α΅£ f2 = s β‚›βŠ›α΅£ (f1 α΅£βŠ› f2)) -> forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ βŠ† Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (Mu s β‚œβŠ›α΅£ f1) β‚œβŠ›α΅£ f2 = Mu s β‚œβŠ›α΅£ (f1 α΅£βŠ› f2)

forall (Ξ“ : t_ctx) (A : pre_ty pos) (t : term (Ξ“ β–Άβ‚“ `- A) `- A), (forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `- A) βŠ† Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (t β‚œβŠ›α΅£ f1) β‚œβŠ›α΅£ f2 = t β‚œβŠ›α΅£ (f1 α΅£βŠ› f2)) -> forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ βŠ† Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (RecL t β‚œβŠ›α΅£ f1) β‚œβŠ›α΅£ f2 = RecL t β‚œβŠ›α΅£ (f1 α΅£βŠ› f2)

forall (Ξ“ : t_ctx) (A : pre_ty neg) (t : term (Ξ“ β–Άβ‚“ `+ A) `+ A), (forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `+ A) βŠ† Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (t β‚œβŠ›α΅£ f1) β‚œβŠ›α΅£ f2 = t β‚œβŠ›α΅£ (f1 α΅£βŠ› f2)) -> forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ βŠ† Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (RecR t β‚œβŠ›α΅£ f1) β‚œβŠ›α΅£ f2 = RecR t β‚œβŠ›α΅£ (f1 α΅£βŠ› f2)

forall (Ξ“ : t_ctx) (A : ty) (w : whn Ξ“ A), (forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ βŠ† Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (w `α΅₯βŠ›α΅£ f1) `α΅₯βŠ›α΅£ f2 = w `α΅₯βŠ›α΅£ (f1 α΅£βŠ› f2)) -> forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ βŠ† Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (Whn w β‚œβŠ›α΅£ f1) β‚œβŠ›α΅£ f2 = Whn w β‚œβŠ›α΅£ (f1 α΅£βŠ› f2)

forall (Ξ“ : t_ctx) (A : ty) (h : Ξ“ βˆ‹ A) (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ βŠ† Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (Var h `α΅₯βŠ›α΅£ f1) `α΅₯βŠ›α΅£ f2 = Var h `α΅₯βŠ›α΅£ (f1 α΅£βŠ› f2)

forall (Ξ“ Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ βŠ† Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (ZerL `α΅₯βŠ›α΅£ f1) `α΅₯βŠ›α΅£ f2 = ZerL `α΅₯βŠ›α΅£ (f1 α΅£βŠ› f2)

forall (Ξ“ Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ βŠ† Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (TopR `α΅₯βŠ›α΅£ f1) `α΅₯βŠ›α΅£ f2 = TopR `α΅₯βŠ›α΅£ (f1 α΅£βŠ› f2)

forall (Ξ“ Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ βŠ† Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (OneR `α΅₯βŠ›α΅£ f1) `α΅₯βŠ›α΅£ f2 = OneR `α΅₯βŠ›α΅£ (f1 α΅£βŠ› f2)

forall (Ξ“ : t_ctx) (s : state Ξ“), (forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ βŠ† Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (s β‚›βŠ›α΅£ f1) β‚›βŠ›α΅£ f2 = s β‚›βŠ›α΅£ (f1 α΅£βŠ› f2)) -> forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ βŠ† Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (OneL s `α΅₯βŠ›α΅£ f1) `α΅₯βŠ›α΅£ f2 = OneL s `α΅₯βŠ›α΅£ (f1 α΅£βŠ› f2)

forall (Ξ“ : t_ctx) (s : state Ξ“), (forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ βŠ† Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (s β‚›βŠ›α΅£ f1) β‚›βŠ›α΅£ f2 = s β‚›βŠ›α΅£ (f1 α΅£βŠ› f2)) -> forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ βŠ† Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (BotR s `α΅₯βŠ›α΅£ f1) `α΅₯βŠ›α΅£ f2 = BotR s `α΅₯βŠ›α΅£ (f1 α΅£βŠ› f2)

forall (Ξ“ Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ βŠ† Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (BotL `α΅₯βŠ›α΅£ f1) `α΅₯βŠ›α΅£ f2 = BotL `α΅₯βŠ›α΅£ (f1 α΅£βŠ› f2)

forall (Ξ“ : t_ctx) (A B : pre_ty pos) (w1 : whn Ξ“ `+ A), (forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ βŠ† Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (w1 `α΅₯βŠ›α΅£ f1) `α΅₯βŠ›α΅£ f2 = w1 `α΅₯βŠ›α΅£ (f1 α΅£βŠ› f2)) -> forall w2 : whn Ξ“ `+ B, (forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ βŠ† Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (w2 `α΅₯βŠ›α΅£ f1) `α΅₯βŠ›α΅£ f2 = w2 `α΅₯βŠ›α΅£ (f1 α΅£βŠ› f2)) -> forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ βŠ† Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (TenR w1 w2 `α΅₯βŠ›α΅£ f1) `α΅₯βŠ›α΅£ f2 = TenR w1 w2 `α΅₯βŠ›α΅£ (f1 α΅£βŠ› f2)

forall (Ξ“ : t_ctx) (A B : pre_ty pos) (s : state (Ξ“ β–Άβ‚“ `+ A β–Άβ‚“ `+ B)), (forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `+ A β–Άβ‚“ `+ B) βŠ† Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (s β‚›βŠ›α΅£ f1) β‚›βŠ›α΅£ f2 = s β‚›βŠ›α΅£ (f1 α΅£βŠ› f2)) -> forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ βŠ† Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (TenL s `α΅₯βŠ›α΅£ f1) `α΅₯βŠ›α΅£ f2 = TenL s `α΅₯βŠ›α΅£ (f1 α΅£βŠ› f2)

forall (Ξ“ : t_ctx) (A B : pre_ty neg) (s : state (Ξ“ β–Άβ‚“ `- A β–Άβ‚“ `- B)), (forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `- A β–Άβ‚“ `- B) βŠ† Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (s β‚›βŠ›α΅£ f1) β‚›βŠ›α΅£ f2 = s β‚›βŠ›α΅£ (f1 α΅£βŠ› f2)) -> forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ βŠ† Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (ParR s `α΅₯βŠ›α΅£ f1) `α΅₯βŠ›α΅£ f2 = ParR s `α΅₯βŠ›α΅£ (f1 α΅£βŠ› f2)

forall (Ξ“ : t_ctx) (A B : pre_ty neg) (w1 : whn Ξ“ `- A), (forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ βŠ† Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (w1 `α΅₯βŠ›α΅£ f1) `α΅₯βŠ›α΅£ f2 = w1 `α΅₯βŠ›α΅£ (f1 α΅£βŠ› f2)) -> forall w2 : whn Ξ“ `- B, (forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ βŠ† Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (w2 `α΅₯βŠ›α΅£ f1) `α΅₯βŠ›α΅£ f2 = w2 `α΅₯βŠ›α΅£ (f1 α΅£βŠ› f2)) -> forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ βŠ† Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (ParL w1 w2 `α΅₯βŠ›α΅£ f1) `α΅₯βŠ›α΅£ f2 = ParL w1 w2 `α΅₯βŠ›α΅£ (f1 α΅£βŠ› f2)

forall (Ξ“ : t_ctx) (A B : pre_ty pos) (w : whn Ξ“ `+ A), (forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ βŠ† Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (w `α΅₯βŠ›α΅£ f1) `α΅₯βŠ›α΅£ f2 = w `α΅₯βŠ›α΅£ (f1 α΅£βŠ› f2)) -> forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ βŠ† Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (OrR1 w `α΅₯βŠ›α΅£ f1) `α΅₯βŠ›α΅£ f2 = OrR1 w `α΅₯βŠ›α΅£ (f1 α΅£βŠ› f2)

forall (Ξ“ : t_ctx) (A B : pre_ty pos) (w : whn Ξ“ `+ B), (forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ βŠ† Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (w `α΅₯βŠ›α΅£ f1) `α΅₯βŠ›α΅£ f2 = w `α΅₯βŠ›α΅£ (f1 α΅£βŠ› f2)) -> forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ βŠ† Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (OrR2 w `α΅₯βŠ›α΅£ f1) `α΅₯βŠ›α΅£ f2 = OrR2 w `α΅₯βŠ›α΅£ (f1 α΅£βŠ› f2)

forall (Ξ“ : t_ctx) (A B : pre_ty pos) (s1 : state (Ξ“ β–Άβ‚“ `+ A)), (forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `+ A) βŠ† Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (s1 β‚›βŠ›α΅£ f1) β‚›βŠ›α΅£ f2 = s1 β‚›βŠ›α΅£ (f1 α΅£βŠ› f2)) -> forall s2 : state (Ξ“ β–Άβ‚“ `+ B), (forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `+ B) βŠ† Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (s2 β‚›βŠ›α΅£ f1) β‚›βŠ›α΅£ f2 = s2 β‚›βŠ›α΅£ (f1 α΅£βŠ› f2)) -> forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ βŠ† Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (OrL s1 s2 `α΅₯βŠ›α΅£ f1) `α΅₯βŠ›α΅£ f2 = OrL s1 s2 `α΅₯βŠ›α΅£ (f1 α΅£βŠ› f2)

forall (Ξ“ : t_ctx) (A B : pre_ty neg) (s1 : state (Ξ“ β–Άβ‚“ `- A)), (forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `- A) βŠ† Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (s1 β‚›βŠ›α΅£ f1) β‚›βŠ›α΅£ f2 = s1 β‚›βŠ›α΅£ (f1 α΅£βŠ› f2)) -> forall s2 : state (Ξ“ β–Άβ‚“ `- B), (forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `- B) βŠ† Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (s2 β‚›βŠ›α΅£ f1) β‚›βŠ›α΅£ f2 = s2 β‚›βŠ›α΅£ (f1 α΅£βŠ› f2)) -> forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ βŠ† Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (AndR s1 s2 `α΅₯βŠ›α΅£ f1) `α΅₯βŠ›α΅£ f2 = AndR s1 s2 `α΅₯βŠ›α΅£ (f1 α΅£βŠ› f2)

forall (Ξ“ : t_ctx) (A B : pre_ty neg) (w : whn Ξ“ `- A), (forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ βŠ† Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (w `α΅₯βŠ›α΅£ f1) `α΅₯βŠ›α΅£ f2 = w `α΅₯βŠ›α΅£ (f1 α΅£βŠ› f2)) -> forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ βŠ† Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (AndL1 w `α΅₯βŠ›α΅£ f1) `α΅₯βŠ›α΅£ f2 = AndL1 w `α΅₯βŠ›α΅£ (f1 α΅£βŠ› f2)

forall (Ξ“ : t_ctx) (A B : pre_ty neg) (w : whn Ξ“ `- B), (forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ βŠ† Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (w `α΅₯βŠ›α΅£ f1) `α΅₯βŠ›α΅£ f2 = w `α΅₯βŠ›α΅£ (f1 α΅£βŠ› f2)) -> forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ βŠ† Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (AndL2 w `α΅₯βŠ›α΅£ f1) `α΅₯βŠ›α΅£ f2 = AndL2 w `α΅₯βŠ›α΅£ (f1 α΅£βŠ› f2)

forall (Ξ“ : t_ctx) (A : pre_ty neg) (t : term Ξ“ `+ A), (forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ βŠ† Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (t β‚œβŠ›α΅£ f1) β‚œβŠ›α΅£ f2 = t β‚œβŠ›α΅£ (f1 α΅£βŠ› f2)) -> forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ βŠ† Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (ShiftPR t `α΅₯βŠ›α΅£ f1) `α΅₯βŠ›α΅£ f2 = ShiftPR t `α΅₯βŠ›α΅£ (f1 α΅£βŠ› f2)

forall (Ξ“ : t_ctx) (A : pre_ty neg) (s : state (Ξ“ β–Άβ‚“ `+ A)), (forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `+ A) βŠ† Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (s β‚›βŠ›α΅£ f1) β‚›βŠ›α΅£ f2 = s β‚›βŠ›α΅£ (f1 α΅£βŠ› f2)) -> forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ βŠ† Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (ShiftPL s `α΅₯βŠ›α΅£ f1) `α΅₯βŠ›α΅£ f2 = ShiftPL s `α΅₯βŠ›α΅£ (f1 α΅£βŠ› f2)

forall (Ξ“ : t_ctx) (A : pre_ty pos) (s : state (Ξ“ β–Άβ‚“ `- A)), (forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `- A) βŠ† Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (s β‚›βŠ›α΅£ f1) β‚›βŠ›α΅£ f2 = s β‚›βŠ›α΅£ (f1 α΅£βŠ› f2)) -> forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ βŠ† Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (ShiftNR s `α΅₯βŠ›α΅£ f1) `α΅₯βŠ›α΅£ f2 = ShiftNR s `α΅₯βŠ›α΅£ (f1 α΅£βŠ› f2)

forall (Ξ“ : t_ctx) (A : pre_ty pos) (t : term Ξ“ `- A), (forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ βŠ† Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (t β‚œβŠ›α΅£ f1) β‚œβŠ›α΅£ f2 = t β‚œβŠ›α΅£ (f1 α΅£βŠ› f2)) -> forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ βŠ† Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (ShiftNL t `α΅₯βŠ›α΅£ f1) `α΅₯βŠ›α΅£ f2 = ShiftNL t `α΅₯βŠ›α΅£ (f1 α΅£βŠ› f2)

forall (Ξ“ : t_ctx) (A : pre_ty neg) (w : whn Ξ“ `- A), (forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ βŠ† Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (w `α΅₯βŠ›α΅£ f1) `α΅₯βŠ›α΅£ f2 = w `α΅₯βŠ›α΅£ (f1 α΅£βŠ› f2)) -> forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ βŠ† Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (NegPR w `α΅₯βŠ›α΅£ f1) `α΅₯βŠ›α΅£ f2 = NegPR w `α΅₯βŠ›α΅£ (f1 α΅£βŠ› f2)

forall (Ξ“ : t_ctx) (A : pre_ty neg) (s : state (Ξ“ β–Άβ‚“ `- A)), (forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `- A) βŠ† Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (s β‚›βŠ›α΅£ f1) β‚›βŠ›α΅£ f2 = s β‚›βŠ›α΅£ (f1 α΅£βŠ› f2)) -> forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ βŠ† Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (NegPL s `α΅₯βŠ›α΅£ f1) `α΅₯βŠ›α΅£ f2 = NegPL s `α΅₯βŠ›α΅£ (f1 α΅£βŠ› f2)

forall (Ξ“ : t_ctx) (A : pre_ty pos) (s : state (Ξ“ β–Άβ‚“ `+ A)), (forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `+ A) βŠ† Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (s β‚›βŠ›α΅£ f1) β‚›βŠ›α΅£ f2 = s β‚›βŠ›α΅£ (f1 α΅£βŠ› f2)) -> forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ βŠ† Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (NegNR s `α΅₯βŠ›α΅£ f1) `α΅₯βŠ›α΅£ f2 = NegNR s `α΅₯βŠ›α΅£ (f1 α΅£βŠ› f2)

forall (Ξ“ : t_ctx) (A : pre_ty pos) (w : whn Ξ“ `+ A), (forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ βŠ† Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (w `α΅₯βŠ›α΅£ f1) `α΅₯βŠ›α΅£ f2 = w `α΅₯βŠ›α΅£ (f1 α΅£βŠ› f2)) -> forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ βŠ† Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (NegNL w `α΅₯βŠ›α΅£ f1) `α΅₯βŠ›α΅£ f2 = NegNL w `α΅₯βŠ›α΅£ (f1 α΅£βŠ› f2)

forall (Ξ“ : t_ctx) (p : pol) (A : pre_ty p) (t1 : term Ξ“ `+ A), (forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ βŠ† Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (t1 β‚œβŠ›α΅£ f1) β‚œβŠ›α΅£ f2 = t1 β‚œβŠ›α΅£ (f1 α΅£βŠ› f2)) -> forall t2 : term Ξ“ `- A, (forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ βŠ† Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (t2 β‚œβŠ›α΅£ f1) β‚œβŠ›α΅£ f2 = t2 β‚œβŠ›α΅£ (f1 α΅£βŠ› f2)) -> forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ βŠ† Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (Cut p t1 t2 β‚›βŠ›α΅£ f1) β‚›βŠ›α΅£ f2 = Cut p t1 t2 β‚›βŠ›α΅£ (f1 α΅£βŠ› f2)
Ξ“: t_ctx
A: ty
s: state (Ξ“ β–Άβ‚“ A †)
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ A †) βŠ† Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (s β‚›βŠ›α΅£ f1) β‚›βŠ›α΅£ f2 = s β‚›βŠ›α΅£ (f1 α΅£βŠ› f2)
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ βŠ† Ξ“2
f2: Ξ“2 βŠ† Ξ“3

(s β‚›βŠ›α΅£ r_shift1 f1) β‚›βŠ›α΅£ r_shift1 f2 = s β‚›βŠ›α΅£ r_shift1 (f1 α΅£βŠ› f2)
Ξ“: t_ctx
A: pre_ty pos
t: term (Ξ“ β–Άβ‚“ `- A) `- A
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `- A) βŠ† Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (t β‚œβŠ›α΅£ f1) β‚œβŠ›α΅£ f2 = t β‚œβŠ›α΅£ (f1 α΅£βŠ› f2)
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ βŠ† Ξ“2
f2: Ξ“2 βŠ† Ξ“3
(t β‚œβŠ›α΅£ r_shift1 f1) β‚œβŠ›α΅£ r_shift1 f2 = t β‚œβŠ›α΅£ r_shift1 (f1 α΅£βŠ› f2)
Ξ“: t_ctx
A: pre_ty neg
t: term (Ξ“ β–Άβ‚“ `+ A) `+ A
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `+ A) βŠ† Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (t β‚œβŠ›α΅£ f1) β‚œβŠ›α΅£ f2 = t β‚œβŠ›α΅£ (f1 α΅£βŠ› f2)
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ βŠ† Ξ“2
f2: Ξ“2 βŠ† Ξ“3
(t β‚œβŠ›α΅£ r_shift1 f1) β‚œβŠ›α΅£ r_shift1 f2 = t β‚œβŠ›α΅£ r_shift1 (f1 α΅£βŠ› f2)
Ξ“: t_ctx
A, B: pre_ty pos
s: state (Ξ“ β–Άβ‚“ `+ A β–Άβ‚“ `+ B)
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `+ A β–Άβ‚“ `+ B) βŠ† Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (s β‚›βŠ›α΅£ f1) β‚›βŠ›α΅£ f2 = s β‚›βŠ›α΅£ (f1 α΅£βŠ› f2)
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ βŠ† Ξ“2
f2: Ξ“2 βŠ† Ξ“3
(s β‚›βŠ›α΅£ r_shift2 f1) β‚›βŠ›α΅£ r_shift2 f2 = s β‚›βŠ›α΅£ r_shift2 (f1 α΅£βŠ› f2)
Ξ“: t_ctx
A, B: pre_ty neg
s: state (Ξ“ β–Άβ‚“ `- A β–Άβ‚“ `- B)
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `- A β–Άβ‚“ `- B) βŠ† Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (s β‚›βŠ›α΅£ f1) β‚›βŠ›α΅£ f2 = s β‚›βŠ›α΅£ (f1 α΅£βŠ› f2)
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ βŠ† Ξ“2
f2: Ξ“2 βŠ† Ξ“3
(s β‚›βŠ›α΅£ r_shift2 f1) β‚›βŠ›α΅£ r_shift2 f2 = s β‚›βŠ›α΅£ r_shift2 (f1 α΅£βŠ› f2)
Ξ“: t_ctx
A, B: pre_ty pos
s1: state (Ξ“ β–Άβ‚“ `+ A)
H1: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `+ A) βŠ† Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (s1 β‚›βŠ›α΅£ f1) β‚›βŠ›α΅£ f2 = s1 β‚›βŠ›α΅£ (f1 α΅£βŠ› f2)
s2: state (Ξ“ β–Άβ‚“ `+ B)
H2: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `+ B) βŠ† Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (s2 β‚›βŠ›α΅£ f1) β‚›βŠ›α΅£ f2 = s2 β‚›βŠ›α΅£ (f1 α΅£βŠ› f2)
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ βŠ† Ξ“2
f2: Ξ“2 βŠ† Ξ“3
(s1 β‚›βŠ›α΅£ r_shift1 f1) β‚›βŠ›α΅£ r_shift1 f2 = s1 β‚›βŠ›α΅£ r_shift1 (f1 α΅£βŠ› f2)
Ξ“: t_ctx
A, B: pre_ty pos
s1: state (Ξ“ β–Άβ‚“ `+ A)
H1: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `+ A) βŠ† Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (s1 β‚›βŠ›α΅£ f1) β‚›βŠ›α΅£ f2 = s1 β‚›βŠ›α΅£ (f1 α΅£βŠ› f2)
s2: state (Ξ“ β–Άβ‚“ `+ B)
H2: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `+ B) βŠ† Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (s2 β‚›βŠ›α΅£ f1) β‚›βŠ›α΅£ f2 = s2 β‚›βŠ›α΅£ (f1 α΅£βŠ› f2)
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ βŠ† Ξ“2
f2: Ξ“2 βŠ† Ξ“3
(s2 β‚›βŠ›α΅£ r_shift1 f1) β‚›βŠ›α΅£ r_shift1 f2 = s2 β‚›βŠ›α΅£ r_shift1 (f1 α΅£βŠ› f2)
Ξ“: t_ctx
A, B: pre_ty neg
s1: state (Ξ“ β–Άβ‚“ `- A)
H1: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `- A) βŠ† Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (s1 β‚›βŠ›α΅£ f1) β‚›βŠ›α΅£ f2 = s1 β‚›βŠ›α΅£ (f1 α΅£βŠ› f2)
s2: state (Ξ“ β–Άβ‚“ `- B)
H2: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `- B) βŠ† Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (s2 β‚›βŠ›α΅£ f1) β‚›βŠ›α΅£ f2 = s2 β‚›βŠ›α΅£ (f1 α΅£βŠ› f2)
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ βŠ† Ξ“2
f2: Ξ“2 βŠ† Ξ“3
(s1 β‚›βŠ›α΅£ r_shift1 f1) β‚›βŠ›α΅£ r_shift1 f2 = s1 β‚›βŠ›α΅£ r_shift1 (f1 α΅£βŠ› f2)
Ξ“: t_ctx
A, B: pre_ty neg
s1: state (Ξ“ β–Άβ‚“ `- A)
H1: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `- A) βŠ† Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (s1 β‚›βŠ›α΅£ f1) β‚›βŠ›α΅£ f2 = s1 β‚›βŠ›α΅£ (f1 α΅£βŠ› f2)
s2: state (Ξ“ β–Άβ‚“ `- B)
H2: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `- B) βŠ† Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (s2 β‚›βŠ›α΅£ f1) β‚›βŠ›α΅£ f2 = s2 β‚›βŠ›α΅£ (f1 α΅£βŠ› f2)
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ βŠ† Ξ“2
f2: Ξ“2 βŠ† Ξ“3
(s2 β‚›βŠ›α΅£ r_shift1 f1) β‚›βŠ›α΅£ r_shift1 f2 = s2 β‚›βŠ›α΅£ r_shift1 (f1 α΅£βŠ› f2)
Ξ“: t_ctx
A: pre_ty neg
s: state (Ξ“ β–Άβ‚“ `+ A)
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `+ A) βŠ† Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (s β‚›βŠ›α΅£ f1) β‚›βŠ›α΅£ f2 = s β‚›βŠ›α΅£ (f1 α΅£βŠ› f2)
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ βŠ† Ξ“2
f2: Ξ“2 βŠ† Ξ“3
(s β‚›βŠ›α΅£ r_shift1 f1) β‚›βŠ›α΅£ r_shift1 f2 = s β‚›βŠ›α΅£ r_shift1 (f1 α΅£βŠ› f2)
Ξ“: t_ctx
A: pre_ty pos
s: state (Ξ“ β–Άβ‚“ `- A)
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `- A) βŠ† Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (s β‚›βŠ›α΅£ f1) β‚›βŠ›α΅£ f2 = s β‚›βŠ›α΅£ (f1 α΅£βŠ› f2)
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ βŠ† Ξ“2
f2: Ξ“2 βŠ† Ξ“3
(s β‚›βŠ›α΅£ r_shift1 f1) β‚›βŠ›α΅£ r_shift1 f2 = s β‚›βŠ›α΅£ r_shift1 (f1 α΅£βŠ› f2)
Ξ“: t_ctx
A: pre_ty neg
s: state (Ξ“ β–Άβ‚“ `- A)
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `- A) βŠ† Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (s β‚›βŠ›α΅£ f1) β‚›βŠ›α΅£ f2 = s β‚›βŠ›α΅£ (f1 α΅£βŠ› f2)
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ βŠ† Ξ“2
f2: Ξ“2 βŠ† Ξ“3
(s β‚›βŠ›α΅£ r_shift1 f1) β‚›βŠ›α΅£ r_shift1 f2 = s β‚›βŠ›α΅£ r_shift1 (f1 α΅£βŠ› f2)
Ξ“: t_ctx
A: pre_ty pos
s: state (Ξ“ β–Άβ‚“ `+ A)
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `+ A) βŠ† Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (s β‚›βŠ›α΅£ f1) β‚›βŠ›α΅£ f2 = s β‚›βŠ›α΅£ (f1 α΅£βŠ› f2)
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ βŠ† Ξ“2
f2: Ξ“2 βŠ† Ξ“3
(s β‚›βŠ›α΅£ r_shift1 f1) β‚›βŠ›α΅£ r_shift1 f2 = s β‚›βŠ›α΅£ r_shift1 (f1 α΅£βŠ› f2)
all: first [ rewrite r_shift1_comp | rewrite r_shift2_comp ]; eauto. Qed.
Ξ“1, Ξ“2, Ξ“3: ctx ty
f1: Ξ“1 βŠ† Ξ“2
f2: Ξ“2 βŠ† Ξ“3
A: ty
t: term Ξ“1 A

(t β‚œβŠ›α΅£ f1) β‚œβŠ›α΅£ f2 = t β‚œβŠ›α΅£ (f1 α΅£βŠ› f2)
now apply (term_ind_mut _ _ _ ren_ren_prf). Qed.
Ξ“1, Ξ“2, Ξ“3: ctx ty
f1: Ξ“1 βŠ† Ξ“2
f2: Ξ“2 βŠ† Ξ“3
A: ty
v: whn Ξ“1 A

(v `α΅₯βŠ›α΅£ f1) `α΅₯βŠ›α΅£ f2 = v `α΅₯βŠ›α΅£ (f1 α΅£βŠ› f2)
now apply (whn_ind_mut _ _ _ ren_ren_prf). Qed.
Ξ“1, Ξ“2, Ξ“3: ctx ty
f1: Ξ“1 βŠ† Ξ“2
f2: Ξ“2 βŠ† Ξ“3
s: state Ξ“1

(s β‚›βŠ›α΅£ f1) β‚›βŠ›α΅£ f2 = s β‚›βŠ›α΅£ (f1 α΅£βŠ› f2)
now apply (state_ind_mut _ _ _ ren_ren_prf). Qed.
Ξ“1, Ξ“2, Ξ“3: ctx ty
f1: Ξ“1 βŠ† Ξ“2
f2: Ξ“2 βŠ† Ξ“3
A: ty
v: val Ξ“1 A

(v α΅₯βŠ›α΅£ f1) α΅₯βŠ›α΅£ f2 = v α΅₯βŠ›α΅£ (f1 α΅£βŠ› f2)
Ξ“1, Ξ“2, Ξ“3: ctx ty
f1: Ξ“1 βŠ† Ξ“2
f2: Ξ“2 βŠ† Ξ“3
p: pre_ty pos
v: val Ξ“1 `+ p

(v α΅₯βŠ›α΅£ f1) α΅₯βŠ›α΅£ f2 = v α΅₯βŠ›α΅£ (f1 α΅£βŠ› f2)
Ξ“1, Ξ“2, Ξ“3: ctx ty
f1: Ξ“1 βŠ† Ξ“2
f2: Ξ“2 βŠ† Ξ“3
p: pre_ty neg
v: val Ξ“1 `+ p
(v α΅₯βŠ›α΅£ f1) α΅₯βŠ›α΅£ f2 = v α΅₯βŠ›α΅£ (f1 α΅£βŠ› f2)
Ξ“1, Ξ“2, Ξ“3: ctx ty
f1: Ξ“1 βŠ† Ξ“2
f2: Ξ“2 βŠ† Ξ“3
p: pre_ty pos
v: val Ξ“1 `- p
(v α΅₯βŠ›α΅£ f1) α΅₯βŠ›α΅£ f2 = v α΅₯βŠ›α΅£ (f1 α΅£βŠ› f2)
Ξ“1, Ξ“2, Ξ“3: ctx ty
f1: Ξ“1 βŠ† Ξ“2
f2: Ξ“2 βŠ† Ξ“3
p: pre_ty neg
v: val Ξ“1 `- p
(v α΅₯βŠ›α΅£ f1) α΅₯βŠ›α΅£ f2 = v α΅₯βŠ›α΅£ (f1 α΅£βŠ› f2)
Ξ“1, Ξ“2, Ξ“3: ctx ty
f1: Ξ“1 βŠ† Ξ“2
f2: Ξ“2 βŠ† Ξ“3
p: pre_ty neg
v: val Ξ“1 `+ p

(v α΅₯βŠ›α΅£ f1) α΅₯βŠ›α΅£ f2 = v α΅₯βŠ›α΅£ (f1 α΅£βŠ› f2)
Ξ“1, Ξ“2, Ξ“3: ctx ty
f1: Ξ“1 βŠ† Ξ“2
f2: Ξ“2 βŠ† Ξ“3
p: pre_ty pos
v: val Ξ“1 `- p
(v α΅₯βŠ›α΅£ f1) α΅₯βŠ›α΅£ f2 = v α΅₯βŠ›α΅£ (f1 α΅£βŠ› f2)
Ξ“1, Ξ“2, Ξ“3: ctx ty
f1: Ξ“1 βŠ† Ξ“2
f2: Ξ“2 βŠ† Ξ“3
p: pre_ty neg
v: val Ξ“1 `- p
(v α΅₯βŠ›α΅£ f1) α΅₯βŠ›α΅£ f2 = v α΅₯βŠ›α΅£ (f1 α΅£βŠ› f2)
Ξ“1, Ξ“2, Ξ“3: ctx ty
f1: Ξ“1 βŠ† Ξ“2
f2: Ξ“2 βŠ† Ξ“3
p: pre_ty pos
v: val Ξ“1 `- p

(v α΅₯βŠ›α΅£ f1) α΅₯βŠ›α΅£ f2 = v α΅₯βŠ›α΅£ (f1 α΅£βŠ› f2)
Ξ“1, Ξ“2, Ξ“3: ctx ty
f1: Ξ“1 βŠ† Ξ“2
f2: Ξ“2 βŠ† Ξ“3
p: pre_ty neg
v: val Ξ“1 `- p
(v α΅₯βŠ›α΅£ f1) α΅₯βŠ›α΅£ f2 = v α΅₯βŠ›α΅£ (f1 α΅£βŠ› f2)
Ξ“1, Ξ“2, Ξ“3: ctx ty
f1: Ξ“1 βŠ† Ξ“2
f2: Ξ“2 βŠ† Ξ“3
p: pre_ty neg
v: val Ξ“1 `- p

(v α΅₯βŠ›α΅£ f1) α΅₯βŠ›α΅£ f2 = v α΅₯βŠ›α΅£ (f1 α΅£βŠ› f2)
now apply w_ren_ren. Qed. Definition t_ren_id_l_P Ξ“ A (t : term Ξ“ A) : Prop := t β‚œβŠ›α΅£ r_id = t. Definition w_ren_id_l_P Ξ“ A (v : whn Ξ“ A) : Prop := v `α΅₯βŠ›α΅£ r_id = v. Definition s_ren_id_l_P Ξ“ (s : state Ξ“) : Prop := s β‚›βŠ›α΅£ r_id = s.

syn_ind_args t_ren_id_l_P w_ren_id_l_P s_ren_id_l_P

forall (Ξ“ : t_ctx) (A : ty) (s : state (Ξ“ β–Άβ‚“ A †)), s_ren_id_l_P (Ξ“ β–Άβ‚“ A †) s -> t_ren_id_l_P Ξ“ A (Mu s)

forall (Ξ“ : t_ctx) (A : pre_ty pos) (t : term (Ξ“ β–Άβ‚“ `- A) `- A), t_ren_id_l_P (Ξ“ β–Άβ‚“ `- A) `- A t -> t_ren_id_l_P Ξ“ `- A (RecL t)

forall (Ξ“ : t_ctx) (A : pre_ty neg) (t : term (Ξ“ β–Άβ‚“ `+ A) `+ A), t_ren_id_l_P (Ξ“ β–Άβ‚“ `+ A) `+ A t -> t_ren_id_l_P Ξ“ `+ A (RecR t)

forall (Ξ“ : t_ctx) (A : ty) (w : whn Ξ“ A), w_ren_id_l_P Ξ“ A w -> t_ren_id_l_P Ξ“ A (Whn w)

forall (Ξ“ : t_ctx) (A : ty) (h : Ξ“ βˆ‹ A), w_ren_id_l_P Ξ“ A (Var h)

forall Ξ“ : t_ctx, w_ren_id_l_P Ξ“ `- 0 ZerL

forall Ξ“ : t_ctx, w_ren_id_l_P Ξ“ `+ ⊀ TopR

forall Ξ“ : t_ctx, w_ren_id_l_P Ξ“ `+ 1 OneR

forall (Ξ“ : t_ctx) (s : state Ξ“), s_ren_id_l_P Ξ“ s -> w_ren_id_l_P Ξ“ `- 1 (OneL s)

forall (Ξ“ : t_ctx) (s : state Ξ“), s_ren_id_l_P Ξ“ s -> w_ren_id_l_P Ξ“ `+ βŠ₯ (BotR s)

forall Ξ“ : t_ctx, w_ren_id_l_P Ξ“ `- βŠ₯ BotL

forall (Ξ“ : t_ctx) (A B : pre_ty pos) (w1 : whn Ξ“ `+ A), w_ren_id_l_P Ξ“ `+ A w1 -> forall w2 : whn Ξ“ `+ B, w_ren_id_l_P Ξ“ `+ B w2 -> w_ren_id_l_P Ξ“ `+ (A βŠ— B) (TenR w1 w2)

forall (Ξ“ : t_ctx) (A B : pre_ty pos) (s : state (Ξ“ β–Άβ‚“ `+ A β–Άβ‚“ `+ B)), s_ren_id_l_P (Ξ“ β–Άβ‚“ `+ A β–Άβ‚“ `+ B) s -> w_ren_id_l_P Ξ“ `- (A βŠ— B) (TenL s)

forall (Ξ“ : t_ctx) (A B : pre_ty neg) (s : state (Ξ“ β–Άβ‚“ `- A β–Άβ‚“ `- B)), s_ren_id_l_P (Ξ“ β–Άβ‚“ `- A β–Άβ‚“ `- B) s -> w_ren_id_l_P Ξ“ `+ (A β…‹ B) (ParR s)

forall (Ξ“ : t_ctx) (A B : pre_ty neg) (w1 : whn Ξ“ `- A), w_ren_id_l_P Ξ“ `- A w1 -> forall w2 : whn Ξ“ `- B, w_ren_id_l_P Ξ“ `- B w2 -> w_ren_id_l_P Ξ“ `- (A β…‹ B) (ParL w1 w2)

forall (Ξ“ : t_ctx) (A B : pre_ty pos) (w : whn Ξ“ `+ A), w_ren_id_l_P Ξ“ `+ A w -> w_ren_id_l_P Ξ“ `+ (A βŠ• B) (OrR1 w)

forall (Ξ“ : t_ctx) (A B : pre_ty pos) (w : whn Ξ“ `+ B), w_ren_id_l_P Ξ“ `+ B w -> w_ren_id_l_P Ξ“ `+ (A βŠ• B) (OrR2 w)

forall (Ξ“ : t_ctx) (A B : pre_ty pos) (s1 : state (Ξ“ β–Άβ‚“ `+ A)), s_ren_id_l_P (Ξ“ β–Άβ‚“ `+ A) s1 -> forall s2 : state (Ξ“ β–Άβ‚“ `+ B), s_ren_id_l_P (Ξ“ β–Άβ‚“ `+ B) s2 -> w_ren_id_l_P Ξ“ `- (A βŠ• B) (OrL s1 s2)

forall (Ξ“ : t_ctx) (A B : pre_ty neg) (s1 : state (Ξ“ β–Άβ‚“ `- A)), s_ren_id_l_P (Ξ“ β–Άβ‚“ `- A) s1 -> forall s2 : state (Ξ“ β–Άβ‚“ `- B), s_ren_id_l_P (Ξ“ β–Άβ‚“ `- B) s2 -> w_ren_id_l_P Ξ“ `+ (A & B) (AndR s1 s2)

forall (Ξ“ : t_ctx) (A B : pre_ty neg) (w : whn Ξ“ `- A), w_ren_id_l_P Ξ“ `- A w -> w_ren_id_l_P Ξ“ `- (A & B) (AndL1 w)

forall (Ξ“ : t_ctx) (A B : pre_ty neg) (w : whn Ξ“ `- B), w_ren_id_l_P Ξ“ `- B w -> w_ren_id_l_P Ξ“ `- (A & B) (AndL2 w)

forall (Ξ“ : t_ctx) (A : pre_ty neg) (t : term Ξ“ `+ A), t_ren_id_l_P Ξ“ `+ A t -> w_ren_id_l_P Ξ“ `+ (↓ A) (ShiftPR t)

forall (Ξ“ : t_ctx) (A : pre_ty neg) (s : state (Ξ“ β–Άβ‚“ `+ A)), s_ren_id_l_P (Ξ“ β–Άβ‚“ `+ A) s -> w_ren_id_l_P Ξ“ `- (↓ A) (ShiftPL s)

forall (Ξ“ : t_ctx) (A : pre_ty pos) (s : state (Ξ“ β–Άβ‚“ `- A)), s_ren_id_l_P (Ξ“ β–Άβ‚“ `- A) s -> w_ren_id_l_P Ξ“ `+ (↑ A) (ShiftNR s)

forall (Ξ“ : t_ctx) (A : pre_ty pos) (t : term Ξ“ `- A), t_ren_id_l_P Ξ“ `- A t -> w_ren_id_l_P Ξ“ `- (↑ A) (ShiftNL t)

forall (Ξ“ : t_ctx) (A : pre_ty neg) (w : whn Ξ“ `- A), w_ren_id_l_P Ξ“ `- A w -> w_ren_id_l_P Ξ“ `+ (βŠ– A) (NegPR w)

forall (Ξ“ : t_ctx) (A : pre_ty neg) (s : state (Ξ“ β–Άβ‚“ `- A)), s_ren_id_l_P (Ξ“ β–Άβ‚“ `- A) s -> w_ren_id_l_P Ξ“ `- (βŠ– A) (NegPL s)

forall (Ξ“ : t_ctx) (A : pre_ty pos) (s : state (Ξ“ β–Άβ‚“ `+ A)), s_ren_id_l_P (Ξ“ β–Άβ‚“ `+ A) s -> w_ren_id_l_P Ξ“ `+ (Β¬ A) (NegNR s)

forall (Ξ“ : t_ctx) (A : pre_ty pos) (w : whn Ξ“ `+ A), w_ren_id_l_P Ξ“ `+ A w -> w_ren_id_l_P Ξ“ `- (Β¬ A) (NegNL w)

forall (Ξ“ : t_ctx) (p : pol) (A : pre_ty p) (t1 : term Ξ“ `+ A), t_ren_id_l_P Ξ“ `+ A t1 -> forall t2 : term Ξ“ `- A, t_ren_id_l_P Ξ“ `- A t2 -> s_ren_id_l_P Ξ“ (Cut p t1 t2)

forall (Ξ“ : t_ctx) (A : ty) (s : state (Ξ“ β–Άβ‚“ A †)), s β‚›βŠ›α΅£ r_id = s -> Mu s β‚œβŠ›α΅£ r_id = Mu s

forall (Ξ“ : t_ctx) (A : pre_ty pos) (t : term (Ξ“ β–Άβ‚“ `- A) `- A), t β‚œβŠ›α΅£ r_id = t -> RecL t β‚œβŠ›α΅£ r_id = RecL t

forall (Ξ“ : t_ctx) (A : pre_ty neg) (t : term (Ξ“ β–Άβ‚“ `+ A) `+ A), t β‚œβŠ›α΅£ r_id = t -> RecR t β‚œβŠ›α΅£ r_id = RecR t

forall (Ξ“ : t_ctx) (A : ty) (w : whn Ξ“ A), w `α΅₯βŠ›α΅£ r_id = w -> Whn w β‚œβŠ›α΅£ r_id = Whn w

forall (Ξ“ : t_ctx) (A : ty) (h : Ξ“ βˆ‹ A), Var h `α΅₯βŠ›α΅£ r_id = Var h

forall Ξ“ : t_ctx, ZerL `α΅₯βŠ›α΅£ r_id = ZerL

forall Ξ“ : t_ctx, TopR `α΅₯βŠ›α΅£ r_id = TopR

forall Ξ“ : t_ctx, OneR `α΅₯βŠ›α΅£ r_id = OneR

forall (Ξ“ : t_ctx) (s : state Ξ“), s β‚›βŠ›α΅£ r_id = s -> OneL s `α΅₯βŠ›α΅£ r_id = OneL s

forall (Ξ“ : t_ctx) (s : state Ξ“), s β‚›βŠ›α΅£ r_id = s -> BotR s `α΅₯βŠ›α΅£ r_id = BotR s

forall Ξ“ : t_ctx, BotL `α΅₯βŠ›α΅£ r_id = BotL

forall (Ξ“ : t_ctx) (A B : pre_ty pos) (w1 : whn Ξ“ `+ A), w1 `α΅₯βŠ›α΅£ r_id = w1 -> forall w2 : whn Ξ“ `+ B, w2 `α΅₯βŠ›α΅£ r_id = w2 -> TenR w1 w2 `α΅₯βŠ›α΅£ r_id = TenR w1 w2

forall (Ξ“ : t_ctx) (A B : pre_ty pos) (s : state (Ξ“ β–Άβ‚“ `+ A β–Άβ‚“ `+ B)), s β‚›βŠ›α΅£ r_id = s -> TenL s `α΅₯βŠ›α΅£ r_id = TenL s

forall (Ξ“ : t_ctx) (A B : pre_ty neg) (s : state (Ξ“ β–Άβ‚“ `- A β–Άβ‚“ `- B)), s β‚›βŠ›α΅£ r_id = s -> ParR s `α΅₯βŠ›α΅£ r_id = ParR s

forall (Ξ“ : t_ctx) (A B : pre_ty neg) (w1 : whn Ξ“ `- A), w1 `α΅₯βŠ›α΅£ r_id = w1 -> forall w2 : whn Ξ“ `- B, w2 `α΅₯βŠ›α΅£ r_id = w2 -> ParL w1 w2 `α΅₯βŠ›α΅£ r_id = ParL w1 w2

forall (Ξ“ : t_ctx) (A B : pre_ty pos) (w : whn Ξ“ `+ A), w `α΅₯βŠ›α΅£ r_id = w -> OrR1 w `α΅₯βŠ›α΅£ r_id = OrR1 w

forall (Ξ“ : t_ctx) (A B : pre_ty pos) (w : whn Ξ“ `+ B), w `α΅₯βŠ›α΅£ r_id = w -> OrR2 w `α΅₯βŠ›α΅£ r_id = OrR2 w

forall (Ξ“ : t_ctx) (A B : pre_ty pos) (s1 : state (Ξ“ β–Άβ‚“ `+ A)), s1 β‚›βŠ›α΅£ r_id = s1 -> forall s2 : state (Ξ“ β–Άβ‚“ `+ B), s2 β‚›βŠ›α΅£ r_id = s2 -> OrL s1 s2 `α΅₯βŠ›α΅£ r_id = OrL s1 s2

forall (Ξ“ : t_ctx) (A B : pre_ty neg) (s1 : state (Ξ“ β–Άβ‚“ `- A)), s1 β‚›βŠ›α΅£ r_id = s1 -> forall s2 : state (Ξ“ β–Άβ‚“ `- B), s2 β‚›βŠ›α΅£ r_id = s2 -> AndR s1 s2 `α΅₯βŠ›α΅£ r_id = AndR s1 s2

forall (Ξ“ : t_ctx) (A B : pre_ty neg) (w : whn Ξ“ `- A), w `α΅₯βŠ›α΅£ r_id = w -> AndL1 w `α΅₯βŠ›α΅£ r_id = AndL1 w

forall (Ξ“ : t_ctx) (A B : pre_ty neg) (w : whn Ξ“ `- B), w `α΅₯βŠ›α΅£ r_id = w -> AndL2 w `α΅₯βŠ›α΅£ r_id = AndL2 w

forall (Ξ“ : t_ctx) (A : pre_ty neg) (t : term Ξ“ `+ A), t β‚œβŠ›α΅£ r_id = t -> ShiftPR t `α΅₯βŠ›α΅£ r_id = ShiftPR t

forall (Ξ“ : t_ctx) (A : pre_ty neg) (s : state (Ξ“ β–Άβ‚“ `+ A)), s β‚›βŠ›α΅£ r_id = s -> ShiftPL s `α΅₯βŠ›α΅£ r_id = ShiftPL s

forall (Ξ“ : t_ctx) (A : pre_ty pos) (s : state (Ξ“ β–Άβ‚“ `- A)), s β‚›βŠ›α΅£ r_id = s -> ShiftNR s `α΅₯βŠ›α΅£ r_id = ShiftNR s

forall (Ξ“ : t_ctx) (A : pre_ty pos) (t : term Ξ“ `- A), t β‚œβŠ›α΅£ r_id = t -> ShiftNL t `α΅₯βŠ›α΅£ r_id = ShiftNL t

forall (Ξ“ : t_ctx) (A : pre_ty neg) (w : whn Ξ“ `- A), w `α΅₯βŠ›α΅£ r_id = w -> NegPR w `α΅₯βŠ›α΅£ r_id = NegPR w

forall (Ξ“ : t_ctx) (A : pre_ty neg) (s : state (Ξ“ β–Άβ‚“ `- A)), s β‚›βŠ›α΅£ r_id = s -> NegPL s `α΅₯βŠ›α΅£ r_id = NegPL s

forall (Ξ“ : t_ctx) (A : pre_ty pos) (s : state (Ξ“ β–Άβ‚“ `+ A)), s β‚›βŠ›α΅£ r_id = s -> NegNR s `α΅₯βŠ›α΅£ r_id = NegNR s

forall (Ξ“ : t_ctx) (A : pre_ty pos) (w : whn Ξ“ `+ A), w `α΅₯βŠ›α΅£ r_id = w -> NegNL w `α΅₯βŠ›α΅£ r_id = NegNL w

forall (Ξ“ : t_ctx) (p : pol) (A : pre_ty p) (t1 : term Ξ“ `+ A), t1 β‚œβŠ›α΅£ r_id = t1 -> forall t2 : term Ξ“ `- A, t2 β‚œβŠ›α΅£ r_id = t2 -> Cut p t1 t2 β‚›βŠ›α΅£ r_id = Cut p t1 t2
Ξ“: t_ctx
A: ty
s: state (Ξ“ β–Άβ‚“ A †)
H: s β‚›βŠ›α΅£ r_id = s

s β‚›βŠ›α΅£ r_shift1 r_id = s
Ξ“: t_ctx
A: pre_ty pos
t: term (Ξ“ β–Άβ‚“ `- A) `- A
H: t β‚œβŠ›α΅£ r_id = t
t β‚œβŠ›α΅£ r_shift1 r_id = t
Ξ“: t_ctx
A: pre_ty neg
t: term (Ξ“ β–Άβ‚“ `+ A) `+ A
H: t β‚œβŠ›α΅£ r_id = t
t β‚œβŠ›α΅£ r_shift1 r_id = t
Ξ“: t_ctx
A, B: pre_ty pos
s: state (Ξ“ β–Άβ‚“ `+ A β–Άβ‚“ `+ B)
H: s β‚›βŠ›α΅£ r_id = s
s β‚›βŠ›α΅£ r_shift2 r_id = s
Ξ“: t_ctx
A, B: pre_ty neg
s: state (Ξ“ β–Άβ‚“ `- A β–Άβ‚“ `- B)
H: s β‚›βŠ›α΅£ r_id = s
s β‚›βŠ›α΅£ r_shift2 r_id = s
Ξ“: t_ctx
A, B: pre_ty pos
s1: state (Ξ“ β–Άβ‚“ `+ A)
H1: s1 β‚›βŠ›α΅£ r_id = s1
s2: state (Ξ“ β–Άβ‚“ `+ B)
H2: s2 β‚›βŠ›α΅£ r_id = s2
s1 β‚›βŠ›α΅£ r_shift1 r_id = s1
Ξ“: t_ctx
A, B: pre_ty pos
s1: state (Ξ“ β–Άβ‚“ `+ A)
H1: s1 β‚›βŠ›α΅£ r_id = s1
s2: state (Ξ“ β–Άβ‚“ `+ B)
H2: s2 β‚›βŠ›α΅£ r_id = s2
s2 β‚›βŠ›α΅£ r_shift1 r_id = s2
Ξ“: t_ctx
A, B: pre_ty neg
s1: state (Ξ“ β–Άβ‚“ `- A)
H1: s1 β‚›βŠ›α΅£ r_id = s1
s2: state (Ξ“ β–Άβ‚“ `- B)
H2: s2 β‚›βŠ›α΅£ r_id = s2
s1 β‚›βŠ›α΅£ r_shift1 r_id = s1
Ξ“: t_ctx
A, B: pre_ty neg
s1: state (Ξ“ β–Άβ‚“ `- A)
H1: s1 β‚›βŠ›α΅£ r_id = s1
s2: state (Ξ“ β–Άβ‚“ `- B)
H2: s2 β‚›βŠ›α΅£ r_id = s2
s2 β‚›βŠ›α΅£ r_shift1 r_id = s2
Ξ“: t_ctx
A: pre_ty neg
s: state (Ξ“ β–Άβ‚“ `+ A)
H: s β‚›βŠ›α΅£ r_id = s
s β‚›βŠ›α΅£ r_shift1 r_id = s
Ξ“: t_ctx
A: pre_ty pos
s: state (Ξ“ β–Άβ‚“ `- A)
H: s β‚›βŠ›α΅£ r_id = s
s β‚›βŠ›α΅£ r_shift1 r_id = s
Ξ“: t_ctx
A: pre_ty neg
s: state (Ξ“ β–Άβ‚“ `- A)
H: s β‚›βŠ›α΅£ r_id = s
s β‚›βŠ›α΅£ r_shift1 r_id = s
Ξ“: t_ctx
A: pre_ty pos
s: state (Ξ“ β–Άβ‚“ `+ A)
H: s β‚›βŠ›α΅£ r_id = s
s β‚›βŠ›α΅£ r_shift1 r_id = s
all: first [ rewrite r_shift1_id | rewrite r_shift2_id ]; eauto. Qed.
Ξ“: t_ctx
A: ty
t: term Ξ“ A

t β‚œβŠ›α΅£ r_id = t
now apply (term_ind_mut _ _ _ ren_id_l_prf). Qed.
Ξ“: t_ctx
A: ty
v: whn Ξ“ A

v `α΅₯βŠ›α΅£ r_id = v
now apply (whn_ind_mut _ _ _ ren_id_l_prf). Qed.
Ξ“: t_ctx
s: state Ξ“

s β‚›βŠ›α΅£ r_id = s
now apply (state_ind_mut _ _ _ ren_id_l_prf). Qed.
Ξ“: t_ctx
A: ty
v: val Ξ“ A

v α΅₯βŠ›α΅£ r_id = v
Ξ“: t_ctx
p: pre_ty pos
v: val Ξ“ `+ p

v α΅₯βŠ›α΅£ r_id = v
Ξ“: t_ctx
p: pre_ty neg
v: val Ξ“ `+ p
v α΅₯βŠ›α΅£ r_id = v
Ξ“: t_ctx
p: pre_ty pos
v: val Ξ“ `- p
v α΅₯βŠ›α΅£ r_id = v
Ξ“: t_ctx
p: pre_ty neg
v: val Ξ“ `- p
v α΅₯βŠ›α΅£ r_id = v
Ξ“: t_ctx
p: pre_ty neg
v: val Ξ“ `+ p

v α΅₯βŠ›α΅£ r_id = v
Ξ“: t_ctx
p: pre_ty pos
v: val Ξ“ `- p
v α΅₯βŠ›α΅£ r_id = v
Ξ“: t_ctx
p: pre_ty neg
v: val Ξ“ `- p
v α΅₯βŠ›α΅£ r_id = v
Ξ“: t_ctx
p: pre_ty pos
v: val Ξ“ `- p

v α΅₯βŠ›α΅£ r_id = v
Ξ“: t_ctx
p: pre_ty neg
v: val Ξ“ `- p
v α΅₯βŠ›α΅£ r_id = v
Ξ“: t_ctx
p: pre_ty neg
v: val Ξ“ `- p

v α΅₯βŠ›α΅£ r_id = v
now apply w_ren_id_l. Qed.
Ξ“, Ξ”: ctx ty
f: Ξ“ βŠ† Ξ”
A: ty
i: Ξ“ βˆ‹ A

var i α΅₯βŠ›α΅£ f = var (f A i)
now destruct A as [ [] | [] ]. Qed.
Ξ“: t_ctx
A: ty

a_shift1 var ≑ₐ var
intros [ [] | [] ] i; dependent elimination i; auto. Qed.
Ξ“: t_ctx
A, B: ty

a_shift2 var ≑ₐ var
Ξ“: t_ctx
A, B, a: ty
v: Ξ“ β–Άβ‚“ A β–Άβ‚“ B βˆ‹ a

a_shift2 var a v = match a as t return (cvar (Ξ“ β–Άβ‚“ A β–Άβ‚“ B) t -> match t with | @LTy p p0 => match p as p1 return (psh (pre_ty p1)) with | pos => whn (Ξ“ β–Άβ‚“ A β–Άβ‚“ B) ∘ LTy | neg => term (Ξ“ β–Άβ‚“ A β–Άβ‚“ B) ∘ LTy end p0 | @RTy p p0 => match p as p1 return (psh (pre_ty p1)) with | pos => term (Ξ“ β–Άβ‚“ A β–Άβ‚“ B) ∘ RTy | neg => whn (Ξ“ β–Άβ‚“ A β–Άβ‚“ B) ∘ RTy end p0 end) with | @LTy p p0 => fun c : cvar (Ξ“ β–Άβ‚“ A β–Άβ‚“ B) `+ p0 => match p as p1 return (forall p2 : pre_ty p1, cvar (Ξ“ β–Άβ‚“ A β–Άβ‚“ B) `+ p2 -> match p1 as p3 return (psh (pre_ty p3)) with | pos => whn (Ξ“ β–Άβ‚“ A β–Άβ‚“ B) ∘ LTy | neg => term (Ξ“ β–Άβ‚“ A β–Άβ‚“ B) ∘ LTy end p2) with | pos => fun (p1 : pre_ty pos) (c0 : cvar (Ξ“ β–Άβ‚“ A β–Άβ‚“ B) `+ p1) => Var c0 | neg => fun p1 : pre_ty neg => Whn ∘ Var end p0 c | @RTy p p0 => fun c : cvar (Ξ“ β–Άβ‚“ A β–Άβ‚“ B) `- p0 => match p as p1 return (forall p2 : pre_ty p1, cvar (Ξ“ β–Άβ‚“ A β–Άβ‚“ B) `- p2 -> match p1 as p3 return (psh (pre_ty p3)) with | pos => term (Ξ“ β–Άβ‚“ A β–Άβ‚“ B) ∘ RTy | neg => whn (Ξ“ β–Άβ‚“ A β–Άβ‚“ B) ∘ RTy end p2) with | pos => fun p2 : pre_ty pos => Whn ∘ Var | neg => fun (p2 : pre_ty neg) (c0 : cvar (Ξ“ β–Άβ‚“ A β–Άβ‚“ B) `- p2) => Var c0 end p0 c end v
Ξ“1: ctx ty
y0, y, a: ty
v: Ctx.var a Ξ“1

v_shift2 a (match a as t return (cvar Ξ“1 t -> match t with | @LTy p p0 => match p as p1 return (psh (pre_ty p1)) with | pos => whn Ξ“1 ∘ LTy | neg => term Ξ“1 ∘ LTy end p0 | @RTy p p0 => match p as p1 return (psh (pre_ty p1)) with | pos => term Ξ“1 ∘ RTy | neg => whn Ξ“1 ∘ RTy end p0 end) with | @LTy p p0 => fun c : cvar Ξ“1 `+ p0 => match p as p1 return (forall p2 : pre_ty p1, cvar Ξ“1 `+ p2 -> match p1 as p3 return (psh (pre_ty p3)) with | pos => whn Ξ“1 ∘ LTy | neg => term Ξ“1 ∘ LTy end p2) with | pos => fun (p1 : pre_ty pos) (c0 : cvar Ξ“1 `+ p1) => Var c0 | neg => fun p1 : pre_ty neg => Whn ∘ Var end p0 c | @RTy p p0 => fun c : cvar Ξ“1 `- p0 => match p as p1 return (forall p2 : pre_ty p1, cvar Ξ“1 `- p2 -> match p1 as p3 return (psh (pre_ty p3)) with | pos => term Ξ“1 ∘ RTy | neg => whn Ξ“1 ∘ RTy end p2) with | pos => fun p2 : pre_ty pos => Whn ∘ Var | neg => fun (p2 : pre_ty neg) (c0 : cvar Ξ“1 `- p2) => Var c0 end p0 c end v) = match a as t return (cvar (Ξ“1 β–Άβ‚“ y0 β–Άβ‚“ y) t -> match t with | @LTy p p0 => match p as p1 return (psh (pre_ty p1)) with | pos => whn (Ξ“1 β–Άβ‚“ y0 β–Άβ‚“ y) ∘ LTy | neg => term (Ξ“1 β–Άβ‚“ y0 β–Άβ‚“ y) ∘ LTy end p0 | @RTy p p0 => match p as p1 return (psh (pre_ty p1)) with | pos => term (Ξ“1 β–Άβ‚“ y0 β–Άβ‚“ y) ∘ RTy | neg => whn (Ξ“1 β–Άβ‚“ y0 β–Άβ‚“ y) ∘ RTy end p0 end) with | @LTy p p0 => fun c : cvar (Ξ“1 β–Άβ‚“ y0 β–Άβ‚“ y) `+ p0 => match p as p1 return (forall p2 : pre_ty p1, cvar (Ξ“1 β–Άβ‚“ y0 β–Άβ‚“ y) `+ p2 -> match p1 as p3 return (psh (pre_ty p3)) with | pos => whn (Ξ“1 β–Άβ‚“ y0 β–Άβ‚“ y) ∘ LTy | neg => term (Ξ“1 β–Άβ‚“ y0 β–Άβ‚“ y) ∘ LTy end p2) with | pos => fun (p1 : pre_ty pos) (c0 : cvar (Ξ“1 β–Άβ‚“ y0 β–Άβ‚“ y) `+ p1) => Var c0 | neg => fun p1 : pre_ty neg => Whn ∘ Var end p0 c | @RTy p p0 => fun c : cvar (Ξ“1 β–Άβ‚“ y0 β–Άβ‚“ y) `- p0 => match p as p1 return (forall p2 : pre_ty p1, cvar (Ξ“1 β–Άβ‚“ y0 β–Άβ‚“ y) `- p2 -> match p1 as p3 return (psh (pre_ty p3)) with | pos => term (Ξ“1 β–Άβ‚“ y0 β–Άβ‚“ y) ∘ RTy | neg => whn (Ξ“1 β–Άβ‚“ y0 β–Άβ‚“ y) ∘ RTy end p2) with | pos => fun p2 : pre_ty pos => Whn ∘ Var | neg => fun (p2 : pre_ty neg) (c0 : cvar (Ξ“1 β–Άβ‚“ y0 β–Άβ‚“ y) `- p2) => Var c0 end p0 c end (pop (pop v))
now destruct a as [[]|[]]. Qed. Arguments var : simpl never.
Ξ“1, Ξ“2, Ξ“3: t_ctx
y: ty
f1: Ξ“1 =[ val ]> Ξ“2
f2: Ξ“2 βŠ† Ξ“3

a_shift1 (f1 βŠ›α΅£ f2) ≑ₐ a_shift1 f1 βŠ›α΅£ r_shift1 f2
Ξ“: ctx ty
Ξ“2, Ξ“3: t_ctx
a: ty
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 βŠ† Ξ“3

var top = var top α΅₯βŠ›α΅£ r_shift1 f2
Ξ“0: ctx ty
Ξ“2, Ξ“3: t_ctx
y0: ty
f1: Ξ“0 =[ val ]> Ξ“2
f2: Ξ“2 βŠ† Ξ“3
a: ty
v: Ctx.var a Ξ“0
v_shift1 a (f1 a v α΅₯βŠ›α΅£ f2) = v_shift1 a (f1 a v) α΅₯βŠ›α΅£ r_shift1 f2
Ξ“: ctx ty
Ξ“2, Ξ“3: t_ctx
a: ty
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 βŠ† Ξ“3

var top = var top α΅₯βŠ›α΅£ r_shift1 f2
now rewrite v_ren_id_r.
Ξ“0: ctx ty
Ξ“2, Ξ“3: t_ctx
y0: ty
f1: Ξ“0 =[ val ]> Ξ“2
f2: Ξ“2 βŠ† Ξ“3
a: ty
v: Ctx.var a Ξ“0

v_shift1 a (f1 a v α΅₯βŠ›α΅£ f2) = v_shift1 a (f1 a v) α΅₯βŠ›α΅£ r_shift1 f2
now unfold v_shift1; rewrite 2 v_ren_ren. Qed.
Ξ“1, Ξ“2, Ξ“3: t_ctx
y, z: ty
f1: Ξ“1 =[ val ]> Ξ“2
f2: Ξ“2 βŠ† Ξ“3

a_shift2 (f1 βŠ›α΅£ f2) ≑ₐ a_shift2 f1 βŠ›α΅£ r_shift2 f2
Ξ“0: ctx ty
Ξ“2, Ξ“3: t_ctx
y1, y0: ty
f1: Ξ“0 =[ val ]> Ξ“2
f2: Ξ“2 βŠ† Ξ“3
a: ty
v: Ctx.var a Ξ“0

v_shift2 a (f1 a v α΅₯βŠ›α΅£ f2) = v_shift2 a (f1 a v) α΅₯βŠ›α΅£ r_shift2 f2
unfold v_shift2; now rewrite 2 v_ren_ren. Qed.
Ξ“1, Ξ“2: ctx ty
Ξ“3: t_ctx
y: ty
f1: Ξ“1 βŠ† Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3

a_shift1 (f1 α΅£βŠ› f2) ≑ₐ r_shift1 f1 α΅£βŠ› a_shift1 f2
intros ? i; dependent elimination i; auto. Qed.
Ξ“1, Ξ“2: ctx ty
Ξ“3: t_ctx
y, z: ty
f1: Ξ“1 βŠ† Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3

a_shift2 (f1 α΅£βŠ› f2) ≑ₐ r_shift2 f1 α΅£βŠ› a_shift2 f2
intros ? v; do 2 (dependent elimination v; auto). Qed. Definition t_sub_proper_P Ξ“ A (t : term Ξ“ A) : Prop := forall Ξ” (f1 f2 : Ξ“ =[val]> Ξ”), f1 ≑ₐ f2 -> t `β‚œβŠ› f1 = t `β‚œβŠ› f2 . Definition w_sub_proper_P Ξ“ A (v : whn Ξ“ A) : Prop := forall Ξ” (f1 f2 : Ξ“ =[val]> Ξ”), f1 ≑ₐ f2 -> v `α΅₯βŠ› f1 = v `α΅₯βŠ› f2 . Definition s_sub_proper_P Ξ“ (s : state Ξ“) : Prop := forall Ξ” (f1 f2 : Ξ“ =[val]> Ξ”), f1 ≑ₐ f2 -> s β‚œβŠ› f1 = s β‚œβŠ› f2 .

syn_ind_args t_sub_proper_P w_sub_proper_P s_sub_proper_P

forall (Ξ“ : t_ctx) (A : ty) (s : state (Ξ“ β–Άβ‚“ A †)), s_sub_proper_P (Ξ“ β–Άβ‚“ A †) s -> t_sub_proper_P Ξ“ A (Mu s)

forall (Ξ“ : t_ctx) (A : pre_ty pos) (t : term (Ξ“ β–Άβ‚“ `- A) `- A), t_sub_proper_P (Ξ“ β–Άβ‚“ `- A) `- A t -> t_sub_proper_P Ξ“ `- A (RecL t)

forall (Ξ“ : t_ctx) (A : pre_ty neg) (t : term (Ξ“ β–Άβ‚“ `+ A) `+ A), t_sub_proper_P (Ξ“ β–Άβ‚“ `+ A) `+ A t -> t_sub_proper_P Ξ“ `+ A (RecR t)

forall (Ξ“ : t_ctx) (A : ty) (w : whn Ξ“ A), w_sub_proper_P Ξ“ A w -> t_sub_proper_P Ξ“ A (Whn w)

forall (Ξ“ : t_ctx) (A : ty) (h : Ξ“ βˆ‹ A), w_sub_proper_P Ξ“ A (Var h)

forall Ξ“ : t_ctx, w_sub_proper_P Ξ“ `- 0 ZerL

forall Ξ“ : t_ctx, w_sub_proper_P Ξ“ `+ ⊀ TopR

forall Ξ“ : t_ctx, w_sub_proper_P Ξ“ `+ 1 OneR

forall (Ξ“ : t_ctx) (s : state Ξ“), s_sub_proper_P Ξ“ s -> w_sub_proper_P Ξ“ `- 1 (OneL s)

forall (Ξ“ : t_ctx) (s : state Ξ“), s_sub_proper_P Ξ“ s -> w_sub_proper_P Ξ“ `+ βŠ₯ (BotR s)

forall Ξ“ : t_ctx, w_sub_proper_P Ξ“ `- βŠ₯ BotL

forall (Ξ“ : t_ctx) (A B : pre_ty pos) (w1 : whn Ξ“ `+ A), w_sub_proper_P Ξ“ `+ A w1 -> forall w2 : whn Ξ“ `+ B, w_sub_proper_P Ξ“ `+ B w2 -> w_sub_proper_P Ξ“ `+ (A βŠ— B) (TenR w1 w2)

forall (Ξ“ : t_ctx) (A B : pre_ty pos) (s : state (Ξ“ β–Άβ‚“ `+ A β–Άβ‚“ `+ B)), s_sub_proper_P (Ξ“ β–Άβ‚“ `+ A β–Άβ‚“ `+ B) s -> w_sub_proper_P Ξ“ `- (A βŠ— B) (TenL s)

forall (Ξ“ : t_ctx) (A B : pre_ty neg) (s : state (Ξ“ β–Άβ‚“ `- A β–Άβ‚“ `- B)), s_sub_proper_P (Ξ“ β–Άβ‚“ `- A β–Άβ‚“ `- B) s -> w_sub_proper_P Ξ“ `+ (A β…‹ B) (ParR s)

forall (Ξ“ : t_ctx) (A B : pre_ty neg) (w1 : whn Ξ“ `- A), w_sub_proper_P Ξ“ `- A w1 -> forall w2 : whn Ξ“ `- B, w_sub_proper_P Ξ“ `- B w2 -> w_sub_proper_P Ξ“ `- (A β…‹ B) (ParL w1 w2)

forall (Ξ“ : t_ctx) (A B : pre_ty pos) (w : whn Ξ“ `+ A), w_sub_proper_P Ξ“ `+ A w -> w_sub_proper_P Ξ“ `+ (A βŠ• B) (OrR1 w)

forall (Ξ“ : t_ctx) (A B : pre_ty pos) (w : whn Ξ“ `+ B), w_sub_proper_P Ξ“ `+ B w -> w_sub_proper_P Ξ“ `+ (A βŠ• B) (OrR2 w)

forall (Ξ“ : t_ctx) (A B : pre_ty pos) (s1 : state (Ξ“ β–Άβ‚“ `+ A)), s_sub_proper_P (Ξ“ β–Άβ‚“ `+ A) s1 -> forall s2 : state (Ξ“ β–Άβ‚“ `+ B), s_sub_proper_P (Ξ“ β–Άβ‚“ `+ B) s2 -> w_sub_proper_P Ξ“ `- (A βŠ• B) (OrL s1 s2)

forall (Ξ“ : t_ctx) (A B : pre_ty neg) (s1 : state (Ξ“ β–Άβ‚“ `- A)), s_sub_proper_P (Ξ“ β–Άβ‚“ `- A) s1 -> forall s2 : state (Ξ“ β–Άβ‚“ `- B), s_sub_proper_P (Ξ“ β–Άβ‚“ `- B) s2 -> w_sub_proper_P Ξ“ `+ (A & B) (AndR s1 s2)

forall (Ξ“ : t_ctx) (A B : pre_ty neg) (w : whn Ξ“ `- A), w_sub_proper_P Ξ“ `- A w -> w_sub_proper_P Ξ“ `- (A & B) (AndL1 w)

forall (Ξ“ : t_ctx) (A B : pre_ty neg) (w : whn Ξ“ `- B), w_sub_proper_P Ξ“ `- B w -> w_sub_proper_P Ξ“ `- (A & B) (AndL2 w)

forall (Ξ“ : t_ctx) (A : pre_ty neg) (t : term Ξ“ `+ A), t_sub_proper_P Ξ“ `+ A t -> w_sub_proper_P Ξ“ `+ (↓ A) (ShiftPR t)

forall (Ξ“ : t_ctx) (A : pre_ty neg) (s : state (Ξ“ β–Άβ‚“ `+ A)), s_sub_proper_P (Ξ“ β–Άβ‚“ `+ A) s -> w_sub_proper_P Ξ“ `- (↓ A) (ShiftPL s)

forall (Ξ“ : t_ctx) (A : pre_ty pos) (s : state (Ξ“ β–Άβ‚“ `- A)), s_sub_proper_P (Ξ“ β–Άβ‚“ `- A) s -> w_sub_proper_P Ξ“ `+ (↑ A) (ShiftNR s)

forall (Ξ“ : t_ctx) (A : pre_ty pos) (t : term Ξ“ `- A), t_sub_proper_P Ξ“ `- A t -> w_sub_proper_P Ξ“ `- (↑ A) (ShiftNL t)

forall (Ξ“ : t_ctx) (A : pre_ty neg) (w : whn Ξ“ `- A), w_sub_proper_P Ξ“ `- A w -> w_sub_proper_P Ξ“ `+ (βŠ– A) (NegPR w)

forall (Ξ“ : t_ctx) (A : pre_ty neg) (s : state (Ξ“ β–Άβ‚“ `- A)), s_sub_proper_P (Ξ“ β–Άβ‚“ `- A) s -> w_sub_proper_P Ξ“ `- (βŠ– A) (NegPL s)

forall (Ξ“ : t_ctx) (A : pre_ty pos) (s : state (Ξ“ β–Άβ‚“ `+ A)), s_sub_proper_P (Ξ“ β–Άβ‚“ `+ A) s -> w_sub_proper_P Ξ“ `+ (Β¬ A) (NegNR s)

forall (Ξ“ : t_ctx) (A : pre_ty pos) (w : whn Ξ“ `+ A), w_sub_proper_P Ξ“ `+ A w -> w_sub_proper_P Ξ“ `- (Β¬ A) (NegNL w)

forall (Ξ“ : t_ctx) (p : pol) (A : pre_ty p) (t1 : term Ξ“ `+ A), t_sub_proper_P Ξ“ `+ A t1 -> forall t2 : term Ξ“ `- A, t_sub_proper_P Ξ“ `- A t2 -> s_sub_proper_P Ξ“ (Cut p t1 t2)

forall (Ξ“ : t_ctx) (A : ty) (s : state (Ξ“ β–Άβ‚“ A †)), (forall (Ξ” : t_ctx) (f1 f2 : (Ξ“ β–Άβ‚“ A †) =[ val ]> Ξ”), f1 ≑ₐ f2 -> s β‚œβŠ› f1 = s β‚œβŠ› f2) -> forall (Ξ” : t_ctx) (f1 f2 : Ξ“ =[ val ]> Ξ”), f1 ≑ₐ f2 -> Mu s `β‚œβŠ› f1 = Mu s `β‚œβŠ› f2

forall (Ξ“ : t_ctx) (A : pre_ty pos) (t : term (Ξ“ β–Άβ‚“ `- A) `- A), (forall (Ξ” : t_ctx) (f1 f2 : (Ξ“ β–Άβ‚“ `- A) =[ val ]> Ξ”), f1 ≑ₐ f2 -> t `β‚œβŠ› f1 = t `β‚œβŠ› f2) -> forall (Ξ” : t_ctx) (f1 f2 : Ξ“ =[ val ]> Ξ”), f1 ≑ₐ f2 -> RecL t `β‚œβŠ› f1 = RecL t `β‚œβŠ› f2

forall (Ξ“ : t_ctx) (A : pre_ty neg) (t : term (Ξ“ β–Άβ‚“ `+ A) `+ A), (forall (Ξ” : t_ctx) (f1 f2 : (Ξ“ β–Άβ‚“ `+ A) =[ val ]> Ξ”), f1 ≑ₐ f2 -> t `β‚œβŠ› f1 = t `β‚œβŠ› f2) -> forall (Ξ” : t_ctx) (f1 f2 : Ξ“ =[ val ]> Ξ”), f1 ≑ₐ f2 -> RecR t `β‚œβŠ› f1 = RecR t `β‚œβŠ› f2

forall (Ξ“ : t_ctx) (A : ty) (w : whn Ξ“ A), (forall (Ξ” : t_ctx) (f1 f2 : Ξ“ =[ val ]> Ξ”), f1 ≑ₐ f2 -> w `α΅₯βŠ› f1 = w `α΅₯βŠ› f2) -> forall (Ξ” : t_ctx) (f1 f2 : Ξ“ =[ val ]> Ξ”), f1 ≑ₐ f2 -> Whn w `β‚œβŠ› f1 = Whn w `β‚œβŠ› f2

forall (Ξ“ : t_ctx) (A : ty) (h : Ξ“ βˆ‹ A) (Ξ” : t_ctx) (f1 f2 : Ξ“ =[ val ]> Ξ”), f1 ≑ₐ f2 -> Var h `α΅₯βŠ› f1 = Var h `α΅₯βŠ› f2

forall (Ξ“ Ξ” : t_ctx) (f1 f2 : Ξ“ =[ val ]> Ξ”), f1 ≑ₐ f2 -> ZerL `α΅₯βŠ› f1 = ZerL `α΅₯βŠ› f2

forall (Ξ“ Ξ” : t_ctx) (f1 f2 : Ξ“ =[ val ]> Ξ”), f1 ≑ₐ f2 -> TopR `α΅₯βŠ› f1 = TopR `α΅₯βŠ› f2

forall (Ξ“ Ξ” : t_ctx) (f1 f2 : Ξ“ =[ val ]> Ξ”), f1 ≑ₐ f2 -> OneR `α΅₯βŠ› f1 = OneR `α΅₯βŠ› f2

forall (Ξ“ : t_ctx) (s : state Ξ“), (forall (Ξ” : t_ctx) (f1 f2 : Ξ“ =[ val ]> Ξ”), f1 ≑ₐ f2 -> s β‚œβŠ› f1 = s β‚œβŠ› f2) -> forall (Ξ” : t_ctx) (f1 f2 : Ξ“ =[ val ]> Ξ”), f1 ≑ₐ f2 -> OneL s `α΅₯βŠ› f1 = OneL s `α΅₯βŠ› f2

forall (Ξ“ : t_ctx) (s : state Ξ“), (forall (Ξ” : t_ctx) (f1 f2 : Ξ“ =[ val ]> Ξ”), f1 ≑ₐ f2 -> s β‚œβŠ› f1 = s β‚œβŠ› f2) -> forall (Ξ” : t_ctx) (f1 f2 : Ξ“ =[ val ]> Ξ”), f1 ≑ₐ f2 -> BotR s `α΅₯βŠ› f1 = BotR s `α΅₯βŠ› f2

forall (Ξ“ Ξ” : t_ctx) (f1 f2 : Ξ“ =[ val ]> Ξ”), f1 ≑ₐ f2 -> BotL `α΅₯βŠ› f1 = BotL `α΅₯βŠ› f2

forall (Ξ“ : t_ctx) (A B : pre_ty pos) (w1 : whn Ξ“ `+ A), (forall (Ξ” : t_ctx) (f1 f2 : Ξ“ =[ val ]> Ξ”), f1 ≑ₐ f2 -> w1 `α΅₯βŠ› f1 = w1 `α΅₯βŠ› f2) -> forall w2 : whn Ξ“ `+ B, (forall (Ξ” : t_ctx) (f1 f2 : Ξ“ =[ val ]> Ξ”), f1 ≑ₐ f2 -> w2 `α΅₯βŠ› f1 = w2 `α΅₯βŠ› f2) -> forall (Ξ” : t_ctx) (f1 f2 : Ξ“ =[ val ]> Ξ”), f1 ≑ₐ f2 -> TenR w1 w2 `α΅₯βŠ› f1 = TenR w1 w2 `α΅₯βŠ› f2

forall (Ξ“ : t_ctx) (A B : pre_ty pos) (s : state (Ξ“ β–Άβ‚“ `+ A β–Άβ‚“ `+ B)), (forall (Ξ” : t_ctx) (f1 f2 : (Ξ“ β–Άβ‚“ `+ A β–Άβ‚“ `+ B) =[ val ]> Ξ”), f1 ≑ₐ f2 -> s β‚œβŠ› f1 = s β‚œβŠ› f2) -> forall (Ξ” : t_ctx) (f1 f2 : Ξ“ =[ val ]> Ξ”), f1 ≑ₐ f2 -> TenL s `α΅₯βŠ› f1 = TenL s `α΅₯βŠ› f2

forall (Ξ“ : t_ctx) (A B : pre_ty neg) (s : state (Ξ“ β–Άβ‚“ `- A β–Άβ‚“ `- B)), (forall (Ξ” : t_ctx) (f1 f2 : (Ξ“ β–Άβ‚“ `- A β–Άβ‚“ `- B) =[ val ]> Ξ”), f1 ≑ₐ f2 -> s β‚œβŠ› f1 = s β‚œβŠ› f2) -> forall (Ξ” : t_ctx) (f1 f2 : Ξ“ =[ val ]> Ξ”), f1 ≑ₐ f2 -> ParR s `α΅₯βŠ› f1 = ParR s `α΅₯βŠ› f2

forall (Ξ“ : t_ctx) (A B : pre_ty neg) (w1 : whn Ξ“ `- A), (forall (Ξ” : t_ctx) (f1 f2 : Ξ“ =[ val ]> Ξ”), f1 ≑ₐ f2 -> w1 `α΅₯βŠ› f1 = w1 `α΅₯βŠ› f2) -> forall w2 : whn Ξ“ `- B, (forall (Ξ” : t_ctx) (f1 f2 : Ξ“ =[ val ]> Ξ”), f1 ≑ₐ f2 -> w2 `α΅₯βŠ› f1 = w2 `α΅₯βŠ› f2) -> forall (Ξ” : t_ctx) (f1 f2 : Ξ“ =[ val ]> Ξ”), f1 ≑ₐ f2 -> ParL w1 w2 `α΅₯βŠ› f1 = ParL w1 w2 `α΅₯βŠ› f2

forall (Ξ“ : t_ctx) (A B : pre_ty pos) (w : whn Ξ“ `+ A), (forall (Ξ” : t_ctx) (f1 f2 : Ξ“ =[ val ]> Ξ”), f1 ≑ₐ f2 -> w `α΅₯βŠ› f1 = w `α΅₯βŠ› f2) -> forall (Ξ” : t_ctx) (f1 f2 : Ξ“ =[ val ]> Ξ”), f1 ≑ₐ f2 -> OrR1 w `α΅₯βŠ› f1 = OrR1 w `α΅₯βŠ› f2

forall (Ξ“ : t_ctx) (A B : pre_ty pos) (w : whn Ξ“ `+ B), (forall (Ξ” : t_ctx) (f1 f2 : Ξ“ =[ val ]> Ξ”), f1 ≑ₐ f2 -> w `α΅₯βŠ› f1 = w `α΅₯βŠ› f2) -> forall (Ξ” : t_ctx) (f1 f2 : Ξ“ =[ val ]> Ξ”), f1 ≑ₐ f2 -> OrR2 w `α΅₯βŠ› f1 = OrR2 w `α΅₯βŠ› f2

forall (Ξ“ : t_ctx) (A B : pre_ty pos) (s1 : state (Ξ“ β–Άβ‚“ `+ A)), (forall (Ξ” : t_ctx) (f1 f2 : (Ξ“ β–Άβ‚“ `+ A) =[ val ]> Ξ”), f1 ≑ₐ f2 -> s1 β‚œβŠ› f1 = s1 β‚œβŠ› f2) -> forall s2 : state (Ξ“ β–Άβ‚“ `+ B), (forall (Ξ” : t_ctx) (f1 f2 : (Ξ“ β–Άβ‚“ `+ B) =[ val ]> Ξ”), f1 ≑ₐ f2 -> s2 β‚œβŠ› f1 = s2 β‚œβŠ› f2) -> forall (Ξ” : t_ctx) (f1 f2 : Ξ“ =[ val ]> Ξ”), f1 ≑ₐ f2 -> OrL s1 s2 `α΅₯βŠ› f1 = OrL s1 s2 `α΅₯βŠ› f2

forall (Ξ“ : t_ctx) (A B : pre_ty neg) (s1 : state (Ξ“ β–Άβ‚“ `- A)), (forall (Ξ” : t_ctx) (f1 f2 : (Ξ“ β–Άβ‚“ `- A) =[ val ]> Ξ”), f1 ≑ₐ f2 -> s1 β‚œβŠ› f1 = s1 β‚œβŠ› f2) -> forall s2 : state (Ξ“ β–Άβ‚“ `- B), (forall (Ξ” : t_ctx) (f1 f2 : (Ξ“ β–Άβ‚“ `- B) =[ val ]> Ξ”), f1 ≑ₐ f2 -> s2 β‚œβŠ› f1 = s2 β‚œβŠ› f2) -> forall (Ξ” : t_ctx) (f1 f2 : Ξ“ =[ val ]> Ξ”), f1 ≑ₐ f2 -> AndR s1 s2 `α΅₯βŠ› f1 = AndR s1 s2 `α΅₯βŠ› f2

forall (Ξ“ : t_ctx) (A B : pre_ty neg) (w : whn Ξ“ `- A), (forall (Ξ” : t_ctx) (f1 f2 : Ξ“ =[ val ]> Ξ”), f1 ≑ₐ f2 -> w `α΅₯βŠ› f1 = w `α΅₯βŠ› f2) -> forall (Ξ” : t_ctx) (f1 f2 : Ξ“ =[ val ]> Ξ”), f1 ≑ₐ f2 -> AndL1 w `α΅₯βŠ› f1 = AndL1 w `α΅₯βŠ› f2

forall (Ξ“ : t_ctx) (A B : pre_ty neg) (w : whn Ξ“ `- B), (forall (Ξ” : t_ctx) (f1 f2 : Ξ“ =[ val ]> Ξ”), f1 ≑ₐ f2 -> w `α΅₯βŠ› f1 = w `α΅₯βŠ› f2) -> forall (Ξ” : t_ctx) (f1 f2 : Ξ“ =[ val ]> Ξ”), f1 ≑ₐ f2 -> AndL2 w `α΅₯βŠ› f1 = AndL2 w `α΅₯βŠ› f2

forall (Ξ“ : t_ctx) (A : pre_ty neg) (t : term Ξ“ `+ A), (forall (Ξ” : t_ctx) (f1 f2 : Ξ“ =[ val ]> Ξ”), f1 ≑ₐ f2 -> t `β‚œβŠ› f1 = t `β‚œβŠ› f2) -> forall (Ξ” : t_ctx) (f1 f2 : Ξ“ =[ val ]> Ξ”), f1 ≑ₐ f2 -> ShiftPR t `α΅₯βŠ› f1 = ShiftPR t `α΅₯βŠ› f2

forall (Ξ“ : t_ctx) (A : pre_ty neg) (s : state (Ξ“ β–Άβ‚“ `+ A)), (forall (Ξ” : t_ctx) (f1 f2 : (Ξ“ β–Άβ‚“ `+ A) =[ val ]> Ξ”), f1 ≑ₐ f2 -> s β‚œβŠ› f1 = s β‚œβŠ› f2) -> forall (Ξ” : t_ctx) (f1 f2 : Ξ“ =[ val ]> Ξ”), f1 ≑ₐ f2 -> ShiftPL s `α΅₯βŠ› f1 = ShiftPL s `α΅₯βŠ› f2

forall (Ξ“ : t_ctx) (A : pre_ty pos) (s : state (Ξ“ β–Άβ‚“ `- A)), (forall (Ξ” : t_ctx) (f1 f2 : (Ξ“ β–Άβ‚“ `- A) =[ val ]> Ξ”), f1 ≑ₐ f2 -> s β‚œβŠ› f1 = s β‚œβŠ› f2) -> forall (Ξ” : t_ctx) (f1 f2 : Ξ“ =[ val ]> Ξ”), f1 ≑ₐ f2 -> ShiftNR s `α΅₯βŠ› f1 = ShiftNR s `α΅₯βŠ› f2

forall (Ξ“ : t_ctx) (A : pre_ty pos) (t : term Ξ“ `- A), (forall (Ξ” : t_ctx) (f1 f2 : Ξ“ =[ val ]> Ξ”), f1 ≑ₐ f2 -> t `β‚œβŠ› f1 = t `β‚œβŠ› f2) -> forall (Ξ” : t_ctx) (f1 f2 : Ξ“ =[ val ]> Ξ”), f1 ≑ₐ f2 -> ShiftNL t `α΅₯βŠ› f1 = ShiftNL t `α΅₯βŠ› f2

forall (Ξ“ : t_ctx) (A : pre_ty neg) (w : whn Ξ“ `- A), (forall (Ξ” : t_ctx) (f1 f2 : Ξ“ =[ val ]> Ξ”), f1 ≑ₐ f2 -> w `α΅₯βŠ› f1 = w `α΅₯βŠ› f2) -> forall (Ξ” : t_ctx) (f1 f2 : Ξ“ =[ val ]> Ξ”), f1 ≑ₐ f2 -> NegPR w `α΅₯βŠ› f1 = NegPR w `α΅₯βŠ› f2

forall (Ξ“ : t_ctx) (A : pre_ty neg) (s : state (Ξ“ β–Άβ‚“ `- A)), (forall (Ξ” : t_ctx) (f1 f2 : (Ξ“ β–Άβ‚“ `- A) =[ val ]> Ξ”), f1 ≑ₐ f2 -> s β‚œβŠ› f1 = s β‚œβŠ› f2) -> forall (Ξ” : t_ctx) (f1 f2 : Ξ“ =[ val ]> Ξ”), f1 ≑ₐ f2 -> NegPL s `α΅₯βŠ› f1 = NegPL s `α΅₯βŠ› f2

forall (Ξ“ : t_ctx) (A : pre_ty pos) (s : state (Ξ“ β–Άβ‚“ `+ A)), (forall (Ξ” : t_ctx) (f1 f2 : (Ξ“ β–Άβ‚“ `+ A) =[ val ]> Ξ”), f1 ≑ₐ f2 -> s β‚œβŠ› f1 = s β‚œβŠ› f2) -> forall (Ξ” : t_ctx) (f1 f2 : Ξ“ =[ val ]> Ξ”), f1 ≑ₐ f2 -> NegNR s `α΅₯βŠ› f1 = NegNR s `α΅₯βŠ› f2

forall (Ξ“ : t_ctx) (A : pre_ty pos) (w : whn Ξ“ `+ A), (forall (Ξ” : t_ctx) (f1 f2 : Ξ“ =[ val ]> Ξ”), f1 ≑ₐ f2 -> w `α΅₯βŠ› f1 = w `α΅₯βŠ› f2) -> forall (Ξ” : t_ctx) (f1 f2 : Ξ“ =[ val ]> Ξ”), f1 ≑ₐ f2 -> NegNL w `α΅₯βŠ› f1 = NegNL w `α΅₯βŠ› f2

forall (Ξ“ : t_ctx) (p : pol) (A : pre_ty p) (t1 : term Ξ“ `+ A), (forall (Ξ” : t_ctx) (f1 f2 : Ξ“ =[ val ]> Ξ”), f1 ≑ₐ f2 -> t1 `β‚œβŠ› f1 = t1 `β‚œβŠ› f2) -> forall t2 : term Ξ“ `- A, (forall (Ξ” : t_ctx) (f1 f2 : Ξ“ =[ val ]> Ξ”), f1 ≑ₐ f2 -> t2 `β‚œβŠ› f1 = t2 `β‚œβŠ› f2) -> forall (Ξ” : t_ctx) (f1 f2 : Ξ“ =[ val ]> Ξ”), f1 ≑ₐ f2 -> Cut p t1 t2 β‚œβŠ› f1 = Cut p t1 t2 β‚œβŠ› f2
Ξ“: t_ctx
A: ty
s: state (Ξ“ β–Άβ‚“ A †)
H: forall (Ξ” : t_ctx) (f1 f2 : (Ξ“ β–Άβ‚“ A †) =[ val ]> Ξ”), f1 ≑ₐ f2 -> s β‚œβŠ› f1 = s β‚œβŠ› f2
Ξ”: t_ctx
f1, f2: Ξ“ =[ val ]> Ξ”
H0: f1 ≑ₐ f2

Mu (s_subst (Ξ“ β–Άβ‚“ A †) s (Ξ” β–Άβ‚“ A †) (a_shift1 f1)) = Mu (s_subst (Ξ“ β–Άβ‚“ A †) s (Ξ” β–Άβ‚“ A †) (a_shift1 f2))
Ξ“: t_ctx
A: pre_ty pos
t: term (Ξ“ β–Άβ‚“ `- A) `- A
H: forall (Ξ” : t_ctx) (f1 f2 : (Ξ“ β–Άβ‚“ `- A) =[ val ]> Ξ”), f1 ≑ₐ f2 -> t `β‚œβŠ› f1 = t `β‚œβŠ› f2
Ξ”: t_ctx
f1, f2: Ξ“ =[ val ]> Ξ”
H0: f1 ≑ₐ f2
RecL (t `β‚œβŠ› a_shift1 f1) = RecL (t `β‚œβŠ› a_shift1 f2)
Ξ“: t_ctx
A: pre_ty neg
t: term (Ξ“ β–Άβ‚“ `+ A) `+ A
H: forall (Ξ” : t_ctx) (f1 f2 : (Ξ“ β–Άβ‚“ `+ A) =[ val ]> Ξ”), f1 ≑ₐ f2 -> t `β‚œβŠ› f1 = t `β‚œβŠ› f2
Ξ”: t_ctx
f1, f2: Ξ“ =[ val ]> Ξ”
H0: f1 ≑ₐ f2
RecR (t `β‚œβŠ› a_shift1 f1) = RecR (t `β‚œβŠ› a_shift1 f2)
Ξ“: t_ctx
A: ty
w: whn Ξ“ A
H: forall (Ξ” : t_ctx) (f1 f2 : Ξ“ =[ val ]> Ξ”), f1 ≑ₐ f2 -> w `α΅₯βŠ› f1 = w `α΅₯βŠ› f2
Ξ”: t_ctx
f1, f2: Ξ“ =[ val ]> Ξ”
H0: f1 ≑ₐ f2
w `α΅₯βŠ› f1 = w `α΅₯βŠ› f2
Ξ“: t_ctx
A: ty
h: Ξ“ βˆ‹ A
Ξ”: t_ctx
f1, f2: Ξ“ =[ val ]> Ξ”
H: f1 ≑ₐ f2
f1 A h = f2 A h
Ξ“, Ξ”: t_ctx
f1, f2: Ξ“ =[ val ]> Ξ”
H: f1 ≑ₐ f2
Whn ZerL = Whn ZerL
Ξ“, Ξ”: t_ctx
f1, f2: Ξ“ =[ val ]> Ξ”
H: f1 ≑ₐ f2
Whn TopR = Whn TopR
Ξ“, Ξ”: t_ctx
f1, f2: Ξ“ =[ val ]> Ξ”
H: f1 ≑ₐ f2
OneR = OneR
Ξ“: t_ctx
s: state Ξ“
H: forall (Ξ” : t_ctx) (f1 f2 : Ξ“ =[ val ]> Ξ”), f1 ≑ₐ f2 -> s β‚œβŠ› f1 = s β‚œβŠ› f2
Ξ”: t_ctx
f1, f2: Ξ“ =[ val ]> Ξ”
H0: f1 ≑ₐ f2
Whn (OneL (s_subst Ξ“ s Ξ” f1)) = Whn (OneL (s_subst Ξ“ s Ξ” f2))
Ξ“: t_ctx
s: state Ξ“
H: forall (Ξ” : t_ctx) (f1 f2 : Ξ“ =[ val ]> Ξ”), f1 ≑ₐ f2 -> s β‚œβŠ› f1 = s β‚œβŠ› f2
Ξ”: t_ctx
f1, f2: Ξ“ =[ val ]> Ξ”
H0: f1 ≑ₐ f2
Whn (BotR (s_subst Ξ“ s Ξ” f1)) = Whn (BotR (s_subst Ξ“ s Ξ” f2))
Ξ“, Ξ”: t_ctx
f1, f2: Ξ“ =[ val ]> Ξ”
H: f1 ≑ₐ f2
BotL = BotL
Ξ“: t_ctx
A, B: pre_ty pos
w1: whn Ξ“ `+ A
H1: forall (Ξ” : t_ctx) (f1 f2 : Ξ“ =[ val ]> Ξ”), f1 ≑ₐ f2 -> w1 `α΅₯βŠ› f1 = w1 `α΅₯βŠ› f2
w2: whn Ξ“ `+ B
H2: forall (Ξ” : t_ctx) (f1 f2 : Ξ“ =[ val ]> Ξ”), f1 ≑ₐ f2 -> w2 `α΅₯βŠ› f1 = w2 `α΅₯βŠ› f2
Ξ”: t_ctx
f1, f2: Ξ“ =[ val ]> Ξ”
H: f1 ≑ₐ f2
TenR (w1 `α΅₯βŠ› f1) (w2 `α΅₯βŠ› f1) = TenR (w1 `α΅₯βŠ› f2) (w2 `α΅₯βŠ› f2)
Ξ“: t_ctx
A, B: pre_ty pos
s: state (Ξ“ β–Άβ‚“ `+ A β–Άβ‚“ `+ B)
H: forall (Ξ” : t_ctx) (f1 f2 : (Ξ“ β–Άβ‚“ `+ A β–Άβ‚“ `+ B) =[ val ]> Ξ”), f1 ≑ₐ f2 -> s β‚œβŠ› f1 = s β‚œβŠ› f2
Ξ”: t_ctx
f1, f2: Ξ“ =[ val ]> Ξ”
H0: f1 ≑ₐ f2
Whn (TenL (s_subst (Ξ“ β–Άβ‚“ `+ A β–Άβ‚“ `+ B) s (Ξ” β–Άβ‚“ `+ A β–Άβ‚“ `+ B) (a_shift2 f1))) = Whn (TenL (s_subst (Ξ“ β–Άβ‚“ `+ A β–Άβ‚“ `+ B) s (Ξ” β–Άβ‚“ `+ A β–Άβ‚“ `+ B) (a_shift2 f2)))
Ξ“: t_ctx
A, B: pre_ty neg
s: state (Ξ“ β–Άβ‚“ `- A β–Άβ‚“ `- B)
H: forall (Ξ” : t_ctx) (f1 f2 : (Ξ“ β–Άβ‚“ `- A β–Άβ‚“ `- B) =[ val ]> Ξ”), f1 ≑ₐ f2 -> s β‚œβŠ› f1 = s β‚œβŠ› f2
Ξ”: t_ctx
f1, f2: Ξ“ =[ val ]> Ξ”
H0: f1 ≑ₐ f2
Whn (ParR (s_subst (Ξ“ β–Άβ‚“ `- A β–Άβ‚“ `- B) s (Ξ” β–Άβ‚“ `- A β–Άβ‚“ `- B) (a_shift2 f1))) = Whn (ParR (s_subst (Ξ“ β–Άβ‚“ `- A β–Άβ‚“ `- B) s (Ξ” β–Άβ‚“ `- A β–Άβ‚“ `- B) (a_shift2 f2)))
Ξ“: t_ctx
A, B: pre_ty neg
w1: whn Ξ“ `- A
H1: forall (Ξ” : t_ctx) (f1 f2 : Ξ“ =[ val ]> Ξ”), f1 ≑ₐ f2 -> w1 `α΅₯βŠ› f1 = w1 `α΅₯βŠ› f2
w2: whn Ξ“ `- B
H2: forall (Ξ” : t_ctx) (f1 f2 : Ξ“ =[ val ]> Ξ”), f1 ≑ₐ f2 -> w2 `α΅₯βŠ› f1 = w2 `α΅₯βŠ› f2
Ξ”: t_ctx
f1, f2: Ξ“ =[ val ]> Ξ”
H: f1 ≑ₐ f2
ParL (w1 `α΅₯βŠ› f1) (w2 `α΅₯βŠ› f1) = ParL (w1 `α΅₯βŠ› f2) (w2 `α΅₯βŠ› f2)
Ξ“: t_ctx
A, B: pre_ty pos
w: whn Ξ“ `+ A
H: forall (Ξ” : t_ctx) (f1 f2 : Ξ“ =[ val ]> Ξ”), f1 ≑ₐ f2 -> w `α΅₯βŠ› f1 = w `α΅₯βŠ› f2
Ξ”: t_ctx
f1, f2: Ξ“ =[ val ]> Ξ”
H0: f1 ≑ₐ f2
OrR1 (w `α΅₯βŠ› f1) = OrR1 (w `α΅₯βŠ› f2)
Ξ“: t_ctx
A, B: pre_ty pos
w: whn Ξ“ `+ B
H: forall (Ξ” : t_ctx) (f1 f2 : Ξ“ =[ val ]> Ξ”), f1 ≑ₐ f2 -> w `α΅₯βŠ› f1 = w `α΅₯βŠ› f2
Ξ”: t_ctx
f1, f2: Ξ“ =[ val ]> Ξ”
H0: f1 ≑ₐ f2
OrR2 (w `α΅₯βŠ› f1) = OrR2 (w `α΅₯βŠ› f2)
Ξ“: t_ctx
A, B: pre_ty pos
s1: state (Ξ“ β–Άβ‚“ `+ A)
H1: forall (Ξ” : t_ctx) (f1 f2 : (Ξ“ β–Άβ‚“ `+ A) =[ val ]> Ξ”), f1 ≑ₐ f2 -> s1 β‚œβŠ› f1 = s1 β‚œβŠ› f2
s2: state (Ξ“ β–Άβ‚“ `+ B)
H2: forall (Ξ” : t_ctx) (f1 f2 : (Ξ“ β–Άβ‚“ `+ B) =[ val ]> Ξ”), f1 ≑ₐ f2 -> s2 β‚œβŠ› f1 = s2 β‚œβŠ› f2
Ξ”: t_ctx
f1, f2: Ξ“ =[ val ]> Ξ”
H: f1 ≑ₐ f2
Whn (OrL (s_subst (Ξ“ β–Άβ‚“ `+ A) s1 (Ξ” β–Άβ‚“ `+ A) (a_shift1 f1)) (s_subst (Ξ“ β–Άβ‚“ `+ B) s2 (Ξ” β–Άβ‚“ `+ B) (a_shift1 f1))) = Whn (OrL (s_subst (Ξ“ β–Άβ‚“ `+ A) s1 (Ξ” β–Άβ‚“ `+ A) (a_shift1 f2)) (s_subst (Ξ“ β–Άβ‚“ `+ B) s2 (Ξ” β–Άβ‚“ `+ B) (a_shift1 f2)))
Ξ“: t_ctx
A, B: pre_ty neg
s1: state (Ξ“ β–Άβ‚“ `- A)
H1: forall (Ξ” : t_ctx) (f1 f2 : (Ξ“ β–Άβ‚“ `- A) =[ val ]> Ξ”), f1 ≑ₐ f2 -> s1 β‚œβŠ› f1 = s1 β‚œβŠ› f2
s2: state (Ξ“ β–Άβ‚“ `- B)
H2: forall (Ξ” : t_ctx) (f1 f2 : (Ξ“ β–Άβ‚“ `- B) =[ val ]> Ξ”), f1 ≑ₐ f2 -> s2 β‚œβŠ› f1 = s2 β‚œβŠ› f2
Ξ”: t_ctx
f1, f2: Ξ“ =[ val ]> Ξ”
H: f1 ≑ₐ f2
Whn (AndR (s_subst (Ξ“ β–Άβ‚“ `- A) s1 (Ξ” β–Άβ‚“ `- A) (a_shift1 f1)) (s_subst (Ξ“ β–Άβ‚“ `- B) s2 (Ξ” β–Άβ‚“ `- B) (a_shift1 f1))) = Whn (AndR (s_subst (Ξ“ β–Άβ‚“ `- A) s1 (Ξ” β–Άβ‚“ `- A) (a_shift1 f2)) (s_subst (Ξ“ β–Άβ‚“ `- B) s2 (Ξ” β–Άβ‚“ `- B) (a_shift1 f2)))
Ξ“: t_ctx
A, B: pre_ty neg
w: whn Ξ“ `- A
H: forall (Ξ” : t_ctx) (f1 f2 : Ξ“ =[ val ]> Ξ”), f1 ≑ₐ f2 -> w `α΅₯βŠ› f1 = w `α΅₯βŠ› f2
Ξ”: t_ctx
f1, f2: Ξ“ =[ val ]> Ξ”
H0: f1 ≑ₐ f2
AndL1 (w `α΅₯βŠ› f1) = AndL1 (w `α΅₯βŠ› f2)
Ξ“: t_ctx
A, B: pre_ty neg
w: whn Ξ“ `- B
H: forall (Ξ” : t_ctx) (f1 f2 : Ξ“ =[ val ]> Ξ”), f1 ≑ₐ f2 -> w `α΅₯βŠ› f1 = w `α΅₯βŠ› f2
Ξ”: t_ctx
f1, f2: Ξ“ =[ val ]> Ξ”
H0: f1 ≑ₐ f2
AndL2 (w `α΅₯βŠ› f1) = AndL2 (w `α΅₯βŠ› f2)
Ξ“: t_ctx
A: pre_ty neg
t: term Ξ“ `+ A
H: forall (Ξ” : t_ctx) (f1 f2 : Ξ“ =[ val ]> Ξ”), f1 ≑ₐ f2 -> t `β‚œβŠ› f1 = t `β‚œβŠ› f2
Ξ”: t_ctx
f1, f2: Ξ“ =[ val ]> Ξ”
H0: f1 ≑ₐ f2
ShiftPR (t `β‚œβŠ› f1) = ShiftPR (t `β‚œβŠ› f2)
Ξ“: t_ctx
A: pre_ty neg
s: state (Ξ“ β–Άβ‚“ `+ A)
H: forall (Ξ” : t_ctx) (f1 f2 : (Ξ“ β–Άβ‚“ `+ A) =[ val ]> Ξ”), f1 ≑ₐ f2 -> s β‚œβŠ› f1 = s β‚œβŠ› f2
Ξ”: t_ctx
f1, f2: Ξ“ =[ val ]> Ξ”
H0: f1 ≑ₐ f2
Whn (ShiftPL (s_subst (Ξ“ β–Άβ‚“ `+ A) s (Ξ” β–Άβ‚“ `+ A) (a_shift1 f1))) = Whn (ShiftPL (s_subst (Ξ“ β–Άβ‚“ `+ A) s (Ξ” β–Άβ‚“ `+ A) (a_shift1 f2)))
Ξ“: t_ctx
A: pre_ty pos
s: state (Ξ“ β–Άβ‚“ `- A)
H: forall (Ξ” : t_ctx) (f1 f2 : (Ξ“ β–Άβ‚“ `- A) =[ val ]> Ξ”), f1 ≑ₐ f2 -> s β‚œβŠ› f1 = s β‚œβŠ› f2
Ξ”: t_ctx
f1, f2: Ξ“ =[ val ]> Ξ”
H0: f1 ≑ₐ f2
Whn (ShiftNR (s_subst (Ξ“ β–Άβ‚“ `- A) s (Ξ” β–Άβ‚“ `- A) (a_shift1 f1))) = Whn (ShiftNR (s_subst (Ξ“ β–Άβ‚“ `- A) s (Ξ” β–Άβ‚“ `- A) (a_shift1 f2)))
Ξ“: t_ctx
A: pre_ty pos
t: term Ξ“ `- A
H: forall (Ξ” : t_ctx) (f1 f2 : Ξ“ =[ val ]> Ξ”), f1 ≑ₐ f2 -> t `β‚œβŠ› f1 = t `β‚œβŠ› f2
Ξ”: t_ctx
f1, f2: Ξ“ =[ val ]> Ξ”
H0: f1 ≑ₐ f2
ShiftNL (t `β‚œβŠ› f1) = ShiftNL (t `β‚œβŠ› f2)
Ξ“: t_ctx
A: pre_ty neg
w: whn Ξ“ `- A
H: forall (Ξ” : t_ctx) (f1 f2 : Ξ“ =[ val ]> Ξ”), f1 ≑ₐ f2 -> w `α΅₯βŠ› f1 = w `α΅₯βŠ› f2
Ξ”: t_ctx
f1, f2: Ξ“ =[ val ]> Ξ”
H0: f1 ≑ₐ f2
NegPR (w `α΅₯βŠ› f1) = NegPR (w `α΅₯βŠ› f2)
Ξ“: t_ctx
A: pre_ty neg
s: state (Ξ“ β–Άβ‚“ `- A)
H: forall (Ξ” : t_ctx) (f1 f2 : (Ξ“ β–Άβ‚“ `- A) =[ val ]> Ξ”), f1 ≑ₐ f2 -> s β‚œβŠ› f1 = s β‚œβŠ› f2
Ξ”: t_ctx
f1, f2: Ξ“ =[ val ]> Ξ”
H0: f1 ≑ₐ f2
Whn (NegPL (s_subst (Ξ“ β–Άβ‚“ `- A) s (Ξ” β–Άβ‚“ `- A) (a_shift1 f1))) = Whn (NegPL (s_subst (Ξ“ β–Άβ‚“ `- A) s (Ξ” β–Άβ‚“ `- A) (a_shift1 f2)))
Ξ“: t_ctx
A: pre_ty pos
s: state (Ξ“ β–Άβ‚“ `+ A)
H: forall (Ξ” : t_ctx) (f1 f2 : (Ξ“ β–Άβ‚“ `+ A) =[ val ]> Ξ”), f1 ≑ₐ f2 -> s β‚œβŠ› f1 = s β‚œβŠ› f2
Ξ”: t_ctx
f1, f2: Ξ“ =[ val ]> Ξ”
H0: f1 ≑ₐ f2
Whn (NegNR (s_subst (Ξ“ β–Άβ‚“ `+ A) s (Ξ” β–Άβ‚“ `+ A) (a_shift1 f1))) = Whn (NegNR (s_subst (Ξ“ β–Άβ‚“ `+ A) s (Ξ” β–Άβ‚“ `+ A) (a_shift1 f2)))
Ξ“: t_ctx
A: pre_ty pos
w: whn Ξ“ `+ A
H: forall (Ξ” : t_ctx) (f1 f2 : Ξ“ =[ val ]> Ξ”), f1 ≑ₐ f2 -> w `α΅₯βŠ› f1 = w `α΅₯βŠ› f2
Ξ”: t_ctx
f1, f2: Ξ“ =[ val ]> Ξ”
H0: f1 ≑ₐ f2
NegNL (w `α΅₯βŠ› f1) = NegNL (w `α΅₯βŠ› f2)
Ξ“: t_ctx
p: pol
A: pre_ty p
t1: term Ξ“ `+ A
H1: forall (Ξ” : t_ctx) (f1 f2 : Ξ“ =[ val ]> Ξ”), f1 ≑ₐ f2 -> t1 `β‚œβŠ› f1 = t1 `β‚œβŠ› f2
t2: term Ξ“ `- A
H2: forall (Ξ” : t_ctx) (f1 f2 : Ξ“ =[ val ]> Ξ”), f1 ≑ₐ f2 -> t2 `β‚œβŠ› f1 = t2 `β‚œβŠ› f2
Ξ”: t_ctx
f1, f2: Ξ“ =[ val ]> Ξ”
H: f1 ≑ₐ f2
Cut p (t1 `β‚œβŠ› f1) (t2 `β‚œβŠ› f1) = Cut p (t1 `β‚œβŠ› f2) (t2 `β‚œβŠ› f2)
Ξ“: t_ctx
A: ty
s: state (Ξ“ β–Άβ‚“ A †)
H: forall (Ξ” : t_ctx) (f1 f2 : (Ξ“ β–Άβ‚“ A †) =[ val ]> Ξ”), f1 ≑ₐ f2 -> s β‚œβŠ› f1 = s β‚œβŠ› f2
Ξ”: t_ctx
f1, f2: Ξ“ =[ val ]> Ξ”
H0: f1 ≑ₐ f2

s_subst (Ξ“ β–Άβ‚“ A †) s (Ξ” β–Άβ‚“ A †) (a_shift1 f1) = s_subst (Ξ“ β–Άβ‚“ A †) s (Ξ” β–Άβ‚“ A †) (a_shift1 f2)
Ξ“: t_ctx
A: pre_ty pos
t: term (Ξ“ β–Άβ‚“ `- A) `- A
H: forall (Ξ” : t_ctx) (f1 f2 : (Ξ“ β–Άβ‚“ `- A) =[ val ]> Ξ”), f1 ≑ₐ f2 -> t `β‚œβŠ› f1 = t `β‚œβŠ› f2
Ξ”: t_ctx
f1, f2: Ξ“ =[ val ]> Ξ”
H0: f1 ≑ₐ f2
t `β‚œβŠ› a_shift1 f1 = t `β‚œβŠ› a_shift1 f2
Ξ“: t_ctx
A: pre_ty neg
t: term (Ξ“ β–Άβ‚“ `+ A) `+ A
H: forall (Ξ” : t_ctx) (f1 f2 : (Ξ“ β–Άβ‚“ `+ A) =[ val ]> Ξ”), f1 ≑ₐ f2 -> t `β‚œβŠ› f1 = t `β‚œβŠ› f2
Ξ”: t_ctx
f1, f2: Ξ“ =[ val ]> Ξ”
H0: f1 ≑ₐ f2
t `β‚œβŠ› a_shift1 f1 = t `β‚œβŠ› a_shift1 f2
Ξ“: t_ctx
A: ty
w: whn Ξ“ A
H: forall (Ξ” : t_ctx) (f1 f2 : Ξ“ =[ val ]> Ξ”), f1 ≑ₐ f2 -> w `α΅₯βŠ› f1 = w `α΅₯βŠ› f2
Ξ”: t_ctx
f1, f2: Ξ“ =[ val ]> Ξ”
H0: f1 ≑ₐ f2
w `α΅₯βŠ› f1 = w `α΅₯βŠ› f2
Ξ“: t_ctx
s: state Ξ“
H: forall (Ξ” : t_ctx) (f1 f2 : Ξ“ =[ val ]> Ξ”), f1 ≑ₐ f2 -> s β‚œβŠ› f1 = s β‚œβŠ› f2
Ξ”: t_ctx
f1, f2: Ξ“ =[ val ]> Ξ”
H0: f1 ≑ₐ f2
s_subst Ξ“ s Ξ” f1 = s_subst Ξ“ s Ξ” f2
Ξ“: t_ctx
s: state Ξ“
H: forall (Ξ” : t_ctx) (f1 f2 : Ξ“ =[ val ]> Ξ”), f1 ≑ₐ f2 -> s β‚œβŠ› f1 = s β‚œβŠ› f2
Ξ”: t_ctx
f1, f2: Ξ“ =[ val ]> Ξ”
H0: f1 ≑ₐ f2
s_subst Ξ“ s Ξ” f1 = s_subst Ξ“ s Ξ” f2
Ξ“: t_ctx
A, B: pre_ty pos
w1: whn Ξ“ `+ A
H1: forall (Ξ” : t_ctx) (f1 f2 : Ξ“ =[ val ]> Ξ”), f1 ≑ₐ f2 -> w1 `α΅₯βŠ› f1 = w1 `α΅₯βŠ› f2
w2: whn Ξ“ `+ B
H2: forall (Ξ” : t_ctx) (f1 f2 : Ξ“ =[ val ]> Ξ”), f1 ≑ₐ f2 -> w2 `α΅₯βŠ› f1 = w2 `α΅₯βŠ› f2
Ξ”: t_ctx
f1, f2: Ξ“ =[ val ]> Ξ”
H: f1 ≑ₐ f2
w1 `α΅₯βŠ› f1 = w1 `α΅₯βŠ› f2
Ξ“: t_ctx
A, B: pre_ty pos
w1: whn Ξ“ `+ A
H1: forall (Ξ” : t_ctx) (f1 f2 : Ξ“ =[ val ]> Ξ”), f1 ≑ₐ f2 -> w1 `α΅₯βŠ› f1 = w1 `α΅₯βŠ› f2
w2: whn Ξ“ `+ B
H2: forall (Ξ” : t_ctx) (f1 f2 : Ξ“ =[ val ]> Ξ”), f1 ≑ₐ f2 -> w2 `α΅₯βŠ› f1 = w2 `α΅₯βŠ› f2
Ξ”: t_ctx
f1, f2: Ξ“ =[ val ]> Ξ”
H: f1 ≑ₐ f2
w2 `α΅₯βŠ› f1 = w2 `α΅₯βŠ› f2
Ξ“: t_ctx
A, B: pre_ty pos
s: state (Ξ“ β–Άβ‚“ `+ A β–Άβ‚“ `+ B)
H: forall (Ξ” : t_ctx) (f1 f2 : (Ξ“ β–Άβ‚“ `+ A β–Άβ‚“ `+ B) =[ val ]> Ξ”), f1 ≑ₐ f2 -> s β‚œβŠ› f1 = s β‚œβŠ› f2
Ξ”: t_ctx
f1, f2: Ξ“ =[ val ]> Ξ”
H0: f1 ≑ₐ f2
s_subst (Ξ“ β–Άβ‚“ `+ A β–Άβ‚“ `+ B) s (Ξ” β–Άβ‚“ `+ A β–Άβ‚“ `+ B) (a_shift2 f1) = s_subst (Ξ“ β–Άβ‚“ `+ A β–Άβ‚“ `+ B) s (Ξ” β–Άβ‚“ `+ A β–Άβ‚“ `+ B) (a_shift2 f2)
Ξ“: t_ctx
A, B: pre_ty neg
s: state (Ξ“ β–Άβ‚“ `- A β–Άβ‚“ `- B)
H: forall (Ξ” : t_ctx) (f1 f2 : (Ξ“ β–Άβ‚“ `- A β–Άβ‚“ `- B) =[ val ]> Ξ”), f1 ≑ₐ f2 -> s β‚œβŠ› f1 = s β‚œβŠ› f2
Ξ”: t_ctx
f1, f2: Ξ“ =[ val ]> Ξ”
H0: f1 ≑ₐ f2
s_subst (Ξ“ β–Άβ‚“ `- A β–Άβ‚“ `- B) s (Ξ” β–Άβ‚“ `- A β–Άβ‚“ `- B) (a_shift2 f1) = s_subst (Ξ“ β–Άβ‚“ `- A β–Άβ‚“ `- B) s (Ξ” β–Άβ‚“ `- A β–Άβ‚“ `- B) (a_shift2 f2)
Ξ“: t_ctx
A, B: pre_ty neg
w1: whn Ξ“ `- A
H1: forall (Ξ” : t_ctx) (f1 f2 : Ξ“ =[ val ]> Ξ”), f1 ≑ₐ f2 -> w1 `α΅₯βŠ› f1 = w1 `α΅₯βŠ› f2
w2: whn Ξ“ `- B
H2: forall (Ξ” : t_ctx) (f1 f2 : Ξ“ =[ val ]> Ξ”), f1 ≑ₐ f2 -> w2 `α΅₯βŠ› f1 = w2 `α΅₯βŠ› f2
Ξ”: t_ctx
f1, f2: Ξ“ =[ val ]> Ξ”
H: f1 ≑ₐ f2
w1 `α΅₯βŠ› f1 = w1 `α΅₯βŠ› f2
Ξ“: t_ctx
A, B: pre_ty neg
w1: whn Ξ“ `- A
H1: forall (Ξ” : t_ctx) (f1 f2 : Ξ“ =[ val ]> Ξ”), f1 ≑ₐ f2 -> w1 `α΅₯βŠ› f1 = w1 `α΅₯βŠ› f2
w2: whn Ξ“ `- B
H2: forall (Ξ” : t_ctx) (f1 f2 : Ξ“ =[ val ]> Ξ”), f1 ≑ₐ f2 -> w2 `α΅₯βŠ› f1 = w2 `α΅₯βŠ› f2
Ξ”: t_ctx
f1, f2: Ξ“ =[ val ]> Ξ”
H: f1 ≑ₐ f2
w2 `α΅₯βŠ› f1 = w2 `α΅₯βŠ› f2
Ξ“: t_ctx
A, B: pre_ty pos
w: whn Ξ“ `+ A
H: forall (Ξ” : t_ctx) (f1 f2 : Ξ“ =[ val ]> Ξ”), f1 ≑ₐ f2 -> w `α΅₯βŠ› f1 = w `α΅₯βŠ› f2
Ξ”: t_ctx
f1, f2: Ξ“ =[ val ]> Ξ”
H0: f1 ≑ₐ f2
w `α΅₯βŠ› f1 = w `α΅₯βŠ› f2
Ξ“: t_ctx
A, B: pre_ty pos
w: whn Ξ“ `+ B
H: forall (Ξ” : t_ctx) (f1 f2 : Ξ“ =[ val ]> Ξ”), f1 ≑ₐ f2 -> w `α΅₯βŠ› f1 = w `α΅₯βŠ› f2
Ξ”: t_ctx
f1, f2: Ξ“ =[ val ]> Ξ”
H0: f1 ≑ₐ f2
w `α΅₯βŠ› f1 = w `α΅₯βŠ› f2
Ξ“: t_ctx
A, B: pre_ty pos
s1: state (Ξ“ β–Άβ‚“ `+ A)
H1: forall (Ξ” : t_ctx) (f1 f2 : (Ξ“ β–Άβ‚“ `+ A) =[ val ]> Ξ”), f1 ≑ₐ f2 -> s1 β‚œβŠ› f1 = s1 β‚œβŠ› f2
s2: state (Ξ“ β–Άβ‚“ `+ B)
H2: forall (Ξ” : t_ctx) (f1 f2 : (Ξ“ β–Άβ‚“ `+ B) =[ val ]> Ξ”), f1 ≑ₐ f2 -> s2 β‚œβŠ› f1 = s2 β‚œβŠ› f2
Ξ”: t_ctx
f1, f2: Ξ“ =[ val ]> Ξ”
H: f1 ≑ₐ f2
s_subst (Ξ“ β–Άβ‚“ `+ A) s1 (Ξ” β–Άβ‚“ `+ A) (a_shift1 f1) = s_subst (Ξ“ β–Άβ‚“ `+ A) s1 (Ξ” β–Άβ‚“ `+ A) (a_shift1 f2)
Ξ“: t_ctx
A, B: pre_ty pos
s1: state (Ξ“ β–Άβ‚“ `+ A)
H1: forall (Ξ” : t_ctx) (f1 f2 : (Ξ“ β–Άβ‚“ `+ A) =[ val ]> Ξ”), f1 ≑ₐ f2 -> s1 β‚œβŠ› f1 = s1 β‚œβŠ› f2
s2: state (Ξ“ β–Άβ‚“ `+ B)
H2: forall (Ξ” : t_ctx) (f1 f2 : (Ξ“ β–Άβ‚“ `+ B) =[ val ]> Ξ”), f1 ≑ₐ f2 -> s2 β‚œβŠ› f1 = s2 β‚œβŠ› f2
Ξ”: t_ctx
f1, f2: Ξ“ =[ val ]> Ξ”
H: f1 ≑ₐ f2
s_subst (Ξ“ β–Άβ‚“ `+ B) s2 (Ξ” β–Άβ‚“ `+ B) (a_shift1 f1) = s_subst (Ξ“ β–Άβ‚“ `+ B) s2 (Ξ” β–Άβ‚“ `+ B) (a_shift1 f2)
Ξ“: t_ctx
A, B: pre_ty neg
s1: state (Ξ“ β–Άβ‚“ `- A)
H1: forall (Ξ” : t_ctx) (f1 f2 : (Ξ“ β–Άβ‚“ `- A) =[ val ]> Ξ”), f1 ≑ₐ f2 -> s1 β‚œβŠ› f1 = s1 β‚œβŠ› f2
s2: state (Ξ“ β–Άβ‚“ `- B)
H2: forall (Ξ” : t_ctx) (f1 f2 : (Ξ“ β–Άβ‚“ `- B) =[ val ]> Ξ”), f1 ≑ₐ f2 -> s2 β‚œβŠ› f1 = s2 β‚œβŠ› f2
Ξ”: t_ctx
f1, f2: Ξ“ =[ val ]> Ξ”
H: f1 ≑ₐ f2
s_subst (Ξ“ β–Άβ‚“ `- A) s1 (Ξ” β–Άβ‚“ `- A) (a_shift1 f1) = s_subst (Ξ“ β–Άβ‚“ `- A) s1 (Ξ” β–Άβ‚“ `- A) (a_shift1 f2)
Ξ“: t_ctx
A, B: pre_ty neg
s1: state (Ξ“ β–Άβ‚“ `- A)
H1: forall (Ξ” : t_ctx) (f1 f2 : (Ξ“ β–Άβ‚“ `- A) =[ val ]> Ξ”), f1 ≑ₐ f2 -> s1 β‚œβŠ› f1 = s1 β‚œβŠ› f2
s2: state (Ξ“ β–Άβ‚“ `- B)
H2: forall (Ξ” : t_ctx) (f1 f2 : (Ξ“ β–Άβ‚“ `- B) =[ val ]> Ξ”), f1 ≑ₐ f2 -> s2 β‚œβŠ› f1 = s2 β‚œβŠ› f2
Ξ”: t_ctx
f1, f2: Ξ“ =[ val ]> Ξ”
H: f1 ≑ₐ f2
s_subst (Ξ“ β–Άβ‚“ `- B) s2 (Ξ” β–Άβ‚“ `- B) (a_shift1 f1) = s_subst (Ξ“ β–Άβ‚“ `- B) s2 (Ξ” β–Άβ‚“ `- B) (a_shift1 f2)
Ξ“: t_ctx
A, B: pre_ty neg
w: whn Ξ“ `- A
H: forall (Ξ” : t_ctx) (f1 f2 : Ξ“ =[ val ]> Ξ”), f1 ≑ₐ f2 -> w `α΅₯βŠ› f1 = w `α΅₯βŠ› f2
Ξ”: t_ctx
f1, f2: Ξ“ =[ val ]> Ξ”
H0: f1 ≑ₐ f2
w `α΅₯βŠ› f1 = w `α΅₯βŠ› f2
Ξ“: t_ctx
A, B: pre_ty neg
w: whn Ξ“ `- B
H: forall (Ξ” : t_ctx) (f1 f2 : Ξ“ =[ val ]> Ξ”), f1 ≑ₐ f2 -> w `α΅₯βŠ› f1 = w `α΅₯βŠ› f2
Ξ”: t_ctx
f1, f2: Ξ“ =[ val ]> Ξ”
H0: f1 ≑ₐ f2
w `α΅₯βŠ› f1 = w `α΅₯βŠ› f2
Ξ“: t_ctx
A: pre_ty neg
t: term Ξ“ `+ A
H: forall (Ξ” : t_ctx) (f1 f2 : Ξ“ =[ val ]> Ξ”), f1 ≑ₐ f2 -> t `β‚œβŠ› f1 = t `β‚œβŠ› f2
Ξ”: t_ctx
f1, f2: Ξ“ =[ val ]> Ξ”
H0: f1 ≑ₐ f2
t `β‚œβŠ› f1 = t `β‚œβŠ› f2
Ξ“: t_ctx
A: pre_ty neg
s: state (Ξ“ β–Άβ‚“ `+ A)
H: forall (Ξ” : t_ctx) (f1 f2 : (Ξ“ β–Άβ‚“ `+ A) =[ val ]> Ξ”), f1 ≑ₐ f2 -> s β‚œβŠ› f1 = s β‚œβŠ› f2
Ξ”: t_ctx
f1, f2: Ξ“ =[ val ]> Ξ”
H0: f1 ≑ₐ f2
s_subst (Ξ“ β–Άβ‚“ `+ A) s (Ξ” β–Άβ‚“ `+ A) (a_shift1 f1) = s_subst (Ξ“ β–Άβ‚“ `+ A) s (Ξ” β–Άβ‚“ `+ A) (a_shift1 f2)
Ξ“: t_ctx
A: pre_ty pos
s: state (Ξ“ β–Άβ‚“ `- A)
H: forall (Ξ” : t_ctx) (f1 f2 : (Ξ“ β–Άβ‚“ `- A) =[ val ]> Ξ”), f1 ≑ₐ f2 -> s β‚œβŠ› f1 = s β‚œβŠ› f2
Ξ”: t_ctx
f1, f2: Ξ“ =[ val ]> Ξ”
H0: f1 ≑ₐ f2
s_subst (Ξ“ β–Άβ‚“ `- A) s (Ξ” β–Άβ‚“ `- A) (a_shift1 f1) = s_subst (Ξ“ β–Άβ‚“ `- A) s (Ξ” β–Άβ‚“ `- A) (a_shift1 f2)
Ξ“: t_ctx
A: pre_ty pos
t: term Ξ“ `- A
H: forall (Ξ” : t_ctx) (f1 f2 : Ξ“ =[ val ]> Ξ”), f1 ≑ₐ f2 -> t `β‚œβŠ› f1 = t `β‚œβŠ› f2
Ξ”: t_ctx
f1, f2: Ξ“ =[ val ]> Ξ”
H0: f1 ≑ₐ f2
t `β‚œβŠ› f1 = t `β‚œβŠ› f2
Ξ“: t_ctx
A: pre_ty neg
w: whn Ξ“ `- A
H: forall (Ξ” : t_ctx) (f1 f2 : Ξ“ =[ val ]> Ξ”), f1 ≑ₐ f2 -> w `α΅₯βŠ› f1 = w `α΅₯βŠ› f2
Ξ”: t_ctx
f1, f2: Ξ“ =[ val ]> Ξ”
H0: f1 ≑ₐ f2
w `α΅₯βŠ› f1 = w `α΅₯βŠ› f2
Ξ“: t_ctx
A: pre_ty neg
s: state (Ξ“ β–Άβ‚“ `- A)
H: forall (Ξ” : t_ctx) (f1 f2 : (Ξ“ β–Άβ‚“ `- A) =[ val ]> Ξ”), f1 ≑ₐ f2 -> s β‚œβŠ› f1 = s β‚œβŠ› f2
Ξ”: t_ctx
f1, f2: Ξ“ =[ val ]> Ξ”
H0: f1 ≑ₐ f2
s_subst (Ξ“ β–Άβ‚“ `- A) s (Ξ” β–Άβ‚“ `- A) (a_shift1 f1) = s_subst (Ξ“ β–Άβ‚“ `- A) s (Ξ” β–Άβ‚“ `- A) (a_shift1 f2)
Ξ“: t_ctx
A: pre_ty pos
s: state (Ξ“ β–Άβ‚“ `+ A)
H: forall (Ξ” : t_ctx) (f1 f2 : (Ξ“ β–Άβ‚“ `+ A) =[ val ]> Ξ”), f1 ≑ₐ f2 -> s β‚œβŠ› f1 = s β‚œβŠ› f2
Ξ”: t_ctx
f1, f2: Ξ“ =[ val ]> Ξ”
H0: f1 ≑ₐ f2
s_subst (Ξ“ β–Άβ‚“ `+ A) s (Ξ” β–Άβ‚“ `+ A) (a_shift1 f1) = s_subst (Ξ“ β–Άβ‚“ `+ A) s (Ξ” β–Άβ‚“ `+ A) (a_shift1 f2)
Ξ“: t_ctx
A: pre_ty pos
w: whn Ξ“ `+ A
H: forall (Ξ” : t_ctx) (f1 f2 : Ξ“ =[ val ]> Ξ”), f1 ≑ₐ f2 -> w `α΅₯βŠ› f1 = w `α΅₯βŠ› f2
Ξ”: t_ctx
f1, f2: Ξ“ =[ val ]> Ξ”
H0: f1 ≑ₐ f2
w `α΅₯βŠ› f1 = w `α΅₯βŠ› f2
Ξ“: t_ctx
p: pol
A: pre_ty p
t1: term Ξ“ `+ A
H1: forall (Ξ” : t_ctx) (f1 f2 : Ξ“ =[ val ]> Ξ”), f1 ≑ₐ f2 -> t1 `β‚œβŠ› f1 = t1 `β‚œβŠ› f2
t2: term Ξ“ `- A
H2: forall (Ξ” : t_ctx) (f1 f2 : Ξ“ =[ val ]> Ξ”), f1 ≑ₐ f2 -> t2 `β‚œβŠ› f1 = t2 `β‚œβŠ› f2
Ξ”: t_ctx
f1, f2: Ξ“ =[ val ]> Ξ”
H: f1 ≑ₐ f2
t1 `β‚œβŠ› f1 = t1 `β‚œβŠ› f2
Ξ“: t_ctx
p: pol
A: pre_ty p
t1: term Ξ“ `+ A
H1: forall (Ξ” : t_ctx) (f1 f2 : Ξ“ =[ val ]> Ξ”), f1 ≑ₐ f2 -> t1 `β‚œβŠ› f1 = t1 `β‚œβŠ› f2
t2: term Ξ“ `- A
H2: forall (Ξ” : t_ctx) (f1 f2 : Ξ“ =[ val ]> Ξ”), f1 ≑ₐ f2 -> t2 `β‚œβŠ› f1 = t2 `β‚œβŠ› f2
Ξ”: t_ctx
f1, f2: Ξ“ =[ val ]> Ξ”
H: f1 ≑ₐ f2
t2 `β‚œβŠ› f1 = t2 `β‚œβŠ› f2
Ξ“: t_ctx
A: ty
s: state (Ξ“ β–Άβ‚“ A †)
H: forall (Ξ” : t_ctx) (f1 f2 : (Ξ“ β–Άβ‚“ A †) =[ val ]> Ξ”), f1 ≑ₐ f2 -> s β‚œβŠ› f1 = s β‚œβŠ› f2
Ξ”: t_ctx
f1, f2: Ξ“ =[ val ]> Ξ”
H0: f1 ≑ₐ f2

a_shift1 f1 ≑ₐ a_shift1 f2
Ξ“: t_ctx
A: pre_ty pos
t: term (Ξ“ β–Άβ‚“ `- A) `- A
H: forall (Ξ” : t_ctx) (f1 f2 : (Ξ“ β–Άβ‚“ `- A) =[ val ]> Ξ”), f1 ≑ₐ f2 -> t `β‚œβŠ› f1 = t `β‚œβŠ› f2
Ξ”: t_ctx
f1, f2: Ξ“ =[ val ]> Ξ”
H0: f1 ≑ₐ f2
a_shift1 f1 ≑ₐ a_shift1 f2
Ξ“: t_ctx
A: pre_ty neg
t: term (Ξ“ β–Άβ‚“ `+ A) `+ A
H: forall (Ξ” : t_ctx) (f1 f2 : (Ξ“ β–Άβ‚“ `+ A) =[ val ]> Ξ”), f1 ≑ₐ f2 -> t `β‚œβŠ› f1 = t `β‚œβŠ› f2
Ξ”: t_ctx
f1, f2: Ξ“ =[ val ]> Ξ”
H0: f1 ≑ₐ f2
a_shift1 f1 ≑ₐ a_shift1 f2
Ξ“: t_ctx
A, B: pre_ty pos
s: state (Ξ“ β–Άβ‚“ `+ A β–Άβ‚“ `+ B)
H: forall (Ξ” : t_ctx) (f1 f2 : (Ξ“ β–Άβ‚“ `+ A β–Άβ‚“ `+ B) =[ val ]> Ξ”), f1 ≑ₐ f2 -> s β‚œβŠ› f1 = s β‚œβŠ› f2
Ξ”: t_ctx
f1, f2: Ξ“ =[ val ]> Ξ”
H0: f1 ≑ₐ f2
a_shift2 f1 ≑ₐ a_shift2 f2
Ξ“: t_ctx
A, B: pre_ty neg
s: state (Ξ“ β–Άβ‚“ `- A β–Άβ‚“ `- B)
H: forall (Ξ” : t_ctx) (f1 f2 : (Ξ“ β–Άβ‚“ `- A β–Άβ‚“ `- B) =[ val ]> Ξ”), f1 ≑ₐ f2 -> s β‚œβŠ› f1 = s β‚œβŠ› f2
Ξ”: t_ctx
f1, f2: Ξ“ =[ val ]> Ξ”
H0: f1 ≑ₐ f2
a_shift2 f1 ≑ₐ a_shift2 f2
Ξ“: t_ctx
A, B: pre_ty pos
s1: state (Ξ“ β–Άβ‚“ `+ A)
H1: forall (Ξ” : t_ctx) (f1 f2 : (Ξ“ β–Άβ‚“ `+ A) =[ val ]> Ξ”), f1 ≑ₐ f2 -> s1 β‚œβŠ› f1 = s1 β‚œβŠ› f2
s2: state (Ξ“ β–Άβ‚“ `+ B)
H2: forall (Ξ” : t_ctx) (f1 f2 : (Ξ“ β–Άβ‚“ `+ B) =[ val ]> Ξ”), f1 ≑ₐ f2 -> s2 β‚œβŠ› f1 = s2 β‚œβŠ› f2
Ξ”: t_ctx
f1, f2: Ξ“ =[ val ]> Ξ”
H: f1 ≑ₐ f2
a_shift1 f1 ≑ₐ a_shift1 f2
Ξ“: t_ctx
A, B: pre_ty pos
s1: state (Ξ“ β–Άβ‚“ `+ A)
H1: forall (Ξ” : t_ctx) (f1 f2 : (Ξ“ β–Άβ‚“ `+ A) =[ val ]> Ξ”), f1 ≑ₐ f2 -> s1 β‚œβŠ› f1 = s1 β‚œβŠ› f2
s2: state (Ξ“ β–Άβ‚“ `+ B)
H2: forall (Ξ” : t_ctx) (f1 f2 : (Ξ“ β–Άβ‚“ `+ B) =[ val ]> Ξ”), f1 ≑ₐ f2 -> s2 β‚œβŠ› f1 = s2 β‚œβŠ› f2
Ξ”: t_ctx
f1, f2: Ξ“ =[ val ]> Ξ”
H: f1 ≑ₐ f2
a_shift1 f1 ≑ₐ a_shift1 f2
Ξ“: t_ctx
A, B: pre_ty neg
s1: state (Ξ“ β–Άβ‚“ `- A)
H1: forall (Ξ” : t_ctx) (f1 f2 : (Ξ“ β–Άβ‚“ `- A) =[ val ]> Ξ”), f1 ≑ₐ f2 -> s1 β‚œβŠ› f1 = s1 β‚œβŠ› f2
s2: state (Ξ“ β–Άβ‚“ `- B)
H2: forall (Ξ” : t_ctx) (f1 f2 : (Ξ“ β–Άβ‚“ `- B) =[ val ]> Ξ”), f1 ≑ₐ f2 -> s2 β‚œβŠ› f1 = s2 β‚œβŠ› f2
Ξ”: t_ctx
f1, f2: Ξ“ =[ val ]> Ξ”
H: f1 ≑ₐ f2
a_shift1 f1 ≑ₐ a_shift1 f2
Ξ“: t_ctx
A, B: pre_ty neg
s1: state (Ξ“ β–Άβ‚“ `- A)
H1: forall (Ξ” : t_ctx) (f1 f2 : (Ξ“ β–Άβ‚“ `- A) =[ val ]> Ξ”), f1 ≑ₐ f2 -> s1 β‚œβŠ› f1 = s1 β‚œβŠ› f2
s2: state (Ξ“ β–Άβ‚“ `- B)
H2: forall (Ξ” : t_ctx) (f1 f2 : (Ξ“ β–Άβ‚“ `- B) =[ val ]> Ξ”), f1 ≑ₐ f2 -> s2 β‚œβŠ› f1 = s2 β‚œβŠ› f2
Ξ”: t_ctx
f1, f2: Ξ“ =[ val ]> Ξ”
H: f1 ≑ₐ f2
a_shift1 f1 ≑ₐ a_shift1 f2
Ξ“: t_ctx
A: pre_ty neg
s: state (Ξ“ β–Άβ‚“ `+ A)
H: forall (Ξ” : t_ctx) (f1 f2 : (Ξ“ β–Άβ‚“ `+ A) =[ val ]> Ξ”), f1 ≑ₐ f2 -> s β‚œβŠ› f1 = s β‚œβŠ› f2
Ξ”: t_ctx
f1, f2: Ξ“ =[ val ]> Ξ”
H0: f1 ≑ₐ f2
a_shift1 f1 ≑ₐ a_shift1 f2
Ξ“: t_ctx
A: pre_ty pos
s: state (Ξ“ β–Άβ‚“ `- A)
H: forall (Ξ” : t_ctx) (f1 f2 : (Ξ“ β–Άβ‚“ `- A) =[ val ]> Ξ”), f1 ≑ₐ f2 -> s β‚œβŠ› f1 = s β‚œβŠ› f2
Ξ”: t_ctx
f1, f2: Ξ“ =[ val ]> Ξ”
H0: f1 ≑ₐ f2
a_shift1 f1 ≑ₐ a_shift1 f2
Ξ“: t_ctx
A: pre_ty neg
s: state (Ξ“ β–Άβ‚“ `- A)
H: forall (Ξ” : t_ctx) (f1 f2 : (Ξ“ β–Άβ‚“ `- A) =[ val ]> Ξ”), f1 ≑ₐ f2 -> s β‚œβŠ› f1 = s β‚œβŠ› f2
Ξ”: t_ctx
f1, f2: Ξ“ =[ val ]> Ξ”
H0: f1 ≑ₐ f2
a_shift1 f1 ≑ₐ a_shift1 f2
Ξ“: t_ctx
A: pre_ty pos
s: state (Ξ“ β–Άβ‚“ `+ A)
H: forall (Ξ” : t_ctx) (f1 f2 : (Ξ“ β–Άβ‚“ `+ A) =[ val ]> Ξ”), f1 ≑ₐ f2 -> s β‚œβŠ› f1 = s β‚œβŠ› f2
Ξ”: t_ctx
f1, f2: Ξ“ =[ val ]> Ξ”
H0: f1 ≑ₐ f2
a_shift1 f1 ≑ₐ a_shift1 f2
all: first [ apply a_shift1_eq | apply a_shift2_eq ]; auto. Qed.
Ξ“: t_ctx
a: ty
t: term Ξ“ a
Ξ”: t_ctx

Proper (asgn_eq Ξ“ Ξ” ==> eq) (t_subst Ξ“ a t Ξ”)
intros f1 f2 H1; now apply (term_ind_mut _ _ _ sub_proper_prf). Qed.
Ξ“: t_ctx
a: ty
v: whn Ξ“ a
Ξ”: t_ctx

Proper (asgn_eq Ξ“ Ξ” ==> eq) (w_subst Ξ“ a v Ξ”)
intros f1 f2 H1; now apply (whn_ind_mut _ _ _ sub_proper_prf). Qed.
Ξ“: t_ctx
s: state Ξ“
Ξ”: t_ctx

Proper (asgn_eq Ξ“ Ξ” ==> eq) (s_subst Ξ“ s Ξ”)
intros f1 f2 H1; now apply (state_ind_mut _ _ _ sub_proper_prf). Qed.
Ξ“: t_ctx
a: ty
v: val Ξ“ a
Ξ”: t_ctx

Proper (asgn_eq Ξ“ Ξ” ==> eq) (v_subst Ξ“ a v Ξ”)
Ξ“: t_ctx
p: pre_ty pos
v: val Ξ“ `+ p
Ξ”: t_ctx

Proper (asgn_eq Ξ“ Ξ” ==> eq) (v_subst Ξ“ `+ p v Ξ”)
Ξ“: t_ctx
p: pre_ty neg
v: val Ξ“ `+ p
Ξ”: t_ctx
Proper (asgn_eq Ξ“ Ξ” ==> eq) (v_subst Ξ“ `+ p v Ξ”)
Ξ“: t_ctx
p: pre_ty pos
v: val Ξ“ `- p
Ξ”: t_ctx
Proper (asgn_eq Ξ“ Ξ” ==> eq) (v_subst Ξ“ `- p v Ξ”)
Ξ“: t_ctx
p: pre_ty neg
v: val Ξ“ `- p
Ξ”: t_ctx
Proper (asgn_eq Ξ“ Ξ” ==> eq) (v_subst Ξ“ `- p v Ξ”)
Ξ“: t_ctx
p: pre_ty pos
v: val Ξ“ `+ p
Ξ”: t_ctx

Proper (asgn_eq Ξ“ Ξ” ==> eq) (v_subst Ξ“ `+ p v Ξ”)
now apply w_sub_eq.
Ξ“: t_ctx
p: pre_ty neg
v: val Ξ“ `+ p
Ξ”: t_ctx

Proper (asgn_eq Ξ“ Ξ” ==> eq) (v_subst Ξ“ `+ p v Ξ”)
now apply t_sub_eq.
Ξ“: t_ctx
p: pre_ty pos
v: val Ξ“ `- p
Ξ”: t_ctx

Proper (asgn_eq Ξ“ Ξ” ==> eq) (v_subst Ξ“ `- p v Ξ”)
now apply t_sub_eq.
Ξ“: t_ctx
p: pre_ty neg
v: val Ξ“ `- p
Ξ”: t_ctx

Proper (asgn_eq Ξ“ Ξ” ==> eq) (v_subst Ξ“ `- p v Ξ”)
now apply w_sub_eq. Qed.
Ξ“1, Ξ“2, Ξ“3: ctx ty

Proper (asgn_eq Ξ“1 Ξ“2 ==> asgn_eq Ξ“2 Ξ“3 ==> asgn_eq Ξ“1 Ξ“3) a_comp
intros ? ? H1 ? ? H2 ? ?; cbn; rewrite H1; now eapply v_sub_eq. Qed. Definition t_ren_sub_P Ξ“1 A (t : term Ξ“1 A) : Prop := forall Ξ“2 Ξ“3 (f1 : Ξ“1 =[val]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (t `β‚œβŠ› f1) β‚œβŠ›α΅£ f2 = t `β‚œβŠ› (f1 βŠ›α΅£ f2) . Definition w_ren_sub_P Ξ“1 A (v : whn Ξ“1 A) : Prop := forall Ξ“2 Ξ“3 (f1 : Ξ“1 =[val]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (v `α΅₯βŠ› f1) α΅₯βŠ›α΅£ f2 = v `α΅₯βŠ› (f1 βŠ›α΅£ f2) . Definition s_ren_sub_P Ξ“1 (s : state Ξ“1) : Prop := forall Ξ“2 Ξ“3 (f1 : Ξ“1 =[val]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (s β‚œβŠ› f1) β‚›βŠ›α΅£ f2 = s β‚œβŠ› (f1 βŠ›α΅£ f2) .

syn_ind_args t_ren_sub_P w_ren_sub_P s_ren_sub_P

forall (Ξ“ : t_ctx) (A : ty) (s : state (Ξ“ β–Άβ‚“ A †)), s_ren_sub_P (Ξ“ β–Άβ‚“ A †) s -> t_ren_sub_P Ξ“ A (Mu s)

forall (Ξ“ : t_ctx) (A : pre_ty pos) (t : term (Ξ“ β–Άβ‚“ `- A) `- A), t_ren_sub_P (Ξ“ β–Άβ‚“ `- A) `- A t -> t_ren_sub_P Ξ“ `- A (RecL t)

forall (Ξ“ : t_ctx) (A : pre_ty neg) (t : term (Ξ“ β–Άβ‚“ `+ A) `+ A), t_ren_sub_P (Ξ“ β–Άβ‚“ `+ A) `+ A t -> t_ren_sub_P Ξ“ `+ A (RecR t)

forall (Ξ“ : t_ctx) (A : ty) (w : whn Ξ“ A), w_ren_sub_P Ξ“ A w -> t_ren_sub_P Ξ“ A (Whn w)

forall (Ξ“ : t_ctx) (A : ty) (h : Ξ“ βˆ‹ A), w_ren_sub_P Ξ“ A (Var h)

forall Ξ“ : t_ctx, w_ren_sub_P Ξ“ `- 0 ZerL

forall Ξ“ : t_ctx, w_ren_sub_P Ξ“ `+ ⊀ TopR

forall Ξ“ : t_ctx, w_ren_sub_P Ξ“ `+ 1 OneR

forall (Ξ“ : t_ctx) (s : state Ξ“), s_ren_sub_P Ξ“ s -> w_ren_sub_P Ξ“ `- 1 (OneL s)

forall (Ξ“ : t_ctx) (s : state Ξ“), s_ren_sub_P Ξ“ s -> w_ren_sub_P Ξ“ `+ βŠ₯ (BotR s)

forall Ξ“ : t_ctx, w_ren_sub_P Ξ“ `- βŠ₯ BotL

forall (Ξ“ : t_ctx) (A B : pre_ty pos) (w1 : whn Ξ“ `+ A), w_ren_sub_P Ξ“ `+ A w1 -> forall w2 : whn Ξ“ `+ B, w_ren_sub_P Ξ“ `+ B w2 -> w_ren_sub_P Ξ“ `+ (A βŠ— B) (TenR w1 w2)

forall (Ξ“ : t_ctx) (A B : pre_ty pos) (s : state (Ξ“ β–Άβ‚“ `+ A β–Άβ‚“ `+ B)), s_ren_sub_P (Ξ“ β–Άβ‚“ `+ A β–Άβ‚“ `+ B) s -> w_ren_sub_P Ξ“ `- (A βŠ— B) (TenL s)

forall (Ξ“ : t_ctx) (A B : pre_ty neg) (s : state (Ξ“ β–Άβ‚“ `- A β–Άβ‚“ `- B)), s_ren_sub_P (Ξ“ β–Άβ‚“ `- A β–Άβ‚“ `- B) s -> w_ren_sub_P Ξ“ `+ (A β…‹ B) (ParR s)

forall (Ξ“ : t_ctx) (A B : pre_ty neg) (w1 : whn Ξ“ `- A), w_ren_sub_P Ξ“ `- A w1 -> forall w2 : whn Ξ“ `- B, w_ren_sub_P Ξ“ `- B w2 -> w_ren_sub_P Ξ“ `- (A β…‹ B) (ParL w1 w2)

forall (Ξ“ : t_ctx) (A B : pre_ty pos) (w : whn Ξ“ `+ A), w_ren_sub_P Ξ“ `+ A w -> w_ren_sub_P Ξ“ `+ (A βŠ• B) (OrR1 w)

forall (Ξ“ : t_ctx) (A B : pre_ty pos) (w : whn Ξ“ `+ B), w_ren_sub_P Ξ“ `+ B w -> w_ren_sub_P Ξ“ `+ (A βŠ• B) (OrR2 w)

forall (Ξ“ : t_ctx) (A B : pre_ty pos) (s1 : state (Ξ“ β–Άβ‚“ `+ A)), s_ren_sub_P (Ξ“ β–Άβ‚“ `+ A) s1 -> forall s2 : state (Ξ“ β–Άβ‚“ `+ B), s_ren_sub_P (Ξ“ β–Άβ‚“ `+ B) s2 -> w_ren_sub_P Ξ“ `- (A βŠ• B) (OrL s1 s2)

forall (Ξ“ : t_ctx) (A B : pre_ty neg) (s1 : state (Ξ“ β–Άβ‚“ `- A)), s_ren_sub_P (Ξ“ β–Άβ‚“ `- A) s1 -> forall s2 : state (Ξ“ β–Άβ‚“ `- B), s_ren_sub_P (Ξ“ β–Άβ‚“ `- B) s2 -> w_ren_sub_P Ξ“ `+ (A & B) (AndR s1 s2)

forall (Ξ“ : t_ctx) (A B : pre_ty neg) (w : whn Ξ“ `- A), w_ren_sub_P Ξ“ `- A w -> w_ren_sub_P Ξ“ `- (A & B) (AndL1 w)

forall (Ξ“ : t_ctx) (A B : pre_ty neg) (w : whn Ξ“ `- B), w_ren_sub_P Ξ“ `- B w -> w_ren_sub_P Ξ“ `- (A & B) (AndL2 w)

forall (Ξ“ : t_ctx) (A : pre_ty neg) (t : term Ξ“ `+ A), t_ren_sub_P Ξ“ `+ A t -> w_ren_sub_P Ξ“ `+ (↓ A) (ShiftPR t)

forall (Ξ“ : t_ctx) (A : pre_ty neg) (s : state (Ξ“ β–Άβ‚“ `+ A)), s_ren_sub_P (Ξ“ β–Άβ‚“ `+ A) s -> w_ren_sub_P Ξ“ `- (↓ A) (ShiftPL s)

forall (Ξ“ : t_ctx) (A : pre_ty pos) (s : state (Ξ“ β–Άβ‚“ `- A)), s_ren_sub_P (Ξ“ β–Άβ‚“ `- A) s -> w_ren_sub_P Ξ“ `+ (↑ A) (ShiftNR s)

forall (Ξ“ : t_ctx) (A : pre_ty pos) (t : term Ξ“ `- A), t_ren_sub_P Ξ“ `- A t -> w_ren_sub_P Ξ“ `- (↑ A) (ShiftNL t)

forall (Ξ“ : t_ctx) (A : pre_ty neg) (w : whn Ξ“ `- A), w_ren_sub_P Ξ“ `- A w -> w_ren_sub_P Ξ“ `+ (βŠ– A) (NegPR w)

forall (Ξ“ : t_ctx) (A : pre_ty neg) (s : state (Ξ“ β–Άβ‚“ `- A)), s_ren_sub_P (Ξ“ β–Άβ‚“ `- A) s -> w_ren_sub_P Ξ“ `- (βŠ– A) (NegPL s)

forall (Ξ“ : t_ctx) (A : pre_ty pos) (s : state (Ξ“ β–Άβ‚“ `+ A)), s_ren_sub_P (Ξ“ β–Άβ‚“ `+ A) s -> w_ren_sub_P Ξ“ `+ (Β¬ A) (NegNR s)

forall (Ξ“ : t_ctx) (A : pre_ty pos) (w : whn Ξ“ `+ A), w_ren_sub_P Ξ“ `+ A w -> w_ren_sub_P Ξ“ `- (Β¬ A) (NegNL w)

forall (Ξ“ : t_ctx) (p : pol) (A : pre_ty p) (t1 : term Ξ“ `+ A), t_ren_sub_P Ξ“ `+ A t1 -> forall t2 : term Ξ“ `- A, t_ren_sub_P Ξ“ `- A t2 -> s_ren_sub_P Ξ“ (Cut p t1 t2)

forall (Ξ“ : t_ctx) (A : ty) (s : state (Ξ“ β–Άβ‚“ A †)), (forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ A †) =[ val ]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (s β‚œβŠ› f1) β‚›βŠ›α΅£ f2 = s β‚œβŠ› f1 βŠ›α΅£ f2) -> forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ =[ val ]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (Mu s `β‚œβŠ› f1) β‚œβŠ›α΅£ f2 = Mu s `β‚œβŠ› f1 βŠ›α΅£ f2

forall (Ξ“ : t_ctx) (A : pre_ty pos) (t : term (Ξ“ β–Άβ‚“ `- A) `- A), (forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `- A) =[ val ]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (t `β‚œβŠ› f1) β‚œβŠ›α΅£ f2 = t `β‚œβŠ› f1 βŠ›α΅£ f2) -> forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ =[ val ]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (RecL t `β‚œβŠ› f1) β‚œβŠ›α΅£ f2 = RecL t `β‚œβŠ› f1 βŠ›α΅£ f2

forall (Ξ“ : t_ctx) (A : pre_ty neg) (t : term (Ξ“ β–Άβ‚“ `+ A) `+ A), (forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `+ A) =[ val ]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (t `β‚œβŠ› f1) β‚œβŠ›α΅£ f2 = t `β‚œβŠ› f1 βŠ›α΅£ f2) -> forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ =[ val ]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (RecR t `β‚œβŠ› f1) β‚œβŠ›α΅£ f2 = RecR t `β‚œβŠ› f1 βŠ›α΅£ f2

forall (Ξ“ : t_ctx) (A : ty) (w : whn Ξ“ A), (forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ =[ val ]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (w `α΅₯βŠ› f1) α΅₯βŠ›α΅£ f2 = w `α΅₯βŠ› f1 βŠ›α΅£ f2) -> forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ =[ val ]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (Whn w `β‚œβŠ› f1) β‚œβŠ›α΅£ f2 = Whn w `β‚œβŠ› f1 βŠ›α΅£ f2

forall (Ξ“ : t_ctx) (A : ty) (h : Ξ“ βˆ‹ A) (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ =[ val ]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (Var h `α΅₯βŠ› f1) α΅₯βŠ›α΅£ f2 = Var h `α΅₯βŠ› f1 βŠ›α΅£ f2

forall (Ξ“ Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ =[ val ]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (ZerL `α΅₯βŠ› f1) α΅₯βŠ›α΅£ f2 = ZerL `α΅₯βŠ› f1 βŠ›α΅£ f2

forall (Ξ“ Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ =[ val ]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (TopR `α΅₯βŠ› f1) α΅₯βŠ›α΅£ f2 = TopR `α΅₯βŠ› f1 βŠ›α΅£ f2

forall (Ξ“ Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ =[ val ]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (OneR `α΅₯βŠ› f1) α΅₯βŠ›α΅£ f2 = OneR `α΅₯βŠ› f1 βŠ›α΅£ f2

forall (Ξ“ : t_ctx) (s : state Ξ“), (forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ =[ val ]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (s β‚œβŠ› f1) β‚›βŠ›α΅£ f2 = s β‚œβŠ› f1 βŠ›α΅£ f2) -> forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ =[ val ]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (OneL s `α΅₯βŠ› f1) α΅₯βŠ›α΅£ f2 = OneL s `α΅₯βŠ› f1 βŠ›α΅£ f2

forall (Ξ“ : t_ctx) (s : state Ξ“), (forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ =[ val ]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (s β‚œβŠ› f1) β‚›βŠ›α΅£ f2 = s β‚œβŠ› f1 βŠ›α΅£ f2) -> forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ =[ val ]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (BotR s `α΅₯βŠ› f1) α΅₯βŠ›α΅£ f2 = BotR s `α΅₯βŠ› f1 βŠ›α΅£ f2

forall (Ξ“ Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ =[ val ]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (BotL `α΅₯βŠ› f1) α΅₯βŠ›α΅£ f2 = BotL `α΅₯βŠ› f1 βŠ›α΅£ f2

forall (Ξ“ : t_ctx) (A B : pre_ty pos) (w1 : whn Ξ“ `+ A), (forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ =[ val ]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (w1 `α΅₯βŠ› f1) α΅₯βŠ›α΅£ f2 = w1 `α΅₯βŠ› f1 βŠ›α΅£ f2) -> forall w2 : whn Ξ“ `+ B, (forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ =[ val ]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (w2 `α΅₯βŠ› f1) α΅₯βŠ›α΅£ f2 = w2 `α΅₯βŠ› f1 βŠ›α΅£ f2) -> forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ =[ val ]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (TenR w1 w2 `α΅₯βŠ› f1) α΅₯βŠ›α΅£ f2 = TenR w1 w2 `α΅₯βŠ› f1 βŠ›α΅£ f2

forall (Ξ“ : t_ctx) (A B : pre_ty pos) (s : state (Ξ“ β–Άβ‚“ `+ A β–Άβ‚“ `+ B)), (forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `+ A β–Άβ‚“ `+ B) =[ val ]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (s β‚œβŠ› f1) β‚›βŠ›α΅£ f2 = s β‚œβŠ› f1 βŠ›α΅£ f2) -> forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ =[ val ]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (TenL s `α΅₯βŠ› f1) α΅₯βŠ›α΅£ f2 = TenL s `α΅₯βŠ› f1 βŠ›α΅£ f2

forall (Ξ“ : t_ctx) (A B : pre_ty neg) (s : state (Ξ“ β–Άβ‚“ `- A β–Άβ‚“ `- B)), (forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `- A β–Άβ‚“ `- B) =[ val ]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (s β‚œβŠ› f1) β‚›βŠ›α΅£ f2 = s β‚œβŠ› f1 βŠ›α΅£ f2) -> forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ =[ val ]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (ParR s `α΅₯βŠ› f1) α΅₯βŠ›α΅£ f2 = ParR s `α΅₯βŠ› f1 βŠ›α΅£ f2

forall (Ξ“ : t_ctx) (A B : pre_ty neg) (w1 : whn Ξ“ `- A), (forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ =[ val ]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (w1 `α΅₯βŠ› f1) α΅₯βŠ›α΅£ f2 = w1 `α΅₯βŠ› f1 βŠ›α΅£ f2) -> forall w2 : whn Ξ“ `- B, (forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ =[ val ]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (w2 `α΅₯βŠ› f1) α΅₯βŠ›α΅£ f2 = w2 `α΅₯βŠ› f1 βŠ›α΅£ f2) -> forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ =[ val ]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (ParL w1 w2 `α΅₯βŠ› f1) α΅₯βŠ›α΅£ f2 = ParL w1 w2 `α΅₯βŠ› f1 βŠ›α΅£ f2

forall (Ξ“ : t_ctx) (A B : pre_ty pos) (w : whn Ξ“ `+ A), (forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ =[ val ]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (w `α΅₯βŠ› f1) α΅₯βŠ›α΅£ f2 = w `α΅₯βŠ› f1 βŠ›α΅£ f2) -> forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ =[ val ]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (OrR1 w `α΅₯βŠ› f1) α΅₯βŠ›α΅£ f2 = OrR1 w `α΅₯βŠ› f1 βŠ›α΅£ f2

forall (Ξ“ : t_ctx) (A B : pre_ty pos) (w : whn Ξ“ `+ B), (forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ =[ val ]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (w `α΅₯βŠ› f1) α΅₯βŠ›α΅£ f2 = w `α΅₯βŠ› f1 βŠ›α΅£ f2) -> forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ =[ val ]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (OrR2 w `α΅₯βŠ› f1) α΅₯βŠ›α΅£ f2 = OrR2 w `α΅₯βŠ› f1 βŠ›α΅£ f2

forall (Ξ“ : t_ctx) (A B : pre_ty pos) (s1 : state (Ξ“ β–Άβ‚“ `+ A)), (forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `+ A) =[ val ]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (s1 β‚œβŠ› f1) β‚›βŠ›α΅£ f2 = s1 β‚œβŠ› f1 βŠ›α΅£ f2) -> forall s2 : state (Ξ“ β–Άβ‚“ `+ B), (forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `+ B) =[ val ]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (s2 β‚œβŠ› f1) β‚›βŠ›α΅£ f2 = s2 β‚œβŠ› f1 βŠ›α΅£ f2) -> forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ =[ val ]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (OrL s1 s2 `α΅₯βŠ› f1) α΅₯βŠ›α΅£ f2 = OrL s1 s2 `α΅₯βŠ› f1 βŠ›α΅£ f2

forall (Ξ“ : t_ctx) (A B : pre_ty neg) (s1 : state (Ξ“ β–Άβ‚“ `- A)), (forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `- A) =[ val ]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (s1 β‚œβŠ› f1) β‚›βŠ›α΅£ f2 = s1 β‚œβŠ› f1 βŠ›α΅£ f2) -> forall s2 : state (Ξ“ β–Άβ‚“ `- B), (forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `- B) =[ val ]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (s2 β‚œβŠ› f1) β‚›βŠ›α΅£ f2 = s2 β‚œβŠ› f1 βŠ›α΅£ f2) -> forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ =[ val ]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (AndR s1 s2 `α΅₯βŠ› f1) α΅₯βŠ›α΅£ f2 = AndR s1 s2 `α΅₯βŠ› f1 βŠ›α΅£ f2

forall (Ξ“ : t_ctx) (A B : pre_ty neg) (w : whn Ξ“ `- A), (forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ =[ val ]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (w `α΅₯βŠ› f1) α΅₯βŠ›α΅£ f2 = w `α΅₯βŠ› f1 βŠ›α΅£ f2) -> forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ =[ val ]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (AndL1 w `α΅₯βŠ› f1) α΅₯βŠ›α΅£ f2 = AndL1 w `α΅₯βŠ› f1 βŠ›α΅£ f2

forall (Ξ“ : t_ctx) (A B : pre_ty neg) (w : whn Ξ“ `- B), (forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ =[ val ]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (w `α΅₯βŠ› f1) α΅₯βŠ›α΅£ f2 = w `α΅₯βŠ› f1 βŠ›α΅£ f2) -> forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ =[ val ]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (AndL2 w `α΅₯βŠ› f1) α΅₯βŠ›α΅£ f2 = AndL2 w `α΅₯βŠ› f1 βŠ›α΅£ f2

forall (Ξ“ : t_ctx) (A : pre_ty neg) (t : term Ξ“ `+ A), (forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ =[ val ]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (t `β‚œβŠ› f1) β‚œβŠ›α΅£ f2 = t `β‚œβŠ› f1 βŠ›α΅£ f2) -> forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ =[ val ]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (ShiftPR t `α΅₯βŠ› f1) α΅₯βŠ›α΅£ f2 = ShiftPR t `α΅₯βŠ› f1 βŠ›α΅£ f2

forall (Ξ“ : t_ctx) (A : pre_ty neg) (s : state (Ξ“ β–Άβ‚“ `+ A)), (forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `+ A) =[ val ]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (s β‚œβŠ› f1) β‚›βŠ›α΅£ f2 = s β‚œβŠ› f1 βŠ›α΅£ f2) -> forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ =[ val ]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (ShiftPL s `α΅₯βŠ› f1) α΅₯βŠ›α΅£ f2 = ShiftPL s `α΅₯βŠ› f1 βŠ›α΅£ f2

forall (Ξ“ : t_ctx) (A : pre_ty pos) (s : state (Ξ“ β–Άβ‚“ `- A)), (forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `- A) =[ val ]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (s β‚œβŠ› f1) β‚›βŠ›α΅£ f2 = s β‚œβŠ› f1 βŠ›α΅£ f2) -> forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ =[ val ]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (ShiftNR s `α΅₯βŠ› f1) α΅₯βŠ›α΅£ f2 = ShiftNR s `α΅₯βŠ› f1 βŠ›α΅£ f2

forall (Ξ“ : t_ctx) (A : pre_ty pos) (t : term Ξ“ `- A), (forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ =[ val ]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (t `β‚œβŠ› f1) β‚œβŠ›α΅£ f2 = t `β‚œβŠ› f1 βŠ›α΅£ f2) -> forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ =[ val ]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (ShiftNL t `α΅₯βŠ› f1) α΅₯βŠ›α΅£ f2 = ShiftNL t `α΅₯βŠ› f1 βŠ›α΅£ f2

forall (Ξ“ : t_ctx) (A : pre_ty neg) (w : whn Ξ“ `- A), (forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ =[ val ]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (w `α΅₯βŠ› f1) α΅₯βŠ›α΅£ f2 = w `α΅₯βŠ› f1 βŠ›α΅£ f2) -> forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ =[ val ]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (NegPR w `α΅₯βŠ› f1) α΅₯βŠ›α΅£ f2 = NegPR w `α΅₯βŠ› f1 βŠ›α΅£ f2

forall (Ξ“ : t_ctx) (A : pre_ty neg) (s : state (Ξ“ β–Άβ‚“ `- A)), (forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `- A) =[ val ]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (s β‚œβŠ› f1) β‚›βŠ›α΅£ f2 = s β‚œβŠ› f1 βŠ›α΅£ f2) -> forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ =[ val ]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (NegPL s `α΅₯βŠ› f1) α΅₯βŠ›α΅£ f2 = NegPL s `α΅₯βŠ› f1 βŠ›α΅£ f2

forall (Ξ“ : t_ctx) (A : pre_ty pos) (s : state (Ξ“ β–Άβ‚“ `+ A)), (forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `+ A) =[ val ]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (s β‚œβŠ› f1) β‚›βŠ›α΅£ f2 = s β‚œβŠ› f1 βŠ›α΅£ f2) -> forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ =[ val ]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (NegNR s `α΅₯βŠ› f1) α΅₯βŠ›α΅£ f2 = NegNR s `α΅₯βŠ› f1 βŠ›α΅£ f2

forall (Ξ“ : t_ctx) (A : pre_ty pos) (w : whn Ξ“ `+ A), (forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ =[ val ]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (w `α΅₯βŠ› f1) α΅₯βŠ›α΅£ f2 = w `α΅₯βŠ› f1 βŠ›α΅£ f2) -> forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ =[ val ]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (NegNL w `α΅₯βŠ› f1) α΅₯βŠ›α΅£ f2 = NegNL w `α΅₯βŠ› f1 βŠ›α΅£ f2

forall (Ξ“ : t_ctx) (p : pol) (A : pre_ty p) (t1 : term Ξ“ `+ A), (forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ =[ val ]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (t1 `β‚œβŠ› f1) β‚œβŠ›α΅£ f2 = t1 `β‚œβŠ› f1 βŠ›α΅£ f2) -> forall t2 : term Ξ“ `- A, (forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ =[ val ]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (t2 `β‚œβŠ› f1) β‚œβŠ›α΅£ f2 = t2 `β‚œβŠ› f1 βŠ›α΅£ f2) -> forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ =[ val ]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (Cut p t1 t2 β‚œβŠ› f1) β‚›βŠ›α΅£ f2 = Cut p t1 t2 β‚œβŠ› f1 βŠ›α΅£ f2
Ξ“: t_ctx
A: ty
s: state (Ξ“ β–Άβ‚“ A †)
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ A †) =[ val ]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (s β‚œβŠ› f1) β‚›βŠ›α΅£ f2 = s β‚œβŠ› f1 βŠ›α΅£ f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 βŠ† Ξ“3

Mu (s_subst (Ξ“ β–Άβ‚“ A †) s (Ξ“2 β–Άβ‚“ A †) (a_shift1 f1) β‚›βŠ›α΅£ r_shift1 f2) = Mu (s_subst (Ξ“ β–Άβ‚“ A †) s (Ξ“3 β–Άβ‚“ A †) (a_shift1 (f1 βŠ›α΅£ f2)))
Ξ“: t_ctx
A: pre_ty pos
t: term (Ξ“ β–Άβ‚“ `- A) `- A
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `- A) =[ val ]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (t `β‚œβŠ› f1) β‚œβŠ›α΅£ f2 = t `β‚œβŠ› f1 βŠ›α΅£ f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 βŠ† Ξ“3
RecL ((t `β‚œβŠ› a_shift1 f1) β‚œβŠ›α΅£ r_shift1 f2) = RecL (t `β‚œβŠ› a_shift1 (f1 βŠ›α΅£ f2))
Ξ“: t_ctx
A: pre_ty neg
t: term (Ξ“ β–Άβ‚“ `+ A) `+ A
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `+ A) =[ val ]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (t `β‚œβŠ› f1) β‚œβŠ›α΅£ f2 = t `β‚œβŠ› f1 βŠ›α΅£ f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 βŠ† Ξ“3
RecR ((t `β‚œβŠ› a_shift1 f1) β‚œβŠ›α΅£ r_shift1 f2) = RecR (t `β‚œβŠ› a_shift1 (f1 βŠ›α΅£ f2))
Ξ“: t_ctx
A: ty
w: whn Ξ“ A
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ =[ val ]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (w `α΅₯βŠ› f1) α΅₯βŠ›α΅£ f2 = w `α΅₯βŠ› f1 βŠ›α΅£ f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 βŠ† Ξ“3
(w `α΅₯βŠ› f1) β‚œβŠ›α΅£ f2 = w `α΅₯βŠ› f1 βŠ›α΅£ f2
Ξ“: t_ctx
A: ty
h: Ξ“ βˆ‹ A
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 βŠ† Ξ“3
f1 A h α΅₯βŠ›α΅£ f2 = f1 A h α΅₯βŠ›α΅£ f2
Ξ“, Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 βŠ† Ξ“3
Whn ZerL = Whn ZerL
Ξ“, Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 βŠ† Ξ“3
Whn TopR = Whn TopR
Ξ“, Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 βŠ† Ξ“3
OneR = OneR
Ξ“: t_ctx
s: state Ξ“
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ =[ val ]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (s β‚œβŠ› f1) β‚›βŠ›α΅£ f2 = s β‚œβŠ› f1 βŠ›α΅£ f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 βŠ† Ξ“3
Whn (OneL (s_subst Ξ“ s Ξ“2 f1 β‚›βŠ›α΅£ f2)) = Whn (OneL (s_subst Ξ“ s Ξ“3 (f1 βŠ›α΅£ f2)%asgn))
Ξ“: t_ctx
s: state Ξ“
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ =[ val ]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (s β‚œβŠ› f1) β‚›βŠ›α΅£ f2 = s β‚œβŠ› f1 βŠ›α΅£ f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 βŠ† Ξ“3
Whn (BotR (s_subst Ξ“ s Ξ“2 f1 β‚›βŠ›α΅£ f2)) = Whn (BotR (s_subst Ξ“ s Ξ“3 (f1 βŠ›α΅£ f2)%asgn))
Ξ“, Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 βŠ† Ξ“3
BotL = BotL
Ξ“: t_ctx
A, B: pre_ty pos
w1: whn Ξ“ `+ A
H1: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ =[ val ]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (w1 `α΅₯βŠ› f1) α΅₯βŠ›α΅£ f2 = w1 `α΅₯βŠ› f1 βŠ›α΅£ f2
w2: whn Ξ“ `+ B
H2: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ =[ val ]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (w2 `α΅₯βŠ› f1) α΅₯βŠ›α΅£ f2 = w2 `α΅₯βŠ› f1 βŠ›α΅£ f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 βŠ† Ξ“3
TenR ((w1 `α΅₯βŠ› f1) `α΅₯βŠ›α΅£ f2) ((w2 `α΅₯βŠ› f1) `α΅₯βŠ›α΅£ f2) = TenR (w1 `α΅₯βŠ› f1 βŠ›α΅£ f2) (w2 `α΅₯βŠ› f1 βŠ›α΅£ f2)
Ξ“: t_ctx
A, B: pre_ty pos
s: state (Ξ“ β–Άβ‚“ `+ A β–Άβ‚“ `+ B)
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `+ A β–Άβ‚“ `+ B) =[ val ]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (s β‚œβŠ› f1) β‚›βŠ›α΅£ f2 = s β‚œβŠ› f1 βŠ›α΅£ f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 βŠ† Ξ“3
Whn (TenL (s_subst (Ξ“ β–Άβ‚“ `+ A β–Άβ‚“ `+ B) s (Ξ“2 β–Άβ‚“ `+ A β–Άβ‚“ `+ B) (a_shift2 f1) β‚›βŠ›α΅£ r_shift2 f2)) = Whn (TenL (s_subst (Ξ“ β–Άβ‚“ `+ A β–Άβ‚“ `+ B) s (Ξ“3 β–Άβ‚“ `+ A β–Άβ‚“ `+ B) (a_shift2 (f1 βŠ›α΅£ f2))))
Ξ“: t_ctx
A, B: pre_ty neg
s: state (Ξ“ β–Άβ‚“ `- A β–Άβ‚“ `- B)
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `- A β–Άβ‚“ `- B) =[ val ]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (s β‚œβŠ› f1) β‚›βŠ›α΅£ f2 = s β‚œβŠ› f1 βŠ›α΅£ f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 βŠ† Ξ“3
Whn (ParR (s_subst (Ξ“ β–Άβ‚“ `- A β–Άβ‚“ `- B) s (Ξ“2 β–Άβ‚“ `- A β–Άβ‚“ `- B) (a_shift2 f1) β‚›βŠ›α΅£ r_shift2 f2)) = Whn (ParR (s_subst (Ξ“ β–Άβ‚“ `- A β–Άβ‚“ `- B) s (Ξ“3 β–Άβ‚“ `- A β–Άβ‚“ `- B) (a_shift2 (f1 βŠ›α΅£ f2))))
Ξ“: t_ctx
A, B: pre_ty neg
w1: whn Ξ“ `- A
H1: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ =[ val ]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (w1 `α΅₯βŠ› f1) α΅₯βŠ›α΅£ f2 = w1 `α΅₯βŠ› f1 βŠ›α΅£ f2
w2: whn Ξ“ `- B
H2: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ =[ val ]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (w2 `α΅₯βŠ› f1) α΅₯βŠ›α΅£ f2 = w2 `α΅₯βŠ› f1 βŠ›α΅£ f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 βŠ† Ξ“3
ParL ((w1 `α΅₯βŠ› f1) `α΅₯βŠ›α΅£ f2) ((w2 `α΅₯βŠ› f1) `α΅₯βŠ›α΅£ f2) = ParL (w1 `α΅₯βŠ› f1 βŠ›α΅£ f2) (w2 `α΅₯βŠ› f1 βŠ›α΅£ f2)
Ξ“: t_ctx
A, B: pre_ty pos
w: whn Ξ“ `+ A
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ =[ val ]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (w `α΅₯βŠ› f1) α΅₯βŠ›α΅£ f2 = w `α΅₯βŠ› f1 βŠ›α΅£ f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 βŠ† Ξ“3
OrR1 ((w `α΅₯βŠ› f1) `α΅₯βŠ›α΅£ f2) = OrR1 (w `α΅₯βŠ› f1 βŠ›α΅£ f2)
Ξ“: t_ctx
A, B: pre_ty pos
w: whn Ξ“ `+ B
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ =[ val ]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (w `α΅₯βŠ› f1) α΅₯βŠ›α΅£ f2 = w `α΅₯βŠ› f1 βŠ›α΅£ f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 βŠ† Ξ“3
OrR2 ((w `α΅₯βŠ› f1) `α΅₯βŠ›α΅£ f2) = OrR2 (w `α΅₯βŠ› f1 βŠ›α΅£ f2)
Ξ“: t_ctx
A, B: pre_ty pos
s1: state (Ξ“ β–Άβ‚“ `+ A)
H1: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `+ A) =[ val ]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (s1 β‚œβŠ› f1) β‚›βŠ›α΅£ f2 = s1 β‚œβŠ› f1 βŠ›α΅£ f2
s2: state (Ξ“ β–Άβ‚“ `+ B)
H2: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `+ B) =[ val ]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (s2 β‚œβŠ› f1) β‚›βŠ›α΅£ f2 = s2 β‚œβŠ› f1 βŠ›α΅£ f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 βŠ† Ξ“3
Whn (OrL (s_subst (Ξ“ β–Άβ‚“ `+ A) s1 (Ξ“2 β–Άβ‚“ `+ A) (a_shift1 f1) β‚›βŠ›α΅£ r_shift1 f2) (s_subst (Ξ“ β–Άβ‚“ `+ B) s2 (Ξ“2 β–Άβ‚“ `+ B) (a_shift1 f1) β‚›βŠ›α΅£ r_shift1 f2)) = Whn (OrL (s_subst (Ξ“ β–Άβ‚“ `+ A) s1 (Ξ“3 β–Άβ‚“ `+ A) (a_shift1 (f1 βŠ›α΅£ f2))) (s_subst (Ξ“ β–Άβ‚“ `+ B) s2 (Ξ“3 β–Άβ‚“ `+ B) (a_shift1 (f1 βŠ›α΅£ f2))))
Ξ“: t_ctx
A, B: pre_ty neg
s1: state (Ξ“ β–Άβ‚“ `- A)
H1: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `- A) =[ val ]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (s1 β‚œβŠ› f1) β‚›βŠ›α΅£ f2 = s1 β‚œβŠ› f1 βŠ›α΅£ f2
s2: state (Ξ“ β–Άβ‚“ `- B)
H2: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `- B) =[ val ]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (s2 β‚œβŠ› f1) β‚›βŠ›α΅£ f2 = s2 β‚œβŠ› f1 βŠ›α΅£ f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 βŠ† Ξ“3
Whn (AndR (s_subst (Ξ“ β–Άβ‚“ `- A) s1 (Ξ“2 β–Άβ‚“ `- A) (a_shift1 f1) β‚›βŠ›α΅£ r_shift1 f2) (s_subst (Ξ“ β–Άβ‚“ `- B) s2 (Ξ“2 β–Άβ‚“ `- B) (a_shift1 f1) β‚›βŠ›α΅£ r_shift1 f2)) = Whn (AndR (s_subst (Ξ“ β–Άβ‚“ `- A) s1 (Ξ“3 β–Άβ‚“ `- A) (a_shift1 (f1 βŠ›α΅£ f2))) (s_subst (Ξ“ β–Άβ‚“ `- B) s2 (Ξ“3 β–Άβ‚“ `- B) (a_shift1 (f1 βŠ›α΅£ f2))))
Ξ“: t_ctx
A, B: pre_ty neg
w: whn Ξ“ `- A
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ =[ val ]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (w `α΅₯βŠ› f1) α΅₯βŠ›α΅£ f2 = w `α΅₯βŠ› f1 βŠ›α΅£ f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 βŠ† Ξ“3
AndL1 ((w `α΅₯βŠ› f1) `α΅₯βŠ›α΅£ f2) = AndL1 (w `α΅₯βŠ› f1 βŠ›α΅£ f2)
Ξ“: t_ctx
A, B: pre_ty neg
w: whn Ξ“ `- B
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ =[ val ]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (w `α΅₯βŠ› f1) α΅₯βŠ›α΅£ f2 = w `α΅₯βŠ› f1 βŠ›α΅£ f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 βŠ† Ξ“3
AndL2 ((w `α΅₯βŠ› f1) `α΅₯βŠ›α΅£ f2) = AndL2 (w `α΅₯βŠ› f1 βŠ›α΅£ f2)
Ξ“: t_ctx
A: pre_ty neg
t: term Ξ“ `+ A
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ =[ val ]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (t `β‚œβŠ› f1) β‚œβŠ›α΅£ f2 = t `β‚œβŠ› f1 βŠ›α΅£ f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 βŠ† Ξ“3
ShiftPR ((t `β‚œβŠ› f1) β‚œβŠ›α΅£ f2) = ShiftPR (t `β‚œβŠ› f1 βŠ›α΅£ f2)
Ξ“: t_ctx
A: pre_ty neg
s: state (Ξ“ β–Άβ‚“ `+ A)
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `+ A) =[ val ]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (s β‚œβŠ› f1) β‚›βŠ›α΅£ f2 = s β‚œβŠ› f1 βŠ›α΅£ f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 βŠ† Ξ“3
Whn (ShiftPL (s_subst (Ξ“ β–Άβ‚“ `+ A) s (Ξ“2 β–Άβ‚“ `+ A) (a_shift1 f1) β‚›βŠ›α΅£ r_shift1 f2)) = Whn (ShiftPL (s_subst (Ξ“ β–Άβ‚“ `+ A) s (Ξ“3 β–Άβ‚“ `+ A) (a_shift1 (f1 βŠ›α΅£ f2))))
Ξ“: t_ctx
A: pre_ty pos
s: state (Ξ“ β–Άβ‚“ `- A)
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `- A) =[ val ]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (s β‚œβŠ› f1) β‚›βŠ›α΅£ f2 = s β‚œβŠ› f1 βŠ›α΅£ f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 βŠ† Ξ“3
Whn (ShiftNR (s_subst (Ξ“ β–Άβ‚“ `- A) s (Ξ“2 β–Άβ‚“ `- A) (a_shift1 f1) β‚›βŠ›α΅£ r_shift1 f2)) = Whn (ShiftNR (s_subst (Ξ“ β–Άβ‚“ `- A) s (Ξ“3 β–Άβ‚“ `- A) (a_shift1 (f1 βŠ›α΅£ f2))))
Ξ“: t_ctx
A: pre_ty pos
t: term Ξ“ `- A
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ =[ val ]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (t `β‚œβŠ› f1) β‚œβŠ›α΅£ f2 = t `β‚œβŠ› f1 βŠ›α΅£ f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 βŠ† Ξ“3
ShiftNL ((t `β‚œβŠ› f1) β‚œβŠ›α΅£ f2) = ShiftNL (t `β‚œβŠ› f1 βŠ›α΅£ f2)
Ξ“: t_ctx
A: pre_ty neg
w: whn Ξ“ `- A
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ =[ val ]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (w `α΅₯βŠ› f1) α΅₯βŠ›α΅£ f2 = w `α΅₯βŠ› f1 βŠ›α΅£ f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 βŠ† Ξ“3
NegPR ((w `α΅₯βŠ› f1) `α΅₯βŠ›α΅£ f2) = NegPR (w `α΅₯βŠ› f1 βŠ›α΅£ f2)
Ξ“: t_ctx
A: pre_ty neg
s: state (Ξ“ β–Άβ‚“ `- A)
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `- A) =[ val ]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (s β‚œβŠ› f1) β‚›βŠ›α΅£ f2 = s β‚œβŠ› f1 βŠ›α΅£ f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 βŠ† Ξ“3
Whn (NegPL (s_subst (Ξ“ β–Άβ‚“ `- A) s (Ξ“2 β–Άβ‚“ `- A) (a_shift1 f1) β‚›βŠ›α΅£ r_shift1 f2)) = Whn (NegPL (s_subst (Ξ“ β–Άβ‚“ `- A) s (Ξ“3 β–Άβ‚“ `- A) (a_shift1 (f1 βŠ›α΅£ f2))))
Ξ“: t_ctx
A: pre_ty pos
s: state (Ξ“ β–Άβ‚“ `+ A)
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `+ A) =[ val ]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (s β‚œβŠ› f1) β‚›βŠ›α΅£ f2 = s β‚œβŠ› f1 βŠ›α΅£ f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 βŠ† Ξ“3
Whn (NegNR (s_subst (Ξ“ β–Άβ‚“ `+ A) s (Ξ“2 β–Άβ‚“ `+ A) (a_shift1 f1) β‚›βŠ›α΅£ r_shift1 f2)) = Whn (NegNR (s_subst (Ξ“ β–Άβ‚“ `+ A) s (Ξ“3 β–Άβ‚“ `+ A) (a_shift1 (f1 βŠ›α΅£ f2))))
Ξ“: t_ctx
A: pre_ty pos
w: whn Ξ“ `+ A
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ =[ val ]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (w `α΅₯βŠ› f1) α΅₯βŠ›α΅£ f2 = w `α΅₯βŠ› f1 βŠ›α΅£ f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 βŠ† Ξ“3
NegNL ((w `α΅₯βŠ› f1) `α΅₯βŠ›α΅£ f2) = NegNL (w `α΅₯βŠ› f1 βŠ›α΅£ f2)
Ξ“: t_ctx
p: pol
A: pre_ty p
t1: term Ξ“ `+ A
H1: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ =[ val ]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (t1 `β‚œβŠ› f1) β‚œβŠ›α΅£ f2 = t1 `β‚œβŠ› f1 βŠ›α΅£ f2
t2: term Ξ“ `- A
H2: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ =[ val ]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (t2 `β‚œβŠ› f1) β‚œβŠ›α΅£ f2 = t2 `β‚œβŠ› f1 βŠ›α΅£ f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 βŠ† Ξ“3
Cut p ((t1 `β‚œβŠ› f1) β‚œβŠ›α΅£ f2) ((t2 `β‚œβŠ› f1) β‚œβŠ›α΅£ f2) = Cut p (t1 `β‚œβŠ› f1 βŠ›α΅£ f2) (t2 `β‚œβŠ› f1 βŠ›α΅£ f2)
Ξ“: t_ctx
A: ty
s: state (Ξ“ β–Άβ‚“ A †)
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ A †) =[ val ]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (s β‚œβŠ› f1) β‚›βŠ›α΅£ f2 = s β‚œβŠ› f1 βŠ›α΅£ f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 βŠ† Ξ“3

Mu (s_subst (Ξ“ β–Άβ‚“ A †) s (Ξ“2 β–Άβ‚“ A †) (a_shift1 f1) β‚›βŠ›α΅£ r_shift1 f2) = Mu (s_subst (Ξ“ β–Άβ‚“ A †) s (Ξ“3 β–Άβ‚“ A †) (a_shift1 (f1 βŠ›α΅£ f2)))
Ξ“: t_ctx
A: pre_ty pos
t: term (Ξ“ β–Άβ‚“ `- A) `- A
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `- A) =[ val ]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (t `β‚œβŠ› f1) β‚œβŠ›α΅£ f2 = t `β‚œβŠ› f1 βŠ›α΅£ f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 βŠ† Ξ“3
RecL ((t `β‚œβŠ› a_shift1 f1) β‚œβŠ›α΅£ r_shift1 f2) = RecL (t `β‚œβŠ› a_shift1 (f1 βŠ›α΅£ f2))
Ξ“: t_ctx
A: pre_ty neg
t: term (Ξ“ β–Άβ‚“ `+ A) `+ A
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `+ A) =[ val ]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (t `β‚œβŠ› f1) β‚œβŠ›α΅£ f2 = t `β‚œβŠ› f1 βŠ›α΅£ f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 βŠ† Ξ“3
RecR ((t `β‚œβŠ› a_shift1 f1) β‚œβŠ›α΅£ r_shift1 f2) = RecR (t `β‚œβŠ› a_shift1 (f1 βŠ›α΅£ f2))
Ξ“: t_ctx
p: pre_ty pos
w: whn Ξ“ `+ p
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ =[ val ]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (w `α΅₯βŠ› f1) α΅₯βŠ›α΅£ f2 = w `α΅₯βŠ› f1 βŠ›α΅£ f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 βŠ† Ξ“3
Whn ((w `α΅₯βŠ› f1) `α΅₯βŠ›α΅£ f2) = Whn (w `α΅₯βŠ› f1 βŠ›α΅£ f2)
Ξ“: t_ctx
p: pre_ty neg
w: whn Ξ“ `+ p
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ =[ val ]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (w `α΅₯βŠ› f1) α΅₯βŠ›α΅£ f2 = w `α΅₯βŠ› f1 βŠ›α΅£ f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 βŠ† Ξ“3
(w `α΅₯βŠ› f1) β‚œβŠ›α΅£ f2 = w `α΅₯βŠ› f1 βŠ›α΅£ f2
Ξ“: t_ctx
p: pre_ty pos
w: whn Ξ“ `- p
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ =[ val ]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (w `α΅₯βŠ› f1) α΅₯βŠ›α΅£ f2 = w `α΅₯βŠ› f1 βŠ›α΅£ f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 βŠ† Ξ“3
(w `α΅₯βŠ› f1) β‚œβŠ›α΅£ f2 = w `α΅₯βŠ› f1 βŠ›α΅£ f2
Ξ“: t_ctx
p: pre_ty neg
w: whn Ξ“ `- p
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ =[ val ]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (w `α΅₯βŠ› f1) α΅₯βŠ›α΅£ f2 = w `α΅₯βŠ› f1 βŠ›α΅£ f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 βŠ† Ξ“3
Whn ((w `α΅₯βŠ› f1) `α΅₯βŠ›α΅£ f2) = Whn (w `α΅₯βŠ› f1 βŠ›α΅£ f2)
Ξ“: t_ctx
A: ty
h: Ξ“ βˆ‹ A
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 βŠ† Ξ“3
f1 A h α΅₯βŠ›α΅£ f2 = f1 A h α΅₯βŠ›α΅£ f2
Ξ“, Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 βŠ† Ξ“3
Whn ZerL = Whn ZerL
Ξ“, Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 βŠ† Ξ“3
Whn TopR = Whn TopR
Ξ“, Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 βŠ† Ξ“3
OneR = OneR
Ξ“: t_ctx
s: state Ξ“
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ =[ val ]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (s β‚œβŠ› f1) β‚›βŠ›α΅£ f2 = s β‚œβŠ› f1 βŠ›α΅£ f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 βŠ† Ξ“3
Whn (OneL (s_subst Ξ“ s Ξ“2 f1 β‚›βŠ›α΅£ f2)) = Whn (OneL (s_subst Ξ“ s Ξ“3 (f1 βŠ›α΅£ f2)%asgn))
Ξ“: t_ctx
s: state Ξ“
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ =[ val ]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (s β‚œβŠ› f1) β‚›βŠ›α΅£ f2 = s β‚œβŠ› f1 βŠ›α΅£ f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 βŠ† Ξ“3
Whn (BotR (s_subst Ξ“ s Ξ“2 f1 β‚›βŠ›α΅£ f2)) = Whn (BotR (s_subst Ξ“ s Ξ“3 (f1 βŠ›α΅£ f2)%asgn))
Ξ“, Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 βŠ† Ξ“3
BotL = BotL
Ξ“: t_ctx
A, B: pre_ty pos
w1: whn Ξ“ `+ A
H1: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ =[ val ]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (w1 `α΅₯βŠ› f1) α΅₯βŠ›α΅£ f2 = w1 `α΅₯βŠ› f1 βŠ›α΅£ f2
w2: whn Ξ“ `+ B
H2: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ =[ val ]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (w2 `α΅₯βŠ› f1) α΅₯βŠ›α΅£ f2 = w2 `α΅₯βŠ› f1 βŠ›α΅£ f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 βŠ† Ξ“3
TenR ((w1 `α΅₯βŠ› f1) `α΅₯βŠ›α΅£ f2) ((w2 `α΅₯βŠ› f1) `α΅₯βŠ›α΅£ f2) = TenR (w1 `α΅₯βŠ› f1 βŠ›α΅£ f2) (w2 `α΅₯βŠ› f1 βŠ›α΅£ f2)
Ξ“: t_ctx
A, B: pre_ty pos
s: state (Ξ“ β–Άβ‚“ `+ A β–Άβ‚“ `+ B)
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `+ A β–Άβ‚“ `+ B) =[ val ]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (s β‚œβŠ› f1) β‚›βŠ›α΅£ f2 = s β‚œβŠ› f1 βŠ›α΅£ f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 βŠ† Ξ“3
Whn (TenL (s_subst (Ξ“ β–Άβ‚“ `+ A β–Άβ‚“ `+ B) s (Ξ“2 β–Άβ‚“ `+ A β–Άβ‚“ `+ B) (a_shift2 f1) β‚›βŠ›α΅£ r_shift2 f2)) = Whn (TenL (s_subst (Ξ“ β–Άβ‚“ `+ A β–Άβ‚“ `+ B) s (Ξ“3 β–Άβ‚“ `+ A β–Άβ‚“ `+ B) (a_shift2 (f1 βŠ›α΅£ f2))))
Ξ“: t_ctx
A, B: pre_ty neg
s: state (Ξ“ β–Άβ‚“ `- A β–Άβ‚“ `- B)
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `- A β–Άβ‚“ `- B) =[ val ]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (s β‚œβŠ› f1) β‚›βŠ›α΅£ f2 = s β‚œβŠ› f1 βŠ›α΅£ f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 βŠ† Ξ“3
Whn (ParR (s_subst (Ξ“ β–Άβ‚“ `- A β–Άβ‚“ `- B) s (Ξ“2 β–Άβ‚“ `- A β–Άβ‚“ `- B) (a_shift2 f1) β‚›βŠ›α΅£ r_shift2 f2)) = Whn (ParR (s_subst (Ξ“ β–Άβ‚“ `- A β–Άβ‚“ `- B) s (Ξ“3 β–Άβ‚“ `- A β–Άβ‚“ `- B) (a_shift2 (f1 βŠ›α΅£ f2))))
Ξ“: t_ctx
A, B: pre_ty neg
w1: whn Ξ“ `- A
H1: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ =[ val ]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (w1 `α΅₯βŠ› f1) α΅₯βŠ›α΅£ f2 = w1 `α΅₯βŠ› f1 βŠ›α΅£ f2
w2: whn Ξ“ `- B
H2: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ =[ val ]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (w2 `α΅₯βŠ› f1) α΅₯βŠ›α΅£ f2 = w2 `α΅₯βŠ› f1 βŠ›α΅£ f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 βŠ† Ξ“3
ParL ((w1 `α΅₯βŠ› f1) `α΅₯βŠ›α΅£ f2) ((w2 `α΅₯βŠ› f1) `α΅₯βŠ›α΅£ f2) = ParL (w1 `α΅₯βŠ› f1 βŠ›α΅£ f2) (w2 `α΅₯βŠ› f1 βŠ›α΅£ f2)
Ξ“: t_ctx
A, B: pre_ty pos
w: whn Ξ“ `+ A
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ =[ val ]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (w `α΅₯βŠ› f1) α΅₯βŠ›α΅£ f2 = w `α΅₯βŠ› f1 βŠ›α΅£ f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 βŠ† Ξ“3
OrR1 ((w `α΅₯βŠ› f1) `α΅₯βŠ›α΅£ f2) = OrR1 (w `α΅₯βŠ› f1 βŠ›α΅£ f2)
Ξ“: t_ctx
A, B: pre_ty pos
w: whn Ξ“ `+ B
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ =[ val ]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (w `α΅₯βŠ› f1) α΅₯βŠ›α΅£ f2 = w `α΅₯βŠ› f1 βŠ›α΅£ f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 βŠ† Ξ“3
OrR2 ((w `α΅₯βŠ› f1) `α΅₯βŠ›α΅£ f2) = OrR2 (w `α΅₯βŠ› f1 βŠ›α΅£ f2)
Ξ“: t_ctx
A, B: pre_ty pos
s1: state (Ξ“ β–Άβ‚“ `+ A)
H1: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `+ A) =[ val ]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (s1 β‚œβŠ› f1) β‚›βŠ›α΅£ f2 = s1 β‚œβŠ› f1 βŠ›α΅£ f2
s2: state (Ξ“ β–Άβ‚“ `+ B)
H2: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `+ B) =[ val ]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (s2 β‚œβŠ› f1) β‚›βŠ›α΅£ f2 = s2 β‚œβŠ› f1 βŠ›α΅£ f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 βŠ† Ξ“3
Whn (OrL (s_subst (Ξ“ β–Άβ‚“ `+ A) s1 (Ξ“2 β–Άβ‚“ `+ A) (a_shift1 f1) β‚›βŠ›α΅£ r_shift1 f2) (s_subst (Ξ“ β–Άβ‚“ `+ B) s2 (Ξ“2 β–Άβ‚“ `+ B) (a_shift1 f1) β‚›βŠ›α΅£ r_shift1 f2)) = Whn (OrL (s_subst (Ξ“ β–Άβ‚“ `+ A) s1 (Ξ“3 β–Άβ‚“ `+ A) (a_shift1 (f1 βŠ›α΅£ f2))) (s_subst (Ξ“ β–Άβ‚“ `+ B) s2 (Ξ“3 β–Άβ‚“ `+ B) (a_shift1 (f1 βŠ›α΅£ f2))))
Ξ“: t_ctx
A, B: pre_ty neg
s1: state (Ξ“ β–Άβ‚“ `- A)
H1: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `- A) =[ val ]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (s1 β‚œβŠ› f1) β‚›βŠ›α΅£ f2 = s1 β‚œβŠ› f1 βŠ›α΅£ f2
s2: state (Ξ“ β–Άβ‚“ `- B)
H2: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `- B) =[ val ]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (s2 β‚œβŠ› f1) β‚›βŠ›α΅£ f2 = s2 β‚œβŠ› f1 βŠ›α΅£ f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 βŠ† Ξ“3
Whn (AndR (s_subst (Ξ“ β–Άβ‚“ `- A) s1 (Ξ“2 β–Άβ‚“ `- A) (a_shift1 f1) β‚›βŠ›α΅£ r_shift1 f2) (s_subst (Ξ“ β–Άβ‚“ `- B) s2 (Ξ“2 β–Άβ‚“ `- B) (a_shift1 f1) β‚›βŠ›α΅£ r_shift1 f2)) = Whn (AndR (s_subst (Ξ“ β–Άβ‚“ `- A) s1 (Ξ“3 β–Άβ‚“ `- A) (a_shift1 (f1 βŠ›α΅£ f2))) (s_subst (Ξ“ β–Άβ‚“ `- B) s2 (Ξ“3 β–Άβ‚“ `- B) (a_shift1 (f1 βŠ›α΅£ f2))))
Ξ“: t_ctx
A, B: pre_ty neg
w: whn Ξ“ `- A
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ =[ val ]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (w `α΅₯βŠ› f1) α΅₯βŠ›α΅£ f2 = w `α΅₯βŠ› f1 βŠ›α΅£ f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 βŠ† Ξ“3
AndL1 ((w `α΅₯βŠ› f1) `α΅₯βŠ›α΅£ f2) = AndL1 (w `α΅₯βŠ› f1 βŠ›α΅£ f2)
Ξ“: t_ctx
A, B: pre_ty neg
w: whn Ξ“ `- B
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ =[ val ]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (w `α΅₯βŠ› f1) α΅₯βŠ›α΅£ f2 = w `α΅₯βŠ› f1 βŠ›α΅£ f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 βŠ† Ξ“3
AndL2 ((w `α΅₯βŠ› f1) `α΅₯βŠ›α΅£ f2) = AndL2 (w `α΅₯βŠ› f1 βŠ›α΅£ f2)
Ξ“: t_ctx
A: pre_ty neg
t: term Ξ“ `+ A
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ =[ val ]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (t `β‚œβŠ› f1) β‚œβŠ›α΅£ f2 = t `β‚œβŠ› f1 βŠ›α΅£ f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 βŠ† Ξ“3
ShiftPR ((t `β‚œβŠ› f1) β‚œβŠ›α΅£ f2) = ShiftPR (t `β‚œβŠ› f1 βŠ›α΅£ f2)
Ξ“: t_ctx
A: pre_ty neg
s: state (Ξ“ β–Άβ‚“ `+ A)
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `+ A) =[ val ]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (s β‚œβŠ› f1) β‚›βŠ›α΅£ f2 = s β‚œβŠ› f1 βŠ›α΅£ f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 βŠ† Ξ“3
Whn (ShiftPL (s_subst (Ξ“ β–Άβ‚“ `+ A) s (Ξ“2 β–Άβ‚“ `+ A) (a_shift1 f1) β‚›βŠ›α΅£ r_shift1 f2)) = Whn (ShiftPL (s_subst (Ξ“ β–Άβ‚“ `+ A) s (Ξ“3 β–Άβ‚“ `+ A) (a_shift1 (f1 βŠ›α΅£ f2))))
Ξ“: t_ctx
A: pre_ty pos
s: state (Ξ“ β–Άβ‚“ `- A)
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `- A) =[ val ]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (s β‚œβŠ› f1) β‚›βŠ›α΅£ f2 = s β‚œβŠ› f1 βŠ›α΅£ f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 βŠ† Ξ“3
Whn (ShiftNR (s_subst (Ξ“ β–Άβ‚“ `- A) s (Ξ“2 β–Άβ‚“ `- A) (a_shift1 f1) β‚›βŠ›α΅£ r_shift1 f2)) = Whn (ShiftNR (s_subst (Ξ“ β–Άβ‚“ `- A) s (Ξ“3 β–Άβ‚“ `- A) (a_shift1 (f1 βŠ›α΅£ f2))))
Ξ“: t_ctx
A: pre_ty pos
t: term Ξ“ `- A
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ =[ val ]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (t `β‚œβŠ› f1) β‚œβŠ›α΅£ f2 = t `β‚œβŠ› f1 βŠ›α΅£ f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 βŠ† Ξ“3
ShiftNL ((t `β‚œβŠ› f1) β‚œβŠ›α΅£ f2) = ShiftNL (t `β‚œβŠ› f1 βŠ›α΅£ f2)
Ξ“: t_ctx
A: pre_ty neg
w: whn Ξ“ `- A
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ =[ val ]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (w `α΅₯βŠ› f1) α΅₯βŠ›α΅£ f2 = w `α΅₯βŠ› f1 βŠ›α΅£ f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 βŠ† Ξ“3
NegPR ((w `α΅₯βŠ› f1) `α΅₯βŠ›α΅£ f2) = NegPR (w `α΅₯βŠ› f1 βŠ›α΅£ f2)
Ξ“: t_ctx
A: pre_ty neg
s: state (Ξ“ β–Άβ‚“ `- A)
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `- A) =[ val ]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (s β‚œβŠ› f1) β‚›βŠ›α΅£ f2 = s β‚œβŠ› f1 βŠ›α΅£ f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 βŠ† Ξ“3
Whn (NegPL (s_subst (Ξ“ β–Άβ‚“ `- A) s (Ξ“2 β–Άβ‚“ `- A) (a_shift1 f1) β‚›βŠ›α΅£ r_shift1 f2)) = Whn (NegPL (s_subst (Ξ“ β–Άβ‚“ `- A) s (Ξ“3 β–Άβ‚“ `- A) (a_shift1 (f1 βŠ›α΅£ f2))))
Ξ“: t_ctx
A: pre_ty pos
s: state (Ξ“ β–Άβ‚“ `+ A)
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `+ A) =[ val ]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (s β‚œβŠ› f1) β‚›βŠ›α΅£ f2 = s β‚œβŠ› f1 βŠ›α΅£ f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 βŠ† Ξ“3
Whn (NegNR (s_subst (Ξ“ β–Άβ‚“ `+ A) s (Ξ“2 β–Άβ‚“ `+ A) (a_shift1 f1) β‚›βŠ›α΅£ r_shift1 f2)) = Whn (NegNR (s_subst (Ξ“ β–Άβ‚“ `+ A) s (Ξ“3 β–Άβ‚“ `+ A) (a_shift1 (f1 βŠ›α΅£ f2))))
Ξ“: t_ctx
A: pre_ty pos
w: whn Ξ“ `+ A
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ =[ val ]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (w `α΅₯βŠ› f1) α΅₯βŠ›α΅£ f2 = w `α΅₯βŠ› f1 βŠ›α΅£ f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 βŠ† Ξ“3
NegNL ((w `α΅₯βŠ› f1) `α΅₯βŠ›α΅£ f2) = NegNL (w `α΅₯βŠ› f1 βŠ›α΅£ f2)
Ξ“: t_ctx
p: pol
A: pre_ty p
t1: term Ξ“ `+ A
H1: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ =[ val ]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (t1 `β‚œβŠ› f1) β‚œβŠ›α΅£ f2 = t1 `β‚œβŠ› f1 βŠ›α΅£ f2
t2: term Ξ“ `- A
H2: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ =[ val ]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (t2 `β‚œβŠ› f1) β‚œβŠ›α΅£ f2 = t2 `β‚œβŠ› f1 βŠ›α΅£ f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 βŠ† Ξ“3
Cut p ((t1 `β‚œβŠ› f1) β‚œβŠ›α΅£ f2) ((t2 `β‚œβŠ› f1) β‚œβŠ›α΅£ f2) = Cut p (t1 `β‚œβŠ› f1 βŠ›α΅£ f2) (t2 `β‚œβŠ› f1 βŠ›α΅£ f2)
Ξ“: t_ctx
A: ty
s: state (Ξ“ β–Άβ‚“ A †)
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ A †) =[ val ]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (s β‚œβŠ› f1) β‚›βŠ›α΅£ f2 = s β‚œβŠ› f1 βŠ›α΅£ f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 βŠ† Ξ“3

s_subst (Ξ“ β–Άβ‚“ A †) s (Ξ“2 β–Άβ‚“ A †) (a_shift1 f1) β‚›βŠ›α΅£ r_shift1 f2 = s_subst (Ξ“ β–Άβ‚“ A †) s (Ξ“3 β–Άβ‚“ A †) (a_shift1 (f1 βŠ›α΅£ f2))
Ξ“: t_ctx
A: pre_ty pos
t: term (Ξ“ β–Άβ‚“ `- A) `- A
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `- A) =[ val ]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (t `β‚œβŠ› f1) β‚œβŠ›α΅£ f2 = t `β‚œβŠ› f1 βŠ›α΅£ f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 βŠ† Ξ“3
(t `β‚œβŠ› a_shift1 f1) β‚œβŠ›α΅£ r_shift1 f2 = t `β‚œβŠ› a_shift1 (f1 βŠ›α΅£ f2)
Ξ“: t_ctx
A: pre_ty neg
t: term (Ξ“ β–Άβ‚“ `+ A) `+ A
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `+ A) =[ val ]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (t `β‚œβŠ› f1) β‚œβŠ›α΅£ f2 = t `β‚œβŠ› f1 βŠ›α΅£ f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 βŠ† Ξ“3
(t `β‚œβŠ› a_shift1 f1) β‚œβŠ›α΅£ r_shift1 f2 = t `β‚œβŠ› a_shift1 (f1 βŠ›α΅£ f2)
Ξ“: t_ctx
A, B: pre_ty pos
s: state (Ξ“ β–Άβ‚“ `+ A β–Άβ‚“ `+ B)
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `+ A β–Άβ‚“ `+ B) =[ val ]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (s β‚œβŠ› f1) β‚›βŠ›α΅£ f2 = s β‚œβŠ› f1 βŠ›α΅£ f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 βŠ† Ξ“3
s_subst (Ξ“ β–Άβ‚“ `+ A β–Άβ‚“ `+ B) s (Ξ“2 β–Άβ‚“ `+ A β–Άβ‚“ `+ B) (a_shift2 f1) β‚›βŠ›α΅£ r_shift2 f2 = s_subst (Ξ“ β–Άβ‚“ `+ A β–Άβ‚“ `+ B) s (Ξ“3 β–Άβ‚“ `+ A β–Άβ‚“ `+ B) (a_shift2 (f1 βŠ›α΅£ f2))
Ξ“: t_ctx
A, B: pre_ty neg
s: state (Ξ“ β–Άβ‚“ `- A β–Άβ‚“ `- B)
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `- A β–Άβ‚“ `- B) =[ val ]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (s β‚œβŠ› f1) β‚›βŠ›α΅£ f2 = s β‚œβŠ› f1 βŠ›α΅£ f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 βŠ† Ξ“3
s_subst (Ξ“ β–Άβ‚“ `- A β–Άβ‚“ `- B) s (Ξ“2 β–Άβ‚“ `- A β–Άβ‚“ `- B) (a_shift2 f1) β‚›βŠ›α΅£ r_shift2 f2 = s_subst (Ξ“ β–Άβ‚“ `- A β–Άβ‚“ `- B) s (Ξ“3 β–Άβ‚“ `- A β–Άβ‚“ `- B) (a_shift2 (f1 βŠ›α΅£ f2))
Ξ“: t_ctx
A, B: pre_ty pos
s1: state (Ξ“ β–Άβ‚“ `+ A)
H1: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `+ A) =[ val ]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (s1 β‚œβŠ› f1) β‚›βŠ›α΅£ f2 = s1 β‚œβŠ› f1 βŠ›α΅£ f2
s2: state (Ξ“ β–Άβ‚“ `+ B)
H2: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `+ B) =[ val ]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (s2 β‚œβŠ› f1) β‚›βŠ›α΅£ f2 = s2 β‚œβŠ› f1 βŠ›α΅£ f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 βŠ† Ξ“3
s_subst (Ξ“ β–Άβ‚“ `+ A) s1 (Ξ“2 β–Άβ‚“ `+ A) (a_shift1 f1) β‚›βŠ›α΅£ r_shift1 f2 = s_subst (Ξ“ β–Άβ‚“ `+ A) s1 (Ξ“3 β–Άβ‚“ `+ A) (a_shift1 (f1 βŠ›α΅£ f2))
Ξ“: t_ctx
A, B: pre_ty pos
s1: state (Ξ“ β–Άβ‚“ `+ A)
H1: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `+ A) =[ val ]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (s1 β‚œβŠ› f1) β‚›βŠ›α΅£ f2 = s1 β‚œβŠ› f1 βŠ›α΅£ f2
s2: state (Ξ“ β–Άβ‚“ `+ B)
H2: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `+ B) =[ val ]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (s2 β‚œβŠ› f1) β‚›βŠ›α΅£ f2 = s2 β‚œβŠ› f1 βŠ›α΅£ f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 βŠ† Ξ“3
s_subst (Ξ“ β–Άβ‚“ `+ B) s2 (Ξ“2 β–Άβ‚“ `+ B) (a_shift1 f1) β‚›βŠ›α΅£ r_shift1 f2 = s_subst (Ξ“ β–Άβ‚“ `+ B) s2 (Ξ“3 β–Άβ‚“ `+ B) (a_shift1 (f1 βŠ›α΅£ f2))
Ξ“: t_ctx
A, B: pre_ty neg
s1: state (Ξ“ β–Άβ‚“ `- A)
H1: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `- A) =[ val ]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (s1 β‚œβŠ› f1) β‚›βŠ›α΅£ f2 = s1 β‚œβŠ› f1 βŠ›α΅£ f2
s2: state (Ξ“ β–Άβ‚“ `- B)
H2: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `- B) =[ val ]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (s2 β‚œβŠ› f1) β‚›βŠ›α΅£ f2 = s2 β‚œβŠ› f1 βŠ›α΅£ f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 βŠ† Ξ“3
s_subst (Ξ“ β–Άβ‚“ `- A) s1 (Ξ“2 β–Άβ‚“ `- A) (a_shift1 f1) β‚›βŠ›α΅£ r_shift1 f2 = s_subst (Ξ“ β–Άβ‚“ `- A) s1 (Ξ“3 β–Άβ‚“ `- A) (a_shift1 (f1 βŠ›α΅£ f2))
Ξ“: t_ctx
A, B: pre_ty neg
s1: state (Ξ“ β–Άβ‚“ `- A)
H1: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `- A) =[ val ]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (s1 β‚œβŠ› f1) β‚›βŠ›α΅£ f2 = s1 β‚œβŠ› f1 βŠ›α΅£ f2
s2: state (Ξ“ β–Άβ‚“ `- B)
H2: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `- B) =[ val ]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (s2 β‚œβŠ› f1) β‚›βŠ›α΅£ f2 = s2 β‚œβŠ› f1 βŠ›α΅£ f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 βŠ† Ξ“3
s_subst (Ξ“ β–Άβ‚“ `- B) s2 (Ξ“2 β–Άβ‚“ `- B) (a_shift1 f1) β‚›βŠ›α΅£ r_shift1 f2 = s_subst (Ξ“ β–Άβ‚“ `- B) s2 (Ξ“3 β–Άβ‚“ `- B) (a_shift1 (f1 βŠ›α΅£ f2))
Ξ“: t_ctx
A: pre_ty neg
s: state (Ξ“ β–Άβ‚“ `+ A)
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `+ A) =[ val ]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (s β‚œβŠ› f1) β‚›βŠ›α΅£ f2 = s β‚œβŠ› f1 βŠ›α΅£ f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 βŠ† Ξ“3
s_subst (Ξ“ β–Άβ‚“ `+ A) s (Ξ“2 β–Άβ‚“ `+ A) (a_shift1 f1) β‚›βŠ›α΅£ r_shift1 f2 = s_subst (Ξ“ β–Άβ‚“ `+ A) s (Ξ“3 β–Άβ‚“ `+ A) (a_shift1 (f1 βŠ›α΅£ f2))
Ξ“: t_ctx
A: pre_ty pos
s: state (Ξ“ β–Άβ‚“ `- A)
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `- A) =[ val ]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (s β‚œβŠ› f1) β‚›βŠ›α΅£ f2 = s β‚œβŠ› f1 βŠ›α΅£ f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 βŠ† Ξ“3
s_subst (Ξ“ β–Άβ‚“ `- A) s (Ξ“2 β–Άβ‚“ `- A) (a_shift1 f1) β‚›βŠ›α΅£ r_shift1 f2 = s_subst (Ξ“ β–Άβ‚“ `- A) s (Ξ“3 β–Άβ‚“ `- A) (a_shift1 (f1 βŠ›α΅£ f2))
Ξ“: t_ctx
A: pre_ty neg
s: state (Ξ“ β–Άβ‚“ `- A)
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `- A) =[ val ]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (s β‚œβŠ› f1) β‚›βŠ›α΅£ f2 = s β‚œβŠ› f1 βŠ›α΅£ f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 βŠ† Ξ“3
s_subst (Ξ“ β–Άβ‚“ `- A) s (Ξ“2 β–Άβ‚“ `- A) (a_shift1 f1) β‚›βŠ›α΅£ r_shift1 f2 = s_subst (Ξ“ β–Άβ‚“ `- A) s (Ξ“3 β–Άβ‚“ `- A) (a_shift1 (f1 βŠ›α΅£ f2))
Ξ“: t_ctx
A: pre_ty pos
s: state (Ξ“ β–Άβ‚“ `+ A)
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `+ A) =[ val ]> Ξ“2) (f2 : Ξ“2 βŠ† Ξ“3), (s β‚œβŠ› f1) β‚›βŠ›α΅£ f2 = s β‚œβŠ› f1 βŠ›α΅£ f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 βŠ† Ξ“3
s_subst (Ξ“ β–Άβ‚“ `+ A) s (Ξ“2 β–Άβ‚“ `+ A) (a_shift1 f1) β‚›βŠ›α΅£ r_shift1 f2 = s_subst (Ξ“ β–Άβ‚“ `+ A) s (Ξ“3 β–Άβ‚“ `+ A) (a_shift1 (f1 βŠ›α΅£ f2))
all: first [ rewrite a_shift1_ren_r | rewrite a_shift2_ren_r ]; auto. Qed.
Ξ“1, Ξ“2, Ξ“3: t_ctx
f1: Ξ“1 =[ val ]> Ξ“2
f2: Ξ“2 βŠ† Ξ“3
A: ty
t: term Ξ“1 A

(t `β‚œβŠ› f1) β‚œβŠ›α΅£ f2 = t `β‚œβŠ› f1 βŠ›α΅£ f2
now apply (term_ind_mut _ _ _ ren_sub_prf). Qed.
Ξ“1, Ξ“2, Ξ“3: t_ctx
f1: Ξ“1 =[ val ]> Ξ“2
f2: Ξ“2 βŠ† Ξ“3
A: ty
v: whn Ξ“1 A

(v `α΅₯βŠ› f1) α΅₯βŠ›α΅£ f2 = v `α΅₯βŠ› f1 βŠ›α΅£ f2
now apply (whn_ind_mut _ _ _ ren_sub_prf). Qed.
Ξ“1, Ξ“2, Ξ“3: t_ctx
f1: Ξ“1 =[ val ]> Ξ“2
f2: Ξ“2 βŠ† Ξ“3
s: state Ξ“1

(s β‚œβŠ› f1) β‚›βŠ›α΅£ f2 = s β‚œβŠ› f1 βŠ›α΅£ f2
now apply (state_ind_mut _ _ _ ren_sub_prf). Qed.
Ξ“1, Ξ“2, Ξ“3: t_ctx
f1: Ξ“1 =[ val ]> Ξ“2
f2: Ξ“2 βŠ† Ξ“3
A: ty
v: val Ξ“1 A

(v α΅₯βŠ› f1) α΅₯βŠ›α΅£ f2 = v α΅₯βŠ› f1 βŠ›α΅£ f2
Ξ“1, Ξ“2, Ξ“3: t_ctx
f1: Ξ“1 =[ val ]> Ξ“2
f2: Ξ“2 βŠ† Ξ“3
p: pre_ty pos
v: val Ξ“1 `+ p

(v α΅₯βŠ› f1) α΅₯βŠ›α΅£ f2 = v α΅₯βŠ› f1 βŠ›α΅£ f2
Ξ“1, Ξ“2, Ξ“3: t_ctx
f1: Ξ“1 =[ val ]> Ξ“2
f2: Ξ“2 βŠ† Ξ“3
p: pre_ty neg
v: val Ξ“1 `+ p
(v α΅₯βŠ› f1) α΅₯βŠ›α΅£ f2 = v α΅₯βŠ› f1 βŠ›α΅£ f2
Ξ“1, Ξ“2, Ξ“3: t_ctx
f1: Ξ“1 =[ val ]> Ξ“2
f2: Ξ“2 βŠ† Ξ“3
p: pre_ty pos
v: val Ξ“1 `- p
(v α΅₯βŠ› f1) α΅₯βŠ›α΅£ f2 = v α΅₯βŠ› f1 βŠ›α΅£ f2
Ξ“1, Ξ“2, Ξ“3: t_ctx
f1: Ξ“1 =[ val ]> Ξ“2
f2: Ξ“2 βŠ† Ξ“3
p: pre_ty neg
v: val Ξ“1 `- p
(v α΅₯βŠ› f1) α΅₯βŠ›α΅£ f2 = v α΅₯βŠ› f1 βŠ›α΅£ f2
Ξ“1, Ξ“2, Ξ“3: t_ctx
f1: Ξ“1 =[ val ]> Ξ“2
f2: Ξ“2 βŠ† Ξ“3
p: pre_ty pos
v: val Ξ“1 `+ p

(v α΅₯βŠ› f1) α΅₯βŠ›α΅£ f2 = v α΅₯βŠ› f1 βŠ›α΅£ f2
now apply w_ren_sub.
Ξ“1, Ξ“2, Ξ“3: t_ctx
f1: Ξ“1 =[ val ]> Ξ“2
f2: Ξ“2 βŠ† Ξ“3
p: pre_ty neg
v: val Ξ“1 `+ p

(v α΅₯βŠ› f1) α΅₯βŠ›α΅£ f2 = v α΅₯βŠ› f1 βŠ›α΅£ f2
now apply t_ren_sub.
Ξ“1, Ξ“2, Ξ“3: t_ctx
f1: Ξ“1 =[ val ]> Ξ“2
f2: Ξ“2 βŠ† Ξ“3
p: pre_ty pos
v: val Ξ“1 `- p

(v α΅₯βŠ› f1) α΅₯βŠ›α΅£ f2 = v α΅₯βŠ› f1 βŠ›α΅£ f2
now apply t_ren_sub.
Ξ“1, Ξ“2, Ξ“3: t_ctx
f1: Ξ“1 =[ val ]> Ξ“2
f2: Ξ“2 βŠ† Ξ“3
p: pre_ty neg
v: val Ξ“1 `- p

(v α΅₯βŠ› f1) α΅₯βŠ›α΅£ f2 = v α΅₯βŠ› f1 βŠ›α΅£ f2
now apply w_ren_sub. Qed. Definition t_sub_ren_P Ξ“1 A (t : term Ξ“1 A) : Prop := forall Ξ“2 Ξ“3 (f1 : Ξ“1 βŠ† Ξ“2) (f2 : Ξ“2 =[val]> Ξ“3), (t β‚œβŠ›α΅£ f1) `β‚œβŠ› f2 = t `β‚œβŠ› (f1 α΅£βŠ› f2). Definition w_sub_ren_P Ξ“1 A (v : whn Ξ“1 A) : Prop := forall Ξ“2 Ξ“3 (f1 : Ξ“1 βŠ† Ξ“2) (f2 : Ξ“2 =[val]> Ξ“3), (v `α΅₯βŠ›α΅£ f1) `α΅₯βŠ› f2 = v `α΅₯βŠ› (f1 α΅£βŠ› f2). Definition s_sub_ren_P Ξ“1 (s : state Ξ“1) : Prop := forall Ξ“2 Ξ“3 (f1 : Ξ“1 βŠ† Ξ“2) (f2 : Ξ“2 =[val]> Ξ“3), (s β‚›βŠ›α΅£ f1) β‚œβŠ› f2 = s β‚œβŠ› (f1 α΅£βŠ› f2).

syn_ind_args t_sub_ren_P w_sub_ren_P s_sub_ren_P

forall (Ξ“ : t_ctx) (A : ty) (s : state (Ξ“ β–Άβ‚“ A †)), s_sub_ren_P (Ξ“ β–Άβ‚“ A †) s -> t_sub_ren_P Ξ“ A (Mu s)

forall (Ξ“ : t_ctx) (A : pre_ty pos) (t : term (Ξ“ β–Άβ‚“ `- A) `- A), t_sub_ren_P (Ξ“ β–Άβ‚“ `- A) `- A t -> t_sub_ren_P Ξ“ `- A (RecL t)

forall (Ξ“ : t_ctx) (A : pre_ty neg) (t : term (Ξ“ β–Άβ‚“ `+ A) `+ A), t_sub_ren_P (Ξ“ β–Άβ‚“ `+ A) `+ A t -> t_sub_ren_P Ξ“ `+ A (RecR t)

forall (Ξ“ : t_ctx) (A : ty) (w : whn Ξ“ A), w_sub_ren_P Ξ“ A w -> t_sub_ren_P Ξ“ A (Whn w)

forall (Ξ“ : t_ctx) (A : ty) (h : Ξ“ βˆ‹ A), w_sub_ren_P Ξ“ A (Var h)

forall Ξ“ : t_ctx, w_sub_ren_P Ξ“ `- 0 ZerL

forall Ξ“ : t_ctx, w_sub_ren_P Ξ“ `+ ⊀ TopR

forall Ξ“ : t_ctx, w_sub_ren_P Ξ“ `+ 1 OneR

forall (Ξ“ : t_ctx) (s : state Ξ“), s_sub_ren_P Ξ“ s -> w_sub_ren_P Ξ“ `- 1 (OneL s)

forall (Ξ“ : t_ctx) (s : state Ξ“), s_sub_ren_P Ξ“ s -> w_sub_ren_P Ξ“ `+ βŠ₯ (BotR s)

forall Ξ“ : t_ctx, w_sub_ren_P Ξ“ `- βŠ₯ BotL

forall (Ξ“ : t_ctx) (A B : pre_ty pos) (w1 : whn Ξ“ `+ A), w_sub_ren_P Ξ“ `+ A w1 -> forall w2 : whn Ξ“ `+ B, w_sub_ren_P Ξ“ `+ B w2 -> w_sub_ren_P Ξ“ `+ (A βŠ— B) (TenR w1 w2)

forall (Ξ“ : t_ctx) (A B : pre_ty pos) (s : state (Ξ“ β–Άβ‚“ `+ A β–Άβ‚“ `+ B)), s_sub_ren_P (Ξ“ β–Άβ‚“ `+ A β–Άβ‚“ `+ B) s -> w_sub_ren_P Ξ“ `- (A βŠ— B) (TenL s)

forall (Ξ“ : t_ctx) (A B : pre_ty neg) (s : state (Ξ“ β–Άβ‚“ `- A β–Άβ‚“ `- B)), s_sub_ren_P (Ξ“ β–Άβ‚“ `- A β–Άβ‚“ `- B) s -> w_sub_ren_P Ξ“ `+ (A β…‹ B) (ParR s)

forall (Ξ“ : t_ctx) (A B : pre_ty neg) (w1 : whn Ξ“ `- A), w_sub_ren_P Ξ“ `- A w1 -> forall w2 : whn Ξ“ `- B, w_sub_ren_P Ξ“ `- B w2 -> w_sub_ren_P Ξ“ `- (A β…‹ B) (ParL w1 w2)

forall (Ξ“ : t_ctx) (A B : pre_ty pos) (w : whn Ξ“ `+ A), w_sub_ren_P Ξ“ `+ A w -> w_sub_ren_P Ξ“ `+ (A βŠ• B) (OrR1 w)

forall (Ξ“ : t_ctx) (A B : pre_ty pos) (w : whn Ξ“ `+ B), w_sub_ren_P Ξ“ `+ B w -> w_sub_ren_P Ξ“ `+ (A βŠ• B) (OrR2 w)

forall (Ξ“ : t_ctx) (A B : pre_ty pos) (s1 : state (Ξ“ β–Άβ‚“ `+ A)), s_sub_ren_P (Ξ“ β–Άβ‚“ `+ A) s1 -> forall s2 : state (Ξ“ β–Άβ‚“ `+ B), s_sub_ren_P (Ξ“ β–Άβ‚“ `+ B) s2 -> w_sub_ren_P Ξ“ `- (A βŠ• B) (OrL s1 s2)

forall (Ξ“ : t_ctx) (A B : pre_ty neg) (s1 : state (Ξ“ β–Άβ‚“ `- A)), s_sub_ren_P (Ξ“ β–Άβ‚“ `- A) s1 -> forall s2 : state (Ξ“ β–Άβ‚“ `- B), s_sub_ren_P (Ξ“ β–Άβ‚“ `- B) s2 -> w_sub_ren_P Ξ“ `+ (A & B) (AndR s1 s2)

forall (Ξ“ : t_ctx) (A B : pre_ty neg) (w : whn Ξ“ `- A), w_sub_ren_P Ξ“ `- A w -> w_sub_ren_P Ξ“ `- (A & B) (AndL1 w)

forall (Ξ“ : t_ctx) (A B : pre_ty neg) (w : whn Ξ“ `- B), w_sub_ren_P Ξ“ `- B w -> w_sub_ren_P Ξ“ `- (A & B) (AndL2 w)

forall (Ξ“ : t_ctx) (A : pre_ty neg) (t : term Ξ“ `+ A), t_sub_ren_P Ξ“ `+ A t -> w_sub_ren_P Ξ“ `+ (↓ A) (ShiftPR t)

forall (Ξ“ : t_ctx) (A : pre_ty neg) (s : state (Ξ“ β–Άβ‚“ `+ A)), s_sub_ren_P (Ξ“ β–Άβ‚“ `+ A) s -> w_sub_ren_P Ξ“ `- (↓ A) (ShiftPL s)

forall (Ξ“ : t_ctx) (A : pre_ty pos) (s : state (Ξ“ β–Άβ‚“ `- A)), s_sub_ren_P (Ξ“ β–Άβ‚“ `- A) s -> w_sub_ren_P Ξ“ `+ (↑ A) (ShiftNR s)

forall (Ξ“ : t_ctx) (A : pre_ty pos) (t : term Ξ“ `- A), t_sub_ren_P Ξ“ `- A t -> w_sub_ren_P Ξ“ `- (↑ A) (ShiftNL t)

forall (Ξ“ : t_ctx) (A : pre_ty neg) (w : whn Ξ“ `- A), w_sub_ren_P Ξ“ `- A w -> w_sub_ren_P Ξ“ `+ (βŠ– A) (NegPR w)

forall (Ξ“ : t_ctx) (A : pre_ty neg) (s : state (Ξ“ β–Άβ‚“ `- A)), s_sub_ren_P (Ξ“ β–Άβ‚“ `- A) s -> w_sub_ren_P Ξ“ `- (βŠ– A) (NegPL s)

forall (Ξ“ : t_ctx) (A : pre_ty pos) (s : state (Ξ“ β–Άβ‚“ `+ A)), s_sub_ren_P (Ξ“ β–Άβ‚“ `+ A) s -> w_sub_ren_P Ξ“ `+ (Β¬ A) (NegNR s)

forall (Ξ“ : t_ctx) (A : pre_ty pos) (w : whn Ξ“ `+ A), w_sub_ren_P Ξ“ `+ A w -> w_sub_ren_P Ξ“ `- (Β¬ A) (NegNL w)

forall (Ξ“ : t_ctx) (p : pol) (A : pre_ty p) (t1 : term Ξ“ `+ A), t_sub_ren_P Ξ“ `+ A t1 -> forall t2 : term Ξ“ `- A, t_sub_ren_P Ξ“ `- A t2 -> s_sub_ren_P Ξ“ (Cut p t1 t2)

forall (Ξ“ : t_ctx) (A : ty) (s : state (Ξ“ β–Άβ‚“ A †)), (forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ A †) βŠ† Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), s β‚›βŠ›α΅£ f1 β‚œβŠ› f2 = s β‚œβŠ› f1 α΅£βŠ› f2) -> forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ βŠ† Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), Mu s β‚œβŠ›α΅£ f1 `β‚œβŠ› f2 = Mu s `β‚œβŠ› f1 α΅£βŠ› f2

forall (Ξ“ : t_ctx) (A : pre_ty pos) (t : term (Ξ“ β–Άβ‚“ `- A) `- A), (forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `- A) βŠ† Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), t β‚œβŠ›α΅£ f1 `β‚œβŠ› f2 = t `β‚œβŠ› f1 α΅£βŠ› f2) -> forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ βŠ† Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), RecL t β‚œβŠ›α΅£ f1 `β‚œβŠ› f2 = RecL t `β‚œβŠ› f1 α΅£βŠ› f2

forall (Ξ“ : t_ctx) (A : pre_ty neg) (t : term (Ξ“ β–Άβ‚“ `+ A) `+ A), (forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `+ A) βŠ† Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), t β‚œβŠ›α΅£ f1 `β‚œβŠ› f2 = t `β‚œβŠ› f1 α΅£βŠ› f2) -> forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ βŠ† Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), RecR t β‚œβŠ›α΅£ f1 `β‚œβŠ› f2 = RecR t `β‚œβŠ› f1 α΅£βŠ› f2

forall (Ξ“ : t_ctx) (A : ty) (w : whn Ξ“ A), (forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ βŠ† Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), w `α΅₯βŠ›α΅£ f1 `α΅₯βŠ› f2 = w `α΅₯βŠ› f1 α΅£βŠ› f2) -> forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ βŠ† Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), Whn w β‚œβŠ›α΅£ f1 `β‚œβŠ› f2 = Whn w `β‚œβŠ› f1 α΅£βŠ› f2

forall (Ξ“ : t_ctx) (A : ty) (h : Ξ“ βˆ‹ A) (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ βŠ† Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), Var h `α΅₯βŠ›α΅£ f1 `α΅₯βŠ› f2 = Var h `α΅₯βŠ› f1 α΅£βŠ› f2

forall (Ξ“ Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ βŠ† Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), ZerL `α΅₯βŠ›α΅£ f1 `α΅₯βŠ› f2 = ZerL `α΅₯βŠ› f1 α΅£βŠ› f2

forall (Ξ“ Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ βŠ† Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), TopR `α΅₯βŠ›α΅£ f1 `α΅₯βŠ› f2 = TopR `α΅₯βŠ› f1 α΅£βŠ› f2

forall (Ξ“ Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ βŠ† Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), OneR `α΅₯βŠ›α΅£ f1 `α΅₯βŠ› f2 = OneR `α΅₯βŠ› f1 α΅£βŠ› f2

forall (Ξ“ : t_ctx) (s : state Ξ“), (forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ βŠ† Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), s β‚›βŠ›α΅£ f1 β‚œβŠ› f2 = s β‚œβŠ› f1 α΅£βŠ› f2) -> forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ βŠ† Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), OneL s `α΅₯βŠ›α΅£ f1 `α΅₯βŠ› f2 = OneL s `α΅₯βŠ› f1 α΅£βŠ› f2

forall (Ξ“ : t_ctx) (s : state Ξ“), (forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ βŠ† Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), s β‚›βŠ›α΅£ f1 β‚œβŠ› f2 = s β‚œβŠ› f1 α΅£βŠ› f2) -> forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ βŠ† Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), BotR s `α΅₯βŠ›α΅£ f1 `α΅₯βŠ› f2 = BotR s `α΅₯βŠ› f1 α΅£βŠ› f2

forall (Ξ“ Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ βŠ† Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), BotL `α΅₯βŠ›α΅£ f1 `α΅₯βŠ› f2 = BotL `α΅₯βŠ› f1 α΅£βŠ› f2

forall (Ξ“ : t_ctx) (A B : pre_ty pos) (w1 : whn Ξ“ `+ A), (forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ βŠ† Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), w1 `α΅₯βŠ›α΅£ f1 `α΅₯βŠ› f2 = w1 `α΅₯βŠ› f1 α΅£βŠ› f2) -> forall w2 : whn Ξ“ `+ B, (forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ βŠ† Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), w2 `α΅₯βŠ›α΅£ f1 `α΅₯βŠ› f2 = w2 `α΅₯βŠ› f1 α΅£βŠ› f2) -> forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ βŠ† Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), TenR w1 w2 `α΅₯βŠ›α΅£ f1 `α΅₯βŠ› f2 = TenR w1 w2 `α΅₯βŠ› f1 α΅£βŠ› f2

forall (Ξ“ : t_ctx) (A B : pre_ty pos) (s : state (Ξ“ β–Άβ‚“ `+ A β–Άβ‚“ `+ B)), (forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `+ A β–Άβ‚“ `+ B) βŠ† Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), s β‚›βŠ›α΅£ f1 β‚œβŠ› f2 = s β‚œβŠ› f1 α΅£βŠ› f2) -> forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ βŠ† Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), TenL s `α΅₯βŠ›α΅£ f1 `α΅₯βŠ› f2 = TenL s `α΅₯βŠ› f1 α΅£βŠ› f2

forall (Ξ“ : t_ctx) (A B : pre_ty neg) (s : state (Ξ“ β–Άβ‚“ `- A β–Άβ‚“ `- B)), (forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `- A β–Άβ‚“ `- B) βŠ† Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), s β‚›βŠ›α΅£ f1 β‚œβŠ› f2 = s β‚œβŠ› f1 α΅£βŠ› f2) -> forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ βŠ† Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), ParR s `α΅₯βŠ›α΅£ f1 `α΅₯βŠ› f2 = ParR s `α΅₯βŠ› f1 α΅£βŠ› f2

forall (Ξ“ : t_ctx) (A B : pre_ty neg) (w1 : whn Ξ“ `- A), (forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ βŠ† Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), w1 `α΅₯βŠ›α΅£ f1 `α΅₯βŠ› f2 = w1 `α΅₯βŠ› f1 α΅£βŠ› f2) -> forall w2 : whn Ξ“ `- B, (forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ βŠ† Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), w2 `α΅₯βŠ›α΅£ f1 `α΅₯βŠ› f2 = w2 `α΅₯βŠ› f1 α΅£βŠ› f2) -> forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ βŠ† Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), ParL w1 w2 `α΅₯βŠ›α΅£ f1 `α΅₯βŠ› f2 = ParL w1 w2 `α΅₯βŠ› f1 α΅£βŠ› f2

forall (Ξ“ : t_ctx) (A B : pre_ty pos) (w : whn Ξ“ `+ A), (forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ βŠ† Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), w `α΅₯βŠ›α΅£ f1 `α΅₯βŠ› f2 = w `α΅₯βŠ› f1 α΅£βŠ› f2) -> forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ βŠ† Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), OrR1 w `α΅₯βŠ›α΅£ f1 `α΅₯βŠ› f2 = OrR1 w `α΅₯βŠ› f1 α΅£βŠ› f2

forall (Ξ“ : t_ctx) (A B : pre_ty pos) (w : whn Ξ“ `+ B), (forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ βŠ† Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), w `α΅₯βŠ›α΅£ f1 `α΅₯βŠ› f2 = w `α΅₯βŠ› f1 α΅£βŠ› f2) -> forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ βŠ† Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), OrR2 w `α΅₯βŠ›α΅£ f1 `α΅₯βŠ› f2 = OrR2 w `α΅₯βŠ› f1 α΅£βŠ› f2

forall (Ξ“ : t_ctx) (A B : pre_ty pos) (s1 : state (Ξ“ β–Άβ‚“ `+ A)), (forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `+ A) βŠ† Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), s1 β‚›βŠ›α΅£ f1 β‚œβŠ› f2 = s1 β‚œβŠ› f1 α΅£βŠ› f2) -> forall s2 : state (Ξ“ β–Άβ‚“ `+ B), (forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `+ B) βŠ† Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), s2 β‚›βŠ›α΅£ f1 β‚œβŠ› f2 = s2 β‚œβŠ› f1 α΅£βŠ› f2) -> forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ βŠ† Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), OrL s1 s2 `α΅₯βŠ›α΅£ f1 `α΅₯βŠ› f2 = OrL s1 s2 `α΅₯βŠ› f1 α΅£βŠ› f2

forall (Ξ“ : t_ctx) (A B : pre_ty neg) (s1 : state (Ξ“ β–Άβ‚“ `- A)), (forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `- A) βŠ† Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), s1 β‚›βŠ›α΅£ f1 β‚œβŠ› f2 = s1 β‚œβŠ› f1 α΅£βŠ› f2) -> forall s2 : state (Ξ“ β–Άβ‚“ `- B), (forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `- B) βŠ† Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), s2 β‚›βŠ›α΅£ f1 β‚œβŠ› f2 = s2 β‚œβŠ› f1 α΅£βŠ› f2) -> forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ βŠ† Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), AndR s1 s2 `α΅₯βŠ›α΅£ f1 `α΅₯βŠ› f2 = AndR s1 s2 `α΅₯βŠ› f1 α΅£βŠ› f2

forall (Ξ“ : t_ctx) (A B : pre_ty neg) (w : whn Ξ“ `- A), (forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ βŠ† Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), w `α΅₯βŠ›α΅£ f1 `α΅₯βŠ› f2 = w `α΅₯βŠ› f1 α΅£βŠ› f2) -> forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ βŠ† Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), AndL1 w `α΅₯βŠ›α΅£ f1 `α΅₯βŠ› f2 = AndL1 w `α΅₯βŠ› f1 α΅£βŠ› f2

forall (Ξ“ : t_ctx) (A B : pre_ty neg) (w : whn Ξ“ `- B), (forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ βŠ† Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), w `α΅₯βŠ›α΅£ f1 `α΅₯βŠ› f2 = w `α΅₯βŠ› f1 α΅£βŠ› f2) -> forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ βŠ† Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), AndL2 w `α΅₯βŠ›α΅£ f1 `α΅₯βŠ› f2 = AndL2 w `α΅₯βŠ› f1 α΅£βŠ› f2

forall (Ξ“ : t_ctx) (A : pre_ty neg) (t : term Ξ“ `+ A), (forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ βŠ† Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), t β‚œβŠ›α΅£ f1 `β‚œβŠ› f2 = t `β‚œβŠ› f1 α΅£βŠ› f2) -> forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ βŠ† Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), ShiftPR t `α΅₯βŠ›α΅£ f1 `α΅₯βŠ› f2 = ShiftPR t `α΅₯βŠ› f1 α΅£βŠ› f2

forall (Ξ“ : t_ctx) (A : pre_ty neg) (s : state (Ξ“ β–Άβ‚“ `+ A)), (forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `+ A) βŠ† Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), s β‚›βŠ›α΅£ f1 β‚œβŠ› f2 = s β‚œβŠ› f1 α΅£βŠ› f2) -> forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ βŠ† Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), ShiftPL s `α΅₯βŠ›α΅£ f1 `α΅₯βŠ› f2 = ShiftPL s `α΅₯βŠ› f1 α΅£βŠ› f2

forall (Ξ“ : t_ctx) (A : pre_ty pos) (s : state (Ξ“ β–Άβ‚“ `- A)), (forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `- A) βŠ† Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), s β‚›βŠ›α΅£ f1 β‚œβŠ› f2 = s β‚œβŠ› f1 α΅£βŠ› f2) -> forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ βŠ† Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), ShiftNR s `α΅₯βŠ›α΅£ f1 `α΅₯βŠ› f2 = ShiftNR s `α΅₯βŠ› f1 α΅£βŠ› f2

forall (Ξ“ : t_ctx) (A : pre_ty pos) (t : term Ξ“ `- A), (forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ βŠ† Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), t β‚œβŠ›α΅£ f1 `β‚œβŠ› f2 = t `β‚œβŠ› f1 α΅£βŠ› f2) -> forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ βŠ† Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), ShiftNL t `α΅₯βŠ›α΅£ f1 `α΅₯βŠ› f2 = ShiftNL t `α΅₯βŠ› f1 α΅£βŠ› f2

forall (Ξ“ : t_ctx) (A : pre_ty neg) (w : whn Ξ“ `- A), (forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ βŠ† Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), w `α΅₯βŠ›α΅£ f1 `α΅₯βŠ› f2 = w `α΅₯βŠ› f1 α΅£βŠ› f2) -> forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ βŠ† Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), NegPR w `α΅₯βŠ›α΅£ f1 `α΅₯βŠ› f2 = NegPR w `α΅₯βŠ› f1 α΅£βŠ› f2

forall (Ξ“ : t_ctx) (A : pre_ty neg) (s : state (Ξ“ β–Άβ‚“ `- A)), (forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `- A) βŠ† Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), s β‚›βŠ›α΅£ f1 β‚œβŠ› f2 = s β‚œβŠ› f1 α΅£βŠ› f2) -> forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ βŠ† Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), NegPL s `α΅₯βŠ›α΅£ f1 `α΅₯βŠ› f2 = NegPL s `α΅₯βŠ› f1 α΅£βŠ› f2

forall (Ξ“ : t_ctx) (A : pre_ty pos) (s : state (Ξ“ β–Άβ‚“ `+ A)), (forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `+ A) βŠ† Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), s β‚›βŠ›α΅£ f1 β‚œβŠ› f2 = s β‚œβŠ› f1 α΅£βŠ› f2) -> forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ βŠ† Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), NegNR s `α΅₯βŠ›α΅£ f1 `α΅₯βŠ› f2 = NegNR s `α΅₯βŠ› f1 α΅£βŠ› f2

forall (Ξ“ : t_ctx) (A : pre_ty pos) (w : whn Ξ“ `+ A), (forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ βŠ† Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), w `α΅₯βŠ›α΅£ f1 `α΅₯βŠ› f2 = w `α΅₯βŠ› f1 α΅£βŠ› f2) -> forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ βŠ† Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), NegNL w `α΅₯βŠ›α΅£ f1 `α΅₯βŠ› f2 = NegNL w `α΅₯βŠ› f1 α΅£βŠ› f2

forall (Ξ“ : t_ctx) (p : pol) (A : pre_ty p) (t1 : term Ξ“ `+ A), (forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ βŠ† Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), t1 β‚œβŠ›α΅£ f1 `β‚œβŠ› f2 = t1 `β‚œβŠ› f1 α΅£βŠ› f2) -> forall t2 : term Ξ“ `- A, (forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ βŠ† Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), t2 β‚œβŠ›α΅£ f1 `β‚œβŠ› f2 = t2 `β‚œβŠ› f1 α΅£βŠ› f2) -> forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ βŠ† Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), Cut p t1 t2 β‚›βŠ›α΅£ f1 β‚œβŠ› f2 = Cut p t1 t2 β‚œβŠ› f1 α΅£βŠ› f2
Ξ“: t_ctx
A: ty
s: state (Ξ“ β–Άβ‚“ A †)
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ A †) βŠ† Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), s β‚›βŠ›α΅£ f1 β‚œβŠ› f2 = s β‚œβŠ› f1 α΅£βŠ› f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ βŠ† Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3

Mu (s_subst (Ξ“2 β–Άβ‚“ A †) (s β‚›βŠ›α΅£ r_shift1 f1) (Ξ“3 β–Άβ‚“ A †) (a_shift1 f2)) = Mu (s_subst (Ξ“ β–Άβ‚“ A †) s (Ξ“3 β–Άβ‚“ A †) (a_shift1 (f1 α΅£βŠ› f2)))
Ξ“: t_ctx
A: pre_ty pos
t: term (Ξ“ β–Άβ‚“ `- A) `- A
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `- A) βŠ† Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), t β‚œβŠ›α΅£ f1 `β‚œβŠ› f2 = t `β‚œβŠ› f1 α΅£βŠ› f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ βŠ† Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3
RecL (t β‚œβŠ›α΅£ r_shift1 f1 `β‚œβŠ› a_shift1 f2) = RecL (t `β‚œβŠ› a_shift1 (f1 α΅£βŠ› f2))
Ξ“: t_ctx
A: pre_ty neg
t: term (Ξ“ β–Άβ‚“ `+ A) `+ A
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `+ A) βŠ† Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), t β‚œβŠ›α΅£ f1 `β‚œβŠ› f2 = t `β‚œβŠ› f1 α΅£βŠ› f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ βŠ† Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3
RecR (t β‚œβŠ›α΅£ r_shift1 f1 `β‚œβŠ› a_shift1 f2) = RecR (t `β‚œβŠ› a_shift1 (f1 α΅£βŠ› f2))
Ξ“: t_ctx
A: ty
w: whn Ξ“ A
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ βŠ† Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), w `α΅₯βŠ›α΅£ f1 `α΅₯βŠ› f2 = w `α΅₯βŠ› f1 α΅£βŠ› f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ βŠ† Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3
w `α΅₯βŠ›α΅£ f1 `α΅₯βŠ› f2 = w `α΅₯βŠ› f1 α΅£βŠ› f2
Ξ“: t_ctx
A: ty
h: Ξ“ βˆ‹ A
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ βŠ† Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3
f2 A (f1 A h) = f2 A (f1 A h)
Ξ“, Ξ“2, Ξ“3: t_ctx
f1: Ξ“ βŠ† Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3
Whn ZerL = Whn ZerL
Ξ“, Ξ“2, Ξ“3: t_ctx
f1: Ξ“ βŠ† Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3
Whn TopR = Whn TopR
Ξ“, Ξ“2, Ξ“3: t_ctx
f1: Ξ“ βŠ† Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3
OneR = OneR
Ξ“: t_ctx
s: state Ξ“
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ βŠ† Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), s β‚›βŠ›α΅£ f1 β‚œβŠ› f2 = s β‚œβŠ› f1 α΅£βŠ› f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ βŠ† Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3
Whn (OneL (s_subst Ξ“2 (s β‚›βŠ›α΅£ f1) Ξ“3 f2)) = Whn (OneL (s_subst Ξ“ s Ξ“3 (f1 α΅£βŠ› f2)%asgn))
Ξ“: t_ctx
s: state Ξ“
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ βŠ† Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), s β‚›βŠ›α΅£ f1 β‚œβŠ› f2 = s β‚œβŠ› f1 α΅£βŠ› f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ βŠ† Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3
Whn (BotR (s_subst Ξ“2 (s β‚›βŠ›α΅£ f1) Ξ“3 f2)) = Whn (BotR (s_subst Ξ“ s Ξ“3 (f1 α΅£βŠ› f2)%asgn))
Ξ“, Ξ“2, Ξ“3: t_ctx
f1: Ξ“ βŠ† Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3
BotL = BotL
Ξ“: t_ctx
A, B: pre_ty pos
w1: whn Ξ“ `+ A
H1: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ βŠ† Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), w1 `α΅₯βŠ›α΅£ f1 `α΅₯βŠ› f2 = w1 `α΅₯βŠ› f1 α΅£βŠ› f2
w2: whn Ξ“ `+ B
H2: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ βŠ† Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), w2 `α΅₯βŠ›α΅£ f1 `α΅₯βŠ› f2 = w2 `α΅₯βŠ› f1 α΅£βŠ› f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ βŠ† Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3
TenR (w1 `α΅₯βŠ›α΅£ f1 `α΅₯βŠ› f2) (w2 `α΅₯βŠ›α΅£ f1 `α΅₯βŠ› f2) = TenR (w1 `α΅₯βŠ› f1 α΅£βŠ› f2) (w2 `α΅₯βŠ› f1 α΅£βŠ› f2)
Ξ“: t_ctx
A, B: pre_ty pos
s: state (Ξ“ β–Άβ‚“ `+ A β–Άβ‚“ `+ B)
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `+ A β–Άβ‚“ `+ B) βŠ† Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), s β‚›βŠ›α΅£ f1 β‚œβŠ› f2 = s β‚œβŠ› f1 α΅£βŠ› f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ βŠ† Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3
Whn (TenL (s_subst (Ξ“2 β–Άβ‚“ `+ A β–Άβ‚“ `+ B) (s β‚›βŠ›α΅£ r_shift2 f1) (Ξ“3 β–Άβ‚“ `+ A β–Άβ‚“ `+ B) (a_shift2 f2))) = Whn (TenL (s_subst (Ξ“ β–Άβ‚“ `+ A β–Άβ‚“ `+ B) s (Ξ“3 β–Άβ‚“ `+ A β–Άβ‚“ `+ B) (a_shift2 (f1 α΅£βŠ› f2))))
Ξ“: t_ctx
A, B: pre_ty neg
s: state (Ξ“ β–Άβ‚“ `- A β–Άβ‚“ `- B)
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `- A β–Άβ‚“ `- B) βŠ† Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), s β‚›βŠ›α΅£ f1 β‚œβŠ› f2 = s β‚œβŠ› f1 α΅£βŠ› f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ βŠ† Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3
Whn (ParR (s_subst (Ξ“2 β–Άβ‚“ `- A β–Άβ‚“ `- B) (s β‚›βŠ›α΅£ r_shift2 f1) (Ξ“3 β–Άβ‚“ `- A β–Άβ‚“ `- B) (a_shift2 f2))) = Whn (ParR (s_subst (Ξ“ β–Άβ‚“ `- A β–Άβ‚“ `- B) s (Ξ“3 β–Άβ‚“ `- A β–Άβ‚“ `- B) (a_shift2 (f1 α΅£βŠ› f2))))
Ξ“: t_ctx
A, B: pre_ty neg
w1: whn Ξ“ `- A
H1: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ βŠ† Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), w1 `α΅₯βŠ›α΅£ f1 `α΅₯βŠ› f2 = w1 `α΅₯βŠ› f1 α΅£βŠ› f2
w2: whn Ξ“ `- B
H2: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ βŠ† Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), w2 `α΅₯βŠ›α΅£ f1 `α΅₯βŠ› f2 = w2 `α΅₯βŠ› f1 α΅£βŠ› f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ βŠ† Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3
ParL (w1 `α΅₯βŠ›α΅£ f1 `α΅₯βŠ› f2) (w2 `α΅₯βŠ›α΅£ f1 `α΅₯βŠ› f2) = ParL (w1 `α΅₯βŠ› f1 α΅£βŠ› f2) (w2 `α΅₯βŠ› f1 α΅£βŠ› f2)
Ξ“: t_ctx
A, B: pre_ty pos
w: whn Ξ“ `+ A
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ βŠ† Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), w `α΅₯βŠ›α΅£ f1 `α΅₯βŠ› f2 = w `α΅₯βŠ› f1 α΅£βŠ› f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ βŠ† Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3
OrR1 (w `α΅₯βŠ›α΅£ f1 `α΅₯βŠ› f2) = OrR1 (w `α΅₯βŠ› f1 α΅£βŠ› f2)
Ξ“: t_ctx
A, B: pre_ty pos
w: whn Ξ“ `+ B
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ βŠ† Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), w `α΅₯βŠ›α΅£ f1 `α΅₯βŠ› f2 = w `α΅₯βŠ› f1 α΅£βŠ› f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ βŠ† Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3
OrR2 (w `α΅₯βŠ›α΅£ f1 `α΅₯βŠ› f2) = OrR2 (w `α΅₯βŠ› f1 α΅£βŠ› f2)
Ξ“: t_ctx
A, B: pre_ty pos
s1: state (Ξ“ β–Άβ‚“ `+ A)
H1: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `+ A) βŠ† Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), s1 β‚›βŠ›α΅£ f1 β‚œβŠ› f2 = s1 β‚œβŠ› f1 α΅£βŠ› f2
s2: state (Ξ“ β–Άβ‚“ `+ B)
H2: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `+ B) βŠ† Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), s2 β‚›βŠ›α΅£ f1 β‚œβŠ› f2 = s2 β‚œβŠ› f1 α΅£βŠ› f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ βŠ† Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3
Whn (OrL (s_subst (Ξ“2 β–Άβ‚“ `+ A) (s1 β‚›βŠ›α΅£ r_shift1 f1) (Ξ“3 β–Άβ‚“ `+ A) (a_shift1 f2)) (s_subst (Ξ“2 β–Άβ‚“ `+ B) (s2 β‚›βŠ›α΅£ r_shift1 f1) (Ξ“3 β–Άβ‚“ `+ B) (a_shift1 f2))) = Whn (OrL (s_subst (Ξ“ β–Άβ‚“ `+ A) s1 (Ξ“3 β–Άβ‚“ `+ A) (a_shift1 (f1 α΅£βŠ› f2))) (s_subst (Ξ“ β–Άβ‚“ `+ B) s2 (Ξ“3 β–Άβ‚“ `+ B) (a_shift1 (f1 α΅£βŠ› f2))))
Ξ“: t_ctx
A, B: pre_ty neg
s1: state (Ξ“ β–Άβ‚“ `- A)
H1: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `- A) βŠ† Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), s1 β‚›βŠ›α΅£ f1 β‚œβŠ› f2 = s1 β‚œβŠ› f1 α΅£βŠ› f2
s2: state (Ξ“ β–Άβ‚“ `- B)
H2: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `- B) βŠ† Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), s2 β‚›βŠ›α΅£ f1 β‚œβŠ› f2 = s2 β‚œβŠ› f1 α΅£βŠ› f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ βŠ† Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3
Whn (AndR (s_subst (Ξ“2 β–Άβ‚“ `- A) (s1 β‚›βŠ›α΅£ r_shift1 f1) (Ξ“3 β–Άβ‚“ `- A) (a_shift1 f2)) (s_subst (Ξ“2 β–Άβ‚“ `- B) (s2 β‚›βŠ›α΅£ r_shift1 f1) (Ξ“3 β–Άβ‚“ `- B) (a_shift1 f2))) = Whn (AndR (s_subst (Ξ“ β–Άβ‚“ `- A) s1 (Ξ“3 β–Άβ‚“ `- A) (a_shift1 (f1 α΅£βŠ› f2))) (s_subst (Ξ“ β–Άβ‚“ `- B) s2 (Ξ“3 β–Άβ‚“ `- B) (a_shift1 (f1 α΅£βŠ› f2))))
Ξ“: t_ctx
A, B: pre_ty neg
w: whn Ξ“ `- A
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ βŠ† Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), w `α΅₯βŠ›α΅£ f1 `α΅₯βŠ› f2 = w `α΅₯βŠ› f1 α΅£βŠ› f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ βŠ† Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3
AndL1 (w `α΅₯βŠ›α΅£ f1 `α΅₯βŠ› f2) = AndL1 (w `α΅₯βŠ› f1 α΅£βŠ› f2)
Ξ“: t_ctx
A, B: pre_ty neg
w: whn Ξ“ `- B
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ βŠ† Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), w `α΅₯βŠ›α΅£ f1 `α΅₯βŠ› f2 = w `α΅₯βŠ› f1 α΅£βŠ› f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ βŠ† Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3
AndL2 (w `α΅₯βŠ›α΅£ f1 `α΅₯βŠ› f2) = AndL2 (w `α΅₯βŠ› f1 α΅£βŠ› f2)
Ξ“: t_ctx
A: pre_ty neg
t: term Ξ“ `+ A
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ βŠ† Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), t β‚œβŠ›α΅£ f1 `β‚œβŠ› f2 = t `β‚œβŠ› f1 α΅£βŠ› f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ βŠ† Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3
ShiftPR (t β‚œβŠ›α΅£ f1 `β‚œβŠ› f2) = ShiftPR (t `β‚œβŠ› f1 α΅£βŠ› f2)
Ξ“: t_ctx
A: pre_ty neg
s: state (Ξ“ β–Άβ‚“ `+ A)
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `+ A) βŠ† Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), s β‚›βŠ›α΅£ f1 β‚œβŠ› f2 = s β‚œβŠ› f1 α΅£βŠ› f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ βŠ† Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3
Whn (ShiftPL (s_subst (Ξ“2 β–Άβ‚“ `+ A) (s β‚›βŠ›α΅£ r_shift1 f1) (Ξ“3 β–Άβ‚“ `+ A) (a_shift1 f2))) = Whn (ShiftPL (s_subst (Ξ“ β–Άβ‚“ `+ A) s (Ξ“3 β–Άβ‚“ `+ A) (a_shift1 (f1 α΅£βŠ› f2))))
Ξ“: t_ctx
A: pre_ty pos
s: state (Ξ“ β–Άβ‚“ `- A)
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `- A) βŠ† Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), s β‚›βŠ›α΅£ f1 β‚œβŠ› f2 = s β‚œβŠ› f1 α΅£βŠ› f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ βŠ† Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3
Whn (ShiftNR (s_subst (Ξ“2 β–Άβ‚“ `- A) (s β‚›βŠ›α΅£ r_shift1 f1) (Ξ“3 β–Άβ‚“ `- A) (a_shift1 f2))) = Whn (ShiftNR (s_subst (Ξ“ β–Άβ‚“ `- A) s (Ξ“3 β–Άβ‚“ `- A) (a_shift1 (f1 α΅£βŠ› f2))))
Ξ“: t_ctx
A: pre_ty pos
t: term Ξ“ `- A
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ βŠ† Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), t β‚œβŠ›α΅£ f1 `β‚œβŠ› f2 = t `β‚œβŠ› f1 α΅£βŠ› f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ βŠ† Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3
ShiftNL (t β‚œβŠ›α΅£ f1 `β‚œβŠ› f2) = ShiftNL (t `β‚œβŠ› f1 α΅£βŠ› f2)
Ξ“: t_ctx
A: pre_ty neg
w: whn Ξ“ `- A
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ βŠ† Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), w `α΅₯βŠ›α΅£ f1 `α΅₯βŠ› f2 = w `α΅₯βŠ› f1 α΅£βŠ› f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ βŠ† Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3
NegPR (w `α΅₯βŠ›α΅£ f1 `α΅₯βŠ› f2) = NegPR (w `α΅₯βŠ› f1 α΅£βŠ› f2)
Ξ“: t_ctx
A: pre_ty neg
s: state (Ξ“ β–Άβ‚“ `- A)
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `- A) βŠ† Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), s β‚›βŠ›α΅£ f1 β‚œβŠ› f2 = s β‚œβŠ› f1 α΅£βŠ› f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ βŠ† Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3
Whn (NegPL (s_subst (Ξ“2 β–Άβ‚“ `- A) (s β‚›βŠ›α΅£ r_shift1 f1) (Ξ“3 β–Άβ‚“ `- A) (a_shift1 f2))) = Whn (NegPL (s_subst (Ξ“ β–Άβ‚“ `- A) s (Ξ“3 β–Άβ‚“ `- A) (a_shift1 (f1 α΅£βŠ› f2))))
Ξ“: t_ctx
A: pre_ty pos
s: state (Ξ“ β–Άβ‚“ `+ A)
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `+ A) βŠ† Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), s β‚›βŠ›α΅£ f1 β‚œβŠ› f2 = s β‚œβŠ› f1 α΅£βŠ› f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ βŠ† Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3
Whn (NegNR (s_subst (Ξ“2 β–Άβ‚“ `+ A) (s β‚›βŠ›α΅£ r_shift1 f1) (Ξ“3 β–Άβ‚“ `+ A) (a_shift1 f2))) = Whn (NegNR (s_subst (Ξ“ β–Άβ‚“ `+ A) s (Ξ“3 β–Άβ‚“ `+ A) (a_shift1 (f1 α΅£βŠ› f2))))
Ξ“: t_ctx
A: pre_ty pos
w: whn Ξ“ `+ A
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ βŠ† Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), w `α΅₯βŠ›α΅£ f1 `α΅₯βŠ› f2 = w `α΅₯βŠ› f1 α΅£βŠ› f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ βŠ† Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3
NegNL (w `α΅₯βŠ›α΅£ f1 `α΅₯βŠ› f2) = NegNL (w `α΅₯βŠ› f1 α΅£βŠ› f2)
Ξ“: t_ctx
p: pol
A: pre_ty p
t1: term Ξ“ `+ A
H1: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ βŠ† Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), t1 β‚œβŠ›α΅£ f1 `β‚œβŠ› f2 = t1 `β‚œβŠ› f1 α΅£βŠ› f2
t2: term Ξ“ `- A
H2: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ βŠ† Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), t2 β‚œβŠ›α΅£ f1 `β‚œβŠ› f2 = t2 `β‚œβŠ› f1 α΅£βŠ› f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ βŠ† Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3
Cut p (t1 β‚œβŠ›α΅£ f1 `β‚œβŠ› f2) (t2 β‚œβŠ›α΅£ f1 `β‚œβŠ› f2) = Cut p (t1 `β‚œβŠ› f1 α΅£βŠ› f2) (t2 `β‚œβŠ› f1 α΅£βŠ› f2)
Ξ“: t_ctx
A: ty
s: state (Ξ“ β–Άβ‚“ A †)
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ A †) βŠ† Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), s β‚›βŠ›α΅£ f1 β‚œβŠ› f2 = s β‚œβŠ› f1 α΅£βŠ› f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ βŠ† Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3

s_subst (Ξ“2 β–Άβ‚“ A †) (s β‚›βŠ›α΅£ r_shift1 f1) (Ξ“3 β–Άβ‚“ A †) (a_shift1 f2) = s_subst (Ξ“ β–Άβ‚“ A †) s (Ξ“3 β–Άβ‚“ A †) (a_shift1 (f1 α΅£βŠ› f2))
Ξ“: t_ctx
A: pre_ty pos
t: term (Ξ“ β–Άβ‚“ `- A) `- A
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `- A) βŠ† Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), t β‚œβŠ›α΅£ f1 `β‚œβŠ› f2 = t `β‚œβŠ› f1 α΅£βŠ› f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ βŠ† Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3
t β‚œβŠ›α΅£ r_shift1 f1 `β‚œβŠ› a_shift1 f2 = t `β‚œβŠ› a_shift1 (f1 α΅£βŠ› f2)
Ξ“: t_ctx
A: pre_ty neg
t: term (Ξ“ β–Άβ‚“ `+ A) `+ A
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `+ A) βŠ† Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), t β‚œβŠ›α΅£ f1 `β‚œβŠ› f2 = t `β‚œβŠ› f1 α΅£βŠ› f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ βŠ† Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3
t β‚œβŠ›α΅£ r_shift1 f1 `β‚œβŠ› a_shift1 f2 = t `β‚œβŠ› a_shift1 (f1 α΅£βŠ› f2)
Ξ“: t_ctx
A, B: pre_ty pos
s: state (Ξ“ β–Άβ‚“ `+ A β–Άβ‚“ `+ B)
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `+ A β–Άβ‚“ `+ B) βŠ† Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), s β‚›βŠ›α΅£ f1 β‚œβŠ› f2 = s β‚œβŠ› f1 α΅£βŠ› f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ βŠ† Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3
s_subst (Ξ“2 β–Άβ‚“ `+ A β–Άβ‚“ `+ B) (s β‚›βŠ›α΅£ r_shift2 f1) (Ξ“3 β–Άβ‚“ `+ A β–Άβ‚“ `+ B) (a_shift2 f2) = s_subst (Ξ“ β–Άβ‚“ `+ A β–Άβ‚“ `+ B) s (Ξ“3 β–Άβ‚“ `+ A β–Άβ‚“ `+ B) (a_shift2 (f1 α΅£βŠ› f2))
Ξ“: t_ctx
A, B: pre_ty neg
s: state (Ξ“ β–Άβ‚“ `- A β–Άβ‚“ `- B)
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `- A β–Άβ‚“ `- B) βŠ† Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), s β‚›βŠ›α΅£ f1 β‚œβŠ› f2 = s β‚œβŠ› f1 α΅£βŠ› f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ βŠ† Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3
s_subst (Ξ“2 β–Άβ‚“ `- A β–Άβ‚“ `- B) (s β‚›βŠ›α΅£ r_shift2 f1) (Ξ“3 β–Άβ‚“ `- A β–Άβ‚“ `- B) (a_shift2 f2) = s_subst (Ξ“ β–Άβ‚“ `- A β–Άβ‚“ `- B) s (Ξ“3 β–Άβ‚“ `- A β–Άβ‚“ `- B) (a_shift2 (f1 α΅£βŠ› f2))
Ξ“: t_ctx
A, B: pre_ty pos
s1: state (Ξ“ β–Άβ‚“ `+ A)
H1: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `+ A) βŠ† Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), s1 β‚›βŠ›α΅£ f1 β‚œβŠ› f2 = s1 β‚œβŠ› f1 α΅£βŠ› f2
s2: state (Ξ“ β–Άβ‚“ `+ B)
H2: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `+ B) βŠ† Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), s2 β‚›βŠ›α΅£ f1 β‚œβŠ› f2 = s2 β‚œβŠ› f1 α΅£βŠ› f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ βŠ† Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3
s_subst (Ξ“2 β–Άβ‚“ `+ A) (s1 β‚›βŠ›α΅£ r_shift1 f1) (Ξ“3 β–Άβ‚“ `+ A) (a_shift1 f2) = s_subst (Ξ“ β–Άβ‚“ `+ A) s1 (Ξ“3 β–Άβ‚“ `+ A) (a_shift1 (f1 α΅£βŠ› f2))
Ξ“: t_ctx
A, B: pre_ty pos
s1: state (Ξ“ β–Άβ‚“ `+ A)
H1: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `+ A) βŠ† Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), s1 β‚›βŠ›α΅£ f1 β‚œβŠ› f2 = s1 β‚œβŠ› f1 α΅£βŠ› f2
s2: state (Ξ“ β–Άβ‚“ `+ B)
H2: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `+ B) βŠ† Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), s2 β‚›βŠ›α΅£ f1 β‚œβŠ› f2 = s2 β‚œβŠ› f1 α΅£βŠ› f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ βŠ† Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3
s_subst (Ξ“2 β–Άβ‚“ `+ B) (s2 β‚›βŠ›α΅£ r_shift1 f1) (Ξ“3 β–Άβ‚“ `+ B) (a_shift1 f2) = s_subst (Ξ“ β–Άβ‚“ `+ B) s2 (Ξ“3 β–Άβ‚“ `+ B) (a_shift1 (f1 α΅£βŠ› f2))
Ξ“: t_ctx
A, B: pre_ty neg
s1: state (Ξ“ β–Άβ‚“ `- A)
H1: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `- A) βŠ† Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), s1 β‚›βŠ›α΅£ f1 β‚œβŠ› f2 = s1 β‚œβŠ› f1 α΅£βŠ› f2
s2: state (Ξ“ β–Άβ‚“ `- B)
H2: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `- B) βŠ† Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), s2 β‚›βŠ›α΅£ f1 β‚œβŠ› f2 = s2 β‚œβŠ› f1 α΅£βŠ› f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ βŠ† Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3
s_subst (Ξ“2 β–Άβ‚“ `- A) (s1 β‚›βŠ›α΅£ r_shift1 f1) (Ξ“3 β–Άβ‚“ `- A) (a_shift1 f2) = s_subst (Ξ“ β–Άβ‚“ `- A) s1 (Ξ“3 β–Άβ‚“ `- A) (a_shift1 (f1 α΅£βŠ› f2))
Ξ“: t_ctx
A, B: pre_ty neg
s1: state (Ξ“ β–Άβ‚“ `- A)
H1: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `- A) βŠ† Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), s1 β‚›βŠ›α΅£ f1 β‚œβŠ› f2 = s1 β‚œβŠ› f1 α΅£βŠ› f2
s2: state (Ξ“ β–Άβ‚“ `- B)
H2: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `- B) βŠ† Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), s2 β‚›βŠ›α΅£ f1 β‚œβŠ› f2 = s2 β‚œβŠ› f1 α΅£βŠ› f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ βŠ† Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3
s_subst (Ξ“2 β–Άβ‚“ `- B) (s2 β‚›βŠ›α΅£ r_shift1 f1) (Ξ“3 β–Άβ‚“ `- B) (a_shift1 f2) = s_subst (Ξ“ β–Άβ‚“ `- B) s2 (Ξ“3 β–Άβ‚“ `- B) (a_shift1 (f1 α΅£βŠ› f2))
Ξ“: t_ctx
A: pre_ty neg
s: state (Ξ“ β–Άβ‚“ `+ A)
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `+ A) βŠ† Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), s β‚›βŠ›α΅£ f1 β‚œβŠ› f2 = s β‚œβŠ› f1 α΅£βŠ› f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ βŠ† Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3
s_subst (Ξ“2 β–Άβ‚“ `+ A) (s β‚›βŠ›α΅£ r_shift1 f1) (Ξ“3 β–Άβ‚“ `+ A) (a_shift1 f2) = s_subst (Ξ“ β–Άβ‚“ `+ A) s (Ξ“3 β–Άβ‚“ `+ A) (a_shift1 (f1 α΅£βŠ› f2))
Ξ“: t_ctx
A: pre_ty pos
s: state (Ξ“ β–Άβ‚“ `- A)
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `- A) βŠ† Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), s β‚›βŠ›α΅£ f1 β‚œβŠ› f2 = s β‚œβŠ› f1 α΅£βŠ› f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ βŠ† Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3
s_subst (Ξ“2 β–Άβ‚“ `- A) (s β‚›βŠ›α΅£ r_shift1 f1) (Ξ“3 β–Άβ‚“ `- A) (a_shift1 f2) = s_subst (Ξ“ β–Άβ‚“ `- A) s (Ξ“3 β–Άβ‚“ `- A) (a_shift1 (f1 α΅£βŠ› f2))
Ξ“: t_ctx
A: pre_ty neg
s: state (Ξ“ β–Άβ‚“ `- A)
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `- A) βŠ† Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), s β‚›βŠ›α΅£ f1 β‚œβŠ› f2 = s β‚œβŠ› f1 α΅£βŠ› f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ βŠ† Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3
s_subst (Ξ“2 β–Άβ‚“ `- A) (s β‚›βŠ›α΅£ r_shift1 f1) (Ξ“3 β–Άβ‚“ `- A) (a_shift1 f2) = s_subst (Ξ“ β–Άβ‚“ `- A) s (Ξ“3 β–Άβ‚“ `- A) (a_shift1 (f1 α΅£βŠ› f2))
Ξ“: t_ctx
A: pre_ty pos
s: state (Ξ“ β–Άβ‚“ `+ A)
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `+ A) βŠ† Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), s β‚›βŠ›α΅£ f1 β‚œβŠ› f2 = s β‚œβŠ› f1 α΅£βŠ› f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ βŠ† Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3
s_subst (Ξ“2 β–Άβ‚“ `+ A) (s β‚›βŠ›α΅£ r_shift1 f1) (Ξ“3 β–Άβ‚“ `+ A) (a_shift1 f2) = s_subst (Ξ“ β–Άβ‚“ `+ A) s (Ξ“3 β–Άβ‚“ `+ A) (a_shift1 (f1 α΅£βŠ› f2))
all: first [ rewrite a_shift1_ren_l | rewrite a_shift2_ren_l ]; auto. Qed.
Ξ“1, Ξ“2: ctx ty
Ξ“3: t_ctx
f1: Ξ“1 βŠ† Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3
A: ty
t: term Ξ“1 A

t β‚œβŠ›α΅£ f1 `β‚œβŠ› f2 = t `β‚œβŠ› f1 α΅£βŠ› f2
now apply (term_ind_mut _ _ _ sub_ren_prf). Qed.
Ξ“1, Ξ“2: ctx ty
Ξ“3: t_ctx
f1: Ξ“1 βŠ† Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3
A: ty
v: whn Ξ“1 A

v `α΅₯βŠ›α΅£ f1 `α΅₯βŠ› f2 = v `α΅₯βŠ› f1 α΅£βŠ› f2
now apply (whn_ind_mut _ _ _ sub_ren_prf). Qed.
Ξ“1, Ξ“2: ctx ty
Ξ“3: t_ctx
f1: Ξ“1 βŠ† Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3
s: state Ξ“1

s β‚›βŠ›α΅£ f1 β‚œβŠ› f2 = s β‚œβŠ› f1 α΅£βŠ› f2
now apply (state_ind_mut _ _ _ sub_ren_prf). Qed.
Ξ“1, Ξ“2: ctx ty
Ξ“3: t_ctx
f1: Ξ“1 βŠ† Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3
A: ty
v: val Ξ“1 A

v α΅₯βŠ›α΅£ f1 α΅₯βŠ› f2 = v α΅₯βŠ› f1 α΅£βŠ› f2
Ξ“1, Ξ“2: ctx ty
Ξ“3: t_ctx
f1: Ξ“1 βŠ† Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3
p: pre_ty pos
v: val Ξ“1 `+ p

v α΅₯βŠ›α΅£ f1 α΅₯βŠ› f2 = v α΅₯βŠ› f1 α΅£βŠ› f2
Ξ“1, Ξ“2: ctx ty
Ξ“3: t_ctx
f1: Ξ“1 βŠ† Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3
p: pre_ty neg
v: val Ξ“1 `+ p
v α΅₯βŠ›α΅£ f1 α΅₯βŠ› f2 = v α΅₯βŠ› f1 α΅£βŠ› f2
Ξ“1, Ξ“2: ctx ty
Ξ“3: t_ctx
f1: Ξ“1 βŠ† Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3
p: pre_ty pos
v: val Ξ“1 `- p
v α΅₯βŠ›α΅£ f1 α΅₯βŠ› f2 = v α΅₯βŠ› f1 α΅£βŠ› f2
Ξ“1, Ξ“2: ctx ty
Ξ“3: t_ctx
f1: Ξ“1 βŠ† Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3
p: pre_ty neg
v: val Ξ“1 `- p
v α΅₯βŠ›α΅£ f1 α΅₯βŠ› f2 = v α΅₯βŠ› f1 α΅£βŠ› f2
Ξ“1, Ξ“2: ctx ty
Ξ“3: t_ctx
f1: Ξ“1 βŠ† Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3
p: pre_ty pos
v: val Ξ“1 `+ p

v α΅₯βŠ›α΅£ f1 α΅₯βŠ› f2 = v α΅₯βŠ› f1 α΅£βŠ› f2
now apply w_sub_ren.
Ξ“1, Ξ“2: ctx ty
Ξ“3: t_ctx
f1: Ξ“1 βŠ† Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3
p: pre_ty neg
v: val Ξ“1 `+ p

v α΅₯βŠ›α΅£ f1 α΅₯βŠ› f2 = v α΅₯βŠ› f1 α΅£βŠ› f2
now apply t_sub_ren.
Ξ“1, Ξ“2: ctx ty
Ξ“3: t_ctx
f1: Ξ“1 βŠ† Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3
p: pre_ty pos
v: val Ξ“1 `- p

v α΅₯βŠ›α΅£ f1 α΅₯βŠ› f2 = v α΅₯βŠ› f1 α΅£βŠ› f2
now apply t_sub_ren.
Ξ“1, Ξ“2: ctx ty
Ξ“3: t_ctx
f1: Ξ“1 βŠ† Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3
p: pre_ty neg
v: val Ξ“1 `- p

v α΅₯βŠ›α΅£ f1 α΅₯βŠ› f2 = v α΅₯βŠ› f1 α΅£βŠ› f2
now apply w_sub_ren. Qed.
Ξ“, Ξ”: t_ctx
f: Ξ“ =[ val ]> Ξ”
A: ty
i: Ξ“ βˆ‹ A

var i α΅₯βŠ› f = f A i
destruct A as [ [] | [] ]; auto. Qed.
Ξ“1, Ξ“2, Ξ“3: t_ctx
A: ty
f1: Ξ“1 =[ val ]> Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3

a_shift1 (f1 βŠ› f2) ≑ₐ a_shift1 f1 βŠ› a_shift1 f2
Ξ“: ctx ty
Ξ“2, Ξ“3: t_ctx
x: ty
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3

var top = v_subst (Ξ“2 β–Άβ‚“ x) x (var top) (Ξ“3 β–Άβ‚“ x) (a_shift1 f2)
Ξ“0: ctx ty
Ξ“2, Ξ“3: t_ctx
y: ty
f1: Ξ“0 =[ val ]> Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3
x: ty
v: Ctx.var x Ξ“0
v_shift1 x (v_subst Ξ“2 x (f1 x v) Ξ“3 f2) = v_subst (Ξ“2 β–Άβ‚“ y) x (v_shift1 x (f1 x v)) (Ξ“3 β–Άβ‚“ y) (a_shift1 f2)
Ξ“: ctx ty
Ξ“2, Ξ“3: t_ctx
x: ty
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3

var top = v_subst (Ξ“2 β–Άβ‚“ x) x (var top) (Ξ“3 β–Άβ‚“ x) (a_shift1 f2)
now rewrite v_sub_id_r.
Ξ“0: ctx ty
Ξ“2, Ξ“3: t_ctx
y: ty
f1: Ξ“0 =[ val ]> Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3
x: ty
v: Ctx.var x Ξ“0

v_shift1 x (v_subst Ξ“2 x (f1 x v) Ξ“3 f2) = v_subst (Ξ“2 β–Άβ‚“ y) x (v_shift1 x (f1 x v)) (Ξ“3 β–Άβ‚“ y) (a_shift1 f2)
now unfold v_shift1; rewrite v_ren_sub, v_sub_ren. Qed.
Ξ“1, Ξ“2, Ξ“3: t_ctx
A, B: ty
f1: Ξ“1 =[ val ]> Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3

a_shift2 (f1 βŠ› f2) ≑ₐ a_shift2 f1 βŠ› a_shift2 f2
Ξ“0: ctx ty
Ξ“2, Ξ“3: t_ctx
y0, y: ty
f1: Ξ“0 =[ val ]> Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3
a: ty
v: Ctx.var a Ξ“0

v_shift2 a (v_subst Ξ“2 a (f1 a v) Ξ“3 f2) = v_subst (Ξ“2 β–Άβ‚“ y0 β–Άβ‚“ y) a (v_shift2 a (f1 a v)) (Ξ“3 β–Άβ‚“ y0 β–Άβ‚“ y) (a_shift2 f2)
now unfold v_shift2; rewrite v_ren_sub, v_sub_ren. Qed. Definition t_sub_sub_P Ξ“1 A (t : term Ξ“1 A) : Prop := forall Ξ“2 Ξ“3 (f1 : Ξ“1 =[val]> Ξ“2) (f2 : Ξ“2 =[val]> Ξ“3), (t `β‚œβŠ› f1) `β‚œβŠ› f2 = t `β‚œβŠ› (f1 βŠ› f2) . Definition w_sub_sub_P Ξ“1 A (v : whn Ξ“1 A) : Prop := forall Ξ“2 Ξ“3 (f1 : Ξ“1 =[val]> Ξ“2) (f2 : Ξ“2 =[val]> Ξ“3), (v `α΅₯βŠ› f1) α΅₯βŠ› f2 = v `α΅₯βŠ› (f1 βŠ› f2) . Definition s_sub_sub_P Ξ“1 (s : state Ξ“1) : Prop := forall Ξ“2 Ξ“3 (f1 : Ξ“1 =[val]> Ξ“2) (f2 : Ξ“2 =[val]> Ξ“3), (s β‚œβŠ› f1) β‚œβŠ› f2 = s β‚œβŠ› (f1 βŠ› f2) .

syn_ind_args t_sub_sub_P w_sub_sub_P s_sub_sub_P

forall (Ξ“ : t_ctx) (A : ty) (s : state (Ξ“ β–Άβ‚“ A †)), s_sub_sub_P (Ξ“ β–Άβ‚“ A †) s -> t_sub_sub_P Ξ“ A (Mu s)

forall (Ξ“ : t_ctx) (A : pre_ty pos) (t : term (Ξ“ β–Άβ‚“ `- A) `- A), t_sub_sub_P (Ξ“ β–Άβ‚“ `- A) `- A t -> t_sub_sub_P Ξ“ `- A (RecL t)

forall (Ξ“ : t_ctx) (A : pre_ty neg) (t : term (Ξ“ β–Άβ‚“ `+ A) `+ A), t_sub_sub_P (Ξ“ β–Άβ‚“ `+ A) `+ A t -> t_sub_sub_P Ξ“ `+ A (RecR t)

forall (Ξ“ : t_ctx) (A : ty) (w : whn Ξ“ A), w_sub_sub_P Ξ“ A w -> t_sub_sub_P Ξ“ A (Whn w)

forall (Ξ“ : t_ctx) (A : ty) (h : Ξ“ βˆ‹ A), w_sub_sub_P Ξ“ A (Var h)

forall Ξ“ : t_ctx, w_sub_sub_P Ξ“ `- 0 ZerL

forall Ξ“ : t_ctx, w_sub_sub_P Ξ“ `+ ⊀ TopR

forall Ξ“ : t_ctx, w_sub_sub_P Ξ“ `+ 1 OneR

forall (Ξ“ : t_ctx) (s : state Ξ“), s_sub_sub_P Ξ“ s -> w_sub_sub_P Ξ“ `- 1 (OneL s)

forall (Ξ“ : t_ctx) (s : state Ξ“), s_sub_sub_P Ξ“ s -> w_sub_sub_P Ξ“ `+ βŠ₯ (BotR s)

forall Ξ“ : t_ctx, w_sub_sub_P Ξ“ `- βŠ₯ BotL

forall (Ξ“ : t_ctx) (A B : pre_ty pos) (w1 : whn Ξ“ `+ A), w_sub_sub_P Ξ“ `+ A w1 -> forall w2 : whn Ξ“ `+ B, w_sub_sub_P Ξ“ `+ B w2 -> w_sub_sub_P Ξ“ `+ (A βŠ— B) (TenR w1 w2)

forall (Ξ“ : t_ctx) (A B : pre_ty pos) (s : state (Ξ“ β–Άβ‚“ `+ A β–Άβ‚“ `+ B)), s_sub_sub_P (Ξ“ β–Άβ‚“ `+ A β–Άβ‚“ `+ B) s -> w_sub_sub_P Ξ“ `- (A βŠ— B) (TenL s)

forall (Ξ“ : t_ctx) (A B : pre_ty neg) (s : state (Ξ“ β–Άβ‚“ `- A β–Άβ‚“ `- B)), s_sub_sub_P (Ξ“ β–Άβ‚“ `- A β–Άβ‚“ `- B) s -> w_sub_sub_P Ξ“ `+ (A β…‹ B) (ParR s)

forall (Ξ“ : t_ctx) (A B : pre_ty neg) (w1 : whn Ξ“ `- A), w_sub_sub_P Ξ“ `- A w1 -> forall w2 : whn Ξ“ `- B, w_sub_sub_P Ξ“ `- B w2 -> w_sub_sub_P Ξ“ `- (A β…‹ B) (ParL w1 w2)

forall (Ξ“ : t_ctx) (A B : pre_ty pos) (w : whn Ξ“ `+ A), w_sub_sub_P Ξ“ `+ A w -> w_sub_sub_P Ξ“ `+ (A βŠ• B) (OrR1 w)

forall (Ξ“ : t_ctx) (A B : pre_ty pos) (w : whn Ξ“ `+ B), w_sub_sub_P Ξ“ `+ B w -> w_sub_sub_P Ξ“ `+ (A βŠ• B) (OrR2 w)

forall (Ξ“ : t_ctx) (A B : pre_ty pos) (s1 : state (Ξ“ β–Άβ‚“ `+ A)), s_sub_sub_P (Ξ“ β–Άβ‚“ `+ A) s1 -> forall s2 : state (Ξ“ β–Άβ‚“ `+ B), s_sub_sub_P (Ξ“ β–Άβ‚“ `+ B) s2 -> w_sub_sub_P Ξ“ `- (A βŠ• B) (OrL s1 s2)

forall (Ξ“ : t_ctx) (A B : pre_ty neg) (s1 : state (Ξ“ β–Άβ‚“ `- A)), s_sub_sub_P (Ξ“ β–Άβ‚“ `- A) s1 -> forall s2 : state (Ξ“ β–Άβ‚“ `- B), s_sub_sub_P (Ξ“ β–Άβ‚“ `- B) s2 -> w_sub_sub_P Ξ“ `+ (A & B) (AndR s1 s2)

forall (Ξ“ : t_ctx) (A B : pre_ty neg) (w : whn Ξ“ `- A), w_sub_sub_P Ξ“ `- A w -> w_sub_sub_P Ξ“ `- (A & B) (AndL1 w)

forall (Ξ“ : t_ctx) (A B : pre_ty neg) (w : whn Ξ“ `- B), w_sub_sub_P Ξ“ `- B w -> w_sub_sub_P Ξ“ `- (A & B) (AndL2 w)

forall (Ξ“ : t_ctx) (A : pre_ty neg) (t : term Ξ“ `+ A), t_sub_sub_P Ξ“ `+ A t -> w_sub_sub_P Ξ“ `+ (↓ A) (ShiftPR t)

forall (Ξ“ : t_ctx) (A : pre_ty neg) (s : state (Ξ“ β–Άβ‚“ `+ A)), s_sub_sub_P (Ξ“ β–Άβ‚“ `+ A) s -> w_sub_sub_P Ξ“ `- (↓ A) (ShiftPL s)

forall (Ξ“ : t_ctx) (A : pre_ty pos) (s : state (Ξ“ β–Άβ‚“ `- A)), s_sub_sub_P (Ξ“ β–Άβ‚“ `- A) s -> w_sub_sub_P Ξ“ `+ (↑ A) (ShiftNR s)

forall (Ξ“ : t_ctx) (A : pre_ty pos) (t : term Ξ“ `- A), t_sub_sub_P Ξ“ `- A t -> w_sub_sub_P Ξ“ `- (↑ A) (ShiftNL t)

forall (Ξ“ : t_ctx) (A : pre_ty neg) (w : whn Ξ“ `- A), w_sub_sub_P Ξ“ `- A w -> w_sub_sub_P Ξ“ `+ (βŠ– A) (NegPR w)

forall (Ξ“ : t_ctx) (A : pre_ty neg) (s : state (Ξ“ β–Άβ‚“ `- A)), s_sub_sub_P (Ξ“ β–Άβ‚“ `- A) s -> w_sub_sub_P Ξ“ `- (βŠ– A) (NegPL s)

forall (Ξ“ : t_ctx) (A : pre_ty pos) (s : state (Ξ“ β–Άβ‚“ `+ A)), s_sub_sub_P (Ξ“ β–Άβ‚“ `+ A) s -> w_sub_sub_P Ξ“ `+ (Β¬ A) (NegNR s)

forall (Ξ“ : t_ctx) (A : pre_ty pos) (w : whn Ξ“ `+ A), w_sub_sub_P Ξ“ `+ A w -> w_sub_sub_P Ξ“ `- (Β¬ A) (NegNL w)

forall (Ξ“ : t_ctx) (p : pol) (A : pre_ty p) (t1 : term Ξ“ `+ A), t_sub_sub_P Ξ“ `+ A t1 -> forall t2 : term Ξ“ `- A, t_sub_sub_P Ξ“ `- A t2 -> s_sub_sub_P Ξ“ (Cut p t1 t2)
Ξ“: t_ctx
A: ty
s: state (Ξ“ β–Άβ‚“ A †)
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ A †) =[ val ]> Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), (s β‚œβŠ› f1) β‚œβŠ› f2 = s β‚œβŠ› f1 βŠ› f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3

Mu (s_subst (Ξ“2 β–Άβ‚“ A †) (s_subst (Ξ“ β–Άβ‚“ A †) s (Ξ“2 β–Άβ‚“ A †) (a_shift1 f1)) (Ξ“3 β–Άβ‚“ A †) (a_shift1 f2)) = Mu (s_subst (Ξ“ β–Άβ‚“ A †) s (Ξ“3 β–Άβ‚“ A †) (a_shift1 (f1 βŠ› f2)))
Ξ“: t_ctx
A: pre_ty pos
t: term (Ξ“ β–Άβ‚“ `- A) `- A
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `- A) =[ val ]> Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), (t `β‚œβŠ› f1) `β‚œβŠ› f2 = t `β‚œβŠ› f1 βŠ› f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3
RecL ((t `β‚œβŠ› a_shift1 f1) `β‚œβŠ› a_shift1 f2) = RecL (t `β‚œβŠ› a_shift1 (f1 βŠ› f2))
Ξ“: t_ctx
A: pre_ty neg
t: term (Ξ“ β–Άβ‚“ `+ A) `+ A
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `+ A) =[ val ]> Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), (t `β‚œβŠ› f1) `β‚œβŠ› f2 = t `β‚œβŠ› f1 βŠ› f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3
RecR ((t `β‚œβŠ› a_shift1 f1) `β‚œβŠ› a_shift1 f2) = RecR (t `β‚œβŠ› a_shift1 (f1 βŠ› f2))
Ξ“: t_ctx
A: ty
w: whn Ξ“ A
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ =[ val ]> Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), (w `α΅₯βŠ› f1) α΅₯βŠ› f2 = w `α΅₯βŠ› f1 βŠ› f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3
(w `α΅₯βŠ› f1) `β‚œβŠ› f2 = w `α΅₯βŠ› f1 βŠ› f2
Ξ“: t_ctx
A: ty
h: Ξ“ βˆ‹ A
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3
v_subst Ξ“2 A (f1 A h) Ξ“3 f2 = v_subst Ξ“2 A (f1 A h) Ξ“3 f2
Ξ“, Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3
Whn ZerL = Whn ZerL
Ξ“, Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3
Whn TopR = Whn TopR
Ξ“, Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3
OneR = OneR
Ξ“: t_ctx
s: state Ξ“
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ =[ val ]> Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), (s β‚œβŠ› f1) β‚œβŠ› f2 = s β‚œβŠ› f1 βŠ› f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3
Whn (OneL (s_subst Ξ“2 (s_subst Ξ“ s Ξ“2 f1) Ξ“3 f2)) = Whn (OneL (s_subst Ξ“ s Ξ“3 (f1 βŠ› f2)%asgn))
Ξ“: t_ctx
s: state Ξ“
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ =[ val ]> Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), (s β‚œβŠ› f1) β‚œβŠ› f2 = s β‚œβŠ› f1 βŠ› f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3
Whn (BotR (s_subst Ξ“2 (s_subst Ξ“ s Ξ“2 f1) Ξ“3 f2)) = Whn (BotR (s_subst Ξ“ s Ξ“3 (f1 βŠ› f2)%asgn))
Ξ“, Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3
BotL = BotL
Ξ“: t_ctx
A, B: pre_ty pos
w1: whn Ξ“ `+ A
H1: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ =[ val ]> Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), (w1 `α΅₯βŠ› f1) α΅₯βŠ› f2 = w1 `α΅₯βŠ› f1 βŠ› f2
w2: whn Ξ“ `+ B
H2: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ =[ val ]> Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), (w2 `α΅₯βŠ› f1) α΅₯βŠ› f2 = w2 `α΅₯βŠ› f1 βŠ› f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3
TenR ((w1 `α΅₯βŠ› f1) `α΅₯βŠ› f2) ((w2 `α΅₯βŠ› f1) `α΅₯βŠ› f2) = TenR (w1 `α΅₯βŠ› f1 βŠ› f2) (w2 `α΅₯βŠ› f1 βŠ› f2)
Ξ“: t_ctx
A, B: pre_ty pos
s: state (Ξ“ β–Άβ‚“ `+ A β–Άβ‚“ `+ B)
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `+ A β–Άβ‚“ `+ B) =[ val ]> Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), (s β‚œβŠ› f1) β‚œβŠ› f2 = s β‚œβŠ› f1 βŠ› f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3
Whn (TenL (s_subst (Ξ“2 β–Άβ‚“ `+ A β–Άβ‚“ `+ B) (s_subst (Ξ“ β–Άβ‚“ `+ A β–Άβ‚“ `+ B) s (Ξ“2 β–Άβ‚“ `+ A β–Άβ‚“ `+ B) (a_shift2 f1)) (Ξ“3 β–Άβ‚“ `+ A β–Άβ‚“ `+ B) (a_shift2 f2))) = Whn (TenL (s_subst (Ξ“ β–Άβ‚“ `+ A β–Άβ‚“ `+ B) s (Ξ“3 β–Άβ‚“ `+ A β–Άβ‚“ `+ B) (a_shift2 (f1 βŠ› f2))))
Ξ“: t_ctx
A, B: pre_ty neg
s: state (Ξ“ β–Άβ‚“ `- A β–Άβ‚“ `- B)
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `- A β–Άβ‚“ `- B) =[ val ]> Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), (s β‚œβŠ› f1) β‚œβŠ› f2 = s β‚œβŠ› f1 βŠ› f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3
Whn (ParR (s_subst (Ξ“2 β–Άβ‚“ `- A β–Άβ‚“ `- B) (s_subst (Ξ“ β–Άβ‚“ `- A β–Άβ‚“ `- B) s (Ξ“2 β–Άβ‚“ `- A β–Άβ‚“ `- B) (a_shift2 f1)) (Ξ“3 β–Άβ‚“ `- A β–Άβ‚“ `- B) (a_shift2 f2))) = Whn (ParR (s_subst (Ξ“ β–Άβ‚“ `- A β–Άβ‚“ `- B) s (Ξ“3 β–Άβ‚“ `- A β–Άβ‚“ `- B) (a_shift2 (f1 βŠ› f2))))
Ξ“: t_ctx
A, B: pre_ty neg
w1: whn Ξ“ `- A
H1: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ =[ val ]> Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), (w1 `α΅₯βŠ› f1) α΅₯βŠ› f2 = w1 `α΅₯βŠ› f1 βŠ› f2
w2: whn Ξ“ `- B
H2: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ =[ val ]> Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), (w2 `α΅₯βŠ› f1) α΅₯βŠ› f2 = w2 `α΅₯βŠ› f1 βŠ› f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3
ParL ((w1 `α΅₯βŠ› f1) `α΅₯βŠ› f2) ((w2 `α΅₯βŠ› f1) `α΅₯βŠ› f2) = ParL (w1 `α΅₯βŠ› f1 βŠ› f2) (w2 `α΅₯βŠ› f1 βŠ› f2)
Ξ“: t_ctx
A, B: pre_ty pos
w: whn Ξ“ `+ A
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ =[ val ]> Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), (w `α΅₯βŠ› f1) α΅₯βŠ› f2 = w `α΅₯βŠ› f1 βŠ› f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3
OrR1 ((w `α΅₯βŠ› f1) `α΅₯βŠ› f2) = OrR1 (w `α΅₯βŠ› f1 βŠ› f2)
Ξ“: t_ctx
A, B: pre_ty pos
w: whn Ξ“ `+ B
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ =[ val ]> Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), (w `α΅₯βŠ› f1) α΅₯βŠ› f2 = w `α΅₯βŠ› f1 βŠ› f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3
OrR2 ((w `α΅₯βŠ› f1) `α΅₯βŠ› f2) = OrR2 (w `α΅₯βŠ› f1 βŠ› f2)
Ξ“: t_ctx
A, B: pre_ty pos
s1: state (Ξ“ β–Άβ‚“ `+ A)
H1: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `+ A) =[ val ]> Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), (s1 β‚œβŠ› f1) β‚œβŠ› f2 = s1 β‚œβŠ› f1 βŠ› f2
s2: state (Ξ“ β–Άβ‚“ `+ B)
H2: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `+ B) =[ val ]> Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), (s2 β‚œβŠ› f1) β‚œβŠ› f2 = s2 β‚œβŠ› f1 βŠ› f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3
Whn (OrL (s_subst (Ξ“2 β–Άβ‚“ `+ A) (s_subst (Ξ“ β–Άβ‚“ `+ A) s1 (Ξ“2 β–Άβ‚“ `+ A) (a_shift1 f1)) (Ξ“3 β–Άβ‚“ `+ A) (a_shift1 f2)) (s_subst (Ξ“2 β–Άβ‚“ `+ B) (s_subst (Ξ“ β–Άβ‚“ `+ B) s2 (Ξ“2 β–Άβ‚“ `+ B) (a_shift1 f1)) (Ξ“3 β–Άβ‚“ `+ B) (a_shift1 f2))) = Whn (OrL (s_subst (Ξ“ β–Άβ‚“ `+ A) s1 (Ξ“3 β–Άβ‚“ `+ A) (a_shift1 (f1 βŠ› f2))) (s_subst (Ξ“ β–Άβ‚“ `+ B) s2 (Ξ“3 β–Άβ‚“ `+ B) (a_shift1 (f1 βŠ› f2))))
Ξ“: t_ctx
A, B: pre_ty neg
s1: state (Ξ“ β–Άβ‚“ `- A)
H1: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `- A) =[ val ]> Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), (s1 β‚œβŠ› f1) β‚œβŠ› f2 = s1 β‚œβŠ› f1 βŠ› f2
s2: state (Ξ“ β–Άβ‚“ `- B)
H2: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `- B) =[ val ]> Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), (s2 β‚œβŠ› f1) β‚œβŠ› f2 = s2 β‚œβŠ› f1 βŠ› f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3
Whn (AndR (s_subst (Ξ“2 β–Άβ‚“ `- A) (s_subst (Ξ“ β–Άβ‚“ `- A) s1 (Ξ“2 β–Άβ‚“ `- A) (a_shift1 f1)) (Ξ“3 β–Άβ‚“ `- A) (a_shift1 f2)) (s_subst (Ξ“2 β–Άβ‚“ `- B) (s_subst (Ξ“ β–Άβ‚“ `- B) s2 (Ξ“2 β–Άβ‚“ `- B) (a_shift1 f1)) (Ξ“3 β–Άβ‚“ `- B) (a_shift1 f2))) = Whn (AndR (s_subst (Ξ“ β–Άβ‚“ `- A) s1 (Ξ“3 β–Άβ‚“ `- A) (a_shift1 (f1 βŠ› f2))) (s_subst (Ξ“ β–Άβ‚“ `- B) s2 (Ξ“3 β–Άβ‚“ `- B) (a_shift1 (f1 βŠ› f2))))
Ξ“: t_ctx
A, B: pre_ty neg
w: whn Ξ“ `- A
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ =[ val ]> Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), (w `α΅₯βŠ› f1) α΅₯βŠ› f2 = w `α΅₯βŠ› f1 βŠ› f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3
AndL1 ((w `α΅₯βŠ› f1) `α΅₯βŠ› f2) = AndL1 (w `α΅₯βŠ› f1 βŠ› f2)
Ξ“: t_ctx
A, B: pre_ty neg
w: whn Ξ“ `- B
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ =[ val ]> Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), (w `α΅₯βŠ› f1) α΅₯βŠ› f2 = w `α΅₯βŠ› f1 βŠ› f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3
AndL2 ((w `α΅₯βŠ› f1) `α΅₯βŠ› f2) = AndL2 (w `α΅₯βŠ› f1 βŠ› f2)
Ξ“: t_ctx
A: pre_ty neg
t: term Ξ“ `+ A
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ =[ val ]> Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), (t `β‚œβŠ› f1) `β‚œβŠ› f2 = t `β‚œβŠ› f1 βŠ› f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3
ShiftPR ((t `β‚œβŠ› f1) `β‚œβŠ› f2) = ShiftPR (t `β‚œβŠ› f1 βŠ› f2)
Ξ“: t_ctx
A: pre_ty neg
s: state (Ξ“ β–Άβ‚“ `+ A)
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `+ A) =[ val ]> Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), (s β‚œβŠ› f1) β‚œβŠ› f2 = s β‚œβŠ› f1 βŠ› f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3
Whn (ShiftPL (s_subst (Ξ“2 β–Άβ‚“ `+ A) (s_subst (Ξ“ β–Άβ‚“ `+ A) s (Ξ“2 β–Άβ‚“ `+ A) (a_shift1 f1)) (Ξ“3 β–Άβ‚“ `+ A) (a_shift1 f2))) = Whn (ShiftPL (s_subst (Ξ“ β–Άβ‚“ `+ A) s (Ξ“3 β–Άβ‚“ `+ A) (a_shift1 (f1 βŠ› f2))))
Ξ“: t_ctx
A: pre_ty pos
s: state (Ξ“ β–Άβ‚“ `- A)
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `- A) =[ val ]> Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), (s β‚œβŠ› f1) β‚œβŠ› f2 = s β‚œβŠ› f1 βŠ› f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3
Whn (ShiftNR (s_subst (Ξ“2 β–Άβ‚“ `- A) (s_subst (Ξ“ β–Άβ‚“ `- A) s (Ξ“2 β–Άβ‚“ `- A) (a_shift1 f1)) (Ξ“3 β–Άβ‚“ `- A) (a_shift1 f2))) = Whn (ShiftNR (s_subst (Ξ“ β–Άβ‚“ `- A) s (Ξ“3 β–Άβ‚“ `- A) (a_shift1 (f1 βŠ› f2))))
Ξ“: t_ctx
A: pre_ty pos
t: term Ξ“ `- A
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ =[ val ]> Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), (t `β‚œβŠ› f1) `β‚œβŠ› f2 = t `β‚œβŠ› f1 βŠ› f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3
ShiftNL ((t `β‚œβŠ› f1) `β‚œβŠ› f2) = ShiftNL (t `β‚œβŠ› f1 βŠ› f2)
Ξ“: t_ctx
A: pre_ty neg
w: whn Ξ“ `- A
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ =[ val ]> Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), (w `α΅₯βŠ› f1) α΅₯βŠ› f2 = w `α΅₯βŠ› f1 βŠ› f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3
NegPR ((w `α΅₯βŠ› f1) `α΅₯βŠ› f2) = NegPR (w `α΅₯βŠ› f1 βŠ› f2)
Ξ“: t_ctx
A: pre_ty neg
s: state (Ξ“ β–Άβ‚“ `- A)
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `- A) =[ val ]> Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), (s β‚œβŠ› f1) β‚œβŠ› f2 = s β‚œβŠ› f1 βŠ› f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3
Whn (NegPL (s_subst (Ξ“2 β–Άβ‚“ `- A) (s_subst (Ξ“ β–Άβ‚“ `- A) s (Ξ“2 β–Άβ‚“ `- A) (a_shift1 f1)) (Ξ“3 β–Άβ‚“ `- A) (a_shift1 f2))) = Whn (NegPL (s_subst (Ξ“ β–Άβ‚“ `- A) s (Ξ“3 β–Άβ‚“ `- A) (a_shift1 (f1 βŠ› f2))))
Ξ“: t_ctx
A: pre_ty pos
s: state (Ξ“ β–Άβ‚“ `+ A)
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `+ A) =[ val ]> Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), (s β‚œβŠ› f1) β‚œβŠ› f2 = s β‚œβŠ› f1 βŠ› f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3
Whn (NegNR (s_subst (Ξ“2 β–Άβ‚“ `+ A) (s_subst (Ξ“ β–Άβ‚“ `+ A) s (Ξ“2 β–Άβ‚“ `+ A) (a_shift1 f1)) (Ξ“3 β–Άβ‚“ `+ A) (a_shift1 f2))) = Whn (NegNR (s_subst (Ξ“ β–Άβ‚“ `+ A) s (Ξ“3 β–Άβ‚“ `+ A) (a_shift1 (f1 βŠ› f2))))
Ξ“: t_ctx
A: pre_ty pos
w: whn Ξ“ `+ A
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ =[ val ]> Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), (w `α΅₯βŠ› f1) α΅₯βŠ› f2 = w `α΅₯βŠ› f1 βŠ› f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3
NegNL ((w `α΅₯βŠ› f1) `α΅₯βŠ› f2) = NegNL (w `α΅₯βŠ› f1 βŠ› f2)
Ξ“: t_ctx
p: pol
A: pre_ty p
t1: term Ξ“ `+ A
H1: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ =[ val ]> Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), (t1 `β‚œβŠ› f1) `β‚œβŠ› f2 = t1 `β‚œβŠ› f1 βŠ› f2
t2: term Ξ“ `- A
H2: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ =[ val ]> Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), (t2 `β‚œβŠ› f1) `β‚œβŠ› f2 = t2 `β‚œβŠ› f1 βŠ› f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3
Cut p ((t1 `β‚œβŠ› f1) `β‚œβŠ› f2) ((t2 `β‚œβŠ› f1) `β‚œβŠ› f2) = Cut p (t1 `β‚œβŠ› f1 βŠ› f2) (t2 `β‚œβŠ› f1 βŠ› f2)
Ξ“: t_ctx
A: ty
s: state (Ξ“ β–Άβ‚“ A †)
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ A †) =[ val ]> Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), (s β‚œβŠ› f1) β‚œβŠ› f2 = s β‚œβŠ› f1 βŠ› f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3

Mu (s_subst (Ξ“2 β–Άβ‚“ A †) (s_subst (Ξ“ β–Άβ‚“ A †) s (Ξ“2 β–Άβ‚“ A †) (a_shift1 f1)) (Ξ“3 β–Άβ‚“ A †) (a_shift1 f2)) = Mu (s_subst (Ξ“ β–Άβ‚“ A †) s (Ξ“3 β–Άβ‚“ A †) (a_shift1 (f1 βŠ› f2)))
Ξ“: t_ctx
A: pre_ty pos
t: term (Ξ“ β–Άβ‚“ `- A) `- A
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `- A) =[ val ]> Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), (t `β‚œβŠ› f1) `β‚œβŠ› f2 = t `β‚œβŠ› f1 βŠ› f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3
RecL ((t `β‚œβŠ› a_shift1 f1) `β‚œβŠ› a_shift1 f2) = RecL (t `β‚œβŠ› a_shift1 (f1 βŠ› f2))
Ξ“: t_ctx
A: pre_ty neg
t: term (Ξ“ β–Άβ‚“ `+ A) `+ A
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `+ A) =[ val ]> Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), (t `β‚œβŠ› f1) `β‚œβŠ› f2 = t `β‚œβŠ› f1 βŠ› f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3
RecR ((t `β‚œβŠ› a_shift1 f1) `β‚œβŠ› a_shift1 f2) = RecR (t `β‚œβŠ› a_shift1 (f1 βŠ› f2))
Ξ“: t_ctx
p: pre_ty pos
w: whn Ξ“ `+ p
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ =[ val ]> Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), (w `α΅₯βŠ› f1) α΅₯βŠ› f2 = w `α΅₯βŠ› f1 βŠ› f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3
Whn ((w `α΅₯βŠ› f1) `α΅₯βŠ› f2) = Whn (w `α΅₯βŠ› f1 βŠ› f2)
Ξ“: t_ctx
p: pre_ty neg
w: whn Ξ“ `+ p
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ =[ val ]> Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), (w `α΅₯βŠ› f1) α΅₯βŠ› f2 = w `α΅₯βŠ› f1 βŠ› f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3
(w `α΅₯βŠ› f1) `β‚œβŠ› f2 = w `α΅₯βŠ› f1 βŠ› f2
Ξ“: t_ctx
p: pre_ty pos
w: whn Ξ“ `- p
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ =[ val ]> Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), (w `α΅₯βŠ› f1) α΅₯βŠ› f2 = w `α΅₯βŠ› f1 βŠ› f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3
(w `α΅₯βŠ› f1) `β‚œβŠ› f2 = w `α΅₯βŠ› f1 βŠ› f2
Ξ“: t_ctx
p: pre_ty neg
w: whn Ξ“ `- p
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ =[ val ]> Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), (w `α΅₯βŠ› f1) α΅₯βŠ› f2 = w `α΅₯βŠ› f1 βŠ› f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3
Whn ((w `α΅₯βŠ› f1) `α΅₯βŠ› f2) = Whn (w `α΅₯βŠ› f1 βŠ› f2)
Ξ“: t_ctx
A: ty
h: Ξ“ βˆ‹ A
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3
v_subst Ξ“2 A (f1 A h) Ξ“3 f2 = v_subst Ξ“2 A (f1 A h) Ξ“3 f2
Ξ“, Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3
Whn ZerL = Whn ZerL
Ξ“, Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3
Whn TopR = Whn TopR
Ξ“, Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3
OneR = OneR
Ξ“: t_ctx
s: state Ξ“
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ =[ val ]> Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), (s β‚œβŠ› f1) β‚œβŠ› f2 = s β‚œβŠ› f1 βŠ› f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3
Whn (OneL (s_subst Ξ“2 (s_subst Ξ“ s Ξ“2 f1) Ξ“3 f2)) = Whn (OneL (s_subst Ξ“ s Ξ“3 (f1 βŠ› f2)%asgn))
Ξ“: t_ctx
s: state Ξ“
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ =[ val ]> Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), (s β‚œβŠ› f1) β‚œβŠ› f2 = s β‚œβŠ› f1 βŠ› f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3
Whn (BotR (s_subst Ξ“2 (s_subst Ξ“ s Ξ“2 f1) Ξ“3 f2)) = Whn (BotR (s_subst Ξ“ s Ξ“3 (f1 βŠ› f2)%asgn))
Ξ“, Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3
BotL = BotL
Ξ“: t_ctx
A, B: pre_ty pos
w1: whn Ξ“ `+ A
H1: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ =[ val ]> Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), (w1 `α΅₯βŠ› f1) α΅₯βŠ› f2 = w1 `α΅₯βŠ› f1 βŠ› f2
w2: whn Ξ“ `+ B
H2: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ =[ val ]> Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), (w2 `α΅₯βŠ› f1) α΅₯βŠ› f2 = w2 `α΅₯βŠ› f1 βŠ› f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3
TenR ((w1 `α΅₯βŠ› f1) `α΅₯βŠ› f2) ((w2 `α΅₯βŠ› f1) `α΅₯βŠ› f2) = TenR (w1 `α΅₯βŠ› f1 βŠ› f2) (w2 `α΅₯βŠ› f1 βŠ› f2)
Ξ“: t_ctx
A, B: pre_ty pos
s: state (Ξ“ β–Άβ‚“ `+ A β–Άβ‚“ `+ B)
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `+ A β–Άβ‚“ `+ B) =[ val ]> Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), (s β‚œβŠ› f1) β‚œβŠ› f2 = s β‚œβŠ› f1 βŠ› f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3
Whn (TenL (s_subst (Ξ“2 β–Άβ‚“ `+ A β–Άβ‚“ `+ B) (s_subst (Ξ“ β–Άβ‚“ `+ A β–Άβ‚“ `+ B) s (Ξ“2 β–Άβ‚“ `+ A β–Άβ‚“ `+ B) (a_shift2 f1)) (Ξ“3 β–Άβ‚“ `+ A β–Άβ‚“ `+ B) (a_shift2 f2))) = Whn (TenL (s_subst (Ξ“ β–Άβ‚“ `+ A β–Άβ‚“ `+ B) s (Ξ“3 β–Άβ‚“ `+ A β–Άβ‚“ `+ B) (a_shift2 (f1 βŠ› f2))))
Ξ“: t_ctx
A, B: pre_ty neg
s: state (Ξ“ β–Άβ‚“ `- A β–Άβ‚“ `- B)
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `- A β–Άβ‚“ `- B) =[ val ]> Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), (s β‚œβŠ› f1) β‚œβŠ› f2 = s β‚œβŠ› f1 βŠ› f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3
Whn (ParR (s_subst (Ξ“2 β–Άβ‚“ `- A β–Άβ‚“ `- B) (s_subst (Ξ“ β–Άβ‚“ `- A β–Άβ‚“ `- B) s (Ξ“2 β–Άβ‚“ `- A β–Άβ‚“ `- B) (a_shift2 f1)) (Ξ“3 β–Άβ‚“ `- A β–Άβ‚“ `- B) (a_shift2 f2))) = Whn (ParR (s_subst (Ξ“ β–Άβ‚“ `- A β–Άβ‚“ `- B) s (Ξ“3 β–Άβ‚“ `- A β–Άβ‚“ `- B) (a_shift2 (f1 βŠ› f2))))
Ξ“: t_ctx
A, B: pre_ty neg
w1: whn Ξ“ `- A
H1: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ =[ val ]> Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), (w1 `α΅₯βŠ› f1) α΅₯βŠ› f2 = w1 `α΅₯βŠ› f1 βŠ› f2
w2: whn Ξ“ `- B
H2: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ =[ val ]> Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), (w2 `α΅₯βŠ› f1) α΅₯βŠ› f2 = w2 `α΅₯βŠ› f1 βŠ› f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3
ParL ((w1 `α΅₯βŠ› f1) `α΅₯βŠ› f2) ((w2 `α΅₯βŠ› f1) `α΅₯βŠ› f2) = ParL (w1 `α΅₯βŠ› f1 βŠ› f2) (w2 `α΅₯βŠ› f1 βŠ› f2)
Ξ“: t_ctx
A, B: pre_ty pos
w: whn Ξ“ `+ A
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ =[ val ]> Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), (w `α΅₯βŠ› f1) α΅₯βŠ› f2 = w `α΅₯βŠ› f1 βŠ› f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3
OrR1 ((w `α΅₯βŠ› f1) `α΅₯βŠ› f2) = OrR1 (w `α΅₯βŠ› f1 βŠ› f2)
Ξ“: t_ctx
A, B: pre_ty pos
w: whn Ξ“ `+ B
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ =[ val ]> Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), (w `α΅₯βŠ› f1) α΅₯βŠ› f2 = w `α΅₯βŠ› f1 βŠ› f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3
OrR2 ((w `α΅₯βŠ› f1) `α΅₯βŠ› f2) = OrR2 (w `α΅₯βŠ› f1 βŠ› f2)
Ξ“: t_ctx
A, B: pre_ty pos
s1: state (Ξ“ β–Άβ‚“ `+ A)
H1: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `+ A) =[ val ]> Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), (s1 β‚œβŠ› f1) β‚œβŠ› f2 = s1 β‚œβŠ› f1 βŠ› f2
s2: state (Ξ“ β–Άβ‚“ `+ B)
H2: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `+ B) =[ val ]> Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), (s2 β‚œβŠ› f1) β‚œβŠ› f2 = s2 β‚œβŠ› f1 βŠ› f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3
Whn (OrL (s_subst (Ξ“2 β–Άβ‚“ `+ A) (s_subst (Ξ“ β–Άβ‚“ `+ A) s1 (Ξ“2 β–Άβ‚“ `+ A) (a_shift1 f1)) (Ξ“3 β–Άβ‚“ `+ A) (a_shift1 f2)) (s_subst (Ξ“2 β–Άβ‚“ `+ B) (s_subst (Ξ“ β–Άβ‚“ `+ B) s2 (Ξ“2 β–Άβ‚“ `+ B) (a_shift1 f1)) (Ξ“3 β–Άβ‚“ `+ B) (a_shift1 f2))) = Whn (OrL (s_subst (Ξ“ β–Άβ‚“ `+ A) s1 (Ξ“3 β–Άβ‚“ `+ A) (a_shift1 (f1 βŠ› f2))) (s_subst (Ξ“ β–Άβ‚“ `+ B) s2 (Ξ“3 β–Άβ‚“ `+ B) (a_shift1 (f1 βŠ› f2))))
Ξ“: t_ctx
A, B: pre_ty neg
s1: state (Ξ“ β–Άβ‚“ `- A)
H1: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `- A) =[ val ]> Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), (s1 β‚œβŠ› f1) β‚œβŠ› f2 = s1 β‚œβŠ› f1 βŠ› f2
s2: state (Ξ“ β–Άβ‚“ `- B)
H2: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `- B) =[ val ]> Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), (s2 β‚œβŠ› f1) β‚œβŠ› f2 = s2 β‚œβŠ› f1 βŠ› f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3
Whn (AndR (s_subst (Ξ“2 β–Άβ‚“ `- A) (s_subst (Ξ“ β–Άβ‚“ `- A) s1 (Ξ“2 β–Άβ‚“ `- A) (a_shift1 f1)) (Ξ“3 β–Άβ‚“ `- A) (a_shift1 f2)) (s_subst (Ξ“2 β–Άβ‚“ `- B) (s_subst (Ξ“ β–Άβ‚“ `- B) s2 (Ξ“2 β–Άβ‚“ `- B) (a_shift1 f1)) (Ξ“3 β–Άβ‚“ `- B) (a_shift1 f2))) = Whn (AndR (s_subst (Ξ“ β–Άβ‚“ `- A) s1 (Ξ“3 β–Άβ‚“ `- A) (a_shift1 (f1 βŠ› f2))) (s_subst (Ξ“ β–Άβ‚“ `- B) s2 (Ξ“3 β–Άβ‚“ `- B) (a_shift1 (f1 βŠ› f2))))
Ξ“: t_ctx
A, B: pre_ty neg
w: whn Ξ“ `- A
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ =[ val ]> Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), (w `α΅₯βŠ› f1) α΅₯βŠ› f2 = w `α΅₯βŠ› f1 βŠ› f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3
AndL1 ((w `α΅₯βŠ› f1) `α΅₯βŠ› f2) = AndL1 (w `α΅₯βŠ› f1 βŠ› f2)
Ξ“: t_ctx
A, B: pre_ty neg
w: whn Ξ“ `- B
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ =[ val ]> Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), (w `α΅₯βŠ› f1) α΅₯βŠ› f2 = w `α΅₯βŠ› f1 βŠ› f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3
AndL2 ((w `α΅₯βŠ› f1) `α΅₯βŠ› f2) = AndL2 (w `α΅₯βŠ› f1 βŠ› f2)
Ξ“: t_ctx
A: pre_ty neg
t: term Ξ“ `+ A
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ =[ val ]> Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), (t `β‚œβŠ› f1) `β‚œβŠ› f2 = t `β‚œβŠ› f1 βŠ› f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3
ShiftPR ((t `β‚œβŠ› f1) `β‚œβŠ› f2) = ShiftPR (t `β‚œβŠ› f1 βŠ› f2)
Ξ“: t_ctx
A: pre_ty neg
s: state (Ξ“ β–Άβ‚“ `+ A)
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `+ A) =[ val ]> Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), (s β‚œβŠ› f1) β‚œβŠ› f2 = s β‚œβŠ› f1 βŠ› f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3
Whn (ShiftPL (s_subst (Ξ“2 β–Άβ‚“ `+ A) (s_subst (Ξ“ β–Άβ‚“ `+ A) s (Ξ“2 β–Άβ‚“ `+ A) (a_shift1 f1)) (Ξ“3 β–Άβ‚“ `+ A) (a_shift1 f2))) = Whn (ShiftPL (s_subst (Ξ“ β–Άβ‚“ `+ A) s (Ξ“3 β–Άβ‚“ `+ A) (a_shift1 (f1 βŠ› f2))))
Ξ“: t_ctx
A: pre_ty pos
s: state (Ξ“ β–Άβ‚“ `- A)
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `- A) =[ val ]> Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), (s β‚œβŠ› f1) β‚œβŠ› f2 = s β‚œβŠ› f1 βŠ› f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3
Whn (ShiftNR (s_subst (Ξ“2 β–Άβ‚“ `- A) (s_subst (Ξ“ β–Άβ‚“ `- A) s (Ξ“2 β–Άβ‚“ `- A) (a_shift1 f1)) (Ξ“3 β–Άβ‚“ `- A) (a_shift1 f2))) = Whn (ShiftNR (s_subst (Ξ“ β–Άβ‚“ `- A) s (Ξ“3 β–Άβ‚“ `- A) (a_shift1 (f1 βŠ› f2))))
Ξ“: t_ctx
A: pre_ty pos
t: term Ξ“ `- A
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ =[ val ]> Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), (t `β‚œβŠ› f1) `β‚œβŠ› f2 = t `β‚œβŠ› f1 βŠ› f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3
ShiftNL ((t `β‚œβŠ› f1) `β‚œβŠ› f2) = ShiftNL (t `β‚œβŠ› f1 βŠ› f2)
Ξ“: t_ctx
A: pre_ty neg
w: whn Ξ“ `- A
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ =[ val ]> Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), (w `α΅₯βŠ› f1) α΅₯βŠ› f2 = w `α΅₯βŠ› f1 βŠ› f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3
NegPR ((w `α΅₯βŠ› f1) `α΅₯βŠ› f2) = NegPR (w `α΅₯βŠ› f1 βŠ› f2)
Ξ“: t_ctx
A: pre_ty neg
s: state (Ξ“ β–Άβ‚“ `- A)
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `- A) =[ val ]> Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), (s β‚œβŠ› f1) β‚œβŠ› f2 = s β‚œβŠ› f1 βŠ› f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3
Whn (NegPL (s_subst (Ξ“2 β–Άβ‚“ `- A) (s_subst (Ξ“ β–Άβ‚“ `- A) s (Ξ“2 β–Άβ‚“ `- A) (a_shift1 f1)) (Ξ“3 β–Άβ‚“ `- A) (a_shift1 f2))) = Whn (NegPL (s_subst (Ξ“ β–Άβ‚“ `- A) s (Ξ“3 β–Άβ‚“ `- A) (a_shift1 (f1 βŠ› f2))))
Ξ“: t_ctx
A: pre_ty pos
s: state (Ξ“ β–Άβ‚“ `+ A)
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `+ A) =[ val ]> Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), (s β‚œβŠ› f1) β‚œβŠ› f2 = s β‚œβŠ› f1 βŠ› f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3
Whn (NegNR (s_subst (Ξ“2 β–Άβ‚“ `+ A) (s_subst (Ξ“ β–Άβ‚“ `+ A) s (Ξ“2 β–Άβ‚“ `+ A) (a_shift1 f1)) (Ξ“3 β–Άβ‚“ `+ A) (a_shift1 f2))) = Whn (NegNR (s_subst (Ξ“ β–Άβ‚“ `+ A) s (Ξ“3 β–Άβ‚“ `+ A) (a_shift1 (f1 βŠ› f2))))
Ξ“: t_ctx
A: pre_ty pos
w: whn Ξ“ `+ A
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ =[ val ]> Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), (w `α΅₯βŠ› f1) α΅₯βŠ› f2 = w `α΅₯βŠ› f1 βŠ› f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3
NegNL ((w `α΅₯βŠ› f1) `α΅₯βŠ› f2) = NegNL (w `α΅₯βŠ› f1 βŠ› f2)
Ξ“: t_ctx
p: pol
A: pre_ty p
t1: term Ξ“ `+ A
H1: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ =[ val ]> Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), (t1 `β‚œβŠ› f1) `β‚œβŠ› f2 = t1 `β‚œβŠ› f1 βŠ› f2
t2: term Ξ“ `- A
H2: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : Ξ“ =[ val ]> Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), (t2 `β‚œβŠ› f1) `β‚œβŠ› f2 = t2 `β‚œβŠ› f1 βŠ› f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3
Cut p ((t1 `β‚œβŠ› f1) `β‚œβŠ› f2) ((t2 `β‚œβŠ› f1) `β‚œβŠ› f2) = Cut p (t1 `β‚œβŠ› f1 βŠ› f2) (t2 `β‚œβŠ› f1 βŠ› f2)
Ξ“: t_ctx
A: ty
s: state (Ξ“ β–Άβ‚“ A †)
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ A †) =[ val ]> Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), (s β‚œβŠ› f1) β‚œβŠ› f2 = s β‚œβŠ› f1 βŠ› f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3

s_subst (Ξ“2 β–Άβ‚“ A †) (s_subst (Ξ“ β–Άβ‚“ A †) s (Ξ“2 β–Άβ‚“ A †) (a_shift1 f1)) (Ξ“3 β–Άβ‚“ A †) (a_shift1 f2) = s_subst (Ξ“ β–Άβ‚“ A †) s (Ξ“3 β–Άβ‚“ A †) (a_shift1 (f1 βŠ› f2))
Ξ“: t_ctx
A: pre_ty pos
t: term (Ξ“ β–Άβ‚“ `- A) `- A
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `- A) =[ val ]> Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), (t `β‚œβŠ› f1) `β‚œβŠ› f2 = t `β‚œβŠ› f1 βŠ› f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3
(t `β‚œβŠ› a_shift1 f1) `β‚œβŠ› a_shift1 f2 = t `β‚œβŠ› a_shift1 (f1 βŠ› f2)
Ξ“: t_ctx
A: pre_ty neg
t: term (Ξ“ β–Άβ‚“ `+ A) `+ A
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `+ A) =[ val ]> Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), (t `β‚œβŠ› f1) `β‚œβŠ› f2 = t `β‚œβŠ› f1 βŠ› f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3
(t `β‚œβŠ› a_shift1 f1) `β‚œβŠ› a_shift1 f2 = t `β‚œβŠ› a_shift1 (f1 βŠ› f2)
Ξ“: t_ctx
A, B: pre_ty pos
s: state (Ξ“ β–Άβ‚“ `+ A β–Άβ‚“ `+ B)
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `+ A β–Άβ‚“ `+ B) =[ val ]> Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), (s β‚œβŠ› f1) β‚œβŠ› f2 = s β‚œβŠ› f1 βŠ› f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3
s_subst (Ξ“2 β–Άβ‚“ `+ A β–Άβ‚“ `+ B) (s_subst (Ξ“ β–Άβ‚“ `+ A β–Άβ‚“ `+ B) s (Ξ“2 β–Άβ‚“ `+ A β–Άβ‚“ `+ B) (a_shift2 f1)) (Ξ“3 β–Άβ‚“ `+ A β–Άβ‚“ `+ B) (a_shift2 f2) = s_subst (Ξ“ β–Άβ‚“ `+ A β–Άβ‚“ `+ B) s (Ξ“3 β–Άβ‚“ `+ A β–Άβ‚“ `+ B) (a_shift2 (f1 βŠ› f2))
Ξ“: t_ctx
A, B: pre_ty neg
s: state (Ξ“ β–Άβ‚“ `- A β–Άβ‚“ `- B)
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `- A β–Άβ‚“ `- B) =[ val ]> Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), (s β‚œβŠ› f1) β‚œβŠ› f2 = s β‚œβŠ› f1 βŠ› f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3
s_subst (Ξ“2 β–Άβ‚“ `- A β–Άβ‚“ `- B) (s_subst (Ξ“ β–Άβ‚“ `- A β–Άβ‚“ `- B) s (Ξ“2 β–Άβ‚“ `- A β–Άβ‚“ `- B) (a_shift2 f1)) (Ξ“3 β–Άβ‚“ `- A β–Άβ‚“ `- B) (a_shift2 f2) = s_subst (Ξ“ β–Άβ‚“ `- A β–Άβ‚“ `- B) s (Ξ“3 β–Άβ‚“ `- A β–Άβ‚“ `- B) (a_shift2 (f1 βŠ› f2))
Ξ“: t_ctx
A, B: pre_ty pos
s1: state (Ξ“ β–Άβ‚“ `+ A)
H1: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `+ A) =[ val ]> Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), (s1 β‚œβŠ› f1) β‚œβŠ› f2 = s1 β‚œβŠ› f1 βŠ› f2
s2: state (Ξ“ β–Άβ‚“ `+ B)
H2: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `+ B) =[ val ]> Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), (s2 β‚œβŠ› f1) β‚œβŠ› f2 = s2 β‚œβŠ› f1 βŠ› f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3
s_subst (Ξ“2 β–Άβ‚“ `+ A) (s_subst (Ξ“ β–Άβ‚“ `+ A) s1 (Ξ“2 β–Άβ‚“ `+ A) (a_shift1 f1)) (Ξ“3 β–Άβ‚“ `+ A) (a_shift1 f2) = s_subst (Ξ“ β–Άβ‚“ `+ A) s1 (Ξ“3 β–Άβ‚“ `+ A) (a_shift1 (f1 βŠ› f2))
Ξ“: t_ctx
A, B: pre_ty pos
s1: state (Ξ“ β–Άβ‚“ `+ A)
H1: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `+ A) =[ val ]> Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), (s1 β‚œβŠ› f1) β‚œβŠ› f2 = s1 β‚œβŠ› f1 βŠ› f2
s2: state (Ξ“ β–Άβ‚“ `+ B)
H2: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `+ B) =[ val ]> Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), (s2 β‚œβŠ› f1) β‚œβŠ› f2 = s2 β‚œβŠ› f1 βŠ› f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3
s_subst (Ξ“2 β–Άβ‚“ `+ B) (s_subst (Ξ“ β–Άβ‚“ `+ B) s2 (Ξ“2 β–Άβ‚“ `+ B) (a_shift1 f1)) (Ξ“3 β–Άβ‚“ `+ B) (a_shift1 f2) = s_subst (Ξ“ β–Άβ‚“ `+ B) s2 (Ξ“3 β–Άβ‚“ `+ B) (a_shift1 (f1 βŠ› f2))
Ξ“: t_ctx
A, B: pre_ty neg
s1: state (Ξ“ β–Άβ‚“ `- A)
H1: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `- A) =[ val ]> Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), (s1 β‚œβŠ› f1) β‚œβŠ› f2 = s1 β‚œβŠ› f1 βŠ› f2
s2: state (Ξ“ β–Άβ‚“ `- B)
H2: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `- B) =[ val ]> Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), (s2 β‚œβŠ› f1) β‚œβŠ› f2 = s2 β‚œβŠ› f1 βŠ› f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3
s_subst (Ξ“2 β–Άβ‚“ `- A) (s_subst (Ξ“ β–Άβ‚“ `- A) s1 (Ξ“2 β–Άβ‚“ `- A) (a_shift1 f1)) (Ξ“3 β–Άβ‚“ `- A) (a_shift1 f2) = s_subst (Ξ“ β–Άβ‚“ `- A) s1 (Ξ“3 β–Άβ‚“ `- A) (a_shift1 (f1 βŠ› f2))
Ξ“: t_ctx
A, B: pre_ty neg
s1: state (Ξ“ β–Άβ‚“ `- A)
H1: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `- A) =[ val ]> Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), (s1 β‚œβŠ› f1) β‚œβŠ› f2 = s1 β‚œβŠ› f1 βŠ› f2
s2: state (Ξ“ β–Άβ‚“ `- B)
H2: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `- B) =[ val ]> Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), (s2 β‚œβŠ› f1) β‚œβŠ› f2 = s2 β‚œβŠ› f1 βŠ› f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3
s_subst (Ξ“2 β–Άβ‚“ `- B) (s_subst (Ξ“ β–Άβ‚“ `- B) s2 (Ξ“2 β–Άβ‚“ `- B) (a_shift1 f1)) (Ξ“3 β–Άβ‚“ `- B) (a_shift1 f2) = s_subst (Ξ“ β–Άβ‚“ `- B) s2 (Ξ“3 β–Άβ‚“ `- B) (a_shift1 (f1 βŠ› f2))
Ξ“: t_ctx
A: pre_ty neg
s: state (Ξ“ β–Άβ‚“ `+ A)
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `+ A) =[ val ]> Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), (s β‚œβŠ› f1) β‚œβŠ› f2 = s β‚œβŠ› f1 βŠ› f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3
s_subst (Ξ“2 β–Άβ‚“ `+ A) (s_subst (Ξ“ β–Άβ‚“ `+ A) s (Ξ“2 β–Άβ‚“ `+ A) (a_shift1 f1)) (Ξ“3 β–Άβ‚“ `+ A) (a_shift1 f2) = s_subst (Ξ“ β–Άβ‚“ `+ A) s (Ξ“3 β–Άβ‚“ `+ A) (a_shift1 (f1 βŠ› f2))
Ξ“: t_ctx
A: pre_ty pos
s: state (Ξ“ β–Άβ‚“ `- A)
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `- A) =[ val ]> Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), (s β‚œβŠ› f1) β‚œβŠ› f2 = s β‚œβŠ› f1 βŠ› f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3
s_subst (Ξ“2 β–Άβ‚“ `- A) (s_subst (Ξ“ β–Άβ‚“ `- A) s (Ξ“2 β–Άβ‚“ `- A) (a_shift1 f1)) (Ξ“3 β–Άβ‚“ `- A) (a_shift1 f2) = s_subst (Ξ“ β–Άβ‚“ `- A) s (Ξ“3 β–Άβ‚“ `- A) (a_shift1 (f1 βŠ› f2))
Ξ“: t_ctx
A: pre_ty neg
s: state (Ξ“ β–Άβ‚“ `- A)
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `- A) =[ val ]> Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), (s β‚œβŠ› f1) β‚œβŠ› f2 = s β‚œβŠ› f1 βŠ› f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3
s_subst (Ξ“2 β–Άβ‚“ `- A) (s_subst (Ξ“ β–Άβ‚“ `- A) s (Ξ“2 β–Άβ‚“ `- A) (a_shift1 f1)) (Ξ“3 β–Άβ‚“ `- A) (a_shift1 f2) = s_subst (Ξ“ β–Άβ‚“ `- A) s (Ξ“3 β–Άβ‚“ `- A) (a_shift1 (f1 βŠ› f2))
Ξ“: t_ctx
A: pre_ty pos
s: state (Ξ“ β–Άβ‚“ `+ A)
H: forall (Ξ“2 Ξ“3 : t_ctx) (f1 : (Ξ“ β–Άβ‚“ `+ A) =[ val ]> Ξ“2) (f2 : Ξ“2 =[ val ]> Ξ“3), (s β‚œβŠ› f1) β‚œβŠ› f2 = s β‚œβŠ› f1 βŠ› f2
Ξ“2, Ξ“3: t_ctx
f1: Ξ“ =[ val ]> Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3
s_subst (Ξ“2 β–Άβ‚“ `+ A) (s_subst (Ξ“ β–Άβ‚“ `+ A) s (Ξ“2 β–Άβ‚“ `+ A) (a_shift1 f1)) (Ξ“3 β–Άβ‚“ `+ A) (a_shift1 f2) = s_subst (Ξ“ β–Άβ‚“ `+ A) s (Ξ“3 β–Άβ‚“ `+ A) (a_shift1 (f1 βŠ› f2))
all: first [ rewrite a_shift1_comp | rewrite a_shift2_comp ]; auto. Qed.
Ξ“1, Ξ“2, Ξ“3: t_ctx
f1: Ξ“1 =[ val ]> Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3
A: ty
t: term Ξ“1 A

(t `β‚œβŠ› f1) `β‚œβŠ› f2 = t `β‚œβŠ› f1 βŠ› f2
now apply (term_ind_mut _ _ _ sub_sub_prf). Qed.
Ξ“1, Ξ“2, Ξ“3: t_ctx
f1: Ξ“1 =[ val ]> Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3
A: ty
v: whn Ξ“1 A

(v `α΅₯βŠ› f1) α΅₯βŠ› f2 = v `α΅₯βŠ› f1 βŠ› f2
now apply (whn_ind_mut _ _ _ sub_sub_prf). Qed.
Ξ“1, Ξ“2, Ξ“3: t_ctx
f1: Ξ“1 =[ val ]> Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3
s: state Ξ“1

(s β‚œβŠ› f1) β‚œβŠ› f2 = s β‚œβŠ› f1 βŠ› f2
now apply (state_ind_mut _ _ _ sub_sub_prf). Qed.
Ξ“1, Ξ“2, Ξ“3: t_ctx
f1: Ξ“1 =[ val ]> Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3
A: ty
v: val Ξ“1 A

(v α΅₯βŠ› f1) α΅₯βŠ› f2 = v α΅₯βŠ› f1 βŠ› f2
Ξ“1, Ξ“2, Ξ“3: t_ctx
f1: Ξ“1 =[ val ]> Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3
p: pre_ty pos
v: val Ξ“1 `+ p

(v α΅₯βŠ› f1) α΅₯βŠ› f2 = v α΅₯βŠ› f1 βŠ› f2
Ξ“1, Ξ“2, Ξ“3: t_ctx
f1: Ξ“1 =[ val ]> Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3
p: pre_ty neg
v: val Ξ“1 `+ p
(v α΅₯βŠ› f1) α΅₯βŠ› f2 = v α΅₯βŠ› f1 βŠ› f2
Ξ“1, Ξ“2, Ξ“3: t_ctx
f1: Ξ“1 =[ val ]> Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3
p: pre_ty pos
v: val Ξ“1 `- p
(v α΅₯βŠ› f1) α΅₯βŠ› f2 = v α΅₯βŠ› f1 βŠ› f2
Ξ“1, Ξ“2, Ξ“3: t_ctx
f1: Ξ“1 =[ val ]> Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3
p: pre_ty neg
v: val Ξ“1 `- p
(v α΅₯βŠ› f1) α΅₯βŠ› f2 = v α΅₯βŠ› f1 βŠ› f2
Ξ“1, Ξ“2, Ξ“3: t_ctx
f1: Ξ“1 =[ val ]> Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3
p: pre_ty pos
v: val Ξ“1 `+ p

(v α΅₯βŠ› f1) α΅₯βŠ› f2 = v α΅₯βŠ› f1 βŠ› f2
now apply w_sub_sub.
Ξ“1, Ξ“2, Ξ“3: t_ctx
f1: Ξ“1 =[ val ]> Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3
p: pre_ty neg
v: val Ξ“1 `+ p

(v α΅₯βŠ› f1) α΅₯βŠ› f2 = v α΅₯βŠ› f1 βŠ› f2
now apply t_sub_sub.
Ξ“1, Ξ“2, Ξ“3: t_ctx
f1: Ξ“1 =[ val ]> Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3
p: pre_ty pos
v: val Ξ“1 `- p

(v α΅₯βŠ› f1) α΅₯βŠ› f2 = v α΅₯βŠ› f1 βŠ› f2
now apply t_sub_sub.
Ξ“1, Ξ“2, Ξ“3: t_ctx
f1: Ξ“1 =[ val ]> Ξ“2
f2: Ξ“2 =[ val ]> Ξ“3
p: pre_ty neg
v: val Ξ“1 `- p

(v α΅₯βŠ› f1) α΅₯βŠ› f2 = v α΅₯βŠ› f1 βŠ› f2
now apply w_sub_sub. Qed.
Ξ“1, Ξ“2, Ξ“3, Ξ“4: t_ctx
u: Ξ“1 =[ val ]> Ξ“2
v: Ξ“2 =[ val ]> Ξ“3
w: Ξ“3 =[ val ]> Ξ“4

(u βŠ› v) βŠ› w ≑ₐ u βŠ› (v βŠ› w)
intros ? i; unfold a_comp; now apply v_sub_sub. Qed. Definition t_sub_id_l_P Ξ“ A (t : term Ξ“ A) : Prop := t `β‚œβŠ› var = t. Definition w_sub_id_l_P Ξ“ A (v : whn Ξ“ A) : Prop := v `α΅₯βŠ› var = v. Definition s_sub_id_l_P Ξ“ (s : state Ξ“) : Prop := s β‚œβŠ› var = s.

syn_ind_args t_sub_id_l_P w_sub_id_l_P s_sub_id_l_P

forall (Ξ“ : t_ctx) (A : ty) (s : state (Ξ“ β–Άβ‚“ A †)), s_sub_id_l_P (Ξ“ β–Άβ‚“ A †) s -> t_sub_id_l_P Ξ“ A (Mu s)

forall (Ξ“ : t_ctx) (A : pre_ty pos) (t : term (Ξ“ β–Άβ‚“ `- A) `- A), t_sub_id_l_P (Ξ“ β–Άβ‚“ `- A) `- A t -> t_sub_id_l_P Ξ“ `- A (RecL t)

forall (Ξ“ : t_ctx) (A : pre_ty neg) (t : term (Ξ“ β–Άβ‚“ `+ A) `+ A), t_sub_id_l_P (Ξ“ β–Άβ‚“ `+ A) `+ A t -> t_sub_id_l_P Ξ“ `+ A (RecR t)

forall (Ξ“ : t_ctx) (A : ty) (w : whn Ξ“ A), w_sub_id_l_P Ξ“ A w -> t_sub_id_l_P Ξ“ A (Whn w)

forall (Ξ“ : t_ctx) (A : ty) (h : Ξ“ βˆ‹ A), w_sub_id_l_P Ξ“ A (Var h)

forall Ξ“ : t_ctx, w_sub_id_l_P Ξ“ `- 0 ZerL

forall Ξ“ : t_ctx, w_sub_id_l_P Ξ“ `+ ⊀ TopR

forall Ξ“ : t_ctx, w_sub_id_l_P Ξ“ `+ 1 OneR

forall (Ξ“ : t_ctx) (s : state Ξ“), s_sub_id_l_P Ξ“ s -> w_sub_id_l_P Ξ“ `- 1 (OneL s)

forall (Ξ“ : t_ctx) (s : state Ξ“), s_sub_id_l_P Ξ“ s -> w_sub_id_l_P Ξ“ `+ βŠ₯ (BotR s)

forall Ξ“ : t_ctx, w_sub_id_l_P Ξ“ `- βŠ₯ BotL

forall (Ξ“ : t_ctx) (A B : pre_ty pos) (w1 : whn Ξ“ `+ A), w_sub_id_l_P Ξ“ `+ A w1 -> forall w2 : whn Ξ“ `+ B, w_sub_id_l_P Ξ“ `+ B w2 -> w_sub_id_l_P Ξ“ `+ (A βŠ— B) (TenR w1 w2)

forall (Ξ“ : t_ctx) (A B : pre_ty pos) (s : state (Ξ“ β–Άβ‚“ `+ A β–Άβ‚“ `+ B)), s_sub_id_l_P (Ξ“ β–Άβ‚“ `+ A β–Άβ‚“ `+ B) s -> w_sub_id_l_P Ξ“ `- (A βŠ— B) (TenL s)

forall (Ξ“ : t_ctx) (A B : pre_ty neg) (s : state (Ξ“ β–Άβ‚“ `- A β–Άβ‚“ `- B)), s_sub_id_l_P (Ξ“ β–Άβ‚“ `- A β–Άβ‚“ `- B) s -> w_sub_id_l_P Ξ“ `+ (A β…‹ B) (ParR s)

forall (Ξ“ : t_ctx) (A B : pre_ty neg) (w1 : whn Ξ“ `- A), w_sub_id_l_P Ξ“ `- A w1 -> forall w2 : whn Ξ“ `- B, w_sub_id_l_P Ξ“ `- B w2 -> w_sub_id_l_P Ξ“ `- (A β…‹ B) (ParL w1 w2)

forall (Ξ“ : t_ctx) (A B : pre_ty pos) (w : whn Ξ“ `+ A), w_sub_id_l_P Ξ“ `+ A w -> w_sub_id_l_P Ξ“ `+ (A βŠ• B) (OrR1 w)

forall (Ξ“ : t_ctx) (A B : pre_ty pos) (w : whn Ξ“ `+ B), w_sub_id_l_P Ξ“ `+ B w -> w_sub_id_l_P Ξ“ `+ (A βŠ• B) (OrR2 w)

forall (Ξ“ : t_ctx) (A B : pre_ty pos) (s1 : state (Ξ“ β–Άβ‚“ `+ A)), s_sub_id_l_P (Ξ“ β–Άβ‚“ `+ A) s1 -> forall s2 : state (Ξ“ β–Άβ‚“ `+ B), s_sub_id_l_P (Ξ“ β–Άβ‚“ `+ B) s2 -> w_sub_id_l_P Ξ“ `- (A βŠ• B) (OrL s1 s2)

forall (Ξ“ : t_ctx) (A B : pre_ty neg) (s1 : state (Ξ“ β–Άβ‚“ `- A)), s_sub_id_l_P (Ξ“ β–Άβ‚“ `- A) s1 -> forall s2 : state (Ξ“ β–Άβ‚“ `- B), s_sub_id_l_P (Ξ“ β–Άβ‚“ `- B) s2 -> w_sub_id_l_P Ξ“ `+ (A & B) (AndR s1 s2)

forall (Ξ“ : t_ctx) (A B : pre_ty neg) (w : whn Ξ“ `- A), w_sub_id_l_P Ξ“ `- A w -> w_sub_id_l_P Ξ“ `- (A & B) (AndL1 w)

forall (Ξ“ : t_ctx) (A B : pre_ty neg) (w : whn Ξ“ `- B), w_sub_id_l_P Ξ“ `- B w -> w_sub_id_l_P Ξ“ `- (A & B) (AndL2 w)

forall (Ξ“ : t_ctx) (A : pre_ty neg) (t : term Ξ“ `+ A), t_sub_id_l_P Ξ“ `+ A t -> w_sub_id_l_P Ξ“ `+ (↓ A) (ShiftPR t)

forall (Ξ“ : t_ctx) (A : pre_ty neg) (s : state (Ξ“ β–Άβ‚“ `+ A)), s_sub_id_l_P (Ξ“ β–Άβ‚“ `+ A) s -> w_sub_id_l_P Ξ“ `- (↓ A) (ShiftPL s)

forall (Ξ“ : t_ctx) (A : pre_ty pos) (s : state (Ξ“ β–Άβ‚“ `- A)), s_sub_id_l_P (Ξ“ β–Άβ‚“ `- A) s -> w_sub_id_l_P Ξ“ `+ (↑ A) (ShiftNR s)

forall (Ξ“ : t_ctx) (A : pre_ty pos) (t : term Ξ“ `- A), t_sub_id_l_P Ξ“ `- A t -> w_sub_id_l_P Ξ“ `- (↑ A) (ShiftNL t)

forall (Ξ“ : t_ctx) (A : pre_ty neg) (w : whn Ξ“ `- A), w_sub_id_l_P Ξ“ `- A w -> w_sub_id_l_P Ξ“ `+ (βŠ– A) (NegPR w)

forall (Ξ“ : t_ctx) (A : pre_ty neg) (s : state (Ξ“ β–Άβ‚“ `- A)), s_sub_id_l_P (Ξ“ β–Άβ‚“ `- A) s -> w_sub_id_l_P Ξ“ `- (βŠ– A) (NegPL s)

forall (Ξ“ : t_ctx) (A : pre_ty pos) (s : state (Ξ“ β–Άβ‚“ `+ A)), s_sub_id_l_P (Ξ“ β–Άβ‚“ `+ A) s -> w_sub_id_l_P Ξ“ `+ (Β¬ A) (NegNR s)

forall (Ξ“ : t_ctx) (A : pre_ty pos) (w : whn Ξ“ `+ A), w_sub_id_l_P Ξ“ `+ A w -> w_sub_id_l_P Ξ“ `- (Β¬ A) (NegNL w)

forall (Ξ“ : t_ctx) (p : pol) (A : pre_ty p) (t1 : term Ξ“ `+ A), t_sub_id_l_P Ξ“ `+ A t1 -> forall t2 : term Ξ“ `- A, t_sub_id_l_P Ξ“ `- A t2 -> s_sub_id_l_P Ξ“ (Cut p t1 t2)
Ξ“: t_ctx
A: ty
s: state (Ξ“ β–Άβ‚“ A †)
H: s β‚œβŠ› var = s

Mu (s_subst (Ξ“ β–Άβ‚“ A †) s (Ξ“ β–Άβ‚“ A †) (a_shift1 var)) = Mu s
Ξ“: t_ctx
A: pre_ty pos
t: term (Ξ“ β–Άβ‚“ `- A) `- A
H: t `β‚œβŠ› var = t
RecL (t `β‚œβŠ› a_shift1 var) = RecL t
Ξ“: t_ctx
A: pre_ty neg
t: term (Ξ“ β–Άβ‚“ `+ A) `+ A
H: t `β‚œβŠ› var = t
RecR (t `β‚œβŠ› a_shift1 var) = RecR t
Ξ“: t_ctx
A: ty
w: whn Ξ“ A
H: w `α΅₯βŠ› var = w
w `α΅₯βŠ› var = Whn w
Ξ“: t_ctx
A: ty
h: Ξ“ βˆ‹ A
var h = Var h
Ξ“: t_ctx
Whn ZerL = Whn ZerL
Ξ“: t_ctx
Whn TopR = Whn TopR
Ξ“: t_ctx
OneR = OneR
Ξ“: t_ctx
s: state Ξ“
H: s β‚œβŠ› var = s
Whn (OneL (s_subst Ξ“ s Ξ“ var)) = Whn (OneL s)
Ξ“: t_ctx
s: state Ξ“
H: s β‚œβŠ› var = s
Whn (BotR (s_subst Ξ“ s Ξ“ var)) = Whn (BotR s)
Ξ“: t_ctx
BotL = BotL
Ξ“: t_ctx
A, B: pre_ty pos
w1: whn Ξ“ `+ A
H1: w1 `α΅₯βŠ› var = w1
w2: whn Ξ“ `+ B
H2: w2 `α΅₯βŠ› var = w2
TenR (w1 `α΅₯βŠ› var) (w2 `α΅₯βŠ› var) = TenR w1 w2
Ξ“: t_ctx
A, B: pre_ty pos
s: state (Ξ“ β–Άβ‚“ `+ A β–Άβ‚“ `+ B)
H: s β‚œβŠ› var = s
Whn (TenL (s_subst (Ξ“ β–Άβ‚“ `+ A β–Άβ‚“ `+ B) s (Ξ“ β–Άβ‚“ `+ A β–Άβ‚“ `+ B) (a_shift2 var))) = Whn (TenL s)
Ξ“: t_ctx
A, B: pre_ty neg
s: state (Ξ“ β–Άβ‚“ `- A β–Άβ‚“ `- B)
H: s β‚œβŠ› var = s
Whn (ParR (s_subst (Ξ“ β–Άβ‚“ `- A β–Άβ‚“ `- B) s (Ξ“ β–Άβ‚“ `- A β–Άβ‚“ `- B) (a_shift2 var))) = Whn (ParR s)
Ξ“: t_ctx
A, B: pre_ty neg
w1: whn Ξ“ `- A
H1: w1 `α΅₯βŠ› var = w1
w2: whn Ξ“ `- B
H2: w2 `α΅₯βŠ› var = w2
ParL (w1 `α΅₯βŠ› var) (w2 `α΅₯βŠ› var) = ParL w1 w2
Ξ“: t_ctx
A, B: pre_ty pos
w: whn Ξ“ `+ A
H: w `α΅₯βŠ› var = w
OrR1 (w `α΅₯βŠ› var) = OrR1 w
Ξ“: t_ctx
A, B: pre_ty pos
w: whn Ξ“ `+ B
H: w `α΅₯βŠ› var = w
OrR2 (w `α΅₯βŠ› var) = OrR2 w
Ξ“: t_ctx
A, B: pre_ty pos
s1: state (Ξ“ β–Άβ‚“ `+ A)
H1: s1 β‚œβŠ› var = s1
s2: state (Ξ“ β–Άβ‚“ `+ B)
H2: s2 β‚œβŠ› var = s2
Whn (OrL (s_subst (Ξ“ β–Άβ‚“ `+ A) s1 (Ξ“ β–Άβ‚“ `+ A) (a_shift1 var)) (s_subst (Ξ“ β–Άβ‚“ `+ B) s2 (Ξ“ β–Άβ‚“ `+ B) (a_shift1 var))) = Whn (OrL s1 s2)
Ξ“: t_ctx
A, B: pre_ty neg
s1: state (Ξ“ β–Άβ‚“ `- A)
H1: s1 β‚œβŠ› var = s1
s2: state (Ξ“ β–Άβ‚“ `- B)
H2: s2 β‚œβŠ› var = s2
Whn (AndR (s_subst (Ξ“ β–Άβ‚“ `- A) s1 (Ξ“ β–Άβ‚“ `- A) (a_shift1 var)) (s_subst (Ξ“ β–Άβ‚“ `- B) s2 (Ξ“ β–Άβ‚“ `- B) (a_shift1 var))) = Whn (AndR s1 s2)
Ξ“: t_ctx
A, B: pre_ty neg
w: whn Ξ“ `- A
H: w `α΅₯βŠ› var = w
AndL1 (w `α΅₯βŠ› var) = AndL1 w
Ξ“: t_ctx
A, B: pre_ty neg
w: whn Ξ“ `- B
H: w `α΅₯βŠ› var = w
AndL2 (w `α΅₯βŠ› var) = AndL2 w
Ξ“: t_ctx
A: pre_ty neg
t: term Ξ“ `+ A
H: t `β‚œβŠ› var = t
ShiftPR (t `β‚œβŠ› var) = ShiftPR t
Ξ“: t_ctx
A: pre_ty neg
s: state (Ξ“ β–Άβ‚“ `+ A)
H: s β‚œβŠ› var = s
Whn (ShiftPL (s_subst (Ξ“ β–Άβ‚“ `+ A) s (Ξ“ β–Άβ‚“ `+ A) (a_shift1 var))) = Whn (ShiftPL s)
Ξ“: t_ctx
A: pre_ty pos
s: state (Ξ“ β–Άβ‚“ `- A)
H: s β‚œβŠ› var = s
Whn (ShiftNR (s_subst (Ξ“ β–Άβ‚“ `- A) s (Ξ“ β–Άβ‚“ `- A) (a_shift1 var))) = Whn (ShiftNR s)
Ξ“: t_ctx
A: pre_ty pos
t: term Ξ“ `- A
H: t `β‚œβŠ› var = t
ShiftNL (t `β‚œβŠ› var) = ShiftNL t
Ξ“: t_ctx
A: pre_ty neg
w: whn Ξ“ `- A
H: w `α΅₯βŠ› var = w
NegPR (w `α΅₯βŠ› var) = NegPR w
Ξ“: t_ctx
A: pre_ty neg
s: state (Ξ“ β–Άβ‚“ `- A)
H: s β‚œβŠ› var = s
Whn (NegPL (s_subst (Ξ“ β–Άβ‚“ `- A) s (Ξ“ β–Άβ‚“ `- A) (a_shift1 var))) = Whn (NegPL s)
Ξ“: t_ctx
A: pre_ty pos
s: state (Ξ“ β–Άβ‚“ `+ A)
H: s β‚œβŠ› var = s
Whn (NegNR (s_subst (Ξ“ β–Άβ‚“ `+ A) s (Ξ“ β–Άβ‚“ `+ A) (a_shift1 var))) = Whn (NegNR s)
Ξ“: t_ctx
A: pre_ty pos
w: whn Ξ“ `+ A
H: w `α΅₯βŠ› var = w
NegNL (w `α΅₯βŠ› var) = NegNL w
Ξ“: t_ctx
p: pol
A: pre_ty p
t1: term Ξ“ `+ A
H1: t1 `β‚œβŠ› var = t1
t2: term Ξ“ `- A
H2: t2 `β‚œβŠ› var = t2
Cut p (t1 `β‚œβŠ› var) (t2 `β‚œβŠ› var) = Cut p t1 t2
Ξ“: t_ctx
A: ty
s: state (Ξ“ β–Άβ‚“ A †)
H: s β‚œβŠ› var = s

Mu (s_subst (Ξ“ β–Άβ‚“ A †) s (Ξ“ β–Άβ‚“ A †) (a_shift1 var)) = Mu s
Ξ“: t_ctx
A: pre_ty pos
t: term (Ξ“ β–Άβ‚“ `- A) `- A
H: t `β‚œβŠ› var = t
RecL (t `β‚œβŠ› a_shift1 var) = RecL t
Ξ“: t_ctx
A: pre_ty neg
t: term (Ξ“ β–Άβ‚“ `+ A) `+ A
H: t `β‚œβŠ› var = t
RecR (t `β‚œβŠ› a_shift1 var) = RecR t
Ξ“: t_ctx
p: pre_ty pos
w: whn Ξ“ `+ p
H: w `α΅₯βŠ› var = w
Whn (w `α΅₯βŠ› var) = Whn w
Ξ“: t_ctx
p: pre_ty neg
w: whn Ξ“ `+ p
H: w `α΅₯βŠ› var = w
w `α΅₯βŠ› var = Whn w
Ξ“: t_ctx
p: pre_ty pos
w: whn Ξ“ `- p
H: w `α΅₯βŠ› var = w
w `α΅₯βŠ› var = Whn w
Ξ“: t_ctx
p: pre_ty neg
w: whn Ξ“ `- p
H: w `α΅₯βŠ› var = w
Whn (w `α΅₯βŠ› var) = Whn w
Ξ“: t_ctx
p: pre_ty pos
h: Ξ“ βˆ‹ `+ p
var h = Var h
Ξ“: t_ctx
p: pre_ty neg
h: Ξ“ βˆ‹ `+ p
var h = Whn (Var h)
Ξ“: t_ctx
p: pre_ty pos
h: Ξ“ βˆ‹ `- p
var h = Whn (Var h)
Ξ“: t_ctx
p: pre_ty neg
h: Ξ“ βˆ‹ `- p
var h = Var h
Ξ“: t_ctx
Whn ZerL = Whn ZerL
Ξ“: t_ctx
Whn TopR = Whn TopR
Ξ“: t_ctx
OneR = OneR
Ξ“: t_ctx
s: state Ξ“
H: s β‚œβŠ› var = s
Whn (OneL (s_subst Ξ“ s Ξ“ var)) = Whn (OneL s)
Ξ“: t_ctx
s: state Ξ“
H: s β‚œβŠ› var = s
Whn (BotR (s_subst Ξ“ s Ξ“ var)) = Whn (BotR s)
Ξ“: t_ctx
BotL = BotL
Ξ“: t_ctx
A, B: pre_ty pos
w1: whn Ξ“ `+ A
H1: w1 `α΅₯βŠ› var = w1
w2: whn Ξ“ `+ B
H2: w2 `α΅₯βŠ› var = w2
TenR (w1 `α΅₯βŠ› var) (w2 `α΅₯βŠ› var) = TenR w1 w2
Ξ“: t_ctx
A, B: pre_ty pos
s: state (Ξ“ β–Άβ‚“ `+ A β–Άβ‚“ `+ B)
H: s β‚œβŠ› var = s
Whn (TenL (s_subst (Ξ“ β–Άβ‚“ `+ A β–Άβ‚“ `+ B) s (Ξ“ β–Άβ‚“ `+ A β–Άβ‚“ `+ B) (a_shift2 var))) = Whn (TenL s)
Ξ“: t_ctx
A, B: pre_ty neg
s: state (Ξ“ β–Άβ‚“ `- A β–Άβ‚“ `- B)
H: s β‚œβŠ› var = s
Whn (ParR (s_subst (Ξ“ β–Άβ‚“ `- A β–Άβ‚“ `- B) s (Ξ“ β–Άβ‚“ `- A β–Άβ‚“ `- B) (a_shift2 var))) = Whn (ParR s)
Ξ“: t_ctx
A, B: pre_ty neg
w1: whn Ξ“ `- A
H1: w1 `α΅₯βŠ› var = w1
w2: whn Ξ“ `- B
H2: w2 `α΅₯βŠ› var = w2
ParL (w1 `α΅₯βŠ› var) (w2 `α΅₯βŠ› var) = ParL w1 w2
Ξ“: t_ctx
A, B: pre_ty pos
w: whn Ξ“ `+ A
H: w `α΅₯βŠ› var = w
OrR1 (w `α΅₯βŠ› var) = OrR1 w
Ξ“: t_ctx
A, B: pre_ty pos
w: whn Ξ“ `+ B
H: w `α΅₯βŠ› var = w
OrR2 (w `α΅₯βŠ› var) = OrR2 w
Ξ“: t_ctx
A, B: pre_ty pos
s1: state (Ξ“ β–Άβ‚“ `+ A)
H1: s1 β‚œβŠ› var = s1
s2: state (Ξ“ β–Άβ‚“ `+ B)
H2: s2 β‚œβŠ› var = s2
Whn (OrL (s_subst (Ξ“ β–Άβ‚“ `+ A) s1 (Ξ“ β–Άβ‚“ `+ A) (a_shift1 var)) (s_subst (Ξ“ β–Άβ‚“ `+ B) s2 (Ξ“ β–Άβ‚“ `+ B) (a_shift1 var))) = Whn (OrL s1 s2)
Ξ“: t_ctx
A, B: pre_ty neg
s1: state (Ξ“ β–Άβ‚“ `- A)
H1: s1 β‚œβŠ› var = s1
s2: state (Ξ“ β–Άβ‚“ `- B)
H2: s2 β‚œβŠ› var = s2
Whn (AndR (s_subst (Ξ“ β–Άβ‚“ `- A) s1 (Ξ“ β–Άβ‚“ `- A) (a_shift1 var)) (s_subst (Ξ“ β–Άβ‚“ `- B) s2 (Ξ“ β–Άβ‚“ `- B) (a_shift1 var))) = Whn (AndR s1 s2)
Ξ“: t_ctx
A, B: pre_ty neg
w: whn Ξ“ `- A
H: w `α΅₯βŠ› var = w
AndL1 (w `α΅₯βŠ› var) = AndL1 w
Ξ“: t_ctx
A, B: pre_ty neg
w: whn Ξ“ `- B
H: w `α΅₯βŠ› var = w
AndL2 (w `α΅₯βŠ› var) = AndL2 w
Ξ“: t_ctx
A: pre_ty neg
t: term Ξ“ `+ A
H: t `β‚œβŠ› var = t
ShiftPR (t `β‚œβŠ› var) = ShiftPR t
Ξ“: t_ctx
A: pre_ty neg
s: state (Ξ“ β–Άβ‚“ `+ A)
H: s β‚œβŠ› var = s
Whn (ShiftPL (s_subst (Ξ“ β–Άβ‚“ `+ A) s (Ξ“ β–Άβ‚“ `+ A) (a_shift1 var))) = Whn (ShiftPL s)
Ξ“: t_ctx
A: pre_ty pos
s: state (Ξ“ β–Άβ‚“ `- A)
H: s β‚œβŠ› var = s
Whn (ShiftNR (s_subst (Ξ“ β–Άβ‚“ `- A) s (Ξ“ β–Άβ‚“ `- A) (a_shift1 var))) = Whn (ShiftNR s)
Ξ“: t_ctx
A: pre_ty pos
t: term Ξ“ `- A
H: t `β‚œβŠ› var = t
ShiftNL (t `β‚œβŠ› var) = ShiftNL t
Ξ“: t_ctx
A: pre_ty neg
w: whn Ξ“ `- A
H: w `α΅₯βŠ› var = w
NegPR (w `α΅₯βŠ› var) = NegPR w
Ξ“: t_ctx
A: pre_ty neg
s: state (Ξ“ β–Άβ‚“ `- A)
H: s β‚œβŠ› var = s
Whn (NegPL (s_subst (Ξ“ β–Άβ‚“ `- A) s (Ξ“ β–Άβ‚“ `- A) (a_shift1 var))) = Whn (NegPL s)
Ξ“: t_ctx
A: pre_ty pos
s: state (Ξ“ β–Άβ‚“ `+ A)
H: s β‚œβŠ› var = s
Whn (NegNR (s_subst (Ξ“ β–Άβ‚“ `+ A) s (Ξ“ β–Άβ‚“ `+ A) (a_shift1 var))) = Whn (NegNR s)
Ξ“: t_ctx
A: pre_ty pos
w: whn Ξ“ `+ A
H: w `α΅₯βŠ› var = w
NegNL (w `α΅₯βŠ› var) = NegNL w
Ξ“: t_ctx
p: pol
A: pre_ty p
t1: term Ξ“ `+ A
H1: t1 `β‚œβŠ› var = t1
t2: term Ξ“ `- A
H2: t2 `β‚œβŠ› var = t2
Cut p (t1 `β‚œβŠ› var) (t2 `β‚œβŠ› var) = Cut p t1 t2
Ξ“: t_ctx
A: ty
s: state (Ξ“ β–Άβ‚“ A †)
H: s β‚œβŠ› var = s

s_subst (Ξ“ β–Άβ‚“ A †) s (Ξ“ β–Άβ‚“ A †) (a_shift1 var) = s
Ξ“: t_ctx
A: pre_ty pos
t: term (Ξ“ β–Άβ‚“ `- A) `- A
H: t `β‚œβŠ› var = t
t `β‚œβŠ› a_shift1 var = t
Ξ“: t_ctx
A: pre_ty neg
t: term (Ξ“ β–Άβ‚“ `+ A) `+ A
H: t `β‚œβŠ› var = t
t `β‚œβŠ› a_shift1 var = t
Ξ“: t_ctx
A, B: pre_ty pos
s: state (Ξ“ β–Άβ‚“ `+ A β–Άβ‚“ `+ B)
H: s β‚œβŠ› var = s
s_subst (Ξ“ β–Άβ‚“ `+ A β–Άβ‚“ `+ B) s (Ξ“ β–Άβ‚“ `+ A β–Άβ‚“ `+ B) (a_shift2 var) = s
Ξ“: t_ctx
A, B: pre_ty neg
s: state (Ξ“ β–Άβ‚“ `- A β–Άβ‚“ `- B)
H: s β‚œβŠ› var = s
s_subst (Ξ“ β–Άβ‚“ `- A β–Άβ‚“ `- B) s (Ξ“ β–Άβ‚“ `- A β–Άβ‚“ `- B) (a_shift2 var) = s
Ξ“: t_ctx
A, B: pre_ty pos
s1: state (Ξ“ β–Άβ‚“ `+ A)
H1: s1 β‚œβŠ› var = s1
s2: state (Ξ“ β–Άβ‚“ `+ B)
H2: s2 β‚œβŠ› var = s2
s_subst (Ξ“ β–Άβ‚“ `+ A) s1 (Ξ“ β–Άβ‚“ `+ A) (a_shift1 var) = s1
Ξ“: t_ctx
A, B: pre_ty pos
s1: state (Ξ“ β–Άβ‚“ `+ A)
H1: s1 β‚œβŠ› var = s1
s2: state (Ξ“ β–Άβ‚“ `+ B)
H2: s2 β‚œβŠ› var = s2
s_subst (Ξ“ β–Άβ‚“ `+ B) s2 (Ξ“ β–Άβ‚“ `+ B) (a_shift1 var) = s2
Ξ“: t_ctx
A, B: pre_ty neg
s1: state (Ξ“ β–Άβ‚“ `- A)
H1: s1 β‚œβŠ› var = s1
s2: state (Ξ“ β–Άβ‚“ `- B)
H2: s2 β‚œβŠ› var = s2
s_subst (Ξ“ β–Άβ‚“ `- A) s1 (Ξ“ β–Άβ‚“ `- A) (a_shift1 var) = s1
Ξ“: t_ctx
A, B: pre_ty neg
s1: state (Ξ“ β–Άβ‚“ `- A)
H1: s1 β‚œβŠ› var = s1
s2: state (Ξ“ β–Άβ‚“ `- B)
H2: s2 β‚œβŠ› var = s2
s_subst (Ξ“ β–Άβ‚“ `- B) s2 (Ξ“ β–Άβ‚“ `- B) (a_shift1 var) = s2
Ξ“: t_ctx
A: pre_ty neg
s: state (Ξ“ β–Άβ‚“ `+ A)
H: s β‚œβŠ› var = s
s_subst (Ξ“ β–Άβ‚“ `+ A) s (Ξ“ β–Άβ‚“ `+ A) (a_shift1 var) = s
Ξ“: t_ctx
A: pre_ty pos
s: state (Ξ“ β–Άβ‚“ `- A)
H: s β‚œβŠ› var = s
s_subst (Ξ“ β–Άβ‚“ `- A) s (Ξ“ β–Άβ‚“ `- A) (a_shift1 var) = s
Ξ“: t_ctx
A: pre_ty neg
s: state (Ξ“ β–Άβ‚“ `- A)
H: s β‚œβŠ› var = s
s_subst (Ξ“ β–Άβ‚“ `- A) s (Ξ“ β–Άβ‚“ `- A) (a_shift1 var) = s
Ξ“: t_ctx
A: pre_ty pos
s: state (Ξ“ β–Άβ‚“ `+ A)
H: s β‚œβŠ› var = s
s_subst (Ξ“ β–Άβ‚“ `+ A) s (Ξ“ β–Άβ‚“ `+ A) (a_shift1 var) = s
all: first [ rewrite a_shift1_id | rewrite a_shift2_id ]; auto. Qed.
Ξ“: t_ctx
A: ty
t: term Ξ“ A

t `β‚œβŠ› var = t
now apply (term_ind_mut _ _ _ sub_id_l_prf). Qed.
Ξ“: t_ctx
A: ty
v: whn Ξ“ A

v `α΅₯βŠ› var = v
now apply (whn_ind_mut _ _ _ sub_id_l_prf). Qed.
Ξ“: t_ctx
s: state Ξ“

s β‚œβŠ› var = s
now apply (state_ind_mut _ _ _ sub_id_l_prf). Qed.
Ξ“: t_ctx
A: ty
v: val Ξ“ A

v α΅₯βŠ› var = v
Ξ“: t_ctx
p: pre_ty pos
v: val Ξ“ `+ p

v α΅₯βŠ› var = v
Ξ“: t_ctx
p: pre_ty neg
v: val Ξ“ `+ p
v α΅₯βŠ› var = v
Ξ“: t_ctx
p: pre_ty pos
v: val Ξ“ `- p
v α΅₯βŠ› var = v
Ξ“: t_ctx
p: pre_ty neg
v: val Ξ“ `- p
v α΅₯βŠ› var = v
Ξ“: t_ctx
p: pre_ty pos
v: val Ξ“ `+ p

v α΅₯βŠ› var = v
now apply w_sub_id_l.
Ξ“: t_ctx
p: pre_ty neg
v: val Ξ“ `+ p

v α΅₯βŠ› var = v
now apply t_sub_id_l.
Ξ“: t_ctx
p: pre_ty pos
v: val Ξ“ `- p

v α΅₯βŠ› var = v
now apply t_sub_id_l.
Ξ“: t_ctx
p: pre_ty neg
v: val Ξ“ `- p

v α΅₯βŠ› var = v
now apply w_sub_id_l. Qed.
Ξ“, Ξ”: t_ctx
A: ty
f: Ξ“ =[ val ]> Ξ”
v: val Ξ“ A

a_shift1 f βŠ› ₁[ v α΅₯βŠ› f] ≑ₐ ₁[ v] βŠ› f
Ξ“0: ctx ty
Ξ”: t_ctx
a: ty
f: Ξ“0 =[ val ]> Ξ”
v: val Ξ“0 a

v_subst (Ξ” β–Άβ‚“ a) a (var top) Ξ” ₁[ v_subst Ξ“0 a v Ξ” f] = v_subst Ξ“0 a v Ξ” f
Ξ“1: ctx ty
Ξ”: t_ctx
y: ty
f: Ξ“1 =[ val ]> Ξ”
v: val Ξ“1 y
a: ty
v0: Ctx.var a Ξ“1
v_subst (Ξ” β–Άβ‚“ y) a (v_shift1 a (f a v0)) Ξ” ₁[ v_subst Ξ“1 y v Ξ” f] = v_subst Ξ“1 a (var v0) Ξ” f
Ξ“0: ctx ty
Ξ”: t_ctx
a: ty
f: Ξ“0 =[ val ]> Ξ”
v: val Ξ“0 a

v_subst (Ξ” β–Άβ‚“ a) a (var top) Ξ” ₁[ v_subst Ξ“0 a v Ξ” f] = v_subst Ξ“0 a v Ξ” f
now rewrite v_sub_id_r.
Ξ“1: ctx ty
Ξ”: t_ctx
y: ty
f: Ξ“1 =[ val ]> Ξ”
v: val Ξ“1 y
a: ty
v0: Ctx.var a Ξ“1

v_subst (Ξ” β–Άβ‚“ y) a (v_shift1 a (f a v0)) Ξ” ₁[ v_subst Ξ“1 y v Ξ” f] = v_subst Ξ“1 a (var v0) Ξ” f
Ξ“1: ctx ty
Ξ”: t_ctx
y: ty
f: Ξ“1 =[ val ]> Ξ”
v: val Ξ“1 y
a: ty
v0: Ctx.var a Ξ“1

f a v0 α΅₯βŠ› r_pop α΅£βŠ› ₁[ v_subst Ξ“1 y v Ξ” f] = f a v0
now apply v_sub_id_l. Qed.
Ξ“, Ξ”: ctx ty
A: ty
f: Ξ“ βŠ† Ξ”
v: val Ξ“ A

r_shift1 f α΅£βŠ› ₁[ v α΅₯βŠ›α΅£ f] ≑ₐ ₁[ v] βŠ›α΅£ f
Ξ“1, Ξ”: ctx ty
y: ty
f: Ξ“1 βŠ† Ξ”
v: val Ξ“1 y
a: ty
v0: Ctx.var a Ξ“1

(r_shift1 f α΅£βŠ› ₁[ v α΅₯βŠ›α΅£ f])%asgn a (pop v0) = (₁[ v] βŠ›α΅£ f)%asgn a (pop v0)
cbn; now rewrite v_ren_id_r. Qed.
Ξ“, Ξ”: t_ctx
A, B: ty
f: Ξ“ =[ val ]> Ξ”
v: val Ξ“ A
w: val (Ξ“ β–Άβ‚“ A) B

(w α΅₯βŠ› a_shift1 f) α΅₯βŠ› ₁[ v α΅₯βŠ› f] = (w α΅₯βŠ› ₁[ v]) α΅₯βŠ› f
Ξ“, Ξ”: t_ctx
A, B: ty
f: Ξ“ =[ val ]> Ξ”
v: val Ξ“ A
w: val (Ξ“ β–Άβ‚“ A) B

w α΅₯βŠ› a_shift1 f βŠ› ₁[ v_subst Ξ“ A v Ξ” f] = w α΅₯βŠ› ₁[ v] βŠ› f
apply v_sub_eq; now rewrite sub1_sub. Qed.
Ξ“, Ξ”: ctx ty
A, B: ty
f: Ξ“ βŠ† Ξ”
v: val Ξ“ A
w: val (Ξ“ β–Άβ‚“ A) B

w α΅₯βŠ›α΅£ r_shift1 f α΅₯βŠ› ₁[ v α΅₯βŠ›α΅£ f] = (w α΅₯βŠ› ₁[ v]) α΅₯βŠ›α΅£ f
Ξ“, Ξ”: ctx ty
A, B: ty
f: Ξ“ βŠ† Ξ”
v: val Ξ“ A
w: val (Ξ“ β–Άβ‚“ A) B

w α΅₯βŠ› r_shift1 f α΅£βŠ› ₁[ v α΅₯βŠ›α΅£ f] = w α΅₯βŠ› ₁[ v] βŠ›α΅£ f
apply v_sub_eq; now rewrite sub1_ren. Qed.
Ξ“, Ξ”: t_ctx
A: ty
f: Ξ“ =[ val ]> Ξ”
v: val Ξ“ A
s: state (Ξ“ β–Άβ‚“ A)

(s β‚œβŠ› a_shift1 f) β‚œβŠ› ₁[ v α΅₯βŠ› f] = (s β‚œβŠ› ₁[ v]) β‚œβŠ› f
cbn; now rewrite 2 s_sub_sub, sub1_sub. Qed.
Ξ“, Ξ”: t_ctx
A, B: ty
f: Ξ“ =[ val ]> Ξ”
s: state (Ξ“ β–Άβ‚“ A β–Άβ‚“ B)
u: val Ξ“ A
v: val Ξ“ B

(s β‚œβŠ› a_shift2 f) β‚œβŠ› β‚‚[ u α΅₯βŠ› f, v α΅₯βŠ› f] = (s β‚œβŠ› β‚‚[ u, v]) β‚œβŠ› f
Ξ“, Ξ”: t_ctx
A, B: ty
f: Ξ“ =[ val ]> Ξ”
s: state (Ξ“ β–Άβ‚“ A β–Άβ‚“ B)
u: val Ξ“ A
v: val Ξ“ B

a_shift2 f βŠ› β‚‚[ v_subst Ξ“ A u Ξ” f, v_subst Ξ“ B v Ξ” f] ≑ₐ β‚‚[ u, v] βŠ› f
Ξ“, Ξ”: t_ctx
A, B: ty
f: Ξ“ =[ val ]> Ξ”
s: state (Ξ“ β–Άβ‚“ A β–Άβ‚“ B)
u: val Ξ“ A
v: val Ξ“ B
a: ty
v0: Ξ“ β–Άβ‚“ A β–Άβ‚“ B βˆ‹ a

v_subst (Ξ” β–Άβ‚“ A β–Άβ‚“ B) a (a_shift2 f a v0) Ξ” β‚‚[ v_subst Ξ“ A u Ξ” f, v_subst Ξ“ B v Ξ” f] = v_subst Ξ“ a (β‚‚[ u, v] a v0) Ξ” f
Ξ“1: ctx ty
Ξ”: t_ctx
y0, y: ty
f: Ξ“1 =[ val ]> Ξ”
s: state (Ξ“1 β–Άβ‚“ y0 β–Άβ‚“ y)
u: val Ξ“1 y0
v: val Ξ“1 y
a: ty
v0: Ctx.var a Ξ“1

v_subst (Ξ” β–Άβ‚“ y0 β–Άβ‚“ y) a (v_shift2 a (f a v0)) Ξ” β‚‚[ v_subst Ξ“1 y0 u Ξ” f, v_subst Ξ“1 y v Ξ” f] = v_subst Ξ“1 a (var v0) Ξ” f
Ξ“1: ctx ty
Ξ”: t_ctx
y0, y: ty
f: Ξ“1 =[ val ]> Ξ”
s: state (Ξ“1 β–Άβ‚“ y0 β–Άβ‚“ y)
u: val Ξ“1 y0
v: val Ξ“1 y
a: ty
v0: Ctx.var a Ξ“1

f a v0 α΅₯βŠ› (r_pop α΅£βŠ› r_pop) α΅£βŠ› β‚‚[ v_subst Ξ“1 y0 u Ξ” f, v_subst Ξ“1 y v Ξ” f] = f a v0 α΅₯βŠ› var
now apply v_sub_eq. Qed.
Ξ“, Ξ”: ctx ty
A: ty
f: Ξ“ βŠ† Ξ”
v: val Ξ“ A
s: state (Ξ“ β–Άβ‚“ A)

s β‚›βŠ›α΅£ r_shift1 f β‚œβŠ› ₁[ v α΅₯βŠ›α΅£ f] = (s β‚œβŠ› ₁[ v]) β‚›βŠ›α΅£ f
cbn; now rewrite s_sub_ren, s_ren_sub, sub1_ren. Qed.
Ξ“, Ξ”: t_ctx
A, B: ty
f: Ξ“ =[ val ]> Ξ”
v: val Ξ“ A
t: term (Ξ“ β–Άβ‚“ A) B

(t `β‚œβŠ› a_shift1 f) `β‚œβŠ› ₁[ v α΅₯βŠ› f] = (t `β‚œβŠ› ₁[ v]) `β‚œβŠ› f
Ξ“, Ξ”: t_ctx
A, B: ty
f: Ξ“ =[ val ]> Ξ”
v: val Ξ“ A
t: term (Ξ“ β–Άβ‚“ A) B

t `β‚œβŠ› a_shift1 f βŠ› ₁[ v_subst Ξ“ A v Ξ” f] = t `β‚œβŠ› ₁[ v] βŠ› f
apply t_sub_eq; now rewrite sub1_sub. Qed.
Ξ“, Ξ”: ctx ty
A, B: ty
f: Ξ“ βŠ† Ξ”
v: val Ξ“ A
t: term (Ξ“ β–Άβ‚“ A) B

t β‚œβŠ›α΅£ r_shift1 f `β‚œβŠ› ₁[ v α΅₯βŠ›α΅£ f] = (t `β‚œβŠ› ₁[ v]) β‚œβŠ›α΅£ f
Ξ“, Ξ”: ctx ty
A, B: ty
f: Ξ“ βŠ† Ξ”
v: val Ξ“ A
t: term (Ξ“ β–Άβ‚“ A) B

t `β‚œβŠ› r_shift1 f α΅£βŠ› ₁[ v α΅₯βŠ›α΅£ f] = t `β‚œβŠ› ₁[ v] βŠ›α΅£ f
apply t_sub_eq; now rewrite sub1_ren. Qed.
Ξ“: t_ctx
A: ty
v: val Ξ“ A
m: pat A †

Proper (asgn_eq (p_dom m) Ξ“ ==> eq) (p_app v m)
intros u1 u2 H; destruct A as [ [] | []]; cbn; now rewrite (w_sub_eq u1 u2 H). Qed. Definition refold_id_aux_P (Ξ“ : neg_ctx) p : pre_ty p -> Prop := match p with | pos => fun A => forall (v : whn Ξ“ `+A), p_of_w_0p _ v `α΅₯βŠ› p_dom_of_w_0p _ v = v | neg => fun A => forall (v : whn Ξ“ `-A), p_of_w_0n _ v `α΅₯βŠ› p_dom_of_w_0n _ v = v end .
Ξ“: neg_ctx
p: pol
A: pre_ty p

refold_id_aux_P Ξ“ p A
Ξ“: neg_ctx
v: whn Ξ“ `+ 0

p_of_w_0p 0 v `α΅₯βŠ› p_dom_of_w_0p 0 v = v
Ξ“: neg_ctx
v: whn Ξ“ `- ⊀
p_of_w_0n ⊀ v `α΅₯βŠ› p_dom_of_w_0n ⊀ v = v
Ξ“: neg_ctx
v: whn Ξ“ `+ 1
p_of_w_0p 1 v `α΅₯βŠ› p_dom_of_w_0p 1 v = v
Ξ“: neg_ctx
v: whn Ξ“ `- βŠ₯
p_of_w_0n βŠ₯ v `α΅₯βŠ› p_dom_of_w_0n βŠ₯ v = v
Ξ“: neg_ctx
A1, A2: pre_ty pos
IHA1: refold_id_aux_P Ξ“ pos A1
IHA2: refold_id_aux_P Ξ“ pos A2
v: whn Ξ“ `+ (A1 βŠ— A2)
p_of_w_0p (A1 βŠ— A2) v `α΅₯βŠ› p_dom_of_w_0p (A1 βŠ— A2) v = v
Ξ“: neg_ctx
A1, A2: pre_ty neg
IHA1: refold_id_aux_P Ξ“ neg A1
IHA2: refold_id_aux_P Ξ“ neg A2
v: whn Ξ“ `- (A1 β…‹ A2)
p_of_w_0n (A1 β…‹ A2) v `α΅₯βŠ› p_dom_of_w_0n (A1 β…‹ A2) v = v
Ξ“: neg_ctx
A1, A2: pre_ty pos
IHA1: refold_id_aux_P Ξ“ pos A1
IHA2: refold_id_aux_P Ξ“ pos A2
v: whn Ξ“ `+ (A1 βŠ• A2)
p_of_w_0p (A1 βŠ• A2) v `α΅₯βŠ› p_dom_of_w_0p (A1 βŠ• A2) v = v
Ξ“: neg_ctx
A1, A2: pre_ty neg
IHA1: refold_id_aux_P Ξ“ neg A1
IHA2: refold_id_aux_P Ξ“ neg A2
v: whn Ξ“ `- (A1 & A2)
p_of_w_0n (A1 & A2) v `α΅₯βŠ› p_dom_of_w_0n (A1 & A2) v = v
Ξ“: neg_ctx
A: pre_ty neg
IHA: refold_id_aux_P Ξ“ neg A
v: whn Ξ“ `+ (↓ A)
p_of_w_0p (↓ A) v `α΅₯βŠ› p_dom_of_w_0p (↓ A) v = v
Ξ“: neg_ctx
A: pre_ty pos
IHA: refold_id_aux_P Ξ“ pos A
v: whn Ξ“ `- (↑ A)
p_of_w_0n (↑ A) v `α΅₯βŠ› p_dom_of_w_0n (↑ A) v = v
Ξ“: neg_ctx
A: pre_ty neg
IHA: refold_id_aux_P Ξ“ neg A
v: whn Ξ“ `+ (βŠ– A)
p_of_w_0p βŠ– A v `α΅₯βŠ› p_dom_of_w_0p βŠ– A v = v
Ξ“: neg_ctx
A: pre_ty pos
IHA: refold_id_aux_P Ξ“ pos A
v: whn Ξ“ `- (Β¬ A)
p_of_w_0n Β¬ A v `α΅₯βŠ› p_dom_of_w_0n Β¬ A v = v
Ξ“: neg_ctx
v: whn Ξ“ `+ 0

p_of_w_0p 0 v `α΅₯βŠ› p_dom_of_w_0p 0 v = v
dependent elimination v; destruct (s_prf c).
Ξ“: neg_ctx
v: whn Ξ“ `- ⊀

p_of_w_0n ⊀ v `α΅₯βŠ› p_dom_of_w_0n ⊀ v = v
dependent elimination v; destruct (s_prf c).
Ξ“: neg_ctx
v: whn Ξ“ `+ 1

p_of_w_0p 1 v `α΅₯βŠ› p_dom_of_w_0p 1 v = v
dependent elimination v; [ destruct (s_prf c) | ]; auto.
Ξ“: neg_ctx
v: whn Ξ“ `- βŠ₯

p_of_w_0n βŠ₯ v `α΅₯βŠ› p_dom_of_w_0n βŠ₯ v = v
dependent elimination v; [ destruct (s_prf c) | ]; auto.
Ξ“: neg_ctx
A1, A2: pre_ty pos
IHA1: refold_id_aux_P Ξ“ pos A1
IHA2: refold_id_aux_P Ξ“ pos A2
v: whn Ξ“ `+ (A1 βŠ— A2)

p_of_w_0p (A1 βŠ— A2) v `α΅₯βŠ› p_dom_of_w_0p (A1 βŠ— A2) v = v
Ξ“: neg_ctx
A0, B: pre_ty pos
IHA1: refold_id_aux_P Ξ“ pos A0
IHA2: refold_id_aux_P Ξ“ pos B
w: whn Ξ“ `+ A0
w0: whn Ξ“ `+ B

p_of_w_0p (A0 βŠ— B) (TenR w w0) `α΅₯βŠ› p_dom_of_w_0p (A0 βŠ— B) (TenR w w0) = TenR w w0
Ξ“: neg_ctx
A0, B: pre_ty pos
IHA1: refold_id_aux_P Ξ“ pos A0
IHA2: refold_id_aux_P Ξ“ pos B
w: whn Ξ“ `+ A0
w0: whn Ξ“ `+ B

p_of_w_0p A0 w `α΅₯βŠ› r_cover_l cover_cat α΅£βŠ› [p_dom_of_w_0p A0 w, p_dom_of_w_0p B w0] = w
Ξ“: neg_ctx
A0, B: pre_ty pos
IHA1: refold_id_aux_P Ξ“ pos A0
IHA2: refold_id_aux_P Ξ“ pos B
w: whn Ξ“ `+ A0
w0: whn Ξ“ `+ B
p_of_w_0p B w0 `α΅₯βŠ› r_cover_r cover_cat α΅£βŠ› [p_dom_of_w_0p A0 w, p_dom_of_w_0p B w0] = w0
Ξ“: neg_ctx
A0, B: pre_ty pos
IHA1: refold_id_aux_P Ξ“ pos A0
IHA2: refold_id_aux_P Ξ“ pos B
w: whn Ξ“ `+ A0
w0: whn Ξ“ `+ B

p_of_w_0p B w0 `α΅₯βŠ› r_cover_r cover_cat α΅£βŠ› [p_dom_of_w_0p A0 w, p_dom_of_w_0p B w0] = w0
rewrite <- IHA2; apply w_sub_eq; exact (a_cat_proj_r _ _).
Ξ“: neg_ctx
A1, A2: pre_ty neg
IHA1: refold_id_aux_P Ξ“ neg A1
IHA2: refold_id_aux_P Ξ“ neg A2
v: whn Ξ“ `- (A1 β…‹ A2)

p_of_w_0n (A1 β…‹ A2) v `α΅₯βŠ› p_dom_of_w_0n (A1 β…‹ A2) v = v
Ξ“: neg_ctx
A5, B2: pre_ty neg
IHA1: refold_id_aux_P Ξ“ neg A5
IHA2: refold_id_aux_P Ξ“ neg B2
w1: whn Ξ“ `- A5
w2: whn Ξ“ `- B2

p_of_w_0n (A5 β…‹ B2) (ParL w1 w2) `α΅₯βŠ› p_dom_of_w_0n (A5 β…‹ B2) (ParL w1 w2) = ParL w1 w2
Ξ“: neg_ctx
A5, B2: pre_ty neg
IHA1: refold_id_aux_P Ξ“ neg A5
IHA2: refold_id_aux_P Ξ“ neg B2
w1: whn Ξ“ `- A5
w2: whn Ξ“ `- B2

p_of_w_0n A5 w1 `α΅₯βŠ› r_cover_l cover_cat α΅£βŠ› [p_dom_of_w_0n A5 w1, p_dom_of_w_0n B2 w2] = w1
Ξ“: neg_ctx
A5, B2: pre_ty neg
IHA1: refold_id_aux_P Ξ“ neg A5
IHA2: refold_id_aux_P Ξ“ neg B2
w1: whn Ξ“ `- A5
w2: whn Ξ“ `- B2
p_of_w_0n B2 w2 `α΅₯βŠ› r_cover_r cover_cat α΅£βŠ› [p_dom_of_w_0n A5 w1, p_dom_of_w_0n B2 w2] = w2
Ξ“: neg_ctx
A5, B2: pre_ty neg
IHA1: refold_id_aux_P Ξ“ neg A5
IHA2: refold_id_aux_P Ξ“ neg B2
w1: whn Ξ“ `- A5
w2: whn Ξ“ `- B2

p_of_w_0n B2 w2 `α΅₯βŠ› r_cover_r cover_cat α΅£βŠ› [p_dom_of_w_0n A5 w1, p_dom_of_w_0n B2 w2] = w2
rewrite <- IHA2; apply w_sub_eq; exact (a_cat_proj_r _ _).
Ξ“: neg_ctx
A1, A2: pre_ty pos
IHA1: refold_id_aux_P Ξ“ pos A1
IHA2: refold_id_aux_P Ξ“ pos A2
v: whn Ξ“ `+ (A1 βŠ• A2)

p_of_w_0p (A1 βŠ• A2) v `α΅₯βŠ› p_dom_of_w_0p (A1 βŠ• A2) v = v
dependent elimination v; [ destruct (s_prf c) | | ]; cbn; f_equal; [ apply IHA1 | apply IHA2 ].
Ξ“: neg_ctx
A1, A2: pre_ty neg
IHA1: refold_id_aux_P Ξ“ neg A1
IHA2: refold_id_aux_P Ξ“ neg A2
v: whn Ξ“ `- (A1 & A2)

p_of_w_0n (A1 & A2) v `α΅₯βŠ› p_dom_of_w_0n (A1 & A2) v = v
dependent elimination v; [ destruct (s_prf c) | | ]; cbn; f_equal; [ apply IHA1 | apply IHA2 ].
Ξ“: neg_ctx
A: pre_ty neg
IHA: refold_id_aux_P Ξ“ neg A
v: whn Ξ“ `+ (↓ A)

p_of_w_0p (↓ A) v `α΅₯βŠ› p_dom_of_w_0p (↓ A) v = v
dependent elimination v; [ destruct (s_prf c) | ]; cbn; f_equal.
Ξ“: neg_ctx
A: pre_ty pos
IHA: refold_id_aux_P Ξ“ pos A
v: whn Ξ“ `- (↑ A)

p_of_w_0n (↑ A) v `α΅₯βŠ› p_dom_of_w_0n (↑ A) v = v
dependent elimination v; [ destruct (s_prf c) | ]; cbn; f_equal.
Ξ“: neg_ctx
A: pre_ty neg
IHA: refold_id_aux_P Ξ“ neg A
v: whn Ξ“ `+ (βŠ– A)

p_of_w_0p βŠ– A v `α΅₯βŠ› p_dom_of_w_0p βŠ– A v = v
Ξ“: neg_ctx
A15: pre_ty neg
IHA: refold_id_aux_P Ξ“ neg A15
w7: whn Ξ“ `- A15

p_of_w_0p βŠ– A15 (NegPR w7) `α΅₯βŠ› p_dom_of_w_0p βŠ– A15 (NegPR w7) = NegPR w7
cbn; f_equal; apply IHA.
Ξ“: neg_ctx
A: pre_ty pos
IHA: refold_id_aux_P Ξ“ pos A
v: whn Ξ“ `- (Β¬ A)

p_of_w_0n Β¬ A v `α΅₯βŠ› p_dom_of_w_0n Β¬ A v = v
Ξ“: neg_ctx
A18: pre_ty pos
IHA: refold_id_aux_P Ξ“ pos A18
w8: whn Ξ“ `+ A18

p_of_w_0n Β¬ A18 (NegNL w8) `α΅₯βŠ› p_dom_of_w_0n Β¬ A18 (NegNL w8) = NegNL w8
cbn; f_equal; apply IHA. Qed.
Ξ“: neg_ctx
A: ty
v: val Ξ“ A

p_of_v A v `α΅₯βŠ› p_dom_of_v A v = v
destruct A as [ [] A | [] A ]; auto; exact (refold_id_aux A v). Qed. Equations p_of_w_eq_aux_p {Ξ“ : neg_ctx} (A : pre_ty pos) (p : pat `+A) (e : p_dom p =[val]> Ξ“) : p_of_w_0p A (p `α΅₯βŠ› e) = p by struct p := p_of_w_eq_aux_p (1) (POne) e := eq_refl ; p_of_w_eq_aux_p (A βŠ— B) (PTen p1 p2) e := f_equal2 PTen (eq_trans (f_equal _ (w_sub_ren _ _ _ _)) (p_of_w_eq_aux_p A p1 _)) (eq_trans (f_equal _ (w_sub_ren _ _ _ _)) (p_of_w_eq_aux_p B p2 _)) ; p_of_w_eq_aux_p (A βŠ• B) (POr1 p) e := f_equal POr1 (p_of_w_eq_aux_p A p e) ; p_of_w_eq_aux_p (A βŠ• B) (POr2 p) e := f_equal POr2 (p_of_w_eq_aux_p B p e) ; p_of_w_eq_aux_p (↓ A) (PShiftP _) e := eq_refl ; p_of_w_eq_aux_p (βŠ– A) (PNegP p) e := f_equal PNegP (p_of_w_eq_aux_n A p e) ; with p_of_w_eq_aux_n {Ξ“ : neg_ctx} (A : pre_ty neg) (p : pat `-A) (e : p_dom p =[val]> Ξ“) : p_of_w_0n A (p `α΅₯βŠ› e) = p by struct p := p_of_w_eq_aux_n (βŠ₯) (PBot) e := eq_refl ; p_of_w_eq_aux_n (A β…‹ B) (PPar p1 p2) e := f_equal2 PPar (eq_trans (f_equal _ (w_sub_ren _ _ _ _)) (p_of_w_eq_aux_n A p1 _)) (eq_trans (f_equal _ (w_sub_ren _ _ _ _)) (p_of_w_eq_aux_n B p2 _)) ; p_of_w_eq_aux_n (A & B) (PAnd1 p) e := f_equal PAnd1 (p_of_w_eq_aux_n A p e) ; p_of_w_eq_aux_n (A & B) (PAnd2 p) e := f_equal PAnd2 (p_of_w_eq_aux_n B p e) ; p_of_w_eq_aux_n (↑ A) (PShiftN _) e := eq_refl ; p_of_w_eq_aux_n (Β¬ A) (PNegN p) e := f_equal PNegN (p_of_w_eq_aux_p A p e) . Definition p_dom_of_w_eq_P (Ξ“ : neg_ctx) p : pre_ty p -> Prop := match p with | pos => fun A => forall (p : pat `+A) (e : p_dom p =[val]> Ξ“), rew [fun p => p_dom p =[ val ]> Ξ“] p_of_w_eq_aux_p A p e in p_dom_of_w_0p A (p `α΅₯βŠ› e) ≑ₐ e | neg => fun A => forall (p : pat `-A) (e : p_dom p =[val]> Ξ“), rew [fun p => p_dom p =[ val ]> Ξ“] p_of_w_eq_aux_n A p e in p_dom_of_w_0n A (p `α΅₯βŠ› e) ≑ₐ e end .
Ξ“: neg_ctx
p: pol
A: pre_ty p

p_dom_of_w_eq_P Ξ“ p A
Ξ“: neg_ctx
e: p_dom POne =[ val ]> Ξ“

! ≑ₐ e
Ξ“: neg_ctx
e: p_dom PBot =[ val ]> Ξ“
! ≑ₐ e
Ξ“: neg_ctx
A3, B: pre_ty pos
IHA1: p_dom_of_w_eq_P Ξ“ pos A3
IHA2: p_dom_of_w_eq_P Ξ“ pos B
p: pat `+ A3
p0: pat `+ B
e: p_dom (PTen p p0) =[ val ]> Ξ“
rew [fun p : pat `+ (A3 βŠ— B) => p_dom p =[ val ]> Ξ“] f_equal2 PTen (eq_trans (f_equal (p_of_w_0p A3) (w_sub_ren r_cat_l e `+ A3 p)) (p_of_w_eq_aux_p A3 p (r_cat_l α΅£βŠ› e))) (eq_trans (f_equal (p_of_w_0p B) (w_sub_ren r_cat_r e `+ B p0)) (p_of_w_eq_aux_p B p0 (r_cat_r α΅£βŠ› e))) in [p_dom_of_w_0p A3 (p `α΅₯βŠ›α΅£ r_cat_l `α΅₯βŠ› e), p_dom_of_w_0p B (p0 `α΅₯βŠ›α΅£ r_cat_r `α΅₯βŠ› e)] ≑ₐ e
Ξ“: neg_ctx
A4, B0: pre_ty neg
IHA1: p_dom_of_w_eq_P Ξ“ neg A4
IHA2: p_dom_of_w_eq_P Ξ“ neg B0
p1: pat `- A4
p2: pat `- B0
e: p_dom (PPar p1 p2) =[ val ]> Ξ“
rew [fun p : pat `- (A4 β…‹ B0) => p_dom p =[ val ]> Ξ“] f_equal2 PPar (eq_trans (f_equal (p_of_w_0n A4) (w_sub_ren r_cat_l e `- A4 p1)) (p_of_w_eq_aux_n A4 p1 (r_cat_l α΅£βŠ› e))) (eq_trans (f_equal (p_of_w_0n B0) (w_sub_ren r_cat_r e `- B0 p2)) (p_of_w_eq_aux_n B0 p2 (r_cat_r α΅£βŠ› e))) in [p_dom_of_w_0n A4 (p1 `α΅₯βŠ›α΅£ r_cat_l `α΅₯βŠ› e), p_dom_of_w_0n B0 (p2 `α΅₯βŠ›α΅£ r_cat_r `α΅₯βŠ› e)] ≑ₐ e
Ξ“: neg_ctx
A5, B1: pre_ty pos
IHA1: p_dom_of_w_eq_P Ξ“ pos A5
IHA2: p_dom_of_w_eq_P Ξ“ pos B1
p3: pat `+ A5
e: p_dom (POr1 p3) =[ val ]> Ξ“
rew [fun p : pat `+ (A5 βŠ• B1) => p_dom p =[ val ]> Ξ“] f_equal POr1 (p_of_w_eq_aux_p A5 p3 e) in p_dom_of_w_0p A5 (p3 `α΅₯βŠ› e) ≑ₐ e
Ξ“: neg_ctx
A6, B2: pre_ty pos
IHA1: p_dom_of_w_eq_P Ξ“ pos A6
IHA2: p_dom_of_w_eq_P Ξ“ pos B2
p4: pat `+ B2
e: p_dom (POr2 p4) =[ val ]> Ξ“
rew [fun p : pat `+ (A6 βŠ• B2) => p_dom p =[ val ]> Ξ“] f_equal POr2 (p_of_w_eq_aux_p B2 p4 e) in p_dom_of_w_0p B2 (p4 `α΅₯βŠ› e) ≑ₐ e
Ξ“: neg_ctx
A7, B3: pre_ty neg
IHA1: p_dom_of_w_eq_P Ξ“ neg A7
IHA2: p_dom_of_w_eq_P Ξ“ neg B3
p5: pat `- A7
e: p_dom (PAnd1 p5) =[ val ]> Ξ“
rew [fun p : pat `- (A7 & B3) => p_dom p =[ val ]> Ξ“] f_equal PAnd1 (p_of_w_eq_aux_n A7 p5 e) in p_dom_of_w_0n A7 (p5 `α΅₯βŠ› e) ≑ₐ e
Ξ“: neg_ctx
A8, B4: pre_ty neg
IHA1: p_dom_of_w_eq_P Ξ“ neg A8
IHA2: p_dom_of_w_eq_P Ξ“ neg B4
p6: pat `- B4
e: p_dom (PAnd2 p6) =[ val ]> Ξ“
rew [fun p : pat `- (A8 & B4) => p_dom p =[ val ]> Ξ“] f_equal PAnd2 (p_of_w_eq_aux_n B4 p6 e) in p_dom_of_w_0n B4 (p6 `α΅₯βŠ› e) ≑ₐ e
Ξ“: neg_ctx
A8: pre_ty neg
IHA: p_dom_of_w_eq_P Ξ“ neg A8
e: p_dom (PShiftP A8) =[ val ]> Ξ“
! ▢ₐ e `+ A8 top ≑ₐ e
Ξ“: neg_ctx
A9: pre_ty pos
IHA: p_dom_of_w_eq_P Ξ“ pos A9
e: p_dom (PShiftN A9) =[ val ]> Ξ“
! ▢ₐ e `- A9 top ≑ₐ e
Ξ“: neg_ctx
A10: pre_ty neg
IHA: p_dom_of_w_eq_P Ξ“ neg A10
p7: pat `- A10
e: p_dom (PNegP p7) =[ val ]> Ξ“
rew [fun p : pat `+ (βŠ– A10) => p_dom p =[ val ]> Ξ“] f_equal PNegP (p_of_w_eq_aux_n A10 p7 e) in p_dom_of_w_0n A10 (p7 `α΅₯βŠ› e) ≑ₐ e
Ξ“: neg_ctx
A11: pre_ty pos
IHA: p_dom_of_w_eq_P Ξ“ pos A11
p8: pat `+ A11
e: p_dom (PNegN p8) =[ val ]> Ξ“
rew [fun p : pat `- (Β¬ A11) => p_dom p =[ val ]> Ξ“] f_equal PNegN (p_of_w_eq_aux_p A11 p8 e) in p_dom_of_w_0p A11 (p8 `α΅₯βŠ› e) ≑ₐ e
Ξ“: neg_ctx
e: p_dom POne =[ val ]> Ξ“

! ≑ₐ e
intros ? h; repeat (dependent elimination h; auto).
Ξ“: neg_ctx
e: p_dom PBot =[ val ]> Ξ“

! ≑ₐ e
intros ? h; repeat (dependent elimination h; auto).
Ξ“: neg_ctx
A3, B: pre_ty pos
IHA1: p_dom_of_w_eq_P Ξ“ pos A3
IHA2: p_dom_of_w_eq_P Ξ“ pos B
p: pat `+ A3
p0: pat `+ B
e: p_dom (PTen p p0) =[ val ]> Ξ“

rew [fun p : pat `+ (A3 βŠ— B) => p_dom p =[ val ]> Ξ“] f_equal2 PTen (eq_trans (f_equal (p_of_w_0p A3) (w_sub_ren r_cat_l e `+ A3 p)) (p_of_w_eq_aux_p A3 p (r_cat_l α΅£βŠ› e))) (eq_trans (f_equal (p_of_w_0p B) (w_sub_ren r_cat_r e `+ B p0)) (p_of_w_eq_aux_p B p0 (r_cat_r α΅£βŠ› e))) in [p_dom_of_w_0p A3 (p `α΅₯βŠ›α΅£ r_cat_l `α΅₯βŠ› e), p_dom_of_w_0p B (p0 `α΅₯βŠ›α΅£ r_cat_r `α΅₯βŠ› e)] ≑ₐ e
Ξ“: neg_ctx
A3, B: pre_ty pos
IHA1: p_dom_of_w_eq_P Ξ“ pos A3
IHA2: p_dom_of_w_eq_P Ξ“ pos B
p: pat `+ A3
p0: pat `+ B
e: p_dom (PTen p p0) =[ val ]> Ξ“
H1:= w_sub_ren r_cat_l e `+ A3 p: p `α΅₯βŠ›α΅£ r_cat_l `α΅₯βŠ› e = p `α΅₯βŠ› r_cat_l α΅£βŠ› e

rew [fun p : pat `+ (A3 βŠ— B) => p_dom p =[ val ]> Ξ“] f_equal2 PTen (eq_trans (f_equal (p_of_w_0p A3) (w_sub_ren r_cat_l e `+ A3 p)) (p_of_w_eq_aux_p A3 p (r_cat_l α΅£βŠ› e))) (eq_trans (f_equal (p_of_w_0p B) (w_sub_ren r_cat_r e `+ B p0)) (p_of_w_eq_aux_p B p0 (r_cat_r α΅£βŠ› e))) in [p_dom_of_w_0p A3 (p `α΅₯βŠ›α΅£ r_cat_l `α΅₯βŠ› e), p_dom_of_w_0p B (p0 `α΅₯βŠ›α΅£ r_cat_r `α΅₯βŠ› e)] ≑ₐ e
Ξ“: neg_ctx
A3, B: pre_ty pos
IHA1: p_dom_of_w_eq_P Ξ“ pos A3
IHA2: p_dom_of_w_eq_P Ξ“ pos B
p: pat `+ A3
p0: pat `+ B
e: p_dom (PTen p p0) =[ val ]> Ξ“
H1:= w_sub_ren r_cat_l e `+ A3 p: p `α΅₯βŠ›α΅£ r_cat_l `α΅₯βŠ› e = p `α΅₯βŠ› r_cat_l α΅£βŠ› e
H2:= w_sub_ren r_cat_r e `+ B p0: p0 `α΅₯βŠ›α΅£ r_cat_r `α΅₯βŠ› e = p0 `α΅₯βŠ› r_cat_r α΅£βŠ› e

rew [fun p : pat `+ (A3 βŠ— B) => p_dom p =[ val ]> Ξ“] f_equal2 PTen (eq_trans (f_equal (p_of_w_0p A3) (w_sub_ren r_cat_l e `+ A3 p)) (p_of_w_eq_aux_p A3 p (r_cat_l α΅£βŠ› e))) (eq_trans (f_equal (p_of_w_0p B) (w_sub_ren r_cat_r e `+ B p0)) (p_of_w_eq_aux_p B p0 (r_cat_r α΅£βŠ› e))) in [p_dom_of_w_0p A3 (p `α΅₯βŠ›α΅£ r_cat_l `α΅₯βŠ› e), p_dom_of_w_0p B (p0 `α΅₯βŠ›α΅£ r_cat_r `α΅₯βŠ› e)] ≑ₐ e
Ξ“: neg_ctx
A3, B: pre_ty pos
IHA1: p_dom_of_w_eq_P Ξ“ pos A3
IHA2: p_dom_of_w_eq_P Ξ“ pos B
p: pat `+ A3
p0: pat `+ B
e: p_dom (PTen p p0) =[ val ]> Ξ“
H1:= w_sub_ren r_cat_l e `+ A3 p: p `α΅₯βŠ›α΅£ r_cat_l `α΅₯βŠ› e = p `α΅₯βŠ› r_cat_l α΅£βŠ› e
H2:= w_sub_ren r_cat_r e `+ B p0: p0 `α΅₯βŠ›α΅£ r_cat_r `α΅₯βŠ› e = p0 `α΅₯βŠ› r_cat_r α΅£βŠ› e
x1:= p `α΅₯βŠ›α΅£ r_cat_l `α΅₯βŠ› e: val Ξ“ `+ A3

rew [fun p : pat `+ (A3 βŠ— B) => p_dom p =[ val ]> Ξ“] f_equal2 PTen (eq_trans (f_equal (p_of_w_0p A3) (w_sub_ren r_cat_l e `+ A3 p)) (p_of_w_eq_aux_p A3 p (r_cat_l α΅£βŠ› e))) (eq_trans (f_equal (p_of_w_0p B) (w_sub_ren r_cat_r e `+ B p0)) (p_of_w_eq_aux_p B p0 (r_cat_r α΅£βŠ› e))) in [p_dom_of_w_0p A3 (p `α΅₯βŠ›α΅£ r_cat_l `α΅₯βŠ› e), p_dom_of_w_0p B (p0 `α΅₯βŠ›α΅£ r_cat_r `α΅₯βŠ› e)] ≑ₐ e
Ξ“: neg_ctx
A3, B: pre_ty pos
IHA1: p_dom_of_w_eq_P Ξ“ pos A3
IHA2: p_dom_of_w_eq_P Ξ“ pos B
p: pat `+ A3
p0: pat `+ B
e: p_dom (PTen p p0) =[ val ]> Ξ“
H1:= w_sub_ren r_cat_l e `+ A3 p: p `α΅₯βŠ›α΅£ r_cat_l `α΅₯βŠ› e = p `α΅₯βŠ› r_cat_l α΅£βŠ› e
H2:= w_sub_ren r_cat_r e `+ B p0: p0 `α΅₯βŠ›α΅£ r_cat_r `α΅₯βŠ› e = p0 `α΅₯βŠ› r_cat_r α΅£βŠ› e
x1:= p `α΅₯βŠ›α΅£ r_cat_l `α΅₯βŠ› e: val Ξ“ `+ A3
x2:= p0 `α΅₯βŠ›α΅£ r_cat_r `α΅₯βŠ› e: val Ξ“ `+ B

rew [fun p : pat `+ (A3 βŠ— B) => p_dom p =[ val ]> Ξ“] f_equal2 PTen (eq_trans (f_equal (p_of_w_0p A3) (w_sub_ren r_cat_l e `+ A3 p)) (p_of_w_eq_aux_p A3 p (r_cat_l α΅£βŠ› e))) (eq_trans (f_equal (p_of_w_0p B) (w_sub_ren r_cat_r e `+ B p0)) (p_of_w_eq_aux_p B p0 (r_cat_r α΅£βŠ› e))) in [p_dom_of_w_0p A3 (p `α΅₯βŠ›α΅£ r_cat_l `α΅₯βŠ› e), p_dom_of_w_0p B (p0 `α΅₯βŠ›α΅£ r_cat_r `α΅₯βŠ› e)] ≑ₐ e
Ξ“: neg_ctx
A3, B: pre_ty pos
IHA1: p_dom_of_w_eq_P Ξ“ pos A3
IHA2: p_dom_of_w_eq_P Ξ“ pos B
p: pat `+ A3
p0: pat `+ B
e: p_dom (PTen p p0) =[ val ]> Ξ“
H1:= w_sub_ren r_cat_l e `+ A3 p: p `α΅₯βŠ›α΅£ r_cat_l `α΅₯βŠ› e = p `α΅₯βŠ› r_cat_l α΅£βŠ› e
H2:= w_sub_ren r_cat_r e `+ B p0: p0 `α΅₯βŠ›α΅£ r_cat_r `α΅₯βŠ› e = p0 `α΅₯βŠ› r_cat_r α΅£βŠ› e
x1:= p `α΅₯βŠ›α΅£ r_cat_l `α΅₯βŠ› e: val Ξ“ `+ A3
x2:= p0 `α΅₯βŠ›α΅£ r_cat_r `α΅₯βŠ› e: val Ξ“ `+ B

rew [fun p : pat `+ (A3 βŠ— B) => p_dom p =[ val ]> Ξ“] f_equal2 PTen (eq_trans (f_equal (p_of_w_0p A3) H1) (p_of_w_eq_aux_p A3 p (r_cat_l α΅£βŠ› e))) (eq_trans (f_equal (p_of_w_0p B) (w_sub_ren r_cat_r e `+ B p0)) (p_of_w_eq_aux_p B p0 (r_cat_r α΅£βŠ› e))) in [p_dom_of_w_0p A3 (p `α΅₯βŠ›α΅£ r_cat_l `α΅₯βŠ› e), p_dom_of_w_0p B (p0 `α΅₯βŠ›α΅£ r_cat_r `α΅₯βŠ› e)] ≑ₐ e
Ξ“: neg_ctx
A3, B: pre_ty pos
IHA1: p_dom_of_w_eq_P Ξ“ pos A3
IHA2: p_dom_of_w_eq_P Ξ“ pos B
p: pat `+ A3
p0: pat `+ B
e: p_dom (PTen p p0) =[ val ]> Ξ“
H1:= w_sub_ren r_cat_l e `+ A3 p: p `α΅₯βŠ›α΅£ r_cat_l `α΅₯βŠ› e = p `α΅₯βŠ› r_cat_l α΅£βŠ› e
H2:= w_sub_ren r_cat_r e `+ B p0: p0 `α΅₯βŠ›α΅£ r_cat_r `α΅₯βŠ› e = p0 `α΅₯βŠ› r_cat_r α΅£βŠ› e
x1:= p `α΅₯βŠ›α΅£ r_cat_l `α΅₯βŠ› e: val Ξ“ `+ A3
x2:= p0 `α΅₯βŠ›α΅£ r_cat_r `α΅₯βŠ› e: val Ξ“ `+ B

rew [fun p : pat `+ (A3 βŠ— B) => p_dom p =[ val ]> Ξ“] f_equal2 PTen (eq_trans (f_equal (p_of_w_0p A3) H1) (p_of_w_eq_aux_p A3 p (r_cat_l α΅£βŠ› e))) (eq_trans (f_equal (p_of_w_0p B) H2) (p_of_w_eq_aux_p B p0 (r_cat_r α΅£βŠ› e))) in [p_dom_of_w_0p A3 (p `α΅₯βŠ›α΅£ r_cat_l `α΅₯βŠ› e), p_dom_of_w_0p B (p0 `α΅₯βŠ›α΅£ r_cat_r `α΅₯βŠ› e)] ≑ₐ e
Ξ“: neg_ctx
A3, B: pre_ty pos
IHA1: p_dom_of_w_eq_P Ξ“ pos A3
IHA2: p_dom_of_w_eq_P Ξ“ pos B
p: pat `+ A3
p0: pat `+ B
e: p_dom (PTen p p0) =[ val ]> Ξ“
x1:= p `α΅₯βŠ›α΅£ r_cat_l `α΅₯βŠ› e: val Ξ“ `+ A3
H1:= w_sub_ren r_cat_l e `+ A3 p: x1 = p `α΅₯βŠ› r_cat_l α΅£βŠ› e
H2:= w_sub_ren r_cat_r e `+ B p0: p0 `α΅₯βŠ›α΅£ r_cat_r `α΅₯βŠ› e = p0 `α΅₯βŠ› r_cat_r α΅£βŠ› e
x2:= p0 `α΅₯βŠ›α΅£ r_cat_r `α΅₯βŠ› e: val Ξ“ `+ B

rew [fun p : pat `+ (A3 βŠ— B) => p_dom p =[ val ]> Ξ“] f_equal2 PTen (eq_trans (f_equal (p_of_w_0p A3) H1) (p_of_w_eq_aux_p A3 p (r_cat_l α΅£βŠ› e))) (eq_trans (f_equal (p_of_w_0p B) H2) (p_of_w_eq_aux_p B p0 (r_cat_r α΅£βŠ› e))) in [p_dom_of_w_0p A3 x1, p_dom_of_w_0p B (p0 `α΅₯βŠ›α΅£ r_cat_r `α΅₯βŠ› e)] ≑ₐ e
Ξ“: neg_ctx
A3, B: pre_ty pos
IHA1: p_dom_of_w_eq_P Ξ“ pos A3
IHA2: p_dom_of_w_eq_P Ξ“ pos B
p: pat `+ A3
p0: pat `+ B
e: p_dom (PTen p p0) =[ val ]> Ξ“
x1:= p `α΅₯βŠ›α΅£ r_cat_l `α΅₯βŠ› e: val Ξ“ `+ A3
H1:= w_sub_ren r_cat_l e `+ A3 p: x1 = p `α΅₯βŠ› r_cat_l α΅£βŠ› e
x2:= p0 `α΅₯βŠ›α΅£ r_cat_r `α΅₯βŠ› e: val Ξ“ `+ B
H2:= w_sub_ren r_cat_r e `+ B p0: x2 = p0 `α΅₯βŠ› r_cat_r α΅£βŠ› e

rew [fun p : pat `+ (A3 βŠ— B) => p_dom p =[ val ]> Ξ“] f_equal2 PTen (eq_trans (f_equal (p_of_w_0p A3) H1) (p_of_w_eq_aux_p A3 p (r_cat_l α΅£βŠ› e))) (eq_trans (f_equal (p_of_w_0p B) H2) (p_of_w_eq_aux_p B p0 (r_cat_r α΅£βŠ› e))) in [p_dom_of_w_0p A3 x1, p_dom_of_w_0p B x2] ≑ₐ e
Ξ“: neg_ctx
A3, B: pre_ty pos
IHA1: p_dom_of_w_eq_P Ξ“ pos A3
IHA2: p_dom_of_w_eq_P Ξ“ pos B
p: pat `+ A3
p0: pat `+ B
e: p_dom (PTen p p0) =[ val ]> Ξ“

rew [fun p : pat `+ (A3 βŠ— B) => p_dom p =[ val ]> Ξ“] f_equal2 PTen (eq_trans eq_refl (p_of_w_eq_aux_p A3 p (r_cat_l α΅£βŠ› e))) (eq_trans eq_refl (p_of_w_eq_aux_p B p0 (r_cat_r α΅£βŠ› e))) in [p_dom_of_w_0p A3 (p `α΅₯βŠ› r_cat_l α΅£βŠ› e), p_dom_of_w_0p B (p0 `α΅₯βŠ› r_cat_r α΅£βŠ› e)] ≑ₐ e
Ξ“: neg_ctx
A3, B: pre_ty pos
IHA1: p_dom_of_w_eq_P Ξ“ pos A3
IHA2: p_dom_of_w_eq_P Ξ“ pos B
p: pat `+ A3
p0: pat `+ B
e: p_dom (PTen p p0) =[ val ]> Ξ“
H1:= p_of_w_eq_aux_p A3 p (r_cat_l α΅£βŠ› e): p_of_w_0p A3 (p `α΅₯βŠ› r_cat_l α΅£βŠ› e) = p

rew [fun p : pat `+ (A3 βŠ— B) => p_dom p =[ val ]> Ξ“] f_equal2 PTen (eq_trans eq_refl H1) (eq_trans eq_refl (p_of_w_eq_aux_p B p0 (r_cat_r α΅£βŠ› e))) in [p_dom_of_w_0p A3 (p `α΅₯βŠ› r_cat_l α΅£βŠ› e), p_dom_of_w_0p B (p0 `α΅₯βŠ› r_cat_r α΅£βŠ› e)] ≑ₐ e
Ξ“: neg_ctx
A3, B: pre_ty pos
IHA1: p_dom_of_w_eq_P Ξ“ pos A3
IHA2: p_dom_of_w_eq_P Ξ“ pos B
p: pat `+ A3
p0: pat `+ B
e: p_dom (PTen p p0) =[ val ]> Ξ“
H1:= p_of_w_eq_aux_p A3 p (r_cat_l α΅£βŠ› e): p_of_w_0p A3 (p `α΅₯βŠ› r_cat_l α΅£βŠ› e) = p
H2:= p_of_w_eq_aux_p B p0 (r_cat_r α΅£βŠ› e): p_of_w_0p B (p0 `α΅₯βŠ› r_cat_r α΅£βŠ› e) = p0

rew [fun p : pat `+ (A3 βŠ— B) => p_dom p =[ val ]> Ξ“] f_equal2 PTen (eq_trans eq_refl H1) (eq_trans eq_refl H2) in [p_dom_of_w_0p A3 (p `α΅₯βŠ› r_cat_l α΅£βŠ› e), p_dom_of_w_0p B (p0 `α΅₯βŠ› r_cat_r α΅£βŠ› e)] ≑ₐ e
Ξ“: neg_ctx
A3, B: pre_ty pos
IHA1: p_dom_of_w_eq_P Ξ“ pos A3
IHA2: p_dom_of_w_eq_P Ξ“ pos B
p: pat `+ A3
p0: pat `+ B
e: p_dom (PTen p p0) =[ val ]> Ξ“
H1:= p_of_w_eq_aux_p A3 p (r_cat_l α΅£βŠ› e): p_of_w_0p A3 (p `α΅₯βŠ› r_cat_l α΅£βŠ› e) = p
H2:= p_of_w_eq_aux_p B p0 (r_cat_r α΅£βŠ› e): p_of_w_0p B (p0 `α΅₯βŠ› r_cat_r α΅£βŠ› e) = p0

rew [fun p : pat `+ (A3 βŠ— B) => p_dom p =[ val ]> Ξ“] f_equal2 PTen (eq_trans eq_refl H1) (eq_trans eq_refl H2) in [p_dom_of_w_0p A3 (p `α΅₯βŠ› r_cat_l α΅£βŠ› e), p_dom_of_w_0p B (p0 `α΅₯βŠ› r_cat_r α΅£βŠ› e)] ≑ₐ [rew [fun p : pat `+ A3 => p_dom p =[ val ]> Ξ“] H1 in p_dom_of_w_0p A3 (p `α΅₯βŠ› r_cat_l α΅£βŠ› e), rew [fun p : pat `+ B => p_dom p =[ val ]> Ξ“] H2 in p_dom_of_w_0p B (p0 `α΅₯βŠ› r_cat_r α΅£βŠ› e)]
Ξ“: neg_ctx
A3, B: pre_ty pos
IHA1: p_dom_of_w_eq_P Ξ“ pos A3
IHA2: p_dom_of_w_eq_P Ξ“ pos B
p: pat `+ A3
p0: pat `+ B
e: p_dom (PTen p p0) =[ val ]> Ξ“
H1:= p_of_w_eq_aux_p A3 p (r_cat_l α΅£βŠ› e): p_of_w_0p A3 (p `α΅₯βŠ› r_cat_l α΅£βŠ› e) = p
H2:= p_of_w_eq_aux_p B p0 (r_cat_r α΅£βŠ› e): p_of_w_0p B (p0 `α΅₯βŠ› r_cat_r α΅£βŠ› e) = p0
[rew [fun p : pat `+ A3 => p_dom p =[ val ]> Ξ“] H1 in p_dom_of_w_0p A3 (p `α΅₯βŠ› r_cat_l α΅£βŠ› e), rew [fun p : pat `+ B => p_dom p =[ val ]> Ξ“] H2 in p_dom_of_w_0p B (p0 `α΅₯βŠ› r_cat_r α΅£βŠ› e)] ≑ₐ e
Ξ“: neg_ctx
A3, B: pre_ty pos
IHA1: p_dom_of_w_eq_P Ξ“ pos A3
IHA2: p_dom_of_w_eq_P Ξ“ pos B
p: pat `+ A3
p0: pat `+ B
e: p_dom (PTen p p0) =[ val ]> Ξ“
H1:= p_of_w_eq_aux_p A3 p (r_cat_l α΅£βŠ› e): p_of_w_0p A3 (p `α΅₯βŠ› r_cat_l α΅£βŠ› e) = p
H2:= p_of_w_eq_aux_p B p0 (r_cat_r α΅£βŠ› e): p_of_w_0p B (p0 `α΅₯βŠ› r_cat_r α΅£βŠ› e) = p0

[rew [fun p : pat `+ A3 => p_dom p =[ val ]> Ξ“] H1 in p_dom_of_w_0p A3 (p `α΅₯βŠ› r_cat_l α΅£βŠ› e), rew [fun p : pat `+ B => p_dom p =[ val ]> Ξ“] H2 in p_dom_of_w_0p B (p0 `α΅₯βŠ› r_cat_r α΅£βŠ› e)] ≑ₐ e
refine (a_cat_uniq _ _ _ _ _); [ apply IHA1 | apply IHA2 ] .
Ξ“: neg_ctx
A4, B0: pre_ty neg
IHA1: p_dom_of_w_eq_P Ξ“ neg A4
IHA2: p_dom_of_w_eq_P Ξ“ neg B0
p1: pat `- A4
p2: pat `- B0
e: p_dom (PPar p1 p2) =[ val ]> Ξ“

rew [fun p : pat `- (A4 β…‹ B0) => p_dom p =[ val ]> Ξ“] f_equal2 PPar (eq_trans (f_equal (p_of_w_0n A4) (w_sub_ren r_cat_l e `- A4 p1)) (p_of_w_eq_aux_n A4 p1 (r_cat_l α΅£βŠ› e))) (eq_trans (f_equal (p_of_w_0n B0) (w_sub_ren r_cat_r e `- B0 p2)) (p_of_w_eq_aux_n B0 p2 (r_cat_r α΅£βŠ› e))) in [p_dom_of_w_0n A4 (p1 `α΅₯βŠ›α΅£ r_cat_l `α΅₯βŠ› e), p_dom_of_w_0n B0 (p2 `α΅₯βŠ›α΅£ r_cat_r `α΅₯βŠ› e)] ≑ₐ e
Ξ“: neg_ctx
A4, B0: pre_ty neg
IHA1: p_dom_of_w_eq_P Ξ“ neg A4
IHA2: p_dom_of_w_eq_P Ξ“ neg B0
p1: pat `- A4
p2: pat `- B0
e: p_dom (PPar p1 p2) =[ val ]> Ξ“
H1:= w_sub_ren r_cat_l e `- A4 p1: p1 `α΅₯βŠ›α΅£ r_cat_l `α΅₯βŠ› e = p1 `α΅₯βŠ› r_cat_l α΅£βŠ› e

rew [fun p : pat `- (A4 β…‹ B0) => p_dom p =[ val ]> Ξ“] f_equal2 PPar (eq_trans (f_equal (p_of_w_0n A4) (w_sub_ren r_cat_l e `- A4 p1)) (p_of_w_eq_aux_n A4 p1 (r_cat_l α΅£βŠ› e))) (eq_trans (f_equal (p_of_w_0n B0) (w_sub_ren r_cat_r e `- B0 p2)) (p_of_w_eq_aux_n B0 p2 (r_cat_r α΅£βŠ› e))) in [p_dom_of_w_0n A4 (p1 `α΅₯βŠ›α΅£ r_cat_l `α΅₯βŠ› e), p_dom_of_w_0n B0 (p2 `α΅₯βŠ›α΅£ r_cat_r `α΅₯βŠ› e)] ≑ₐ e
Ξ“: neg_ctx
A4, B0: pre_ty neg
IHA1: p_dom_of_w_eq_P Ξ“ neg A4
IHA2: p_dom_of_w_eq_P Ξ“ neg B0
p1: pat `- A4
p2: pat `- B0
e: p_dom (PPar p1 p2) =[ val ]> Ξ“
H1:= w_sub_ren r_cat_l e `- A4 p1: p1 `α΅₯βŠ›α΅£ r_cat_l `α΅₯βŠ› e = p1 `α΅₯βŠ› r_cat_l α΅£βŠ› e
H2:= w_sub_ren r_cat_r e `- B0 p2: p2 `α΅₯βŠ›α΅£ r_cat_r `α΅₯βŠ› e = p2 `α΅₯βŠ› r_cat_r α΅£βŠ› e

rew [fun p : pat `- (A4 β…‹ B0) => p_dom p =[ val ]> Ξ“] f_equal2 PPar (eq_trans (f_equal (p_of_w_0n A4) (w_sub_ren r_cat_l e `- A4 p1)) (p_of_w_eq_aux_n A4 p1 (r_cat_l α΅£βŠ› e))) (eq_trans (f_equal (p_of_w_0n B0) (w_sub_ren r_cat_r e `- B0 p2)) (p_of_w_eq_aux_n B0 p2 (r_cat_r α΅£βŠ› e))) in [p_dom_of_w_0n A4 (p1 `α΅₯βŠ›α΅£ r_cat_l `α΅₯βŠ› e), p_dom_of_w_0n B0 (p2 `α΅₯βŠ›α΅£ r_cat_r `α΅₯βŠ› e)] ≑ₐ e
Ξ“: neg_ctx
A4, B0: pre_ty neg
IHA1: p_dom_of_w_eq_P Ξ“ neg A4
IHA2: p_dom_of_w_eq_P Ξ“ neg B0
p1: pat `- A4
p2: pat `- B0
e: p_dom (PPar p1 p2) =[ val ]> Ξ“
H1:= w_sub_ren r_cat_l e `- A4 p1: p1 `α΅₯βŠ›α΅£ r_cat_l `α΅₯βŠ› e = p1 `α΅₯βŠ› r_cat_l α΅£βŠ› e
H2:= w_sub_ren r_cat_r e `- B0 p2: p2 `α΅₯βŠ›α΅£ r_cat_r `α΅₯βŠ› e = p2 `α΅₯βŠ› r_cat_r α΅£βŠ› e
x1:= p1 `α΅₯βŠ›α΅£ r_cat_l `α΅₯βŠ› e: val Ξ“ `- A4

rew [fun p : pat `- (A4 β…‹ B0) => p_dom p =[ val ]> Ξ“] f_equal2 PPar (eq_trans (f_equal (p_of_w_0n A4) (w_sub_ren r_cat_l e `- A4 p1)) (p_of_w_eq_aux_n A4 p1 (r_cat_l α΅£βŠ› e))) (eq_trans (f_equal (p_of_w_0n B0) (w_sub_ren r_cat_r e `- B0 p2)) (p_of_w_eq_aux_n B0 p2 (r_cat_r α΅£βŠ› e))) in [p_dom_of_w_0n A4 (p1 `α΅₯βŠ›α΅£ r_cat_l `α΅₯βŠ› e), p_dom_of_w_0n B0 (p2 `α΅₯βŠ›α΅£ r_cat_r `α΅₯βŠ› e)] ≑ₐ e
Ξ“: neg_ctx
A4, B0: pre_ty neg
IHA1: p_dom_of_w_eq_P Ξ“ neg A4
IHA2: p_dom_of_w_eq_P Ξ“ neg B0
p1: pat `- A4
p2: pat `- B0
e: p_dom (PPar p1 p2) =[ val ]> Ξ“
H1:= w_sub_ren r_cat_l e `- A4 p1: p1 `α΅₯βŠ›α΅£ r_cat_l `α΅₯βŠ› e = p1 `α΅₯βŠ› r_cat_l α΅£βŠ› e
H2:= w_sub_ren r_cat_r e `- B0 p2: p2 `α΅₯βŠ›α΅£ r_cat_r `α΅₯βŠ› e = p2 `α΅₯βŠ› r_cat_r α΅£βŠ› e
x1:= p1 `α΅₯βŠ›α΅£ r_cat_l `α΅₯βŠ› e: val Ξ“ `- A4
x2:= p2 `α΅₯βŠ›α΅£ r_cat_r `α΅₯βŠ› e: val Ξ“ `- B0

rew [fun p : pat `- (A4 β…‹ B0) => p_dom p =[ val ]> Ξ“] f_equal2 PPar (eq_trans (f_equal (p_of_w_0n A4) (w_sub_ren r_cat_l e `- A4 p1)) (p_of_w_eq_aux_n A4 p1 (r_cat_l α΅£βŠ› e))) (eq_trans (f_equal (p_of_w_0n B0) (w_sub_ren r_cat_r e `- B0 p2)) (p_of_w_eq_aux_n B0 p2 (r_cat_r α΅£βŠ› e))) in [p_dom_of_w_0n A4 (p1 `α΅₯βŠ›α΅£ r_cat_l `α΅₯βŠ› e), p_dom_of_w_0n B0 (p2 `α΅₯βŠ›α΅£ r_cat_r `α΅₯βŠ› e)] ≑ₐ e
Ξ“: neg_ctx
A4, B0: pre_ty neg
IHA1: p_dom_of_w_eq_P Ξ“ neg A4
IHA2: p_dom_of_w_eq_P Ξ“ neg B0
p1: pat `- A4
p2: pat `- B0
e: p_dom (PPar p1 p2) =[ val ]> Ξ“
H1:= w_sub_ren r_cat_l e `- A4 p1: p1 `α΅₯βŠ›α΅£ r_cat_l `α΅₯βŠ› e = p1 `α΅₯βŠ› r_cat_l α΅£βŠ› e
H2:= w_sub_ren r_cat_r e `- B0 p2: p2 `α΅₯βŠ›α΅£ r_cat_r `α΅₯βŠ› e = p2 `α΅₯βŠ› r_cat_r α΅£βŠ› e
x1:= p1 `α΅₯βŠ›α΅£ r_cat_l `α΅₯βŠ› e: val Ξ“ `- A4
x2:= p2 `α΅₯βŠ›α΅£ r_cat_r `α΅₯βŠ› e: val Ξ“ `- B0

rew [fun p : pat `- (A4 β…‹ B0) => p_dom p =[ val ]> Ξ“] f_equal2 PPar (eq_trans (f_equal (p_of_w_0n A4) H1) (p_of_w_eq_aux_n A4 p1 (r_cat_l α΅£βŠ› e))) (eq_trans (f_equal (p_of_w_0n B0) (w_sub_ren r_cat_r e `- B0 p2)) (p_of_w_eq_aux_n B0 p2 (r_cat_r α΅£βŠ› e))) in [p_dom_of_w_0n A4 (p1 `α΅₯βŠ›α΅£ r_cat_l `α΅₯βŠ› e), p_dom_of_w_0n B0 (p2 `α΅₯βŠ›α΅£ r_cat_r `α΅₯βŠ› e)] ≑ₐ e
Ξ“: neg_ctx
A4, B0: pre_ty neg
IHA1: p_dom_of_w_eq_P Ξ“ neg A4
IHA2: p_dom_of_w_eq_P Ξ“ neg B0
p1: pat `- A4
p2: pat `- B0
e: p_dom (PPar p1 p2) =[ val ]> Ξ“
H1:= w_sub_ren r_cat_l e `- A4 p1: p1 `α΅₯βŠ›α΅£ r_cat_l `α΅₯βŠ› e = p1 `α΅₯βŠ› r_cat_l α΅£βŠ› e
H2:= w_sub_ren r_cat_r e `- B0 p2: p2 `α΅₯βŠ›α΅£ r_cat_r `α΅₯βŠ› e = p2 `α΅₯βŠ› r_cat_r α΅£βŠ› e
x1:= p1 `α΅₯βŠ›α΅£ r_cat_l `α΅₯βŠ› e: val Ξ“ `- A4
x2:= p2 `α΅₯βŠ›α΅£ r_cat_r `α΅₯βŠ› e: val Ξ“ `- B0

rew [fun p : pat `- (A4 β…‹ B0) => p_dom p =[ val ]> Ξ“] f_equal2 PPar (eq_trans (f_equal (p_of_w_0n A4) H1) (p_of_w_eq_aux_n A4 p1 (r_cat_l α΅£βŠ› e))) (eq_trans (f_equal (p_of_w_0n B0) H2) (p_of_w_eq_aux_n B0 p2 (r_cat_r α΅£βŠ› e))) in [p_dom_of_w_0n A4 (p1 `α΅₯βŠ›α΅£ r_cat_l `α΅₯βŠ› e), p_dom_of_w_0n B0 (p2 `α΅₯βŠ›α΅£ r_cat_r `α΅₯βŠ› e)] ≑ₐ e
Ξ“: neg_ctx
A4, B0: pre_ty neg
IHA1: p_dom_of_w_eq_P Ξ“ neg A4
IHA2: p_dom_of_w_eq_P Ξ“ neg B0
p1: pat `- A4
p2: pat `- B0
e: p_dom (PPar p1 p2) =[ val ]> Ξ“
x1:= p1 `α΅₯βŠ›α΅£ r_cat_l `α΅₯βŠ› e: val Ξ“ `- A4
H1:= w_sub_ren r_cat_l e `- A4 p1: x1 = p1 `α΅₯βŠ› r_cat_l α΅£βŠ› e
H2:= w_sub_ren r_cat_r e `- B0 p2: p2 `α΅₯βŠ›α΅£ r_cat_r `α΅₯βŠ› e = p2 `α΅₯βŠ› r_cat_r α΅£βŠ› e
x2:= p2 `α΅₯βŠ›α΅£ r_cat_r `α΅₯βŠ› e: val Ξ“ `- B0

rew [fun p : pat `- (A4 β…‹ B0) => p_dom p =[ val ]> Ξ“] f_equal2 PPar (eq_trans (f_equal (p_of_w_0n A4) H1) (p_of_w_eq_aux_n A4 p1 (r_cat_l α΅£βŠ› e))) (eq_trans (f_equal (p_of_w_0n B0) H2) (p_of_w_eq_aux_n B0 p2 (r_cat_r α΅£βŠ› e))) in [p_dom_of_w_0n A4 x1, p_dom_of_w_0n B0 (p2 `α΅₯βŠ›α΅£ r_cat_r `α΅₯βŠ› e)] ≑ₐ e
Ξ“: neg_ctx
A4, B0: pre_ty neg
IHA1: p_dom_of_w_eq_P Ξ“ neg A4
IHA2: p_dom_of_w_eq_P Ξ“ neg B0
p1: pat `- A4
p2: pat `- B0
e: p_dom (PPar p1 p2) =[ val ]> Ξ“
x1:= p1 `α΅₯βŠ›α΅£ r_cat_l `α΅₯βŠ› e: val Ξ“ `- A4
H1:= w_sub_ren r_cat_l e `- A4 p1: x1 = p1 `α΅₯βŠ› r_cat_l α΅£βŠ› e
x2:= p2 `α΅₯βŠ›α΅£ r_cat_r `α΅₯βŠ› e: val Ξ“ `- B0
H2:= w_sub_ren r_cat_r e `- B0 p2: x2 = p2 `α΅₯βŠ› r_cat_r α΅£βŠ› e

rew [fun p : pat `- (A4 β…‹ B0) => p_dom p =[ val ]> Ξ“] f_equal2 PPar (eq_trans (f_equal (p_of_w_0n A4) H1) (p_of_w_eq_aux_n A4 p1 (r_cat_l α΅£βŠ› e))) (eq_trans (f_equal (p_of_w_0n B0) H2) (p_of_w_eq_aux_n B0 p2 (r_cat_r α΅£βŠ› e))) in [p_dom_of_w_0n A4 x1, p_dom_of_w_0n B0 x2] ≑ₐ e
Ξ“: neg_ctx
A4, B0: pre_ty neg
IHA1: p_dom_of_w_eq_P Ξ“ neg A4
IHA2: p_dom_of_w_eq_P Ξ“ neg B0
p1: pat `- A4
p2: pat `- B0
e: p_dom (PPar p1 p2) =[ val ]> Ξ“

rew [fun p : pat `- (A4 β…‹ B0) => p_dom p =[ val ]> Ξ“] f_equal2 PPar (eq_trans eq_refl (p_of_w_eq_aux_n A4 p1 (r_cat_l α΅£βŠ› e))) (eq_trans eq_refl (p_of_w_eq_aux_n B0 p2 (r_cat_r α΅£βŠ› e))) in [p_dom_of_w_0n A4 (p1 `α΅₯βŠ› r_cat_l α΅£βŠ› e), p_dom_of_w_0n B0 (p2 `α΅₯βŠ› r_cat_r α΅£βŠ› e)] ≑ₐ e
Ξ“: neg_ctx
A4, B0: pre_ty neg
IHA1: p_dom_of_w_eq_P Ξ“ neg A4
IHA2: p_dom_of_w_eq_P Ξ“ neg B0
p1: pat `- A4
p2: pat `- B0
e: p_dom (PPar p1 p2) =[ val ]> Ξ“
H1:= p_of_w_eq_aux_n A4 p1 (r_cat_l α΅£βŠ› e): p_of_w_0n A4 (p1 `α΅₯βŠ› r_cat_l α΅£βŠ› e) = p1

rew [fun p : pat `- (A4 β…‹ B0) => p_dom p =[ val ]> Ξ“] f_equal2 PPar (eq_trans eq_refl H1) (eq_trans eq_refl (p_of_w_eq_aux_n B0 p2 (r_cat_r α΅£βŠ› e))) in [p_dom_of_w_0n A4 (p1 `α΅₯βŠ› r_cat_l α΅£βŠ› e), p_dom_of_w_0n B0 (p2 `α΅₯βŠ› r_cat_r α΅£βŠ› e)] ≑ₐ e
Ξ“: neg_ctx
A4, B0: pre_ty neg
IHA1: p_dom_of_w_eq_P Ξ“ neg A4
IHA2: p_dom_of_w_eq_P Ξ“ neg B0
p1: pat `- A4
p2: pat `- B0
e: p_dom (PPar p1 p2) =[ val ]> Ξ“
H1:= p_of_w_eq_aux_n A4 p1 (r_cat_l α΅£βŠ› e): p_of_w_0n A4 (p1 `α΅₯βŠ› r_cat_l α΅£βŠ› e) = p1
H2:= p_of_w_eq_aux_n B0 p2 (r_cat_r α΅£βŠ› e): p_of_w_0n B0 (p2 `α΅₯βŠ› r_cat_r α΅£βŠ› e) = p2

rew [fun p : pat `- (A4 β…‹ B0) => p_dom p =[ val ]> Ξ“] f_equal2 PPar (eq_trans eq_refl H1) (eq_trans eq_refl H2) in [p_dom_of_w_0n A4 (p1 `α΅₯βŠ› r_cat_l α΅£βŠ› e), p_dom_of_w_0n B0 (p2 `α΅₯βŠ› r_cat_r α΅£βŠ› e)] ≑ₐ e
Ξ“: neg_ctx
A4, B0: pre_ty neg
IHA1: p_dom_of_w_eq_P Ξ“ neg A4
IHA2: p_dom_of_w_eq_P Ξ“ neg B0
p1: pat `- A4
p2: pat `- B0
e: p_dom (PPar p1 p2) =[ val ]> Ξ“
H1:= p_of_w_eq_aux_n A4 p1 (r_cat_l α΅£βŠ› e): p_of_w_0n A4 (p1 `α΅₯βŠ› r_cat_l α΅£βŠ› e) = p1
H2:= p_of_w_eq_aux_n B0 p2 (r_cat_r α΅£βŠ› e): p_of_w_0n B0 (p2 `α΅₯βŠ› r_cat_r α΅£βŠ› e) = p2

rew [fun p : pat `- (A4 β…‹ B0) => p_dom p =[ val ]> Ξ“] f_equal2 PPar (eq_trans eq_refl H1) (eq_trans eq_refl H2) in [p_dom_of_w_0n A4 (p1 `α΅₯βŠ› r_cat_l α΅£βŠ› e), p_dom_of_w_0n B0 (p2 `α΅₯βŠ› r_cat_r α΅£βŠ› e)] ≑ₐ [rew [fun p : pat `- A4 => p_dom p =[ val ]> Ξ“] H1 in p_dom_of_w_0n A4 (p1 `α΅₯βŠ› r_cat_l α΅£βŠ› e), rew [fun p : pat `- B0 => p_dom p =[ val ]> Ξ“] H2 in p_dom_of_w_0n B0 (p2 `α΅₯βŠ› r_cat_r α΅£βŠ› e)]
Ξ“: neg_ctx
A4, B0: pre_ty neg
IHA1: p_dom_of_w_eq_P Ξ“ neg A4
IHA2: p_dom_of_w_eq_P Ξ“ neg B0
p1: pat `- A4
p2: pat `- B0
e: p_dom (PPar p1 p2) =[ val ]> Ξ“
H1:= p_of_w_eq_aux_n A4 p1 (r_cat_l α΅£βŠ› e): p_of_w_0n A4 (p1 `α΅₯βŠ› r_cat_l α΅£βŠ› e) = p1
H2:= p_of_w_eq_aux_n B0 p2 (r_cat_r α΅£βŠ› e): p_of_w_0n B0 (p2 `α΅₯βŠ› r_cat_r α΅£βŠ› e) = p2
[rew [fun p : pat `- A4 => p_dom p =[ val ]> Ξ“] H1 in p_dom_of_w_0n A4 (p1 `α΅₯βŠ› r_cat_l α΅£βŠ› e), rew [fun p : pat `- B0 => p_dom p =[ val ]> Ξ“] H2 in p_dom_of_w_0n B0 (p2 `α΅₯βŠ› r_cat_r α΅£βŠ› e)] ≑ₐ e
Ξ“: neg_ctx
A4, B0: pre_ty neg
IHA1: p_dom_of_w_eq_P Ξ“ neg A4
IHA2: p_dom_of_w_eq_P Ξ“ neg B0
p1: pat `- A4
p2: pat `- B0
e: p_dom (PPar p1 p2) =[ val ]> Ξ“
H1:= p_of_w_eq_aux_n A4 p1 (r_cat_l α΅£βŠ› e): p_of_w_0n A4 (p1 `α΅₯βŠ› r_cat_l α΅£βŠ› e) = p1
H2:= p_of_w_eq_aux_n B0 p2 (r_cat_r α΅£βŠ› e): p_of_w_0n B0 (p2 `α΅₯βŠ› r_cat_r α΅£βŠ› e) = p2

[rew [fun p : pat `- A4 => p_dom p =[ val ]> Ξ“] H1 in p_dom_of_w_0n A4 (p1 `α΅₯βŠ› r_cat_l α΅£βŠ› e), rew [fun p : pat `- B0 => p_dom p =[ val ]> Ξ“] H2 in p_dom_of_w_0n B0 (p2 `α΅₯βŠ› r_cat_r α΅£βŠ› e)] ≑ₐ e
refine (a_cat_uniq _ _ _ _ _); [ apply IHA1 | apply IHA2 ] .
Ξ“: neg_ctx
A5, B1: pre_ty pos
IHA1: p_dom_of_w_eq_P Ξ“ pos A5
IHA2: p_dom_of_w_eq_P Ξ“ pos B1
p3: pat `+ A5
e: p_dom (POr1 p3) =[ val ]> Ξ“

rew [fun p : pat `+ (A5 βŠ• B1) => p_dom p =[ val ]> Ξ“] f_equal POr1 (p_of_w_eq_aux_p A5 p3 e) in p_dom_of_w_0p A5 (p3 `α΅₯βŠ› e) ≑ₐ e
Ξ“: neg_ctx
A5, B1: pre_ty pos
IHA1: p_dom_of_w_eq_P Ξ“ pos A5
IHA2: p_dom_of_w_eq_P Ξ“ pos B1
p3: pat `+ A5
e: p_dom (POr1 p3) =[ val ]> Ξ“
xx:= rew [fun p : pat `+ (A5 βŠ• B1) => p_dom p =[ val ]> Ξ“] f_equal POr1 (p_of_w_eq_aux_p A5 p3 e) in p_dom_of_w_0p A5 (p3 `α΅₯βŠ› e): (fun p : pat `+ (A5 βŠ• B1) => p_dom p =[ val ]> Ξ“) (POr1 p3)

xx ≑ₐ e
Ξ“: neg_ctx
A5, B1: pre_ty pos
IHA1: p_dom_of_w_eq_P Ξ“ pos A5
IHA2: p_dom_of_w_eq_P Ξ“ pos B1
p3: pat `+ A5
e: p_dom (POr1 p3) =[ val ]> Ξ“
xx': (fun p : pat `+ (A5 βŠ• B1) => p_dom p =[ val ]> Ξ“) (POr1 p3)
Heqxx': xx' = rew [fun p : pat `+ (A5 βŠ• B1) => p_dom p =[ val ]> Ξ“] f_equal POr1 (p_of_w_eq_aux_p A5 p3 e) in p_dom_of_w_0p A5 (p3 `α΅₯βŠ› e)

xx' ≑ₐ e
Ξ“: neg_ctx
A5, B1: pre_ty pos
IHA1: p_dom_of_w_eq_P Ξ“ pos A5
IHA2: p_dom_of_w_eq_P Ξ“ pos B1
p3: pat `+ A5
e: p_dom (POr1 p3) =[ val ]> Ξ“
xx': (fun p : pat `+ (A5 βŠ• B1) => p_dom p =[ val ]> Ξ“) (POr1 p3)
Heqxx': xx' = rew [fun p : pat `+ (A5 βŠ• B1) => p_dom p =[ val ]> Ξ“] f_equal POr1 (p_of_w_eq_aux_p A5 p3 e) in p_dom_of_w_0p A5 (p3 `α΅₯βŠ› e)

rew [fun x : pat `+ A5 => p_dom (POr1 x) =[ val ]> Ξ“] p_of_w_eq_aux_p A5 p3 e in p_dom_of_w_0p A5 (p3 `α΅₯βŠ› e) ≑ₐ e
apply IHA1.
Ξ“: neg_ctx
A6, B2: pre_ty pos
IHA1: p_dom_of_w_eq_P Ξ“ pos A6
IHA2: p_dom_of_w_eq_P Ξ“ pos B2
p4: pat `+ B2
e: p_dom (POr2 p4) =[ val ]> Ξ“

rew [fun p : pat `+ (A6 βŠ• B2) => p_dom p =[ val ]> Ξ“] f_equal POr2 (p_of_w_eq_aux_p B2 p4 e) in p_dom_of_w_0p B2 (p4 `α΅₯βŠ› e) ≑ₐ e
Ξ“: neg_ctx
A6, B2: pre_ty pos
IHA1: p_dom_of_w_eq_P Ξ“ pos A6
IHA2: p_dom_of_w_eq_P Ξ“ pos B2
p4: pat `+ B2
e: p_dom (POr2 p4) =[ val ]> Ξ“
xx:= rew [fun p : pat `+ (A6 βŠ• B2) => p_dom p =[ val ]> Ξ“] f_equal POr2 (p_of_w_eq_aux_p B2 p4 e) in p_dom_of_w_0p B2 (p4 `α΅₯βŠ› e): (fun p : pat `+ (A6 βŠ• B2) => p_dom p =[ val ]> Ξ“) (POr2 p4)

xx ≑ₐ e
Ξ“: neg_ctx
A6, B2: pre_ty pos
IHA1: p_dom_of_w_eq_P Ξ“ pos A6
IHA2: p_dom_of_w_eq_P Ξ“ pos B2
p4: pat `+ B2
e: p_dom (POr2 p4) =[ val ]> Ξ“
xx': (fun p : pat `+ (A6 βŠ• B2) => p_dom p =[ val ]> Ξ“) (POr2 p4)
Heqxx': xx' = rew [fun p : pat `+ (A6 βŠ• B2) => p_dom p =[ val ]> Ξ“] f_equal POr2 (p_of_w_eq_aux_p B2 p4 e) in p_dom_of_w_0p B2 (p4 `α΅₯βŠ› e)

xx' ≑ₐ e
Ξ“: neg_ctx
A6, B2: pre_ty pos
IHA1: p_dom_of_w_eq_P Ξ“ pos A6
IHA2: p_dom_of_w_eq_P Ξ“ pos B2
p4: pat `+ B2
e: p_dom (POr2 p4) =[ val ]> Ξ“
xx': (fun p : pat `+ (A6 βŠ• B2) => p_dom p =[ val ]> Ξ“) (POr2 p4)
Heqxx': xx' = rew [fun p : pat `+ (A6 βŠ• B2) => p_dom p =[ val ]> Ξ“] f_equal POr2 (p_of_w_eq_aux_p B2 p4 e) in p_dom_of_w_0p B2 (p4 `α΅₯βŠ› e)

rew [fun x : pat `+ B2 => p_dom (POr2 x) =[ val ]> Ξ“] p_of_w_eq_aux_p B2 p4 e in p_dom_of_w_0p B2 (p4 `α΅₯βŠ› e) ≑ₐ e
apply IHA2.
Ξ“: neg_ctx
A7, B3: pre_ty neg
IHA1: p_dom_of_w_eq_P Ξ“ neg A7
IHA2: p_dom_of_w_eq_P Ξ“ neg B3
p5: pat `- A7
e: p_dom (PAnd1 p5) =[ val ]> Ξ“

rew [fun p : pat `- (A7 & B3) => p_dom p =[ val ]> Ξ“] f_equal PAnd1 (p_of_w_eq_aux_n A7 p5 e) in p_dom_of_w_0n A7 (p5 `α΅₯βŠ› e) ≑ₐ e
Ξ“: neg_ctx
A7, B3: pre_ty neg
IHA1: p_dom_of_w_eq_P Ξ“ neg A7
IHA2: p_dom_of_w_eq_P Ξ“ neg B3
p5: pat `- A7
e: p_dom (PAnd1 p5) =[ val ]> Ξ“
xx:= rew [fun p : pat `- (A7 & B3) => p_dom p =[ val ]> Ξ“] f_equal PAnd1 (p_of_w_eq_aux_n A7 p5 e) in p_dom_of_w_0n A7 (p5 `α΅₯βŠ› e): (fun p : pat `- (A7 & B3) => p_dom p =[ val ]> Ξ“) (PAnd1 p5)

xx ≑ₐ e
Ξ“: neg_ctx
A7, B3: pre_ty neg
IHA1: p_dom_of_w_eq_P Ξ“ neg A7
IHA2: p_dom_of_w_eq_P Ξ“ neg B3
p5: pat `- A7
e: p_dom (PAnd1 p5) =[ val ]> Ξ“
xx': (fun p : pat `- (A7 & B3) => p_dom p =[ val ]> Ξ“) (PAnd1 p5)
Heqxx': xx' = rew [fun p : pat `- (A7 & B3) => p_dom p =[ val ]> Ξ“] f_equal PAnd1 (p_of_w_eq_aux_n A7 p5 e) in p_dom_of_w_0n A7 (p5 `α΅₯βŠ› e)

xx' ≑ₐ e
Ξ“: neg_ctx
A7, B3: pre_ty neg
IHA1: p_dom_of_w_eq_P Ξ“ neg A7
IHA2: p_dom_of_w_eq_P Ξ“ neg B3
p5: pat `- A7
e: p_dom (PAnd1 p5) =[ val ]> Ξ“
xx': (fun p : pat `- (A7 & B3) => p_dom p =[ val ]> Ξ“) (PAnd1 p5)
Heqxx': xx' = rew [fun p : pat `- (A7 & B3) => p_dom p =[ val ]> Ξ“] f_equal PAnd1 (p_of_w_eq_aux_n A7 p5 e) in p_dom_of_w_0n A7 (p5 `α΅₯βŠ› e)

rew [fun x : pat `- A7 => p_dom (PAnd1 x) =[ val ]> Ξ“] p_of_w_eq_aux_n A7 p5 e in p_dom_of_w_0n A7 (p5 `α΅₯βŠ› e) ≑ₐ e
apply IHA1.
Ξ“: neg_ctx
A8, B4: pre_ty neg
IHA1: p_dom_of_w_eq_P Ξ“ neg A8
IHA2: p_dom_of_w_eq_P Ξ“ neg B4
p6: pat `- B4
e: p_dom (PAnd2 p6) =[ val ]> Ξ“

rew [fun p : pat `- (A8 & B4) => p_dom p =[ val ]> Ξ“] f_equal PAnd2 (p_of_w_eq_aux_n B4 p6 e) in p_dom_of_w_0n B4 (p6 `α΅₯βŠ› e) ≑ₐ e
Ξ“: neg_ctx
A8, B4: pre_ty neg
IHA1: p_dom_of_w_eq_P Ξ“ neg A8
IHA2: p_dom_of_w_eq_P Ξ“ neg B4
p6: pat `- B4
e: p_dom (PAnd2 p6) =[ val ]> Ξ“
xx:= rew [fun p : pat `- (A8 & B4) => p_dom p =[ val ]> Ξ“] f_equal PAnd2 (p_of_w_eq_aux_n B4 p6 e) in p_dom_of_w_0n B4 (p6 `α΅₯βŠ› e): (fun p : pat `- (A8 & B4) => p_dom p =[ val ]> Ξ“) (PAnd2 p6)

xx ≑ₐ e
Ξ“: neg_ctx
A8, B4: pre_ty neg
IHA1: p_dom_of_w_eq_P Ξ“ neg A8
IHA2: p_dom_of_w_eq_P Ξ“ neg B4
p6: pat `- B4
e: p_dom (PAnd2 p6) =[ val ]> Ξ“
xx': (fun p : pat `- (A8 & B4) => p_dom p =[ val ]> Ξ“) (PAnd2 p6)
Heqxx': xx' = rew [fun p : pat `- (A8 & B4) => p_dom p =[ val ]> Ξ“] f_equal PAnd2 (p_of_w_eq_aux_n B4 p6 e) in p_dom_of_w_0n B4 (p6 `α΅₯βŠ› e)

xx' ≑ₐ e
Ξ“: neg_ctx
A8, B4: pre_ty neg
IHA1: p_dom_of_w_eq_P Ξ“ neg A8
IHA2: p_dom_of_w_eq_P Ξ“ neg B4
p6: pat `- B4
e: p_dom (PAnd2 p6) =[ val ]> Ξ“
xx': (fun p : pat `- (A8 & B4) => p_dom p =[ val ]> Ξ“) (PAnd2 p6)
Heqxx': xx' = rew [fun p : pat `- (A8 & B4) => p_dom p =[ val ]> Ξ“] f_equal PAnd2 (p_of_w_eq_aux_n B4 p6 e) in p_dom_of_w_0n B4 (p6 `α΅₯βŠ› e)

rew [fun x : pat `- B4 => p_dom (PAnd2 x) =[ val ]> Ξ“] p_of_w_eq_aux_n B4 p6 e in p_dom_of_w_0n B4 (p6 `α΅₯βŠ› e) ≑ₐ e
apply IHA2.
Ξ“: neg_ctx
A8: pre_ty neg
IHA: p_dom_of_w_eq_P Ξ“ neg A8
e: p_dom (PShiftP A8) =[ val ]> Ξ“

! ▢ₐ e `+ A8 top ≑ₐ e
intros ? v; repeat (dependent elimination v; auto).
Ξ“: neg_ctx
A9: pre_ty pos
IHA: p_dom_of_w_eq_P Ξ“ pos A9
e: p_dom (PShiftN A9) =[ val ]> Ξ“

! ▢ₐ e `- A9 top ≑ₐ e
intros ? v; repeat (dependent elimination v; auto).
Ξ“: neg_ctx
A10: pre_ty neg
IHA: p_dom_of_w_eq_P Ξ“ neg A10
p7: pat `- A10
e: p_dom (PNegP p7) =[ val ]> Ξ“

rew [fun p : pat `+ (βŠ– A10) => p_dom p =[ val ]> Ξ“] f_equal PNegP (p_of_w_eq_aux_n A10 p7 e) in p_dom_of_w_0n A10 (p7 `α΅₯βŠ› e) ≑ₐ e
Ξ“: neg_ctx
A10: pre_ty neg
IHA: p_dom_of_w_eq_P Ξ“ neg A10
p7: pat `- A10
e: p_dom (PNegP p7) =[ val ]> Ξ“
xx:= rew [fun p : pat `+ (βŠ– A10) => p_dom p =[ val ]> Ξ“] f_equal PNegP (p_of_w_eq_aux_n A10 p7 e) in p_dom_of_w_0n A10 (p7 `α΅₯βŠ› e): (fun p : pat `+ (βŠ– A10) => p_dom p =[ val ]> Ξ“) (PNegP p7)

xx ≑ₐ e
Ξ“: neg_ctx
A10: pre_ty neg
IHA: p_dom_of_w_eq_P Ξ“ neg A10
p7: pat `- A10
e: p_dom (PNegP p7) =[ val ]> Ξ“
xx': (fun p : pat `+ (βŠ– A10) => p_dom p =[ val ]> Ξ“) (PNegP p7)
Heqxx': xx' = rew [fun p : pat `+ (βŠ– A10) => p_dom p =[ val ]> Ξ“] f_equal PNegP (p_of_w_eq_aux_n A10 p7 e) in p_dom_of_w_0n A10 (p7 `α΅₯βŠ› e)

xx' ≑ₐ e
Ξ“: neg_ctx
A10: pre_ty neg
IHA: p_dom_of_w_eq_P Ξ“ neg A10
p7: pat `- A10
e: p_dom (PNegP p7) =[ val ]> Ξ“
xx': (fun p : pat `+ (βŠ– A10) => p_dom p =[ val ]> Ξ“) (PNegP p7)
Heqxx': xx' = rew [fun p : pat `+ (βŠ– A10) => p_dom p =[ val ]> Ξ“] f_equal PNegP (p_of_w_eq_aux_n A10 p7 e) in p_dom_of_w_0n A10 (p7 `α΅₯βŠ› e)

rew [fun x : pat `- A10 => p_dom (PNegP x) =[ val ]> Ξ“] p_of_w_eq_aux_n A10 p7 e in p_dom_of_w_0n A10 (p7 `α΅₯βŠ› e) ≑ₐ e
apply IHA.
Ξ“: neg_ctx
A11: pre_ty pos
IHA: p_dom_of_w_eq_P Ξ“ pos A11
p8: pat `+ A11
e: p_dom (PNegN p8) =[ val ]> Ξ“

rew [fun p : pat `- (Β¬ A11) => p_dom p =[ val ]> Ξ“] f_equal PNegN (p_of_w_eq_aux_p A11 p8 e) in p_dom_of_w_0p A11 (p8 `α΅₯βŠ› e) ≑ₐ e
Ξ“: neg_ctx
A11: pre_ty pos
IHA: p_dom_of_w_eq_P Ξ“ pos A11
p8: pat `+ A11
e: p_dom (PNegN p8) =[ val ]> Ξ“
xx:= rew [fun p : pat `- (Β¬ A11) => p_dom p =[ val ]> Ξ“] f_equal PNegN (p_of_w_eq_aux_p A11 p8 e) in p_dom_of_w_0p A11 (p8 `α΅₯βŠ› e): (fun p : pat `- (Β¬ A11) => p_dom p =[ val ]> Ξ“) (PNegN p8)

xx ≑ₐ e
Ξ“: neg_ctx
A11: pre_ty pos
IHA: p_dom_of_w_eq_P Ξ“ pos A11
p8: pat `+ A11
e: p_dom (PNegN p8) =[ val ]> Ξ“
xx': (fun p : pat `- (Β¬ A11) => p_dom p =[ val ]> Ξ“) (PNegN p8)
Heqxx': xx' = rew [fun p : pat `- (Β¬ A11) => p_dom p =[ val ]> Ξ“] f_equal PNegN (p_of_w_eq_aux_p A11 p8 e) in p_dom_of_w_0p A11 (p8 `α΅₯βŠ› e)

xx' ≑ₐ e
Ξ“: neg_ctx
A11: pre_ty pos
IHA: p_dom_of_w_eq_P Ξ“ pos A11
p8: pat `+ A11
e: p_dom (PNegN p8) =[ val ]> Ξ“
xx': (fun p : pat `- (Β¬ A11) => p_dom p =[ val ]> Ξ“) (PNegN p8)
Heqxx': xx' = rew [fun p : pat `- (Β¬ A11) => p_dom p =[ val ]> Ξ“] f_equal PNegN (p_of_w_eq_aux_p A11 p8 e) in p_dom_of_w_0p A11 (p8 `α΅₯βŠ› e)

rew [fun x : pat `+ A11 => p_dom (PNegN x) =[ val ]> Ξ“] p_of_w_eq_aux_p A11 p8 e in p_dom_of_w_0p A11 (p8 `α΅₯βŠ› e) ≑ₐ e
apply IHA. Qed. (* coq unification drives me crazy!! *) Definition upg_vp {Ξ“} {A : pre_ty pos} : whn Ξ“ `+A -> val Ξ“ `+A := fun v => v. Definition upg_kp {Ξ“} {A : pre_ty pos} : term Ξ“ `-A -> val Ξ“ `-A := fun v => v. Definition upg_vn {Ξ“} {A : pre_ty neg} : term Ξ“ `+A -> val Ξ“ `+A := fun v => v. Definition upg_kn {Ξ“} {A : pre_ty neg} : whn Ξ“ `-A -> val Ξ“ `-A := fun v => v. Definition dwn_vp {Ξ“} {A : pre_ty pos} : val Ξ“ `+A -> whn Ξ“ `+A := fun v => v. Definition dwn_kp {Ξ“} {A : pre_ty pos} : val Ξ“ `-A -> term Ξ“ `-A := fun v => v. Definition dwn_vn {Ξ“} {A : pre_ty neg} : val Ξ“ `+A -> term Ξ“ `+A := fun v => v. Definition dwn_kn {Ξ“} {A : pre_ty neg} : val Ξ“ `-A -> whn Ξ“ `-A := fun v => v.
Ξ“: neg_ctx
A: pre_ty pos
i: Ξ“ βˆ‹ `- A
p: pat `+ A
Ξ³: p_dom p =[ val ]> Ξ“

nf_eq (i β‹… v_split_p (dwn_vp (p `α΅₯βŠ› Ξ³))) (i β‹… (p : obs_op `- A) ⦇ Ξ³ ⦈)
Ξ“: neg_ctx
A: pre_ty pos
i: Ξ“ βˆ‹ `- A
p: pat `+ A
Ξ³: p_dom p =[ val ]> Ξ“

nf_eq (i β‹… p_of_w_0p A (p `α΅₯βŠ› Ξ³) ⦇ p_dom_of_w_0p A (p `α΅₯βŠ› Ξ³) ⦈) (i β‹… p ⦇ Ξ³ ⦈)
Ξ“: neg_ctx
A: pre_ty pos
i: Ξ“ βˆ‹ `- A
p: pat `+ A
Ξ³: p_dom p =[ val ]> Ξ“
H: rew [fun p : pat `+ A => p_dom p =[ val ]> Ξ“] p_of_w_eq_aux_p A p Ξ³ in p_dom_of_w_0p A (p `α΅₯βŠ› Ξ³) ≑ₐ Ξ³

nf_eq (i β‹… p_of_w_0p A (p `α΅₯βŠ› Ξ³) ⦇ p_dom_of_w_0p A (p `α΅₯βŠ› Ξ³) ⦈) (i β‹… p ⦇ Ξ³ ⦈)
Ξ“: neg_ctx
A: pre_ty pos
i: Ξ“ βˆ‹ `- A
p: pat `+ A
Ξ³: p_dom p =[ val ]> Ξ“
H':= p_of_w_eq_aux_p A p Ξ³: p_of_w_0p A (p `α΅₯βŠ› Ξ³) = p
H: rew [fun p : pat `+ A => p_dom p =[ val ]> Ξ“] H' in p_dom_of_w_0p A (p `α΅₯βŠ› Ξ³) ≑ₐ Ξ³

nf_eq (i β‹… p_of_w_0p A (p `α΅₯βŠ› Ξ³) ⦇ p_dom_of_w_0p A (p `α΅₯βŠ› Ξ³) ⦈) (i β‹… p ⦇ Ξ³ ⦈)
Ξ“: neg_ctx
A: pre_ty pos
i: Ξ“ βˆ‹ `- A
p: pat `+ A
Ξ³: p_dom p =[ val ]> Ξ“
H':= p_of_w_eq_aux_p A p Ξ³: p_of_w_0p A (p `α΅₯βŠ› Ξ³) = p
a:= p_dom_of_w_0p A (p `α΅₯βŠ› Ξ³): p_dom (p_of_w_0p A (p `α΅₯βŠ› Ξ³)) =[ val ]> Ξ“
H: rew [fun p : pat `+ A => p_dom p =[ val ]> Ξ“] H' in a ≑ₐ Ξ³

nf_eq (i β‹… p_of_w_0p A (p `α΅₯βŠ› Ξ³) ⦇ a ⦈) (i β‹… p ⦇ Ξ³ ⦈)
Ξ“: neg_ctx
A: pre_ty pos
i: Ξ“ βˆ‹ `- A
p: pat `+ A
Ξ³: p_dom p =[ val ]> Ξ“
H':= p_of_w_eq_aux_p A p Ξ³: p_of_w_0p A (p `α΅₯βŠ› Ξ³) = p
a': p_dom (p_of_w_0p A (p `α΅₯βŠ› Ξ³)) =[ val ]> Ξ“
H: rew [fun p : pat `+ A => p_dom p =[ val ]> Ξ“] H' in a' ≑ₐ Ξ³

nf_eq (i β‹… p_of_w_0p A (p `α΅₯βŠ› Ξ³) ⦇ a' ⦈) (i β‹… p ⦇ Ξ³ ⦈)
revert a' H; rewrite H'; intros; now econstructor. Qed.
Ξ“: neg_ctx
A: pre_ty neg
i: Ξ“ βˆ‹ `+ A
p: pat `- A
Ξ³: p_dom p =[ val ]> Ξ“

nf_eq (i β‹… v_split_n (dwn_kn (p `α΅₯βŠ› Ξ³))) (i β‹… (p : obs_op `+ A) ⦇ Ξ³ ⦈)
Ξ“: neg_ctx
A: pre_ty neg
i: Ξ“ βˆ‹ `+ A
p: pat `- A
Ξ³: p_dom p =[ val ]> Ξ“

nf_eq (i β‹… p_of_w_0n A (p `α΅₯βŠ› Ξ³) ⦇ p_dom_of_w_0n A (p `α΅₯βŠ› Ξ³) ⦈) (i β‹… p ⦇ Ξ³ ⦈)
Ξ“: neg_ctx
A: pre_ty neg
i: Ξ“ βˆ‹ `+ A
p: pat `- A
Ξ³: p_dom p =[ val ]> Ξ“
H: rew [fun p : pat `- A => p_dom p =[ val ]> Ξ“] p_of_w_eq_aux_n A p Ξ³ in p_dom_of_w_0n A (p `α΅₯βŠ› Ξ³) ≑ₐ Ξ³

nf_eq (i β‹… p_of_w_0n A (p `α΅₯βŠ› Ξ³) ⦇ p_dom_of_w_0n A (p `α΅₯βŠ› Ξ³) ⦈) (i β‹… p ⦇ Ξ³ ⦈)
Ξ“: neg_ctx
A: pre_ty neg
i: Ξ“ βˆ‹ `+ A
p: pat `- A
Ξ³: p_dom p =[ val ]> Ξ“
H':= p_of_w_eq_aux_n A p Ξ³: p_of_w_0n A (p `α΅₯βŠ› Ξ³) = p
H: rew [fun p : pat `- A => p_dom p =[ val ]> Ξ“] H' in p_dom_of_w_0n A (p `α΅₯βŠ› Ξ³) ≑ₐ Ξ³

nf_eq (i β‹… p_of_w_0n A (p `α΅₯βŠ› Ξ³) ⦇ p_dom_of_w_0n A (p `α΅₯βŠ› Ξ³) ⦈) (i β‹… p ⦇ Ξ³ ⦈)
Ξ“: neg_ctx
A: pre_ty neg
i: Ξ“ βˆ‹ `+ A
p: pat `- A
Ξ³: p_dom p =[ val ]> Ξ“
H':= p_of_w_eq_aux_n A p Ξ³: p_of_w_0n A (p `α΅₯βŠ› Ξ³) = p
a:= p_dom_of_w_0n A (p `α΅₯βŠ› Ξ³): p_dom (p_of_w_0n A (p `α΅₯βŠ› Ξ³)) =[ val ]> Ξ“
H: rew [fun p : pat `- A => p_dom p =[ val ]> Ξ“] H' in a ≑ₐ Ξ³

nf_eq (i β‹… p_of_w_0n A (p `α΅₯βŠ› Ξ³) ⦇ a ⦈) (i β‹… p ⦇ Ξ³ ⦈)
Ξ“: neg_ctx
A: pre_ty neg
i: Ξ“ βˆ‹ `+ A
p: pat `- A
Ξ³: p_dom p =[ val ]> Ξ“
H':= p_of_w_eq_aux_n A p Ξ³: p_of_w_0n A (p `α΅₯βŠ› Ξ³) = p
a': p_dom (p_of_w_0n A (p `α΅₯βŠ› Ξ³)) =[ val ]> Ξ“
H: rew [fun p : pat `- A => p_dom p =[ val ]> Ξ“] H' in a' ≑ₐ Ξ³

nf_eq (i β‹… p_of_w_0n A (p `α΅₯βŠ› Ξ³) ⦇ a' ⦈) (i β‹… p ⦇ Ξ³ ⦈)
revert a' H; rewrite H'; intros; now econstructor. Qed.

Finally we can return to saner pursuits.

OGS Instanciation

The notion of values and configurations we will pass to the generic OGS construction are our mu-mu-tilde values and states, but restricted to negative typing contexts. As such, while we have proven all the metatheory for arbitrary typing contexts, we still need a tiny bit of work to provide the laws in this special case. Once again, thanks to our tricky notion of subset context (Ctx/Subset.v), there is no need to cross a complex isomorphism (between contexts of negative types and contexts of types where all types are negative). We start by instanciating the substitution structures and their laws.

Notation val_n := (val ∘ neg_c_coe).
Notation state_n := (state ∘ neg_c_coe).


subst_monoid val_n

c_var ⇒₁ val_n

val_n ⇒₁ (⟦ val_n, val_n βŸ§β‚)

c_var ⇒₁ val_n
intros Ξ“ x i; exact (var i).

val_n ⇒₁ (⟦ val_n, val_n βŸ§β‚)
intros Ξ“ x v Ξ” f; exact (v α΅₯βŠ› f). Defined.

subst_module val_n state_n
esplit; intros Ξ“ s Ξ” f; exact (s β‚œβŠ› (f : Ξ“ =[val]> Ξ”)). Defined.

subst_monoid_laws val_n

Proper (βˆ€β‚• Ξ“, (βˆ€β‚• a, eq ==> (βˆ€β‚• Ξ”, asgn_eq Ξ“ Ξ” ==> eq))) v_sub

forall (Ξ“1 Ξ“2 : neg_ctx) (x : ty) (i : Ξ“1 βˆ‹ x) (p : Ξ“1 =[ val_n ]> Ξ“2), a_id i α΅₯βŠ› p = p x i

forall (Ξ“ : neg_ctx) (x : ty) (v : val Ξ“ x), v α΅₯βŠ› a_id = v

forall (Ξ“1 Ξ“2 Ξ“3 : neg_ctx) (x : ty) (v : val Ξ“1 x) (a : Ξ“1 =[ val_n ]> Ξ“2) (b : Ξ“2 =[ val_n ]> Ξ“3), v α΅₯βŠ› a βŠ› b = (v α΅₯βŠ› a) α΅₯βŠ› b

Proper (βˆ€β‚• Ξ“, (βˆ€β‚• a, eq ==> (βˆ€β‚• Ξ”, asgn_eq Ξ“ Ξ” ==> eq))) v_sub
intros ???? <- ????; now apply v_sub_eq.

forall (Ξ“1 Ξ“2 : neg_ctx) (x : ty) (i : Ξ“1 βˆ‹ x) (p : Ξ“1 =[ val_n ]> Ξ“2), a_id i α΅₯βŠ› p = p x i
intros ?????; now apply v_sub_id_r.

forall (Ξ“ : neg_ctx) (x : ty) (v : val Ξ“ x), v α΅₯βŠ› a_id = v
intros ???; now apply v_sub_id_l.

forall (Ξ“1 Ξ“2 Ξ“3 : neg_ctx) (x : ty) (v : val Ξ“1 x) (a : Ξ“1 =[ val_n ]> Ξ“2) (b : Ξ“2 =[ val_n ]> Ξ“3), v α΅₯βŠ› a βŠ› b = (v α΅₯βŠ› a) α΅₯βŠ› b
intros ???????; symmetry; now apply v_sub_sub. Qed.

subst_module_laws val_n state_n

Proper (βˆ€β‚• Ξ“, eq ==> (βˆ€β‚• Ξ”, asgn_eq Ξ“ Ξ” ==> eq)) c_sub

forall (Ξ“ : neg_ctx) (c : state Ξ“), c β‚œβŠ› a_id = c

forall (Ξ“1 Ξ“2 Ξ“3 : neg_ctx) (c : state Ξ“1) (a : Ξ“1 =[ val_n ]> Ξ“2) (b : Ξ“2 =[ val_n ]> Ξ“3), c β‚œβŠ› a βŠ› b = (c β‚œβŠ› a) β‚œβŠ› b

Proper (βˆ€β‚• Ξ“, eq ==> (βˆ€β‚• Ξ”, asgn_eq Ξ“ Ξ” ==> eq)) c_sub
intros ??? <- ????; now apply s_sub_eq.

forall (Ξ“ : neg_ctx) (c : state Ξ“), c β‚œβŠ› a_id = c
intros ??; now apply s_sub_id_l.

forall (Ξ“1 Ξ“2 Ξ“3 : neg_ctx) (c : state Ξ“1) (a : Ξ“1 =[ val_n ]> Ξ“2) (b : Ξ“2 =[ val_n ]> Ξ“3), c β‚œβŠ› a βŠ› b = (c β‚œβŠ› a) β‚œβŠ› b
intros ??????; symmetry; now apply s_sub_sub. Qed.

Variable assumptions, that is, lemmata related to decidability of a value being a variable are easily proven inline.


var_assumptions val_n

forall (Ξ“ : neg_ctx) (x : ty), injective (a_id (x:=x))

forall (Ξ“ : neg_ctx) (x : ty) (v : val Ξ“ x), decidable (is_var v)

forall (Ξ“1 Ξ“2 : neg_ctx) (x : ty) (v : val Ξ“1 x) (r : Ξ“1 βŠ† Ξ“2), is_var (v_ren v r) -> is_var v

forall (Ξ“ : neg_ctx) (x : ty), injective (a_id (x:=x))
intros ? [[]|[]] ?? H; now dependent destruction H.

forall (Ξ“ : neg_ctx) (x : ty) (v : val Ξ“ x), decidable (is_var v)
Ξ“: neg_ctx
p: pre_ty pos
c: Ξ“ βˆ‹ `+ p

decidable (is_var (Var c))
Ξ“: neg_ctx
decidable (is_var OneR)
Ξ“: neg_ctx
A0, B: pre_ty pos
w: whn Ξ“ `+ A0
w0: whn Ξ“ `+ B
decidable (is_var (TenR w w0))
Ξ“: neg_ctx
A4, B3: pre_ty pos
w3: whn Ξ“ `+ A4
decidable (is_var (OrR1 w3))
Ξ“: neg_ctx
A5, B4: pre_ty pos
w4: whn Ξ“ `+ B4
decidable (is_var (OrR2 w4))
Ξ“: neg_ctx
A10: pre_ty neg
t: term Ξ“ `+ A10
decidable (is_var (ShiftPR t))
Ξ“: neg_ctx
A14: pre_ty neg
w7: whn Ξ“ `- A14
decidable (is_var (NegPR w7))
Ξ“: neg_ctx
p: pre_ty neg
s: state (Ξ“ β–Άβ‚“ (`+ p) †)
decidable (is_var (Mu s))
Ξ“: neg_ctx
A1: pre_ty neg
t0: term (Ξ“ β–Άβ‚“ `+ A1) `+ A1
decidable (is_var (RecR t0))
Ξ“: neg_ctx
p: pre_ty neg
w: whn Ξ“ `+ p
decidable (is_var (Whn w))
Ξ“: neg_ctx
p: pre_ty pos
s: state (Ξ“ β–Άβ‚“ (`- p) †)
decidable (is_var (Mu s))
Ξ“: neg_ctx
A0: pre_ty pos
t: term (Ξ“ β–Άβ‚“ `- A0) `- A0
decidable (is_var (RecL t))
Ξ“: neg_ctx
p: pre_ty pos
w: whn Ξ“ `- p
decidable (is_var (Whn w))
Ξ“: neg_ctx
p: pre_ty neg
c: Ξ“ βˆ‹ `- p
decidable (is_var (Var c))
Ξ“: neg_ctx
decidable (is_var BotL)
Ξ“: neg_ctx
A3, B2: pre_ty neg
w1: whn Ξ“ `- A3
w2: whn Ξ“ `- B2
decidable (is_var (ParL w1 w2))
Ξ“: neg_ctx
A8, B7: pre_ty neg
w5: whn Ξ“ `- A8
decidable (is_var (AndL1 w5))
Ξ“: neg_ctx
A9, B8: pre_ty neg
w6: whn Ξ“ `- B8
decidable (is_var (AndL2 w6))
Ξ“: neg_ctx
A13: pre_ty pos
t0: term Ξ“ `- A13
decidable (is_var (ShiftNL t0))
Ξ“: neg_ctx
A17: pre_ty pos
w8: whn Ξ“ `+ A17
decidable (is_var (NegNL w8))
Ξ“: neg_ctx
p: pre_ty pos
c: Ξ“ βˆ‹ `+ p

decidable (is_var (Var c))
Ξ“: neg_ctx
decidable (is_var OneR)
Ξ“: neg_ctx
A0, B: pre_ty pos
w: whn Ξ“ `+ A0
w0: whn Ξ“ `+ B
decidable (is_var (TenR w w0))
Ξ“: neg_ctx
A4, B3: pre_ty pos
w3: whn Ξ“ `+ A4
decidable (is_var (OrR1 w3))
Ξ“: neg_ctx
A5, B4: pre_ty pos
w4: whn Ξ“ `+ B4
decidable (is_var (OrR2 w4))
Ξ“: neg_ctx
A10: pre_ty neg
t: term Ξ“ `+ A10
decidable (is_var (ShiftPR t))
Ξ“: neg_ctx
A14: pre_ty neg
w7: whn Ξ“ `- A14
decidable (is_var (NegPR w7))
Ξ“: neg_ctx
p: pre_ty neg
s: state (Ξ“ β–Άβ‚“ (`+ p) †)
decidable (is_var (Mu s))
Ξ“: neg_ctx
A1: pre_ty neg
t0: term (Ξ“ β–Άβ‚“ `+ A1) `+ A1
decidable (is_var (RecR t0))
Ξ“: neg_ctx
p: pre_ty neg
c: Ξ“ βˆ‹ `+ p
decidable (is_var (Whn (Var c)))
Ξ“: neg_ctx
decidable (is_var (Whn TopR))
Ξ“: neg_ctx
s0: state Ξ“
decidable (is_var (Whn (BotR s0)))
Ξ“: neg_ctx
A2, B1: pre_ty neg
s2: state (Ξ“ β–Άβ‚“ `- A2 β–Άβ‚“ `- B1)
decidable (is_var (Whn (ParR s2)))
Ξ“: neg_ctx
A7, B6: pre_ty neg
s5: state (Ξ“ β–Άβ‚“ `- A7)
s6: state (Ξ“ β–Άβ‚“ `- B6)
decidable (is_var (Whn (AndR s5 s6)))
Ξ“: neg_ctx
A12: pre_ty pos
s8: state (Ξ“ β–Άβ‚“ `- A12)
decidable (is_var (Whn (ShiftNR s8)))
Ξ“: neg_ctx
A16: pre_ty pos
s10: state (Ξ“ β–Άβ‚“ `+ A16)
decidable (is_var (Whn (NegNR s10)))
Ξ“: neg_ctx
p: pre_ty pos
c: Ξ“ βˆ‹ `- p
decidable (is_var (Whn (Var c)))
Ξ“: neg_ctx
decidable (is_var (Whn ZerL))
Ξ“: neg_ctx
s: state Ξ“
decidable (is_var (Whn (OneL s)))
Ξ“: neg_ctx
A1, B0: pre_ty pos
s1: state (Ξ“ β–Άβ‚“ `+ A1 β–Άβ‚“ `+ B0)
decidable (is_var (Whn (TenL s1)))
Ξ“: neg_ctx
A6, B5: pre_ty pos
s3: state (Ξ“ β–Άβ‚“ `+ A6)
s4: state (Ξ“ β–Άβ‚“ `+ B5)
decidable (is_var (Whn (OrL s3 s4)))
Ξ“: neg_ctx
A11: pre_ty neg
s7: state (Ξ“ β–Άβ‚“ `+ A11)
decidable (is_var (Whn (ShiftPL s7)))
Ξ“: neg_ctx
A15: pre_ty neg
s9: state (Ξ“ β–Άβ‚“ `- A15)
decidable (is_var (Whn (NegPL s9)))
Ξ“: neg_ctx
p: pre_ty pos
s: state (Ξ“ β–Άβ‚“ (`- p) †)
decidable (is_var (Mu s))
Ξ“: neg_ctx
A0: pre_ty pos
t: term (Ξ“ β–Άβ‚“ `- A0) `- A0
decidable (is_var (RecL t))
Ξ“: neg_ctx
p: pre_ty neg
c: Ξ“ βˆ‹ `- p
decidable (is_var (Var c))
Ξ“: neg_ctx
decidable (is_var BotL)
Ξ“: neg_ctx
A3, B2: pre_ty neg
w1: whn Ξ“ `- A3
w2: whn Ξ“ `- B2
decidable (is_var (ParL w1 w2))
Ξ“: neg_ctx
A8, B7: pre_ty neg
w5: whn Ξ“ `- A8
decidable (is_var (AndL1 w5))
Ξ“: neg_ctx
A9, B8: pre_ty neg
w6: whn Ξ“ `- B8
decidable (is_var (AndL2 w6))
Ξ“: neg_ctx
A13: pre_ty pos
t0: term Ξ“ `- A13
decidable (is_var (ShiftNL t0))
Ξ“: neg_ctx
A17: pre_ty pos
w8: whn Ξ“ `+ A17
decidable (is_var (NegNL w8))
Ξ“: neg_ctx

decidable (is_var OneR)
Ξ“: neg_ctx
A0, B: pre_ty pos
w: whn Ξ“ `+ A0
w0: whn Ξ“ `+ B
decidable (is_var (TenR w w0))
Ξ“: neg_ctx
A4, B3: pre_ty pos
w3: whn Ξ“ `+ A4
decidable (is_var (OrR1 w3))
Ξ“: neg_ctx
A5, B4: pre_ty pos
w4: whn Ξ“ `+ B4
decidable (is_var (OrR2 w4))
Ξ“: neg_ctx
A10: pre_ty neg
t: term Ξ“ `+ A10
decidable (is_var (ShiftPR t))
Ξ“: neg_ctx
A14: pre_ty neg
w7: whn Ξ“ `- A14
decidable (is_var (NegPR w7))
Ξ“: neg_ctx
p: pre_ty neg
s: state (Ξ“ β–Άβ‚“ (`+ p) †)
decidable (is_var (Mu s))
Ξ“: neg_ctx
A1: pre_ty neg
t0: term (Ξ“ β–Άβ‚“ `+ A1) `+ A1
decidable (is_var (RecR t0))
Ξ“: neg_ctx
decidable (is_var (Whn TopR))
Ξ“: neg_ctx
s0: state Ξ“
decidable (is_var (Whn (BotR s0)))
Ξ“: neg_ctx
A2, B1: pre_ty neg
s2: state (Ξ“ β–Άβ‚“ `- A2 β–Άβ‚“ `- B1)
decidable (is_var (Whn (ParR s2)))
Ξ“: neg_ctx
A7, B6: pre_ty neg
s5: state (Ξ“ β–Άβ‚“ `- A7)
s6: state (Ξ“ β–Άβ‚“ `- B6)
decidable (is_var (Whn (AndR s5 s6)))
Ξ“: neg_ctx
A12: pre_ty pos
s8: state (Ξ“ β–Άβ‚“ `- A12)
decidable (is_var (Whn (ShiftNR s8)))
Ξ“: neg_ctx
A16: pre_ty pos
s10: state (Ξ“ β–Άβ‚“ `+ A16)
decidable (is_var (Whn (NegNR s10)))
Ξ“: neg_ctx
decidable (is_var (Whn ZerL))
Ξ“: neg_ctx
s: state Ξ“
decidable (is_var (Whn (OneL s)))
Ξ“: neg_ctx
A1, B0: pre_ty pos
s1: state (Ξ“ β–Άβ‚“ `+ A1 β–Άβ‚“ `+ B0)
decidable (is_var (Whn (TenL s1)))
Ξ“: neg_ctx
A6, B5: pre_ty pos
s3: state (Ξ“ β–Άβ‚“ `+ A6)
s4: state (Ξ“ β–Άβ‚“ `+ B5)
decidable (is_var (Whn (OrL s3 s4)))
Ξ“: neg_ctx
A11: pre_ty neg
s7: state (Ξ“ β–Άβ‚“ `+ A11)
decidable (is_var (Whn (ShiftPL s7)))
Ξ“: neg_ctx
A15: pre_ty neg
s9: state (Ξ“ β–Άβ‚“ `- A15)
decidable (is_var (Whn (NegPL s9)))
Ξ“: neg_ctx
p: pre_ty pos
s: state (Ξ“ β–Άβ‚“ (`- p) †)
decidable (is_var (Mu s))
Ξ“: neg_ctx
A0: pre_ty pos
t: term (Ξ“ β–Άβ‚“ `- A0) `- A0
decidable (is_var (RecL t))
Ξ“: neg_ctx
decidable (is_var BotL)
Ξ“: neg_ctx
A3, B2: pre_ty neg
w1: whn Ξ“ `- A3
w2: whn Ξ“ `- B2
decidable (is_var (ParL w1 w2))
Ξ“: neg_ctx
A8, B7: pre_ty neg
w5: whn Ξ“ `- A8
decidable (is_var (AndL1 w5))
Ξ“: neg_ctx
A9, B8: pre_ty neg
w6: whn Ξ“ `- B8
decidable (is_var (AndL2 w6))
Ξ“: neg_ctx
A13: pre_ty pos
t0: term Ξ“ `- A13
decidable (is_var (ShiftNL t0))
Ξ“: neg_ctx
A17: pre_ty pos
w8: whn Ξ“ `+ A17
decidable (is_var (NegNL w8))
all: apply No; intro H; dependent destruction H.

forall (Ξ“1 Ξ“2 : neg_ctx) (x : ty) (v : val Ξ“1 x) (r : Ξ“1 βŠ† Ξ“2), is_var (v_ren v r) -> is_var v
Ξ“2, Ξ“1: neg_ctx
p: pre_ty pos
c: Ξ“1 βˆ‹ `+ p
r: Ξ“1 βŠ† Ξ“2
X: is_var (v_ren (Var c) r)

is_var (Var c)
Ξ“2, Ξ“1: neg_ctx
r: Ξ“1 βŠ† Ξ“2
X: is_var (v_ren OneR r)
is_var OneR
Ξ“2, Ξ“1: neg_ctx
A, B: pre_ty pos
v1: whn Ξ“1 `+ A
v2: whn Ξ“1 `+ B
IHv1: forall (Ξ“3 : neg_ctx) (p : pre_ty pos) (v0 : whn Ξ“3 `+ p), Ξ“1 ~= Ξ“3 -> `+ A = `+ p -> v1 ~= v0 -> forall r : Ξ“3 βŠ† Ξ“2, is_var (v_ren v0 r) -> is_var v0
IHv2: forall (Ξ“3 : neg_ctx) (p : pre_ty pos) (v0 : whn Ξ“3 `+ p), Ξ“1 ~= Ξ“3 -> `+ B = `+ p -> v2 ~= v0 -> forall r : Ξ“3 βŠ† Ξ“2, is_var (v_ren v0 r) -> is_var v0
r: Ξ“1 βŠ† Ξ“2
X: is_var (v_ren (TenR v1 v2) r)
is_var (TenR v1 v2)
Ξ“2, Ξ“1: neg_ctx
A, B: pre_ty pos
v: whn Ξ“1 `+ A
IHv: forall (Ξ“3 : neg_ctx) (p : pre_ty pos) (v0 : whn Ξ“3 `+ p), Ξ“1 ~= Ξ“3 -> `+ A = `+ p -> v ~= v0 -> forall r : Ξ“3 βŠ† Ξ“2, is_var (v_ren v0 r) -> is_var v0
r: Ξ“1 βŠ† Ξ“2
X: is_var (v_ren (OrR1 v) r)
is_var (OrR1 v)
Ξ“2, Ξ“1: neg_ctx
A, B: pre_ty pos
v: whn Ξ“1 `+ B
IHv: forall (Ξ“3 : neg_ctx) (p : pre_ty pos) (v0 : whn Ξ“3 `+ p), Ξ“1 ~= Ξ“3 -> `+ B = `+ p -> v ~= v0 -> forall r : Ξ“3 βŠ† Ξ“2, is_var (v_ren v0 r) -> is_var v0
r: Ξ“1 βŠ† Ξ“2
X: is_var (v_ren (OrR2 v) r)
is_var (OrR2 v)
Ξ“2, Ξ“1: neg_ctx
A: pre_ty neg
t: term Ξ“1 `+ A
r: Ξ“1 βŠ† Ξ“2
X: is_var (v_ren (ShiftPR t) r)
is_var (ShiftPR t)
Ξ“2, Ξ“1: neg_ctx
A: pre_ty neg
v: whn Ξ“1 `- A
IHv: forall (Ξ“3 : neg_ctx) (p : pre_ty pos) (v0 : whn Ξ“3 `+ p), Ξ“1 ~= Ξ“3 -> `- A = `+ p -> v ~= v0 -> forall r : Ξ“3 βŠ† Ξ“2, is_var (v_ren v0 r) -> is_var v0
r: Ξ“1 βŠ† Ξ“2
X: is_var (v_ren (NegPR v) r)
is_var (NegPR v)
Ξ“2, Ξ“1: neg_ctx
p: pre_ty neg
s: state (Ξ“1 β–Άβ‚“ (`+ p) †)
r: Ξ“1 βŠ† Ξ“2
X: is_var (v_ren (Mu s) r)
is_var (Mu s)
Ξ“2, Ξ“1: neg_ctx
p: pre_ty neg
v: term (Ξ“1 β–Άβ‚“ `+ p) `+ p
IHv: forall (Ξ“3 : neg_ctx) (p0 : pre_ty neg) (v0 : term Ξ“3 `+ p0), Ξ“1 β–Άβ‚“ `+ p ~= Ξ“3 -> `+ p = `+ p0 -> v ~= v0 -> forall r : Ξ“3 βŠ† Ξ“2, is_var (v_ren v0 r) -> is_var v0
r: Ξ“1 βŠ† Ξ“2
X: is_var (v_ren (RecR v) r)
is_var (RecR v)
Ξ“2, Ξ“1: neg_ctx
p: pre_ty neg
w: whn Ξ“1 `+ p
r: Ξ“1 βŠ† Ξ“2
X: is_var (v_ren (Whn w) r)
is_var (Whn w)
Ξ“2, Ξ“1: neg_ctx
p: pre_ty pos
s: state (Ξ“1 β–Άβ‚“ (`- p) †)
r: Ξ“1 βŠ† Ξ“2
X: is_var (v_ren (Mu s) r)
is_var (Mu s)
Ξ“2, Ξ“1: neg_ctx
p: pre_ty pos
v: term (Ξ“1 β–Άβ‚“ `- p) `- p
IHv: forall (Ξ“3 : neg_ctx) (p0 : pre_ty pos) (v0 : term Ξ“3 `- p0), Ξ“1 β–Άβ‚“ `- p ~= Ξ“3 -> `- p = `- p0 -> v ~= v0 -> forall r : Ξ“3 βŠ† Ξ“2, is_var (v_ren v0 r) -> is_var v0
r: Ξ“1 βŠ† Ξ“2
X: is_var (v_ren (RecL v) r)
is_var (RecL v)
Ξ“2, Ξ“1: neg_ctx
p: pre_ty pos
w: whn Ξ“1 `- p
r: Ξ“1 βŠ† Ξ“2
X: is_var (v_ren (Whn w) r)
is_var (Whn w)
Ξ“2, Ξ“1: neg_ctx
p: pre_ty neg
c: Ξ“1 βˆ‹ `- p
r: Ξ“1 βŠ† Ξ“2
X: is_var (v_ren (Var c) r)
is_var (Var c)
Ξ“2, Ξ“1: neg_ctx
r: Ξ“1 βŠ† Ξ“2
X: is_var (v_ren BotL r)
is_var BotL
Ξ“2, Ξ“1: neg_ctx
A, B: pre_ty neg
v1: whn Ξ“1 `- A
v2: whn Ξ“1 `- B
IHv1: forall (Ξ“3 : neg_ctx) (p : pre_ty neg) (v0 : whn Ξ“3 `- p), Ξ“1 ~= Ξ“3 -> `- A = `- p -> v1 ~= v0 -> forall r : Ξ“3 βŠ† Ξ“2, is_var (v_ren v0 r) -> is_var v0
IHv2: forall (Ξ“3 : neg_ctx) (p : pre_ty neg) (v0 : whn Ξ“3 `- p), Ξ“1 ~= Ξ“3 -> `- B = `- p -> v2 ~= v0 -> forall r : Ξ“3 βŠ† Ξ“2, is_var (v_ren v0 r) -> is_var v0
r: Ξ“1 βŠ† Ξ“2
X: is_var (v_ren (ParL v1 v2) r)
is_var (ParL v1 v2)
Ξ“2, Ξ“1: neg_ctx
A, B: pre_ty neg
v: whn Ξ“1 `- A
IHv: forall (Ξ“3 : neg_ctx) (p : pre_ty neg) (v0 : whn Ξ“3 `- p), Ξ“1 ~= Ξ“3 -> `- A = `- p -> v ~= v0 -> forall r : Ξ“3 βŠ† Ξ“2, is_var (v_ren v0 r) -> is_var v0
r: Ξ“1 βŠ† Ξ“2
X: is_var (v_ren (AndL1 v) r)
is_var (AndL1 v)
Ξ“2, Ξ“1: neg_ctx
A, B: pre_ty neg
v: whn Ξ“1 `- B
IHv: forall (Ξ“3 : neg_ctx) (p : pre_ty neg) (v0 : whn Ξ“3 `- p), Ξ“1 ~= Ξ“3 -> `- B = `- p -> v ~= v0 -> forall r : Ξ“3 βŠ† Ξ“2, is_var (v_ren v0 r) -> is_var v0
r: Ξ“1 βŠ† Ξ“2
X: is_var (v_ren (AndL2 v) r)
is_var (AndL2 v)
Ξ“2, Ξ“1: neg_ctx
A: pre_ty pos
t: term Ξ“1 `- A
r: Ξ“1 βŠ† Ξ“2
X: is_var (v_ren (ShiftNL t) r)
is_var (ShiftNL t)
Ξ“2, Ξ“1: neg_ctx
A: pre_ty pos
v: whn Ξ“1 `+ A
IHv: forall (Ξ“3 : neg_ctx) (p : pre_ty neg) (v0 : whn Ξ“3 `- p), Ξ“1 ~= Ξ“3 -> `+ A = `- p -> v ~= v0 -> forall r : Ξ“3 βŠ† Ξ“2, is_var (v_ren v0 r) -> is_var v0
r: Ξ“1 βŠ† Ξ“2
X: is_var (v_ren (NegNL v) r)
is_var (NegNL v)
Ξ“2, Ξ“1: neg_ctx
p: pre_ty neg
w: whn Ξ“1 `+ p
r: Ξ“1 βŠ† Ξ“2
X: is_var (v_ren (Whn w) r)

is_var (Whn w)
Ξ“2, Ξ“1: neg_ctx
p: pre_ty pos
w: whn Ξ“1 `- p
r: Ξ“1 βŠ† Ξ“2
X: is_var (v_ren (Whn w) r)
is_var (Whn w)
all: dependent induction w; dependent destruction X; exact (Vvar _). Qed.

And we conclude the easy part by instanciating the relevant part of the language machine.

#[global] Instance sysd_machine : machine val_n state_n obs_op :=
  {| Machine.eval := @eval ; oapp := @p_app |} .

It now suffices to prove the remaining assumptions on the language machine: that evaluation respects substitution and that the 'bad-instanciation' relation has finite chains. For this we pull in some tooling for coinductive reasoning.

From Coinduction Require Import coinduction lattice rel tactics.

Ltac refold_eval :=
  change (Structure.iter _ _ ?a) with (eval a);
  change (Structure.subst (fun pat : T1 => let 'T1_0 := pat in ?f) T1_0 ?u)
    with (bind_delay' u f).

Let's go.


machine_laws val_n state_n obs_op

First we have easy lemmata on observation application.

  

forall (Ξ“ : neg_ctx) (x : ty) (v : val Ξ“ x) (o : obs_op x), Proper (asgn_eq (dom o) Ξ“ ==> eq) (oapp v o)

forall (Ξ“1 Ξ“2 : neg_ctx) (x : ty) (v : val Ξ“1 x) (o : obs_op x) (a : dom o =[ val_n ]> Ξ“1) (b : Ξ“1 =[ val_n ]> Ξ“2), v βŠ™ o β¦— a ⦘ β‚œβŠ› b = (v α΅₯βŠ› b) βŠ™ o β¦— a βŠ› b ⦘

forall (Ξ“ Ξ” : neg_ctx) (c : state Ξ“) (a : Ξ“ =[ val_n ]> Ξ”), Machine.eval (c β‚œβŠ› a) ≋ bind_delay' (Machine.eval c) (fun n : Obs.nf obs_op val_n Ξ“ => Machine.eval (emb n β‚œβŠ› a))

forall (Ξ“ : neg_ctx) (u : Obs.nf obs_op val_n Ξ“), Machine.eval (emb u) ≋ ret_delay u

well_founded head_inst_nostep

forall (Ξ“ : neg_ctx) (x : ty) (v : val Ξ“ x) (o : obs_op x), Proper (asgn_eq (dom o) Ξ“ ==> eq) (oapp v o)
intros; apply p_app_eq.

forall (Ξ“1 Ξ“2 : neg_ctx) (x : ty) (v : val Ξ“1 x) (o : obs_op x) (a : dom o =[ val_n ]> Ξ“1) (b : Ξ“1 =[ val_n ]> Ξ“2), v βŠ™ o β¦— a ⦘ β‚œβŠ› b = (v α΅₯βŠ› b) βŠ™ o β¦— a βŠ› b ⦘
Ξ“1, Ξ“2: neg_ctx
p: pre_ty pos
v: val Ξ“1 `+ p
o: obs_op `+ p
a: dom o =[ val_n ]> Ξ“1
b: Ξ“1 =[ val_n ]> Ξ“2

Cut pos (Whn (v `α΅₯βŠ› b)) ((o `α΅₯βŠ› a) `β‚œβŠ› b) = Cut pos (Whn (v `α΅₯βŠ› b)) (o `α΅₯βŠ› a βŠ› b)
Ξ“1, Ξ“2: neg_ctx
p: pre_ty neg
v: val Ξ“1 `+ p
o: obs_op `+ p
a: dom o =[ val_n ]> Ξ“1
b: Ξ“1 =[ val_n ]> Ξ“2
Cut neg (v `β‚œβŠ› b) (Whn ((o `α΅₯βŠ› a) `α΅₯βŠ› b)) = Cut neg (v `β‚œβŠ› b) (Whn (o `α΅₯βŠ› a βŠ› b))
Ξ“1, Ξ“2: neg_ctx
p: pre_ty pos
v: val Ξ“1 `- p
o: obs_op `- p
a: dom o =[ val_n ]> Ξ“1
b: Ξ“1 =[ val_n ]> Ξ“2
Cut pos (Whn ((o `α΅₯βŠ› a) `α΅₯βŠ› b)) (v `β‚œβŠ› b) = Cut pos (Whn (o `α΅₯βŠ› a βŠ› b)) (v `β‚œβŠ› b)
Ξ“1, Ξ“2: neg_ctx
p: pre_ty neg
v: val Ξ“1 `- p
o: obs_op `- p
a: dom o =[ val_n ]> Ξ“1
b: Ξ“1 =[ val_n ]> Ξ“2
Cut neg ((o `α΅₯βŠ› a) `β‚œβŠ› b) (Whn (v `α΅₯βŠ› b)) = Cut neg (o `α΅₯βŠ› a βŠ› b) (Whn (v `α΅₯βŠ› b))
Ξ“1, Ξ“2: neg_ctx
p: pre_ty neg
v: val Ξ“1 `+ p
o: obs_op `+ p
a: dom o =[ val_n ]> Ξ“1
b: Ξ“1 =[ val_n ]> Ξ“2

Cut neg (v `β‚œβŠ› b) (Whn ((o `α΅₯βŠ› a) `α΅₯βŠ› b)) = Cut neg (v `β‚œβŠ› b) (Whn (o `α΅₯βŠ› a βŠ› b))
Ξ“1, Ξ“2: neg_ctx
p: pre_ty pos
v: val Ξ“1 `- p
o: obs_op `- p
a: dom o =[ val_n ]> Ξ“1
b: Ξ“1 =[ val_n ]> Ξ“2
Cut pos (Whn ((o `α΅₯βŠ› a) `α΅₯βŠ› b)) (v `β‚œβŠ› b) = Cut pos (Whn (o `α΅₯βŠ› a βŠ› b)) (v `β‚œβŠ› b)
all: change (?a `α΅₯βŠ› ?b) with (a α΅₯βŠ› b) at 1; now rewrite (w_sub_sub _ _ _ _).

Next we prove the core argument of OGS soundness: evaluating a substitution is like evaluating the configuration, substituting the result and evaluating again. While tedious the proof is basically direct, going by induction on the structure of one-step evaluation.

  

forall (Ξ“ Ξ” : neg_ctx) (c : state Ξ“) (a : Ξ“ =[ val_n ]> Ξ”), Machine.eval (c β‚œβŠ› a) ≋ bind_delay' (Machine.eval c) (fun n : Obs.nf obs_op val_n Ξ“ => Machine.eval (emb n β‚œβŠ› a))
Ξ“, Ξ”: neg_ctx
R: relα΅’ (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”)) (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”))
CIH: forall (c : state Ξ“) (a : Ξ“ =[ val_n ]> Ξ”), it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R T1_0 (eval (s_subst Ξ“ c Ξ” a)) (bind_delay' (eval c) (fun n : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var n)) (nf_obs n) (nf_args n)) Ξ” a)))
c: state Ξ“
a: Ξ“ =[ val_n ]> Ξ”

it_eq_bt βˆ…β‚‘ (fun _ : T1 => nf_eq) R T1_0 (eval (s_subst Ξ“ c Ξ” a)) (bind_delay' (eval c) (fun n : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var n)) (nf_obs n) (nf_args n)) Ξ” a)))
Ξ“: neg_ctx
A: pre_ty pos
c: state (Ξ“ β–Άβ‚“ (`+ A) †)
x: term Ξ“ `- A
Ξ”: neg_ctx
R: relα΅’ (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”)) (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”))
CIH: forall (c : state Ξ“) (a : Ξ“ =[ val_n ]> Ξ”), it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R T1_0 (eval (s_subst Ξ“ c Ξ” a)) (bind_delay' (eval c) (fun n : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var n)) (nf_obs n) (nf_args n)) Ξ” a)))
a: Ξ“ =[ val_n ]> Ξ”

it_eqF βˆ…β‚‘ (fun _ : T1 => nf_eq) (it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R) T1_0 match eval_aux (s_subst Ξ“ (Cut pos (Mu c) x) Ξ” a) with | inl x => TauF (iter (fun pat : T1 => let 'T1_0 as x0 := pat return (state Ξ” -> itree βˆ…β‚‘ ((fun _ : T1 => state Ξ”) +α΅’ (fun _ : T1 => nf Ξ”)) x0) in fun c : state Ξ” => Ret' (eval_aux c)) T1_0 x) | inr y => RetF y end match match eval_aux (Cut pos (Mu c) x) with | inl x => TauF (iter (fun pat : T1 => let 'T1_0 as x0 := pat return (state Ξ“ -> itree βˆ…β‚‘ ((fun _ : T1 => state Ξ“) +α΅’ (fun _ : T1 => nf Ξ“)) x0) in fun c : state Ξ“ => Ret' (eval_aux c)) T1_0 x) | inr y => RetF y end with | RetF r => match eval_aux (s_subst Ξ“ (p_app (var (nf_var r)) (nf_obs r) (nf_args r)) Ξ” a) with | inl x => TauF (iter (fun pat : T1 => let 'T1_0 as x0 := pat return (state Ξ” -> itree βˆ…β‚‘ ((fun _ : T1 => state Ξ”) +α΅’ (fun _ : T1 => nf Ξ”)) x0) in fun c : state Ξ” => Ret' (eval_aux c)) T1_0 x) | inr y => RetF y end | TauF t => TauF ((fun pat : T1 => let 'T1_0 as x := pat return (Obs.nf obs_op val_n Ξ“ -> itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”) x) in fun y : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var y)) (nf_obs y) (nf_args y)) Ξ” a)) =<< t) | VisF e k => VisF e (fun r : ex_falso e => (fun pat : T1 => let 'T1_0 as x := pat return (Obs.nf obs_op val_n Ξ“ -> itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”) x) in fun y : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var y)) (nf_obs y) (nf_args y)) Ξ” a)) =<< k r) end
Ξ“: neg_ctx
A: pre_ty pos
v: whn Ξ“ `+ A
c: state (Ξ“ β–Άβ‚“ (`- A) †)
Ξ”: neg_ctx
R: relα΅’ (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”)) (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”))
CIH: forall (c : state Ξ“) (a : Ξ“ =[ val_n ]> Ξ”), it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R T1_0 (eval (s_subst Ξ“ c Ξ” a)) (bind_delay' (eval c) (fun n : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var n)) (nf_obs n) (nf_args n)) Ξ” a)))
a: Ξ“ =[ val_n ]> Ξ”
it_eqF βˆ…β‚‘ (fun _ : T1 => nf_eq) (it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R) T1_0 match eval_aux (s_subst Ξ“ (Cut pos (Whn v) (Mu c)) Ξ” a) with | inl x => TauF (iter (fun pat : T1 => let 'T1_0 as x0 := pat return (state Ξ” -> itree βˆ…β‚‘ ((fun _ : T1 => state Ξ”) +α΅’ (fun _ : T1 => nf Ξ”)) x0) in fun c : state Ξ” => Ret' (eval_aux c)) T1_0 x) | inr y => RetF y end match match eval_aux (Cut pos (Whn v) (Mu c)) with | inl x => TauF (iter (fun pat : T1 => let 'T1_0 as x0 := pat return (state Ξ“ -> itree βˆ…β‚‘ ((fun _ : T1 => state Ξ“) +α΅’ (fun _ : T1 => nf Ξ“)) x0) in fun c : state Ξ“ => Ret' (eval_aux c)) T1_0 x) | inr y => RetF y end with | RetF r => match eval_aux (s_subst Ξ“ (p_app (var (nf_var r)) (nf_obs r) (nf_args r)) Ξ” a) with | inl x => TauF (iter (fun pat : T1 => let 'T1_0 as x0 := pat return (state Ξ” -> itree βˆ…β‚‘ ((fun _ : T1 => state Ξ”) +α΅’ (fun _ : T1 => nf Ξ”)) x0) in fun c : state Ξ” => Ret' (eval_aux c)) T1_0 x) | inr y => RetF y end | TauF t => TauF ((fun pat : T1 => let 'T1_0 as x := pat return (Obs.nf obs_op val_n Ξ“ -> itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”) x) in fun y : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var y)) (nf_obs y) (nf_args y)) Ξ” a)) =<< t) | VisF e k => VisF e (fun r : ex_falso e => (fun pat : T1 => let 'T1_0 as x := pat return (Obs.nf obs_op val_n Ξ“ -> itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”) x) in fun y : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var y)) (nf_obs y) (nf_args y)) Ξ” a)) =<< k r) end
Ξ“: neg_ctx
A1: pre_ty pos
v: whn Ξ“ `+ A1
k: term (Ξ“ β–Άβ‚“ `- A1) `- A1
Ξ”: neg_ctx
R: relα΅’ (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”)) (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”))
CIH: forall (c : state Ξ“) (a : Ξ“ =[ val_n ]> Ξ”), it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R T1_0 (eval (s_subst Ξ“ c Ξ” a)) (bind_delay' (eval c) (fun n : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var n)) (nf_obs n) (nf_args n)) Ξ” a)))
a: Ξ“ =[ val_n ]> Ξ”
it_eqF βˆ…β‚‘ (fun _ : T1 => nf_eq) (it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R) T1_0 match eval_aux (s_subst Ξ“ (Cut pos (Whn v) (RecL k)) Ξ” a) with | inl x => TauF (iter (fun pat : T1 => let 'T1_0 as x0 := pat return (state Ξ” -> itree βˆ…β‚‘ ((fun _ : T1 => state Ξ”) +α΅’ (fun _ : T1 => nf Ξ”)) x0) in fun c : state Ξ” => Ret' (eval_aux c)) T1_0 x) | inr y => RetF y end match match eval_aux (Cut pos (Whn v) (RecL k)) with | inl x => TauF (iter (fun pat : T1 => let 'T1_0 as x0 := pat return (state Ξ“ -> itree βˆ…β‚‘ ((fun _ : T1 => state Ξ“) +α΅’ (fun _ : T1 => nf Ξ“)) x0) in fun c : state Ξ“ => Ret' (eval_aux c)) T1_0 x) | inr y => RetF y end with | RetF r => match eval_aux (s_subst Ξ“ (p_app (var (nf_var r)) (nf_obs r) (nf_args r)) Ξ” a) with | inl x => TauF (iter (fun pat : T1 => let 'T1_0 as x0 := pat return (state Ξ” -> itree βˆ…β‚‘ ((fun _ : T1 => state Ξ”) +α΅’ (fun _ : T1 => nf Ξ”)) x0) in fun c : state Ξ” => Ret' (eval_aux c)) T1_0 x) | inr y => RetF y end | TauF t => TauF ((fun pat : T1 => let 'T1_0 as x := pat return (Obs.nf obs_op val_n Ξ“ -> itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”) x) in fun y : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var y)) (nf_obs y) (nf_args y)) Ξ” a)) =<< t) | VisF e k => VisF e (fun r : ex_falso e => (fun pat : T1 => let 'T1_0 as x := pat return (Obs.nf obs_op val_n Ξ“ -> itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”) x) in fun y : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var y)) (nf_obs y) (nf_args y)) Ξ” a)) =<< k r) end
Ξ“: neg_ctx
A: pre_ty pos
v: whn Ξ“ `+ A
i: Ξ“ βˆ‹ `- A
Ξ”: neg_ctx
R: relα΅’ (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”)) (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”))
CIH: forall (c : state Ξ“) (a : Ξ“ =[ val_n ]> Ξ”), it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R T1_0 (eval (s_subst Ξ“ c Ξ” a)) (bind_delay' (eval c) (fun n : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var n)) (nf_obs n) (nf_args n)) Ξ” a)))
a: Ξ“ =[ val_n ]> Ξ”
it_eqF βˆ…β‚‘ (fun _ : T1 => nf_eq) (it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R) T1_0 match eval_aux (s_subst Ξ“ (Cut pos (Whn v) (Whn (Var i))) Ξ” a) with | inl x => TauF (iter (fun pat : T1 => let 'T1_0 as x0 := pat return (state Ξ” -> itree βˆ…β‚‘ ((fun _ : T1 => state Ξ”) +α΅’ (fun _ : T1 => nf Ξ”)) x0) in fun c : state Ξ” => Ret' (eval_aux c)) T1_0 x) | inr y => RetF y end match match eval_aux (Cut pos (Whn v) (Whn (Var i))) with | inl x => TauF (iter (fun pat : T1 => let 'T1_0 as x0 := pat return (state Ξ“ -> itree βˆ…β‚‘ ((fun _ : T1 => state Ξ“) +α΅’ (fun _ : T1 => nf Ξ“)) x0) in fun c : state Ξ“ => Ret' (eval_aux c)) T1_0 x) | inr y => RetF y end with | RetF r => match eval_aux (s_subst Ξ“ (p_app (var (nf_var r)) (nf_obs r) (nf_args r)) Ξ” a) with | inl x => TauF (iter (fun pat : T1 => let 'T1_0 as x0 := pat return (state Ξ” -> itree βˆ…β‚‘ ((fun _ : T1 => state Ξ”) +α΅’ (fun _ : T1 => nf Ξ”)) x0) in fun c : state Ξ” => Ret' (eval_aux c)) T1_0 x) | inr y => RetF y end | TauF t => TauF ((fun pat : T1 => let 'T1_0 as x := pat return (Obs.nf obs_op val_n Ξ“ -> itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”) x) in fun y : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var y)) (nf_obs y) (nf_args y)) Ξ” a)) =<< t) | VisF e k => VisF e (fun r : ex_falso e => (fun pat : T1 => let 'T1_0 as x := pat return (Obs.nf obs_op val_n Ξ“ -> itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”) x) in fun y : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var y)) (nf_obs y) (nf_args y)) Ξ” a)) =<< k r) end
Ξ“: neg_ctx
c: state Ξ“
Ξ”: neg_ctx
R: relα΅’ (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”)) (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”))
CIH: forall (c : state Ξ“) (a : Ξ“ =[ val_n ]> Ξ”), it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R T1_0 (eval (s_subst Ξ“ c Ξ” a)) (bind_delay' (eval c) (fun n : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var n)) (nf_obs n) (nf_args n)) Ξ” a)))
a: Ξ“ =[ val_n ]> Ξ”
it_eqF βˆ…β‚‘ (fun _ : T1 => nf_eq) (it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R) T1_0 match eval_aux (s_subst Ξ“ (Cut pos (Whn OneR) (Whn (OneL c))) Ξ” a) with | inl x => TauF (iter (fun pat : T1 => let 'T1_0 as x0 := pat return (state Ξ” -> itree βˆ…β‚‘ ((fun _ : T1 => state Ξ”) +α΅’ (fun _ : T1 => nf Ξ”)) x0) in fun c : state Ξ” => Ret' (eval_aux c)) T1_0 x) | inr y => RetF y end match match eval_aux (Cut pos (Whn OneR) (Whn (OneL c))) with | inl x => TauF (iter (fun pat : T1 => let 'T1_0 as x0 := pat return (state Ξ“ -> itree βˆ…β‚‘ ((fun _ : T1 => state Ξ“) +α΅’ (fun _ : T1 => nf Ξ“)) x0) in fun c : state Ξ“ => Ret' (eval_aux c)) T1_0 x) | inr y => RetF y end with | RetF r => match eval_aux (s_subst Ξ“ (p_app (var (nf_var r)) (nf_obs r) (nf_args r)) Ξ” a) with | inl x => TauF (iter (fun pat : T1 => let 'T1_0 as x0 := pat return (state Ξ” -> itree βˆ…β‚‘ ((fun _ : T1 => state Ξ”) +α΅’ (fun _ : T1 => nf Ξ”)) x0) in fun c : state Ξ” => Ret' (eval_aux c)) T1_0 x) | inr y => RetF y end | TauF t => TauF ((fun pat : T1 => let 'T1_0 as x := pat return (Obs.nf obs_op val_n Ξ“ -> itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”) x) in fun y : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var y)) (nf_obs y) (nf_args y)) Ξ” a)) =<< t) | VisF e k => VisF e (fun r : ex_falso e => (fun pat : T1 => let 'T1_0 as x := pat return (Obs.nf obs_op val_n Ξ“ -> itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”) x) in fun y : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var y)) (nf_obs y) (nf_args y)) Ξ” a)) =<< k r) end
Ξ“: neg_ctx
A0, B: pre_ty pos
v1: whn Ξ“ `+ A0
v2: whn Ξ“ `+ B
c: state (Ξ“ β–Άβ‚“ `+ A0 β–Άβ‚“ `+ B)
Ξ”: neg_ctx
R: relα΅’ (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”)) (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”))
CIH: forall (c : state Ξ“) (a : Ξ“ =[ val_n ]> Ξ”), it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R T1_0 (eval (s_subst Ξ“ c Ξ” a)) (bind_delay' (eval c) (fun n : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var n)) (nf_obs n) (nf_args n)) Ξ” a)))
a: Ξ“ =[ val_n ]> Ξ”
it_eqF βˆ…β‚‘ (fun _ : T1 => nf_eq) (it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R) T1_0 match eval_aux (s_subst Ξ“ (Cut pos (Whn (TenR v1 v2)) (Whn (TenL c))) Ξ” a) with | inl x => TauF (iter (fun pat : T1 => let 'T1_0 as x0 := pat return (state Ξ” -> itree βˆ…β‚‘ ((fun _ : T1 => state Ξ”) +α΅’ (fun _ : T1 => nf Ξ”)) x0) in fun c : state Ξ” => Ret' (eval_aux c)) T1_0 x) | inr y => RetF y end match match eval_aux (Cut pos (Whn (TenR v1 v2)) (Whn (TenL c))) with | inl x => TauF (iter (fun pat : T1 => let 'T1_0 as x0 := pat return (state Ξ“ -> itree βˆ…β‚‘ ((fun _ : T1 => state Ξ“) +α΅’ (fun _ : T1 => nf Ξ“)) x0) in fun c : state Ξ“ => Ret' (eval_aux c)) T1_0 x) | inr y => RetF y end with | RetF r => match eval_aux (s_subst Ξ“ (p_app (var (nf_var r)) (nf_obs r) (nf_args r)) Ξ” a) with | inl x => TauF (iter (fun pat : T1 => let 'T1_0 as x0 := pat return (state Ξ” -> itree βˆ…β‚‘ ((fun _ : T1 => state Ξ”) +α΅’ (fun _ : T1 => nf Ξ”)) x0) in fun c : state Ξ” => Ret' (eval_aux c)) T1_0 x) | inr y => RetF y end | TauF t => TauF ((fun pat : T1 => let 'T1_0 as x := pat return (Obs.nf obs_op val_n Ξ“ -> itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”) x) in fun y : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var y)) (nf_obs y) (nf_args y)) Ξ” a)) =<< t) | VisF e k => VisF e (fun r : ex_falso e => (fun pat : T1 => let 'T1_0 as x := pat return (Obs.nf obs_op val_n Ξ“ -> itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”) x) in fun y : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var y)) (nf_obs y) (nf_args y)) Ξ” a)) =<< k r) end
Ξ“: neg_ctx
A4, B3: pre_ty pos
v: whn Ξ“ `+ A4
c1: state (Ξ“ β–Άβ‚“ `+ A4)
c2: state (Ξ“ β–Άβ‚“ `+ B3)
Ξ”: neg_ctx
R: relα΅’ (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”)) (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”))
CIH: forall (c : state Ξ“) (a : Ξ“ =[ val_n ]> Ξ”), it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R T1_0 (eval (s_subst Ξ“ c Ξ” a)) (bind_delay' (eval c) (fun n : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var n)) (nf_obs n) (nf_args n)) Ξ” a)))
a: Ξ“ =[ val_n ]> Ξ”
it_eqF βˆ…β‚‘ (fun _ : T1 => nf_eq) (it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R) T1_0 match eval_aux (s_subst Ξ“ (Cut pos (Whn (OrR1 v)) (Whn (OrL c1 c2))) Ξ” a) with | inl x => TauF (iter (fun pat : T1 => let 'T1_0 as x0 := pat return (state Ξ” -> itree βˆ…β‚‘ ((fun _ : T1 => state Ξ”) +α΅’ (fun _ : T1 => nf Ξ”)) x0) in fun c : state Ξ” => Ret' (eval_aux c)) T1_0 x) | inr y => RetF y end match match eval_aux (Cut pos (Whn (OrR1 v)) (Whn (OrL c1 c2))) with | inl x => TauF (iter (fun pat : T1 => let 'T1_0 as x0 := pat return (state Ξ“ -> itree βˆ…β‚‘ ((fun _ : T1 => state Ξ“) +α΅’ (fun _ : T1 => nf Ξ“)) x0) in fun c : state Ξ“ => Ret' (eval_aux c)) T1_0 x) | inr y => RetF y end with | RetF r => match eval_aux (s_subst Ξ“ (p_app (var (nf_var r)) (nf_obs r) (nf_args r)) Ξ” a) with | inl x => TauF (iter (fun pat : T1 => let 'T1_0 as x0 := pat return (state Ξ” -> itree βˆ…β‚‘ ((fun _ : T1 => state Ξ”) +α΅’ (fun _ : T1 => nf Ξ”)) x0) in fun c : state Ξ” => Ret' (eval_aux c)) T1_0 x) | inr y => RetF y end | TauF t => TauF ((fun pat : T1 => let 'T1_0 as x := pat return (Obs.nf obs_op val_n Ξ“ -> itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”) x) in fun y : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var y)) (nf_obs y) (nf_args y)) Ξ” a)) =<< t) | VisF e k => VisF e (fun r : ex_falso e => (fun pat : T1 => let 'T1_0 as x := pat return (Obs.nf obs_op val_n Ξ“ -> itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”) x) in fun y : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var y)) (nf_obs y) (nf_args y)) Ξ” a)) =<< k r) end
Ξ“: neg_ctx
A5, B4: pre_ty pos
v: whn Ξ“ `+ B4
c1: state (Ξ“ β–Άβ‚“ `+ A5)
c2: state (Ξ“ β–Άβ‚“ `+ B4)
Ξ”: neg_ctx
R: relα΅’ (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”)) (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”))
CIH: forall (c : state Ξ“) (a : Ξ“ =[ val_n ]> Ξ”), it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R T1_0 (eval (s_subst Ξ“ c Ξ” a)) (bind_delay' (eval c) (fun n : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var n)) (nf_obs n) (nf_args n)) Ξ” a)))
a: Ξ“ =[ val_n ]> Ξ”
it_eqF βˆ…β‚‘ (fun _ : T1 => nf_eq) (it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R) T1_0 match eval_aux (s_subst Ξ“ (Cut pos (Whn (OrR2 v)) (Whn (OrL c1 c2))) Ξ” a) with | inl x => TauF (iter (fun pat : T1 => let 'T1_0 as x0 := pat return (state Ξ” -> itree βˆ…β‚‘ ((fun _ : T1 => state Ξ”) +α΅’ (fun _ : T1 => nf Ξ”)) x0) in fun c : state Ξ” => Ret' (eval_aux c)) T1_0 x) | inr y => RetF y end match match eval_aux (Cut pos (Whn (OrR2 v)) (Whn (OrL c1 c2))) with | inl x => TauF (iter (fun pat : T1 => let 'T1_0 as x0 := pat return (state Ξ“ -> itree βˆ…β‚‘ ((fun _ : T1 => state Ξ“) +α΅’ (fun _ : T1 => nf Ξ“)) x0) in fun c : state Ξ“ => Ret' (eval_aux c)) T1_0 x) | inr y => RetF y end with | RetF r => match eval_aux (s_subst Ξ“ (p_app (var (nf_var r)) (nf_obs r) (nf_args r)) Ξ” a) with | inl x => TauF (iter (fun pat : T1 => let 'T1_0 as x0 := pat return (state Ξ” -> itree βˆ…β‚‘ ((fun _ : T1 => state Ξ”) +α΅’ (fun _ : T1 => nf Ξ”)) x0) in fun c : state Ξ” => Ret' (eval_aux c)) T1_0 x) | inr y => RetF y end | TauF t => TauF ((fun pat : T1 => let 'T1_0 as x := pat return (Obs.nf obs_op val_n Ξ“ -> itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”) x) in fun y : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var y)) (nf_obs y) (nf_args y)) Ξ” a)) =<< t) | VisF e k => VisF e (fun r : ex_falso e => (fun pat : T1 => let 'T1_0 as x := pat return (Obs.nf obs_op val_n Ξ“ -> itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”) x) in fun y : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var y)) (nf_obs y) (nf_args y)) Ξ” a)) =<< k r) end
Ξ“: neg_ctx
A10: pre_ty neg
x: term Ξ“ `+ A10
c: state (Ξ“ β–Άβ‚“ `+ A10)
Ξ”: neg_ctx
R: relα΅’ (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”)) (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”))
CIH: forall (c : state Ξ“) (a : Ξ“ =[ val_n ]> Ξ”), it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R T1_0 (eval (s_subst Ξ“ c Ξ” a)) (bind_delay' (eval c) (fun n : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var n)) (nf_obs n) (nf_args n)) Ξ” a)))
a: Ξ“ =[ val_n ]> Ξ”
it_eqF βˆ…β‚‘ (fun _ : T1 => nf_eq) (it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R) T1_0 match eval_aux (s_subst Ξ“ (Cut pos (Whn (ShiftPR x)) (Whn (ShiftPL c))) Ξ” a) with | inl x => TauF (iter (fun pat : T1 => let 'T1_0 as x0 := pat return (state Ξ” -> itree βˆ…β‚‘ ((fun _ : T1 => state Ξ”) +α΅’ (fun _ : T1 => nf Ξ”)) x0) in fun c : state Ξ” => Ret' (eval_aux c)) T1_0 x) | inr y => RetF y end match match eval_aux (Cut pos (Whn (ShiftPR x)) (Whn (ShiftPL c))) with | inl x => TauF (iter (fun pat : T1 => let 'T1_0 as x0 := pat return (state Ξ“ -> itree βˆ…β‚‘ ((fun _ : T1 => state Ξ“) +α΅’ (fun _ : T1 => nf Ξ“)) x0) in fun c : state Ξ“ => Ret' (eval_aux c)) T1_0 x) | inr y => RetF y end with | RetF r => match eval_aux (s_subst Ξ“ (p_app (var (nf_var r)) (nf_obs r) (nf_args r)) Ξ” a) with | inl x => TauF (iter (fun pat : T1 => let 'T1_0 as x0 := pat return (state Ξ” -> itree βˆ…β‚‘ ((fun _ : T1 => state Ξ”) +α΅’ (fun _ : T1 => nf Ξ”)) x0) in fun c : state Ξ” => Ret' (eval_aux c)) T1_0 x) | inr y => RetF y end | TauF t => TauF ((fun pat : T1 => let 'T1_0 as x := pat return (Obs.nf obs_op val_n Ξ“ -> itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”) x) in fun y : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var y)) (nf_obs y) (nf_args y)) Ξ” a)) =<< t) | VisF e k => VisF e (fun r : ex_falso e => (fun pat : T1 => let 'T1_0 as x := pat return (Obs.nf obs_op val_n Ξ“ -> itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”) x) in fun y : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var y)) (nf_obs y) (nf_args y)) Ξ” a)) =<< k r) end
Ξ“: neg_ctx
A14: pre_ty neg
k: whn Ξ“ `- A14
c: state (Ξ“ β–Άβ‚“ `- A14)
Ξ”: neg_ctx
R: relα΅’ (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”)) (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”))
CIH: forall (c : state Ξ“) (a : Ξ“ =[ val_n ]> Ξ”), it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R T1_0 (eval (s_subst Ξ“ c Ξ” a)) (bind_delay' (eval c) (fun n : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var n)) (nf_obs n) (nf_args n)) Ξ” a)))
a: Ξ“ =[ val_n ]> Ξ”
it_eqF βˆ…β‚‘ (fun _ : T1 => nf_eq) (it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R) T1_0 match eval_aux (s_subst Ξ“ (Cut pos (Whn (NegPR k)) (Whn (NegPL c))) Ξ” a) with | inl x => TauF (iter (fun pat : T1 => let 'T1_0 as x0 := pat return (state Ξ” -> itree βˆ…β‚‘ ((fun _ : T1 => state Ξ”) +α΅’ (fun _ : T1 => nf Ξ”)) x0) in fun c : state Ξ” => Ret' (eval_aux c)) T1_0 x) | inr y => RetF y end match match eval_aux (Cut pos (Whn (NegPR k)) (Whn (NegPL c))) with | inl x => TauF (iter (fun pat : T1 => let 'T1_0 as x0 := pat return (state Ξ“ -> itree βˆ…β‚‘ ((fun _ : T1 => state Ξ“) +α΅’ (fun _ : T1 => nf Ξ“)) x0) in fun c : state Ξ“ => Ret' (eval_aux c)) T1_0 x) | inr y => RetF y end with | RetF r => match eval_aux (s_subst Ξ“ (p_app (var (nf_var r)) (nf_obs r) (nf_args r)) Ξ” a) with | inl x => TauF (iter (fun pat : T1 => let 'T1_0 as x0 := pat return (state Ξ” -> itree βˆ…β‚‘ ((fun _ : T1 => state Ξ”) +α΅’ (fun _ : T1 => nf Ξ”)) x0) in fun c : state Ξ” => Ret' (eval_aux c)) T1_0 x) | inr y => RetF y end | TauF t => TauF ((fun pat : T1 => let 'T1_0 as x := pat return (Obs.nf obs_op val_n Ξ“ -> itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”) x) in fun y : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var y)) (nf_obs y) (nf_args y)) Ξ” a)) =<< t) | VisF e k => VisF e (fun r : ex_falso e => (fun pat : T1 => let 'T1_0 as x := pat return (Obs.nf obs_op val_n Ξ“ -> itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”) x) in fun y : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var y)) (nf_obs y) (nf_args y)) Ξ” a)) =<< k r) end
Ξ“: neg_ctx
A: pre_ty neg
x: term Ξ“ `+ A
c: state (Ξ“ β–Άβ‚“ (`- A) †)
Ξ”: neg_ctx
R: relα΅’ (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”)) (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”))
CIH: forall (c : state Ξ“) (a : Ξ“ =[ val_n ]> Ξ”), it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R T1_0 (eval (s_subst Ξ“ c Ξ” a)) (bind_delay' (eval c) (fun n : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var n)) (nf_obs n) (nf_args n)) Ξ” a)))
a: Ξ“ =[ val_n ]> Ξ”
it_eqF βˆ…β‚‘ (fun _ : T1 => nf_eq) (it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R) T1_0 match eval_aux (s_subst Ξ“ (Cut neg x (Mu c)) Ξ” a) with | inl x => TauF (iter (fun pat : T1 => let 'T1_0 as x0 := pat return (state Ξ” -> itree βˆ…β‚‘ ((fun _ : T1 => state Ξ”) +α΅’ (fun _ : T1 => nf Ξ”)) x0) in fun c : state Ξ” => Ret' (eval_aux c)) T1_0 x) | inr y => RetF y end match match eval_aux (Cut neg x (Mu c)) with | inl x => TauF (iter (fun pat : T1 => let 'T1_0 as x0 := pat return (state Ξ“ -> itree βˆ…β‚‘ ((fun _ : T1 => state Ξ“) +α΅’ (fun _ : T1 => nf Ξ“)) x0) in fun c : state Ξ“ => Ret' (eval_aux c)) T1_0 x) | inr y => RetF y end with | RetF r => match eval_aux (s_subst Ξ“ (p_app (var (nf_var r)) (nf_obs r) (nf_args r)) Ξ” a) with | inl x => TauF (iter (fun pat : T1 => let 'T1_0 as x0 := pat return (state Ξ” -> itree βˆ…β‚‘ ((fun _ : T1 => state Ξ”) +α΅’ (fun _ : T1 => nf Ξ”)) x0) in fun c : state Ξ” => Ret' (eval_aux c)) T1_0 x) | inr y => RetF y end | TauF t => TauF ((fun pat : T1 => let 'T1_0 as x := pat return (Obs.nf obs_op val_n Ξ“ -> itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”) x) in fun y : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var y)) (nf_obs y) (nf_args y)) Ξ” a)) =<< t) | VisF e k => VisF e (fun r : ex_falso e => (fun pat : T1 => let 'T1_0 as x := pat return (Obs.nf obs_op val_n Ξ“ -> itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”) x) in fun y : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var y)) (nf_obs y) (nf_args y)) Ξ” a)) =<< k r) end
Ξ“: neg_ctx
A: pre_ty neg
c: state (Ξ“ β–Άβ‚“ (`+ A) †)
k: whn Ξ“ `- A
Ξ”: neg_ctx
R: relα΅’ (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”)) (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”))
CIH: forall (c : state Ξ“) (a : Ξ“ =[ val_n ]> Ξ”), it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R T1_0 (eval (s_subst Ξ“ c Ξ” a)) (bind_delay' (eval c) (fun n : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var n)) (nf_obs n) (nf_args n)) Ξ” a)))
a: Ξ“ =[ val_n ]> Ξ”
it_eqF βˆ…β‚‘ (fun _ : T1 => nf_eq) (it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R) T1_0 match eval_aux (s_subst Ξ“ (Cut neg (Mu c) (Whn k)) Ξ” a) with | inl x => TauF (iter (fun pat : T1 => let 'T1_0 as x0 := pat return (state Ξ” -> itree βˆ…β‚‘ ((fun _ : T1 => state Ξ”) +α΅’ (fun _ : T1 => nf Ξ”)) x0) in fun c : state Ξ” => Ret' (eval_aux c)) T1_0 x) | inr y => RetF y end match match eval_aux (Cut neg (Mu c) (Whn k)) with | inl x => TauF (iter (fun pat : T1 => let 'T1_0 as x0 := pat return (state Ξ“ -> itree βˆ…β‚‘ ((fun _ : T1 => state Ξ“) +α΅’ (fun _ : T1 => nf Ξ“)) x0) in fun c : state Ξ“ => Ret' (eval_aux c)) T1_0 x) | inr y => RetF y end with | RetF r => match eval_aux (s_subst Ξ“ (p_app (var (nf_var r)) (nf_obs r) (nf_args r)) Ξ” a) with | inl x => TauF (iter (fun pat : T1 => let 'T1_0 as x0 := pat return (state Ξ” -> itree βˆ…β‚‘ ((fun _ : T1 => state Ξ”) +α΅’ (fun _ : T1 => nf Ξ”)) x0) in fun c : state Ξ” => Ret' (eval_aux c)) T1_0 x) | inr y => RetF y end | TauF t => TauF ((fun pat : T1 => let 'T1_0 as x := pat return (Obs.nf obs_op val_n Ξ“ -> itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”) x) in fun y : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var y)) (nf_obs y) (nf_args y)) Ξ” a)) =<< t) | VisF e k => VisF e (fun r : ex_falso e => (fun pat : T1 => let 'T1_0 as x := pat return (Obs.nf obs_op val_n Ξ“ -> itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”) x) in fun y : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var y)) (nf_obs y) (nf_args y)) Ξ” a)) =<< k r) end
Ξ“: neg_ctx
A2: pre_ty neg
t: term (Ξ“ β–Άβ‚“ `+ A2) `+ A2
k: whn Ξ“ `- A2
Ξ”: neg_ctx
R: relα΅’ (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”)) (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”))
CIH: forall (c : state Ξ“) (a : Ξ“ =[ val_n ]> Ξ”), it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R T1_0 (eval (s_subst Ξ“ c Ξ” a)) (bind_delay' (eval c) (fun n : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var n)) (nf_obs n) (nf_args n)) Ξ” a)))
a: Ξ“ =[ val_n ]> Ξ”
it_eqF βˆ…β‚‘ (fun _ : T1 => nf_eq) (it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R) T1_0 match eval_aux (s_subst Ξ“ (Cut neg (RecR t) (Whn k)) Ξ” a) with | inl x => TauF (iter (fun pat : T1 => let 'T1_0 as x0 := pat return (state Ξ” -> itree βˆ…β‚‘ ((fun _ : T1 => state Ξ”) +α΅’ (fun _ : T1 => nf Ξ”)) x0) in fun c : state Ξ” => Ret' (eval_aux c)) T1_0 x) | inr y => RetF y end match match eval_aux (Cut neg (RecR t) (Whn k)) with | inl x => TauF (iter (fun pat : T1 => let 'T1_0 as x0 := pat return (state Ξ“ -> itree βˆ…β‚‘ ((fun _ : T1 => state Ξ“) +α΅’ (fun _ : T1 => nf Ξ“)) x0) in fun c : state Ξ“ => Ret' (eval_aux c)) T1_0 x) | inr y => RetF y end with | RetF r => match eval_aux (s_subst Ξ“ (p_app (var (nf_var r)) (nf_obs r) (nf_args r)) Ξ” a) with | inl x => TauF (iter (fun pat : T1 => let 'T1_0 as x0 := pat return (state Ξ” -> itree βˆ…β‚‘ ((fun _ : T1 => state Ξ”) +α΅’ (fun _ : T1 => nf Ξ”)) x0) in fun c : state Ξ” => Ret' (eval_aux c)) T1_0 x) | inr y => RetF y end | TauF t => TauF ((fun pat : T1 => let 'T1_0 as x := pat return (Obs.nf obs_op val_n Ξ“ -> itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”) x) in fun y : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var y)) (nf_obs y) (nf_args y)) Ξ” a)) =<< t) | VisF e k => VisF e (fun r : ex_falso e => (fun pat : T1 => let 'T1_0 as x := pat return (Obs.nf obs_op val_n Ξ“ -> itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”) x) in fun y : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var y)) (nf_obs y) (nf_args y)) Ξ” a)) =<< k r) end
Ξ“: neg_ctx
A: pre_ty neg
i: Ξ“ βˆ‹ `+ A
k: whn Ξ“ `- A
Ξ”: neg_ctx
R: relα΅’ (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”)) (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”))
CIH: forall (c : state Ξ“) (a : Ξ“ =[ val_n ]> Ξ”), it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R T1_0 (eval (s_subst Ξ“ c Ξ” a)) (bind_delay' (eval c) (fun n : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var n)) (nf_obs n) (nf_args n)) Ξ” a)))
a: Ξ“ =[ val_n ]> Ξ”
it_eqF βˆ…β‚‘ (fun _ : T1 => nf_eq) (it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R) T1_0 match eval_aux (s_subst Ξ“ (Cut neg (Whn (Var i)) (Whn k)) Ξ” a) with | inl x => TauF (iter (fun pat : T1 => let 'T1_0 as x0 := pat return (state Ξ” -> itree βˆ…β‚‘ ((fun _ : T1 => state Ξ”) +α΅’ (fun _ : T1 => nf Ξ”)) x0) in fun c : state Ξ” => Ret' (eval_aux c)) T1_0 x) | inr y => RetF y end match match eval_aux (Cut neg (Whn (Var i)) (Whn k)) with | inl x => TauF (iter (fun pat : T1 => let 'T1_0 as x0 := pat return (state Ξ“ -> itree βˆ…β‚‘ ((fun _ : T1 => state Ξ“) +α΅’ (fun _ : T1 => nf Ξ“)) x0) in fun c : state Ξ“ => Ret' (eval_aux c)) T1_0 x) | inr y => RetF y end with | RetF r => match eval_aux (s_subst Ξ“ (p_app (var (nf_var r)) (nf_obs r) (nf_args r)) Ξ” a) with | inl x => TauF (iter (fun pat : T1 => let 'T1_0 as x0 := pat return (state Ξ” -> itree βˆ…β‚‘ ((fun _ : T1 => state Ξ”) +α΅’ (fun _ : T1 => nf Ξ”)) x0) in fun c : state Ξ” => Ret' (eval_aux c)) T1_0 x) | inr y => RetF y end | TauF t => TauF ((fun pat : T1 => let 'T1_0 as x := pat return (Obs.nf obs_op val_n Ξ“ -> itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”) x) in fun y : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var y)) (nf_obs y) (nf_args y)) Ξ” a)) =<< t) | VisF e k => VisF e (fun r : ex_falso e => (fun pat : T1 => let 'T1_0 as x := pat return (Obs.nf obs_op val_n Ξ“ -> itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”) x) in fun y : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var y)) (nf_obs y) (nf_args y)) Ξ” a)) =<< k r) end
Ξ“: neg_ctx
c: state Ξ“
Ξ”: neg_ctx
R: relα΅’ (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”)) (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”))
CIH: forall (c : state Ξ“) (a : Ξ“ =[ val_n ]> Ξ”), it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R T1_0 (eval (s_subst Ξ“ c Ξ” a)) (bind_delay' (eval c) (fun n : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var n)) (nf_obs n) (nf_args n)) Ξ” a)))
a: Ξ“ =[ val_n ]> Ξ”
it_eqF βˆ…β‚‘ (fun _ : T1 => nf_eq) (it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R) T1_0 match eval_aux (s_subst Ξ“ (Cut neg (Whn (BotR c)) (Whn BotL)) Ξ” a) with | inl x => TauF (iter (fun pat : T1 => let 'T1_0 as x0 := pat return (state Ξ” -> itree βˆ…β‚‘ ((fun _ : T1 => state Ξ”) +α΅’ (fun _ : T1 => nf Ξ”)) x0) in fun c : state Ξ” => Ret' (eval_aux c)) T1_0 x) | inr y => RetF y end match match eval_aux (Cut neg (Whn (BotR c)) (Whn BotL)) with | inl x => TauF (iter (fun pat : T1 => let 'T1_0 as x0 := pat return (state Ξ“ -> itree βˆ…β‚‘ ((fun _ : T1 => state Ξ“) +α΅’ (fun _ : T1 => nf Ξ“)) x0) in fun c : state Ξ“ => Ret' (eval_aux c)) T1_0 x) | inr y => RetF y end with | RetF r => match eval_aux (s_subst Ξ“ (p_app (var (nf_var r)) (nf_obs r) (nf_args r)) Ξ” a) with | inl x => TauF (iter (fun pat : T1 => let 'T1_0 as x0 := pat return (state Ξ” -> itree βˆ…β‚‘ ((fun _ : T1 => state Ξ”) +α΅’ (fun _ : T1 => nf Ξ”)) x0) in fun c : state Ξ” => Ret' (eval_aux c)) T1_0 x) | inr y => RetF y end | TauF t => TauF ((fun pat : T1 => let 'T1_0 as x := pat return (Obs.nf obs_op val_n Ξ“ -> itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”) x) in fun y : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var y)) (nf_obs y) (nf_args y)) Ξ” a)) =<< t) | VisF e k => VisF e (fun r : ex_falso e => (fun pat : T1 => let 'T1_0 as x := pat return (Obs.nf obs_op val_n Ξ“ -> itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”) x) in fun y : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var y)) (nf_obs y) (nf_args y)) Ξ” a)) =<< k r) end
Ξ“: neg_ctx
A4, B3: pre_ty neg
c: state (Ξ“ β–Άβ‚“ `- A4 β–Άβ‚“ `- B3)
k1: whn Ξ“ `- A4
k2: whn Ξ“ `- B3
Ξ”: neg_ctx
R: relα΅’ (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”)) (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”))
CIH: forall (c : state Ξ“) (a : Ξ“ =[ val_n ]> Ξ”), it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R T1_0 (eval (s_subst Ξ“ c Ξ” a)) (bind_delay' (eval c) (fun n : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var n)) (nf_obs n) (nf_args n)) Ξ” a)))
a: Ξ“ =[ val_n ]> Ξ”
it_eqF βˆ…β‚‘ (fun _ : T1 => nf_eq) (it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R) T1_0 match eval_aux (s_subst Ξ“ (Cut neg (Whn (ParR c)) (Whn (ParL k1 k2))) Ξ” a) with | inl x => TauF (iter (fun pat : T1 => let 'T1_0 as x0 := pat return (state Ξ” -> itree βˆ…β‚‘ ((fun _ : T1 => state Ξ”) +α΅’ (fun _ : T1 => nf Ξ”)) x0) in fun c : state Ξ” => Ret' (eval_aux c)) T1_0 x) | inr y => RetF y end match match eval_aux (Cut neg (Whn (ParR c)) (Whn (ParL k1 k2))) with | inl x => TauF (iter (fun pat : T1 => let 'T1_0 as x0 := pat return (state Ξ“ -> itree βˆ…β‚‘ ((fun _ : T1 => state Ξ“) +α΅’ (fun _ : T1 => nf Ξ“)) x0) in fun c : state Ξ“ => Ret' (eval_aux c)) T1_0 x) | inr y => RetF y end with | RetF r => match eval_aux (s_subst Ξ“ (p_app (var (nf_var r)) (nf_obs r) (nf_args r)) Ξ” a) with | inl x => TauF (iter (fun pat : T1 => let 'T1_0 as x0 := pat return (state Ξ” -> itree βˆ…β‚‘ ((fun _ : T1 => state Ξ”) +α΅’ (fun _ : T1 => nf Ξ”)) x0) in fun c : state Ξ” => Ret' (eval_aux c)) T1_0 x) | inr y => RetF y end | TauF t => TauF ((fun pat : T1 => let 'T1_0 as x := pat return (Obs.nf obs_op val_n Ξ“ -> itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”) x) in fun y : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var y)) (nf_obs y) (nf_args y)) Ξ” a)) =<< t) | VisF e k => VisF e (fun r : ex_falso e => (fun pat : T1 => let 'T1_0 as x := pat return (Obs.nf obs_op val_n Ξ“ -> itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”) x) in fun y : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var y)) (nf_obs y) (nf_args y)) Ξ” a)) =<< k r) end
Ξ“: neg_ctx
A9, B8: pre_ty neg
c1: state (Ξ“ β–Άβ‚“ `- A9)
c2: state (Ξ“ β–Άβ‚“ `- B8)
k: whn Ξ“ `- A9
Ξ”: neg_ctx
R: relα΅’ (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”)) (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”))
CIH: forall (c : state Ξ“) (a : Ξ“ =[ val_n ]> Ξ”), it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R T1_0 (eval (s_subst Ξ“ c Ξ” a)) (bind_delay' (eval c) (fun n : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var n)) (nf_obs n) (nf_args n)) Ξ” a)))
a: Ξ“ =[ val_n ]> Ξ”
it_eqF βˆ…β‚‘ (fun _ : T1 => nf_eq) (it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R) T1_0 match eval_aux (s_subst Ξ“ (Cut neg (Whn (AndR c1 c2)) (Whn (AndL1 k))) Ξ” a) with | inl x => TauF (iter (fun pat : T1 => let 'T1_0 as x0 := pat return (state Ξ” -> itree βˆ…β‚‘ ((fun _ : T1 => state Ξ”) +α΅’ (fun _ : T1 => nf Ξ”)) x0) in fun c : state Ξ” => Ret' (eval_aux c)) T1_0 x) | inr y => RetF y end match match eval_aux (Cut neg (Whn (AndR c1 c2)) (Whn (AndL1 k))) with | inl x => TauF (iter (fun pat : T1 => let 'T1_0 as x0 := pat return (state Ξ“ -> itree βˆ…β‚‘ ((fun _ : T1 => state Ξ“) +α΅’ (fun _ : T1 => nf Ξ“)) x0) in fun c : state Ξ“ => Ret' (eval_aux c)) T1_0 x) | inr y => RetF y end with | RetF r => match eval_aux (s_subst Ξ“ (p_app (var (nf_var r)) (nf_obs r) (nf_args r)) Ξ” a) with | inl x => TauF (iter (fun pat : T1 => let 'T1_0 as x0 := pat return (state Ξ” -> itree βˆ…β‚‘ ((fun _ : T1 => state Ξ”) +α΅’ (fun _ : T1 => nf Ξ”)) x0) in fun c : state Ξ” => Ret' (eval_aux c)) T1_0 x) | inr y => RetF y end | TauF t => TauF ((fun pat : T1 => let 'T1_0 as x := pat return (Obs.nf obs_op val_n Ξ“ -> itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”) x) in fun y : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var y)) (nf_obs y) (nf_args y)) Ξ” a)) =<< t) | VisF e k => VisF e (fun r : ex_falso e => (fun pat : T1 => let 'T1_0 as x := pat return (Obs.nf obs_op val_n Ξ“ -> itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”) x) in fun y : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var y)) (nf_obs y) (nf_args y)) Ξ” a)) =<< k r) end
Ξ“: neg_ctx
A10, B9: pre_ty neg
c1: state (Ξ“ β–Άβ‚“ `- A10)
c2: state (Ξ“ β–Άβ‚“ `- B9)
k: whn Ξ“ `- B9
Ξ”: neg_ctx
R: relα΅’ (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”)) (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”))
CIH: forall (c : state Ξ“) (a : Ξ“ =[ val_n ]> Ξ”), it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R T1_0 (eval (s_subst Ξ“ c Ξ” a)) (bind_delay' (eval c) (fun n : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var n)) (nf_obs n) (nf_args n)) Ξ” a)))
a: Ξ“ =[ val_n ]> Ξ”
it_eqF βˆ…β‚‘ (fun _ : T1 => nf_eq) (it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R) T1_0 match eval_aux (s_subst Ξ“ (Cut neg (Whn (AndR c1 c2)) (Whn (AndL2 k))) Ξ” a) with | inl x => TauF (iter (fun pat : T1 => let 'T1_0 as x0 := pat return (state Ξ” -> itree βˆ…β‚‘ ((fun _ : T1 => state Ξ”) +α΅’ (fun _ : T1 => nf Ξ”)) x0) in fun c : state Ξ” => Ret' (eval_aux c)) T1_0 x) | inr y => RetF y end match match eval_aux (Cut neg (Whn (AndR c1 c2)) (Whn (AndL2 k))) with | inl x => TauF (iter (fun pat : T1 => let 'T1_0 as x0 := pat return (state Ξ“ -> itree βˆ…β‚‘ ((fun _ : T1 => state Ξ“) +α΅’ (fun _ : T1 => nf Ξ“)) x0) in fun c : state Ξ“ => Ret' (eval_aux c)) T1_0 x) | inr y => RetF y end with | RetF r => match eval_aux (s_subst Ξ“ (p_app (var (nf_var r)) (nf_obs r) (nf_args r)) Ξ” a) with | inl x => TauF (iter (fun pat : T1 => let 'T1_0 as x0 := pat return (state Ξ” -> itree βˆ…β‚‘ ((fun _ : T1 => state Ξ”) +α΅’ (fun _ : T1 => nf Ξ”)) x0) in fun c : state Ξ” => Ret' (eval_aux c)) T1_0 x) | inr y => RetF y end | TauF t => TauF ((fun pat : T1 => let 'T1_0 as x := pat return (Obs.nf obs_op val_n Ξ“ -> itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”) x) in fun y : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var y)) (nf_obs y) (nf_args y)) Ξ” a)) =<< t) | VisF e k => VisF e (fun r : ex_falso e => (fun pat : T1 => let 'T1_0 as x := pat return (Obs.nf obs_op val_n Ξ“ -> itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”) x) in fun y : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var y)) (nf_obs y) (nf_args y)) Ξ” a)) =<< k r) end
Ξ“: neg_ctx
A14: pre_ty pos
c: state (Ξ“ β–Άβ‚“ `- A14)
x: term Ξ“ `- A14
Ξ”: neg_ctx
R: relα΅’ (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”)) (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”))
CIH: forall (c : state Ξ“) (a : Ξ“ =[ val_n ]> Ξ”), it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R T1_0 (eval (s_subst Ξ“ c Ξ” a)) (bind_delay' (eval c) (fun n : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var n)) (nf_obs n) (nf_args n)) Ξ” a)))
a: Ξ“ =[ val_n ]> Ξ”
it_eqF βˆ…β‚‘ (fun _ : T1 => nf_eq) (it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R) T1_0 match eval_aux (s_subst Ξ“ (Cut neg (Whn (ShiftNR c)) (Whn (ShiftNL x))) Ξ” a) with | inl x => TauF (iter (fun pat : T1 => let 'T1_0 as x0 := pat return (state Ξ” -> itree βˆ…β‚‘ ((fun _ : T1 => state Ξ”) +α΅’ (fun _ : T1 => nf Ξ”)) x0) in fun c : state Ξ” => Ret' (eval_aux c)) T1_0 x) | inr y => RetF y end match match eval_aux (Cut neg (Whn (ShiftNR c)) (Whn (ShiftNL x))) with | inl x => TauF (iter (fun pat : T1 => let 'T1_0 as x0 := pat return (state Ξ“ -> itree βˆ…β‚‘ ((fun _ : T1 => state Ξ“) +α΅’ (fun _ : T1 => nf Ξ“)) x0) in fun c : state Ξ“ => Ret' (eval_aux c)) T1_0 x) | inr y => RetF y end with | RetF r => match eval_aux (s_subst Ξ“ (p_app (var (nf_var r)) (nf_obs r) (nf_args r)) Ξ” a) with | inl x => TauF (iter (fun pat : T1 => let 'T1_0 as x0 := pat return (state Ξ” -> itree βˆ…β‚‘ ((fun _ : T1 => state Ξ”) +α΅’ (fun _ : T1 => nf Ξ”)) x0) in fun c : state Ξ” => Ret' (eval_aux c)) T1_0 x) | inr y => RetF y end | TauF t => TauF ((fun pat : T1 => let 'T1_0 as x := pat return (Obs.nf obs_op val_n Ξ“ -> itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”) x) in fun y : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var y)) (nf_obs y) (nf_args y)) Ξ” a)) =<< t) | VisF e k => VisF e (fun r : ex_falso e => (fun pat : T1 => let 'T1_0 as x := pat return (Obs.nf obs_op val_n Ξ“ -> itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”) x) in fun y : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var y)) (nf_obs y) (nf_args y)) Ξ” a)) =<< k r) end
Ξ“: neg_ctx
A18: pre_ty pos
c: state (Ξ“ β–Άβ‚“ `+ A18)
v: whn Ξ“ `+ A18
Ξ”: neg_ctx
R: relα΅’ (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”)) (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”))
CIH: forall (c : state Ξ“) (a : Ξ“ =[ val_n ]> Ξ”), it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R T1_0 (eval (s_subst Ξ“ c Ξ” a)) (bind_delay' (eval c) (fun n : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var n)) (nf_obs n) (nf_args n)) Ξ” a)))
a: Ξ“ =[ val_n ]> Ξ”
it_eqF βˆ…β‚‘ (fun _ : T1 => nf_eq) (it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R) T1_0 match eval_aux (s_subst Ξ“ (Cut neg (Whn (NegNR c)) (Whn (NegNL v))) Ξ” a) with | inl x => TauF (iter (fun pat : T1 => let 'T1_0 as x0 := pat return (state Ξ” -> itree βˆ…β‚‘ ((fun _ : T1 => state Ξ”) +α΅’ (fun _ : T1 => nf Ξ”)) x0) in fun c : state Ξ” => Ret' (eval_aux c)) T1_0 x) | inr y => RetF y end match match eval_aux (Cut neg (Whn (NegNR c)) (Whn (NegNL v))) with | inl x => TauF (iter (fun pat : T1 => let 'T1_0 as x0 := pat return (state Ξ“ -> itree βˆ…β‚‘ ((fun _ : T1 => state Ξ“) +α΅’ (fun _ : T1 => nf Ξ“)) x0) in fun c : state Ξ“ => Ret' (eval_aux c)) T1_0 x) | inr y => RetF y end with | RetF r => match eval_aux (s_subst Ξ“ (p_app (var (nf_var r)) (nf_obs r) (nf_args r)) Ξ” a) with | inl x => TauF (iter (fun pat : T1 => let 'T1_0 as x0 := pat return (state Ξ” -> itree βˆ…β‚‘ ((fun _ : T1 => state Ξ”) +α΅’ (fun _ : T1 => nf Ξ”)) x0) in fun c : state Ξ” => Ret' (eval_aux c)) T1_0 x) | inr y => RetF y end | TauF t => TauF ((fun pat : T1 => let 'T1_0 as x := pat return (Obs.nf obs_op val_n Ξ“ -> itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”) x) in fun y : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var y)) (nf_obs y) (nf_args y)) Ξ” a)) =<< t) | VisF e k => VisF e (fun r : ex_falso e => (fun pat : T1 => let 'T1_0 as x := pat return (Obs.nf obs_op val_n Ξ“ -> itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”) x) in fun y : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var y)) (nf_obs y) (nf_args y)) Ξ” a)) =<< k r) end
Ξ“: neg_ctx
A: pre_ty pos
c: state (Ξ“ β–Άβ‚“ (`+ A) †)
x: term Ξ“ `- A
Ξ”: neg_ctx
R: relα΅’ (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”)) (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”))
CIH: forall (c : state Ξ“) (a : Ξ“ =[ val_n ]> Ξ”), it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R T1_0 (eval (s_subst Ξ“ c Ξ” a)) (bind_delay' (eval c) (fun n : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var n)) (nf_obs n) (nf_args n)) Ξ” a)))
a: Ξ“ =[ val_n ]> Ξ”

it_eqF βˆ…β‚‘ (fun _ : T1 => nf_eq) (it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R) T1_0 match eval_aux (s_subst Ξ“ (Cut pos (Mu c) x) Ξ” a) with | inl x => TauF (iter (fun pat : T1 => let 'T1_0 as x0 := pat return (state Ξ” -> itree βˆ…β‚‘ ((fun _ : T1 => state Ξ”) +α΅’ (fun _ : T1 => nf Ξ”)) x0) in fun c : state Ξ” => Ret' (eval_aux c)) T1_0 x) | inr y => RetF y end match match eval_aux (Cut pos (Mu c) x) with | inl x => TauF (iter (fun pat : T1 => let 'T1_0 as x0 := pat return (state Ξ“ -> itree βˆ…β‚‘ ((fun _ : T1 => state Ξ“) +α΅’ (fun _ : T1 => nf Ξ“)) x0) in fun c : state Ξ“ => Ret' (eval_aux c)) T1_0 x) | inr y => RetF y end with | RetF r => match eval_aux (s_subst Ξ“ (p_app (var (nf_var r)) (nf_obs r) (nf_args r)) Ξ” a) with | inl x => TauF (iter (fun pat : T1 => let 'T1_0 as x0 := pat return (state Ξ” -> itree βˆ…β‚‘ ((fun _ : T1 => state Ξ”) +α΅’ (fun _ : T1 => nf Ξ”)) x0) in fun c : state Ξ” => Ret' (eval_aux c)) T1_0 x) | inr y => RetF y end | TauF t => TauF ((fun pat : T1 => let 'T1_0 as x := pat return (Obs.nf obs_op val_n Ξ“ -> itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”) x) in fun y : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var y)) (nf_obs y) (nf_args y)) Ξ” a)) =<< t) | VisF e k => VisF e (fun r : ex_falso e => (fun pat : T1 => let 'T1_0 as x := pat return (Obs.nf obs_op val_n Ξ“ -> itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”) x) in fun y : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var y)) (nf_obs y) (nf_args y)) Ξ” a)) =<< k r) end
Ξ“: neg_ctx
A: pre_ty pos
c: state (Ξ“ β–Άβ‚“ (`+ A) †)
x: term Ξ“ `- A
Ξ”: neg_ctx
R: relα΅’ (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”)) (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”))
CIH: forall (c : state Ξ“) (a : Ξ“ =[ val_n ]> Ξ”), it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R T1_0 (eval (s_subst Ξ“ c Ξ” a)) (bind_delay' (eval c) (fun n : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var n)) (nf_obs n) (nf_args n)) Ξ” a)))
a: Ξ“ =[ val_n ]> Ξ”

it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R T1_0 (eval (s_subst (Ξ” β–Άβ‚“ `- A) (s_subst (Ξ“ β–Άβ‚“ `- A) c (Ξ” β–Άβ‚“ `- A) (a_shift1 a)) Ξ” ₁[ x `β‚œβŠ› a])) (bind_delay' (eval (s_subst (Ξ“ β–Άβ‚“ `- A) c Ξ“ ₁[ x])) (fun y : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var y)) (nf_obs y) (nf_args y)) Ξ” a)))
Ξ“: neg_ctx
A: pre_ty pos
c: state (Ξ“ β–Άβ‚“ (`+ A) †)
x: term Ξ“ `- A
Ξ”: neg_ctx
R: relα΅’ (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”)) (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”))
CIH: forall (c : state Ξ“) (a : Ξ“ =[ val_n ]> Ξ”), it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R T1_0 (eval (s_subst Ξ“ c Ξ” a)) (bind_delay' (eval c) (fun n : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var n)) (nf_obs n) (nf_args n)) Ξ” a)))
a: Ξ“ =[ val_n ]> Ξ”

it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R T1_0 (eval ((c β‚œβŠ› ₁[ upg_kp x]) β‚œβŠ› a)) (bind_delay' (eval (s_subst (Ξ“ β–Άβ‚“ `- A) c Ξ“ ₁[ x])) (fun y : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var y)) (nf_obs y) (nf_args y)) Ξ” a)))
apply CIH.
Ξ“: neg_ctx
A: pre_ty pos
v: whn Ξ“ `+ A
c: state (Ξ“ β–Άβ‚“ (`- A) †)
Ξ”: neg_ctx
R: relα΅’ (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”)) (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”))
CIH: forall (c : state Ξ“) (a : Ξ“ =[ val_n ]> Ξ”), it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R T1_0 (eval (s_subst Ξ“ c Ξ” a)) (bind_delay' (eval c) (fun n : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var n)) (nf_obs n) (nf_args n)) Ξ” a)))
a: Ξ“ =[ val_n ]> Ξ”

it_eqF βˆ…β‚‘ (fun _ : T1 => nf_eq) (it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R) T1_0 match eval_aux (s_subst Ξ“ (Cut pos (Whn v) (Mu c)) Ξ” a) with | inl x => TauF (iter (fun pat : T1 => let 'T1_0 as x0 := pat return (state Ξ” -> itree βˆ…β‚‘ ((fun _ : T1 => state Ξ”) +α΅’ (fun _ : T1 => nf Ξ”)) x0) in fun c : state Ξ” => Ret' (eval_aux c)) T1_0 x) | inr y => RetF y end match match eval_aux (Cut pos (Whn v) (Mu c)) with | inl x => TauF (iter (fun pat : T1 => let 'T1_0 as x0 := pat return (state Ξ“ -> itree βˆ…β‚‘ ((fun _ : T1 => state Ξ“) +α΅’ (fun _ : T1 => nf Ξ“)) x0) in fun c : state Ξ“ => Ret' (eval_aux c)) T1_0 x) | inr y => RetF y end with | RetF r => match eval_aux (s_subst Ξ“ (p_app (var (nf_var r)) (nf_obs r) (nf_args r)) Ξ” a) with | inl x => TauF (iter (fun pat : T1 => let 'T1_0 as x0 := pat return (state Ξ” -> itree βˆ…β‚‘ ((fun _ : T1 => state Ξ”) +α΅’ (fun _ : T1 => nf Ξ”)) x0) in fun c : state Ξ” => Ret' (eval_aux c)) T1_0 x) | inr y => RetF y end | TauF t => TauF ((fun pat : T1 => let 'T1_0 as x := pat return (Obs.nf obs_op val_n Ξ“ -> itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”) x) in fun y : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var y)) (nf_obs y) (nf_args y)) Ξ” a)) =<< t) | VisF e k => VisF e (fun r : ex_falso e => (fun pat : T1 => let 'T1_0 as x := pat return (Obs.nf obs_op val_n Ξ“ -> itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”) x) in fun y : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var y)) (nf_obs y) (nf_args y)) Ξ” a)) =<< k r) end
Ξ“: neg_ctx
A: pre_ty pos
v: whn Ξ“ `+ A
c: state (Ξ“ β–Άβ‚“ (`- A) †)
Ξ”: neg_ctx
R: relα΅’ (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”)) (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”))
CIH: forall (c : state Ξ“) (a : Ξ“ =[ val_n ]> Ξ”), it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R T1_0 (eval (s_subst Ξ“ c Ξ” a)) (bind_delay' (eval c) (fun n : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var n)) (nf_obs n) (nf_args n)) Ξ” a)))
a: Ξ“ =[ val_n ]> Ξ”

it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R T1_0 (eval (s_subst (Ξ” β–Άβ‚“ `+ A) (s_subst (Ξ“ β–Άβ‚“ `+ A) c (Ξ” β–Άβ‚“ `+ A) (a_shift1 a)) Ξ” ₁[ v `α΅₯βŠ› a])) (bind_delay' (eval (s_subst (Ξ“ β–Άβ‚“ `+ A) c Ξ“ ₁[ v])) (fun y : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var y)) (nf_obs y) (nf_args y)) Ξ” a)))
Ξ“: neg_ctx
A: pre_ty pos
v: whn Ξ“ `+ A
c: state (Ξ“ β–Άβ‚“ (`- A) †)
Ξ”: neg_ctx
R: relα΅’ (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”)) (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”))
CIH: forall (c : state Ξ“) (a : Ξ“ =[ val_n ]> Ξ”), it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R T1_0 (eval (s_subst Ξ“ c Ξ” a)) (bind_delay' (eval c) (fun n : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var n)) (nf_obs n) (nf_args n)) Ξ” a)))
a: Ξ“ =[ val_n ]> Ξ”

it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R T1_0 (eval ((c β‚œβŠ› ₁[ upg_vp v]) β‚œβŠ› a)) (bind_delay' (eval (s_subst (Ξ“ β–Άβ‚“ `+ A) c Ξ“ ₁[ v])) (fun y : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var y)) (nf_obs y) (nf_args y)) Ξ” a)))
apply CIH.
Ξ“: neg_ctx
A1: pre_ty pos
v: whn Ξ“ `+ A1
k: term (Ξ“ β–Άβ‚“ `- A1) `- A1
Ξ”: neg_ctx
R: relα΅’ (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”)) (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”))
CIH: forall (c : state Ξ“) (a : Ξ“ =[ val_n ]> Ξ”), it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R T1_0 (eval (s_subst Ξ“ c Ξ” a)) (bind_delay' (eval c) (fun n : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var n)) (nf_obs n) (nf_args n)) Ξ” a)))
a: Ξ“ =[ val_n ]> Ξ”

it_eqF βˆ…β‚‘ (fun _ : T1 => nf_eq) (it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R) T1_0 match eval_aux (s_subst Ξ“ (Cut pos (Whn v) (RecL k)) Ξ” a) with | inl x => TauF (iter (fun pat : T1 => let 'T1_0 as x0 := pat return (state Ξ” -> itree βˆ…β‚‘ ((fun _ : T1 => state Ξ”) +α΅’ (fun _ : T1 => nf Ξ”)) x0) in fun c : state Ξ” => Ret' (eval_aux c)) T1_0 x) | inr y => RetF y end match match eval_aux (Cut pos (Whn v) (RecL k)) with | inl x => TauF (iter (fun pat : T1 => let 'T1_0 as x0 := pat return (state Ξ“ -> itree βˆ…β‚‘ ((fun _ : T1 => state Ξ“) +α΅’ (fun _ : T1 => nf Ξ“)) x0) in fun c : state Ξ“ => Ret' (eval_aux c)) T1_0 x) | inr y => RetF y end with | RetF r => match eval_aux (s_subst Ξ“ (p_app (var (nf_var r)) (nf_obs r) (nf_args r)) Ξ” a) with | inl x => TauF (iter (fun pat : T1 => let 'T1_0 as x0 := pat return (state Ξ” -> itree βˆ…β‚‘ ((fun _ : T1 => state Ξ”) +α΅’ (fun _ : T1 => nf Ξ”)) x0) in fun c : state Ξ” => Ret' (eval_aux c)) T1_0 x) | inr y => RetF y end | TauF t => TauF ((fun pat : T1 => let 'T1_0 as x := pat return (Obs.nf obs_op val_n Ξ“ -> itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”) x) in fun y : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var y)) (nf_obs y) (nf_args y)) Ξ” a)) =<< t) | VisF e k => VisF e (fun r : ex_falso e => (fun pat : T1 => let 'T1_0 as x := pat return (Obs.nf obs_op val_n Ξ“ -> itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”) x) in fun y : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var y)) (nf_obs y) (nf_args y)) Ξ” a)) =<< k r) end
Ξ“: neg_ctx
A1: pre_ty pos
v: whn Ξ“ `+ A1
k: term (Ξ“ β–Άβ‚“ `- A1) `- A1
Ξ”: neg_ctx
R: relα΅’ (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”)) (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”))
CIH: forall (c : state Ξ“) (a : Ξ“ =[ val_n ]> Ξ”), it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R T1_0 (eval (s_subst Ξ“ c Ξ” a)) (bind_delay' (eval c) (fun n : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var n)) (nf_obs n) (nf_args n)) Ξ” a)))
a: Ξ“ =[ val_n ]> Ξ”

it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R T1_0 (eval (Cut pos (Whn (v `α΅₯βŠ› a)) ((k `β‚œβŠ› a_shift1 a) `β‚œβŠ› ₁[ RecL (k `β‚œβŠ› a_shift1 a)]))) (bind_delay' (eval (Cut pos (Whn v) (k `β‚œβŠ› ₁[ RecL k]))) (fun y : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var y)) (nf_obs y) (nf_args y)) Ξ” a)))
Ξ“: neg_ctx
A1: pre_ty pos
v: whn Ξ“ `+ A1
k: term (Ξ“ β–Άβ‚“ `- A1) `- A1
Ξ”: neg_ctx
R: relα΅’ (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”)) (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”))
CIH: forall (c : state Ξ“) (a : Ξ“ =[ val_n ]> Ξ”), it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R T1_0 (eval (s_subst Ξ“ c Ξ” a)) (bind_delay' (eval c) (fun n : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var n)) (nf_obs n) (nf_args n)) Ξ” a)))
a: Ξ“ =[ val_n ]> Ξ”

it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R T1_0 (eval (Cut pos (Whn (v `α΅₯βŠ› a)) ((k `β‚œβŠ› ₁[ upg_kp (RecL k)]) `β‚œβŠ› a))) (bind_delay' (eval (Cut pos (Whn v) (k `β‚œβŠ› ₁[ RecL k]))) (fun y : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var y)) (nf_obs y) (nf_args y)) Ξ” a)))
apply CIH.
Ξ“: neg_ctx
A: pre_ty pos
v: whn Ξ“ `+ A
i: Ξ“ βˆ‹ `- A
Ξ”: neg_ctx
R: relα΅’ (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”)) (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”))
CIH: forall (c : state Ξ“) (a : Ξ“ =[ val_n ]> Ξ”), it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R T1_0 (eval (s_subst Ξ“ c Ξ” a)) (bind_delay' (eval c) (fun n : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var n)) (nf_obs n) (nf_args n)) Ξ” a)))
a: Ξ“ =[ val_n ]> Ξ”

it_eqF βˆ…β‚‘ (fun _ : T1 => nf_eq) (it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R) T1_0 match eval_aux (s_subst Ξ“ (Cut pos (Whn v) (Whn (Var i))) Ξ” a) with | inl x => TauF (iter (fun pat : T1 => let 'T1_0 as x0 := pat return (state Ξ” -> itree βˆ…β‚‘ ((fun _ : T1 => state Ξ”) +α΅’ (fun _ : T1 => nf Ξ”)) x0) in fun c : state Ξ” => Ret' (eval_aux c)) T1_0 x) | inr y => RetF y end match match eval_aux (Cut pos (Whn v) (Whn (Var i))) with | inl x => TauF (iter (fun pat : T1 => let 'T1_0 as x0 := pat return (state Ξ“ -> itree βˆ…β‚‘ ((fun _ : T1 => state Ξ“) +α΅’ (fun _ : T1 => nf Ξ“)) x0) in fun c : state Ξ“ => Ret' (eval_aux c)) T1_0 x) | inr y => RetF y end with | RetF r => match eval_aux (s_subst Ξ“ (p_app (var (nf_var r)) (nf_obs r) (nf_args r)) Ξ” a) with | inl x => TauF (iter (fun pat : T1 => let 'T1_0 as x0 := pat return (state Ξ” -> itree βˆ…β‚‘ ((fun _ : T1 => state Ξ”) +α΅’ (fun _ : T1 => nf Ξ”)) x0) in fun c : state Ξ” => Ret' (eval_aux c)) T1_0 x) | inr y => RetF y end | TauF t => TauF ((fun pat : T1 => let 'T1_0 as x := pat return (Obs.nf obs_op val_n Ξ“ -> itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”) x) in fun y : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var y)) (nf_obs y) (nf_args y)) Ξ” a)) =<< t) | VisF e k => VisF e (fun r : ex_falso e => (fun pat : T1 => let 'T1_0 as x := pat return (Obs.nf obs_op val_n Ξ“ -> itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”) x) in fun y : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var y)) (nf_obs y) (nf_args y)) Ξ” a)) =<< k r) end
Ξ“: neg_ctx
A: pre_ty pos
v: whn Ξ“ `+ A
i: Ξ“ βˆ‹ `- A
Ξ”: neg_ctx
R: relα΅’ (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”)) (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”))
CIH: forall (c : state Ξ“) (a : Ξ“ =[ val_n ]> Ξ”), it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R T1_0 (eval (s_subst Ξ“ c Ξ” a)) (bind_delay' (eval c) (fun n : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var n)) (nf_obs n) (nf_args n)) Ξ” a)))
a: Ξ“ =[ val_n ]> Ξ”

it_eq_map βˆ…β‚‘ (fun _ : T1 => nf_eq) (it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R) T1_0 (eval (Cut pos (Whn (v `α΅₯βŠ› a)) (a `- A i))) (eval (Cut pos (Whn ((p_of_w_0p A v `α΅₯βŠ› nf_args (s_var_upg i β‹… v_split_p v)) `α΅₯βŠ› a)) (var (s_var_upg i) `β‚œβŠ› a)))
Ξ“: neg_ctx
A: pre_ty pos
v: whn Ξ“ `+ A
i: Ξ“ βˆ‹ `- A
Ξ”: neg_ctx
R: relα΅’ (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”)) (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”))
CIH: forall (c : state Ξ“) (a : Ξ“ =[ val_n ]> Ξ”), it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R T1_0 (eval (s_subst Ξ“ c Ξ” a)) (bind_delay' (eval c) (fun n : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var n)) (nf_obs n) (nf_args n)) Ξ” a)))
a: Ξ“ =[ val_n ]> Ξ”

it_eq_map βˆ…β‚‘ (fun _ : T1 => nf_eq) (it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R) T1_0 (eval (Cut pos (Whn (v `α΅₯βŠ› a)) (a `- A i))) (eval (Cut pos (Whn ((p_of_w_0p A v `α΅₯βŠ› p_dom_of_w_0p A v) `α΅₯βŠ› a)) (var (s_var_upg i) `β‚œβŠ› a)))
now rewrite (refold_id_aux A v).
Ξ“: neg_ctx
c: state Ξ“
Ξ”: neg_ctx
R: relα΅’ (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”)) (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”))
CIH: forall (c : state Ξ“) (a : Ξ“ =[ val_n ]> Ξ”), it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R T1_0 (eval (s_subst Ξ“ c Ξ” a)) (bind_delay' (eval c) (fun n : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var n)) (nf_obs n) (nf_args n)) Ξ” a)))
a: Ξ“ =[ val_n ]> Ξ”

it_eqF βˆ…β‚‘ (fun _ : T1 => nf_eq) (it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R) T1_0 match eval_aux (s_subst Ξ“ (Cut pos (Whn OneR) (Whn (OneL c))) Ξ” a) with | inl x => TauF (iter (fun pat : T1 => let 'T1_0 as x0 := pat return (state Ξ” -> itree βˆ…β‚‘ ((fun _ : T1 => state Ξ”) +α΅’ (fun _ : T1 => nf Ξ”)) x0) in fun c : state Ξ” => Ret' (eval_aux c)) T1_0 x) | inr y => RetF y end match match eval_aux (Cut pos (Whn OneR) (Whn (OneL c))) with | inl x => TauF (iter (fun pat : T1 => let 'T1_0 as x0 := pat return (state Ξ“ -> itree βˆ…β‚‘ ((fun _ : T1 => state Ξ“) +α΅’ (fun _ : T1 => nf Ξ“)) x0) in fun c : state Ξ“ => Ret' (eval_aux c)) T1_0 x) | inr y => RetF y end with | RetF r => match eval_aux (s_subst Ξ“ (p_app (var (nf_var r)) (nf_obs r) (nf_args r)) Ξ” a) with | inl x => TauF (iter (fun pat : T1 => let 'T1_0 as x0 := pat return (state Ξ” -> itree βˆ…β‚‘ ((fun _ : T1 => state Ξ”) +α΅’ (fun _ : T1 => nf Ξ”)) x0) in fun c : state Ξ” => Ret' (eval_aux c)) T1_0 x) | inr y => RetF y end | TauF t => TauF ((fun pat : T1 => let 'T1_0 as x := pat return (Obs.nf obs_op val_n Ξ“ -> itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”) x) in fun y : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var y)) (nf_obs y) (nf_args y)) Ξ” a)) =<< t) | VisF e k => VisF e (fun r : ex_falso e => (fun pat : T1 => let 'T1_0 as x := pat return (Obs.nf obs_op val_n Ξ“ -> itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”) x) in fun y : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var y)) (nf_obs y) (nf_args y)) Ξ” a)) =<< k r) end
cbn; econstructor; refold_eval; apply CIH.
Ξ“: neg_ctx
A0, B: pre_ty pos
v1: whn Ξ“ `+ A0
v2: whn Ξ“ `+ B
c: state (Ξ“ β–Άβ‚“ `+ A0 β–Άβ‚“ `+ B)
Ξ”: neg_ctx
R: relα΅’ (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”)) (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”))
CIH: forall (c : state Ξ“) (a : Ξ“ =[ val_n ]> Ξ”), it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R T1_0 (eval (s_subst Ξ“ c Ξ” a)) (bind_delay' (eval c) (fun n : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var n)) (nf_obs n) (nf_args n)) Ξ” a)))
a: Ξ“ =[ val_n ]> Ξ”

it_eqF βˆ…β‚‘ (fun _ : T1 => nf_eq) (it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R) T1_0 match eval_aux (s_subst Ξ“ (Cut pos (Whn (TenR v1 v2)) (Whn (TenL c))) Ξ” a) with | inl x => TauF (iter (fun pat : T1 => let 'T1_0 as x0 := pat return (state Ξ” -> itree βˆ…β‚‘ ((fun _ : T1 => state Ξ”) +α΅’ (fun _ : T1 => nf Ξ”)) x0) in fun c : state Ξ” => Ret' (eval_aux c)) T1_0 x) | inr y => RetF y end match match eval_aux (Cut pos (Whn (TenR v1 v2)) (Whn (TenL c))) with | inl x => TauF (iter (fun pat : T1 => let 'T1_0 as x0 := pat return (state Ξ“ -> itree βˆ…β‚‘ ((fun _ : T1 => state Ξ“) +α΅’ (fun _ : T1 => nf Ξ“)) x0) in fun c : state Ξ“ => Ret' (eval_aux c)) T1_0 x) | inr y => RetF y end with | RetF r => match eval_aux (s_subst Ξ“ (p_app (var (nf_var r)) (nf_obs r) (nf_args r)) Ξ” a) with | inl x => TauF (iter (fun pat : T1 => let 'T1_0 as x0 := pat return (state Ξ” -> itree βˆ…β‚‘ ((fun _ : T1 => state Ξ”) +α΅’ (fun _ : T1 => nf Ξ”)) x0) in fun c : state Ξ” => Ret' (eval_aux c)) T1_0 x) | inr y => RetF y end | TauF t => TauF ((fun pat : T1 => let 'T1_0 as x := pat return (Obs.nf obs_op val_n Ξ“ -> itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”) x) in fun y : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var y)) (nf_obs y) (nf_args y)) Ξ” a)) =<< t) | VisF e k => VisF e (fun r : ex_falso e => (fun pat : T1 => let 'T1_0 as x := pat return (Obs.nf obs_op val_n Ξ“ -> itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”) x) in fun y : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var y)) (nf_obs y) (nf_args y)) Ξ” a)) =<< k r) end
Ξ“: neg_ctx
A0, B: pre_ty pos
v1: whn Ξ“ `+ A0
v2: whn Ξ“ `+ B
c: state (Ξ“ β–Άβ‚“ `+ A0 β–Άβ‚“ `+ B)
Ξ”: neg_ctx
R: relα΅’ (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”)) (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”))
CIH: forall (c : state Ξ“) (a : Ξ“ =[ val_n ]> Ξ”), it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R T1_0 (eval (s_subst Ξ“ c Ξ” a)) (bind_delay' (eval c) (fun n : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var n)) (nf_obs n) (nf_args n)) Ξ” a)))
a: Ξ“ =[ val_n ]> Ξ”

it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R T1_0 (eval (s_subst (Ξ” β–Άβ‚“ `+ A0 β–Άβ‚“ `+ B) (s_subst (Ξ“ β–Άβ‚“ `+ A0 β–Άβ‚“ `+ B) c (Ξ” β–Άβ‚“ `+ A0 β–Άβ‚“ `+ B) (a_shift2 a)) Ξ” β‚‚[ v1 `α΅₯βŠ› a, v2 `α΅₯βŠ› a])) (bind_delay' (eval (s_subst (Ξ“ β–Άβ‚“ `+ A0 β–Άβ‚“ `+ B) c Ξ“ β‚‚[ v1, v2])) (fun y : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var y)) (nf_obs y) (nf_args y)) Ξ” a)))
Ξ“: neg_ctx
A0, B: pre_ty pos
v1: whn Ξ“ `+ A0
v2: whn Ξ“ `+ B
c: state (Ξ“ β–Άβ‚“ `+ A0 β–Άβ‚“ `+ B)
Ξ”: neg_ctx
R: relα΅’ (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”)) (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”))
CIH: forall (c : state Ξ“) (a : Ξ“ =[ val_n ]> Ξ”), it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R T1_0 (eval (s_subst Ξ“ c Ξ” a)) (bind_delay' (eval c) (fun n : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var n)) (nf_obs n) (nf_args n)) Ξ” a)))
a: Ξ“ =[ val_n ]> Ξ”

it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R T1_0 (eval ((c β‚œβŠ› β‚‚[ upg_vp v1, upg_vp v2]) β‚œβŠ› a)) (bind_delay' (eval (s_subst (Ξ“ β–Άβ‚“ `+ A0 β–Άβ‚“ `+ B) c Ξ“ β‚‚[ v1, v2])) (fun y : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var y)) (nf_obs y) (nf_args y)) Ξ” a)))
apply CIH.
Ξ“: neg_ctx
A4, B3: pre_ty pos
v: whn Ξ“ `+ A4
c1: state (Ξ“ β–Άβ‚“ `+ A4)
c2: state (Ξ“ β–Άβ‚“ `+ B3)
Ξ”: neg_ctx
R: relα΅’ (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”)) (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”))
CIH: forall (c : state Ξ“) (a : Ξ“ =[ val_n ]> Ξ”), it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R T1_0 (eval (s_subst Ξ“ c Ξ” a)) (bind_delay' (eval c) (fun n : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var n)) (nf_obs n) (nf_args n)) Ξ” a)))
a: Ξ“ =[ val_n ]> Ξ”

it_eqF βˆ…β‚‘ (fun _ : T1 => nf_eq) (it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R) T1_0 match eval_aux (s_subst Ξ“ (Cut pos (Whn (OrR1 v)) (Whn (OrL c1 c2))) Ξ” a) with | inl x => TauF (iter (fun pat : T1 => let 'T1_0 as x0 := pat return (state Ξ” -> itree βˆ…β‚‘ ((fun _ : T1 => state Ξ”) +α΅’ (fun _ : T1 => nf Ξ”)) x0) in fun c : state Ξ” => Ret' (eval_aux c)) T1_0 x) | inr y => RetF y end match match eval_aux (Cut pos (Whn (OrR1 v)) (Whn (OrL c1 c2))) with | inl x => TauF (iter (fun pat : T1 => let 'T1_0 as x0 := pat return (state Ξ“ -> itree βˆ…β‚‘ ((fun _ : T1 => state Ξ“) +α΅’ (fun _ : T1 => nf Ξ“)) x0) in fun c : state Ξ“ => Ret' (eval_aux c)) T1_0 x) | inr y => RetF y end with | RetF r => match eval_aux (s_subst Ξ“ (p_app (var (nf_var r)) (nf_obs r) (nf_args r)) Ξ” a) with | inl x => TauF (iter (fun pat : T1 => let 'T1_0 as x0 := pat return (state Ξ” -> itree βˆ…β‚‘ ((fun _ : T1 => state Ξ”) +α΅’ (fun _ : T1 => nf Ξ”)) x0) in fun c : state Ξ” => Ret' (eval_aux c)) T1_0 x) | inr y => RetF y end | TauF t => TauF ((fun pat : T1 => let 'T1_0 as x := pat return (Obs.nf obs_op val_n Ξ“ -> itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”) x) in fun y : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var y)) (nf_obs y) (nf_args y)) Ξ” a)) =<< t) | VisF e k => VisF e (fun r : ex_falso e => (fun pat : T1 => let 'T1_0 as x := pat return (Obs.nf obs_op val_n Ξ“ -> itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”) x) in fun y : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var y)) (nf_obs y) (nf_args y)) Ξ” a)) =<< k r) end
Ξ“: neg_ctx
A4, B3: pre_ty pos
v: whn Ξ“ `+ A4
c1: state (Ξ“ β–Άβ‚“ `+ A4)
c2: state (Ξ“ β–Άβ‚“ `+ B3)
Ξ”: neg_ctx
R: relα΅’ (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”)) (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”))
CIH: forall (c : state Ξ“) (a : Ξ“ =[ val_n ]> Ξ”), it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R T1_0 (eval (s_subst Ξ“ c Ξ” a)) (bind_delay' (eval c) (fun n : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var n)) (nf_obs n) (nf_args n)) Ξ” a)))
a: Ξ“ =[ val_n ]> Ξ”

it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R T1_0 (eval (s_subst (Ξ” β–Άβ‚“ `+ A4) (s_subst (Ξ“ β–Άβ‚“ `+ A4) c1 (Ξ” β–Άβ‚“ `+ A4) (a_shift1 a)) Ξ” ₁[ v `α΅₯βŠ› a])) (bind_delay' (eval (s_subst (Ξ“ β–Άβ‚“ `+ A4) c1 Ξ“ ₁[ v])) (fun y : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var y)) (nf_obs y) (nf_args y)) Ξ” a)))
Ξ“: neg_ctx
A4, B3: pre_ty pos
v: whn Ξ“ `+ A4
c1: state (Ξ“ β–Άβ‚“ `+ A4)
c2: state (Ξ“ β–Άβ‚“ `+ B3)
Ξ”: neg_ctx
R: relα΅’ (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”)) (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”))
CIH: forall (c : state Ξ“) (a : Ξ“ =[ val_n ]> Ξ”), it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R T1_0 (eval (s_subst Ξ“ c Ξ” a)) (bind_delay' (eval c) (fun n : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var n)) (nf_obs n) (nf_args n)) Ξ” a)))
a: Ξ“ =[ val_n ]> Ξ”

it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R T1_0 (eval ((c1 β‚œβŠ› ₁[ upg_vp v]) β‚œβŠ› a)) (bind_delay' (eval (s_subst (Ξ“ β–Άβ‚“ `+ A4) c1 Ξ“ ₁[ v])) (fun y : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var y)) (nf_obs y) (nf_args y)) Ξ” a)))
apply CIH.
Ξ“: neg_ctx
A5, B4: pre_ty pos
v: whn Ξ“ `+ B4
c1: state (Ξ“ β–Άβ‚“ `+ A5)
c2: state (Ξ“ β–Άβ‚“ `+ B4)
Ξ”: neg_ctx
R: relα΅’ (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”)) (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”))
CIH: forall (c : state Ξ“) (a : Ξ“ =[ val_n ]> Ξ”), it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R T1_0 (eval (s_subst Ξ“ c Ξ” a)) (bind_delay' (eval c) (fun n : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var n)) (nf_obs n) (nf_args n)) Ξ” a)))
a: Ξ“ =[ val_n ]> Ξ”

it_eqF βˆ…β‚‘ (fun _ : T1 => nf_eq) (it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R) T1_0 match eval_aux (s_subst Ξ“ (Cut pos (Whn (OrR2 v)) (Whn (OrL c1 c2))) Ξ” a) with | inl x => TauF (iter (fun pat : T1 => let 'T1_0 as x0 := pat return (state Ξ” -> itree βˆ…β‚‘ ((fun _ : T1 => state Ξ”) +α΅’ (fun _ : T1 => nf Ξ”)) x0) in fun c : state Ξ” => Ret' (eval_aux c)) T1_0 x) | inr y => RetF y end match match eval_aux (Cut pos (Whn (OrR2 v)) (Whn (OrL c1 c2))) with | inl x => TauF (iter (fun pat : T1 => let 'T1_0 as x0 := pat return (state Ξ“ -> itree βˆ…β‚‘ ((fun _ : T1 => state Ξ“) +α΅’ (fun _ : T1 => nf Ξ“)) x0) in fun c : state Ξ“ => Ret' (eval_aux c)) T1_0 x) | inr y => RetF y end with | RetF r => match eval_aux (s_subst Ξ“ (p_app (var (nf_var r)) (nf_obs r) (nf_args r)) Ξ” a) with | inl x => TauF (iter (fun pat : T1 => let 'T1_0 as x0 := pat return (state Ξ” -> itree βˆ…β‚‘ ((fun _ : T1 => state Ξ”) +α΅’ (fun _ : T1 => nf Ξ”)) x0) in fun c : state Ξ” => Ret' (eval_aux c)) T1_0 x) | inr y => RetF y end | TauF t => TauF ((fun pat : T1 => let 'T1_0 as x := pat return (Obs.nf obs_op val_n Ξ“ -> itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”) x) in fun y : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var y)) (nf_obs y) (nf_args y)) Ξ” a)) =<< t) | VisF e k => VisF e (fun r : ex_falso e => (fun pat : T1 => let 'T1_0 as x := pat return (Obs.nf obs_op val_n Ξ“ -> itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”) x) in fun y : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var y)) (nf_obs y) (nf_args y)) Ξ” a)) =<< k r) end
Ξ“: neg_ctx
A5, B4: pre_ty pos
v: whn Ξ“ `+ B4
c1: state (Ξ“ β–Άβ‚“ `+ A5)
c2: state (Ξ“ β–Άβ‚“ `+ B4)
Ξ”: neg_ctx
R: relα΅’ (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”)) (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”))
CIH: forall (c : state Ξ“) (a : Ξ“ =[ val_n ]> Ξ”), it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R T1_0 (eval (s_subst Ξ“ c Ξ” a)) (bind_delay' (eval c) (fun n : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var n)) (nf_obs n) (nf_args n)) Ξ” a)))
a: Ξ“ =[ val_n ]> Ξ”

it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R T1_0 (eval (s_subst (Ξ” β–Άβ‚“ `+ B4) (s_subst (Ξ“ β–Άβ‚“ `+ B4) c2 (Ξ” β–Άβ‚“ `+ B4) (a_shift1 a)) Ξ” ₁[ v `α΅₯βŠ› a])) (bind_delay' (eval (s_subst (Ξ“ β–Άβ‚“ `+ B4) c2 Ξ“ ₁[ v])) (fun y : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var y)) (nf_obs y) (nf_args y)) Ξ” a)))
Ξ“: neg_ctx
A5, B4: pre_ty pos
v: whn Ξ“ `+ B4
c1: state (Ξ“ β–Άβ‚“ `+ A5)
c2: state (Ξ“ β–Άβ‚“ `+ B4)
Ξ”: neg_ctx
R: relα΅’ (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”)) (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”))
CIH: forall (c : state Ξ“) (a : Ξ“ =[ val_n ]> Ξ”), it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R T1_0 (eval (s_subst Ξ“ c Ξ” a)) (bind_delay' (eval c) (fun n : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var n)) (nf_obs n) (nf_args n)) Ξ” a)))
a: Ξ“ =[ val_n ]> Ξ”

it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R T1_0 (eval ((c2 β‚œβŠ› ₁[ upg_vp v]) β‚œβŠ› a)) (bind_delay' (eval (s_subst (Ξ“ β–Άβ‚“ `+ B4) c2 Ξ“ ₁[ v])) (fun y : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var y)) (nf_obs y) (nf_args y)) Ξ” a)))
apply CIH.
Ξ“: neg_ctx
A10: pre_ty neg
x: term Ξ“ `+ A10
c: state (Ξ“ β–Άβ‚“ `+ A10)
Ξ”: neg_ctx
R: relα΅’ (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”)) (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”))
CIH: forall (c : state Ξ“) (a : Ξ“ =[ val_n ]> Ξ”), it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R T1_0 (eval (s_subst Ξ“ c Ξ” a)) (bind_delay' (eval c) (fun n : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var n)) (nf_obs n) (nf_args n)) Ξ” a)))
a: Ξ“ =[ val_n ]> Ξ”

it_eqF βˆ…β‚‘ (fun _ : T1 => nf_eq) (it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R) T1_0 match eval_aux (s_subst Ξ“ (Cut pos (Whn (ShiftPR x)) (Whn (ShiftPL c))) Ξ” a) with | inl x => TauF (iter (fun pat : T1 => let 'T1_0 as x0 := pat return (state Ξ” -> itree βˆ…β‚‘ ((fun _ : T1 => state Ξ”) +α΅’ (fun _ : T1 => nf Ξ”)) x0) in fun c : state Ξ” => Ret' (eval_aux c)) T1_0 x) | inr y => RetF y end match match eval_aux (Cut pos (Whn (ShiftPR x)) (Whn (ShiftPL c))) with | inl x => TauF (iter (fun pat : T1 => let 'T1_0 as x0 := pat return (state Ξ“ -> itree βˆ…β‚‘ ((fun _ : T1 => state Ξ“) +α΅’ (fun _ : T1 => nf Ξ“)) x0) in fun c : state Ξ“ => Ret' (eval_aux c)) T1_0 x) | inr y => RetF y end with | RetF r => match eval_aux (s_subst Ξ“ (p_app (var (nf_var r)) (nf_obs r) (nf_args r)) Ξ” a) with | inl x => TauF (iter (fun pat : T1 => let 'T1_0 as x0 := pat return (state Ξ” -> itree βˆ…β‚‘ ((fun _ : T1 => state Ξ”) +α΅’ (fun _ : T1 => nf Ξ”)) x0) in fun c : state Ξ” => Ret' (eval_aux c)) T1_0 x) | inr y => RetF y end | TauF t => TauF ((fun pat : T1 => let 'T1_0 as x := pat return (Obs.nf obs_op val_n Ξ“ -> itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”) x) in fun y : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var y)) (nf_obs y) (nf_args y)) Ξ” a)) =<< t) | VisF e k => VisF e (fun r : ex_falso e => (fun pat : T1 => let 'T1_0 as x := pat return (Obs.nf obs_op val_n Ξ“ -> itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”) x) in fun y : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var y)) (nf_obs y) (nf_args y)) Ξ” a)) =<< k r) end
Ξ“: neg_ctx
A10: pre_ty neg
x: term Ξ“ `+ A10
c: state (Ξ“ β–Άβ‚“ `+ A10)
Ξ”: neg_ctx
R: relα΅’ (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”)) (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”))
CIH: forall (c : state Ξ“) (a : Ξ“ =[ val_n ]> Ξ”), it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R T1_0 (eval (s_subst Ξ“ c Ξ” a)) (bind_delay' (eval c) (fun n : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var n)) (nf_obs n) (nf_args n)) Ξ” a)))
a: Ξ“ =[ val_n ]> Ξ”

it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R T1_0 (eval (s_subst (Ξ” β–Άβ‚“ `+ A10) (s_subst (Ξ“ β–Άβ‚“ `+ A10) c (Ξ” β–Άβ‚“ `+ A10) (a_shift1 a)) Ξ” ₁[ x `β‚œβŠ› a])) (bind_delay' (eval (s_subst (Ξ“ β–Άβ‚“ `+ A10) c Ξ“ ₁[ x])) (fun y : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var y)) (nf_obs y) (nf_args y)) Ξ” a)))
Ξ“: neg_ctx
A10: pre_ty neg
x: term Ξ“ `+ A10
c: state (Ξ“ β–Άβ‚“ `+ A10)
Ξ”: neg_ctx
R: relα΅’ (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”)) (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”))
CIH: forall (c : state Ξ“) (a : Ξ“ =[ val_n ]> Ξ”), it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R T1_0 (eval (s_subst Ξ“ c Ξ” a)) (bind_delay' (eval c) (fun n : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var n)) (nf_obs n) (nf_args n)) Ξ” a)))
a: Ξ“ =[ val_n ]> Ξ”

it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R T1_0 (eval ((c β‚œβŠ› ₁[ upg_vn x]) β‚œβŠ› a)) (bind_delay' (eval (s_subst (Ξ“ β–Άβ‚“ `+ A10) c Ξ“ ₁[ x])) (fun y : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var y)) (nf_obs y) (nf_args y)) Ξ” a)))
apply CIH.
Ξ“: neg_ctx
A14: pre_ty neg
k: whn Ξ“ `- A14
c: state (Ξ“ β–Άβ‚“ `- A14)
Ξ”: neg_ctx
R: relα΅’ (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”)) (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”))
CIH: forall (c : state Ξ“) (a : Ξ“ =[ val_n ]> Ξ”), it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R T1_0 (eval (s_subst Ξ“ c Ξ” a)) (bind_delay' (eval c) (fun n : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var n)) (nf_obs n) (nf_args n)) Ξ” a)))
a: Ξ“ =[ val_n ]> Ξ”

it_eqF βˆ…β‚‘ (fun _ : T1 => nf_eq) (it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R) T1_0 match eval_aux (s_subst Ξ“ (Cut pos (Whn (NegPR k)) (Whn (NegPL c))) Ξ” a) with | inl x => TauF (iter (fun pat : T1 => let 'T1_0 as x0 := pat return (state Ξ” -> itree βˆ…β‚‘ ((fun _ : T1 => state Ξ”) +α΅’ (fun _ : T1 => nf Ξ”)) x0) in fun c : state Ξ” => Ret' (eval_aux c)) T1_0 x) | inr y => RetF y end match match eval_aux (Cut pos (Whn (NegPR k)) (Whn (NegPL c))) with | inl x => TauF (iter (fun pat : T1 => let 'T1_0 as x0 := pat return (state Ξ“ -> itree βˆ…β‚‘ ((fun _ : T1 => state Ξ“) +α΅’ (fun _ : T1 => nf Ξ“)) x0) in fun c : state Ξ“ => Ret' (eval_aux c)) T1_0 x) | inr y => RetF y end with | RetF r => match eval_aux (s_subst Ξ“ (p_app (var (nf_var r)) (nf_obs r) (nf_args r)) Ξ” a) with | inl x => TauF (iter (fun pat : T1 => let 'T1_0 as x0 := pat return (state Ξ” -> itree βˆ…β‚‘ ((fun _ : T1 => state Ξ”) +α΅’ (fun _ : T1 => nf Ξ”)) x0) in fun c : state Ξ” => Ret' (eval_aux c)) T1_0 x) | inr y => RetF y end | TauF t => TauF ((fun pat : T1 => let 'T1_0 as x := pat return (Obs.nf obs_op val_n Ξ“ -> itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”) x) in fun y : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var y)) (nf_obs y) (nf_args y)) Ξ” a)) =<< t) | VisF e k => VisF e (fun r : ex_falso e => (fun pat : T1 => let 'T1_0 as x := pat return (Obs.nf obs_op val_n Ξ“ -> itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”) x) in fun y : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var y)) (nf_obs y) (nf_args y)) Ξ” a)) =<< k r) end
Ξ“: neg_ctx
A14: pre_ty neg
k: whn Ξ“ `- A14
c: state (Ξ“ β–Άβ‚“ `- A14)
Ξ”: neg_ctx
R: relα΅’ (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”)) (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”))
CIH: forall (c : state Ξ“) (a : Ξ“ =[ val_n ]> Ξ”), it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R T1_0 (eval (s_subst Ξ“ c Ξ” a)) (bind_delay' (eval c) (fun n : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var n)) (nf_obs n) (nf_args n)) Ξ” a)))
a: Ξ“ =[ val_n ]> Ξ”

it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R T1_0 (eval (s_subst (Ξ” β–Άβ‚“ `- A14) (s_subst (Ξ“ β–Άβ‚“ `- A14) c (Ξ” β–Άβ‚“ `- A14) (a_shift1 a)) Ξ” ₁[ k `α΅₯βŠ› a])) (bind_delay' (eval (s_subst (Ξ“ β–Άβ‚“ `- A14) c Ξ“ ₁[ k])) (fun y : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var y)) (nf_obs y) (nf_args y)) Ξ” a)))
Ξ“: neg_ctx
A14: pre_ty neg
k: whn Ξ“ `- A14
c: state (Ξ“ β–Άβ‚“ `- A14)
Ξ”: neg_ctx
R: relα΅’ (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”)) (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”))
CIH: forall (c : state Ξ“) (a : Ξ“ =[ val_n ]> Ξ”), it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R T1_0 (eval (s_subst Ξ“ c Ξ” a)) (bind_delay' (eval c) (fun n : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var n)) (nf_obs n) (nf_args n)) Ξ” a)))
a: Ξ“ =[ val_n ]> Ξ”

it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R T1_0 (eval ((c β‚œβŠ› ₁[ upg_kn k]) β‚œβŠ› a)) (bind_delay' (eval (s_subst (Ξ“ β–Άβ‚“ `- A14) c Ξ“ ₁[ k])) (fun y : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var y)) (nf_obs y) (nf_args y)) Ξ” a)))
apply CIH.
Ξ“: neg_ctx
A: pre_ty neg
x: term Ξ“ `+ A
c: state (Ξ“ β–Άβ‚“ (`- A) †)
Ξ”: neg_ctx
R: relα΅’ (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”)) (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”))
CIH: forall (c : state Ξ“) (a : Ξ“ =[ val_n ]> Ξ”), it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R T1_0 (eval (s_subst Ξ“ c Ξ” a)) (bind_delay' (eval c) (fun n : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var n)) (nf_obs n) (nf_args n)) Ξ” a)))
a: Ξ“ =[ val_n ]> Ξ”

it_eqF βˆ…β‚‘ (fun _ : T1 => nf_eq) (it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R) T1_0 match eval_aux (s_subst Ξ“ (Cut neg x (Mu c)) Ξ” a) with | inl x => TauF (iter (fun pat : T1 => let 'T1_0 as x0 := pat return (state Ξ” -> itree βˆ…β‚‘ ((fun _ : T1 => state Ξ”) +α΅’ (fun _ : T1 => nf Ξ”)) x0) in fun c : state Ξ” => Ret' (eval_aux c)) T1_0 x) | inr y => RetF y end match match eval_aux (Cut neg x (Mu c)) with | inl x => TauF (iter (fun pat : T1 => let 'T1_0 as x0 := pat return (state Ξ“ -> itree βˆ…β‚‘ ((fun _ : T1 => state Ξ“) +α΅’ (fun _ : T1 => nf Ξ“)) x0) in fun c : state Ξ“ => Ret' (eval_aux c)) T1_0 x) | inr y => RetF y end with | RetF r => match eval_aux (s_subst Ξ“ (p_app (var (nf_var r)) (nf_obs r) (nf_args r)) Ξ” a) with | inl x => TauF (iter (fun pat : T1 => let 'T1_0 as x0 := pat return (state Ξ” -> itree βˆ…β‚‘ ((fun _ : T1 => state Ξ”) +α΅’ (fun _ : T1 => nf Ξ”)) x0) in fun c : state Ξ” => Ret' (eval_aux c)) T1_0 x) | inr y => RetF y end | TauF t => TauF ((fun pat : T1 => let 'T1_0 as x := pat return (Obs.nf obs_op val_n Ξ“ -> itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”) x) in fun y : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var y)) (nf_obs y) (nf_args y)) Ξ” a)) =<< t) | VisF e k => VisF e (fun r : ex_falso e => (fun pat : T1 => let 'T1_0 as x := pat return (Obs.nf obs_op val_n Ξ“ -> itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”) x) in fun y : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var y)) (nf_obs y) (nf_args y)) Ξ” a)) =<< k r) end
Ξ“: neg_ctx
A: pre_ty neg
x: term Ξ“ `+ A
c: state (Ξ“ β–Άβ‚“ (`- A) †)
Ξ”: neg_ctx
R: relα΅’ (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”)) (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”))
CIH: forall (c : state Ξ“) (a : Ξ“ =[ val_n ]> Ξ”), it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R T1_0 (eval (s_subst Ξ“ c Ξ” a)) (bind_delay' (eval c) (fun n : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var n)) (nf_obs n) (nf_args n)) Ξ” a)))
a: Ξ“ =[ val_n ]> Ξ”

it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R T1_0 (eval (s_subst (Ξ” β–Άβ‚“ `+ A) (s_subst (Ξ“ β–Άβ‚“ `+ A) c (Ξ” β–Άβ‚“ `+ A) (a_shift1 a)) Ξ” ₁[ x `β‚œβŠ› a])) (bind_delay' (eval (s_subst (Ξ“ β–Άβ‚“ `+ A) c Ξ“ ₁[ x])) (fun y : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var y)) (nf_obs y) (nf_args y)) Ξ” a)))
Ξ“: neg_ctx
A: pre_ty neg
x: term Ξ“ `+ A
c: state (Ξ“ β–Άβ‚“ (`- A) †)
Ξ”: neg_ctx
R: relα΅’ (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”)) (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”))
CIH: forall (c : state Ξ“) (a : Ξ“ =[ val_n ]> Ξ”), it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R T1_0 (eval (s_subst Ξ“ c Ξ” a)) (bind_delay' (eval c) (fun n : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var n)) (nf_obs n) (nf_args n)) Ξ” a)))
a: Ξ“ =[ val_n ]> Ξ”

it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R T1_0 (eval ((c β‚œβŠ› ₁[ upg_vn x]) β‚œβŠ› a)) (bind_delay' (eval (s_subst (Ξ“ β–Άβ‚“ `+ A) c Ξ“ ₁[ x])) (fun y : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var y)) (nf_obs y) (nf_args y)) Ξ” a)))
apply CIH.
Ξ“: neg_ctx
A: pre_ty neg
c: state (Ξ“ β–Άβ‚“ (`+ A) †)
k: whn Ξ“ `- A
Ξ”: neg_ctx
R: relα΅’ (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”)) (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”))
CIH: forall (c : state Ξ“) (a : Ξ“ =[ val_n ]> Ξ”), it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R T1_0 (eval (s_subst Ξ“ c Ξ” a)) (bind_delay' (eval c) (fun n : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var n)) (nf_obs n) (nf_args n)) Ξ” a)))
a: Ξ“ =[ val_n ]> Ξ”

it_eqF βˆ…β‚‘ (fun _ : T1 => nf_eq) (it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R) T1_0 match eval_aux (s_subst Ξ“ (Cut neg (Mu c) (Whn k)) Ξ” a) with | inl x => TauF (iter (fun pat : T1 => let 'T1_0 as x0 := pat return (state Ξ” -> itree βˆ…β‚‘ ((fun _ : T1 => state Ξ”) +α΅’ (fun _ : T1 => nf Ξ”)) x0) in fun c : state Ξ” => Ret' (eval_aux c)) T1_0 x) | inr y => RetF y end match match eval_aux (Cut neg (Mu c) (Whn k)) with | inl x => TauF (iter (fun pat : T1 => let 'T1_0 as x0 := pat return (state Ξ“ -> itree βˆ…β‚‘ ((fun _ : T1 => state Ξ“) +α΅’ (fun _ : T1 => nf Ξ“)) x0) in fun c : state Ξ“ => Ret' (eval_aux c)) T1_0 x) | inr y => RetF y end with | RetF r => match eval_aux (s_subst Ξ“ (p_app (var (nf_var r)) (nf_obs r) (nf_args r)) Ξ” a) with | inl x => TauF (iter (fun pat : T1 => let 'T1_0 as x0 := pat return (state Ξ” -> itree βˆ…β‚‘ ((fun _ : T1 => state Ξ”) +α΅’ (fun _ : T1 => nf Ξ”)) x0) in fun c : state Ξ” => Ret' (eval_aux c)) T1_0 x) | inr y => RetF y end | TauF t => TauF ((fun pat : T1 => let 'T1_0 as x := pat return (Obs.nf obs_op val_n Ξ“ -> itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”) x) in fun y : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var y)) (nf_obs y) (nf_args y)) Ξ” a)) =<< t) | VisF e k => VisF e (fun r : ex_falso e => (fun pat : T1 => let 'T1_0 as x := pat return (Obs.nf obs_op val_n Ξ“ -> itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”) x) in fun y : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var y)) (nf_obs y) (nf_args y)) Ξ” a)) =<< k r) end
Ξ“: neg_ctx
A: pre_ty neg
c: state (Ξ“ β–Άβ‚“ (`+ A) †)
k: whn Ξ“ `- A
Ξ”: neg_ctx
R: relα΅’ (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”)) (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”))
CIH: forall (c : state Ξ“) (a : Ξ“ =[ val_n ]> Ξ”), it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R T1_0 (eval (s_subst Ξ“ c Ξ” a)) (bind_delay' (eval c) (fun n : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var n)) (nf_obs n) (nf_args n)) Ξ” a)))
a: Ξ“ =[ val_n ]> Ξ”

it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R T1_0 (eval (s_subst (Ξ” β–Άβ‚“ `- A) (s_subst (Ξ“ β–Άβ‚“ `- A) c (Ξ” β–Άβ‚“ `- A) (a_shift1 a)) Ξ” ₁[ k `α΅₯βŠ› a])) (bind_delay' (eval (s_subst (Ξ“ β–Άβ‚“ `- A) c Ξ“ ₁[ k])) (fun y : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var y)) (nf_obs y) (nf_args y)) Ξ” a)))
Ξ“: neg_ctx
A: pre_ty neg
c: state (Ξ“ β–Άβ‚“ (`+ A) †)
k: whn Ξ“ `- A
Ξ”: neg_ctx
R: relα΅’ (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”)) (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”))
CIH: forall (c : state Ξ“) (a : Ξ“ =[ val_n ]> Ξ”), it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R T1_0 (eval (s_subst Ξ“ c Ξ” a)) (bind_delay' (eval c) (fun n : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var n)) (nf_obs n) (nf_args n)) Ξ” a)))
a: Ξ“ =[ val_n ]> Ξ”

it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R T1_0 (eval ((c β‚œβŠ› ₁[ upg_kn k]) β‚œβŠ› a)) (bind_delay' (eval (s_subst (Ξ“ β–Άβ‚“ `- A) c Ξ“ ₁[ k])) (fun y : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var y)) (nf_obs y) (nf_args y)) Ξ” a)))
apply CIH.
Ξ“: neg_ctx
A2: pre_ty neg
t: term (Ξ“ β–Άβ‚“ `+ A2) `+ A2
k: whn Ξ“ `- A2
Ξ”: neg_ctx
R: relα΅’ (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”)) (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”))
CIH: forall (c : state Ξ“) (a : Ξ“ =[ val_n ]> Ξ”), it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R T1_0 (eval (s_subst Ξ“ c Ξ” a)) (bind_delay' (eval c) (fun n : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var n)) (nf_obs n) (nf_args n)) Ξ” a)))
a: Ξ“ =[ val_n ]> Ξ”

it_eqF βˆ…β‚‘ (fun _ : T1 => nf_eq) (it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R) T1_0 match eval_aux (s_subst Ξ“ (Cut neg (RecR t) (Whn k)) Ξ” a) with | inl x => TauF (iter (fun pat : T1 => let 'T1_0 as x0 := pat return (state Ξ” -> itree βˆ…β‚‘ ((fun _ : T1 => state Ξ”) +α΅’ (fun _ : T1 => nf Ξ”)) x0) in fun c : state Ξ” => Ret' (eval_aux c)) T1_0 x) | inr y => RetF y end match match eval_aux (Cut neg (RecR t) (Whn k)) with | inl x => TauF (iter (fun pat : T1 => let 'T1_0 as x0 := pat return (state Ξ“ -> itree βˆ…β‚‘ ((fun _ : T1 => state Ξ“) +α΅’ (fun _ : T1 => nf Ξ“)) x0) in fun c : state Ξ“ => Ret' (eval_aux c)) T1_0 x) | inr y => RetF y end with | RetF r => match eval_aux (s_subst Ξ“ (p_app (var (nf_var r)) (nf_obs r) (nf_args r)) Ξ” a) with | inl x => TauF (iter (fun pat : T1 => let 'T1_0 as x0 := pat return (state Ξ” -> itree βˆ…β‚‘ ((fun _ : T1 => state Ξ”) +α΅’ (fun _ : T1 => nf Ξ”)) x0) in fun c : state Ξ” => Ret' (eval_aux c)) T1_0 x) | inr y => RetF y end | TauF t => TauF ((fun pat : T1 => let 'T1_0 as x := pat return (Obs.nf obs_op val_n Ξ“ -> itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”) x) in fun y : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var y)) (nf_obs y) (nf_args y)) Ξ” a)) =<< t) | VisF e k => VisF e (fun r : ex_falso e => (fun pat : T1 => let 'T1_0 as x := pat return (Obs.nf obs_op val_n Ξ“ -> itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”) x) in fun y : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var y)) (nf_obs y) (nf_args y)) Ξ” a)) =<< k r) end
Ξ“: neg_ctx
A2: pre_ty neg
t: term (Ξ“ β–Άβ‚“ `+ A2) `+ A2
k: whn Ξ“ `- A2
Ξ”: neg_ctx
R: relα΅’ (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”)) (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”))
CIH: forall (c : state Ξ“) (a : Ξ“ =[ val_n ]> Ξ”), it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R T1_0 (eval (s_subst Ξ“ c Ξ” a)) (bind_delay' (eval c) (fun n : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var n)) (nf_obs n) (nf_args n)) Ξ” a)))
a: Ξ“ =[ val_n ]> Ξ”

it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R T1_0 (eval (Cut neg ((t `β‚œβŠ› a_shift1 a) `β‚œβŠ› ₁[ RecR (t `β‚œβŠ› a_shift1 a)]) (Whn (k `α΅₯βŠ› a)))) (bind_delay' (eval (Cut neg (t `β‚œβŠ› ₁[ RecR t]) (Whn k))) (fun y : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var y)) (nf_obs y) (nf_args y)) Ξ” a)))
Ξ“: neg_ctx
A2: pre_ty neg
t: term (Ξ“ β–Άβ‚“ `+ A2) `+ A2
k: whn Ξ“ `- A2
Ξ”: neg_ctx
R: relα΅’ (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”)) (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”))
CIH: forall (c : state Ξ“) (a : Ξ“ =[ val_n ]> Ξ”), it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R T1_0 (eval (s_subst Ξ“ c Ξ” a)) (bind_delay' (eval c) (fun n : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var n)) (nf_obs n) (nf_args n)) Ξ” a)))
a: Ξ“ =[ val_n ]> Ξ”

it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R T1_0 (eval (Cut neg ((t `β‚œβŠ› ₁[ upg_vn (RecR t)]) `β‚œβŠ› a) (Whn (k `α΅₯βŠ› a)))) (bind_delay' (eval (Cut neg (t `β‚œβŠ› ₁[ RecR t]) (Whn k))) (fun y : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var y)) (nf_obs y) (nf_args y)) Ξ” a)))
apply CIH.
Ξ“: neg_ctx
A: pre_ty neg
i: Ξ“ βˆ‹ `+ A
k: whn Ξ“ `- A
Ξ”: neg_ctx
R: relα΅’ (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”)) (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”))
CIH: forall (c : state Ξ“) (a : Ξ“ =[ val_n ]> Ξ”), it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R T1_0 (eval (s_subst Ξ“ c Ξ” a)) (bind_delay' (eval c) (fun n : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var n)) (nf_obs n) (nf_args n)) Ξ” a)))
a: Ξ“ =[ val_n ]> Ξ”

it_eqF βˆ…β‚‘ (fun _ : T1 => nf_eq) (it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R) T1_0 match eval_aux (s_subst Ξ“ (Cut neg (Whn (Var i)) (Whn k)) Ξ” a) with | inl x => TauF (iter (fun pat : T1 => let 'T1_0 as x0 := pat return (state Ξ” -> itree βˆ…β‚‘ ((fun _ : T1 => state Ξ”) +α΅’ (fun _ : T1 => nf Ξ”)) x0) in fun c : state Ξ” => Ret' (eval_aux c)) T1_0 x) | inr y => RetF y end match match eval_aux (Cut neg (Whn (Var i)) (Whn k)) with | inl x => TauF (iter (fun pat : T1 => let 'T1_0 as x0 := pat return (state Ξ“ -> itree βˆ…β‚‘ ((fun _ : T1 => state Ξ“) +α΅’ (fun _ : T1 => nf Ξ“)) x0) in fun c : state Ξ“ => Ret' (eval_aux c)) T1_0 x) | inr y => RetF y end with | RetF r => match eval_aux (s_subst Ξ“ (p_app (var (nf_var r)) (nf_obs r) (nf_args r)) Ξ” a) with | inl x => TauF (iter (fun pat : T1 => let 'T1_0 as x0 := pat return (state Ξ” -> itree βˆ…β‚‘ ((fun _ : T1 => state Ξ”) +α΅’ (fun _ : T1 => nf Ξ”)) x0) in fun c : state Ξ” => Ret' (eval_aux c)) T1_0 x) | inr y => RetF y end | TauF t => TauF ((fun pat : T1 => let 'T1_0 as x := pat return (Obs.nf obs_op val_n Ξ“ -> itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”) x) in fun y : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var y)) (nf_obs y) (nf_args y)) Ξ” a)) =<< t) | VisF e k => VisF e (fun r : ex_falso e => (fun pat : T1 => let 'T1_0 as x := pat return (Obs.nf obs_op val_n Ξ“ -> itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”) x) in fun y : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var y)) (nf_obs y) (nf_args y)) Ξ” a)) =<< k r) end
Ξ“: neg_ctx
A: pre_ty neg
i: Ξ“ βˆ‹ `+ A
k: whn Ξ“ `- A
Ξ”: neg_ctx
R: relα΅’ (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”)) (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”))
CIH: forall (c : state Ξ“) (a : Ξ“ =[ val_n ]> Ξ”), it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R T1_0 (eval (s_subst Ξ“ c Ξ” a)) (bind_delay' (eval c) (fun n : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var n)) (nf_obs n) (nf_args n)) Ξ” a)))
a: Ξ“ =[ val_n ]> Ξ”

it_eq_map βˆ…β‚‘ (fun _ : T1 => nf_eq) (it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R) T1_0 (eval (Cut neg (a `+ A i) (Whn (k `α΅₯βŠ› a)))) (eval (Cut neg (var (s_var_upg i) `β‚œβŠ› a) (Whn ((p_of_w_0n A k `α΅₯βŠ› nf_args (s_var_upg i β‹… v_split_n k)) `α΅₯βŠ› a))))
Ξ“: neg_ctx
A: pre_ty neg
i: Ξ“ βˆ‹ `+ A
k: whn Ξ“ `- A
Ξ”: neg_ctx
R: relα΅’ (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”)) (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”))
CIH: forall (c : state Ξ“) (a : Ξ“ =[ val_n ]> Ξ”), it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R T1_0 (eval (s_subst Ξ“ c Ξ” a)) (bind_delay' (eval c) (fun n : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var n)) (nf_obs n) (nf_args n)) Ξ” a)))
a: Ξ“ =[ val_n ]> Ξ”

it_eq_map βˆ…β‚‘ (fun _ : T1 => nf_eq) (it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R) T1_0 (eval (Cut neg (a `+ A i) (Whn (k `α΅₯βŠ› a)))) (eval (Cut neg (var (s_var_upg i) `β‚œβŠ› a) (Whn ((p_of_w_0n A k `α΅₯βŠ› p_dom_of_w_0n A k) `α΅₯βŠ› a))))
now rewrite (refold_id_aux A k).
Ξ“: neg_ctx
c: state Ξ“
Ξ”: neg_ctx
R: relα΅’ (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”)) (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”))
CIH: forall (c : state Ξ“) (a : Ξ“ =[ val_n ]> Ξ”), it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R T1_0 (eval (s_subst Ξ“ c Ξ” a)) (bind_delay' (eval c) (fun n : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var n)) (nf_obs n) (nf_args n)) Ξ” a)))
a: Ξ“ =[ val_n ]> Ξ”

it_eqF βˆ…β‚‘ (fun _ : T1 => nf_eq) (it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R) T1_0 match eval_aux (s_subst Ξ“ (Cut neg (Whn (BotR c)) (Whn BotL)) Ξ” a) with | inl x => TauF (iter (fun pat : T1 => let 'T1_0 as x0 := pat return (state Ξ” -> itree βˆ…β‚‘ ((fun _ : T1 => state Ξ”) +α΅’ (fun _ : T1 => nf Ξ”)) x0) in fun c : state Ξ” => Ret' (eval_aux c)) T1_0 x) | inr y => RetF y end match match eval_aux (Cut neg (Whn (BotR c)) (Whn BotL)) with | inl x => TauF (iter (fun pat : T1 => let 'T1_0 as x0 := pat return (state Ξ“ -> itree βˆ…β‚‘ ((fun _ : T1 => state Ξ“) +α΅’ (fun _ : T1 => nf Ξ“)) x0) in fun c : state Ξ“ => Ret' (eval_aux c)) T1_0 x) | inr y => RetF y end with | RetF r => match eval_aux (s_subst Ξ“ (p_app (var (nf_var r)) (nf_obs r) (nf_args r)) Ξ” a) with | inl x => TauF (iter (fun pat : T1 => let 'T1_0 as x0 := pat return (state Ξ” -> itree βˆ…β‚‘ ((fun _ : T1 => state Ξ”) +α΅’ (fun _ : T1 => nf Ξ”)) x0) in fun c : state Ξ” => Ret' (eval_aux c)) T1_0 x) | inr y => RetF y end | TauF t => TauF ((fun pat : T1 => let 'T1_0 as x := pat return (Obs.nf obs_op val_n Ξ“ -> itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”) x) in fun y : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var y)) (nf_obs y) (nf_args y)) Ξ” a)) =<< t) | VisF e k => VisF e (fun r : ex_falso e => (fun pat : T1 => let 'T1_0 as x := pat return (Obs.nf obs_op val_n Ξ“ -> itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”) x) in fun y : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var y)) (nf_obs y) (nf_args y)) Ξ” a)) =<< k r) end
cbn; econstructor; refold_eval; apply CIH.
Ξ“: neg_ctx
A4, B3: pre_ty neg
c: state (Ξ“ β–Άβ‚“ `- A4 β–Άβ‚“ `- B3)
k1: whn Ξ“ `- A4
k2: whn Ξ“ `- B3
Ξ”: neg_ctx
R: relα΅’ (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”)) (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”))
CIH: forall (c : state Ξ“) (a : Ξ“ =[ val_n ]> Ξ”), it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R T1_0 (eval (s_subst Ξ“ c Ξ” a)) (bind_delay' (eval c) (fun n : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var n)) (nf_obs n) (nf_args n)) Ξ” a)))
a: Ξ“ =[ val_n ]> Ξ”

it_eqF βˆ…β‚‘ (fun _ : T1 => nf_eq) (it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R) T1_0 match eval_aux (s_subst Ξ“ (Cut neg (Whn (ParR c)) (Whn (ParL k1 k2))) Ξ” a) with | inl x => TauF (iter (fun pat : T1 => let 'T1_0 as x0 := pat return (state Ξ” -> itree βˆ…β‚‘ ((fun _ : T1 => state Ξ”) +α΅’ (fun _ : T1 => nf Ξ”)) x0) in fun c : state Ξ” => Ret' (eval_aux c)) T1_0 x) | inr y => RetF y end match match eval_aux (Cut neg (Whn (ParR c)) (Whn (ParL k1 k2))) with | inl x => TauF (iter (fun pat : T1 => let 'T1_0 as x0 := pat return (state Ξ“ -> itree βˆ…β‚‘ ((fun _ : T1 => state Ξ“) +α΅’ (fun _ : T1 => nf Ξ“)) x0) in fun c : state Ξ“ => Ret' (eval_aux c)) T1_0 x) | inr y => RetF y end with | RetF r => match eval_aux (s_subst Ξ“ (p_app (var (nf_var r)) (nf_obs r) (nf_args r)) Ξ” a) with | inl x => TauF (iter (fun pat : T1 => let 'T1_0 as x0 := pat return (state Ξ” -> itree βˆ…β‚‘ ((fun _ : T1 => state Ξ”) +α΅’ (fun _ : T1 => nf Ξ”)) x0) in fun c : state Ξ” => Ret' (eval_aux c)) T1_0 x) | inr y => RetF y end | TauF t => TauF ((fun pat : T1 => let 'T1_0 as x := pat return (Obs.nf obs_op val_n Ξ“ -> itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”) x) in fun y : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var y)) (nf_obs y) (nf_args y)) Ξ” a)) =<< t) | VisF e k => VisF e (fun r : ex_falso e => (fun pat : T1 => let 'T1_0 as x := pat return (Obs.nf obs_op val_n Ξ“ -> itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”) x) in fun y : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var y)) (nf_obs y) (nf_args y)) Ξ” a)) =<< k r) end
Ξ“: neg_ctx
A4, B3: pre_ty neg
c: state (Ξ“ β–Άβ‚“ `- A4 β–Άβ‚“ `- B3)
k1: whn Ξ“ `- A4
k2: whn Ξ“ `- B3
Ξ”: neg_ctx
R: relα΅’ (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”)) (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”))
CIH: forall (c : state Ξ“) (a : Ξ“ =[ val_n ]> Ξ”), it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R T1_0 (eval (s_subst Ξ“ c Ξ” a)) (bind_delay' (eval c) (fun n : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var n)) (nf_obs n) (nf_args n)) Ξ” a)))
a: Ξ“ =[ val_n ]> Ξ”

it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R T1_0 (eval (s_subst (Ξ” β–Άβ‚“ `- A4 β–Άβ‚“ `- B3) (s_subst (Ξ“ β–Άβ‚“ `- A4 β–Άβ‚“ `- B3) c (Ξ” β–Άβ‚“ `- A4 β–Άβ‚“ `- B3) (a_shift2 a)) Ξ” β‚‚[ k1 `α΅₯βŠ› a, k2 `α΅₯βŠ› a])) (bind_delay' (eval (s_subst (Ξ“ β–Άβ‚“ `- A4 β–Άβ‚“ `- B3) c Ξ“ β‚‚[ k1, k2])) (fun y : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var y)) (nf_obs y) (nf_args y)) Ξ” a)))
Ξ“: neg_ctx
A4, B3: pre_ty neg
c: state (Ξ“ β–Άβ‚“ `- A4 β–Άβ‚“ `- B3)
k1: whn Ξ“ `- A4
k2: whn Ξ“ `- B3
Ξ”: neg_ctx
R: relα΅’ (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”)) (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”))
CIH: forall (c : state Ξ“) (a : Ξ“ =[ val_n ]> Ξ”), it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R T1_0 (eval (s_subst Ξ“ c Ξ” a)) (bind_delay' (eval c) (fun n : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var n)) (nf_obs n) (nf_args n)) Ξ” a)))
a: Ξ“ =[ val_n ]> Ξ”

it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R T1_0 (eval ((c β‚œβŠ› β‚‚[ upg_kn k1, upg_kn k2]) β‚œβŠ› a)) (bind_delay' (eval (s_subst (Ξ“ β–Άβ‚“ `- A4 β–Άβ‚“ `- B3) c Ξ“ β‚‚[ k1, k2])) (fun y : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var y)) (nf_obs y) (nf_args y)) Ξ” a)))
apply CIH.
Ξ“: neg_ctx
A9, B8: pre_ty neg
c1: state (Ξ“ β–Άβ‚“ `- A9)
c2: state (Ξ“ β–Άβ‚“ `- B8)
k: whn Ξ“ `- A9
Ξ”: neg_ctx
R: relα΅’ (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”)) (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”))
CIH: forall (c : state Ξ“) (a : Ξ“ =[ val_n ]> Ξ”), it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R T1_0 (eval (s_subst Ξ“ c Ξ” a)) (bind_delay' (eval c) (fun n : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var n)) (nf_obs n) (nf_args n)) Ξ” a)))
a: Ξ“ =[ val_n ]> Ξ”

it_eqF βˆ…β‚‘ (fun _ : T1 => nf_eq) (it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R) T1_0 match eval_aux (s_subst Ξ“ (Cut neg (Whn (AndR c1 c2)) (Whn (AndL1 k))) Ξ” a) with | inl x => TauF (iter (fun pat : T1 => let 'T1_0 as x0 := pat return (state Ξ” -> itree βˆ…β‚‘ ((fun _ : T1 => state Ξ”) +α΅’ (fun _ : T1 => nf Ξ”)) x0) in fun c : state Ξ” => Ret' (eval_aux c)) T1_0 x) | inr y => RetF y end match match eval_aux (Cut neg (Whn (AndR c1 c2)) (Whn (AndL1 k))) with | inl x => TauF (iter (fun pat : T1 => let 'T1_0 as x0 := pat return (state Ξ“ -> itree βˆ…β‚‘ ((fun _ : T1 => state Ξ“) +α΅’ (fun _ : T1 => nf Ξ“)) x0) in fun c : state Ξ“ => Ret' (eval_aux c)) T1_0 x) | inr y => RetF y end with | RetF r => match eval_aux (s_subst Ξ“ (p_app (var (nf_var r)) (nf_obs r) (nf_args r)) Ξ” a) with | inl x => TauF (iter (fun pat : T1 => let 'T1_0 as x0 := pat return (state Ξ” -> itree βˆ…β‚‘ ((fun _ : T1 => state Ξ”) +α΅’ (fun _ : T1 => nf Ξ”)) x0) in fun c : state Ξ” => Ret' (eval_aux c)) T1_0 x) | inr y => RetF y end | TauF t => TauF ((fun pat : T1 => let 'T1_0 as x := pat return (Obs.nf obs_op val_n Ξ“ -> itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”) x) in fun y : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var y)) (nf_obs y) (nf_args y)) Ξ” a)) =<< t) | VisF e k => VisF e (fun r : ex_falso e => (fun pat : T1 => let 'T1_0 as x := pat return (Obs.nf obs_op val_n Ξ“ -> itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”) x) in fun y : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var y)) (nf_obs y) (nf_args y)) Ξ” a)) =<< k r) end
Ξ“: neg_ctx
A9, B8: pre_ty neg
c1: state (Ξ“ β–Άβ‚“ `- A9)
c2: state (Ξ“ β–Άβ‚“ `- B8)
k: whn Ξ“ `- A9
Ξ”: neg_ctx
R: relα΅’ (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”)) (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”))
CIH: forall (c : state Ξ“) (a : Ξ“ =[ val_n ]> Ξ”), it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R T1_0 (eval (s_subst Ξ“ c Ξ” a)) (bind_delay' (eval c) (fun n : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var n)) (nf_obs n) (nf_args n)) Ξ” a)))
a: Ξ“ =[ val_n ]> Ξ”

it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R T1_0 (eval (s_subst (Ξ” β–Άβ‚“ `- A9) (s_subst (Ξ“ β–Άβ‚“ `- A9) c1 (Ξ” β–Άβ‚“ `- A9) (a_shift1 a)) Ξ” ₁[ k `α΅₯βŠ› a])) (bind_delay' (eval (s_subst (Ξ“ β–Άβ‚“ `- A9) c1 Ξ“ ₁[ k])) (fun y : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var y)) (nf_obs y) (nf_args y)) Ξ” a)))
Ξ“: neg_ctx
A9, B8: pre_ty neg
c1: state (Ξ“ β–Άβ‚“ `- A9)
c2: state (Ξ“ β–Άβ‚“ `- B8)
k: whn Ξ“ `- A9
Ξ”: neg_ctx
R: relα΅’ (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”)) (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”))
CIH: forall (c : state Ξ“) (a : Ξ“ =[ val_n ]> Ξ”), it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R T1_0 (eval (s_subst Ξ“ c Ξ” a)) (bind_delay' (eval c) (fun n : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var n)) (nf_obs n) (nf_args n)) Ξ” a)))
a: Ξ“ =[ val_n ]> Ξ”

it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R T1_0 (eval ((c1 β‚œβŠ› ₁[ upg_kn k]) β‚œβŠ› a)) (bind_delay' (eval (s_subst (Ξ“ β–Άβ‚“ `- A9) c1 Ξ“ ₁[ k])) (fun y : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var y)) (nf_obs y) (nf_args y)) Ξ” a)))
apply CIH.
Ξ“: neg_ctx
A10, B9: pre_ty neg
c1: state (Ξ“ β–Άβ‚“ `- A10)
c2: state (Ξ“ β–Άβ‚“ `- B9)
k: whn Ξ“ `- B9
Ξ”: neg_ctx
R: relα΅’ (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”)) (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”))
CIH: forall (c : state Ξ“) (a : Ξ“ =[ val_n ]> Ξ”), it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R T1_0 (eval (s_subst Ξ“ c Ξ” a)) (bind_delay' (eval c) (fun n : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var n)) (nf_obs n) (nf_args n)) Ξ” a)))
a: Ξ“ =[ val_n ]> Ξ”

it_eqF βˆ…β‚‘ (fun _ : T1 => nf_eq) (it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R) T1_0 match eval_aux (s_subst Ξ“ (Cut neg (Whn (AndR c1 c2)) (Whn (AndL2 k))) Ξ” a) with | inl x => TauF (iter (fun pat : T1 => let 'T1_0 as x0 := pat return (state Ξ” -> itree βˆ…β‚‘ ((fun _ : T1 => state Ξ”) +α΅’ (fun _ : T1 => nf Ξ”)) x0) in fun c : state Ξ” => Ret' (eval_aux c)) T1_0 x) | inr y => RetF y end match match eval_aux (Cut neg (Whn (AndR c1 c2)) (Whn (AndL2 k))) with | inl x => TauF (iter (fun pat : T1 => let 'T1_0 as x0 := pat return (state Ξ“ -> itree βˆ…β‚‘ ((fun _ : T1 => state Ξ“) +α΅’ (fun _ : T1 => nf Ξ“)) x0) in fun c : state Ξ“ => Ret' (eval_aux c)) T1_0 x) | inr y => RetF y end with | RetF r => match eval_aux (s_subst Ξ“ (p_app (var (nf_var r)) (nf_obs r) (nf_args r)) Ξ” a) with | inl x => TauF (iter (fun pat : T1 => let 'T1_0 as x0 := pat return (state Ξ” -> itree βˆ…β‚‘ ((fun _ : T1 => state Ξ”) +α΅’ (fun _ : T1 => nf Ξ”)) x0) in fun c : state Ξ” => Ret' (eval_aux c)) T1_0 x) | inr y => RetF y end | TauF t => TauF ((fun pat : T1 => let 'T1_0 as x := pat return (Obs.nf obs_op val_n Ξ“ -> itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”) x) in fun y : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var y)) (nf_obs y) (nf_args y)) Ξ” a)) =<< t) | VisF e k => VisF e (fun r : ex_falso e => (fun pat : T1 => let 'T1_0 as x := pat return (Obs.nf obs_op val_n Ξ“ -> itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”) x) in fun y : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var y)) (nf_obs y) (nf_args y)) Ξ” a)) =<< k r) end
Ξ“: neg_ctx
A10, B9: pre_ty neg
c1: state (Ξ“ β–Άβ‚“ `- A10)
c2: state (Ξ“ β–Άβ‚“ `- B9)
k: whn Ξ“ `- B9
Ξ”: neg_ctx
R: relα΅’ (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”)) (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”))
CIH: forall (c : state Ξ“) (a : Ξ“ =[ val_n ]> Ξ”), it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R T1_0 (eval (s_subst Ξ“ c Ξ” a)) (bind_delay' (eval c) (fun n : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var n)) (nf_obs n) (nf_args n)) Ξ” a)))
a: Ξ“ =[ val_n ]> Ξ”

it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R T1_0 (eval (s_subst (Ξ” β–Άβ‚“ `- B9) (s_subst (Ξ“ β–Άβ‚“ `- B9) c2 (Ξ” β–Άβ‚“ `- B9) (a_shift1 a)) Ξ” ₁[ k `α΅₯βŠ› a])) (bind_delay' (eval (s_subst (Ξ“ β–Άβ‚“ `- B9) c2 Ξ“ ₁[ k])) (fun y : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var y)) (nf_obs y) (nf_args y)) Ξ” a)))
Ξ“: neg_ctx
A10, B9: pre_ty neg
c1: state (Ξ“ β–Άβ‚“ `- A10)
c2: state (Ξ“ β–Άβ‚“ `- B9)
k: whn Ξ“ `- B9
Ξ”: neg_ctx
R: relα΅’ (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”)) (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”))
CIH: forall (c : state Ξ“) (a : Ξ“ =[ val_n ]> Ξ”), it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R T1_0 (eval (s_subst Ξ“ c Ξ” a)) (bind_delay' (eval c) (fun n : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var n)) (nf_obs n) (nf_args n)) Ξ” a)))
a: Ξ“ =[ val_n ]> Ξ”

it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R T1_0 (eval ((c2 β‚œβŠ› ₁[ upg_kn k]) β‚œβŠ› a)) (bind_delay' (eval (s_subst (Ξ“ β–Άβ‚“ `- B9) c2 Ξ“ ₁[ k])) (fun y : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var y)) (nf_obs y) (nf_args y)) Ξ” a)))
apply CIH.
Ξ“: neg_ctx
A14: pre_ty pos
c: state (Ξ“ β–Άβ‚“ `- A14)
x: term Ξ“ `- A14
Ξ”: neg_ctx
R: relα΅’ (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”)) (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”))
CIH: forall (c : state Ξ“) (a : Ξ“ =[ val_n ]> Ξ”), it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R T1_0 (eval (s_subst Ξ“ c Ξ” a)) (bind_delay' (eval c) (fun n : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var n)) (nf_obs n) (nf_args n)) Ξ” a)))
a: Ξ“ =[ val_n ]> Ξ”

it_eqF βˆ…β‚‘ (fun _ : T1 => nf_eq) (it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R) T1_0 match eval_aux (s_subst Ξ“ (Cut neg (Whn (ShiftNR c)) (Whn (ShiftNL x))) Ξ” a) with | inl x => TauF (iter (fun pat : T1 => let 'T1_0 as x0 := pat return (state Ξ” -> itree βˆ…β‚‘ ((fun _ : T1 => state Ξ”) +α΅’ (fun _ : T1 => nf Ξ”)) x0) in fun c : state Ξ” => Ret' (eval_aux c)) T1_0 x) | inr y => RetF y end match match eval_aux (Cut neg (Whn (ShiftNR c)) (Whn (ShiftNL x))) with | inl x => TauF (iter (fun pat : T1 => let 'T1_0 as x0 := pat return (state Ξ“ -> itree βˆ…β‚‘ ((fun _ : T1 => state Ξ“) +α΅’ (fun _ : T1 => nf Ξ“)) x0) in fun c : state Ξ“ => Ret' (eval_aux c)) T1_0 x) | inr y => RetF y end with | RetF r => match eval_aux (s_subst Ξ“ (p_app (var (nf_var r)) (nf_obs r) (nf_args r)) Ξ” a) with | inl x => TauF (iter (fun pat : T1 => let 'T1_0 as x0 := pat return (state Ξ” -> itree βˆ…β‚‘ ((fun _ : T1 => state Ξ”) +α΅’ (fun _ : T1 => nf Ξ”)) x0) in fun c : state Ξ” => Ret' (eval_aux c)) T1_0 x) | inr y => RetF y end | TauF t => TauF ((fun pat : T1 => let 'T1_0 as x := pat return (Obs.nf obs_op val_n Ξ“ -> itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”) x) in fun y : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var y)) (nf_obs y) (nf_args y)) Ξ” a)) =<< t) | VisF e k => VisF e (fun r : ex_falso e => (fun pat : T1 => let 'T1_0 as x := pat return (Obs.nf obs_op val_n Ξ“ -> itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”) x) in fun y : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var y)) (nf_obs y) (nf_args y)) Ξ” a)) =<< k r) end
Ξ“: neg_ctx
A14: pre_ty pos
c: state (Ξ“ β–Άβ‚“ `- A14)
x: term Ξ“ `- A14
Ξ”: neg_ctx
R: relα΅’ (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”)) (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”))
CIH: forall (c : state Ξ“) (a : Ξ“ =[ val_n ]> Ξ”), it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R T1_0 (eval (s_subst Ξ“ c Ξ” a)) (bind_delay' (eval c) (fun n : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var n)) (nf_obs n) (nf_args n)) Ξ” a)))
a: Ξ“ =[ val_n ]> Ξ”

it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R T1_0 (eval (s_subst (Ξ” β–Άβ‚“ `- A14) (s_subst (Ξ“ β–Άβ‚“ `- A14) c (Ξ” β–Άβ‚“ `- A14) (a_shift1 a)) Ξ” ₁[ x `β‚œβŠ› a])) (bind_delay' (eval (s_subst (Ξ“ β–Άβ‚“ `- A14) c Ξ“ ₁[ x])) (fun y : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var y)) (nf_obs y) (nf_args y)) Ξ” a)))
Ξ“: neg_ctx
A14: pre_ty pos
c: state (Ξ“ β–Άβ‚“ `- A14)
x: term Ξ“ `- A14
Ξ”: neg_ctx
R: relα΅’ (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”)) (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”))
CIH: forall (c : state Ξ“) (a : Ξ“ =[ val_n ]> Ξ”), it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R T1_0 (eval (s_subst Ξ“ c Ξ” a)) (bind_delay' (eval c) (fun n : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var n)) (nf_obs n) (nf_args n)) Ξ” a)))
a: Ξ“ =[ val_n ]> Ξ”

it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R T1_0 (eval ((c β‚œβŠ› ₁[ upg_kp x]) β‚œβŠ› a)) (bind_delay' (eval (s_subst (Ξ“ β–Άβ‚“ `- A14) c Ξ“ ₁[ x])) (fun y : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var y)) (nf_obs y) (nf_args y)) Ξ” a)))
apply CIH.
Ξ“: neg_ctx
A18: pre_ty pos
c: state (Ξ“ β–Άβ‚“ `+ A18)
v: whn Ξ“ `+ A18
Ξ”: neg_ctx
R: relα΅’ (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”)) (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”))
CIH: forall (c : state Ξ“) (a : Ξ“ =[ val_n ]> Ξ”), it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R T1_0 (eval (s_subst Ξ“ c Ξ” a)) (bind_delay' (eval c) (fun n : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var n)) (nf_obs n) (nf_args n)) Ξ” a)))
a: Ξ“ =[ val_n ]> Ξ”

it_eqF βˆ…β‚‘ (fun _ : T1 => nf_eq) (it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R) T1_0 match eval_aux (s_subst Ξ“ (Cut neg (Whn (NegNR c)) (Whn (NegNL v))) Ξ” a) with | inl x => TauF (iter (fun pat : T1 => let 'T1_0 as x0 := pat return (state Ξ” -> itree βˆ…β‚‘ ((fun _ : T1 => state Ξ”) +α΅’ (fun _ : T1 => nf Ξ”)) x0) in fun c : state Ξ” => Ret' (eval_aux c)) T1_0 x) | inr y => RetF y end match match eval_aux (Cut neg (Whn (NegNR c)) (Whn (NegNL v))) with | inl x => TauF (iter (fun pat : T1 => let 'T1_0 as x0 := pat return (state Ξ“ -> itree βˆ…β‚‘ ((fun _ : T1 => state Ξ“) +α΅’ (fun _ : T1 => nf Ξ“)) x0) in fun c : state Ξ“ => Ret' (eval_aux c)) T1_0 x) | inr y => RetF y end with | RetF r => match eval_aux (s_subst Ξ“ (p_app (var (nf_var r)) (nf_obs r) (nf_args r)) Ξ” a) with | inl x => TauF (iter (fun pat : T1 => let 'T1_0 as x0 := pat return (state Ξ” -> itree βˆ…β‚‘ ((fun _ : T1 => state Ξ”) +α΅’ (fun _ : T1 => nf Ξ”)) x0) in fun c : state Ξ” => Ret' (eval_aux c)) T1_0 x) | inr y => RetF y end | TauF t => TauF ((fun pat : T1 => let 'T1_0 as x := pat return (Obs.nf obs_op val_n Ξ“ -> itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”) x) in fun y : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var y)) (nf_obs y) (nf_args y)) Ξ” a)) =<< t) | VisF e k => VisF e (fun r : ex_falso e => (fun pat : T1 => let 'T1_0 as x := pat return (Obs.nf obs_op val_n Ξ“ -> itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”) x) in fun y : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var y)) (nf_obs y) (nf_args y)) Ξ” a)) =<< k r) end
Ξ“: neg_ctx
A18: pre_ty pos
c: state (Ξ“ β–Άβ‚“ `+ A18)
v: whn Ξ“ `+ A18
Ξ”: neg_ctx
R: relα΅’ (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”)) (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”))
CIH: forall (c : state Ξ“) (a : Ξ“ =[ val_n ]> Ξ”), it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R T1_0 (eval (s_subst Ξ“ c Ξ” a)) (bind_delay' (eval c) (fun n : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var n)) (nf_obs n) (nf_args n)) Ξ” a)))
a: Ξ“ =[ val_n ]> Ξ”

it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R T1_0 (eval (s_subst (Ξ” β–Άβ‚“ `+ A18) (s_subst (Ξ“ β–Άβ‚“ `+ A18) c (Ξ” β–Άβ‚“ `+ A18) (a_shift1 a)) Ξ” ₁[ v `α΅₯βŠ› a])) (bind_delay' (eval (s_subst (Ξ“ β–Άβ‚“ `+ A18) c Ξ“ ₁[ v])) (fun y : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var y)) (nf_obs y) (nf_args y)) Ξ” a)))
Ξ“: neg_ctx
A18: pre_ty pos
c: state (Ξ“ β–Άβ‚“ `+ A18)
v: whn Ξ“ `+ A18
Ξ”: neg_ctx
R: relα΅’ (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”)) (itree βˆ…β‚‘ (fun _ : T1 => Obs.nf obs_op val_n Ξ”))
CIH: forall (c : state Ξ“) (a : Ξ“ =[ val_n ]> Ξ”), it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R T1_0 (eval (s_subst Ξ“ c Ξ” a)) (bind_delay' (eval c) (fun n : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var n)) (nf_obs n) (nf_args n)) Ξ” a)))
a: Ξ“ =[ val_n ]> Ξ”

it_eq_t βˆ…β‚‘ (fun _ : T1 => nf_eq) R T1_0 (eval ((c β‚œβŠ› ₁[ upg_vp v]) β‚œβŠ› a)) (bind_delay' (eval (s_subst (Ξ“ β–Άβ‚“ `+ A18) c Ξ“ ₁[ v])) (fun y : Obs.nf obs_op val_n Ξ“ => eval (s_subst Ξ“ (p_app (var (nf_var y)) (nf_obs y) (nf_args y)) Ξ” a)))
apply CIH.

Next we prove that evaluating a normal form is just returning this normal form. This goes by approximately induction on observations.

  

forall (Ξ“ : neg_ctx) (u : Obs.nf obs_op val_n Ξ“), Machine.eval (emb u) ≋ ret_delay u
Ξ“: neg_ctx
A: ty
i: Ξ“ βˆ‹ A
o: obs_op A
Ξ³: dom o =[ val_n ]> Ξ“

eval (Cut' (var i) (o `α΅₯βŠ› Ξ³)) ≋ ret_delay (i β‹… o ⦇ Ξ³ ⦈)
A: pre_ty neg
Ξ“: neg_ctx
A0: ty
i: Ξ“ βˆ‹ A0
o: pat A0 †
Ξ³: dom o =[ val_n ]> Ξ“
eqargs: {| pr1 := `+ A; pr2 := PVarP A |} = {| pr1 := A0 †; pr2 := o |}
H0: `+ A = A0 †
H1: `+ A,' PVarP A = A0 †,' o

eval (Cut' (var i) (rew [fun projs : sigma (fun a : ty => pat a) => whn (p_dom (pr2 projs)) (pr1 projs)] eqargs in Var Ctx.top `α΅₯βŠ› Ξ³)) ≋ ret_delay (i β‹… o ⦇ Ξ³ ⦈)
A0: pre_ty pos
Ξ“: neg_ctx
A: ty
i: Ξ“ βˆ‹ A
o: pat A †
Ξ³: dom o =[ val_n ]> Ξ“
eqargs: {| pr1 := `- A0; pr2 := PVarN A0 |} = {| pr1 := A †; pr2 := o |}
H0: `- A0 = A †
H1: `- A0,' PVarN A0 = A †,' o
eval (Cut' (var i) (rew [fun projs : sigma (fun a : ty => pat a) => whn (p_dom (pr2 projs)) (pr1 projs)] eqargs in Var Ctx.top `α΅₯βŠ› Ξ³)) ≋ ret_delay (i β‹… o ⦇ Ξ³ ⦈)
Ξ“: neg_ctx
A: ty
i: Ξ“ βˆ‹ A
o: pat A †
Ξ³: dom o =[ val_n ]> Ξ“
eqargs: {| pr1 := `+ 1; pr2 := POne |} = {| pr1 := A †; pr2 := o |}
H0: `+ 1 = A †
H1: `+ 1,' POne = A †,' o
eval (Cut' (var i) (rew [fun projs : sigma (fun a : ty => pat a) => whn (p_dom (pr2 projs)) (pr1 projs)] eqargs in OneR `α΅₯βŠ› Ξ³)) ≋ ret_delay (i β‹… o ⦇ Ξ³ ⦈)
Ξ“: neg_ctx
A: ty
i: Ξ“ βˆ‹ A
o: pat A †
Ξ³: dom o =[ val_n ]> Ξ“
eqargs: {| pr1 := `- βŠ₯; pr2 := PBot |} = {| pr1 := A †; pr2 := o |}
H0: `- βŠ₯ = A †
H1: `- βŠ₯,' PBot = A †,' o
eval (Cut' (var i) (rew [fun projs : sigma (fun a : ty => pat a) => whn (p_dom (pr2 projs)) (pr1 projs)] eqargs in BotL `α΅₯βŠ› Ξ³)) ≋ ret_delay (i β‹… o ⦇ Ξ³ ⦈)
A1, B: pre_ty pos
p1: pat `+ A1
p2: pat `+ B
H: forall (Ξ“ : neg_ctx) (A : ty) (i : Ξ“ βˆ‹ A) (o : pat A †) (Ξ³ : dom o =[ val_n ]> Ξ“) (eqargs : {| pr1 := `+ A1; pr2 := p1 |} = {| pr1 := A †; pr2 := o |}), rew [fun projs : sigma (fun a : ty => pat a) => whn (p_dom (pr2 projs)) (pr1 projs)] eqargs in p1 = o -> eval (Cut' (var i) (o `α΅₯βŠ› Ξ³)) ≋ ret_delay (i β‹… o ⦇ Ξ³ ⦈)
H0: forall (Ξ“ : neg_ctx) (A : ty) (i : Ξ“ βˆ‹ A) (o : pat A †) (Ξ³ : dom o =[ val_n ]> Ξ“) (eqargs : {| pr1 := `+ B; pr2 := p2 |} = {| pr1 := A †; pr2 := o |}), rew [fun projs : sigma (fun a : ty => pat a) => whn (p_dom (pr2 projs)) (pr1 projs)] eqargs in p2 = o -> eval (Cut' (var i) (o `α΅₯βŠ› Ξ³)) ≋ ret_delay (i β‹… o ⦇ Ξ³ ⦈)
Ξ“: neg_ctx
A: ty
i: Ξ“ βˆ‹ A
o: pat A †
Ξ³: dom o =[ val_n ]> Ξ“
eqargs: {| pr1 := `+ (A1 βŠ— B); pr2 := PTen p1 p2 |} = {| pr1 := A †; pr2 := o |}
H2: `+ (A1 βŠ— B) = A †
H3: `+ (A1 βŠ— B),' PTen p1 p2 = A †,' o
eval (Cut' (var i) (rew [fun projs : sigma (fun a : ty => pat a) => whn (p_dom (pr2 projs)) (pr1 projs)] eqargs in TenR (p1 `α΅₯βŠ›α΅£ r_cover_l cover_cat) (p2 `α΅₯βŠ›α΅£ r_cover_r cover_cat) `α΅₯βŠ› Ξ³)) ≋ ret_delay (i β‹… o ⦇ Ξ³ ⦈)
A2, B0: pre_ty neg
p1: pat `- A2
p2: pat `- B0
H: forall (Ξ“ : neg_ctx) (A : ty) (i : Ξ“ βˆ‹ A) (o : pat A †) (Ξ³ : dom o =[ val_n ]> Ξ“) (eqargs : {| pr1 := `- A2; pr2 := p1 |} = {| pr1 := A †; pr2 := o |}), rew [fun projs : sigma (fun a : ty => pat a) => whn (p_dom (pr2 projs)) (pr1 projs)] eqargs in p1 = o -> eval (Cut' (var i) (o `α΅₯βŠ› Ξ³)) ≋ ret_delay (i β‹… o ⦇ Ξ³ ⦈)
H0: forall (Ξ“ : neg_ctx) (A : ty) (i : Ξ“ βˆ‹ A) (o : pat A †) (Ξ³ : dom o =[ val_n ]> Ξ“) (eqargs : {| pr1 := `- B0; pr2 := p2 |} = {| pr1 := A †; pr2 := o |}), rew [fun projs : sigma (fun a : ty => pat a) => whn (p_dom (pr2 projs)) (pr1 projs)] eqargs in p2 = o -> eval (Cut' (var i) (o `α΅₯βŠ› Ξ³)) ≋ ret_delay (i β‹… o ⦇ Ξ³ ⦈)
Ξ“: neg_ctx
A: ty
i: Ξ“ βˆ‹ A
o: pat A †
Ξ³: dom o =[ val_n ]> Ξ“
eqargs: {| pr1 := `- (A2 β…‹ B0); pr2 := PPar p1 p2 |} = {| pr1 := A †; pr2 := o |}
H2: `- (A2 β…‹ B0) = A †
H3: `- (A2 β…‹ B0),' PPar p1 p2 = A †,' o
eval (Cut' (var i) (rew [fun projs : sigma (fun a : ty => pat a) => whn (p_dom (pr2 projs)) (pr1 projs)] eqargs in ParL (p1 `α΅₯βŠ›α΅£ r_cover_l cover_cat) (p2 `α΅₯βŠ›α΅£ r_cover_r cover_cat) `α΅₯βŠ› Ξ³)) ≋ ret_delay (i β‹… o ⦇ Ξ³ ⦈)
A3, B1: pre_ty pos
p: pat `+ A3
H: forall (Ξ“ : neg_ctx) (A : ty) (i : Ξ“ βˆ‹ A) (o : pat A †) (Ξ³ : dom o =[ val_n ]> Ξ“) (eqargs : {| pr1 := `+ A3; pr2 := p |} = {| pr1 := A †; pr2 := o |}), rew [fun projs : sigma (fun a : ty => pat a) => whn (p_dom (pr2 projs)) (pr1 projs)] eqargs in p = o -> eval (Cut' (var i) (o `α΅₯βŠ› Ξ³)) ≋ ret_delay (i β‹… o ⦇ Ξ³ ⦈)
Ξ“: neg_ctx
A: ty
i: Ξ“ βˆ‹ A
o: pat A †
Ξ³: dom o =[ val_n ]> Ξ“
eqargs: {| pr1 := `+ (A3 βŠ• B1); pr2 := POr1 p |} = {| pr1 := A †; pr2 := o |}
H1: `+ (A3 βŠ• B1) = A †
H2: `+ (A3 βŠ• B1),' POr1 p = A †,' o
eval (Cut' (var i) (rew [fun projs : sigma (fun a : ty => pat a) => whn (p_dom (pr2 projs)) (pr1 projs)] eqargs in OrR1 p `α΅₯βŠ› Ξ³)) ≋ ret_delay (i β‹… o ⦇ Ξ³ ⦈)
A4, B2: pre_ty pos
p: pat `+ B2
H: forall (Ξ“ : neg_ctx) (A : ty) (i : Ξ“ βˆ‹ A) (o : pat A †) (Ξ³ : dom o =[ val_n ]> Ξ“) (eqargs : {| pr1 := `+ B2; pr2 := p |} = {| pr1 := A †; pr2 := o |}), rew [fun projs : sigma (fun a : ty => pat a) => whn (p_dom (pr2 projs)) (pr1 projs)] eqargs in p = o -> eval (Cut' (var i) (o `α΅₯βŠ› Ξ³)) ≋ ret_delay (i β‹… o ⦇ Ξ³ ⦈)
Ξ“: neg_ctx
A: ty
i: Ξ“ βˆ‹ A
o: pat A †
Ξ³: dom o =[ val_n ]> Ξ“
eqargs: {| pr1 := `+ (A4 βŠ• B2); pr2 := POr2 p |} = {| pr1 := A †; pr2 := o |}
H1: `+ (A4 βŠ• B2) = A †
H2: `+ (A4 βŠ• B2),' POr2 p = A †,' o
eval (Cut' (var i) (rew [fun projs : sigma (fun a : ty => pat a) => whn (p_dom (pr2 projs)) (pr1 projs)] eqargs in OrR2 p `α΅₯βŠ› Ξ³)) ≋ ret_delay (i β‹… o ⦇ Ξ³ ⦈)
A5, B3: pre_ty neg
p: pat `- A5
H: forall (Ξ“ : neg_ctx) (A : ty) (i : Ξ“ βˆ‹ A) (o : pat A †) (Ξ³ : dom o =[ val_n ]> Ξ“) (eqargs : {| pr1 := `- A5; pr2 := p |} = {| pr1 := A †; pr2 := o |}), rew [fun projs : sigma (fun a : ty => pat a) => whn (p_dom (pr2 projs)) (pr1 projs)] eqargs in p = o -> eval (Cut' (var i) (o `α΅₯βŠ› Ξ³)) ≋ ret_delay (i β‹… o ⦇ Ξ³ ⦈)
Ξ“: neg_ctx
A: ty
i: Ξ“ βˆ‹ A
o: pat A †
Ξ³: dom o =[ val_n ]> Ξ“
eqargs: {| pr1 := `- (A5 & B3); pr2 := PAnd1 p |} = {| pr1 := A †; pr2 := o |}
H1: `- (A5 & B3) = A †
H2: `- (A5 & B3),' PAnd1 p = A †,' o
eval (Cut' (var i) (rew [fun projs : sigma (fun a : ty => pat a) => whn (p_dom (pr2 projs)) (pr1 projs)] eqargs in AndL1 p `α΅₯βŠ› Ξ³)) ≋ ret_delay (i β‹… o ⦇ Ξ³ ⦈)
A6, B4: pre_ty neg
p: pat `- B4
H: forall (Ξ“ : neg_ctx) (A : ty) (i : Ξ“ βˆ‹ A) (o : pat A †) (Ξ³ : dom o =[ val_n ]> Ξ“) (eqargs : {| pr1 := `- B4; pr2 := p |} = {| pr1 := A †; pr2 := o |}), rew [fun projs : sigma (fun a : ty => pat a) => whn (p_dom (pr2 projs)) (pr1 projs)] eqargs in p = o -> eval (Cut' (var i) (o `α΅₯βŠ› Ξ³)) ≋ ret_delay (i β‹… o ⦇ Ξ³ ⦈)
Ξ“: neg_ctx
A: ty
i: Ξ“ βˆ‹ A
o: pat A †
Ξ³: dom o =[ val_n ]> Ξ“
eqargs: {| pr1 := `- (A6 & B4); pr2 := PAnd2 p |} = {| pr1 := A †; pr2 := o |}
H1: `- (A6 & B4) = A †
H2: `- (A6 & B4),' PAnd2 p = A †,' o
eval (Cut' (var i) (rew [fun projs : sigma (fun a : ty => pat a) => whn (p_dom (pr2 projs)) (pr1 projs)] eqargs in AndL2 p `α΅₯βŠ› Ξ³)) ≋ ret_delay (i β‹… o ⦇ Ξ³ ⦈)
A7: pre_ty neg
Ξ“: neg_ctx
A: ty
i: Ξ“ βˆ‹ A
o: pat A †
Ξ³: dom o =[ val_n ]> Ξ“
eqargs: {| pr1 := `+ (↓ A7); pr2 := PShiftP A7 |} = {| pr1 := A †; pr2 := o |}
H0: `+ (↓ A7) = A †
H1: `+ (↓ A7),' PShiftP A7 = A †,' o
eval (Cut' (var i) (rew [fun projs : sigma (fun a : ty => pat a) => whn (p_dom (pr2 projs)) (pr1 projs)] eqargs in ShiftPR (Whn (Var Ctx.top)) `α΅₯βŠ› Ξ³)) ≋ ret_delay (i β‹… o ⦇ Ξ³ ⦈)
A8: pre_ty pos
Ξ“: neg_ctx
A: ty
i: Ξ“ βˆ‹ A
o: pat A †
Ξ³: dom o =[ val_n ]> Ξ“
eqargs: {| pr1 := `- (↑ A8); pr2 := PShiftN A8 |} = {| pr1 := A †; pr2 := o |}
H0: `- (↑ A8) = A †
H1: `- (↑ A8),' PShiftN A8 = A †,' o
eval (Cut' (var i) (rew [fun projs : sigma (fun a : ty => pat a) => whn (p_dom (pr2 projs)) (pr1 projs)] eqargs in ShiftNL (Whn (Var Ctx.top)) `α΅₯βŠ› Ξ³)) ≋ ret_delay (i β‹… o ⦇ Ξ³ ⦈)
A9: pre_ty neg
p: pat `- A9
H: forall (Ξ“ : neg_ctx) (A : ty) (i : Ξ“ βˆ‹ A) (o : pat A †) (Ξ³ : dom o =[ val_n ]> Ξ“) (eqargs : {| pr1 := `- A9; pr2 := p |} = {| pr1 := A †; pr2 := o |}), rew [fun projs : sigma (fun a : ty => pat a) => whn (p_dom (pr2 projs)) (pr1 projs)] eqargs in p = o -> eval (Cut' (var i) (o `α΅₯βŠ› Ξ³)) ≋ ret_delay (i β‹… o ⦇ Ξ³ ⦈)
Ξ“: neg_ctx
A: ty
i: Ξ“ βˆ‹ A
o: pat A †
Ξ³: dom o =[ val_n ]> Ξ“
eqargs: {| pr1 := `+ (βŠ– A9); pr2 := PNegP p |} = {| pr1 := A †; pr2 := o |}
H1: `+ (βŠ– A9) = A †
H2: `+ (βŠ– A9),' PNegP p = A †,' o
eval (Cut' (var i) (rew [fun projs : sigma (fun a : ty => pat a) => whn (p_dom (pr2 projs)) (pr1 projs)] eqargs in NegPR p `α΅₯βŠ› Ξ³)) ≋ ret_delay (i β‹… o ⦇ Ξ³ ⦈)
A10: pre_ty pos
p: pat `+ A10
H: forall (Ξ“ : neg_ctx) (A : ty) (i : Ξ“ βˆ‹ A) (o : pat A †) (Ξ³ : dom o =[ val_n ]> Ξ“) (eqargs : {| pr1 := `+ A10; pr2 := p |} = {| pr1 := A †; pr2 := o |}), rew [fun projs : sigma (fun a : ty => pat a) => whn (p_dom (pr2 projs)) (pr1 projs)] eqargs in p = o -> eval (Cut' (var i) (o `α΅₯βŠ› Ξ³)) ≋ ret_delay (i β‹… o ⦇ Ξ³ ⦈)
Ξ“: neg_ctx
A: ty
i: Ξ“ βˆ‹ A
o: pat A †
Ξ³: dom o =[ val_n ]> Ξ“
eqargs: {| pr1 := `- (Β¬ A10); pr2 := PNegN p |} = {| pr1 := A †; pr2 := o |}
H1: `- (Β¬ A10) = A †
H2: `- (Β¬ A10),' PNegN p = A †,' o
eval (Cut' (var i) (rew [fun projs : sigma (fun a : ty => pat a) => whn (p_dom (pr2 projs)) (pr1 projs)] eqargs in NegNL p `α΅₯βŠ› Ξ³)) ≋ ret_delay (i β‹… o ⦇ Ξ³ ⦈)
p0: pre_ty neg
Ξ“: neg_ctx
i: Ξ“ βˆ‹ `- p0
o: pat (`- p0) †
Ξ³: dom o =[ val_n ]> Ξ“
eqargs: {| pr1 := `+ p0; pr2 := PVarP p0 |} = {| pr1 := (`- p0) †; pr2 := o |}
H1: `+ p0,' PVarP p0 = (`- p0) †,' o

eval (Cut' (var i) (rew [fun projs : sigma (fun a : ty => pat a) => whn (p_dom (pr2 projs)) (pr1 projs)] eqargs in Var Ctx.top `α΅₯βŠ› Ξ³)) ≋ ret_delay (i β‹… o ⦇ Ξ³ ⦈)
p0: pre_ty pos
Ξ“: neg_ctx
i: Ξ“ βˆ‹ `+ p0
o: pat (`+ p0) †
Ξ³: dom o =[ val_n ]> Ξ“
eqargs: {| pr1 := `- p0; pr2 := PVarN p0 |} = {| pr1 := (`+ p0) †; pr2 := o |}
H1: `- p0,' PVarN p0 = (`+ p0) †,' o
eval (Cut' (var i) (rew [fun projs : sigma (fun a : ty => pat a) => whn (p_dom (pr2 projs)) (pr1 projs)] eqargs in Var Ctx.top `α΅₯βŠ› Ξ³)) ≋ ret_delay (i β‹… o ⦇ Ξ³ ⦈)
Ξ“: neg_ctx
i: Ξ“ βˆ‹ `- 1
o: pat (`- 1) †
Ξ³: dom o =[ val_n ]> Ξ“
eqargs: {| pr1 := `+ 1; pr2 := POne |} = {| pr1 := (`- 1) †; pr2 := o |}
H1: `+ 1,' POne = (`- 1) †,' o
eval (Cut' (var i) (rew [fun projs : sigma (fun a : ty => pat a) => whn (p_dom (pr2 projs)) (pr1 projs)] eqargs in OneR `α΅₯βŠ› Ξ³)) ≋ ret_delay (i β‹… o ⦇ Ξ³ ⦈)
Ξ“: neg_ctx
i: Ξ“ βˆ‹ `+ βŠ₯
o: pat (`+ βŠ₯) †
Ξ³: dom o =[ val_n ]> Ξ“
eqargs: {| pr1 := `- βŠ₯; pr2 := PBot |} = {| pr1 := (`+ βŠ₯) †; pr2 := o |}
H1: `- βŠ₯,' PBot = (`+ βŠ₯) †,' o
eval (Cut' (var i) (rew [fun projs : sigma (fun a : ty => pat a) => whn (p_dom (pr2 projs)) (pr1 projs)] eqargs in BotL `α΅₯βŠ› Ξ³)) ≋ ret_delay (i β‹… o ⦇ Ξ³ ⦈)
A1, B: pre_ty pos
p1: pat `+ A1
p2: pat `+ B
H: forall (Ξ“ : neg_ctx) (A : ty) (i : Ξ“ βˆ‹ A) (o : pat A †) (Ξ³ : dom o =[ val_n ]> Ξ“) (eqargs : {| pr1 := `+ A1; pr2 := p1 |} = {| pr1 := A †; pr2 := o |}), rew [fun projs : sigma (fun a : ty => pat a) => whn (p_dom (pr2 projs)) (pr1 projs)] eqargs in p1 = o -> eval (Cut' (var i) (o `α΅₯βŠ› Ξ³)) ≋ ret_delay (i β‹… o ⦇ Ξ³ ⦈)
H0: forall (Ξ“ : neg_ctx) (A : ty) (i : Ξ“ βˆ‹ A) (o : pat A †) (Ξ³ : dom o =[ val_n ]> Ξ“) (eqargs : {| pr1 := `+ B; pr2 := p2 |} = {| pr1 := A †; pr2 := o |}), rew [fun projs : sigma (fun a : ty => pat a) => whn (p_dom (pr2 projs)) (pr1 projs)] eqargs in p2 = o -> eval (Cut' (var i) (o `α΅₯βŠ› Ξ³)) ≋ ret_delay (i β‹… o ⦇ Ξ³ ⦈)
Ξ“: neg_ctx
i: Ξ“ βˆ‹ `- (A1 βŠ— B)
o: pat (`- (A1 βŠ— B)) †
Ξ³: dom o =[ val_n ]> Ξ“
eqargs: {| pr1 := `+ (A1 βŠ— B); pr2 := PTen p1 p2 |} = {| pr1 := (`- (A1 βŠ— B)) †; pr2 := o |}
H3: `+ (A1 βŠ— B),' PTen p1 p2 = (`- (A1 βŠ— B)) †,' o
eval (Cut' (var i) (rew [fun projs : sigma (fun a : ty => pat a) => whn (p_dom (pr2 projs)) (pr1 projs)] eqargs in TenR (p1 `α΅₯βŠ›α΅£ r_cover_l cover_cat) (p2 `α΅₯βŠ›α΅£ r_cover_r cover_cat) `α΅₯βŠ› Ξ³)) ≋ ret_delay (i β‹… o ⦇ Ξ³ ⦈)
A2, B0: pre_ty neg
p1: pat `- A2
p2: pat `- B0
H: forall (Ξ“ : neg_ctx) (A : ty) (i : Ξ“ βˆ‹ A) (o : pat A †) (Ξ³ : dom o =[ val_n ]> Ξ“) (eqargs : {| pr1 := `- A2; pr2 := p1 |} = {| pr1 := A †; pr2 := o |}), rew [fun projs : sigma (fun a : ty => pat a) => whn (p_dom (pr2 projs)) (pr1 projs)] eqargs in p1 = o -> eval (Cut' (var i) (o `α΅₯βŠ› Ξ³)) ≋ ret_delay (i β‹… o ⦇ Ξ³ ⦈)
H0: forall (Ξ“ : neg_ctx) (A : ty) (i : Ξ“ βˆ‹ A) (o : pat A †) (Ξ³ : dom o =[ val_n ]> Ξ“) (eqargs : {| pr1 := `- B0; pr2 := p2 |} = {| pr1 := A †; pr2 := o |}), rew [fun projs : sigma (fun a : ty => pat a) => whn (p_dom (pr2 projs)) (pr1 projs)] eqargs in p2 = o -> eval (Cut' (var i) (o `α΅₯βŠ› Ξ³)) ≋ ret_delay (i β‹… o ⦇ Ξ³ ⦈)
Ξ“: neg_ctx
i: Ξ“ βˆ‹ `+ (A2 β…‹ B0)
o: pat (`+ (A2 β…‹ B0)) †
Ξ³: dom o =[ val_n ]> Ξ“
eqargs: {| pr1 := `- (A2 β…‹ B0); pr2 := PPar p1 p2 |} = {| pr1 := (`+ (A2 β…‹ B0)) †; pr2 := o |}
H3: `- (A2 β…‹ B0),' PPar p1 p2 = (`+ (A2 β…‹ B0)) †,' o
eval (Cut' (var i) (rew [fun projs : sigma (fun a : ty => pat a) => whn (p_dom (pr2 projs)) (pr1 projs)] eqargs in ParL (p1 `α΅₯βŠ›α΅£ r_cover_l cover_cat) (p2 `α΅₯βŠ›α΅£ r_cover_r cover_cat) `α΅₯βŠ› Ξ³)) ≋ ret_delay (i β‹… o ⦇ Ξ³ ⦈)
A3, B1: pre_ty pos
p: pat `+ A3
H: forall (Ξ“ : neg_ctx) (A : ty) (i : Ξ“ βˆ‹ A) (o : pat A †) (Ξ³ : dom o =[ val_n ]> Ξ“) (eqargs : {| pr1 := `+ A3; pr2 := p |} = {| pr1 := A †; pr2 := o |}), rew [fun projs : sigma (fun a : ty => pat a) => whn (p_dom (pr2 projs)) (pr1 projs)] eqargs in p = o -> eval (Cut' (var i) (o `α΅₯βŠ› Ξ³)) ≋ ret_delay (i β‹… o ⦇ Ξ³ ⦈)
Ξ“: neg_ctx
i: Ξ“ βˆ‹ `- (A3 βŠ• B1)
o: pat (`- (A3 βŠ• B1)) †
Ξ³: dom o =[ val_n ]> Ξ“
eqargs: {| pr1 := `+ (A3 βŠ• B1); pr2 := POr1 p |} = {| pr1 := (`- (A3 βŠ• B1)) †; pr2 := o |}
H2: `+ (A3 βŠ• B1),' POr1 p = (`- (A3 βŠ• B1)) †,' o
eval (Cut' (var i) (rew [fun projs : sigma (fun a : ty => pat a) => whn (p_dom (pr2 projs)) (pr1 projs)] eqargs in OrR1 p `α΅₯βŠ› Ξ³)) ≋ ret_delay (i β‹… o ⦇ Ξ³ ⦈)
A4, B2: pre_ty pos
p: pat `+ B2
H: forall (Ξ“ : neg_ctx) (A : ty) (i : Ξ“ βˆ‹ A) (o : pat A †) (Ξ³ : dom o =[ val_n ]> Ξ“) (eqargs : {| pr1 := `+ B2; pr2 := p |} = {| pr1 := A †; pr2 := o |}), rew [fun projs : sigma (fun a : ty => pat a) => whn (p_dom (pr2 projs)) (pr1 projs)] eqargs in p = o -> eval (Cut' (var i) (o `α΅₯βŠ› Ξ³)) ≋ ret_delay (i β‹… o ⦇ Ξ³ ⦈)
Ξ“: neg_ctx
i: Ξ“ βˆ‹ `- (A4 βŠ• B2)
o: pat (`- (A4 βŠ• B2)) †
Ξ³: dom o =[ val_n ]> Ξ“
eqargs: {| pr1 := `+ (A4 βŠ• B2); pr2 := POr2 p |} = {| pr1 := (`- (A4 βŠ• B2)) †; pr2 := o |}
H2: `+ (A4 βŠ• B2),' POr2 p = (`- (A4 βŠ• B2)) †,' o
eval (Cut' (var i) (rew [fun projs : sigma (fun a : ty => pat a) => whn (p_dom (pr2 projs)) (pr1 projs)] eqargs in OrR2 p `α΅₯βŠ› Ξ³)) ≋ ret_delay (i β‹… o ⦇ Ξ³ ⦈)
A5, B3: pre_ty neg
p: pat `- A5
H: forall (Ξ“ : neg_ctx) (A : ty) (i : Ξ“ βˆ‹ A) (o : pat A †) (Ξ³ : dom o =[ val_n ]> Ξ“) (eqargs : {| pr1 := `- A5; pr2 := p |} = {| pr1 := A †; pr2 := o |}), rew [fun projs : sigma (fun a : ty => pat a) => whn (p_dom (pr2 projs)) (pr1 projs)] eqargs in p = o -> eval (Cut' (var i) (o `α΅₯βŠ› Ξ³)) ≋ ret_delay (i β‹… o ⦇ Ξ³ ⦈)
Ξ“: neg_ctx
i: Ξ“ βˆ‹ `+ (A5 & B3)
o: pat (`+ (A5 & B3)) †
Ξ³: dom o =[ val_n ]> Ξ“
eqargs: {| pr1 := `- (A5 & B3); pr2 := PAnd1 p |} = {| pr1 := (`+ (A5 & B3)) †; pr2 := o |}
H2: `- (A5 & B3),' PAnd1 p = (`+ (A5 & B3)) †,' o
eval (Cut' (var i) (rew [fun projs : sigma (fun a : ty => pat a) => whn (p_dom (pr2 projs)) (pr1 projs)] eqargs in AndL1 p `α΅₯βŠ› Ξ³)) ≋ ret_delay (i β‹… o ⦇ Ξ³ ⦈)
A6, B4: pre_ty neg
p: pat `- B4
H: forall (Ξ“ : neg_ctx) (A : ty) (i : Ξ“ βˆ‹ A) (o : pat A †) (Ξ³ : dom o =[ val_n ]> Ξ“) (eqargs : {| pr1 := `- B4; pr2 := p |} = {| pr1 := A †; pr2 := o |}), rew [fun projs : sigma (fun a : ty => pat a) => whn (p_dom (pr2 projs)) (pr1 projs)] eqargs in p = o -> eval (Cut' (var i) (o `α΅₯βŠ› Ξ³)) ≋ ret_delay (i β‹… o ⦇ Ξ³ ⦈)
Ξ“: neg_ctx
i: Ξ“ βˆ‹ `+ (A6 & B4)
o: pat (`+ (A6 & B4)) †
Ξ³: dom o =[ val_n ]> Ξ“
eqargs: {| pr1 := `- (A6 & B4); pr2 := PAnd2 p |} = {| pr1 := (`+ (A6 & B4)) †; pr2 := o |}
H2: `- (A6 & B4),' PAnd2 p = (`+ (A6 & B4)) †,' o
eval (Cut' (var i) (rew [fun projs : sigma (fun a : ty => pat a) => whn (p_dom (pr2 projs)) (pr1 projs)] eqargs in AndL2 p `α΅₯βŠ› Ξ³)) ≋ ret_delay (i β‹… o ⦇ Ξ³ ⦈)
A7: pre_ty neg
Ξ“: neg_ctx
i: Ξ“ βˆ‹ `- (↓ A7)
o: pat (`- (↓ A7)) †
Ξ³: dom o =[ val_n ]> Ξ“
eqargs: {| pr1 := `+ (↓ A7); pr2 := PShiftP A7 |} = {| pr1 := (`- (↓ A7)) †; pr2 := o |}
H1: `+ (↓ A7),' PShiftP A7 = (`- (↓ A7)) †,' o
eval (Cut' (var i) (rew [fun projs : sigma (fun a : ty => pat a) => whn (p_dom (pr2 projs)) (pr1 projs)] eqargs in ShiftPR (Whn (Var Ctx.top)) `α΅₯βŠ› Ξ³)) ≋ ret_delay (i β‹… o ⦇ Ξ³ ⦈)
A8: pre_ty pos
Ξ“: neg_ctx
i: Ξ“ βˆ‹ `+ (↑ A8)
o: pat (`+ (↑ A8)) †
Ξ³: dom o =[ val_n ]> Ξ“
eqargs: {| pr1 := `- (↑ A8); pr2 := PShiftN A8 |} = {| pr1 := (`+ (↑ A8)) †; pr2 := o |}
H1: `- (↑ A8),' PShiftN A8 = (`+ (↑ A8)) †,' o
eval (Cut' (var i) (rew [fun projs : sigma (fun a : ty => pat a) => whn (p_dom (pr2 projs)) (pr1 projs)] eqargs in ShiftNL (Whn (Var Ctx.top)) `α΅₯βŠ› Ξ³)) ≋ ret_delay (i β‹… o ⦇ Ξ³ ⦈)
A9: pre_ty neg
p: pat `- A9
H: forall (Ξ“ : neg_ctx) (A : ty) (i : Ξ“ βˆ‹ A) (o : pat A †) (Ξ³ : dom o =[ val_n ]> Ξ“) (eqargs : {| pr1 := `- A9; pr2 := p |} = {| pr1 := A †; pr2 := o |}), rew [fun projs : sigma (fun a : ty => pat a) => whn (p_dom (pr2 projs)) (pr1 projs)] eqargs in p = o -> eval (Cut' (var i) (o `α΅₯βŠ› Ξ³)) ≋ ret_delay (i β‹… o ⦇ Ξ³ ⦈)
Ξ“: neg_ctx
i: Ξ“ βˆ‹ `- (βŠ– A9)
o: pat (`- (βŠ– A9)) †
Ξ³: dom o =[ val_n ]> Ξ“
eqargs: {| pr1 := `+ (βŠ– A9); pr2 := PNegP p |} = {| pr1 := (`- (βŠ– A9)) †; pr2 := o |}
H2: `+ (βŠ– A9),' PNegP p = (`- (βŠ– A9)) †,' o
eval (Cut' (var i) (rew [fun projs : sigma (fun a : ty => pat a) => whn (p_dom (pr2 projs)) (pr1 projs)] eqargs in NegPR p `α΅₯βŠ› Ξ³)) ≋ ret_delay (i β‹… o ⦇ Ξ³ ⦈)
A10: pre_ty pos
p: pat `+ A10
H: forall (Ξ“ : neg_ctx) (A : ty) (i : Ξ“ βˆ‹ A) (o : pat A †) (Ξ³ : dom o =[ val_n ]> Ξ“) (eqargs : {| pr1 := `+ A10; pr2 := p |} = {| pr1 := A †; pr2 := o |}), rew [fun projs : sigma (fun a : ty => pat a) => whn (p_dom (pr2 projs)) (pr1 projs)] eqargs in p = o -> eval (Cut' (var i) (o `α΅₯βŠ› Ξ³)) ≋ ret_delay (i β‹… o ⦇ Ξ³ ⦈)
Ξ“: neg_ctx
i: Ξ“ βˆ‹ `+ (Β¬ A10)
o: pat (`+ (Β¬ A10)) †
Ξ³: dom o =[ val_n ]> Ξ“
eqargs: {| pr1 := `- (Β¬ A10); pr2 := PNegN p |} = {| pr1 := (`+ (Β¬ A10)) †; pr2 := o |}
H2: `- (Β¬ A10),' PNegN p = (`+ (Β¬ A10)) †,' o
eval (Cut' (var i) (rew [fun projs : sigma (fun a : ty => pat a) => whn (p_dom (pr2 projs)) (pr1 projs)] eqargs in NegNL p `α΅₯βŠ› Ξ³)) ≋ ret_delay (i β‹… o ⦇ Ξ³ ⦈)
Ξ“: neg_ctx
i: Ξ“ βˆ‹ `- 1
o: pat (`- 1) †
Ξ³: dom o =[ val_n ]> Ξ“
eqargs: {| pr1 := `+ 1; pr2 := POne |} = {| pr1 := (`- 1) †; pr2 := o |}
H1: `+ 1,' POne = (`- 1) †,' o

eval (Cut' (var i) (rew [fun projs : sigma (fun a : ty => pat a) => whn (p_dom (pr2 projs)) (pr1 projs)] eqargs in OneR `α΅₯βŠ› Ξ³)) ≋ ret_delay (i β‹… o ⦇ Ξ³ ⦈)
Ξ“: neg_ctx
i: Ξ“ βˆ‹ `+ βŠ₯
o: pat (`+ βŠ₯) †
Ξ³: dom o =[ val_n ]> Ξ“
eqargs: {| pr1 := `- βŠ₯; pr2 := PBot |} = {| pr1 := (`+ βŠ₯) †; pr2 := o |}
H1: `- βŠ₯,' PBot = (`+ βŠ₯) †,' o
eval (Cut' (var i) (rew [fun projs : sigma (fun a : ty => pat a) => whn (p_dom (pr2 projs)) (pr1 projs)] eqargs in BotL `α΅₯βŠ› Ξ³)) ≋ ret_delay (i β‹… o ⦇ Ξ³ ⦈)
A1, B: pre_ty pos
p1: pat `+ A1
p2: pat `+ B
H: forall (Ξ“ : neg_ctx) (A : ty) (i : Ξ“ βˆ‹ A) (o : pat A †) (Ξ³ : dom o =[ val_n ]> Ξ“) (eqargs : {| pr1 := `+ A1; pr2 := p1 |} = {| pr1 := A †; pr2 := o |}), rew [fun projs : sigma (fun a : ty => pat a) => whn (p_dom (pr2 projs)) (pr1 projs)] eqargs in p1 = o -> eval (Cut' (var i) (o `α΅₯βŠ› Ξ³)) ≋ ret_delay (i β‹… o ⦇ Ξ³ ⦈)
H0: forall (Ξ“ : neg_ctx) (A : ty) (i : Ξ“ βˆ‹ A) (o : pat A †) (Ξ³ : dom o =[ val_n ]> Ξ“) (eqargs : {| pr1 := `+ B; pr2 := p2 |} = {| pr1 := A †; pr2 := o |}), rew [fun projs : sigma (fun a : ty => pat a) => whn (p_dom (pr2 projs)) (pr1 projs)] eqargs in p2 = o -> eval (Cut' (var i) (o `α΅₯βŠ› Ξ³)) ≋ ret_delay (i β‹… o ⦇ Ξ³ ⦈)
Ξ“: neg_ctx
i: Ξ“ βˆ‹ `- (A1 βŠ— B)
o: pat (`- (A1 βŠ— B)) †
Ξ³: dom o =[ val_n ]> Ξ“
eqargs: {| pr1 := `+ (A1 βŠ— B); pr2 := PTen p1 p2 |} = {| pr1 := (`- (A1 βŠ— B)) †; pr2 := o |}
H3: `+ (A1 βŠ— B),' PTen p1 p2 = (`- (A1 βŠ— B)) †,' o
eval (Cut' (var i) (rew [fun projs : sigma (fun a : ty => pat a) => whn (p_dom (pr2 projs)) (pr1 projs)] eqargs in TenR (p1 `α΅₯βŠ›α΅£ r_cover_l cover_cat) (p2 `α΅₯βŠ›α΅£ r_cover_r cover_cat) `α΅₯βŠ› Ξ³)) ≋ ret_delay (i β‹… o ⦇ Ξ³ ⦈)
A2, B0: pre_ty neg
p1: pat `- A2
p2: pat `- B0
H: forall (Ξ“ : neg_ctx) (A : ty) (i : Ξ“ βˆ‹ A) (o : pat A †) (Ξ³ : dom o =[ val_n ]> Ξ“) (eqargs : {| pr1 := `- A2; pr2 := p1 |} = {| pr1 := A †; pr2 := o |}), rew [fun projs : sigma (fun a : ty => pat a) => whn (p_dom (pr2 projs)) (pr1 projs)] eqargs in p1 = o -> eval (Cut' (var i) (o `α΅₯βŠ› Ξ³)) ≋ ret_delay (i β‹… o ⦇ Ξ³ ⦈)
H0: forall (Ξ“ : neg_ctx) (A : ty) (i : Ξ“ βˆ‹ A) (o : pat A †) (Ξ³ : dom o =[ val_n ]> Ξ“) (eqargs : {| pr1 := `- B0; pr2 := p2 |} = {| pr1 := A †; pr2 := o |}), rew [fun projs : sigma (fun a : ty => pat a) => whn (p_dom (pr2 projs)) (pr1 projs)] eqargs in p2 = o -> eval (Cut' (var i) (o `α΅₯βŠ› Ξ³)) ≋ ret_delay (i β‹… o ⦇ Ξ³ ⦈)
Ξ“: neg_ctx
i: Ξ“ βˆ‹ `+ (A2 β…‹ B0)
o: pat (`+ (A2 β…‹ B0)) †
Ξ³: dom o =[ val_n ]> Ξ“
eqargs: {| pr1 := `- (A2 β…‹ B0); pr2 := PPar p1 p2 |} = {| pr1 := (`+ (A2 β…‹ B0)) †; pr2 := o |}
H3: `- (A2 β…‹ B0),' PPar p1 p2 = (`+ (A2 β…‹ B0)) †,' o
eval (Cut' (var i) (rew [fun projs : sigma (fun a : ty => pat a) => whn (p_dom (pr2 projs)) (pr1 projs)] eqargs in ParL (p1 `α΅₯βŠ›α΅£ r_cover_l cover_cat) (p2 `α΅₯βŠ›α΅£ r_cover_r cover_cat) `α΅₯βŠ› Ξ³)) ≋ ret_delay (i β‹… o ⦇ Ξ³ ⦈)
A3, B1: pre_ty pos
p: pat `+ A3
H: forall (Ξ“ : neg_ctx) (A : ty) (i : Ξ“ βˆ‹ A) (o : pat A †) (Ξ³ : dom o =[ val_n ]> Ξ“) (eqargs : {| pr1 := `+ A3; pr2 := p |} = {| pr1 := A †; pr2 := o |}), rew [fun projs : sigma (fun a : ty => pat a) => whn (p_dom (pr2 projs)) (pr1 projs)] eqargs in p = o -> eval (Cut' (var i) (o `α΅₯βŠ› Ξ³)) ≋ ret_delay (i β‹… o ⦇ Ξ³ ⦈)
Ξ“: neg_ctx
i: Ξ“ βˆ‹ `- (A3 βŠ• B1)
o: pat (`- (A3 βŠ• B1)) †
Ξ³: dom o =[ val_n ]> Ξ“
eqargs: {| pr1 := `+ (A3 βŠ• B1); pr2 := POr1 p |} = {| pr1 := (`- (A3 βŠ• B1)) †; pr2 := o |}
H2: `+ (A3 βŠ• B1),' POr1 p = (`- (A3 βŠ• B1)) †,' o
eval (Cut' (var i) (rew [fun projs : sigma (fun a : ty => pat a) => whn (p_dom (pr2 projs)) (pr1 projs)] eqargs in OrR1 p `α΅₯βŠ› Ξ³)) ≋ ret_delay (i β‹… o ⦇ Ξ³ ⦈)
A4, B2: pre_ty pos
p: pat `+ B2
H: forall (Ξ“ : neg_ctx) (A : ty) (i : Ξ“ βˆ‹ A) (o : pat A †) (Ξ³ : dom o =[ val_n ]> Ξ“) (eqargs : {| pr1 := `+ B2; pr2 := p |} = {| pr1 := A †; pr2 := o |}), rew [fun projs : sigma (fun a : ty => pat a) => whn (p_dom (pr2 projs)) (pr1 projs)] eqargs in p = o -> eval (Cut' (var i) (o `α΅₯βŠ› Ξ³)) ≋ ret_delay (i β‹… o ⦇ Ξ³ ⦈)
Ξ“: neg_ctx
i: Ξ“ βˆ‹ `- (A4 βŠ• B2)
o: pat (`- (A4 βŠ• B2)) †
Ξ³: dom o =[ val_n ]> Ξ“
eqargs: {| pr1 := `+ (A4 βŠ• B2); pr2 := POr2 p |} = {| pr1 := (`- (A4 βŠ• B2)) †; pr2 := o |}
H2: `+ (A4 βŠ• B2),' POr2 p = (`- (A4 βŠ• B2)) †,' o
eval (Cut' (var i) (rew [fun projs : sigma (fun a : ty => pat a) => whn (p_dom (pr2 projs)) (pr1 projs)] eqargs in OrR2 p `α΅₯βŠ› Ξ³)) ≋ ret_delay (i β‹… o ⦇ Ξ³ ⦈)
A5, B3: pre_ty neg
p: pat `- A5
H: forall (Ξ“ : neg_ctx) (A : ty) (i : Ξ“ βˆ‹ A) (o : pat A †) (Ξ³ : dom o =[ val_n ]> Ξ“) (eqargs : {| pr1 := `- A5; pr2 := p |} = {| pr1 := A †; pr2 := o |}), rew [fun projs : sigma (fun a : ty => pat a) => whn (p_dom (pr2 projs)) (pr1 projs)] eqargs in p = o -> eval (Cut' (var i) (o `α΅₯βŠ› Ξ³)) ≋ ret_delay (i β‹… o ⦇ Ξ³ ⦈)
Ξ“: neg_ctx
i: Ξ“ βˆ‹ `+ (A5 & B3)
o: pat (`+ (A5 & B3)) †
Ξ³: dom o =[ val_n ]> Ξ“
eqargs: {| pr1 := `- (A5 & B3); pr2 := PAnd1 p |} = {| pr1 := (`+ (A5 & B3)) †; pr2 := o |}
H2: `- (A5 & B3),' PAnd1 p = (`+ (A5 & B3)) †,' o
eval (Cut' (var i) (rew [fun projs : sigma (fun a : ty => pat a) => whn (p_dom (pr2 projs)) (pr1 projs)] eqargs in AndL1 p `α΅₯βŠ› Ξ³)) ≋ ret_delay (i β‹… o ⦇ Ξ³ ⦈)
A6, B4: pre_ty neg
p: pat `- B4
H: forall (Ξ“ : neg_ctx) (A : ty) (i : Ξ“ βˆ‹ A) (o : pat A †) (Ξ³ : dom o =[ val_n ]> Ξ“) (eqargs : {| pr1 := `- B4; pr2 := p |} = {| pr1 := A †; pr2 := o |}), rew [fun projs : sigma (fun a : ty => pat a) => whn (p_dom (pr2 projs)) (pr1 projs)] eqargs in p = o -> eval (Cut' (var i) (o `α΅₯βŠ› Ξ³)) ≋ ret_delay (i β‹… o ⦇ Ξ³ ⦈)
Ξ“: neg_ctx
i: Ξ“ βˆ‹ `+ (A6 & B4)
o: pat (`+ (A6 & B4)) †
Ξ³: dom o =[ val_n ]> Ξ“
eqargs: {| pr1 := `- (A6 & B4); pr2 := PAnd2 p |} = {| pr1 := (`+ (A6 & B4)) †; pr2 := o |}
H2: `- (A6 & B4),' PAnd2 p = (`+ (A6 & B4)) †,' o
eval (Cut' (var i) (rew [fun projs : sigma (fun a : ty => pat a) => whn (p_dom (pr2 projs)) (pr1 projs)] eqargs in AndL2 p `α΅₯βŠ› Ξ³)) ≋ ret_delay (i β‹… o ⦇ Ξ³ ⦈)
A7: pre_ty neg
Ξ“: neg_ctx
i: Ξ“ βˆ‹ `- (↓ A7)
o: pat (`- (↓ A7)) †
Ξ³: dom o =[ val_n ]> Ξ“
eqargs: {| pr1 := `+ (↓ A7); pr2 := PShiftP A7 |} = {| pr1 := (`- (↓ A7)) †; pr2 := o |}
H1: `+ (↓ A7),' PShiftP A7 = (`- (↓ A7)) †,' o
eval (Cut' (var i) (rew [fun projs : sigma (fun a : ty => pat a) => whn (p_dom (pr2 projs)) (pr1 projs)] eqargs in ShiftPR (Whn (Var Ctx.top)) `α΅₯βŠ› Ξ³)) ≋ ret_delay (i β‹… o ⦇ Ξ³ ⦈)
A8: pre_ty pos
Ξ“: neg_ctx
i: Ξ“ βˆ‹ `+ (↑ A8)
o: pat (`+ (↑ A8)) †
Ξ³: dom o =[ val_n ]> Ξ“
eqargs: {| pr1 := `- (↑ A8); pr2 := PShiftN A8 |} = {| pr1 := (`+ (↑ A8)) †; pr2 := o |}
H1: `- (↑ A8),' PShiftN A8 = (`+ (↑ A8)) †,' o
eval (Cut' (var i) (rew [fun projs : sigma (fun a : ty => pat a) => whn (p_dom (pr2 projs)) (pr1 projs)] eqargs in ShiftNL (Whn (Var Ctx.top)) `α΅₯βŠ› Ξ³)) ≋ ret_delay (i β‹… o ⦇ Ξ³ ⦈)
A9: pre_ty neg
p: pat `- A9
H: forall (Ξ“ : neg_ctx) (A : ty) (i : Ξ“ βˆ‹ A) (o : pat A †) (Ξ³ : dom o =[ val_n ]> Ξ“) (eqargs : {| pr1 := `- A9; pr2 := p |} = {| pr1 := A †; pr2 := o |}), rew [fun projs : sigma (fun a : ty => pat a) => whn (p_dom (pr2 projs)) (pr1 projs)] eqargs in p = o -> eval (Cut' (var i) (o `α΅₯βŠ› Ξ³)) ≋ ret_delay (i β‹… o ⦇ Ξ³ ⦈)
Ξ“: neg_ctx
i: Ξ“ βˆ‹ `- (βŠ– A9)
o: pat (`- (βŠ– A9)) †
Ξ³: dom o =[ val_n ]> Ξ“
eqargs: {| pr1 := `+ (βŠ– A9); pr2 := PNegP p |} = {| pr1 := (`- (βŠ– A9)) †; pr2 := o |}
H2: `+ (βŠ– A9),' PNegP p = (`- (βŠ– A9)) †,' o
eval (Cut' (var i) (rew [fun projs : sigma (fun a : ty => pat a) => whn (p_dom (pr2 projs)) (pr1 projs)] eqargs in NegPR p `α΅₯βŠ› Ξ³)) ≋ ret_delay (i β‹… o ⦇ Ξ³ ⦈)
A10: pre_ty pos
p: pat `+ A10
H: forall (Ξ“ : neg_ctx) (A : ty) (i : Ξ“ βˆ‹ A) (o : pat A †) (Ξ³ : dom o =[ val_n ]> Ξ“) (eqargs : {| pr1 := `+ A10; pr2 := p |} = {| pr1 := A †; pr2 := o |}), rew [fun projs : sigma (fun a : ty => pat a) => whn (p_dom (pr2 projs)) (pr1 projs)] eqargs in p = o -> eval (Cut' (var i) (o `α΅₯βŠ› Ξ³)) ≋ ret_delay (i β‹… o ⦇ Ξ³ ⦈)
Ξ“: neg_ctx
i: Ξ“ βˆ‹ `+ (Β¬ A10)
o: pat (`+ (Β¬ A10)) †
Ξ³: dom o =[ val_n ]> Ξ“
eqargs: {| pr1 := `- (Β¬ A10); pr2 := PNegN p |} = {| pr1 := (`+ (Β¬ A10)) †; pr2 := o |}
H2: `- (Β¬ A10),' PNegN p = (`+ (Β¬ A10)) †,' o
eval (Cut' (var i) (rew [fun projs : sigma (fun a : ty => pat a) => whn (p_dom (pr2 projs)) (pr1 projs)] eqargs in NegNL p `α΅₯βŠ› Ξ³)) ≋ ret_delay (i β‹… o ⦇ Ξ³ ⦈)
Ξ“: neg_ctx
i: Ξ“ βˆ‹ `- 1
Ξ³: dom POne =[ val_n ]> Ξ“
H1: `+ 1,' POne = (`- 1) †,' POne

eval (Cut pos (Whn OneR) (var i)) ≋ ret_delay (i β‹… POne ⦇ Ξ³ ⦈)
Ξ“: neg_ctx
i: Ξ“ βˆ‹ `+ βŠ₯
Ξ³: dom PBot =[ val_n ]> Ξ“
H1: `- βŠ₯,' PBot = (`+ βŠ₯) †,' PBot
eval (Cut neg (var i) (Whn BotL)) ≋ ret_delay (i β‹… PBot ⦇ Ξ³ ⦈)
A1, B: pre_ty pos
p1: pat `+ A1
p2: pat `+ B
H: forall (Ξ“ : neg_ctx) (A : ty) (i : Ξ“ βˆ‹ A) (o : pat A †) (Ξ³ : dom o =[ val_n ]> Ξ“) (eqargs : {| pr1 := `+ A1; pr2 := p1 |} = {| pr1 := A †; pr2 := o |}), rew [fun projs : sigma (fun a : ty => pat a) => whn (p_dom (pr2 projs)) (pr1 projs)] eqargs in p1 = o -> eval (Cut' (var i) (o `α΅₯βŠ› Ξ³)) ≋ ret_delay (i β‹… o ⦇ Ξ³ ⦈)
H0: forall (Ξ“ : neg_ctx) (A : ty) (i : Ξ“ βˆ‹ A) (o : pat A †) (Ξ³ : dom o =[ val_n ]> Ξ“) (eqargs : {| pr1 := `+ B; pr2 := p2 |} = {| pr1 := A †; pr2 := o |}), rew [fun projs : sigma (fun a : ty => pat a) => whn (p_dom (pr2 projs)) (pr1 projs)] eqargs in p2 = o -> eval (Cut' (var i) (o `α΅₯βŠ› Ξ³)) ≋ ret_delay (i β‹… o ⦇ Ξ³ ⦈)
Ξ“: neg_ctx
i: Ξ“ βˆ‹ `- (A1 βŠ— B)
Ξ³: dom (PTen p1 p2) =[ val_n ]> Ξ“
H3: `+ (A1 βŠ— B),' PTen p1 p2 = (`- (A1 βŠ— B)) †,' PTen p1 p2
eval (Cut pos (Whn (TenR (p1 `α΅₯βŠ›α΅£ r_cover_l cover_cat `α΅₯βŠ› Ξ³) (p2 `α΅₯βŠ›α΅£ r_cover_r cover_cat `α΅₯βŠ› Ξ³))) (var i)) ≋ ret_delay (i β‹… PTen p1 p2 ⦇ Ξ³ ⦈)
A2, B0: pre_ty neg
p1: pat `- A2
p2: pat `- B0
H: forall (Ξ“ : neg_ctx) (A : ty) (i : Ξ“ βˆ‹ A) (o : pat A †) (Ξ³ : dom o =[ val_n ]> Ξ“) (eqargs : {| pr1 := `- A2; pr2 := p1 |} = {| pr1 := A †; pr2 := o |}), rew [fun projs : sigma (fun a : ty => pat a) => whn (p_dom (pr2 projs)) (pr1 projs)] eqargs in p1 = o -> eval (Cut' (var i) (o `α΅₯βŠ› Ξ³)) ≋ ret_delay (i β‹… o ⦇ Ξ³ ⦈)
H0: forall (Ξ“ : neg_ctx) (A : ty) (i : Ξ“ βˆ‹ A) (o : pat A †) (Ξ³ : dom o =[ val_n ]> Ξ“) (eqargs : {| pr1 := `- B0; pr2 := p2 |} = {| pr1 := A †; pr2 := o |}), rew [fun projs : sigma (fun a : ty => pat a) => whn (p_dom (pr2 projs)) (pr1 projs)] eqargs in p2 = o -> eval (Cut' (var i) (o `α΅₯βŠ› Ξ³)) ≋ ret_delay (i β‹… o ⦇ Ξ³ ⦈)
Ξ“: neg_ctx
i: Ξ“ βˆ‹ `+ (A2 β…‹ B0)
Ξ³: dom (PPar p1 p2) =[ val_n ]> Ξ“
H3: `- (A2 β…‹ B0),' PPar p1 p2 = (`+ (A2 β…‹ B0)) †,' PPar p1 p2
eval (Cut neg (var i) (Whn (ParL (p1 `α΅₯βŠ›α΅£ r_cover_l cover_cat `α΅₯βŠ› Ξ³) (p2 `α΅₯βŠ›α΅£ r_cover_r cover_cat `α΅₯βŠ› Ξ³)))) ≋ ret_delay (i β‹… PPar p1 p2 ⦇ Ξ³ ⦈)
A3, B1: pre_ty pos
p: pat `+ A3
H: forall (Ξ“ : neg_ctx) (A : ty) (i : Ξ“ βˆ‹ A) (o : pat A †) (Ξ³ : dom o =[ val_n ]> Ξ“) (eqargs : {| pr1 := `+ A3; pr2 := p |} = {| pr1 := A †; pr2 := o |}), rew [fun projs : sigma (fun a : ty => pat a) => whn (p_dom (pr2 projs)) (pr1 projs)] eqargs in p = o -> eval (Cut' (var i) (o `α΅₯βŠ› Ξ³)) ≋ ret_delay (i β‹… o ⦇ Ξ³ ⦈)
Ξ“: neg_ctx
i: Ξ“ βˆ‹ `- (A3 βŠ• B1)
Ξ³: dom (POr1 p) =[ val_n ]> Ξ“
H2: `+ (A3 βŠ• B1),' POr1 p = (`- (A3 βŠ• B1)) †,' POr1 p
eval (Cut pos (Whn (OrR1 (p `α΅₯βŠ› Ξ³))) (var i)) ≋ ret_delay (i β‹… POr1 p ⦇ Ξ³ ⦈)
A4, B2: pre_ty pos
p: pat `+ B2
H: forall (Ξ“ : neg_ctx) (A : ty) (i : Ξ“ βˆ‹ A) (o : pat A †) (Ξ³ : dom o =[ val_n ]> Ξ“) (eqargs : {| pr1 := `+ B2; pr2 := p |} = {| pr1 := A †; pr2 := o |}), rew [fun projs : sigma (fun a : ty => pat a) => whn (p_dom (pr2 projs)) (pr1 projs)] eqargs in p = o -> eval (Cut' (var i) (o `α΅₯βŠ› Ξ³)) ≋ ret_delay (i β‹… o ⦇ Ξ³ ⦈)
Ξ“: neg_ctx
i: Ξ“ βˆ‹ `- (A4 βŠ• B2)
Ξ³: dom (POr2 p) =[ val_n ]> Ξ“
H2: `+ (A4 βŠ• B2),' POr2 p = (`- (A4 βŠ• B2)) †,' POr2 p
eval (Cut pos (Whn (OrR2 (p `α΅₯βŠ› Ξ³))) (var i)) ≋ ret_delay (i β‹… POr2 p ⦇ Ξ³ ⦈)
A5, B3: pre_ty neg
p: pat `- A5
H: forall (Ξ“ : neg_ctx) (A : ty) (i : Ξ“ βˆ‹ A) (o : pat A †) (Ξ³ : dom o =[ val_n ]> Ξ“) (eqargs : {| pr1 := `- A5; pr2 := p |} = {| pr1 := A †; pr2 := o |}), rew [fun projs : sigma (fun a : ty => pat a) => whn (p_dom (pr2 projs)) (pr1 projs)] eqargs in p = o -> eval (Cut' (var i) (o `α΅₯βŠ› Ξ³)) ≋ ret_delay (i β‹… o ⦇ Ξ³ ⦈)
Ξ“: neg_ctx
i: Ξ“ βˆ‹ `+ (A5 & B3)
Ξ³: dom (PAnd1 p) =[ val_n ]> Ξ“
H2: `- (A5 & B3),' PAnd1 p = (`+ (A5 & B3)) †,' PAnd1 p
eval (Cut neg (var i) (Whn (AndL1 (p `α΅₯βŠ› Ξ³)))) ≋ ret_delay (i β‹… PAnd1 p ⦇ Ξ³ ⦈)
A6, B4: pre_ty neg
p: pat `- B4
H: forall (Ξ“ : neg_ctx) (A : ty) (i : Ξ“ βˆ‹ A) (o : pat A †) (Ξ³ : dom o =[ val_n ]> Ξ“) (eqargs : {| pr1 := `- B4; pr2 := p |} = {| pr1 := A †; pr2 := o |}), rew [fun projs : sigma (fun a : ty => pat a) => whn (p_dom (pr2 projs)) (pr1 projs)] eqargs in p = o -> eval (Cut' (var i) (o `α΅₯βŠ› Ξ³)) ≋ ret_delay (i β‹… o ⦇ Ξ³ ⦈)
Ξ“: neg_ctx
i: Ξ“ βˆ‹ `+ (A6 & B4)
Ξ³: dom (PAnd2 p) =[ val_n ]> Ξ“
H2: `- (A6 & B4),' PAnd2 p = (`+ (A6 & B4)) †,' PAnd2 p
eval (Cut neg (var i) (Whn (AndL2 (p `α΅₯βŠ› Ξ³)))) ≋ ret_delay (i β‹… PAnd2 p ⦇ Ξ³ ⦈)
A7: pre_ty neg
Ξ“: neg_ctx
i: Ξ“ βˆ‹ `- (↓ A7)
Ξ³: dom (PShiftP A7) =[ val_n ]> Ξ“
H1: `+ (↓ A7),' PShiftP A7 = (`- (↓ A7)) †,' PShiftP A7
eval (Cut pos (Whn (ShiftPR (Ξ³ `+ A7 Ctx.top))) (var i)) ≋ ret_delay (i β‹… PShiftP A7 ⦇ Ξ³ ⦈)
A8: pre_ty pos
Ξ“: neg_ctx
i: Ξ“ βˆ‹ `+ (↑ A8)
Ξ³: dom (PShiftN A8) =[ val_n ]> Ξ“
H1: `- (↑ A8),' PShiftN A8 = (`+ (↑ A8)) †,' PShiftN A8
eval (Cut neg (var i) (Whn (ShiftNL (Ξ³ `- A8 Ctx.top)))) ≋ ret_delay (i β‹… PShiftN A8 ⦇ Ξ³ ⦈)
A9: pre_ty neg
p: pat `- A9
H: forall (Ξ“ : neg_ctx) (A : ty) (i : Ξ“ βˆ‹ A) (o : pat A †) (Ξ³ : dom o =[ val_n ]> Ξ“) (eqargs : {| pr1 := `- A9; pr2 := p |} = {| pr1 := A †; pr2 := o |}), rew [fun projs : sigma (fun a : ty => pat a) => whn (p_dom (pr2 projs)) (pr1 projs)] eqargs in p = o -> eval (Cut' (var i) (o `α΅₯βŠ› Ξ³)) ≋ ret_delay (i β‹… o ⦇ Ξ³ ⦈)
Ξ“: neg_ctx
i: Ξ“ βˆ‹ `- (βŠ– A9)
Ξ³: dom (PNegP p) =[ val_n ]> Ξ“
H2: `+ (βŠ– A9),' PNegP p = (`- (βŠ– A9)) †,' PNegP p
eval (Cut pos (Whn (NegPR (p `α΅₯βŠ› Ξ³))) (var i)) ≋ ret_delay (i β‹… PNegP p ⦇ Ξ³ ⦈)
A10: pre_ty pos
p: pat `+ A10
H: forall (Ξ“ : neg_ctx) (A : ty) (i : Ξ“ βˆ‹ A) (o : pat A †) (Ξ³ : dom o =[ val_n ]> Ξ“) (eqargs : {| pr1 := `+ A10; pr2 := p |} = {| pr1 := A †; pr2 := o |}), rew [fun projs : sigma (fun a : ty => pat a) => whn (p_dom (pr2 projs)) (pr1 projs)] eqargs in p = o -> eval (Cut' (var i) (o `α΅₯βŠ› Ξ³)) ≋ ret_delay (i β‹… o ⦇ Ξ³ ⦈)
Ξ“: neg_ctx
i: Ξ“ βˆ‹ `+ (Β¬ A10)
Ξ³: dom (PNegN p) =[ val_n ]> Ξ“
H2: `- (Β¬ A10),' PNegN p = (`+ (Β¬ A10)) †,' PNegN p
eval (Cut neg (var i) (Whn (NegNL (p `α΅₯βŠ› Ξ³)))) ≋ ret_delay (i β‹… PNegN p ⦇ Ξ³ ⦈)
Ξ“: neg_ctx
i: Ξ“ βˆ‹ `- 1
Ξ³: dom POne =[ val_n ]> Ξ“
H1: `+ 1,' POne = (`- 1) †,' POne

nf_eq (s_var_upg i β‹… v_split_p OneR) (i β‹… POne ⦇ Ξ³ ⦈)
Ξ“: neg_ctx
i: Ξ“ βˆ‹ `+ βŠ₯
Ξ³: dom PBot =[ val_n ]> Ξ“
H1: `- βŠ₯,' PBot = (`+ βŠ₯) †,' PBot
nf_eq (s_var_upg i β‹… v_split_n BotL) (i β‹… PBot ⦇ Ξ³ ⦈)
A1, B: pre_ty pos
p1: pat `+ A1
p2: pat `+ B
H: forall (Ξ“ : neg_ctx) (A : ty) (i : Ξ“ βˆ‹ A) (o : pat A †) (Ξ³ : dom o =[ val_n ]> Ξ“) (eqargs : {| pr1 := `+ A1; pr2 := p1 |} = {| pr1 := A †; pr2 := o |}), rew [fun projs : sigma (fun a : ty => pat a) => whn (p_dom (pr2 projs)) (pr1 projs)] eqargs in p1 = o -> eval (Cut' (var i) (o `α΅₯βŠ› Ξ³)) ≋ ret_delay (i β‹… o ⦇ Ξ³ ⦈)
H0: forall (Ξ“ : neg_ctx) (A : ty) (i : Ξ“ βˆ‹ A) (o : pat A †) (Ξ³ : dom o =[ val_n ]> Ξ“) (eqargs : {| pr1 := `+ B; pr2 := p2 |} = {| pr1 := A †; pr2 := o |}), rew [fun projs : sigma (fun a : ty => pat a) => whn (p_dom (pr2 projs)) (pr1 projs)] eqargs in p2 = o -> eval (Cut' (var i) (o `α΅₯βŠ› Ξ³)) ≋ ret_delay (i β‹… o ⦇ Ξ³ ⦈)
Ξ“: neg_ctx
i: Ξ“ βˆ‹ `- (A1 βŠ— B)
Ξ³: dom (PTen p1 p2) =[ val_n ]> Ξ“
H3: `+ (A1 βŠ— B),' PTen p1 p2 = (`- (A1 βŠ— B)) †,' PTen p1 p2
nf_eq (s_var_upg i β‹… v_split_p (TenR (p1 `α΅₯βŠ›α΅£ r_cover_l cover_cat `α΅₯βŠ› Ξ³) (p2 `α΅₯βŠ›α΅£ r_cover_r cover_cat `α΅₯βŠ› Ξ³))) (i β‹… PTen p1 p2 ⦇ Ξ³ ⦈)
A2, B0: pre_ty neg
p1: pat `- A2
p2: pat `- B0
H: forall (Ξ“ : neg_ctx) (A : ty) (i : Ξ“ βˆ‹ A) (o : pat A †) (Ξ³ : dom o =[ val_n ]> Ξ“) (eqargs : {| pr1 := `- A2; pr2 := p1 |} = {| pr1 := A †; pr2 := o |}), rew [fun projs : sigma (fun a : ty => pat a) => whn (p_dom (pr2 projs)) (pr1 projs)] eqargs in p1 = o -> eval (Cut' (var i) (o `α΅₯βŠ› Ξ³)) ≋ ret_delay (i β‹… o ⦇ Ξ³ ⦈)
H0: forall (Ξ“ : neg_ctx) (A : ty) (i : Ξ“ βˆ‹ A) (o : pat A †) (Ξ³ : dom o =[ val_n ]> Ξ“) (eqargs : {| pr1 := `- B0; pr2 := p2 |} = {| pr1 := A †; pr2 := o |}), rew [fun projs : sigma (fun a : ty => pat a) => whn (p_dom (pr2 projs)) (pr1 projs)] eqargs in p2 = o -> eval (Cut' (var i) (o `α΅₯βŠ› Ξ³)) ≋ ret_delay (i β‹… o ⦇ Ξ³ ⦈)
Ξ“: neg_ctx
i: Ξ“ βˆ‹ `+ (A2 β…‹ B0)
Ξ³: dom (PPar p1 p2) =[ val_n ]> Ξ“
H3: `- (A2 β…‹ B0),' PPar p1 p2 = (`+ (A2 β…‹ B0)) †,' PPar p1 p2
nf_eq (s_var_upg i β‹… v_split_n (ParL (p1 `α΅₯βŠ›α΅£ r_cover_l cover_cat `α΅₯βŠ› Ξ³) (p2 `α΅₯βŠ›α΅£ r_cover_r cover_cat `α΅₯βŠ› Ξ³))) (i β‹… PPar p1 p2 ⦇ Ξ³ ⦈)
A3, B1: pre_ty pos
p: pat `+ A3
H: forall (Ξ“ : neg_ctx) (A : ty) (i : Ξ“ βˆ‹ A) (o : pat A †) (Ξ³ : dom o =[ val_n ]> Ξ“) (eqargs : {| pr1 := `+ A3; pr2 := p |} = {| pr1 := A †; pr2 := o |}), rew [fun projs : sigma (fun a : ty => pat a) => whn (p_dom (pr2 projs)) (pr1 projs)] eqargs in p = o -> eval (Cut' (var i) (o `α΅₯βŠ› Ξ³)) ≋ ret_delay (i β‹… o ⦇ Ξ³ ⦈)
Ξ“: neg_ctx
i: Ξ“ βˆ‹ `- (A3 βŠ• B1)
Ξ³: dom (POr1 p) =[ val_n ]> Ξ“
H2: `+ (A3 βŠ• B1),' POr1 p = (`- (A3 βŠ• B1)) †,' POr1 p
nf_eq (s_var_upg i β‹… v_split_p (OrR1 (p `α΅₯βŠ› Ξ³))) (i β‹… POr1 p ⦇ Ξ³ ⦈)
A4, B2: pre_ty pos
p: pat `+ B2
H: forall (Ξ“ : neg_ctx) (A : ty) (i : Ξ“ βˆ‹ A) (o : pat A †) (Ξ³ : dom o =[ val_n ]> Ξ“) (eqargs : {| pr1 := `+ B2; pr2 := p |} = {| pr1 := A †; pr2 := o |}), rew [fun projs : sigma (fun a : ty => pat a) => whn (p_dom (pr2 projs)) (pr1 projs)] eqargs in p = o -> eval (Cut' (var i) (o `α΅₯βŠ› Ξ³)) ≋ ret_delay (i β‹… o ⦇ Ξ³ ⦈)
Ξ“: neg_ctx
i: Ξ“ βˆ‹ `- (A4 βŠ• B2)
Ξ³: dom (POr2 p) =[ val_n ]> Ξ“
H2: `+ (A4 βŠ• B2),' POr2 p = (`- (A4 βŠ• B2)) †,' POr2 p
nf_eq (s_var_upg i β‹… v_split_p (OrR2 (p `α΅₯βŠ› Ξ³))) (i β‹… POr2 p ⦇ Ξ³ ⦈)
A5, B3: pre_ty neg
p: pat `- A5
H: forall (Ξ“ : neg_ctx) (A : ty) (i : Ξ“ βˆ‹ A) (o : pat A †) (Ξ³ : dom o =[ val_n ]> Ξ“) (eqargs : {| pr1 := `- A5; pr2 := p |} = {| pr1 := A †; pr2 := o |}), rew [fun projs : sigma (fun a : ty => pat a) => whn (p_dom (pr2 projs)) (pr1 projs)] eqargs in p = o -> eval (Cut' (var i) (o `α΅₯βŠ› Ξ³)) ≋ ret_delay (i β‹… o ⦇ Ξ³ ⦈)
Ξ“: neg_ctx
i: Ξ“ βˆ‹ `+ (A5 & B3)
Ξ³: dom (PAnd1 p) =[ val_n ]> Ξ“
H2: `- (A5 & B3),' PAnd1 p = (`+ (A5 & B3)) †,' PAnd1 p
nf_eq (s_var_upg i β‹… v_split_n (AndL1 (p `α΅₯βŠ› Ξ³))) (i β‹… PAnd1 p ⦇ Ξ³ ⦈)
A6, B4: pre_ty neg
p: pat `- B4
H: forall (Ξ“ : neg_ctx) (A : ty) (i : Ξ“ βˆ‹ A) (o : pat A †) (Ξ³ : dom o =[ val_n ]> Ξ“) (eqargs : {| pr1 := `- B4; pr2 := p |} = {| pr1 := A †; pr2 := o |}), rew [fun projs : sigma (fun a : ty => pat a) => whn (p_dom (pr2 projs)) (pr1 projs)] eqargs in p = o -> eval (Cut' (var i) (o `α΅₯βŠ› Ξ³)) ≋ ret_delay (i β‹… o ⦇ Ξ³ ⦈)
Ξ“: neg_ctx
i: Ξ“ βˆ‹ `+ (A6 & B4)
Ξ³: dom (PAnd2 p) =[ val_n ]> Ξ“
H2: `- (A6 & B4),' PAnd2 p = (`+ (A6 & B4)) †,' PAnd2 p
nf_eq (s_var_upg i β‹… v_split_n (AndL2 (p `α΅₯βŠ› Ξ³))) (i β‹… PAnd2 p ⦇ Ξ³ ⦈)
A7: pre_ty neg
Ξ“: neg_ctx
i: Ξ“ βˆ‹ `- (↓ A7)
Ξ³: dom (PShiftP A7) =[ val_n ]> Ξ“
H1: `+ (↓ A7),' PShiftP A7 = (`- (↓ A7)) †,' PShiftP A7
nf_eq (s_var_upg i β‹… v_split_p (ShiftPR (Ξ³ `+ A7 Ctx.top))) (i β‹… PShiftP A7 ⦇ Ξ³ ⦈)
A8: pre_ty pos
Ξ“: neg_ctx
i: Ξ“ βˆ‹ `+ (↑ A8)
Ξ³: dom (PShiftN A8) =[ val_n ]> Ξ“
H1: `- (↑ A8),' PShiftN A8 = (`+ (↑ A8)) †,' PShiftN A8
nf_eq (s_var_upg i β‹… v_split_n (ShiftNL (Ξ³ `- A8 Ctx.top))) (i β‹… PShiftN A8 ⦇ Ξ³ ⦈)
A9: pre_ty neg
p: pat `- A9
H: forall (Ξ“ : neg_ctx) (A : ty) (i : Ξ“ βˆ‹ A) (o : pat A †) (Ξ³ : dom o =[ val_n ]> Ξ“) (eqargs : {| pr1 := `- A9; pr2 := p |} = {| pr1 := A †; pr2 := o |}), rew [fun projs : sigma (fun a : ty => pat a) => whn (p_dom (pr2 projs)) (pr1 projs)] eqargs in p = o -> eval (Cut' (var i) (o `α΅₯βŠ› Ξ³)) ≋ ret_delay (i β‹… o ⦇ Ξ³ ⦈)
Ξ“: neg_ctx
i: Ξ“ βˆ‹ `- (βŠ– A9)
Ξ³: dom (PNegP p) =[ val_n ]> Ξ“
H2: `+ (βŠ– A9),' PNegP p = (`- (βŠ– A9)) †,' PNegP p
nf_eq (s_var_upg i β‹… v_split_p (NegPR (p `α΅₯βŠ› Ξ³))) (i β‹… PNegP p ⦇ Ξ³ ⦈)
A10: pre_ty pos
p: pat `+ A10
H: forall (Ξ“ : neg_ctx) (A : ty) (i : Ξ“ βˆ‹ A) (o : pat A †) (Ξ³ : dom o =[ val_n ]> Ξ“) (eqargs : {| pr1 := `+ A10; pr2 := p |} = {| pr1 := A †; pr2 := o |}), rew [fun projs : sigma (fun a : ty => pat a) => whn (p_dom (pr2 projs)) (pr1 projs)] eqargs in p = o -> eval (Cut' (var i) (o `α΅₯βŠ› Ξ³)) ≋ ret_delay (i β‹… o ⦇ Ξ³ ⦈)
Ξ“: neg_ctx
i: Ξ“ βˆ‹ `+ (Β¬ A10)
Ξ³: dom (PNegN p) =[ val_n ]> Ξ“
H2: `- (Β¬ A10),' PNegN p = (`+ (Β¬ A10)) †,' PNegN p
nf_eq (s_var_upg i β‹… v_split_n (NegNL (p `α΅₯βŠ› Ξ³))) (i β‹… PNegN p ⦇ Ξ³ ⦈)
A1, B: pre_ty pos
p1: pat `+ A1
p2: pat `+ B
H: forall (Ξ“ : neg_ctx) (A : ty) (i : Ξ“ βˆ‹ A) (o : pat A †) (Ξ³ : dom o =[ val_n ]> Ξ“) (eqargs : {| pr1 := `+ A1; pr2 := p1 |} = {| pr1 := A †; pr2 := o |}), rew [fun projs : sigma (fun a : ty => pat a) => whn (p_dom (pr2 projs)) (pr1 projs)] eqargs in p1 = o -> eval (Cut' (var i) (o `α΅₯βŠ› Ξ³)) ≋ ret_delay (i β‹… o ⦇ Ξ³ ⦈)
H0: forall (Ξ“ : neg_ctx) (A : ty) (i : Ξ“ βˆ‹ A) (o : pat A †) (Ξ³ : dom o =[ val_n ]> Ξ“) (eqargs : {| pr1 := `+ B; pr2 := p2 |} = {| pr1 := A †; pr2 := o |}), rew [fun projs : sigma (fun a : ty => pat a) => whn (p_dom (pr2 projs)) (pr1 projs)] eqargs in p2 = o -> eval (Cut' (var i) (o `α΅₯βŠ› Ξ³)) ≋ ret_delay (i β‹… o ⦇ Ξ³ ⦈)
Ξ“: neg_ctx
i: Ξ“ βˆ‹ `- (A1 βŠ— B)
Ξ³: dom (PTen p1 p2) =[ val_n ]> Ξ“
H3: `+ (A1 βŠ— B),' PTen p1 p2 = (`- (A1 βŠ— B)) †,' PTen p1 p2

nf_eq (s_var_upg i β‹… v_split_p (TenR (p1 `α΅₯βŠ›α΅£ r_cover_l cover_cat `α΅₯βŠ› Ξ³) (p2 `α΅₯βŠ›α΅£ r_cover_r cover_cat `α΅₯βŠ› Ξ³))) (i β‹… PTen p1 p2 ⦇ Ξ³ ⦈)
A2, B0: pre_ty neg
p1: pat `- A2
p2: pat `- B0
H: forall (Ξ“ : neg_ctx) (A : ty) (i : Ξ“ βˆ‹ A) (o : pat A †) (Ξ³ : dom o =[ val_n ]> Ξ“) (eqargs : {| pr1 := `- A2; pr2 := p1 |} = {| pr1 := A †; pr2 := o |}), rew [fun projs : sigma (fun a : ty => pat a) => whn (p_dom (pr2 projs)) (pr1 projs)] eqargs in p1 = o -> eval (Cut' (var i) (o `α΅₯βŠ› Ξ³)) ≋ ret_delay (i β‹… o ⦇ Ξ³ ⦈)
H0: forall (Ξ“ : neg_ctx) (A : ty) (i : Ξ“ βˆ‹ A) (o : pat A †) (Ξ³ : dom o =[ val_n ]> Ξ“) (eqargs : {| pr1 := `- B0; pr2 := p2 |} = {| pr1 := A †; pr2 := o |}), rew [fun projs : sigma (fun a : ty => pat a) => whn (p_dom (pr2 projs)) (pr1 projs)] eqargs in p2 = o -> eval (Cut' (var i) (o `α΅₯βŠ› Ξ³)) ≋ ret_delay (i β‹… o ⦇ Ξ³ ⦈)
Ξ“: neg_ctx
i: Ξ“ βˆ‹ `+ (A2 β…‹ B0)
Ξ³: dom (PPar p1 p2) =[ val_n ]> Ξ“
H3: `- (A2 β…‹ B0),' PPar p1 p2 = (`+ (A2 β…‹ B0)) †,' PPar p1 p2
nf_eq (s_var_upg i β‹… v_split_n (ParL (p1 `α΅₯βŠ›α΅£ r_cover_l cover_cat `α΅₯βŠ› Ξ³) (p2 `α΅₯βŠ›α΅£ r_cover_r cover_cat `α΅₯βŠ› Ξ³))) (i β‹… PPar p1 p2 ⦇ Ξ³ ⦈)
A3, B1: pre_ty pos
p: pat `+ A3
H: forall (Ξ“ : neg_ctx) (A : ty) (i : Ξ“ βˆ‹ A) (o : pat A †) (Ξ³ : dom o =[ val_n ]> Ξ“) (eqargs : {| pr1 := `+ A3; pr2 := p |} = {| pr1 := A †; pr2 := o |}), rew [fun projs : sigma (fun a : ty => pat a) => whn (p_dom (pr2 projs)) (pr1 projs)] eqargs in p = o -> eval (Cut' (var i) (o `α΅₯βŠ› Ξ³)) ≋ ret_delay (i β‹… o ⦇ Ξ³ ⦈)
Ξ“: neg_ctx
i: Ξ“ βˆ‹ `- (A3 βŠ• B1)
Ξ³: dom (POr1 p) =[ val_n ]> Ξ“
H2: `+ (A3 βŠ• B1),' POr1 p = (`- (A3 βŠ• B1)) †,' POr1 p
nf_eq (s_var_upg i β‹… v_split_p (OrR1 (p `α΅₯βŠ› Ξ³))) (i β‹… POr1 p ⦇ Ξ³ ⦈)
A4, B2: pre_ty pos
p: pat `+ B2
H: forall (Ξ“ : neg_ctx) (A : ty) (i : Ξ“ βˆ‹ A) (o : pat A †) (Ξ³ : dom o =[ val_n ]> Ξ“) (eqargs : {| pr1 := `+ B2; pr2 := p |} = {| pr1 := A †; pr2 := o |}), rew [fun projs : sigma (fun a : ty => pat a) => whn (p_dom (pr2 projs)) (pr1 projs)] eqargs in p = o -> eval (Cut' (var i) (o `α΅₯βŠ› Ξ³)) ≋ ret_delay (i β‹… o ⦇ Ξ³ ⦈)
Ξ“: neg_ctx
i: Ξ“ βˆ‹ `- (A4 βŠ• B2)
Ξ³: dom (POr2 p) =[ val_n ]> Ξ“
H2: `+ (A4 βŠ• B2),' POr2 p = (`- (A4 βŠ• B2)) †,' POr2 p
nf_eq (s_var_upg i β‹… v_split_p (OrR2 (p `α΅₯βŠ› Ξ³))) (i β‹… POr2 p ⦇ Ξ³ ⦈)
A5, B3: pre_ty neg
p: pat `- A5
H: forall (Ξ“ : neg_ctx) (A : ty) (i : Ξ“ βˆ‹ A) (o : pat A †) (Ξ³ : dom o =[ val_n ]> Ξ“) (eqargs : {| pr1 := `- A5; pr2 := p |} = {| pr1 := A †; pr2 := o |}), rew [fun projs : sigma (fun a : ty => pat a) => whn (p_dom (pr2 projs)) (pr1 projs)] eqargs in p = o -> eval (Cut' (var i) (o `α΅₯βŠ› Ξ³)) ≋ ret_delay (i β‹… o ⦇ Ξ³ ⦈)
Ξ“: neg_ctx
i: Ξ“ βˆ‹ `+ (A5 & B3)
Ξ³: dom (PAnd1 p) =[ val_n ]> Ξ“
H2: `- (A5 & B3),' PAnd1 p = (`+ (A5 & B3)) †,' PAnd1 p
nf_eq (s_var_upg i β‹… v_split_n (AndL1 (p `α΅₯βŠ› Ξ³))) (i β‹… PAnd1 p ⦇ Ξ³ ⦈)
A6, B4: pre_ty neg
p: pat `- B4
H: forall (Ξ“ : neg_ctx) (A : ty) (i : Ξ“ βˆ‹ A) (o : pat A †) (Ξ³ : dom o =[ val_n ]> Ξ“) (eqargs : {| pr1 := `- B4; pr2 := p |} = {| pr1 := A †; pr2 := o |}), rew [fun projs : sigma (fun a : ty => pat a) => whn (p_dom (pr2 projs)) (pr1 projs)] eqargs in p = o -> eval (Cut' (var i) (o `α΅₯βŠ› Ξ³)) ≋ ret_delay (i β‹… o ⦇ Ξ³ ⦈)
Ξ“: neg_ctx
i: Ξ“ βˆ‹ `+ (A6 & B4)
Ξ³: dom (PAnd2 p) =[ val_n ]> Ξ“
H2: `- (A6 & B4),' PAnd2 p = (`+ (A6 & B4)) †,' PAnd2 p
nf_eq (s_var_upg i β‹… v_split_n (AndL2 (p `α΅₯βŠ› Ξ³))) (i β‹… PAnd2 p ⦇ Ξ³ ⦈)
A7: pre_ty neg
Ξ“: neg_ctx
i: Ξ“ βˆ‹ `- (↓ A7)
Ξ³: dom (PShiftP A7) =[ val_n ]> Ξ“
H1: `+ (↓ A7),' PShiftP A7 = (`- (↓ A7)) †,' PShiftP A7
nf_eq (s_var_upg i β‹… v_split_p (ShiftPR (Ξ³ `+ A7 Ctx.top))) (i β‹… PShiftP A7 ⦇ Ξ³ ⦈)
A8: pre_ty pos
Ξ“: neg_ctx
i: Ξ“ βˆ‹ `+ (↑ A8)
Ξ³: dom (PShiftN A8) =[ val_n ]> Ξ“
H1: `- (↑ A8),' PShiftN A8 = (`+ (↑ A8)) †,' PShiftN A8
nf_eq (s_var_upg i β‹… v_split_n (ShiftNL (Ξ³ `- A8 Ctx.top))) (i β‹… PShiftN A8 ⦇ Ξ³ ⦈)
A9: pre_ty neg
p: pat `- A9
H: forall (Ξ“ : neg_ctx) (A : ty) (i : Ξ“ βˆ‹ A) (o : pat A †) (Ξ³ : dom o =[ val_n ]> Ξ“) (eqargs : {| pr1 := `- A9; pr2 := p |} = {| pr1 := A †; pr2 := o |}), rew [fun projs : sigma (fun a : ty => pat a) => whn (p_dom (pr2 projs)) (pr1 projs)] eqargs in p = o -> eval (Cut' (var i) (o `α΅₯βŠ› Ξ³)) ≋ ret_delay (i β‹… o ⦇ Ξ³ ⦈)
Ξ“: neg_ctx
i: Ξ“ βˆ‹ `- (βŠ– A9)
Ξ³: dom (PNegP p) =[ val_n ]> Ξ“
H2: `+ (βŠ– A9),' PNegP p = (`- (βŠ– A9)) †,' PNegP p
nf_eq (s_var_upg i β‹… v_split_p (NegPR (p `α΅₯βŠ› Ξ³))) (i β‹… PNegP p ⦇ Ξ³ ⦈)
A10: pre_ty pos
p: pat `+ A10
H: forall (Ξ“ : neg_ctx) (A : ty) (i : Ξ“ βˆ‹ A) (o : pat A †) (Ξ³ : dom o =[ val_n ]> Ξ“) (eqargs : {| pr1 := `+ A10; pr2 := p |} = {| pr1 := A †; pr2 := o |}), rew [fun projs : sigma (fun a : ty => pat a) => whn (p_dom (pr2 projs)) (pr1 projs)] eqargs in p = o -> eval (Cut' (var i) (o `α΅₯βŠ› Ξ³)) ≋ ret_delay (i β‹… o ⦇ Ξ³ ⦈)
Ξ“: neg_ctx
i: Ξ“ βˆ‹ `+ (Β¬ A10)
Ξ³: dom (PNegN p) =[ val_n ]> Ξ“
H2: `- (Β¬ A10),' PNegN p = (`+ (Β¬ A10)) †,' PNegN p
nf_eq (s_var_upg i β‹… v_split_n (NegNL (p `α΅₯βŠ› Ξ³))) (i β‹… PNegN p ⦇ Ξ³ ⦈)
all: match goal with | Ξ³ : dom ?p =[val_n]> _ |- _ => first [ exact (nf_eq_split_p _ p Ξ³) | exact (nf_eq_split_n _ p Ξ³) ] end.

Finally we prove the finite chain property. The proof here is quite tedious again, with numerous cases, but it is still by brutally walking through the structure of one-step evaluation and finding the needed redex.

  

well_founded head_inst_nostep
y: ty
o: obs_op y
B: ty
m: obs_op B
Ξ“: neg_ctx
v: val_n Ξ“ y
a: dom o =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
t0: is_var v -> T0
i0: evalβ‚’ (v βŠ™ o β¦— a ⦘) β‰Š ret_delay (i β‹… m)

Acc head_inst_nostep (B,' m)
p: pre_ty pos
o: obs_op `+ p
B: ty
m: obs_op B
Ξ“: neg_ctx
v: val Ξ“ `+ p
a: dom o =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
t0: is_var v -> T0
i0: evalβ‚’ (v βŠ™ o β¦— a ⦘) β‰Š ret_delay (i β‹… m)

Acc head_inst_nostep (B,' m)
p: pre_ty neg
o: obs_op `+ p
B: ty
m: obs_op B
Ξ“: neg_ctx
v: val Ξ“ `+ p
a: dom o =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
t0: is_var v -> T0
i0: evalβ‚’ (v βŠ™ o β¦— a ⦘) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
p: pre_ty pos
o: obs_op `- p
B: ty
m: obs_op B
Ξ“: neg_ctx
v: val Ξ“ `- p
a: dom o =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
t0: is_var v -> T0
i0: evalβ‚’ (v βŠ™ o β¦— a ⦘) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
p: pre_ty neg
o: obs_op `- p
B: ty
m: obs_op B
Ξ“: neg_ctx
v: val Ξ“ `- p
a: dom o =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
t0: is_var v -> T0
i0: evalβ‚’ (v βŠ™ o β¦— a ⦘) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
o: obs_op `+ 1
B: ty
m: obs_op B
Ξ“: neg_ctx
a: dom o =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
t0: is_var OneR -> T0
i0: evalβ‚’ (OneR βŠ™ o β¦— a ⦘) β‰Š ret_delay (i β‹… m)

Acc head_inst_nostep (B,' m)
A0, B0: pre_ty pos
o: obs_op `+ (A0 βŠ— B0)
B: ty
m: obs_op B
Ξ“: neg_ctx
w: whn Ξ“ `+ A0
w0: whn Ξ“ `+ B0
a: dom o =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
t0: is_var (TenR w w0) -> T0
i0: evalβ‚’ (TenR w w0 βŠ™ o β¦— a ⦘) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A4, B4: pre_ty pos
o: obs_op `+ (A4 βŠ• B4)
B: ty
m: obs_op B
Ξ“: neg_ctx
w3: whn Ξ“ `+ A4
a: dom o =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
t0: is_var (OrR1 w3) -> T0
i0: evalβ‚’ (OrR1 w3 βŠ™ o β¦— a ⦘) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A5, B5: pre_ty pos
o: obs_op `+ (A5 βŠ• B5)
B: ty
m: obs_op B
Ξ“: neg_ctx
w4: whn Ξ“ `+ B5
a: dom o =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
t0: is_var (OrR2 w4) -> T0
i0: evalβ‚’ (OrR2 w4 βŠ™ o β¦— a ⦘) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A10: pre_ty neg
o: obs_op `+ (↓ A10)
B: ty
m: obs_op B
Ξ“: neg_ctx
t1: term Ξ“ `+ A10
a: dom o =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
t0: is_var (ShiftPR t1) -> T0
i0: evalβ‚’ (ShiftPR t1 βŠ™ o β¦— a ⦘) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A14: pre_ty neg
o: obs_op `+ (βŠ– A14)
B: ty
m: obs_op B
Ξ“: neg_ctx
w7: whn Ξ“ `- A14
a: dom o =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
t0: is_var (NegPR w7) -> T0
i0: evalβ‚’ (NegPR w7 βŠ™ o β¦— a ⦘) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
p: pre_ty neg
o: obs_op `+ p
B: ty
m: obs_op B
Ξ“: neg_ctx
s: state (Ξ“ β–Άβ‚“ (`+ p) †)
a: dom o =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
t0: is_var (Mu s) -> T0
i0: evalβ‚’ (Mu s βŠ™ o β¦— a ⦘) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A1: pre_ty neg
o: obs_op `+ A1
B: ty
m: obs_op B
Ξ“: neg_ctx
t2: term (Ξ“ β–Άβ‚“ `+ A1) `+ A1
a: dom o =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
t0: is_var (RecR t2) -> T0
i0: evalβ‚’ (RecR t2 βŠ™ o β¦— a ⦘) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
p: pre_ty neg
o: obs_op `+ p
B: ty
m: obs_op B
Ξ“: neg_ctx
w: whn Ξ“ `+ p
a: dom o =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
t0: is_var (Whn w) -> T0
i0: evalβ‚’ (Whn w βŠ™ o β¦— a ⦘) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
p: pre_ty pos
o: obs_op `- p
B: ty
m: obs_op B
Ξ“: neg_ctx
s: state (Ξ“ β–Άβ‚“ (`- p) †)
a: dom o =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
t0: is_var (Mu s) -> T0
i0: evalβ‚’ (Mu s βŠ™ o β¦— a ⦘) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A0: pre_ty pos
o: obs_op `- A0
B: ty
m: obs_op B
Ξ“: neg_ctx
t1: term (Ξ“ β–Άβ‚“ `- A0) `- A0
a: dom o =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
t0: is_var (RecL t1) -> T0
i0: evalβ‚’ (RecL t1 βŠ™ o β¦— a ⦘) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
p: pre_ty pos
o: obs_op `- p
B: ty
m: obs_op B
Ξ“: neg_ctx
w: whn Ξ“ `- p
a: dom o =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
t0: is_var (Whn w) -> T0
i0: evalβ‚’ (Whn w βŠ™ o β¦— a ⦘) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
o: obs_op `- βŠ₯
B: ty
m: obs_op B
Ξ“: neg_ctx
a: dom o =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
t0: is_var BotL -> T0
i0: evalβ‚’ (BotL βŠ™ o β¦— a ⦘) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A3, B3: pre_ty neg
o: obs_op `- (A3 β…‹ B3)
B: ty
m: obs_op B
Ξ“: neg_ctx
w1: whn Ξ“ `- A3
w2: whn Ξ“ `- B3
a: dom o =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
t0: is_var (ParL w1 w2) -> T0
i0: evalβ‚’ (ParL w1 w2 βŠ™ o β¦— a ⦘) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A8, B8: pre_ty neg
o: obs_op `- (A8 & B8)
B: ty
m: obs_op B
Ξ“: neg_ctx
w5: whn Ξ“ `- A8
a: dom o =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
t0: is_var (AndL1 w5) -> T0
i0: evalβ‚’ (AndL1 w5 βŠ™ o β¦— a ⦘) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A9, B9: pre_ty neg
o: obs_op `- (A9 & B9)
B: ty
m: obs_op B
Ξ“: neg_ctx
w6: whn Ξ“ `- B9
a: dom o =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
t0: is_var (AndL2 w6) -> T0
i0: evalβ‚’ (AndL2 w6 βŠ™ o β¦— a ⦘) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A13: pre_ty pos
o: obs_op `- (↑ A13)
B: ty
m: obs_op B
Ξ“: neg_ctx
t2: term Ξ“ `- A13
a: dom o =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
t0: is_var (ShiftNL t2) -> T0
i0: evalβ‚’ (ShiftNL t2 βŠ™ o β¦— a ⦘) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A17: pre_ty pos
o: obs_op `- (Β¬ A17)
B: ty
m: obs_op B
Ξ“: neg_ctx
w8: whn Ξ“ `+ A17
a: dom o =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
t0: is_var (NegNL w8) -> T0
i0: evalβ‚’ (NegNL w8 βŠ™ o β¦— a ⦘) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
o: obs_op `+ 1
B: ty
m: obs_op B
Ξ“: neg_ctx
a: dom o =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
i0: evalβ‚’ (OneR βŠ™ o β¦— a ⦘) β‰Š ret_delay (i β‹… m)

Acc head_inst_nostep (B,' m)
A0, B0: pre_ty pos
o: obs_op `+ (A0 βŠ— B0)
B: ty
m: obs_op B
Ξ“: neg_ctx
w: whn Ξ“ `+ A0
w0: whn Ξ“ `+ B0
a: dom o =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
i0: evalβ‚’ (TenR w w0 βŠ™ o β¦— a ⦘) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A4, B4: pre_ty pos
o: obs_op `+ (A4 βŠ• B4)
B: ty
m: obs_op B
Ξ“: neg_ctx
w3: whn Ξ“ `+ A4
a: dom o =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
i0: evalβ‚’ (OrR1 w3 βŠ™ o β¦— a ⦘) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A5, B5: pre_ty pos
o: obs_op `+ (A5 βŠ• B5)
B: ty
m: obs_op B
Ξ“: neg_ctx
w4: whn Ξ“ `+ B5
a: dom o =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
i0: evalβ‚’ (OrR2 w4 βŠ™ o β¦— a ⦘) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A10: pre_ty neg
o: obs_op `+ (↓ A10)
B: ty
m: obs_op B
Ξ“: neg_ctx
t1: term Ξ“ `+ A10
a: dom o =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
i0: evalβ‚’ (ShiftPR t1 βŠ™ o β¦— a ⦘) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A14: pre_ty neg
o: obs_op `+ (βŠ– A14)
B: ty
m: obs_op B
Ξ“: neg_ctx
w7: whn Ξ“ `- A14
a: dom o =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
i0: evalβ‚’ (NegPR w7 βŠ™ o β¦— a ⦘) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
p: pre_ty neg
o: obs_op `+ p
B: ty
m: obs_op B
Ξ“: neg_ctx
s: state (Ξ“ β–Άβ‚“ (`+ p) †)
a: dom o =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
i0: evalβ‚’ (Mu s βŠ™ o β¦— a ⦘) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A1: pre_ty neg
o: obs_op `+ A1
B: ty
m: obs_op B
Ξ“: neg_ctx
t2: term (Ξ“ β–Άβ‚“ `+ A1) `+ A1
a: dom o =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
i0: evalβ‚’ (RecR t2 βŠ™ o β¦— a ⦘) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
p: pre_ty neg
o: obs_op `+ p
B: ty
m: obs_op B
Ξ“: neg_ctx
w: whn Ξ“ `+ p
a: dom o =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
i0: evalβ‚’ (Whn w βŠ™ o β¦— a ⦘) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
p: pre_ty pos
o: obs_op `- p
B: ty
m: obs_op B
Ξ“: neg_ctx
s: state (Ξ“ β–Άβ‚“ (`- p) †)
a: dom o =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
i0: evalβ‚’ (Mu s βŠ™ o β¦— a ⦘) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A0: pre_ty pos
o: obs_op `- A0
B: ty
m: obs_op B
Ξ“: neg_ctx
t1: term (Ξ“ β–Άβ‚“ `- A0) `- A0
a: dom o =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
i0: evalβ‚’ (RecL t1 βŠ™ o β¦— a ⦘) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
p: pre_ty pos
o: obs_op `- p
B: ty
m: obs_op B
Ξ“: neg_ctx
w: whn Ξ“ `- p
a: dom o =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
i0: evalβ‚’ (Whn w βŠ™ o β¦— a ⦘) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
o: obs_op `- βŠ₯
B: ty
m: obs_op B
Ξ“: neg_ctx
a: dom o =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
i0: evalβ‚’ (BotL βŠ™ o β¦— a ⦘) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A3, B3: pre_ty neg
o: obs_op `- (A3 β…‹ B3)
B: ty
m: obs_op B
Ξ“: neg_ctx
w1: whn Ξ“ `- A3
w2: whn Ξ“ `- B3
a: dom o =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
i0: evalβ‚’ (ParL w1 w2 βŠ™ o β¦— a ⦘) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A8, B8: pre_ty neg
o: obs_op `- (A8 & B8)
B: ty
m: obs_op B
Ξ“: neg_ctx
w5: whn Ξ“ `- A8
a: dom o =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
i0: evalβ‚’ (AndL1 w5 βŠ™ o β¦— a ⦘) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A9, B9: pre_ty neg
o: obs_op `- (A9 & B9)
B: ty
m: obs_op B
Ξ“: neg_ctx
w6: whn Ξ“ `- B9
a: dom o =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
i0: evalβ‚’ (AndL2 w6 βŠ™ o β¦— a ⦘) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A13: pre_ty pos
o: obs_op `- (↑ A13)
B: ty
m: obs_op B
Ξ“: neg_ctx
t2: term Ξ“ `- A13
a: dom o =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
i0: evalβ‚’ (ShiftNL t2 βŠ™ o β¦— a ⦘) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A17: pre_ty pos
o: obs_op `- (Β¬ A17)
B: ty
m: obs_op B
Ξ“: neg_ctx
w8: whn Ξ“ `+ A17
a: dom o =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
i0: evalβ‚’ (NegNL w8 βŠ™ o β¦— a ⦘) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
B: ty
m: obs_op B
Ξ“: neg_ctx
a: dom (PVarN 1) =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
i0: evalβ‚’ (Cut pos (Whn OneR) (a `- 1 Ctx.top)) β‰Š ret_delay (i β‹… m)

Acc head_inst_nostep (B,' m)
A0, B0: pre_ty pos
B: ty
m: obs_op B
Ξ“: neg_ctx
w: whn Ξ“ `+ A0
w0: whn Ξ“ `+ B0
a: dom (PVarN (A0 βŠ— B0)) =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
i0: evalβ‚’ (Cut pos (Whn (TenR w w0)) (a `- (A0 βŠ— B0) Ctx.top)) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A4, B4: pre_ty pos
B: ty
m: obs_op B
Ξ“: neg_ctx
w3: whn Ξ“ `+ A4
a: dom (PVarN (A4 βŠ• B4)) =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
i0: evalβ‚’ (Cut pos (Whn (OrR1 w3)) (a `- (A4 βŠ• B4) Ctx.top)) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A5, B5: pre_ty pos
B: ty
m: obs_op B
Ξ“: neg_ctx
w4: whn Ξ“ `+ B5
a: dom (PVarN (A5 βŠ• B5)) =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
i0: evalβ‚’ (Cut pos (Whn (OrR2 w4)) (a `- (A5 βŠ• B5) Ctx.top)) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A10: pre_ty neg
B: ty
m: obs_op B
Ξ“: neg_ctx
t1: term Ξ“ `+ A10
a: dom (PVarN (↓ A10)) =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
i0: evalβ‚’ (Cut pos (Whn (ShiftPR t1)) (a `- (↓ A10) Ctx.top)) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A14: pre_ty neg
B: ty
m: obs_op B
Ξ“: neg_ctx
w7: whn Ξ“ `- A14
a: dom (PVarN βŠ– A14) =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
i0: evalβ‚’ (Cut pos (Whn (NegPR w7)) (a `- (βŠ– A14) Ctx.top)) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
B: ty
m: obs_op B
Ξ“: neg_ctx
s: state (Ξ“ β–Άβ‚“ (`+ βŠ₯) †)
a: dom PBot =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
i0: evalβ‚’ (Cut neg (Mu s) (Whn BotL)) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A2, B1: pre_ty neg
p2: pat `- A2
p3: pat `- B1
B: ty
m: obs_op B
Ξ“: neg_ctx
s: state (Ξ“ β–Άβ‚“ (`+ (A2 β…‹ B1)) †)
a: dom (PPar p2 p3) =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
i0: evalβ‚’ (Cut neg (Mu s) (Whn (ParL (p2 `α΅₯βŠ›α΅£ r_cover_l cover_cat `α΅₯βŠ› a) (p3 `α΅₯βŠ›α΅£ r_cover_r cover_cat `α΅₯βŠ› a)))) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A5, B4: pre_ty neg
p6: pat `- A5
B: ty
m: obs_op B
Ξ“: neg_ctx
s: state (Ξ“ β–Άβ‚“ (`+ (A5 & B4)) †)
a: dom (PAnd1 p6) =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
i0: evalβ‚’ (Cut neg (Mu s) (Whn (AndL1 (p6 `α΅₯βŠ› a)))) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A6, B5: pre_ty neg
p7: pat `- B5
B: ty
m: obs_op B
Ξ“: neg_ctx
s: state (Ξ“ β–Άβ‚“ (`+ (A6 & B5)) †)
a: dom (PAnd2 p7) =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
i0: evalβ‚’ (Cut neg (Mu s) (Whn (AndL2 (p7 `α΅₯βŠ› a)))) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A8: pre_ty pos
B: ty
m: obs_op B
Ξ“: neg_ctx
s: state (Ξ“ β–Άβ‚“ (`+ (↑ A8)) †)
a: dom (PShiftN A8) =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
i0: evalβ‚’ (Cut neg (Mu s) (Whn (ShiftNL (a `- A8 Ctx.top)))) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A10: pre_ty pos
p9: pat `+ A10
B: ty
m: obs_op B
Ξ“: neg_ctx
s: state (Ξ“ β–Άβ‚“ (`+ (Β¬ A10)) †)
a: dom (PNegN p9) =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
i0: evalβ‚’ (Cut neg (Mu s) (Whn (NegNL (p9 `α΅₯βŠ› a)))) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
B: ty
m: obs_op B
Ξ“: neg_ctx
t2: term (Ξ“ β–Άβ‚“ `+ βŠ₯) `+ βŠ₯
a: dom PBot =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
i0: evalβ‚’ (Cut neg (RecR t2) (Whn BotL)) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A3, B1: pre_ty neg
p1: pat `- A3
p2: pat `- B1
B: ty
m: obs_op B
Ξ“: neg_ctx
t2: term (Ξ“ β–Άβ‚“ `+ (A3 β…‹ B1)) `+ (A3 β…‹ B1)
a: dom (PPar p1 p2) =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
i0: evalβ‚’ (Cut neg (RecR t2) (Whn (ParL (p1 `α΅₯βŠ›α΅£ r_cover_l cover_cat `α΅₯βŠ› a) (p2 `α΅₯βŠ›α΅£ r_cover_r cover_cat `α΅₯βŠ› a)))) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A6, B4: pre_ty neg
p5: pat `- A6
B: ty
m: obs_op B
Ξ“: neg_ctx
t2: term (Ξ“ β–Άβ‚“ `+ (A6 & B4)) `+ (A6 & B4)
a: dom (PAnd1 p5) =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
i0: evalβ‚’ (Cut neg (RecR t2) (Whn (AndL1 (p5 `α΅₯βŠ› a)))) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A7, B5: pre_ty neg
p6: pat `- B5
B: ty
m: obs_op B
Ξ“: neg_ctx
t2: term (Ξ“ β–Άβ‚“ `+ (A7 & B5)) `+ (A7 & B5)
a: dom (PAnd2 p6) =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
i0: evalβ‚’ (Cut neg (RecR t2) (Whn (AndL2 (p6 `α΅₯βŠ› a)))) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A9: pre_ty pos
B: ty
m: obs_op B
Ξ“: neg_ctx
t2: term (Ξ“ β–Άβ‚“ `+ (↑ A9)) `+ (↑ A9)
a: dom (PShiftN A9) =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
i0: evalβ‚’ (Cut neg (RecR t2) (Whn (ShiftNL (a `- A9 Ctx.top)))) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A11: pre_ty pos
p8: pat `+ A11
B: ty
m: obs_op B
Ξ“: neg_ctx
t2: term (Ξ“ β–Άβ‚“ `+ (Β¬ A11)) `+ (Β¬ A11)
a: dom (PNegN p8) =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
i0: evalβ‚’ (Cut neg (RecR t2) (Whn (NegNL (p8 `α΅₯βŠ› a)))) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
B: ty
m: obs_op B
Ξ“: neg_ctx
w: whn Ξ“ `+ βŠ₯
a: dom PBot =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
i0: evalβ‚’ (Cut neg (Whn w) (Whn BotL)) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A2, B1: pre_ty neg
p2: pat `- A2
p3: pat `- B1
B: ty
m: obs_op B
Ξ“: neg_ctx
w: whn Ξ“ `+ (A2 β…‹ B1)
a: dom (PPar p2 p3) =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
i0: evalβ‚’ (Cut neg (Whn w) (Whn (ParL (p2 `α΅₯βŠ›α΅£ r_cover_l cover_cat `α΅₯βŠ› a) (p3 `α΅₯βŠ›α΅£ r_cover_r cover_cat `α΅₯βŠ› a)))) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A5, B4: pre_ty neg
p6: pat `- A5
B: ty
m: obs_op B
Ξ“: neg_ctx
w: whn Ξ“ `+ (A5 & B4)
a: dom (PAnd1 p6) =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
i0: evalβ‚’ (Cut neg (Whn w) (Whn (AndL1 (p6 `α΅₯βŠ› a)))) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A6, B5: pre_ty neg
p7: pat `- B5
B: ty
m: obs_op B
Ξ“: neg_ctx
w: whn Ξ“ `+ (A6 & B5)
a: dom (PAnd2 p7) =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
i0: evalβ‚’ (Cut neg (Whn w) (Whn (AndL2 (p7 `α΅₯βŠ› a)))) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A8: pre_ty pos
B: ty
m: obs_op B
Ξ“: neg_ctx
w: whn Ξ“ `+ (↑ A8)
a: dom (PShiftN A8) =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
i0: evalβ‚’ (Cut neg (Whn w) (Whn (ShiftNL (a `- A8 Ctx.top)))) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A10: pre_ty pos
p9: pat `+ A10
B: ty
m: obs_op B
Ξ“: neg_ctx
w: whn Ξ“ `+ (Β¬ A10)
a: dom (PNegN p9) =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
i0: evalβ‚’ (Cut neg (Whn w) (Whn (NegNL (p9 `α΅₯βŠ› a)))) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
B: ty
m: obs_op B
Ξ“: neg_ctx
s: state (Ξ“ β–Άβ‚“ (`- 1) †)
a: dom POne =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
i0: evalβ‚’ (Cut pos (Whn OneR) (Mu s)) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A1, B0: pre_ty pos
p0: pat `+ A1
p1: pat `+ B0
B: ty
m: obs_op B
Ξ“: neg_ctx
s: state (Ξ“ β–Άβ‚“ (`- (A1 βŠ— B0)) †)
a: dom (PTen p0 p1) =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
i0: evalβ‚’ (Cut pos (Whn (TenR (p0 `α΅₯βŠ›α΅£ r_cover_l cover_cat `α΅₯βŠ› a) (p1 `α΅₯βŠ›α΅£ r_cover_r cover_cat `α΅₯βŠ› a))) (Mu s)) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A3, B2: pre_ty pos
p4: pat `+ A3
B: ty
m: obs_op B
Ξ“: neg_ctx
s: state (Ξ“ β–Άβ‚“ (`- (A3 βŠ• B2)) †)
a: dom (POr1 p4) =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
i0: evalβ‚’ (Cut pos (Whn (OrR1 (p4 `α΅₯βŠ› a))) (Mu s)) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A4, B3: pre_ty pos
p5: pat `+ B3
B: ty
m: obs_op B
Ξ“: neg_ctx
s: state (Ξ“ β–Άβ‚“ (`- (A4 βŠ• B3)) †)
a: dom (POr2 p5) =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
i0: evalβ‚’ (Cut pos (Whn (OrR2 (p5 `α΅₯βŠ› a))) (Mu s)) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A7: pre_ty neg
B: ty
m: obs_op B
Ξ“: neg_ctx
s: state (Ξ“ β–Άβ‚“ (`- (↓ A7)) †)
a: dom (PShiftP A7) =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
i0: evalβ‚’ (Cut pos (Whn (ShiftPR (a `+ A7 Ctx.top))) (Mu s)) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A9: pre_ty neg
p8: pat `- A9
B: ty
m: obs_op B
Ξ“: neg_ctx
s: state (Ξ“ β–Άβ‚“ (`- (βŠ– A9)) †)
a: dom (PNegP p8) =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
i0: evalβ‚’ (Cut pos (Whn (NegPR (p8 `α΅₯βŠ› a))) (Mu s)) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
B: ty
m: obs_op B
Ξ“: neg_ctx
t1: term (Ξ“ β–Άβ‚“ `- 1) `- 1
a: dom POne =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
i0: evalβ‚’ (Cut pos (Whn OneR) (RecL t1)) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A2, B0: pre_ty pos
p: pat `+ A2
p0: pat `+ B0
B: ty
m: obs_op B
Ξ“: neg_ctx
t1: term (Ξ“ β–Άβ‚“ `- (A2 βŠ— B0)) `- (A2 βŠ— B0)
a: dom (PTen p p0) =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
i0: evalβ‚’ (Cut pos (Whn (TenR (p `α΅₯βŠ›α΅£ r_cover_l cover_cat `α΅₯βŠ› a) (p0 `α΅₯βŠ›α΅£ r_cover_r cover_cat `α΅₯βŠ› a))) (RecL t1)) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A4, B2: pre_ty pos
p3: pat `+ A4
B: ty
m: obs_op B
Ξ“: neg_ctx
t1: term (Ξ“ β–Άβ‚“ `- (A4 βŠ• B2)) `- (A4 βŠ• B2)
a: dom (POr1 p3) =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
i0: evalβ‚’ (Cut pos (Whn (OrR1 (p3 `α΅₯βŠ› a))) (RecL t1)) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A5, B3: pre_ty pos
p4: pat `+ B3
B: ty
m: obs_op B
Ξ“: neg_ctx
t1: term (Ξ“ β–Άβ‚“ `- (A5 βŠ• B3)) `- (A5 βŠ• B3)
a: dom (POr2 p4) =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
i0: evalβ‚’ (Cut pos (Whn (OrR2 (p4 `α΅₯βŠ› a))) (RecL t1)) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A8: pre_ty neg
B: ty
m: obs_op B
Ξ“: neg_ctx
t1: term (Ξ“ β–Άβ‚“ `- (↓ A8)) `- (↓ A8)
a: dom (PShiftP A8) =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
i0: evalβ‚’ (Cut pos (Whn (ShiftPR (a `+ A8 Ctx.top))) (RecL t1)) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A10: pre_ty neg
p7: pat `- A10
B: ty
m: obs_op B
Ξ“: neg_ctx
t1: term (Ξ“ β–Άβ‚“ `- (βŠ– A10)) `- (βŠ– A10)
a: dom (PNegP p7) =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
i0: evalβ‚’ (Cut pos (Whn (NegPR (p7 `α΅₯βŠ› a))) (RecL t1)) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
B: ty
m: obs_op B
Ξ“: neg_ctx
w: whn Ξ“ `- 1
a: dom POne =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
i0: evalβ‚’ (Cut pos (Whn OneR) (Whn w)) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A1, B0: pre_ty pos
p0: pat `+ A1
p1: pat `+ B0
B: ty
m: obs_op B
Ξ“: neg_ctx
w: whn Ξ“ `- (A1 βŠ— B0)
a: dom (PTen p0 p1) =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
i0: evalβ‚’ (Cut pos (Whn (TenR (p0 `α΅₯βŠ›α΅£ r_cover_l cover_cat `α΅₯βŠ› a) (p1 `α΅₯βŠ›α΅£ r_cover_r cover_cat `α΅₯βŠ› a))) (Whn w)) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A3, B2: pre_ty pos
p4: pat `+ A3
B: ty
m: obs_op B
Ξ“: neg_ctx
w: whn Ξ“ `- (A3 βŠ• B2)
a: dom (POr1 p4) =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
i0: evalβ‚’ (Cut pos (Whn (OrR1 (p4 `α΅₯βŠ› a))) (Whn w)) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A4, B3: pre_ty pos
p5: pat `+ B3
B: ty
m: obs_op B
Ξ“: neg_ctx
w: whn Ξ“ `- (A4 βŠ• B3)
a: dom (POr2 p5) =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
i0: evalβ‚’ (Cut pos (Whn (OrR2 (p5 `α΅₯βŠ› a))) (Whn w)) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A7: pre_ty neg
B: ty
m: obs_op B
Ξ“: neg_ctx
w: whn Ξ“ `- (↓ A7)
a: dom (PShiftP A7) =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
i0: evalβ‚’ (Cut pos (Whn (ShiftPR (a `+ A7 Ctx.top))) (Whn w)) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A9: pre_ty neg
p8: pat `- A9
B: ty
m: obs_op B
Ξ“: neg_ctx
w: whn Ξ“ `- (βŠ– A9)
a: dom (PNegP p8) =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
i0: evalβ‚’ (Cut pos (Whn (NegPR (p8 `α΅₯βŠ› a))) (Whn w)) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
B: ty
m: obs_op B
Ξ“: neg_ctx
a: dom (PVarP βŠ₯) =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
i0: evalβ‚’ (Cut neg (a `+ βŠ₯ Ctx.top) (Whn BotL)) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A3, B3: pre_ty neg
B: ty
m: obs_op B
Ξ“: neg_ctx
w1: whn Ξ“ `- A3
w2: whn Ξ“ `- B3
a: dom (PVarP (A3 β…‹ B3)) =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
i0: evalβ‚’ (Cut neg (a `+ (A3 β…‹ B3) Ctx.top) (Whn (ParL w1 w2))) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A8, B8: pre_ty neg
B: ty
m: obs_op B
Ξ“: neg_ctx
w5: whn Ξ“ `- A8
a: dom (PVarP (A8 & B8)) =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
i0: evalβ‚’ (Cut neg (a `+ (A8 & B8) Ctx.top) (Whn (AndL1 w5))) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A9, B9: pre_ty neg
B: ty
m: obs_op B
Ξ“: neg_ctx
w6: whn Ξ“ `- B9
a: dom (PVarP (A9 & B9)) =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
i0: evalβ‚’ (Cut neg (a `+ (A9 & B9) Ctx.top) (Whn (AndL2 w6))) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A13: pre_ty pos
B: ty
m: obs_op B
Ξ“: neg_ctx
t2: term Ξ“ `- A13
a: dom (PVarP (↑ A13)) =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
i0: evalβ‚’ (Cut neg (a `+ (↑ A13) Ctx.top) (Whn (ShiftNL t2))) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A17: pre_ty pos
B: ty
m: obs_op B
Ξ“: neg_ctx
w8: whn Ξ“ `+ A17
a: dom (PVarP Β¬ A17) =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
i0: evalβ‚’ (Cut neg (a `+ (Β¬ A17) Ctx.top) (Whn (NegNL w8))) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
B: ty
m: obs_op B
Ξ“: neg_ctx
i: Ξ“ βˆ‹ B
v': term Ξ“ `- 1
i0: evalβ‚’ (Cut pos (Whn OneR) v') β‰Š ret_delay (i β‹… m)

Acc head_inst_nostep (B,' m)
A0, B0: pre_ty pos
B: ty
m: obs_op B
Ξ“: neg_ctx
w: whn Ξ“ `+ A0
w0: whn Ξ“ `+ B0
i: Ξ“ βˆ‹ B
v': term Ξ“ `- (A0 βŠ— B0)
i0: evalβ‚’ (Cut pos (Whn (TenR w w0)) v') β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A4, B4: pre_ty pos
B: ty
m: obs_op B
Ξ“: neg_ctx
w3: whn Ξ“ `+ A4
i: Ξ“ βˆ‹ B
v': term Ξ“ `- (A4 βŠ• B4)
i0: evalβ‚’ (Cut pos (Whn (OrR1 w3)) v') β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A5, B5: pre_ty pos
B: ty
m: obs_op B
Ξ“: neg_ctx
w4: whn Ξ“ `+ B5
i: Ξ“ βˆ‹ B
v': term Ξ“ `- (A5 βŠ• B5)
i0: evalβ‚’ (Cut pos (Whn (OrR2 w4)) v') β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A10: pre_ty neg
B: ty
m: obs_op B
Ξ“: neg_ctx
t1: term Ξ“ `+ A10
i: Ξ“ βˆ‹ B
v': term Ξ“ `- (↓ A10)
i0: evalβ‚’ (Cut pos (Whn (ShiftPR t1)) v') β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A14: pre_ty neg
B: ty
m: obs_op B
Ξ“: neg_ctx
w7: whn Ξ“ `- A14
i: Ξ“ βˆ‹ B
v': term Ξ“ `- (βŠ– A14)
i0: evalβ‚’ (Cut pos (Whn (NegPR w7)) v') β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
B: ty
m: obs_op B
Ξ“: neg_ctx
s: state (Ξ“ β–Άβ‚“ (`+ βŠ₯) †)
a: dom PBot =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
i0: evalβ‚’ (Cut neg (Mu s) (Whn BotL)) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A2, B1: pre_ty neg
p2: pat `- A2
p3: pat `- B1
B: ty
m: obs_op B
Ξ“: neg_ctx
s: state (Ξ“ β–Άβ‚“ (`+ (A2 β…‹ B1)) †)
a: dom (PPar p2 p3) =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
i0: evalβ‚’ (Cut neg (Mu s) (Whn (ParL (p2 `α΅₯βŠ›α΅£ r_cover_l cover_cat `α΅₯βŠ› a) (p3 `α΅₯βŠ›α΅£ r_cover_r cover_cat `α΅₯βŠ› a)))) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A5, B4: pre_ty neg
p6: pat `- A5
B: ty
m: obs_op B
Ξ“: neg_ctx
s: state (Ξ“ β–Άβ‚“ (`+ (A5 & B4)) †)
a: dom (PAnd1 p6) =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
i0: evalβ‚’ (Cut neg (Mu s) (Whn (AndL1 (p6 `α΅₯βŠ› a)))) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A6, B5: pre_ty neg
p7: pat `- B5
B: ty
m: obs_op B
Ξ“: neg_ctx
s: state (Ξ“ β–Άβ‚“ (`+ (A6 & B5)) †)
a: dom (PAnd2 p7) =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
i0: evalβ‚’ (Cut neg (Mu s) (Whn (AndL2 (p7 `α΅₯βŠ› a)))) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A8: pre_ty pos
B: ty
m: obs_op B
Ξ“: neg_ctx
s: state (Ξ“ β–Άβ‚“ (`+ (↑ A8)) †)
i: Ξ“ βˆ‹ B
v': term Ξ“ `- A8
i0: evalβ‚’ (Cut neg (Mu s) (Whn (ShiftNL v'))) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A10: pre_ty pos
p9: pat `+ A10
B: ty
m: obs_op B
Ξ“: neg_ctx
s: state (Ξ“ β–Άβ‚“ (`+ (Β¬ A10)) †)
a: dom (PNegN p9) =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
i0: evalβ‚’ (Cut neg (Mu s) (Whn (NegNL (p9 `α΅₯βŠ› a)))) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
B: ty
m: obs_op B
Ξ“: neg_ctx
t2: term (Ξ“ β–Άβ‚“ `+ βŠ₯) `+ βŠ₯
a: dom PBot =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
i0: evalβ‚’ (Cut neg (RecR t2) (Whn BotL)) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A3, B1: pre_ty neg
p1: pat `- A3
p2: pat `- B1
B: ty
m: obs_op B
Ξ“: neg_ctx
t2: term (Ξ“ β–Άβ‚“ `+ (A3 β…‹ B1)) `+ (A3 β…‹ B1)
a: dom (PPar p1 p2) =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
i0: evalβ‚’ (Cut neg (RecR t2) (Whn (ParL (p1 `α΅₯βŠ›α΅£ r_cover_l cover_cat `α΅₯βŠ› a) (p2 `α΅₯βŠ›α΅£ r_cover_r cover_cat `α΅₯βŠ› a)))) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A6, B4: pre_ty neg
p5: pat `- A6
B: ty
m: obs_op B
Ξ“: neg_ctx
t2: term (Ξ“ β–Άβ‚“ `+ (A6 & B4)) `+ (A6 & B4)
a: dom (PAnd1 p5) =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
i0: evalβ‚’ (Cut neg (RecR t2) (Whn (AndL1 (p5 `α΅₯βŠ› a)))) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A7, B5: pre_ty neg
p6: pat `- B5
B: ty
m: obs_op B
Ξ“: neg_ctx
t2: term (Ξ“ β–Άβ‚“ `+ (A7 & B5)) `+ (A7 & B5)
a: dom (PAnd2 p6) =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
i0: evalβ‚’ (Cut neg (RecR t2) (Whn (AndL2 (p6 `α΅₯βŠ› a)))) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A9: pre_ty pos
B: ty
m: obs_op B
Ξ“: neg_ctx
t2: term (Ξ“ β–Άβ‚“ `+ (↑ A9)) `+ (↑ A9)
i: Ξ“ βˆ‹ B
v': term Ξ“ `- A9
i0: evalβ‚’ (Cut neg (RecR t2) (Whn (ShiftNL v'))) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A11: pre_ty pos
p8: pat `+ A11
B: ty
m: obs_op B
Ξ“: neg_ctx
t2: term (Ξ“ β–Άβ‚“ `+ (Β¬ A11)) `+ (Β¬ A11)
a: dom (PNegN p8) =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
i0: evalβ‚’ (Cut neg (RecR t2) (Whn (NegNL (p8 `α΅₯βŠ› a)))) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
B: ty
m: obs_op B
Ξ“: neg_ctx
w: whn Ξ“ `+ βŠ₯
a: dom PBot =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
i0: evalβ‚’ (Cut neg (Whn w) (Whn BotL)) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A2, B1: pre_ty neg
p2: pat `- A2
p3: pat `- B1
B: ty
m: obs_op B
Ξ“: neg_ctx
w: whn Ξ“ `+ (A2 β…‹ B1)
a: dom (PPar p2 p3) =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
i0: evalβ‚’ (Cut neg (Whn w) (Whn (ParL (p2 `α΅₯βŠ›α΅£ r_cover_l cover_cat `α΅₯βŠ› a) (p3 `α΅₯βŠ›α΅£ r_cover_r cover_cat `α΅₯βŠ› a)))) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A5, B4: pre_ty neg
p6: pat `- A5
B: ty
m: obs_op B
Ξ“: neg_ctx
w: whn Ξ“ `+ (A5 & B4)
a: dom (PAnd1 p6) =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
i0: evalβ‚’ (Cut neg (Whn w) (Whn (AndL1 (p6 `α΅₯βŠ› a)))) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A6, B5: pre_ty neg
p7: pat `- B5
B: ty
m: obs_op B
Ξ“: neg_ctx
w: whn Ξ“ `+ (A6 & B5)
a: dom (PAnd2 p7) =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
i0: evalβ‚’ (Cut neg (Whn w) (Whn (AndL2 (p7 `α΅₯βŠ› a)))) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A8: pre_ty pos
B: ty
m: obs_op B
Ξ“: neg_ctx
w: whn Ξ“ `+ (↑ A8)
i: Ξ“ βˆ‹ B
v': term Ξ“ `- A8
i0: evalβ‚’ (Cut neg (Whn w) (Whn (ShiftNL v'))) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A10: pre_ty pos
p9: pat `+ A10
B: ty
m: obs_op B
Ξ“: neg_ctx
w: whn Ξ“ `+ (Β¬ A10)
a: dom (PNegN p9) =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
i0: evalβ‚’ (Cut neg (Whn w) (Whn (NegNL (p9 `α΅₯βŠ› a)))) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
B: ty
m: obs_op B
Ξ“: neg_ctx
s: state (Ξ“ β–Άβ‚“ (`- 1) †)
a: dom POne =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
i0: evalβ‚’ (Cut pos (Whn OneR) (Mu s)) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A1, B0: pre_ty pos
p0: pat `+ A1
p1: pat `+ B0
B: ty
m: obs_op B
Ξ“: neg_ctx
s: state (Ξ“ β–Άβ‚“ (`- (A1 βŠ— B0)) †)
a: dom (PTen p0 p1) =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
i0: evalβ‚’ (Cut pos (Whn (TenR (p0 `α΅₯βŠ›α΅£ r_cover_l cover_cat `α΅₯βŠ› a) (p1 `α΅₯βŠ›α΅£ r_cover_r cover_cat `α΅₯βŠ› a))) (Mu s)) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A3, B2: pre_ty pos
p4: pat `+ A3
B: ty
m: obs_op B
Ξ“: neg_ctx
s: state (Ξ“ β–Άβ‚“ (`- (A3 βŠ• B2)) †)
a: dom (POr1 p4) =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
i0: evalβ‚’ (Cut pos (Whn (OrR1 (p4 `α΅₯βŠ› a))) (Mu s)) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A4, B3: pre_ty pos
p5: pat `+ B3
B: ty
m: obs_op B
Ξ“: neg_ctx
s: state (Ξ“ β–Άβ‚“ (`- (A4 βŠ• B3)) †)
a: dom (POr2 p5) =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
i0: evalβ‚’ (Cut pos (Whn (OrR2 (p5 `α΅₯βŠ› a))) (Mu s)) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A7: pre_ty neg
B: ty
m: obs_op B
Ξ“: neg_ctx
s: state (Ξ“ β–Άβ‚“ (`- (↓ A7)) †)
i: Ξ“ βˆ‹ B
v': term Ξ“ `+ A7
i0: evalβ‚’ (Cut pos (Whn (ShiftPR v')) (Mu s)) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A9: pre_ty neg
p8: pat `- A9
B: ty
m: obs_op B
Ξ“: neg_ctx
s: state (Ξ“ β–Άβ‚“ (`- (βŠ– A9)) †)
a: dom (PNegP p8) =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
i0: evalβ‚’ (Cut pos (Whn (NegPR (p8 `α΅₯βŠ› a))) (Mu s)) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
B: ty
m: obs_op B
Ξ“: neg_ctx
t1: term (Ξ“ β–Άβ‚“ `- 1) `- 1
a: dom POne =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
i0: evalβ‚’ (Cut pos (Whn OneR) (RecL t1)) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A2, B0: pre_ty pos
p: pat `+ A2
p0: pat `+ B0
B: ty
m: obs_op B
Ξ“: neg_ctx
t1: term (Ξ“ β–Άβ‚“ `- (A2 βŠ— B0)) `- (A2 βŠ— B0)
a: dom (PTen p p0) =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
i0: evalβ‚’ (Cut pos (Whn (TenR (p `α΅₯βŠ›α΅£ r_cover_l cover_cat `α΅₯βŠ› a) (p0 `α΅₯βŠ›α΅£ r_cover_r cover_cat `α΅₯βŠ› a))) (RecL t1)) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A4, B2: pre_ty pos
p3: pat `+ A4
B: ty
m: obs_op B
Ξ“: neg_ctx
t1: term (Ξ“ β–Άβ‚“ `- (A4 βŠ• B2)) `- (A4 βŠ• B2)
a: dom (POr1 p3) =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
i0: evalβ‚’ (Cut pos (Whn (OrR1 (p3 `α΅₯βŠ› a))) (RecL t1)) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A5, B3: pre_ty pos
p4: pat `+ B3
B: ty
m: obs_op B
Ξ“: neg_ctx
t1: term (Ξ“ β–Άβ‚“ `- (A5 βŠ• B3)) `- (A5 βŠ• B3)
a: dom (POr2 p4) =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
i0: evalβ‚’ (Cut pos (Whn (OrR2 (p4 `α΅₯βŠ› a))) (RecL t1)) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A8: pre_ty neg
B: ty
m: obs_op B
Ξ“: neg_ctx
t1: term (Ξ“ β–Άβ‚“ `- (↓ A8)) `- (↓ A8)
i: Ξ“ βˆ‹ B
v': term Ξ“ `+ A8
i0: evalβ‚’ (Cut pos (Whn (ShiftPR v')) (RecL t1)) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A10: pre_ty neg
p7: pat `- A10
B: ty
m: obs_op B
Ξ“: neg_ctx
t1: term (Ξ“ β–Άβ‚“ `- (βŠ– A10)) `- (βŠ– A10)
a: dom (PNegP p7) =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
i0: evalβ‚’ (Cut pos (Whn (NegPR (p7 `α΅₯βŠ› a))) (RecL t1)) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
B: ty
m: obs_op B
Ξ“: neg_ctx
w: whn Ξ“ `- 1
a: dom POne =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
i0: evalβ‚’ (Cut pos (Whn OneR) (Whn w)) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A1, B0: pre_ty pos
p0: pat `+ A1
p1: pat `+ B0
B: ty
m: obs_op B
Ξ“: neg_ctx
w: whn Ξ“ `- (A1 βŠ— B0)
a: dom (PTen p0 p1) =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
i0: evalβ‚’ (Cut pos (Whn (TenR (p0 `α΅₯βŠ›α΅£ r_cover_l cover_cat `α΅₯βŠ› a) (p1 `α΅₯βŠ›α΅£ r_cover_r cover_cat `α΅₯βŠ› a))) (Whn w)) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A3, B2: pre_ty pos
p4: pat `+ A3
B: ty
m: obs_op B
Ξ“: neg_ctx
w: whn Ξ“ `- (A3 βŠ• B2)
a: dom (POr1 p4) =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
i0: evalβ‚’ (Cut pos (Whn (OrR1 (p4 `α΅₯βŠ› a))) (Whn w)) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A4, B3: pre_ty pos
p5: pat `+ B3
B: ty
m: obs_op B
Ξ“: neg_ctx
w: whn Ξ“ `- (A4 βŠ• B3)
a: dom (POr2 p5) =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
i0: evalβ‚’ (Cut pos (Whn (OrR2 (p5 `α΅₯βŠ› a))) (Whn w)) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A7: pre_ty neg
B: ty
m: obs_op B
Ξ“: neg_ctx
w: whn Ξ“ `- (↓ A7)
i: Ξ“ βˆ‹ B
v': term Ξ“ `+ A7
i0: evalβ‚’ (Cut pos (Whn (ShiftPR v')) (Whn w)) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A9: pre_ty neg
p8: pat `- A9
B: ty
m: obs_op B
Ξ“: neg_ctx
w: whn Ξ“ `- (βŠ– A9)
a: dom (PNegP p8) =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
i0: evalβ‚’ (Cut pos (Whn (NegPR (p8 `α΅₯βŠ› a))) (Whn w)) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
B: ty
m: obs_op B
Ξ“: neg_ctx
i: Ξ“ βˆ‹ B
v': term Ξ“ `+ βŠ₯
i0: evalβ‚’ (Cut neg v' (Whn BotL)) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A3, B3: pre_ty neg
B: ty
m: obs_op B
Ξ“: neg_ctx
w1: whn Ξ“ `- A3
w2: whn Ξ“ `- B3
i: Ξ“ βˆ‹ B
v': term Ξ“ `+ (A3 β…‹ B3)
i0: evalβ‚’ (Cut neg v' (Whn (ParL w1 w2))) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A8, B8: pre_ty neg
B: ty
m: obs_op B
Ξ“: neg_ctx
w5: whn Ξ“ `- A8
i: Ξ“ βˆ‹ B
v': term Ξ“ `+ (A8 & B8)
i0: evalβ‚’ (Cut neg v' (Whn (AndL1 w5))) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A9, B9: pre_ty neg
B: ty
m: obs_op B
Ξ“: neg_ctx
w6: whn Ξ“ `- B9
i: Ξ“ βˆ‹ B
v': term Ξ“ `+ (A9 & B9)
i0: evalβ‚’ (Cut neg v' (Whn (AndL2 w6))) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A13: pre_ty pos
B: ty
m: obs_op B
Ξ“: neg_ctx
t2: term Ξ“ `- A13
i: Ξ“ βˆ‹ B
v': term Ξ“ `+ (↑ A13)
i0: evalβ‚’ (Cut neg v' (Whn (ShiftNL t2))) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A17: pre_ty pos
B: ty
m: obs_op B
Ξ“: neg_ctx
w8: whn Ξ“ `+ A17
i: Ξ“ βˆ‹ B
v': term Ξ“ `+ (Β¬ A17)
i0: evalβ‚’ (Cut neg v' (Whn (NegNL w8))) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
B: ty
m: obs_op B
Ξ“: neg_ctx
i: Ξ“ βˆ‹ B
v': term Ξ“ `- 1
i0: evalβ‚’ (Cut pos (Whn OneR) v') β‰Š ret_delay (i β‹… m)

Acc head_inst_nostep (B,' m)
A0, B0: pre_ty pos
B: ty
m: obs_op B
Ξ“: neg_ctx
w: whn Ξ“ `+ A0
w0: whn Ξ“ `+ B0
i: Ξ“ βˆ‹ B
v': term Ξ“ `- (A0 βŠ— B0)
i0: evalβ‚’ (Cut pos (Whn (TenR w w0)) v') β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A4, B4: pre_ty pos
B: ty
m: obs_op B
Ξ“: neg_ctx
w3: whn Ξ“ `+ A4
i: Ξ“ βˆ‹ B
v': term Ξ“ `- (A4 βŠ• B4)
i0: evalβ‚’ (Cut pos (Whn (OrR1 w3)) v') β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A5, B5: pre_ty pos
B: ty
m: obs_op B
Ξ“: neg_ctx
w4: whn Ξ“ `+ B5
i: Ξ“ βˆ‹ B
v': term Ξ“ `- (A5 βŠ• B5)
i0: evalβ‚’ (Cut pos (Whn (OrR2 w4)) v') β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A10: pre_ty neg
B: ty
m: obs_op B
Ξ“: neg_ctx
t1: term Ξ“ `+ A10
i: Ξ“ βˆ‹ B
v': term Ξ“ `- (↓ A10)
i0: evalβ‚’ (Cut pos (Whn (ShiftPR t1)) v') β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A14: pre_ty neg
B: ty
m: obs_op B
Ξ“: neg_ctx
w7: whn Ξ“ `- A14
i: Ξ“ βˆ‹ B
v': term Ξ“ `- (βŠ– A14)
i0: evalβ‚’ (Cut pos (Whn (NegPR w7)) v') β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
B: ty
m: obs_op B
Ξ“: neg_ctx
w: whn Ξ“ `+ βŠ₯
a: dom PBot =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
i0: evalβ‚’ (Cut neg (Whn w) (Whn BotL)) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A2, B1: pre_ty neg
p2: pat `- A2
p3: pat `- B1
B: ty
m: obs_op B
Ξ“: neg_ctx
w: whn Ξ“ `+ (A2 β…‹ B1)
a: dom (PPar p2 p3) =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
i0: evalβ‚’ (Cut neg (Whn w) (Whn (ParL (p2 `α΅₯βŠ›α΅£ r_cover_l cover_cat `α΅₯βŠ› a) (p3 `α΅₯βŠ›α΅£ r_cover_r cover_cat `α΅₯βŠ› a)))) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A5, B4: pre_ty neg
p6: pat `- A5
B: ty
m: obs_op B
Ξ“: neg_ctx
w: whn Ξ“ `+ (A5 & B4)
a: dom (PAnd1 p6) =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
i0: evalβ‚’ (Cut neg (Whn w) (Whn (AndL1 (p6 `α΅₯βŠ› a)))) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A6, B5: pre_ty neg
p7: pat `- B5
B: ty
m: obs_op B
Ξ“: neg_ctx
w: whn Ξ“ `+ (A6 & B5)
a: dom (PAnd2 p7) =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
i0: evalβ‚’ (Cut neg (Whn w) (Whn (AndL2 (p7 `α΅₯βŠ› a)))) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A8: pre_ty pos
B: ty
m: obs_op B
Ξ“: neg_ctx
w: whn Ξ“ `+ (↑ A8)
i: Ξ“ βˆ‹ B
v': term Ξ“ `- A8
i0: evalβ‚’ (Cut neg (Whn w) (Whn (ShiftNL v'))) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A10: pre_ty pos
p9: pat `+ A10
B: ty
m: obs_op B
Ξ“: neg_ctx
w: whn Ξ“ `+ (Β¬ A10)
a: dom (PNegN p9) =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
i0: evalβ‚’ (Cut neg (Whn w) (Whn (NegNL (p9 `α΅₯βŠ› a)))) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
B: ty
m: obs_op B
Ξ“: neg_ctx
w: whn Ξ“ `- 1
a: dom POne =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
i0: evalβ‚’ (Cut pos (Whn OneR) (Whn w)) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A1, B0: pre_ty pos
p0: pat `+ A1
p1: pat `+ B0
B: ty
m: obs_op B
Ξ“: neg_ctx
w: whn Ξ“ `- (A1 βŠ— B0)
a: dom (PTen p0 p1) =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
i0: evalβ‚’ (Cut pos (Whn (TenR (p0 `α΅₯βŠ›α΅£ r_cover_l cover_cat `α΅₯βŠ› a) (p1 `α΅₯βŠ›α΅£ r_cover_r cover_cat `α΅₯βŠ› a))) (Whn w)) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A3, B2: pre_ty pos
p4: pat `+ A3
B: ty
m: obs_op B
Ξ“: neg_ctx
w: whn Ξ“ `- (A3 βŠ• B2)
a: dom (POr1 p4) =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
i0: evalβ‚’ (Cut pos (Whn (OrR1 (p4 `α΅₯βŠ› a))) (Whn w)) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A4, B3: pre_ty pos
p5: pat `+ B3
B: ty
m: obs_op B
Ξ“: neg_ctx
w: whn Ξ“ `- (A4 βŠ• B3)
a: dom (POr2 p5) =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
i0: evalβ‚’ (Cut pos (Whn (OrR2 (p5 `α΅₯βŠ› a))) (Whn w)) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A7: pre_ty neg
B: ty
m: obs_op B
Ξ“: neg_ctx
w: whn Ξ“ `- (↓ A7)
i: Ξ“ βˆ‹ B
v': term Ξ“ `+ A7
i0: evalβ‚’ (Cut pos (Whn (ShiftPR v')) (Whn w)) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A9: pre_ty neg
p8: pat `- A9
B: ty
m: obs_op B
Ξ“: neg_ctx
w: whn Ξ“ `- (βŠ– A9)
a: dom (PNegP p8) =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
i0: evalβ‚’ (Cut pos (Whn (NegPR (p8 `α΅₯βŠ› a))) (Whn w)) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
B: ty
m: obs_op B
Ξ“: neg_ctx
i: Ξ“ βˆ‹ B
v': term Ξ“ `+ βŠ₯
i0: evalβ‚’ (Cut neg v' (Whn BotL)) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A3, B3: pre_ty neg
B: ty
m: obs_op B
Ξ“: neg_ctx
w1: whn Ξ“ `- A3
w2: whn Ξ“ `- B3
i: Ξ“ βˆ‹ B
v': term Ξ“ `+ (A3 β…‹ B3)
i0: evalβ‚’ (Cut neg v' (Whn (ParL w1 w2))) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A8, B8: pre_ty neg
B: ty
m: obs_op B
Ξ“: neg_ctx
w5: whn Ξ“ `- A8
i: Ξ“ βˆ‹ B
v': term Ξ“ `+ (A8 & B8)
i0: evalβ‚’ (Cut neg v' (Whn (AndL1 w5))) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A9, B9: pre_ty neg
B: ty
m: obs_op B
Ξ“: neg_ctx
w6: whn Ξ“ `- B9
i: Ξ“ βˆ‹ B
v': term Ξ“ `+ (A9 & B9)
i0: evalβ‚’ (Cut neg v' (Whn (AndL2 w6))) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A13: pre_ty pos
B: ty
m: obs_op B
Ξ“: neg_ctx
t2: term Ξ“ `- A13
i: Ξ“ βˆ‹ B
v': term Ξ“ `+ (↑ A13)
i0: evalβ‚’ (Cut neg v' (Whn (ShiftNL t2))) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A17: pre_ty pos
B: ty
m: obs_op B
Ξ“: neg_ctx
w8: whn Ξ“ `+ A17
i: Ξ“ βˆ‹ B
v': term Ξ“ `+ (Β¬ A17)
i0: evalβ‚’ (Cut neg v' (Whn (NegNL w8))) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
B: ty
m: obs_op B
Ξ“: neg_ctx
i: Ξ“ βˆ‹ B
w: whn Ξ“ `- 1
i0: evalβ‚’ (Cut pos (Whn OneR) (Whn w)) β‰Š ret_delay (i β‹… m)

Acc head_inst_nostep (B,' m)
A0, B0: pre_ty pos
B: ty
m: obs_op B
Ξ“: neg_ctx
w: whn Ξ“ `+ A0
w0: whn Ξ“ `+ B0
i: Ξ“ βˆ‹ B
w1: whn Ξ“ `- (A0 βŠ— B0)
i0: evalβ‚’ (Cut pos (Whn (TenR w w0)) (Whn w1)) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A4, B4: pre_ty pos
B: ty
m: obs_op B
Ξ“: neg_ctx
w3: whn Ξ“ `+ A4
i: Ξ“ βˆ‹ B
w: whn Ξ“ `- (A4 βŠ• B4)
i0: evalβ‚’ (Cut pos (Whn (OrR1 w3)) (Whn w)) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A5, B5: pre_ty pos
B: ty
m: obs_op B
Ξ“: neg_ctx
w4: whn Ξ“ `+ B5
i: Ξ“ βˆ‹ B
w: whn Ξ“ `- (A5 βŠ• B5)
i0: evalβ‚’ (Cut pos (Whn (OrR2 w4)) (Whn w)) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A10: pre_ty neg
B: ty
m: obs_op B
Ξ“: neg_ctx
t1: term Ξ“ `+ A10
i: Ξ“ βˆ‹ B
w: whn Ξ“ `- (↓ A10)
i0: evalβ‚’ (Cut pos (Whn (ShiftPR t1)) (Whn w)) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A14: pre_ty neg
B: ty
m: obs_op B
Ξ“: neg_ctx
w7: whn Ξ“ `- A14
i: Ξ“ βˆ‹ B
w: whn Ξ“ `- (βŠ– A14)
i0: evalβ‚’ (Cut pos (Whn (NegPR w7)) (Whn w)) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
B: ty
m: obs_op B
Ξ“: neg_ctx
w: whn Ξ“ `+ βŠ₯
a: dom PBot =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
i0: evalβ‚’ (Cut neg (Whn w) (Whn BotL)) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A2, B1: pre_ty neg
p2: pat `- A2
p3: pat `- B1
B: ty
m: obs_op B
Ξ“: neg_ctx
w: whn Ξ“ `+ (A2 β…‹ B1)
a: dom (PPar p2 p3) =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
i0: evalβ‚’ (Cut neg (Whn w) (Whn (ParL (p2 `α΅₯βŠ›α΅£ r_cover_l cover_cat `α΅₯βŠ› a) (p3 `α΅₯βŠ›α΅£ r_cover_r cover_cat `α΅₯βŠ› a)))) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A5, B4: pre_ty neg
p6: pat `- A5
B: ty
m: obs_op B
Ξ“: neg_ctx
w: whn Ξ“ `+ (A5 & B4)
a: dom (PAnd1 p6) =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
i0: evalβ‚’ (Cut neg (Whn w) (Whn (AndL1 (p6 `α΅₯βŠ› a)))) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
B: ty
m: obs_op B
Ξ“: neg_ctx
i: Ξ“ βˆ‹ B
w: whn Ξ“ `+ βŠ₯
i0: evalβ‚’ (Cut neg (Whn w) (Whn BotL)) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A3, B3: pre_ty neg
B: ty
m: obs_op B
Ξ“: neg_ctx
w1: whn Ξ“ `- A3
w2: whn Ξ“ `- B3
i: Ξ“ βˆ‹ B
w: whn Ξ“ `+ (A3 β…‹ B3)
i0: evalβ‚’ (Cut neg (Whn w) (Whn (ParL w1 w2))) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A8, B8: pre_ty neg
B: ty
m: obs_op B
Ξ“: neg_ctx
w5: whn Ξ“ `- A8
i: Ξ“ βˆ‹ B
w: whn Ξ“ `+ (A8 & B8)
i0: evalβ‚’ (Cut neg (Whn w) (Whn (AndL1 w5))) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A9, B9: pre_ty neg
B: ty
m: obs_op B
Ξ“: neg_ctx
w6: whn Ξ“ `- B9
i: Ξ“ βˆ‹ B
w: whn Ξ“ `+ (A9 & B9)
i0: evalβ‚’ (Cut neg (Whn w) (Whn (AndL2 w6))) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A13: pre_ty pos
B: ty
m: obs_op B
Ξ“: neg_ctx
t2: term Ξ“ `- A13
i: Ξ“ βˆ‹ B
w: whn Ξ“ `+ (↑ A13)
i0: evalβ‚’ (Cut neg (Whn w) (Whn (ShiftNL t2))) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A17: pre_ty pos
B: ty
m: obs_op B
Ξ“: neg_ctx
w8: whn Ξ“ `+ A17
i: Ξ“ βˆ‹ B
w: whn Ξ“ `+ (Β¬ A17)
i0: evalβ‚’ (Cut neg (Whn w) (Whn (NegNL w8))) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A6, B5: pre_ty neg
p7: pat `- B5
B: ty
m: obs_op B
Ξ“: neg_ctx
w: whn Ξ“ `+ (A6 & B5)
a: dom (PAnd2 p7) =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
i0: evalβ‚’ (Cut neg (Whn w) (Whn (AndL2 (p7 `α΅₯βŠ› a)))) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A8: pre_ty pos
B: ty
m: obs_op B
Ξ“: neg_ctx
w: whn Ξ“ `+ (↑ A8)
i: Ξ“ βˆ‹ B
v': term Ξ“ `- A8
i0: evalβ‚’ (Cut neg (Whn w) (Whn (ShiftNL v'))) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A10: pre_ty pos
p9: pat `+ A10
B: ty
m: obs_op B
Ξ“: neg_ctx
w: whn Ξ“ `+ (Β¬ A10)
a: dom (PNegN p9) =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
i0: evalβ‚’ (Cut neg (Whn w) (Whn (NegNL (p9 `α΅₯βŠ› a)))) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
B: ty
m: obs_op B
Ξ“: neg_ctx
w: whn Ξ“ `- 1
a: dom POne =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
i0: evalβ‚’ (Cut pos (Whn OneR) (Whn w)) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A1, B0: pre_ty pos
p0: pat `+ A1
p1: pat `+ B0
B: ty
m: obs_op B
Ξ“: neg_ctx
w: whn Ξ“ `- (A1 βŠ— B0)
a: dom (PTen p0 p1) =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
i0: evalβ‚’ (Cut pos (Whn (TenR (p0 `α΅₯βŠ›α΅£ r_cover_l cover_cat `α΅₯βŠ› a) (p1 `α΅₯βŠ›α΅£ r_cover_r cover_cat `α΅₯βŠ› a))) (Whn w)) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A3, B2: pre_ty pos
p4: pat `+ A3
B: ty
m: obs_op B
Ξ“: neg_ctx
w: whn Ξ“ `- (A3 βŠ• B2)
a: dom (POr1 p4) =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
i0: evalβ‚’ (Cut pos (Whn (OrR1 (p4 `α΅₯βŠ› a))) (Whn w)) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A4, B3: pre_ty pos
p5: pat `+ B3
B: ty
m: obs_op B
Ξ“: neg_ctx
w: whn Ξ“ `- (A4 βŠ• B3)
a: dom (POr2 p5) =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
i0: evalβ‚’ (Cut pos (Whn (OrR2 (p5 `α΅₯βŠ› a))) (Whn w)) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A7: pre_ty neg
B: ty
m: obs_op B
Ξ“: neg_ctx
w: whn Ξ“ `- (↓ A7)
i: Ξ“ βˆ‹ B
v': term Ξ“ `+ A7
i0: evalβ‚’ (Cut pos (Whn (ShiftPR v')) (Whn w)) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A9: pre_ty neg
p8: pat `- A9
B: ty
m: obs_op B
Ξ“: neg_ctx
w: whn Ξ“ `- (βŠ– A9)
a: dom (PNegP p8) =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
i0: evalβ‚’ (Cut pos (Whn (NegPR (p8 `α΅₯βŠ› a))) (Whn w)) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
B: ty
m: obs_op B
Ξ“: neg_ctx
i: Ξ“ βˆ‹ B
c: Ξ“ βˆ‹ `- 1
i0: evalβ‚’ (Cut pos (Whn OneR) (Whn (Var c))) β‰Š ret_delay (i β‹… m)

Acc head_inst_nostep (B,' m)
A0, B0: pre_ty pos
B: ty
m: obs_op B
Ξ“: neg_ctx
w: whn Ξ“ `+ A0
w0: whn Ξ“ `+ B0
i: Ξ“ βˆ‹ B
c: Ξ“ βˆ‹ `- (A0 βŠ— B0)
i0: evalβ‚’ (Cut pos (Whn (TenR w w0)) (Whn (Var c))) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A4, B4: pre_ty pos
B: ty
m: obs_op B
Ξ“: neg_ctx
w3: whn Ξ“ `+ A4
i: Ξ“ βˆ‹ B
c: Ξ“ βˆ‹ `- (A4 βŠ• B4)
i0: evalβ‚’ (Cut pos (Whn (OrR1 w3)) (Whn (Var c))) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A5, B5: pre_ty pos
B: ty
m: obs_op B
Ξ“: neg_ctx
w4: whn Ξ“ `+ B5
i: Ξ“ βˆ‹ B
c: Ξ“ βˆ‹ `- (A5 βŠ• B5)
i0: evalβ‚’ (Cut pos (Whn (OrR2 w4)) (Whn (Var c))) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A10: pre_ty neg
B: ty
m: obs_op B
Ξ“: neg_ctx
t1: term Ξ“ `+ A10
i: Ξ“ βˆ‹ B
c: Ξ“ βˆ‹ `- (↓ A10)
i0: evalβ‚’ (Cut pos (Whn (ShiftPR t1)) (Whn (Var c))) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A14: pre_ty neg
B: ty
m: obs_op B
Ξ“: neg_ctx
w7: whn Ξ“ `- A14
i: Ξ“ βˆ‹ B
c: Ξ“ βˆ‹ `- (βŠ– A14)
i0: evalβ‚’ (Cut pos (Whn (NegPR w7)) (Whn (Var c))) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
B: ty
m: obs_op B
Ξ“: neg_ctx
c: Ξ“ βˆ‹ `+ βŠ₯
a: dom PBot =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
i0: evalβ‚’ (Cut neg (Whn (Var c)) (Whn BotL)) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A2, B1: pre_ty neg
p2: pat `- A2
p3: pat `- B1
B: ty
m: obs_op B
Ξ“: neg_ctx
c: Ξ“ βˆ‹ `+ (A2 β…‹ B1)
a: dom (PPar p2 p3) =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
i0: evalβ‚’ (Cut neg (Whn (Var c)) (Whn (ParL (p2 `α΅₯βŠ›α΅£ r_cover_l cover_cat `α΅₯βŠ› a) (p3 `α΅₯βŠ›α΅£ r_cover_r cover_cat `α΅₯βŠ› a)))) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A5, B4: pre_ty neg
p6: pat `- A5
B: ty
m: obs_op B
Ξ“: neg_ctx
c: Ξ“ βˆ‹ `+ (A5 & B4)
a: dom (PAnd1 p6) =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
i0: evalβ‚’ (Cut neg (Whn (Var c)) (Whn (AndL1 (p6 `α΅₯βŠ› a)))) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
B: ty
m: obs_op B
Ξ“: neg_ctx
i: Ξ“ βˆ‹ B
c: Ξ“ βˆ‹ `+ βŠ₯
i0: evalβ‚’ (Cut neg (Whn (Var c)) (Whn BotL)) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A3, B3: pre_ty neg
B: ty
m: obs_op B
Ξ“: neg_ctx
w1: whn Ξ“ `- A3
w2: whn Ξ“ `- B3
i: Ξ“ βˆ‹ B
c: Ξ“ βˆ‹ `+ (A3 β…‹ B3)
i0: evalβ‚’ (Cut neg (Whn (Var c)) (Whn (ParL w1 w2))) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A8, B8: pre_ty neg
B: ty
m: obs_op B
Ξ“: neg_ctx
w5: whn Ξ“ `- A8
i: Ξ“ βˆ‹ B
c: Ξ“ βˆ‹ `+ (A8 & B8)
i0: evalβ‚’ (Cut neg (Whn (Var c)) (Whn (AndL1 w5))) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A9, B9: pre_ty neg
B: ty
m: obs_op B
Ξ“: neg_ctx
w6: whn Ξ“ `- B9
i: Ξ“ βˆ‹ B
c: Ξ“ βˆ‹ `+ (A9 & B9)
i0: evalβ‚’ (Cut neg (Whn (Var c)) (Whn (AndL2 w6))) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A13: pre_ty pos
B: ty
m: obs_op B
Ξ“: neg_ctx
t2: term Ξ“ `- A13
i: Ξ“ βˆ‹ B
c: Ξ“ βˆ‹ `+ (↑ A13)
i0: evalβ‚’ (Cut neg (Whn (Var c)) (Whn (ShiftNL t2))) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A17: pre_ty pos
B: ty
m: obs_op B
Ξ“: neg_ctx
w8: whn Ξ“ `+ A17
i: Ξ“ βˆ‹ B
c: Ξ“ βˆ‹ `+ (Β¬ A17)
i0: evalβ‚’ (Cut neg (Whn (Var c)) (Whn (NegNL w8))) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A6, B5: pre_ty neg
p7: pat `- B5
B: ty
m: obs_op B
Ξ“: neg_ctx
c: Ξ“ βˆ‹ `+ (A6 & B5)
a: dom (PAnd2 p7) =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
i0: evalβ‚’ (Cut neg (Whn (Var c)) (Whn (AndL2 (p7 `α΅₯βŠ› a)))) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A8: pre_ty pos
B: ty
m: obs_op B
Ξ“: neg_ctx
c: Ξ“ βˆ‹ `+ (↑ A8)
i: Ξ“ βˆ‹ B
v': term Ξ“ `- A8
i0: evalβ‚’ (Cut neg (Whn (Var c)) (Whn (ShiftNL v'))) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A10: pre_ty pos
p9: pat `+ A10
B: ty
m: obs_op B
Ξ“: neg_ctx
c: Ξ“ βˆ‹ `+ (Β¬ A10)
a: dom (PNegN p9) =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
i0: evalβ‚’ (Cut neg (Whn (Var c)) (Whn (NegNL (p9 `α΅₯βŠ› a)))) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
B: ty
m: obs_op B
Ξ“: neg_ctx
c: Ξ“ βˆ‹ `- 1
a: dom POne =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
i0: evalβ‚’ (Cut pos (Whn OneR) (Whn (Var c))) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A1, B0: pre_ty pos
p0: pat `+ A1
p1: pat `+ B0
B: ty
m: obs_op B
Ξ“: neg_ctx
c: Ξ“ βˆ‹ `- (A1 βŠ— B0)
a: dom (PTen p0 p1) =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
i0: evalβ‚’ (Cut pos (Whn (TenR (p0 `α΅₯βŠ›α΅£ r_cover_l cover_cat `α΅₯βŠ› a) (p1 `α΅₯βŠ›α΅£ r_cover_r cover_cat `α΅₯βŠ› a))) (Whn (Var c))) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A3, B2: pre_ty pos
p4: pat `+ A3
B: ty
m: obs_op B
Ξ“: neg_ctx
c: Ξ“ βˆ‹ `- (A3 βŠ• B2)
a: dom (POr1 p4) =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
i0: evalβ‚’ (Cut pos (Whn (OrR1 (p4 `α΅₯βŠ› a))) (Whn (Var c))) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A4, B3: pre_ty pos
p5: pat `+ B3
B: ty
m: obs_op B
Ξ“: neg_ctx
c: Ξ“ βˆ‹ `- (A4 βŠ• B3)
a: dom (POr2 p5) =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
i0: evalβ‚’ (Cut pos (Whn (OrR2 (p5 `α΅₯βŠ› a))) (Whn (Var c))) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A7: pre_ty neg
B: ty
m: obs_op B
Ξ“: neg_ctx
c: Ξ“ βˆ‹ `- (↓ A7)
i: Ξ“ βˆ‹ B
v': term Ξ“ `+ A7
i0: evalβ‚’ (Cut pos (Whn (ShiftPR v')) (Whn (Var c))) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
A9: pre_ty neg
p8: pat `- A9
B: ty
m: obs_op B
Ξ“: neg_ctx
c: Ξ“ βˆ‹ `- (βŠ– A9)
a: dom (PNegP p8) =[ val_n ]> Ξ“
i: Ξ“ βˆ‹ B
i0: evalβ‚’ (Cut pos (Whn (NegPR (p8 `α΅₯βŠ› a))) (Whn (Var c))) β‰Š ret_delay (i β‹… m)
Acc head_inst_nostep (B,' m)
Ξ“: neg_ctx
c: Ξ“ βˆ‹ `- 1

Acc head_inst_nostep (`- 1,' POne)
A0, B0: pre_ty pos
Ξ“: neg_ctx
w: whn Ξ“ `+ A0
w0: whn Ξ“ `+ B0
c: Ξ“ βˆ‹ `- (A0 βŠ— B0)
Acc head_inst_nostep (`- (A0 βŠ— B0),' PTen (p_of_w_0p A0 w) (p_of_w_0p B0 w0))
A4, B4: pre_ty pos
Ξ“: neg_ctx
w3: whn Ξ“ `+ A4
c: Ξ“ βˆ‹ `- (A4 βŠ• B4)
Acc head_inst_nostep (`- (A4 βŠ• B4),' POr1 (p_of_w_0p A4 w3))
A5, B5: pre_ty pos
Ξ“: neg_ctx
w4: whn Ξ“ `+ B5
c: Ξ“ βˆ‹ `- (A5 βŠ• B5)
Acc head_inst_nostep (`- (A5 βŠ• B5),' POr2 (p_of_w_0p B5 w4))
A10: pre_ty neg
Ξ“: neg_ctx
t1: term Ξ“ `+ A10
c: Ξ“ βˆ‹ `- (↓ A10)
Acc head_inst_nostep (`- (↓ A10),' PShiftP A10)
A14: pre_ty neg
Ξ“: neg_ctx
w7: whn Ξ“ `- A14
c: Ξ“ βˆ‹ `- (βŠ– A14)
Acc head_inst_nostep (`- (βŠ– A14),' PNegP (p_of_w_0n A14 w7))
Ξ“: neg_ctx
c: Ξ“ βˆ‹ `+ βŠ₯
a: dom PBot =[ val_n ]> Ξ“
Acc head_inst_nostep (`+ βŠ₯,' PBot)
A2, B1: pre_ty neg
p2: pat `- A2
p3: pat `- B1
Ξ“: neg_ctx
c: Ξ“ βˆ‹ `+ (A2 β…‹ B1)
a: dom (PPar p2 p3) =[ val_n ]> Ξ“
Acc head_inst_nostep (`+ (A2 β…‹ B1),' PPar (p_of_w_0n A2 (p2 `α΅₯βŠ›α΅£ r_cover_l cover_cat `α΅₯βŠ› a)) (p_of_w_0n B1 (p3 `α΅₯βŠ›α΅£ r_cover_r cover_cat `α΅₯βŠ› a)))
A5, B4: pre_ty neg
p6: pat `- A5
Ξ“: neg_ctx
c: Ξ“ βˆ‹ `+ (A5 & B4)
a: dom (PAnd1 p6) =[ val_n ]> Ξ“
Acc head_inst_nostep (`+ (A5 & B4),' PAnd1 (p_of_w_0n A5 (p6 `α΅₯βŠ› a)))
Ξ“: neg_ctx
c: Ξ“ βˆ‹ `+ βŠ₯
Acc head_inst_nostep (`+ βŠ₯,' PBot)
A3, B3: pre_ty neg
Ξ“: neg_ctx
w1: whn Ξ“ `- A3
w2: whn Ξ“ `- B3
c: Ξ“ βˆ‹ `+ (A3 β…‹ B3)
Acc head_inst_nostep (`+ (A3 β…‹ B3),' PPar (p_of_w_0n A3 w1) (p_of_w_0n B3 w2))
A8, B8: pre_ty neg
Ξ“: neg_ctx
w5: whn Ξ“ `- A8
c: Ξ“ βˆ‹ `+ (A8 & B8)
Acc head_inst_nostep (`+ (A8 & B8),' PAnd1 (p_of_w_0n A8 w5))
A9, B9: pre_ty neg
Ξ“: neg_ctx
w6: whn Ξ“ `- B9
c: Ξ“ βˆ‹ `+ (A9 & B9)
Acc head_inst_nostep (`+ (A9 & B9),' PAnd2 (p_of_w_0n B9 w6))
A13: pre_ty pos
Ξ“: neg_ctx
t2: term Ξ“ `- A13
c: Ξ“ βˆ‹ `+ (↑ A13)
Acc head_inst_nostep (`+ (↑ A13),' PShiftN A13)
A17: pre_ty pos
Ξ“: neg_ctx
w8: whn Ξ“ `+ A17
c: Ξ“ βˆ‹ `+ (Β¬ A17)
Acc head_inst_nostep (`+ (Β¬ A17),' PNegN (p_of_w_0p A17 w8))
A6, B5: pre_ty neg
p7: pat `- B5
Ξ“: neg_ctx
c: Ξ“ βˆ‹ `+ (A6 & B5)
a: dom (PAnd2 p7) =[ val_n ]> Ξ“
Acc head_inst_nostep (`+ (A6 & B5),' PAnd2 (p_of_w_0n B5 (p7 `α΅₯βŠ› a)))
A8: pre_ty pos
Ξ“: neg_ctx
c: Ξ“ βˆ‹ `+ (↑ A8)
v': term Ξ“ `- A8
Acc head_inst_nostep (`+ (↑ A8),' PShiftN A8)
A10: pre_ty pos
p9: pat `+ A10
Ξ“: neg_ctx
c: Ξ“ βˆ‹ `+ (Β¬ A10)
a: dom (PNegN p9) =[ val_n ]> Ξ“
Acc head_inst_nostep (`+ (Β¬ A10),' PNegN (p_of_w_0p A10 (p9 `α΅₯βŠ› a)))
Ξ“: neg_ctx
c: Ξ“ βˆ‹ `- 1
a: dom POne =[ val_n ]> Ξ“
Acc head_inst_nostep (`- 1,' POne)
A1, B0: pre_ty pos
p0: pat `+ A1
p1: pat `+ B0
Ξ“: neg_ctx
c: Ξ“ βˆ‹ `- (A1 βŠ— B0)
a: dom (PTen p0 p1) =[ val_n ]> Ξ“
Acc head_inst_nostep (`- (A1 βŠ— B0),' PTen (p_of_w_0p A1 (p0 `α΅₯βŠ›α΅£ r_cover_l cover_cat `α΅₯βŠ› a)) (p_of_w_0p B0 (p1 `α΅₯βŠ›α΅£ r_cover_r cover_cat `α΅₯βŠ› a)))
A3, B2: pre_ty pos
p4: pat `+ A3
Ξ“: neg_ctx
c: Ξ“ βˆ‹ `- (A3 βŠ• B2)
a: dom (POr1 p4) =[ val_n ]> Ξ“
Acc head_inst_nostep (`- (A3 βŠ• B2),' POr1 (p_of_w_0p A3 (p4 `α΅₯βŠ› a)))
A4, B3: pre_ty pos
p5: pat `+ B3
Ξ“: neg_ctx
c: Ξ“ βˆ‹ `- (A4 βŠ• B3)
a: dom (POr2 p5) =[ val_n ]> Ξ“
Acc head_inst_nostep (`- (A4 βŠ• B3),' POr2 (p_of_w_0p B3 (p5 `α΅₯βŠ› a)))
A7: pre_ty neg
Ξ“: neg_ctx
c: Ξ“ βˆ‹ `- (↓ A7)
v': term Ξ“ `+ A7
Acc head_inst_nostep (`- (↓ A7),' PShiftP A7)
A9: pre_ty neg
p8: pat `- A9
Ξ“: neg_ctx
c: Ξ“ βˆ‹ `- (βŠ– A9)
a: dom (PNegP p8) =[ val_n ]> Ξ“
Acc head_inst_nostep (`- (βŠ– A9),' PNegP (p_of_w_0n A9 (p8 `α΅₯βŠ› a)))
Ξ“: neg_ctx
c: Ξ“ βˆ‹ `- 1
t: ty
o: pat t †
Ξ“0: neg_ctx
w: whn Ξ“0 `- 1
a: dom POne =[ val_n ]> Ξ“0
i: Ξ“0 βˆ‹ projT1 (t,' o)
t0: is_var (Whn w) -> T0
i0: evalβ‚’ (Whn w βŠ™ POne β¦— a ⦘) β‰Š ret_delay (i β‹… projT2 (t,' o))

Acc head_inst_nostep (t,' o)
A0, B0: pre_ty pos
Ξ“: neg_ctx
w: whn Ξ“ `+ A0
w0: whn Ξ“ `+ B0
c: Ξ“ βˆ‹ `- (A0 βŠ— B0)
t: ty
o: pat t †
Ξ“0: neg_ctx
w1: whn Ξ“0 `- (A0 βŠ— B0)
a: dom (PTen (p_of_w_0p A0 w) (p_of_w_0p B0 w0)) =[ val_n ]> Ξ“0
i: Ξ“0 βˆ‹ projT1 (t,' o)
t0: is_var (Whn w1) -> T0
i0: evalβ‚’ (Whn w1 βŠ™ PTen (p_of_w_0p A0 w) (p_of_w_0p B0 w0) β¦— a ⦘) β‰Š ret_delay (i β‹… projT2 (t,' o))
Acc head_inst_nostep (t,' o)
A4, B4: pre_ty pos
Ξ“: neg_ctx
w3: whn Ξ“ `+ A4
c: Ξ“ βˆ‹ `- (A4 βŠ• B4)
t: ty
o: pat t †
Ξ“0: neg_ctx
w: whn Ξ“0 `- (A4 βŠ• B4)
a: dom (POr1 (p_of_w_0p A4 w3)) =[ val_n ]> Ξ“0
i: Ξ“0 βˆ‹ projT1 (t,' o)
t0: is_var (Whn w) -> T0
i0: evalβ‚’ (Whn w βŠ™ POr1 (p_of_w_0p A4 w3) β¦— a ⦘) β‰Š ret_delay (i β‹… projT2 (t,' o))
Acc head_inst_nostep (t,' o)
A5, B5: pre_ty pos
Ξ“: neg_ctx
w4: whn Ξ“ `+ B5
c: Ξ“ βˆ‹ `- (A5 βŠ• B5)
t: ty
o: pat t †
Ξ“0: neg_ctx
w: whn Ξ“0 `- (A5 βŠ• B5)
a: dom (POr2 (p_of_w_0p B5 w4)) =[ val_n ]> Ξ“0
i: Ξ“0 βˆ‹ projT1 (t,' o)
t0: is_var (Whn w) -> T0
i0: evalβ‚’ (Whn w βŠ™ POr2 (p_of_w_0p B5 w4) β¦— a ⦘) β‰Š ret_delay (i β‹… projT2 (t,' o))
Acc head_inst_nostep (t,' o)
A10: pre_ty neg
Ξ“: neg_ctx
t1: term Ξ“ `+ A10
c: Ξ“ βˆ‹ `- (↓ A10)
t: ty
o: pat t †
Ξ“0: neg_ctx
w: whn Ξ“0 `- (↓ A10)
a: dom (PShiftP A10) =[ val_n ]> Ξ“0
i: Ξ“0 βˆ‹ projT1 (t,' o)
t0: is_var (Whn w) -> T0
i0: evalβ‚’ (Whn w βŠ™ PShiftP A10 β¦— a ⦘) β‰Š ret_delay (i β‹… projT2 (t,' o))
Acc head_inst_nostep (t,' o)
A14: pre_ty neg
Ξ“: neg_ctx
w7: whn Ξ“ `- A14
c: Ξ“ βˆ‹ `- (βŠ– A14)
t: ty
o: pat t †
Ξ“0: neg_ctx
w: whn Ξ“0 `- (βŠ– A14)
a: dom (PNegP (p_of_w_0n A14 w7)) =[ val_n ]> Ξ“0
i: Ξ“0 βˆ‹ projT1 (t,' o)
t0: is_var (Whn w) -> T0
i0: evalβ‚’ (Whn w βŠ™ PNegP (p_of_w_0n A14 w7) β¦— a ⦘) β‰Š ret_delay (i β‹… projT2 (t,' o))
Acc head_inst_nostep (t,' o)
Ξ“: neg_ctx
c: Ξ“ βˆ‹ `+ βŠ₯
a: dom PBot =[ val_n ]> Ξ“
t: ty
o: pat t †
Ξ“0: neg_ctx
w: whn Ξ“0 `+ βŠ₯
a0: dom PBot =[ val_n ]> Ξ“0
i: Ξ“0 βˆ‹ projT1 (t,' o)
t0: is_var (Whn w) -> T0
i0: evalβ‚’ (Whn w βŠ™ PBot β¦— a0 ⦘) β‰Š ret_delay (i β‹… projT2 (t,' o))
Acc head_inst_nostep (t,' o)
A2, B1: pre_ty neg
p2: pat `- A2
p3: pat `- B1
Ξ“: neg_ctx
c: Ξ“ βˆ‹ `+ (A2 β…‹ B1)
a: dom (PPar p2 p3) =[ val_n ]> Ξ“
t: ty
o: pat t †
Ξ“0: neg_ctx
w: whn Ξ“0 `+ (A2 β…‹ B1)
a0: dom (PPar (p_of_w_0n A2 (p2 `α΅₯βŠ›α΅£ r_cover_l cover_cat `α΅₯βŠ› a)) (p_of_w_0n B1 (p3 `α΅₯βŠ›α΅£ r_cover_r cover_cat `α΅₯βŠ› a))) =[ val_n ]> Ξ“0
i: Ξ“0 βˆ‹ projT1 (t,' o)
t0: is_var (Whn w) -> T0
i0: evalβ‚’ (Whn w βŠ™ PPar (p_of_w_0n A2 (p2 `α΅₯βŠ›α΅£ r_cover_l cover_cat `α΅₯βŠ› a)) (p_of_w_0n B1 (p3 `α΅₯βŠ›α΅£ r_cover_r cover_cat `α΅₯βŠ› a)) β¦— a0 ⦘) β‰Š ret_delay (i β‹… projT2 (t,' o))
Acc head_inst_nostep (t,' o)
A5, B4: pre_ty neg
p6: pat `- A5
Ξ“: neg_ctx
c: Ξ“ βˆ‹ `+ (A5 & B4)
a: dom (PAnd1 p6) =[ val_n ]> Ξ“
t: ty
o: pat t †
Ξ“0: neg_ctx
w: whn Ξ“0 `+ (A5 & B4)
a0: dom (PAnd1 (p_of_w_0n A5 (p6 `α΅₯βŠ› a))) =[ val_n ]> Ξ“0
i: Ξ“0 βˆ‹ projT1 (t,' o)
t0: is_var (Whn w) -> T0
i0: evalβ‚’ (Whn w βŠ™ PAnd1 (p_of_w_0n A5 (p6 `α΅₯βŠ› a)) β¦— a0 ⦘) β‰Š ret_delay (i β‹… projT2 (t,' o))
Acc head_inst_nostep (t,' o)
Ξ“: neg_ctx
c: Ξ“ βˆ‹ `+ βŠ₯
t: ty
o: pat t †
Ξ“0: neg_ctx
w: whn Ξ“0 `+ βŠ₯
a: dom PBot =[ val_n ]> Ξ“0
i: Ξ“0 βˆ‹ projT1 (t,' o)
t0: is_var (Whn w) -> T0
i0: evalβ‚’ (Whn w βŠ™ PBot β¦— a ⦘) β‰Š ret_delay (i β‹… projT2 (t,' o))
Acc head_inst_nostep (t,' o)
A3, B3: pre_ty neg
Ξ“: neg_ctx
w1: whn Ξ“ `- A3
w2: whn Ξ“ `- B3
c: Ξ“ βˆ‹ `+ (A3 β…‹ B3)
t: ty
o: pat t †
Ξ“0: neg_ctx
w: whn Ξ“0 `+ (A3 β…‹ B3)
a: dom (PPar (p_of_w_0n A3 w1) (p_of_w_0n B3 w2)) =[ val_n ]> Ξ“0
i: Ξ“0 βˆ‹ projT1 (t,' o)
t0: is_var (Whn w) -> T0
i0: evalβ‚’ (Whn w βŠ™ PPar (p_of_w_0n A3 w1) (p_of_w_0n B3 w2) β¦— a ⦘) β‰Š ret_delay (i β‹… projT2 (t,' o))
Acc head_inst_nostep (t,' o)
A8, B8: pre_ty neg
Ξ“: neg_ctx
w5: whn Ξ“ `- A8
c: Ξ“ βˆ‹ `+ (A8 & B8)
t: ty
o: pat t †
Ξ“0: neg_ctx
w: whn Ξ“0 `+ (A8 & B8)
a: dom (PAnd1 (p_of_w_0n A8 w5)) =[ val_n ]> Ξ“0
i: Ξ“0 βˆ‹ projT1 (t,' o)
t0: is_var (Whn w) -> T0
i0: evalβ‚’ (Whn w βŠ™ PAnd1 (p_of_w_0n A8 w5) β¦— a ⦘) β‰Š ret_delay (i β‹… projT2 (t,' o))
Acc head_inst_nostep (t,' o)
A9, B9: pre_ty neg
Ξ“: neg_ctx
w6: whn Ξ“ `- B9
c: Ξ“ βˆ‹ `+ (A9 & B9)
t: ty
o: pat t †
Ξ“0: neg_ctx
w: whn Ξ“0 `+ (A9 & B9)
a: dom (PAnd2 (p_of_w_0n B9 w6)) =[ val_n ]> Ξ“0
i: Ξ“0 βˆ‹ projT1 (t,' o)
t0: is_var (Whn w) -> T0
i0: evalβ‚’ (Whn w βŠ™ PAnd2 (p_of_w_0n B9 w6) β¦— a ⦘) β‰Š ret_delay (i β‹… projT2 (t,' o))
Acc head_inst_nostep (t,' o)
A13: pre_ty pos
Ξ“: neg_ctx
t2: term Ξ“ `- A13
c: Ξ“ βˆ‹ `+ (↑ A13)
t: ty
o: pat t †
Ξ“0: neg_ctx
w: whn Ξ“0 `+ (↑ A13)
a: dom (PShiftN A13) =[ val_n ]> Ξ“0
i: Ξ“0 βˆ‹ projT1 (t,' o)
t0: is_var (Whn w) -> T0
i0: evalβ‚’ (Whn w βŠ™ PShiftN A13 β¦— a ⦘) β‰Š ret_delay (i β‹… projT2 (t,' o))
Acc head_inst_nostep (t,' o)
A17: pre_ty pos
Ξ“: neg_ctx
w8: whn Ξ“ `+ A17
c: Ξ“ βˆ‹ `+ (Β¬ A17)
t: ty
o: pat t †
Ξ“0: neg_ctx
w: whn Ξ“0 `+ (Β¬ A17)
a: dom (PNegN (p_of_w_0p A17 w8)) =[ val_n ]> Ξ“0
i: Ξ“0 βˆ‹ projT1 (t,' o)
t0: is_var (Whn w) -> T0
i0: evalβ‚’ (Whn w βŠ™ PNegN (p_of_w_0p A17 w8) β¦— a ⦘) β‰Š ret_delay (i β‹… projT2 (t,' o))
Acc head_inst_nostep (t,' o)
A6, B5: pre_ty neg
p7: pat `- B5
Ξ“: neg_ctx
c: Ξ“ βˆ‹ `+ (A6 & B5)
a: dom (PAnd2 p7) =[ val_n ]> Ξ“
t: ty
o: pat t †
Ξ“0: neg_ctx
w: whn Ξ“0 `+ (A6 & B5)
a0: dom (PAnd2 (p_of_w_0n B5 (p7 `α΅₯βŠ› a))) =[ val_n ]> Ξ“0
i: Ξ“0 βˆ‹ projT1 (t,' o)
t0: is_var (Whn w) -> T0
i0: evalβ‚’ (Whn w βŠ™ PAnd2 (p_of_w_0n B5 (p7 `α΅₯βŠ› a)) β¦— a0 ⦘) β‰Š ret_delay (i β‹… projT2 (t,' o))
Acc head_inst_nostep (t,' o)
A8: pre_ty pos
Ξ“: neg_ctx
c: Ξ“ βˆ‹ `+ (↑ A8)
v': term Ξ“ `- A8
t: ty
o: pat t †
Ξ“0: neg_ctx
w: whn Ξ“0 `+ (↑ A8)
a: dom (PShiftN A8) =[ val_n ]> Ξ“0
i: Ξ“0 βˆ‹ projT1 (t,' o)
t0: is_var (Whn w) -> T0
i0: evalβ‚’ (Whn w βŠ™ PShiftN A8 β¦— a ⦘) β‰Š ret_delay (i β‹… projT2 (t,' o))
Acc head_inst_nostep (t,' o)
A10: pre_ty pos
p9: pat `+ A10
Ξ“: neg_ctx
c: Ξ“ βˆ‹ `+ (Β¬ A10)
a: dom (PNegN p9) =[ val_n ]> Ξ“
t: ty
o: pat t †
Ξ“0: neg_ctx
w: whn Ξ“0 `+ (Β¬ A10)
a0: dom (PNegN (p_of_w_0p A10 (p9 `α΅₯βŠ› a))) =[ val_n ]> Ξ“0
i: Ξ“0 βˆ‹ projT1 (t,' o)
t0: is_var (Whn w) -> T0
i0: evalβ‚’ (Whn w βŠ™ PNegN (p_of_w_0p A10 (p9 `α΅₯βŠ› a)) β¦— a0 ⦘) β‰Š ret_delay (i β‹… projT2 (t,' o))
Acc head_inst_nostep (t,' o)
Ξ“: neg_ctx
c: Ξ“ βˆ‹ `- 1
a: dom POne =[ val_n ]> Ξ“
t: ty
o: pat t †
Ξ“0: neg_ctx
w: whn Ξ“0 `- 1
a0: dom POne =[ val_n ]> Ξ“0
i: Ξ“0 βˆ‹ projT1 (t,' o)
t0: is_var (Whn w) -> T0
i0: evalβ‚’ (Whn w βŠ™ POne β¦— a0 ⦘) β‰Š ret_delay (i β‹… projT2 (t,' o))
Acc head_inst_nostep (t,' o)
A1, B0: pre_ty pos
p0: pat `+ A1
p1: pat `+ B0
Ξ“: neg_ctx
c: Ξ“ βˆ‹ `- (A1 βŠ— B0)
a: dom (PTen p0 p1) =[ val_n ]> Ξ“
t: ty
o: pat t †
Ξ“0: neg_ctx
w: whn Ξ“0 `- (A1 βŠ— B0)
a0: dom (PTen (p_of_w_0p A1 (p0 `α΅₯βŠ›α΅£ r_cover_l cover_cat `α΅₯βŠ› a)) (p_of_w_0p B0 (p1 `α΅₯βŠ›α΅£ r_cover_r cover_cat `α΅₯βŠ› a))) =[ val_n ]> Ξ“0
i: Ξ“0 βˆ‹ projT1 (t,' o)
t0: is_var (Whn w) -> T0
i0: evalβ‚’ (Whn w βŠ™ PTen (p_of_w_0p A1 (p0 `α΅₯βŠ›α΅£ r_cover_l cover_cat `α΅₯βŠ› a)) (p_of_w_0p B0 (p1 `α΅₯βŠ›α΅£ r_cover_r cover_cat `α΅₯βŠ› a)) β¦— a0 ⦘) β‰Š ret_delay (i β‹… projT2 (t,' o))
Acc head_inst_nostep (t,' o)
A3, B2: pre_ty pos
p4: pat `+ A3
Ξ“: neg_ctx
c: Ξ“ βˆ‹ `- (A3 βŠ• B2)
a: dom (POr1 p4) =[ val_n ]> Ξ“
t: ty
o: pat t †
Ξ“0: neg_ctx
w: whn Ξ“0 `- (A3 βŠ• B2)
a0: dom (POr1 (p_of_w_0p A3 (p4 `α΅₯βŠ› a))) =[ val_n ]> Ξ“0
i: Ξ“0 βˆ‹ projT1 (t,' o)
t0: is_var (Whn w) -> T0
i0: evalβ‚’ (Whn w βŠ™ POr1 (p_of_w_0p A3 (p4 `α΅₯βŠ› a)) β¦— a0 ⦘) β‰Š ret_delay (i β‹… projT2 (t,' o))
Acc head_inst_nostep (t,' o)
A4, B3: pre_ty pos
p5: pat `+ B3
Ξ“: neg_ctx
c: Ξ“ βˆ‹ `- (A4 βŠ• B3)
a: dom (POr2 p5) =[ val_n ]> Ξ“
t: ty
o: pat t †
Ξ“0: neg_ctx
w: whn Ξ“0 `- (A4 βŠ• B3)
a0: dom (POr2 (p_of_w_0p B3 (p5 `α΅₯βŠ› a))) =[ val_n ]> Ξ“0
i: Ξ“0 βˆ‹ projT1 (t,' o)
t0: is_var (Whn w) -> T0
i0: evalβ‚’ (Whn w βŠ™ POr2 (p_of_w_0p B3 (p5 `α΅₯βŠ› a)) β¦— a0 ⦘) β‰Š ret_delay (i β‹… projT2 (t,' o))
Acc head_inst_nostep (t,' o)
A7: pre_ty neg
Ξ“: neg_ctx
c: Ξ“ βˆ‹ `- (↓ A7)
v': term Ξ“ `+ A7
t: ty
o: pat t †
Ξ“0: neg_ctx
w: whn Ξ“0 `- (↓ A7)
a: dom (PShiftP A7) =[ val_n ]> Ξ“0
i: Ξ“0 βˆ‹ projT1 (t,' o)
t0: is_var (Whn w) -> T0
i0: evalβ‚’ (Whn w βŠ™ PShiftP A7 β¦— a ⦘) β‰Š ret_delay (i β‹… projT2 (t,' o))
Acc head_inst_nostep (t,' o)
A9: pre_ty neg
p8: pat `- A9
Ξ“: neg_ctx
c: Ξ“ βˆ‹ `- (βŠ– A9)
a: dom (PNegP p8) =[ val_n ]> Ξ“
t: ty
o: pat t †
Ξ“0: neg_ctx
w: whn Ξ“0 `- (βŠ– A9)
a0: dom (PNegP (p_of_w_0n A9 (p8 `α΅₯βŠ› a))) =[ val_n ]> Ξ“0
i: Ξ“0 βˆ‹ projT1 (t,' o)
t0: is_var (Whn w) -> T0
i0: evalβ‚’ (Whn w βŠ™ PNegP (p_of_w_0n A9 (p8 `α΅₯βŠ› a)) β¦— a0 ⦘) β‰Š ret_delay (i β‹… projT2 (t,' o))
Acc head_inst_nostep (t,' o)
Ξ“: neg_ctx
c: Ξ“ βˆ‹ `- 1
t: ty
o: pat t †
Ξ“0: neg_ctx
s: state Ξ“0
a: dom POne =[ val_n ]> Ξ“0
i: Ξ“0 βˆ‹ projT1 (t,' o)
t0: is_var (Whn (OneL s)) -> T0
i0: evalβ‚’ (Whn (OneL s) βŠ™ POne β¦— a ⦘) β‰Š ret_delay (i β‹… projT2 (t,' o))

Acc head_inst_nostep (t,' o)
A2, B2: pre_ty pos
Ξ“: neg_ctx
w: whn Ξ“ `+ A2
w0: whn Ξ“ `+ B2
c: Ξ“ βˆ‹ `- (A2 βŠ— B2)
t: ty
o: pat t †
Ξ“0: neg_ctx
s1: state (Ξ“0 β–Άβ‚“ `+ A2 β–Άβ‚“ `+ B2)
a: dom (PTen (p_of_w_0p A2 w) (p_of_w_0p B2 w0)) =[ val_n ]> Ξ“0
i: Ξ“0 βˆ‹ projT1 (t,' o)
t0: is_var (Whn (TenL s1)) -> T0
i0: evalβ‚’ (Whn (TenL s1) βŠ™ PTen (p_of_w_0p A2 w) (p_of_w_0p B2 w0) β¦— a ⦘) β‰Š ret_delay (i β‹… projT2 (t,' o))
Acc head_inst_nostep (t,' o)
A7, B7: pre_ty pos
Ξ“: neg_ctx
w3: whn Ξ“ `+ A7
c: Ξ“ βˆ‹ `- (A7 βŠ• B7)
t: ty
o: pat t †
Ξ“0: neg_ctx
s3: state (Ξ“0 β–Άβ‚“ `+ A7)
s4: state (Ξ“0 β–Άβ‚“ `+ B7)
a: dom (POr1 (p_of_w_0p A7 w3)) =[ val_n ]> Ξ“0
i: Ξ“0 βˆ‹ projT1 (t,' o)
t0: is_var (Whn (OrL s3 s4)) -> T0
i0: evalβ‚’ (Whn (OrL s3 s4) βŠ™ POr1 (p_of_w_0p A7 w3) β¦— a ⦘) β‰Š ret_delay (i β‹… projT2 (t,' o))
Acc head_inst_nostep (t,' o)
A7, B7: pre_ty pos
Ξ“: neg_ctx
w4: whn Ξ“ `+ B7
c: Ξ“ βˆ‹ `- (A7 βŠ• B7)
t: ty
o: pat t †
Ξ“0: neg_ctx
s3: state (Ξ“0 β–Άβ‚“ `+ A7)
s4: state (Ξ“0 β–Άβ‚“ `+ B7)
a: dom (POr2 (p_of_w_0p B7 w4)) =[ val_n ]> Ξ“0
i: Ξ“0 βˆ‹ projT1 (t,' o)
t0: is_var (Whn (OrL s3 s4)) -> T0
i0: evalβ‚’ (Whn (OrL s3 s4) βŠ™ POr2 (p_of_w_0p B7 w4) β¦— a ⦘) β‰Š ret_delay (i β‹… projT2 (t,' o))
Acc head_inst_nostep (t,' o)
A12: pre_ty neg
Ξ“: neg_ctx
t1: term Ξ“ `+ A12
c: Ξ“ βˆ‹ `- (↓ A12)
t: ty
o: pat t †
Ξ“0: neg_ctx
s7: state (Ξ“0 β–Άβ‚“ `+ A12)
a: dom (PShiftP A12) =[ val_n ]> Ξ“0
i: Ξ“0 βˆ‹ projT1 (t,' o)
t0: is_var (Whn (ShiftPL s7)) -> T0
i0: evalβ‚’ (Whn (ShiftPL s7) βŠ™ PShiftP A12 β¦— a ⦘) β‰Š ret_delay (i β‹… projT2 (t,' o))
Acc head_inst_nostep (t,' o)
A16: pre_ty neg
Ξ“: neg_ctx
w7: whn Ξ“ `- A16
c: Ξ“ βˆ‹ `- (βŠ– A16)
t: ty
o: pat t †
Ξ“0: neg_ctx
s9: state (Ξ“0 β–Άβ‚“ `- A16)
a: dom (PNegP (p_of_w_0n A16 w7)) =[ val_n ]> Ξ“0
i: Ξ“0 βˆ‹ projT1 (t,' o)
t0: is_var (Whn (NegPL s9)) -> T0
i0: evalβ‚’ (Whn (NegPL s9) βŠ™ PNegP (p_of_w_0n A16 w7) β¦— a ⦘) β‰Š ret_delay (i β‹… projT2 (t,' o))
Acc head_inst_nostep (t,' o)
Ξ“: neg_ctx
c: Ξ“ βˆ‹ `+ βŠ₯
a: dom PBot =[ val_n ]> Ξ“
t: ty
o: pat t †
Ξ“0: neg_ctx
s0: state Ξ“0
a0: dom PBot =[ val_n ]> Ξ“0
i: Ξ“0 βˆ‹ projT1 (t,' o)
t0: is_var (Whn (BotR s0)) -> T0
i0: evalβ‚’ (Whn (BotR s0) βŠ™ PBot β¦— a0 ⦘) β‰Š ret_delay (i β‹… projT2 (t,' o))
Acc head_inst_nostep (t,' o)
A3, B3: pre_ty neg
p2: pat `- A3
p3: pat `- B3
Ξ“: neg_ctx
c: Ξ“ βˆ‹ `+ (A3 β…‹ B3)
a: dom (PPar p2 p3) =[ val_n ]> Ξ“
t: ty
o: pat t †
Ξ“0: neg_ctx
s2: state (Ξ“0 β–Άβ‚“ `- A3 β–Άβ‚“ `- B3)
a0: dom (PPar (p_of_w_0n A3 (p2 `α΅₯βŠ›α΅£ r_cover_l cover_cat `α΅₯βŠ› a)) (p_of_w_0n B3 (p3 `α΅₯βŠ›α΅£ r_cover_r cover_cat `α΅₯βŠ› a))) =[ val_n ]> Ξ“0
i: Ξ“0 βˆ‹ projT1 (t,' o)
t0: is_var (Whn (ParR s2)) -> T0
i0: evalβ‚’ (Whn (ParR s2) βŠ™ PPar (p_of_w_0n A3 (p2 `α΅₯βŠ›α΅£ r_cover_l cover_cat `α΅₯βŠ› a)) (p_of_w_0n B3 (p3 `α΅₯βŠ›α΅£ r_cover_r cover_cat `α΅₯βŠ› a)) β¦— a0 ⦘) β‰Š ret_delay (i β‹… projT2 (t,' o))
Acc head_inst_nostep (t,' o)
A8, B8: pre_ty neg
p6: pat `- A8
Ξ“: neg_ctx
c: Ξ“ βˆ‹ `+ (A8 & B8)
a: dom (PAnd1 p6) =[ val_n ]> Ξ“
t: ty
o: pat t †
Ξ“0: neg_ctx
s5: state (Ξ“0 β–Άβ‚“ `- A8)
s6: state (Ξ“0 β–Άβ‚“ `- B8)
a0: dom (PAnd1 (p_of_w_0n A8 (p6 `α΅₯βŠ› a))) =[ val_n ]> Ξ“0
i: Ξ“0 βˆ‹ projT1 (t,' o)
t0: is_var (Whn (AndR s5 s6)) -> T0
i0: evalβ‚’ (Whn (AndR s5 s6) βŠ™ PAnd1 (p_of_w_0n A8 (p6 `α΅₯βŠ› a)) β¦— a0 ⦘) β‰Š ret_delay (i β‹… projT2 (t,' o))
Acc head_inst_nostep (t,' o)
Ξ“: neg_ctx
c: Ξ“ βˆ‹ `+ βŠ₯
t: ty
o: pat t †
Ξ“0: neg_ctx
s0: state Ξ“0
a: dom PBot =[ val_n ]> Ξ“0
i: Ξ“0 βˆ‹ projT1 (t,' o)
t0: is_var (Whn (BotR s0)) -> T0
i0: evalβ‚’ (Whn (BotR s0) βŠ™ PBot β¦— a ⦘) β‰Š ret_delay (i β‹… projT2 (t,' o))
Acc head_inst_nostep (t,' o)
A2, B2: pre_ty neg
Ξ“: neg_ctx
w1: whn Ξ“ `- A2
w2: whn Ξ“ `- B2
c: Ξ“ βˆ‹ `+ (A2 β…‹ B2)
t: ty
o: pat t †
Ξ“0: neg_ctx
s2: state (Ξ“0 β–Άβ‚“ `- A2 β–Άβ‚“ `- B2)
a: dom (PPar (p_of_w_0n A2 w1) (p_of_w_0n B2 w2)) =[ val_n ]> Ξ“0
i: Ξ“0 βˆ‹ projT1 (t,' o)
t0: is_var (Whn (ParR s2)) -> T0
i0: evalβ‚’ (Whn (ParR s2) βŠ™ PPar (p_of_w_0n A2 w1) (p_of_w_0n B2 w2) β¦— a ⦘) β‰Š ret_delay (i β‹… projT2 (t,' o))
Acc head_inst_nostep (t,' o)
A7, B7: pre_ty neg
Ξ“: neg_ctx
w5: whn Ξ“ `- A7
c: Ξ“ βˆ‹ `+ (A7 & B7)
t: ty
o: pat t †
Ξ“0: neg_ctx
s5: state (Ξ“0 β–Άβ‚“ `- A7)
s6: state (Ξ“0 β–Άβ‚“ `- B7)
a: dom (PAnd1 (p_of_w_0n A7 w5)) =[ val_n ]> Ξ“0
i: Ξ“0 βˆ‹ projT1 (t,' o)
t0: is_var (Whn (AndR s5 s6)) -> T0
i0: evalβ‚’ (Whn (AndR s5 s6) βŠ™ PAnd1 (p_of_w_0n A7 w5) β¦— a ⦘) β‰Š ret_delay (i β‹… projT2 (t,' o))
Acc head_inst_nostep (t,' o)
A7, B7: pre_ty neg
Ξ“: neg_ctx
w6: whn Ξ“ `- B7
c: Ξ“ βˆ‹ `+ (A7 & B7)
t: ty
o: pat t †
Ξ“0: neg_ctx
s5: state (Ξ“0 β–Άβ‚“ `- A7)
s6: state (Ξ“0 β–Άβ‚“ `- B7)
a: dom (PAnd2 (p_of_w_0n B7 w6)) =[ val_n ]> Ξ“0
i: Ξ“0 βˆ‹ projT1 (t,' o)
t0: is_var (Whn (AndR s5 s6)) -> T0
i0: evalβ‚’ (Whn (AndR s5 s6) βŠ™ PAnd2 (p_of_w_0n B7 w6) β¦— a ⦘) β‰Š ret_delay (i β‹… projT2 (t,' o))
Acc head_inst_nostep (t,' o)
A12: pre_ty pos
Ξ“: neg_ctx
t2: term Ξ“ `- A12
c: Ξ“ βˆ‹ `+ (↑ A12)
t: ty
o: pat t †
Ξ“0: neg_ctx
s8: state (Ξ“0 β–Άβ‚“ `- A12)
a: dom (PShiftN A12) =[ val_n ]> Ξ“0
i: Ξ“0 βˆ‹ projT1 (t,' o)
t0: is_var (Whn (ShiftNR s8)) -> T0
i0: evalβ‚’ (Whn (ShiftNR s8) βŠ™ PShiftN A12 β¦— a ⦘) β‰Š ret_delay (i β‹… projT2 (t,' o))
Acc head_inst_nostep (t,' o)
A16: pre_ty pos
Ξ“: neg_ctx
w8: whn Ξ“ `+ A16
c: Ξ“ βˆ‹ `+ (Β¬ A16)
t: ty
o: pat t †
Ξ“0: neg_ctx
s10: state (Ξ“0 β–Άβ‚“ `+ A16)
a: dom (PNegN (p_of_w_0p A16 w8)) =[ val_n ]> Ξ“0
i: Ξ“0 βˆ‹ projT1 (t,' o)
t0: is_var (Whn (NegNR s10)) -> T0
i0: evalβ‚’ (Whn (NegNR s10) βŠ™ PNegN (p_of_w_0p A16 w8) β¦— a ⦘) β‰Š ret_delay (i β‹… projT2 (t,' o))
Acc head_inst_nostep (t,' o)
A8, B8: pre_ty neg
p7: pat `- B8
Ξ“: neg_ctx
c: Ξ“ βˆ‹ `+ (A8 & B8)
a: dom (PAnd2 p7) =[ val_n ]> Ξ“
t: ty
o: pat t †
Ξ“0: neg_ctx
s5: state (Ξ“0 β–Άβ‚“ `- A8)
s6: state (Ξ“0 β–Άβ‚“ `- B8)
a0: dom (PAnd2 (p_of_w_0n B8 (p7 `α΅₯βŠ› a))) =[ val_n ]> Ξ“0
i: Ξ“0 βˆ‹ projT1 (t,' o)
t0: is_var (Whn (AndR s5 s6)) -> T0
i0: evalβ‚’ (Whn (AndR s5 s6) βŠ™ PAnd2 (p_of_w_0n B8 (p7 `α΅₯βŠ› a)) β¦— a0 ⦘) β‰Š ret_delay (i β‹… projT2 (t,' o))
Acc head_inst_nostep (t,' o)
A13: pre_ty pos
Ξ“: neg_ctx
c: Ξ“ βˆ‹ `+ (↑ A13)
v': term Ξ“ `- A13
t: ty
o: pat t †
Ξ“0: neg_ctx
s8: state (Ξ“0 β–Άβ‚“ `- A13)
a: dom (PShiftN A13) =[ val_n ]> Ξ“0
i: Ξ“0 βˆ‹ projT1 (t,' o)
t0: is_var (Whn (ShiftNR s8)) -> T0
i0: evalβ‚’ (Whn (ShiftNR s8) βŠ™ PShiftN A13 β¦— a ⦘) β‰Š ret_delay (i β‹… projT2 (t,' o))
Acc head_inst_nostep (t,' o)
A17: pre_ty pos
p9: pat `+ A17
Ξ“: neg_ctx
c: Ξ“ βˆ‹ `+ (Β¬ A17)
a: dom (PNegN p9) =[ val_n ]> Ξ“
t: ty
o: pat t †
Ξ“0: neg_ctx
s10: state (Ξ“0 β–Άβ‚“ `+ A17)
a0: dom (PNegN (p_of_w_0p A17 (p9 `α΅₯βŠ› a))) =[ val_n ]> Ξ“0
i: Ξ“0 βˆ‹ projT1 (t,' o)
t0: is_var (Whn (NegNR s10)) -> T0
i0: evalβ‚’ (Whn (NegNR s10) βŠ™ PNegN (p_of_w_0p A17 (p9 `α΅₯βŠ› a)) β¦— a0 ⦘) β‰Š ret_delay (i β‹… projT2 (t,' o))
Acc head_inst_nostep (t,' o)
Ξ“: neg_ctx
c: Ξ“ βˆ‹ `- 1
a: dom POne =[ val_n ]> Ξ“
t: ty
o: pat t †
Ξ“0: neg_ctx
s: state Ξ“0
a0: dom POne =[ val_n ]> Ξ“0
i: Ξ“0 βˆ‹ projT1 (t,' o)
t0: is_var (Whn (OneL s)) -> T0
i0: evalβ‚’ (Whn (OneL s) βŠ™ POne β¦— a0 ⦘) β‰Š ret_delay (i β‹… projT2 (t,' o))
Acc head_inst_nostep (t,' o)
A2, B2: pre_ty pos
p0: pat `+ A2
p1: pat `+ B2
Ξ“: neg_ctx
c: Ξ“ βˆ‹ `- (A2 βŠ— B2)
a: dom (PTen p0 p1) =[ val_n ]> Ξ“
t: ty
o: pat t †
Ξ“0: neg_ctx
s1: state (Ξ“0 β–Άβ‚“ `+ A2 β–Άβ‚“ `+ B2)
a0: dom (PTen (p_of_w_0p A2 (p0 `α΅₯βŠ›α΅£ r_cover_l cover_cat `α΅₯βŠ› a)) (p_of_w_0p B2 (p1 `α΅₯βŠ›α΅£ r_cover_r cover_cat `α΅₯βŠ› a))) =[ val_n ]> Ξ“0
i: Ξ“0 βˆ‹ projT1 (t,' o)
t0: is_var (Whn (TenL s1)) -> T0
i0: evalβ‚’ (Whn (TenL s1) βŠ™ PTen (p_of_w_0p A2 (p0 `α΅₯βŠ›α΅£ r_cover_l cover_cat `α΅₯βŠ› a)) (p_of_w_0p B2 (p1 `α΅₯βŠ›α΅£ r_cover_r cover_cat `α΅₯βŠ› a)) β¦— a0 ⦘) β‰Š ret_delay (i β‹… projT2 (t,' o))
Acc head_inst_nostep (t,' o)
A7, B7: pre_ty pos
p4: pat `+ A7
Ξ“: neg_ctx
c: Ξ“ βˆ‹ `- (A7 βŠ• B7)
a: dom (POr1 p4) =[ val_n ]> Ξ“
t: ty
o: pat t †
Ξ“0: neg_ctx
s3: state (Ξ“0 β–Άβ‚“ `+ A7)
s4: state (Ξ“0 β–Άβ‚“ `+ B7)
a0: dom (POr1 (p_of_w_0p A7 (p4 `α΅₯βŠ› a))) =[ val_n ]> Ξ“0
i: Ξ“0 βˆ‹ projT1 (t,' o)
t0: is_var (Whn (OrL s3 s4)) -> T0
i0: evalβ‚’ (Whn (OrL s3 s4) βŠ™ POr1 (p_of_w_0p A7 (p4 `α΅₯βŠ› a)) β¦— a0 ⦘) β‰Š ret_delay (i β‹… projT2 (t,' o))
Acc head_inst_nostep (t,' o)
A7, B7: pre_ty pos
p5: pat `+ B7
Ξ“: neg_ctx
c: Ξ“ βˆ‹ `- (A7 βŠ• B7)
a: dom (POr2 p5) =[ val_n ]> Ξ“
t: ty
o: pat t †
Ξ“0: neg_ctx
s3: state (Ξ“0 β–Άβ‚“ `+ A7)
s4: state (Ξ“0 β–Άβ‚“ `+ B7)
a0: dom (POr2 (p_of_w_0p B7 (p5 `α΅₯βŠ› a))) =[ val_n ]> Ξ“0
i: Ξ“0 βˆ‹ projT1 (t,' o)
t0: is_var (Whn (OrL s3 s4)) -> T0
i0: evalβ‚’ (Whn (OrL s3 s4) βŠ™ POr2 (p_of_w_0p B7 (p5 `α΅₯βŠ› a)) β¦— a0 ⦘) β‰Š ret_delay (i β‹… projT2 (t,' o))
Acc head_inst_nostep (t,' o)
A12: pre_ty neg
Ξ“: neg_ctx
c: Ξ“ βˆ‹ `- (↓ A12)
v': term Ξ“ `+ A12
t: ty
o: pat t †
Ξ“0: neg_ctx
s7: state (Ξ“0 β–Άβ‚“ `+ A12)
a: dom (PShiftP A12) =[ val_n ]> Ξ“0
i: Ξ“0 βˆ‹ projT1 (t,' o)
t0: is_var (Whn (ShiftPL s7)) -> T0
i0: evalβ‚’ (Whn (ShiftPL s7) βŠ™ PShiftP A12 β¦— a ⦘) β‰Š ret_delay (i β‹… projT2 (t,' o))
Acc head_inst_nostep (t,' o)
A16: pre_ty neg
p8: pat `- A16
Ξ“: neg_ctx
c: Ξ“ βˆ‹ `- (βŠ– A16)
a: dom (PNegP p8) =[ val_n ]> Ξ“
t: ty
o: pat t †
Ξ“0: neg_ctx
s9: state (Ξ“0 β–Άβ‚“ `- A16)
a0: dom (PNegP (p_of_w_0n A16 (p8 `α΅₯βŠ› a))) =[ val_n ]> Ξ“0
i: Ξ“0 βˆ‹ projT1 (t,' o)
t0: is_var (Whn (NegPL s9)) -> T0
i0: evalβ‚’ (Whn (NegPL s9) βŠ™ PNegP (p_of_w_0n A16 (p8 `α΅₯βŠ› a)) β¦— a0 ⦘) β‰Š ret_delay (i β‹… projT2 (t,' o))
Acc head_inst_nostep (t,' o)
all: apply it_eq_step in i0; cbn in i0; dependent elimination i0. Qed.

Final theorem

We have finished instanciating our generic OGS construction on the System D calculus. For good measure we give here the concrete instanciation of the soundness theorem, stating that bisimilarity of the OGS strategies substitution equivalence.

Definition subst_eq (Ξ” : neg_ctx) {Ξ“} : relation (state Ξ“) :=
  fun u v => forall (Οƒ : Ξ“ =[val]> Ξ”), evalβ‚’ (u β‚œβŠ› Οƒ : state_n Ξ”) β‰ˆ evalβ‚’ (v β‚œβŠ› Οƒ : state_n Ξ”) .
Notation "x β‰ˆβŸ¦sub Ξ” βŸ§β‰ˆ y" := (subst_eq Ξ” x y) (at level 50).

Ξ”, Ξ“: neg_ctx
x, y: state Ξ“

x β‰ˆβŸ¦ogs Ξ” βŸ§β‰ˆ y -> x β‰ˆβŸ¦sub Ξ” βŸ§β‰ˆ y
exact (ogs_correction _ x y). Qed.

Finally it does not cost much to recover the more standard CIU equivalence, which we derive here for the case of terms (not co-terms).

Definition c_of_t {Ξ“ : neg_ctx} {A : pre_ty pos} (t : term Ξ“ `+A)
           : state_n (Ξ“ β–Άβ‚› {| sub_elt := `-A ; sub_prf := stt |}) :=
  Cut _ (t_shift1 _ t) (Whn (Var Ctx.top)) .
Notation "'name⁺'" := c_of_t.

Definition a_of_sk {Ξ“ Ξ” : neg_ctx} {A : pre_ty pos} (s : Ξ“ =[val]> Ξ”) (k : term Ξ” `-A)
  : (Ξ“ β–Άβ‚› {| sub_elt := `-A ; sub_prf := stt |}) =[val_n]> Ξ” :=
  [ s ,β‚“ k : val Ξ” `-A ].

Ξ“, Ξ”: neg_ctx
A: pre_ty pos
t: term Ξ“ `+ A
s: Ξ“ =[ val ]> Ξ”
k: term Ξ” `- A

Cut pos (t `β‚œβŠ› s) k = name⁺ t β‚œβŠ› a_of_sk s k
Ξ“, Ξ”: neg_ctx
A: pre_ty pos
t: term Ξ“ `+ A
s: Ξ“ =[ val ]> Ξ”
k: term Ξ” `- A

Cut pos (t `β‚œβŠ› s) k = name⁺ t β‚œβŠ› a_of_sk s k
cbn; f_equal; unfold t_shift1; rewrite t_sub_ren; now apply t_sub_eq. Qed. Definition ciu_eq (Ξ” : neg_ctx) {Ξ“} {A : pre_ty pos} : relation (term Ξ“ `+A) := fun u v => forall (Οƒ : Ξ“ =[val]> Ξ”) (k : term Ξ” `-A), evalβ‚’ (Cut _ (u `β‚œβŠ› Οƒ) k : state_n Ξ”) β‰ˆ evalβ‚’ (Cut _ (v `β‚œβŠ› Οƒ) k : state_n Ξ”) . Notation "x β‰ˆβŸ¦ciu Ξ” βŸ§βΊβ‰ˆ y" := (ciu_eq Ξ” x y) (at level 50).
Ξ”, Ξ“: neg_ctx
A: pre_ty pos
x, y: term Ξ“ `+ A

name⁺ x β‰ˆβŸ¦ogs Ξ” βŸ§β‰ˆ name⁺ y -> x β‰ˆβŸ¦ciu Ξ” βŸ§βΊβ‰ˆ y
Ξ”, Ξ“: neg_ctx
A: pre_ty pos
x, y: term Ξ“ `+ A
H: name⁺ x β‰ˆβŸ¦ogs Ξ” βŸ§β‰ˆ name⁺ y
Οƒ: Ξ“ =[ val ]> Ξ”
k: term Ξ” `- A

evalβ‚’ (name⁺ x β‚œβŠ› a_of_sk Οƒ k) β‰ˆ evalβ‚’ (name⁺ y β‚œβŠ› a_of_sk Οƒ k)
now apply subst_correct. Qed.