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.
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.
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.
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.
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).
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 β¦.
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) .
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) } .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
t: term Ξ AP_t Ξ A tdestruct 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
A: ty
w: whn Ξ AP_w Ξ A wdestruct 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 .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 Ξ ssyn_ind_args t_ren_proper_P w_ren_proper_P s_ren_proper_Pforall (Ξ : 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 ZerLforall Ξ : t_ctx, w_ren_proper_P Ξ `+ β€ TopRforall Ξ : t_ctx, w_ren_proper_P Ξ `+ 1 OneRforall (Ξ : 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 Ξ `- β₯ BotLforall (Ξ : 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 ββα΅£ f2forall (Ξ : 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 ββα΅£ f2forall (Ξ : 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 ββα΅£ f2forall (Ξ : 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 ββα΅£ f2forall (Ξ : t_ctx) (A : ty) (h : Ξ β A) (Ξ : t_ctx) (f1 f2 : Ξ β Ξ), f1 β‘β f2 -> Var h `α΅₯βα΅£ f1 = Var h `α΅₯βα΅£ f2forall (Ξ Ξ : t_ctx) (f1 f2 : Ξ β Ξ), f1 β‘β f2 -> ZerL `α΅₯βα΅£ f1 = ZerL `α΅₯βα΅£ f2forall (Ξ Ξ : t_ctx) (f1 f2 : Ξ β Ξ), f1 β‘β f2 -> TopR `α΅₯βα΅£ f1 = TopR `α΅₯βα΅£ f2forall (Ξ Ξ : t_ctx) (f1 f2 : Ξ β Ξ), f1 β‘β f2 -> OneR `α΅₯βα΅£ f1 = OneR `α΅₯βα΅£ f2forall (Ξ : 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 `α΅₯βα΅£ f2forall (Ξ : 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 `α΅₯βα΅£ f2forall (Ξ Ξ : t_ctx) (f1 f2 : Ξ β Ξ), f1 β‘β f2 -> BotL `α΅₯βα΅£ f1 = BotL `α΅₯βα΅£ f2forall (Ξ : 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 `α΅₯βα΅£ f2forall (Ξ : 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 `α΅₯βα΅£ f2forall (Ξ : 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 `α΅₯βα΅£ f2forall (Ξ : 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 `α΅₯βα΅£ f2forall (Ξ : 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 `α΅₯βα΅£ f2forall (Ξ : 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 `α΅₯βα΅£ f2forall (Ξ : 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 `α΅₯βα΅£ f2forall (Ξ : 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 `α΅₯βα΅£ f2forall (Ξ : 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 `α΅₯βα΅£ f2forall (Ξ : 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 `α΅₯βα΅£ f2forall (Ξ : 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 `α΅₯βα΅£ f2forall (Ξ : 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 `α΅₯βα΅£ f2forall (Ξ : 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 `α΅₯βα΅£ f2forall (Ξ : 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 `α΅₯βα΅£ f2forall (Ξ : 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 `α΅₯βα΅£ f2forall (Ξ : 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 `α΅₯βα΅£ f2forall (Ξ : 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 `α΅₯βα΅£ f2forall (Ξ : 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 `α΅₯βα΅£ f2forall (Ξ : 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 β‘β f2s ββα΅£ 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 β‘β f2t ββα΅£ 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 β‘β f2t ββα΅£ r_shift1 f1 = t ββα΅£ r_shift1 f2Ξ: t_ctx
A: ty
h: Ξ β A
Ξ: t_ctx
f1, f2: Ξ β Ξ
H: f1 β‘β f2f1 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 β‘β f2s ββα΅£ 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 β‘β f2s ββα΅£ 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 β‘β f2s1 ββα΅£ 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 β‘β f2s2 ββα΅£ 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 β‘β f2s1 ββα΅£ 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 β‘β f2s2 ββα΅£ 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 β‘β f2s ββα΅£ 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 β‘β f2s ββα΅£ 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 β‘β f2s ββα΅£ 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 β‘β f2s ββα΅£ r_shift1 f1 = s ββα΅£ r_shift1 f2all: first [ apply r_shift1_eq | apply r_shift2_eq ]; auto. Qed.Ξ: 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 β‘β f2r_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 β‘β f2r_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 β‘β f2r_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 β‘β f2r_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 β‘β f2r_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 β‘β f2r_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 β‘β f2r_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 β‘β f2r_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 β‘β f2r_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 β‘β f2r_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 β‘β f2r_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 β‘β f2r_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 β‘β f2r_shift1 f1 β‘β r_shift1 f2intros f1 f2 H1; now apply (term_ind_mut _ _ _ ren_proper_prf). Qed.Ξ: t_ctx
a: ty
t: term Ξ a
Ξ: t_ctxProper (asgn_eq Ξ Ξ ==> eq) (t_rename Ξ a t Ξ)intros f1 f2 H1; now apply (whn_ind_mut _ _ _ ren_proper_prf). Qed.Ξ: t_ctx
a: ty
v: whn Ξ a
Ξ: t_ctxProper (asgn_eq Ξ Ξ ==> eq) (w_rename Ξ a v Ξ)intros f1 f2 H1; now apply (state_ind_mut _ _ _ ren_proper_prf). Qed.Ξ: t_ctx
s: state Ξ
Ξ: t_ctxProper (asgn_eq Ξ Ξ ==> eq) (s_rename Ξ s Ξ)Ξ: t_ctx
a: ty
v: val Ξ a
Ξ: t_ctxProper (asgn_eq Ξ Ξ ==> eq) (v_rename Ξ a v Ξ)Ξ: t_ctx
p: pre_ty pos
v: val Ξ `+ p
Ξ: t_ctxProper (asgn_eq Ξ Ξ ==> eq) (v_rename Ξ `+ p v Ξ)Ξ: t_ctx
p: pre_ty neg
v: val Ξ `+ p
Ξ: t_ctxProper (asgn_eq Ξ Ξ ==> eq) (v_rename Ξ `+ p v Ξ)Ξ: t_ctx
p: pre_ty pos
v: val Ξ `- p
Ξ: t_ctxProper (asgn_eq Ξ Ξ ==> eq) (v_rename Ξ `- p v Ξ)Ξ: t_ctx
p: pre_ty neg
v: val Ξ `- p
Ξ: t_ctxProper (asgn_eq Ξ Ξ ==> eq) (v_rename Ξ `- p v Ξ)Ξ: t_ctx
p: pre_ty neg
v: val Ξ `+ p
Ξ: t_ctxProper (asgn_eq Ξ Ξ ==> eq) (v_rename Ξ `+ p v Ξ)Ξ: t_ctx
p: pre_ty pos
v: val Ξ `- p
Ξ: t_ctxProper (asgn_eq Ξ Ξ ==> eq) (v_rename Ξ `- p v Ξ)Ξ: t_ctx
p: pre_ty neg
v: val Ξ `- p
Ξ: t_ctxProper (asgn_eq Ξ Ξ ==> eq) (v_rename Ξ `- p v Ξ)Ξ: t_ctx
p: pre_ty pos
v: val Ξ `- p
Ξ: t_ctxProper (asgn_eq Ξ Ξ ==> eq) (v_rename Ξ `- p v Ξ)Ξ: t_ctx
p: pre_ty neg
v: val Ξ `- p
Ξ: t_ctxProper (asgn_eq Ξ Ξ ==> eq) (v_rename Ξ `- p v Ξ)now apply w_ren_eq. Qed.Ξ: t_ctx
p: pre_ty neg
v: val Ξ `- p
Ξ: t_ctxProper (asgn_eq Ξ Ξ ==> eq) (v_rename Ξ `- p v Ξ)intros r1 r2 H1 a1 a2 H2 ? i; cbn; now rewrite H1, (v_ren_eq _ _ H2). Qed.Ξ1, Ξ2, Ξ3: t_ctxProper (asgn_eq Ξ1 Ξ2 ==> asgn_eq Ξ2 Ξ3 ==> asgn_eq Ξ1 Ξ3) a_renΞ, Ξ: t_ctx
A: tyProper (asgn_eq Ξ Ξ ==> asgn_eq (Ξ βΆβ A) (Ξ βΆβ A)) (a_shift1 (y:=A))dependent elimination h; auto; cbn; now rewrite H. Qed.Ξ, Ξ: t_ctx
A: ty
x, y: Ξ =[ val ]> Ξ
H: x β‘β y
a: ty
h: Ξ βΆβ A β aa_shift1 x a h = a_shift1 y a hΞ, Ξ: t_ctx
A, B: tyProper (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 β aa_shift2 x a v = a_shift2 y a vcbn; 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) .Ξ1: ctx ty
Ξ: t_ctx
y1, y0: ty
x, y: Ξ1 =[ val ]> Ξ
H: x β‘β y
a: ty
v: Ctx.var a Ξ1a_shift2 x a (pop (pop v)) = a_shift2 y a (pop (pop v))syn_ind_args t_ren_ren_P w_ren_ren_P s_ren_ren_Pforall (Ξ : 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 ZerLforall Ξ : t_ctx, w_ren_ren_P Ξ `+ β€ TopRforall Ξ : t_ctx, w_ren_ren_P Ξ `+ 1 OneRforall (Ξ : 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 Ξ `- β₯ BotLforall (Ξ : 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)all: first [ rewrite r_shift1_comp | rewrite r_shift2_comp ]; eauto. Qed.Ξ: 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)now apply (term_ind_mut _ _ _ ren_ren_prf). 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 (whn_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 (state_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)Ξ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)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.Ξ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)syn_ind_args t_ren_id_l_P w_ren_id_l_P s_ren_id_l_Pforall (Ξ : 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 ZerLforall Ξ : t_ctx, w_ren_id_l_P Ξ `+ β€ TopRforall Ξ : t_ctx, w_ren_id_l_P Ξ `+ 1 OneRforall (Ξ : 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 Ξ `- β₯ BotLforall (Ξ : 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 sforall (Ξ : t_ctx) (A : pre_ty pos) (t : term (Ξ βΆβ `- A) `- A), t ββα΅£ r_id = t -> RecL t ββα΅£ r_id = RecL tforall (Ξ : t_ctx) (A : pre_ty neg) (t : term (Ξ βΆβ `+ A) `+ A), t ββα΅£ r_id = t -> RecR t ββα΅£ r_id = RecR tforall (Ξ : t_ctx) (A : ty) (w : whn Ξ A), w `α΅₯βα΅£ r_id = w -> Whn w ββα΅£ r_id = Whn wforall (Ξ : t_ctx) (A : ty) (h : Ξ β A), Var h `α΅₯βα΅£ r_id = Var hforall Ξ : t_ctx, ZerL `α΅₯βα΅£ r_id = ZerLforall Ξ : t_ctx, TopR `α΅₯βα΅£ r_id = TopRforall Ξ : t_ctx, OneR `α΅₯βα΅£ r_id = OneRforall (Ξ : t_ctx) (s : state Ξ), s ββα΅£ r_id = s -> OneL s `α΅₯βα΅£ r_id = OneL sforall (Ξ : t_ctx) (s : state Ξ), s ββα΅£ r_id = s -> BotR s `α΅₯βα΅£ r_id = BotR sforall Ξ : t_ctx, BotL `α΅₯βα΅£ r_id = BotLforall (Ξ : 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 w2forall (Ξ : t_ctx) (A B : pre_ty pos) (s : state (Ξ βΆβ `+ A βΆβ `+ B)), s ββα΅£ r_id = s -> TenL s `α΅₯βα΅£ r_id = TenL sforall (Ξ : t_ctx) (A B : pre_ty neg) (s : state (Ξ βΆβ `- A βΆβ `- B)), s ββα΅£ r_id = s -> ParR s `α΅₯βα΅£ r_id = ParR sforall (Ξ : 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 w2forall (Ξ : t_ctx) (A B : pre_ty pos) (w : whn Ξ `+ A), w `α΅₯βα΅£ r_id = w -> OrR1 w `α΅₯βα΅£ r_id = OrR1 wforall (Ξ : t_ctx) (A B : pre_ty pos) (w : whn Ξ `+ B), w `α΅₯βα΅£ r_id = w -> OrR2 w `α΅₯βα΅£ r_id = OrR2 wforall (Ξ : 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 s2forall (Ξ : 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 s2forall (Ξ : t_ctx) (A B : pre_ty neg) (w : whn Ξ `- A), w `α΅₯βα΅£ r_id = w -> AndL1 w `α΅₯βα΅£ r_id = AndL1 wforall (Ξ : t_ctx) (A B : pre_ty neg) (w : whn Ξ `- B), w `α΅₯βα΅£ r_id = w -> AndL2 w `α΅₯βα΅£ r_id = AndL2 wforall (Ξ : t_ctx) (A : pre_ty neg) (t : term Ξ `+ A), t ββα΅£ r_id = t -> ShiftPR t `α΅₯βα΅£ r_id = ShiftPR tforall (Ξ : t_ctx) (A : pre_ty neg) (s : state (Ξ βΆβ `+ A)), s ββα΅£ r_id = s -> ShiftPL s `α΅₯βα΅£ r_id = ShiftPL sforall (Ξ : t_ctx) (A : pre_ty pos) (s : state (Ξ βΆβ `- A)), s ββα΅£ r_id = s -> ShiftNR s `α΅₯βα΅£ r_id = ShiftNR sforall (Ξ : t_ctx) (A : pre_ty pos) (t : term Ξ `- A), t ββα΅£ r_id = t -> ShiftNL t `α΅₯βα΅£ r_id = ShiftNL tforall (Ξ : t_ctx) (A : pre_ty neg) (w : whn Ξ `- A), w `α΅₯βα΅£ r_id = w -> NegPR w `α΅₯βα΅£ r_id = NegPR wforall (Ξ : t_ctx) (A : pre_ty neg) (s : state (Ξ βΆβ `- A)), s ββα΅£ r_id = s -> NegPL s `α΅₯βα΅£ r_id = NegPL sforall (Ξ : t_ctx) (A : pre_ty pos) (s : state (Ξ βΆβ `+ A)), s ββα΅£ r_id = s -> NegNR s `α΅₯βα΅£ r_id = NegNR sforall (Ξ : t_ctx) (A : pre_ty pos) (w : whn Ξ `+ A), w `α΅₯βα΅£ r_id = w -> NegNL w `α΅₯βα΅£ r_id = NegNL wforall (Ξ : 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 t2all: first [ rewrite r_shift1_id | rewrite r_shift2_id ]; eauto. Qed.Ξ: t_ctx
A: ty
s: state (Ξ βΆβ A β )
H: s ββα΅£ r_id = ss ββα΅£ r_shift1 r_id = sΞ: t_ctx
A: pre_ty pos
t: term (Ξ βΆβ `- A) `- A
H: t ββα΅£ r_id = tt ββα΅£ r_shift1 r_id = tΞ: t_ctx
A: pre_ty neg
t: term (Ξ βΆβ `+ A) `+ A
H: t ββα΅£ r_id = tt ββα΅£ r_shift1 r_id = tΞ: t_ctx
A, B: pre_ty pos
s: state (Ξ βΆβ `+ A βΆβ `+ B)
H: s ββα΅£ r_id = ss ββα΅£ r_shift2 r_id = sΞ: t_ctx
A, B: pre_ty neg
s: state (Ξ βΆβ `- A βΆβ `- B)
H: s ββα΅£ r_id = ss ββα΅£ 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 = s2s1 ββα΅£ 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 = s2s2 ββα΅£ 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 = s2s1 ββα΅£ 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 = s2s2 ββα΅£ r_shift1 r_id = s2Ξ: t_ctx
A: pre_ty neg
s: state (Ξ βΆβ `+ A)
H: s ββα΅£ r_id = ss ββα΅£ r_shift1 r_id = sΞ: t_ctx
A: pre_ty pos
s: state (Ξ βΆβ `- A)
H: s ββα΅£ r_id = ss ββα΅£ r_shift1 r_id = sΞ: t_ctx
A: pre_ty neg
s: state (Ξ βΆβ `- A)
H: s ββα΅£ r_id = ss ββα΅£ r_shift1 r_id = sΞ: t_ctx
A: pre_ty pos
s: state (Ξ βΆβ `+ A)
H: s ββα΅£ r_id = ss ββα΅£ r_shift1 r_id = snow apply (term_ind_mut _ _ _ ren_id_l_prf). Qed.Ξ: t_ctx
A: ty
t: term Ξ At ββα΅£ r_id = tnow apply (whn_ind_mut _ _ _ ren_id_l_prf). Qed.Ξ: t_ctx
A: ty
v: whn Ξ Av `α΅₯βα΅£ r_id = vnow apply (state_ind_mut _ _ _ ren_id_l_prf). Qed.Ξ: t_ctx
s: state Ξs ββα΅£ r_id = sΞ: t_ctx
A: ty
v: val Ξ Av α΅₯βα΅£ r_id = vΞ: t_ctx
p: pre_ty pos
v: val Ξ `+ pv α΅₯βα΅£ r_id = vΞ: t_ctx
p: pre_ty neg
v: val Ξ `+ pv α΅₯βα΅£ r_id = vΞ: t_ctx
p: pre_ty pos
v: val Ξ `- pv α΅₯βα΅£ r_id = vΞ: t_ctx
p: pre_ty neg
v: val Ξ `- pv α΅₯βα΅£ r_id = vΞ: t_ctx
p: pre_ty neg
v: val Ξ `+ pv α΅₯βα΅£ r_id = vΞ: t_ctx
p: pre_ty pos
v: val Ξ `- pv α΅₯βα΅£ r_id = vΞ: t_ctx
p: pre_ty neg
v: val Ξ `- pv α΅₯βα΅£ r_id = vΞ: t_ctx
p: pre_ty pos
v: val Ξ `- pv α΅₯βα΅£ r_id = vΞ: t_ctx
p: pre_ty neg
v: val Ξ `- pv α΅₯βα΅£ r_id = vnow apply w_ren_id_l. Qed.Ξ: t_ctx
p: pre_ty neg
v: val Ξ `- pv α΅₯βα΅£ r_id = vnow destruct A as [ [] | [] ]. Qed.Ξ, Ξ: ctx ty
f: Ξ β Ξ
A: ty
i: Ξ β Avar i α΅₯βα΅£ f = var (f A i)intros [ [] | [] ] i; dependent elimination i; auto. Qed.Ξ: t_ctx
A: tya_shift1 var β‘β varΞ: t_ctx
A, B: tya_shift2 var β‘β varΞ: t_ctx
A, B, a: ty
v: Ξ βΆβ A βΆβ B β aa_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 vnow destruct a as [[]|[]]. Qed. Arguments var : simpl never.Ξ1: ctx ty
y0, y, a: ty
v: Ctx.var a Ξ1v_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))Ξ1, Ξ2, Ξ3: t_ctx
y: ty
f1: Ξ1 =[ val ]> Ξ2
f2: Ξ2 β Ξ3a_shift1 (f1 βα΅£ f2) β‘β a_shift1 f1 βα΅£ r_shift1 f2Ξ: ctx ty
Ξ2, Ξ3: t_ctx
a: ty
f1: Ξ =[ val ]> Ξ2
f2: Ξ2 β Ξ3var 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 Ξ0v_shift1 a (f1 a v α΅₯βα΅£ f2) = v_shift1 a (f1 a v) α΅₯βα΅£ r_shift1 f2now rewrite v_ren_id_r.Ξ: ctx ty
Ξ2, Ξ3: t_ctx
a: ty
f1: Ξ =[ val ]> Ξ2
f2: Ξ2 β Ξ3var top = var top α΅₯βα΅£ r_shift1 f2now unfold v_shift1; rewrite 2 v_ren_ren. Qed.Ξ0: ctx ty
Ξ2, Ξ3: t_ctx
y0: ty
f1: Ξ0 =[ val ]> Ξ2
f2: Ξ2 β Ξ3
a: ty
v: Ctx.var a Ξ0v_shift1 a (f1 a v α΅₯βα΅£ f2) = v_shift1 a (f1 a v) α΅₯βα΅£ r_shift1 f2Ξ1, Ξ2, Ξ3: t_ctx
y, z: ty
f1: Ξ1 =[ val ]> Ξ2
f2: Ξ2 β Ξ3a_shift2 (f1 βα΅£ f2) β‘β a_shift2 f1 βα΅£ r_shift2 f2unfold v_shift2; now rewrite 2 v_ren_ren. Qed.Ξ0: ctx ty
Ξ2, Ξ3: t_ctx
y1, y0: ty
f1: Ξ0 =[ val ]> Ξ2
f2: Ξ2 β Ξ3
a: ty
v: Ctx.var a Ξ0v_shift2 a (f1 a v α΅₯βα΅£ f2) = v_shift2 a (f1 a v) α΅₯βα΅£ r_shift2 f2intros ? i; dependent elimination i; auto. Qed.Ξ1, Ξ2: ctx ty
Ξ3: t_ctx
y: ty
f1: Ξ1 β Ξ2
f2: Ξ2 =[ val ]> Ξ3a_shift1 (f1 α΅£β f2) β‘β r_shift1 f1 α΅£β a_shift1 f2intros ? 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 .Ξ1, Ξ2: ctx ty
Ξ3: t_ctx
y, z: ty
f1: Ξ1 β Ξ2
f2: Ξ2 =[ val ]> Ξ3a_shift2 (f1 α΅£β f2) β‘β r_shift2 f1 α΅£β a_shift2 f2syn_ind_args t_sub_proper_P w_sub_proper_P s_sub_proper_Pforall (Ξ : 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 ZerLforall Ξ : t_ctx, w_sub_proper_P Ξ `+ β€ TopRforall Ξ : t_ctx, w_sub_proper_P Ξ `+ 1 OneRforall (Ξ : 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 Ξ `- β₯ BotLforall (Ξ : 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 `ββ f2forall (Ξ : 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 `ββ f2forall (Ξ : 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 `ββ f2forall (Ξ : 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 `ββ f2forall (Ξ : t_ctx) (A : ty) (h : Ξ β A) (Ξ : t_ctx) (f1 f2 : Ξ =[ val ]> Ξ), f1 β‘β f2 -> Var h `α΅₯β f1 = Var h `α΅₯β f2forall (Ξ Ξ : t_ctx) (f1 f2 : Ξ =[ val ]> Ξ), f1 β‘β f2 -> ZerL `α΅₯β f1 = ZerL `α΅₯β f2forall (Ξ Ξ : t_ctx) (f1 f2 : Ξ =[ val ]> Ξ), f1 β‘β f2 -> TopR `α΅₯β f1 = TopR `α΅₯β f2forall (Ξ Ξ : t_ctx) (f1 f2 : Ξ =[ val ]> Ξ), f1 β‘β f2 -> OneR `α΅₯β f1 = OneR `α΅₯β f2forall (Ξ : 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 `α΅₯β f2forall (Ξ : 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 `α΅₯β f2forall (Ξ Ξ : t_ctx) (f1 f2 : Ξ =[ val ]> Ξ), f1 β‘β f2 -> BotL `α΅₯β f1 = BotL `α΅₯β f2forall (Ξ : 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 `α΅₯β f2forall (Ξ : 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 `α΅₯β f2forall (Ξ : 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 `α΅₯β f2forall (Ξ : 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 `α΅₯β f2forall (Ξ : 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 `α΅₯β f2forall (Ξ : 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 `α΅₯β f2forall (Ξ : 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 `α΅₯β f2forall (Ξ : 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 `α΅₯β f2forall (Ξ : 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 `α΅₯β f2forall (Ξ : 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 `α΅₯β f2forall (Ξ : 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 `α΅₯β f2forall (Ξ : 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 `α΅₯β f2forall (Ξ : 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 `α΅₯β f2forall (Ξ : 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 `α΅₯β f2forall (Ξ : 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 `α΅₯β f2forall (Ξ : 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 `α΅₯β f2forall (Ξ : 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 `α΅₯β f2forall (Ξ : 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 `α΅₯β f2forall (Ξ : 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 β‘β f2Mu (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 β‘β f2RecL (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 β‘β f2RecR (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 β‘β f2w `α΅₯β f1 = w `α΅₯β f2Ξ: t_ctx
A: ty
h: Ξ β A
Ξ: t_ctx
f1, f2: Ξ =[ val ]> Ξ
H: f1 β‘β f2f1 A h = f2 A hΞ, Ξ: t_ctx
f1, f2: Ξ =[ val ]> Ξ
H: f1 β‘β f2Whn ZerL = Whn ZerLΞ, Ξ: t_ctx
f1, f2: Ξ =[ val ]> Ξ
H: f1 β‘β f2Whn TopR = Whn TopRΞ, Ξ: t_ctx
f1, f2: Ξ =[ val ]> Ξ
H: f1 β‘β f2OneR = 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 β‘β f2Whn (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 β‘β f2Whn (BotR (s_subst Ξ s Ξ f1)) = Whn (BotR (s_subst Ξ s Ξ f2))Ξ, Ξ: t_ctx
f1, f2: Ξ =[ val ]> Ξ
H: f1 β‘β f2BotL = 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 β‘β f2TenR (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 β‘β f2Whn (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 β‘β f2Whn (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 β‘β f2ParL (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 β‘β f2OrR1 (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 β‘β f2OrR2 (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 β‘β f2Whn (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 β‘β f2Whn (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 β‘β f2AndL1 (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 β‘β f2AndL2 (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 β‘β f2ShiftPR (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 β‘β f2Whn (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 β‘β f2Whn (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 β‘β f2ShiftNL (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 β‘β f2NegPR (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 β‘β f2Whn (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 β‘β f2Whn (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 β‘β f2NegNL (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 β‘β f2Cut 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 β‘β f2s_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 β‘β f2t `ββ 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 β‘β f2t `ββ 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 β‘β f2w `α΅₯β 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 β‘β f2s_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 β‘β f2s_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 β‘β f2w1 `α΅₯β 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 β‘β f2w2 `α΅₯β 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 β‘β f2s_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 β‘β f2s_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 β‘β f2w1 `α΅₯β 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 β‘β f2w2 `α΅₯β 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 β‘β f2w `α΅₯β 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 β‘β f2w `α΅₯β 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 β‘β f2s_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 β‘β f2s_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 β‘β f2s_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 β‘β f2s_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 β‘β f2w `α΅₯β 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 β‘β f2w `α΅₯β 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 β‘β f2t `ββ 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 β‘β f2s_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 β‘β f2s_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 β‘β f2t `ββ 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 β‘β f2w `α΅₯β 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 β‘β f2s_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 β‘β f2s_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 β‘β f2w `α΅₯β 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 β‘β f2t1 `ββ 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 β‘β f2t2 `ββ f1 = t2 `ββ f2all: first [ apply a_shift1_eq | apply a_shift2_eq ]; auto. Qed.Ξ: 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 β‘β f2a_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 β‘β f2a_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 β‘β f2a_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 β‘β f2a_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 β‘β f2a_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 β‘β f2a_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 β‘β f2a_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 β‘β f2a_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 β‘β f2a_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 β‘β f2a_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 β‘β f2a_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 β‘β f2a_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 β‘β f2a_shift1 f1 β‘β a_shift1 f2intros f1 f2 H1; now apply (term_ind_mut _ _ _ sub_proper_prf). Qed.Ξ: t_ctx
a: ty
t: term Ξ a
Ξ: t_ctxProper (asgn_eq Ξ Ξ ==> eq) (t_subst Ξ a t Ξ)intros f1 f2 H1; now apply (whn_ind_mut _ _ _ sub_proper_prf). Qed.Ξ: t_ctx
a: ty
v: whn Ξ a
Ξ: t_ctxProper (asgn_eq Ξ Ξ ==> eq) (w_subst Ξ a v Ξ)intros f1 f2 H1; now apply (state_ind_mut _ _ _ sub_proper_prf). Qed.Ξ: t_ctx
s: state Ξ
Ξ: t_ctxProper (asgn_eq Ξ Ξ ==> eq) (s_subst Ξ s Ξ)Ξ: t_ctx
a: ty
v: val Ξ a
Ξ: t_ctxProper (asgn_eq Ξ Ξ ==> eq) (v_subst Ξ a v Ξ)Ξ: t_ctx
p: pre_ty pos
v: val Ξ `+ p
Ξ: t_ctxProper (asgn_eq Ξ Ξ ==> eq) (v_subst Ξ `+ p v Ξ)Ξ: t_ctx
p: pre_ty neg
v: val Ξ `+ p
Ξ: t_ctxProper (asgn_eq Ξ Ξ ==> eq) (v_subst Ξ `+ p v Ξ)Ξ: t_ctx
p: pre_ty pos
v: val Ξ `- p
Ξ: t_ctxProper (asgn_eq Ξ Ξ ==> eq) (v_subst Ξ `- p v Ξ)Ξ: t_ctx
p: pre_ty neg
v: val Ξ `- p
Ξ: t_ctxProper (asgn_eq Ξ Ξ ==> eq) (v_subst Ξ `- p v Ξ)now apply w_sub_eq.Ξ: t_ctx
p: pre_ty pos
v: val Ξ `+ p
Ξ: t_ctxProper (asgn_eq Ξ Ξ ==> eq) (v_subst Ξ `+ p v Ξ)now apply t_sub_eq.Ξ: t_ctx
p: pre_ty neg
v: val Ξ `+ p
Ξ: t_ctxProper (asgn_eq Ξ Ξ ==> eq) (v_subst Ξ `+ p v Ξ)now apply t_sub_eq.Ξ: t_ctx
p: pre_ty pos
v: val Ξ `- p
Ξ: t_ctxProper (asgn_eq Ξ Ξ ==> eq) (v_subst Ξ `- p v Ξ)now apply w_sub_eq. Qed.Ξ: t_ctx
p: pre_ty neg
v: val Ξ `- p
Ξ: t_ctxProper (asgn_eq Ξ Ξ ==> eq) (v_subst Ξ `- p v Ξ)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) .Ξ1, Ξ2, Ξ3: ctx tyProper (asgn_eq Ξ1 Ξ2 ==> asgn_eq Ξ2 Ξ3 ==> asgn_eq Ξ1 Ξ3) a_compsyn_ind_args t_ren_sub_P w_ren_sub_P s_ren_sub_Pforall (Ξ : 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 ZerLforall Ξ : t_ctx, w_ren_sub_P Ξ `+ β€ TopRforall Ξ : t_ctx, w_ren_sub_P Ξ `+ 1 OneRforall (Ξ : 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 Ξ `- β₯ BotLforall (Ξ : 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 βα΅£ f2forall (Ξ : 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 βα΅£ f2forall (Ξ : 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 βα΅£ f2forall (Ξ : 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 βα΅£ f2forall (Ξ : t_ctx) (A : ty) (h : Ξ β A) (Ξ2 Ξ3 : t_ctx) (f1 : Ξ =[ val ]> Ξ2) (f2 : Ξ2 β Ξ3), (Var h `α΅₯β f1) α΅₯βα΅£ f2 = Var h `α΅₯β f1 βα΅£ f2forall (Ξ Ξ2 Ξ3 : t_ctx) (f1 : Ξ =[ val ]> Ξ2) (f2 : Ξ2 β Ξ3), (ZerL `α΅₯β f1) α΅₯βα΅£ f2 = ZerL `α΅₯β f1 βα΅£ f2forall (Ξ Ξ2 Ξ3 : t_ctx) (f1 : Ξ =[ val ]> Ξ2) (f2 : Ξ2 β Ξ3), (TopR `α΅₯β f1) α΅₯βα΅£ f2 = TopR `α΅₯β f1 βα΅£ f2forall (Ξ Ξ2 Ξ3 : t_ctx) (f1 : Ξ =[ val ]> Ξ2) (f2 : Ξ2 β Ξ3), (OneR `α΅₯β f1) α΅₯βα΅£ f2 = OneR `α΅₯β f1 βα΅£ f2forall (Ξ : 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 βα΅£ f2forall (Ξ : 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 βα΅£ f2forall (Ξ Ξ2 Ξ3 : t_ctx) (f1 : Ξ =[ val ]> Ξ2) (f2 : Ξ2 β Ξ3), (BotL `α΅₯β f1) α΅₯βα΅£ f2 = BotL `α΅₯β f1 βα΅£ f2forall (Ξ : 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 βα΅£ f2forall (Ξ : 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 βα΅£ f2forall (Ξ : 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 βα΅£ f2forall (Ξ : 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 βα΅£ f2forall (Ξ : 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 βα΅£ f2forall (Ξ : 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 βα΅£ f2forall (Ξ : 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 βα΅£ f2forall (Ξ : 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 βα΅£ f2forall (Ξ : 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 βα΅£ f2forall (Ξ : 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 βα΅£ f2forall (Ξ : 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 βα΅£ f2forall (Ξ : 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 βα΅£ f2forall (Ξ : 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 βα΅£ f2forall (Ξ : 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 βα΅£ f2forall (Ξ : 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 βα΅£ f2forall (Ξ : 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 βα΅£ f2forall (Ξ : 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 βα΅£ f2forall (Ξ : 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 βα΅£ f2forall (Ξ : 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 β Ξ3Mu (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 β Ξ3RecL ((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 β Ξ3RecR ((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 β Ξ3f1 A h α΅₯βα΅£ f2 = f1 A h α΅₯βα΅£ f2Ξ, Ξ2, Ξ3: t_ctx
f1: Ξ =[ val ]> Ξ2
f2: Ξ2 β Ξ3Whn ZerL = Whn ZerLΞ, Ξ2, Ξ3: t_ctx
f1: Ξ =[ val ]> Ξ2
f2: Ξ2 β Ξ3Whn TopR = Whn TopRΞ, Ξ2, Ξ3: t_ctx
f1: Ξ =[ val ]> Ξ2
f2: Ξ2 β Ξ3OneR = 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 β Ξ3Whn (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 β Ξ3Whn (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 β Ξ3BotL = 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 β Ξ3TenR ((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 β Ξ3Whn (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 β Ξ3Whn (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 β Ξ3ParL ((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 β Ξ3OrR1 ((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 β Ξ3OrR2 ((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 β Ξ3Whn (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 β Ξ3Whn (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 β Ξ3AndL1 ((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 β Ξ3AndL2 ((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 β Ξ3ShiftPR ((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 β Ξ3Whn (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 β Ξ3Whn (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 β Ξ3ShiftNL ((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 β Ξ3NegPR ((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 β Ξ3Whn (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 β Ξ3Whn (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 β Ξ3NegNL ((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 β Ξ3Cut 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 β Ξ3Mu (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 β Ξ3RecL ((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 β Ξ3RecR ((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 β Ξ3Whn ((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 β Ξ3Whn ((w `α΅₯β f1) `α΅₯βα΅£ f2) = Whn (w `α΅₯β f1 βα΅£ f2)Ξ: t_ctx
A: ty
h: Ξ β A
Ξ2, Ξ3: t_ctx
f1: Ξ =[ val ]> Ξ2
f2: Ξ2 β Ξ3f1 A h α΅₯βα΅£ f2 = f1 A h α΅₯βα΅£ f2Ξ, Ξ2, Ξ3: t_ctx
f1: Ξ =[ val ]> Ξ2
f2: Ξ2 β Ξ3Whn ZerL = Whn ZerLΞ, Ξ2, Ξ3: t_ctx
f1: Ξ =[ val ]> Ξ2
f2: Ξ2 β Ξ3Whn TopR = Whn TopRΞ, Ξ2, Ξ3: t_ctx
f1: Ξ =[ val ]> Ξ2
f2: Ξ2 β Ξ3OneR = 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 β Ξ3Whn (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 β Ξ3Whn (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 β Ξ3BotL = 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 β Ξ3TenR ((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 β Ξ3Whn (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 β Ξ3Whn (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 β Ξ3ParL ((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 β Ξ3OrR1 ((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 β Ξ3OrR2 ((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 β Ξ3Whn (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 β Ξ3Whn (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 β Ξ3AndL1 ((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 β Ξ3AndL2 ((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 β Ξ3ShiftPR ((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 β Ξ3Whn (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 β Ξ3Whn (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 β Ξ3ShiftNL ((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 β Ξ3NegPR ((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 β Ξ3Whn (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 β Ξ3Whn (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 β Ξ3NegNL ((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 β Ξ3Cut p ((t1 `ββ f1) ββα΅£ f2) ((t2 `ββ f1) ββα΅£ f2) = Cut p (t1 `ββ f1 βα΅£ f2) (t2 `ββ f1 βα΅£ f2)all: first [ rewrite a_shift1_ren_r | rewrite a_shift2_ren_r ]; auto. Qed.Ξ: 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 β Ξ3s_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 β Ξ3s_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 β Ξ3s_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 β Ξ3s_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 β Ξ3s_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 β Ξ3s_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 β Ξ3s_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 β Ξ3s_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 β Ξ3s_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 β Ξ3s_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 β Ξ3s_subst (Ξ βΆβ `+ A) s (Ξ2 βΆβ `+ A) (a_shift1 f1) ββα΅£ r_shift1 f2 = s_subst (Ξ βΆβ `+ A) s (Ξ3 βΆβ `+ A) (a_shift1 (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
t: term Ξ1 A(t `ββ f1) ββα΅£ f2 = t `ββ f1 βα΅£ f2now apply (whn_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 βα΅£ f2now apply (state_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Ξ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 βα΅£ f2now apply w_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 βα΅£ f2now 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 βα΅£ f2now 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 βα΅£ f2now 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).Ξ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 βα΅£ f2syn_ind_args t_sub_ren_P w_sub_ren_P s_sub_ren_Pforall (Ξ : 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 ZerLforall Ξ : t_ctx, w_sub_ren_P Ξ `+ β€ TopRforall Ξ : t_ctx, w_sub_ren_P Ξ `+ 1 OneRforall (Ξ : 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 Ξ `- β₯ BotLforall (Ξ : 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 α΅£β f2forall (Ξ : 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 α΅£β f2forall (Ξ : 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 α΅£β f2forall (Ξ : 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 α΅£β f2forall (Ξ : t_ctx) (A : ty) (h : Ξ β A) (Ξ2 Ξ3 : t_ctx) (f1 : Ξ β Ξ2) (f2 : Ξ2 =[ val ]> Ξ3), Var h `α΅₯βα΅£ f1 `α΅₯β f2 = Var h `α΅₯β f1 α΅£β f2forall (Ξ Ξ2 Ξ3 : t_ctx) (f1 : Ξ β Ξ2) (f2 : Ξ2 =[ val ]> Ξ3), ZerL `α΅₯βα΅£ f1 `α΅₯β f2 = ZerL `α΅₯β f1 α΅£β f2forall (Ξ Ξ2 Ξ3 : t_ctx) (f1 : Ξ β Ξ2) (f2 : Ξ2 =[ val ]> Ξ3), TopR `α΅₯βα΅£ f1 `α΅₯β f2 = TopR `α΅₯β f1 α΅£β f2forall (Ξ Ξ2 Ξ3 : t_ctx) (f1 : Ξ β Ξ2) (f2 : Ξ2 =[ val ]> Ξ3), OneR `α΅₯βα΅£ f1 `α΅₯β f2 = OneR `α΅₯β f1 α΅£β f2forall (Ξ : 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 α΅£β f2forall (Ξ : 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 α΅£β f2forall (Ξ Ξ2 Ξ3 : t_ctx) (f1 : Ξ β Ξ2) (f2 : Ξ2 =[ val ]> Ξ3), BotL `α΅₯βα΅£ f1 `α΅₯β f2 = BotL `α΅₯β f1 α΅£β f2forall (Ξ : 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 α΅£β f2forall (Ξ : 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 α΅£β f2forall (Ξ : 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 α΅£β f2forall (Ξ : 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 α΅£β f2forall (Ξ : 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 α΅£β f2forall (Ξ : 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 α΅£β f2forall (Ξ : 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 α΅£β f2forall (Ξ : 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 α΅£β f2forall (Ξ : 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 α΅£β f2forall (Ξ : 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 α΅£β f2forall (Ξ : 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 α΅£β f2forall (Ξ : 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 α΅£β f2forall (Ξ : 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 α΅£β f2forall (Ξ : 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 α΅£β f2forall (Ξ : 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 α΅£β f2forall (Ξ : 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 α΅£β f2forall (Ξ : 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 α΅£β f2forall (Ξ : 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 α΅£β f2forall (Ξ : 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 ]> Ξ3Mu (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 ]> Ξ3RecL (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 ]> Ξ3RecR (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 ]> Ξ3w `α΅₯βα΅£ f1 `α΅₯β f2 = w `α΅₯β f1 α΅£β f2Ξ: t_ctx
A: ty
h: Ξ β A
Ξ2, Ξ3: t_ctx
f1: Ξ β Ξ2
f2: Ξ2 =[ val ]> Ξ3f2 A (f1 A h) = f2 A (f1 A h)Ξ, Ξ2, Ξ3: t_ctx
f1: Ξ β Ξ2
f2: Ξ2 =[ val ]> Ξ3Whn ZerL = Whn ZerLΞ, Ξ2, Ξ3: t_ctx
f1: Ξ β Ξ2
f2: Ξ2 =[ val ]> Ξ3Whn TopR = Whn TopRΞ, Ξ2, Ξ3: t_ctx
f1: Ξ β Ξ2
f2: Ξ2 =[ val ]> Ξ3OneR = 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 ]> Ξ3Whn (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 ]> Ξ3Whn (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 ]> Ξ3BotL = 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 ]> Ξ3TenR (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 ]> Ξ3Whn (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 ]> Ξ3Whn (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 ]> Ξ3ParL (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 ]> Ξ3OrR1 (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 ]> Ξ3OrR2 (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 ]> Ξ3Whn (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 ]> Ξ3Whn (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 ]> Ξ3AndL1 (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 ]> Ξ3AndL2 (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 ]> Ξ3ShiftPR (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 ]> Ξ3Whn (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 ]> Ξ3Whn (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 ]> Ξ3ShiftNL (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 ]> Ξ3NegPR (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 ]> Ξ3Whn (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 ]> Ξ3Whn (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 ]> Ξ3NegNL (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 ]> Ξ3Cut p (t1 ββα΅£ f1 `ββ f2) (t2 ββα΅£ f1 `ββ f2) = Cut p (t1 `ββ f1 α΅£β f2) (t2 `ββ f1 α΅£β f2)all: first [ rewrite a_shift1_ren_l | rewrite a_shift2_ren_l ]; auto. Qed.Ξ: 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 ]> Ξ3s_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 ]> Ξ3t ββα΅£ 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 ]> Ξ3t ββα΅£ 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 ]> Ξ3s_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 ]> Ξ3s_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 ]> Ξ3s_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 ]> Ξ3s_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 ]> Ξ3s_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 ]> Ξ3s_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 ]> Ξ3s_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 ]> Ξ3s_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 ]> Ξ3s_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 ]> Ξ3s_subst (Ξ2 βΆβ `+ A) (s ββα΅£ r_shift1 f1) (Ξ3 βΆβ `+ A) (a_shift1 f2) = s_subst (Ξ βΆβ `+ A) s (Ξ3 βΆβ `+ A) (a_shift1 (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
t: term Ξ1 At ββα΅£ f1 `ββ f2 = t `ββ f1 α΅£β f2now apply (whn_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 Av `α΅₯βα΅£ f1 `α΅₯β f2 = v `α΅₯β f1 α΅£β f2now apply (state_ind_mut _ _ _ sub_ren_prf). Qed.Ξ1, Ξ2: ctx ty
Ξ3: t_ctx
f1: Ξ1 β Ξ2
f2: Ξ2 =[ val ]> Ξ3
s: state Ξ1s ββα΅£ f1 ββ f2 = s ββ f1 α΅£β f2Ξ1, Ξ2: ctx ty
Ξ3: t_ctx
f1: Ξ1 β Ξ2
f2: Ξ2 =[ val ]> Ξ3
A: ty
v: val Ξ1 Av α΅₯βα΅£ 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 `+ pv α΅₯βα΅£ 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 `+ pv α΅₯βα΅£ 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 `- pv α΅₯βα΅£ 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 `- pv α΅₯βα΅£ f1 α΅₯β f2 = v α΅₯β f1 α΅£β f2now apply w_sub_ren.Ξ1, Ξ2: ctx ty
Ξ3: t_ctx
f1: Ξ1 β Ξ2
f2: Ξ2 =[ val ]> Ξ3
p: pre_ty pos
v: val Ξ1 `+ pv α΅₯βα΅£ f1 α΅₯β f2 = v α΅₯β f1 α΅£β f2now 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 `+ pv α΅₯βα΅£ f1 α΅₯β f2 = v α΅₯β f1 α΅£β f2now 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 `- pv α΅₯βα΅£ f1 α΅₯β f2 = v α΅₯β f1 α΅£β f2now apply w_sub_ren. Qed.Ξ1, Ξ2: ctx ty
Ξ3: t_ctx
f1: Ξ1 β Ξ2
f2: Ξ2 =[ val ]> Ξ3
p: pre_ty neg
v: val Ξ1 `- pv α΅₯βα΅£ f1 α΅₯β f2 = v α΅₯β f1 α΅£β f2destruct A as [ [] | [] ]; auto. Qed.Ξ, Ξ: t_ctx
f: Ξ =[ val ]> Ξ
A: ty
i: Ξ β Avar i α΅₯β f = f A iΞ1, Ξ2, Ξ3: t_ctx
A: ty
f1: Ξ1 =[ val ]> Ξ2
f2: Ξ2 =[ val ]> Ξ3a_shift1 (f1 β f2) β‘β a_shift1 f1 β a_shift1 f2Ξ: ctx ty
Ξ2, Ξ3: t_ctx
x: ty
f1: Ξ =[ val ]> Ξ2
f2: Ξ2 =[ val ]> Ξ3var 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 Ξ0v_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 rewrite v_sub_id_r.Ξ: ctx ty
Ξ2, Ξ3: t_ctx
x: ty
f1: Ξ =[ val ]> Ξ2
f2: Ξ2 =[ val ]> Ξ3var top = v_subst (Ξ2 βΆβ x) x (var top) (Ξ3 βΆβ x) (a_shift1 f2)now unfold v_shift1; rewrite v_ren_sub, v_sub_ren. Qed.Ξ0: ctx ty
Ξ2, Ξ3: t_ctx
y: ty
f1: Ξ0 =[ val ]> Ξ2
f2: Ξ2 =[ val ]> Ξ3
x: ty
v: Ctx.var x Ξ0v_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)Ξ1, Ξ2, Ξ3: t_ctx
A, B: ty
f1: Ξ1 =[ val ]> Ξ2
f2: Ξ2 =[ val ]> Ξ3a_shift2 (f1 β f2) β‘β a_shift2 f1 β a_shift2 f2now 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) .Ξ0: ctx ty
Ξ2, Ξ3: t_ctx
y0, y: ty
f1: Ξ0 =[ val ]> Ξ2
f2: Ξ2 =[ val ]> Ξ3
a: ty
v: Ctx.var a Ξ0v_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)syn_ind_args t_sub_sub_P w_sub_sub_P s_sub_sub_Pforall (Ξ : 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 ZerLforall Ξ : t_ctx, w_sub_sub_P Ξ `+ β€ TopRforall Ξ : t_ctx, w_sub_sub_P Ξ `+ 1 OneRforall (Ξ : 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 Ξ `- β₯ BotLforall (Ξ : 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 ]> Ξ3Mu (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 ]> Ξ3RecL ((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 ]> Ξ3RecR ((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 ]> Ξ3v_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 ]> Ξ3Whn ZerL = Whn ZerLΞ, Ξ2, Ξ3: t_ctx
f1: Ξ =[ val ]> Ξ2
f2: Ξ2 =[ val ]> Ξ3Whn TopR = Whn TopRΞ, Ξ2, Ξ3: t_ctx
f1: Ξ =[ val ]> Ξ2
f2: Ξ2 =[ val ]> Ξ3OneR = 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 ]> Ξ3Whn (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 ]> Ξ3Whn (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 ]> Ξ3BotL = 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 ]> Ξ3TenR ((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 ]> Ξ3Whn (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 ]> Ξ3Whn (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 ]> Ξ3ParL ((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 ]> Ξ3OrR1 ((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 ]> Ξ3OrR2 ((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 ]> Ξ3Whn (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 ]> Ξ3Whn (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 ]> Ξ3AndL1 ((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 ]> Ξ3AndL2 ((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 ]> Ξ3ShiftPR ((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 ]> Ξ3Whn (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 ]> Ξ3Whn (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 ]> Ξ3ShiftNL ((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 ]> Ξ3NegPR ((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 ]> Ξ3Whn (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 ]> Ξ3Whn (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 ]> Ξ3NegNL ((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 ]> Ξ3Cut 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 ]> Ξ3Mu (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 ]> Ξ3RecL ((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 ]> Ξ3RecR ((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 ]> Ξ3Whn ((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 ]> Ξ3Whn ((w `α΅₯β f1) `α΅₯β f2) = Whn (w `α΅₯β f1 β f2)Ξ: t_ctx
A: ty
h: Ξ β A
Ξ2, Ξ3: t_ctx
f1: Ξ =[ val ]> Ξ2
f2: Ξ2 =[ val ]> Ξ3v_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 ]> Ξ3Whn ZerL = Whn ZerLΞ, Ξ2, Ξ3: t_ctx
f1: Ξ =[ val ]> Ξ2
f2: Ξ2 =[ val ]> Ξ3Whn TopR = Whn TopRΞ, Ξ2, Ξ3: t_ctx
f1: Ξ =[ val ]> Ξ2
f2: Ξ2 =[ val ]> Ξ3OneR = 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 ]> Ξ3Whn (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 ]> Ξ3Whn (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 ]> Ξ3BotL = 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 ]> Ξ3TenR ((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 ]> Ξ3Whn (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 ]> Ξ3Whn (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 ]> Ξ3ParL ((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 ]> Ξ3OrR1 ((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 ]> Ξ3OrR2 ((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 ]> Ξ3Whn (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 ]> Ξ3Whn (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 ]> Ξ3AndL1 ((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 ]> Ξ3AndL2 ((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 ]> Ξ3ShiftPR ((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 ]> Ξ3Whn (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 ]> Ξ3Whn (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 ]> Ξ3ShiftNL ((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 ]> Ξ3NegPR ((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 ]> Ξ3Whn (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 ]> Ξ3Whn (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 ]> Ξ3NegNL ((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 ]> Ξ3Cut p ((t1 `ββ f1) `ββ f2) ((t2 `ββ f1) `ββ f2) = Cut p (t1 `ββ f1 β f2) (t2 `ββ f1 β f2)all: first [ rewrite a_shift1_comp | rewrite a_shift2_comp ]; auto. Qed.Ξ: 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 ]> Ξ3s_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 ]> Ξ3s_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 ]> Ξ3s_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 ]> Ξ3s_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 ]> Ξ3s_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 ]> Ξ3s_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 ]> Ξ3s_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 ]> Ξ3s_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 ]> Ξ3s_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 ]> Ξ3s_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 ]> Ξ3s_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))now apply (term_ind_mut _ _ _ sub_sub_prf). 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 β f2now apply (whn_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 β f2now apply (state_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Ξ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 β f2now apply w_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 β f2now 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 β f2now 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 β f2now apply w_sub_sub. Qed.Ξ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 β f2intros ? 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.Ξ1, Ξ2, Ξ3, Ξ4: t_ctx
u: Ξ1 =[ val ]> Ξ2
v: Ξ2 =[ val ]> Ξ3
w: Ξ3 =[ val ]> Ξ4(u β v) β w β‘β u β (v β w)syn_ind_args t_sub_id_l_P w_sub_id_l_P s_sub_id_l_Pforall (Ξ : 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 ZerLforall Ξ : t_ctx, w_sub_id_l_P Ξ `+ β€ TopRforall Ξ : t_ctx, w_sub_id_l_P Ξ `+ 1 OneRforall (Ξ : 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 Ξ `- β₯ BotLforall (Ξ : 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 = sMu (s_subst (Ξ βΆβ A β ) s (Ξ βΆβ A β ) (a_shift1 var)) = Mu sΞ: t_ctx
A: pre_ty pos
t: term (Ξ βΆβ `- A) `- A
H: t `ββ var = tRecL (t `ββ a_shift1 var) = RecL tΞ: t_ctx
A: pre_ty neg
t: term (Ξ βΆβ `+ A) `+ A
H: t `ββ var = tRecR (t `ββ a_shift1 var) = RecR tΞ: t_ctx
A: ty
w: whn Ξ A
H: w `α΅₯β var = ww `α΅₯β var = Whn wΞ: t_ctx
A: ty
h: Ξ β Avar h = Var hΞ: t_ctxWhn ZerL = Whn ZerLΞ: t_ctxWhn TopR = Whn TopRΞ: t_ctxOneR = OneRΞ: t_ctx
s: state Ξ
H: s ββ var = sWhn (OneL (s_subst Ξ s Ξ var)) = Whn (OneL s)Ξ: t_ctx
s: state Ξ
H: s ββ var = sWhn (BotR (s_subst Ξ s Ξ var)) = Whn (BotR s)Ξ: t_ctxBotL = BotLΞ: t_ctx
A, B: pre_ty pos
w1: whn Ξ `+ A
H1: w1 `α΅₯β var = w1
w2: whn Ξ `+ B
H2: w2 `α΅₯β var = w2TenR (w1 `α΅₯β var) (w2 `α΅₯β var) = TenR w1 w2Ξ: t_ctx
A, B: pre_ty pos
s: state (Ξ βΆβ `+ A βΆβ `+ B)
H: s ββ var = sWhn (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 = sWhn (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 = w2ParL (w1 `α΅₯β var) (w2 `α΅₯β var) = ParL w1 w2Ξ: t_ctx
A, B: pre_ty pos
w: whn Ξ `+ A
H: w `α΅₯β var = wOrR1 (w `α΅₯β var) = OrR1 wΞ: t_ctx
A, B: pre_ty pos
w: whn Ξ `+ B
H: w `α΅₯β var = wOrR2 (w `α΅₯β var) = OrR2 wΞ: t_ctx
A, B: pre_ty pos
s1: state (Ξ βΆβ `+ A)
H1: s1 ββ var = s1
s2: state (Ξ βΆβ `+ B)
H2: s2 ββ var = s2Whn (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 = s2Whn (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 = wAndL1 (w `α΅₯β var) = AndL1 wΞ: t_ctx
A, B: pre_ty neg
w: whn Ξ `- B
H: w `α΅₯β var = wAndL2 (w `α΅₯β var) = AndL2 wΞ: t_ctx
A: pre_ty neg
t: term Ξ `+ A
H: t `ββ var = tShiftPR (t `ββ var) = ShiftPR tΞ: t_ctx
A: pre_ty neg
s: state (Ξ βΆβ `+ A)
H: s ββ var = sWhn (ShiftPL (s_subst (Ξ βΆβ `+ A) s (Ξ βΆβ `+ A) (a_shift1 var))) = Whn (ShiftPL s)Ξ: t_ctx
A: pre_ty pos
s: state (Ξ βΆβ `- A)
H: s ββ var = sWhn (ShiftNR (s_subst (Ξ βΆβ `- A) s (Ξ βΆβ `- A) (a_shift1 var))) = Whn (ShiftNR s)Ξ: t_ctx
A: pre_ty pos
t: term Ξ `- A
H: t `ββ var = tShiftNL (t `ββ var) = ShiftNL tΞ: t_ctx
A: pre_ty neg
w: whn Ξ `- A
H: w `α΅₯β var = wNegPR (w `α΅₯β var) = NegPR wΞ: t_ctx
A: pre_ty neg
s: state (Ξ βΆβ `- A)
H: s ββ var = sWhn (NegPL (s_subst (Ξ βΆβ `- A) s (Ξ βΆβ `- A) (a_shift1 var))) = Whn (NegPL s)Ξ: t_ctx
A: pre_ty pos
s: state (Ξ βΆβ `+ A)
H: s ββ var = sWhn (NegNR (s_subst (Ξ βΆβ `+ A) s (Ξ βΆβ `+ A) (a_shift1 var))) = Whn (NegNR s)Ξ: t_ctx
A: pre_ty pos
w: whn Ξ `+ A
H: w `α΅₯β var = wNegNL (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 = t2Cut p (t1 `ββ var) (t2 `ββ var) = Cut p t1 t2Ξ: t_ctx
A: ty
s: state (Ξ βΆβ A β )
H: s ββ var = sMu (s_subst (Ξ βΆβ A β ) s (Ξ βΆβ A β ) (a_shift1 var)) = Mu sΞ: t_ctx
A: pre_ty pos
t: term (Ξ βΆβ `- A) `- A
H: t `ββ var = tRecL (t `ββ a_shift1 var) = RecL tΞ: t_ctx
A: pre_ty neg
t: term (Ξ βΆβ `+ A) `+ A
H: t `ββ var = tRecR (t `ββ a_shift1 var) = RecR tΞ: t_ctx
p: pre_ty pos
w: whn Ξ `+ p
H: w `α΅₯β var = wWhn (w `α΅₯β var) = Whn wΞ: t_ctx
p: pre_ty neg
w: whn Ξ `+ p
H: w `α΅₯β var = ww `α΅₯β var = Whn wΞ: t_ctx
p: pre_ty pos
w: whn Ξ `- p
H: w `α΅₯β var = ww `α΅₯β var = Whn wΞ: t_ctx
p: pre_ty neg
w: whn Ξ `- p
H: w `α΅₯β var = wWhn (w `α΅₯β var) = Whn wΞ: t_ctx
p: pre_ty pos
h: Ξ β `+ pvar h = Var hΞ: t_ctx
p: pre_ty neg
h: Ξ β `+ pvar h = Whn (Var h)Ξ: t_ctx
p: pre_ty pos
h: Ξ β `- pvar h = Whn (Var h)Ξ: t_ctx
p: pre_ty neg
h: Ξ β `- pvar h = Var hΞ: t_ctxWhn ZerL = Whn ZerLΞ: t_ctxWhn TopR = Whn TopRΞ: t_ctxOneR = OneRΞ: t_ctx
s: state Ξ
H: s ββ var = sWhn (OneL (s_subst Ξ s Ξ var)) = Whn (OneL s)Ξ: t_ctx
s: state Ξ
H: s ββ var = sWhn (BotR (s_subst Ξ s Ξ var)) = Whn (BotR s)Ξ: t_ctxBotL = BotLΞ: t_ctx
A, B: pre_ty pos
w1: whn Ξ `+ A
H1: w1 `α΅₯β var = w1
w2: whn Ξ `+ B
H2: w2 `α΅₯β var = w2TenR (w1 `α΅₯β var) (w2 `α΅₯β var) = TenR w1 w2Ξ: t_ctx
A, B: pre_ty pos
s: state (Ξ βΆβ `+ A βΆβ `+ B)
H: s ββ var = sWhn (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 = sWhn (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 = w2ParL (w1 `α΅₯β var) (w2 `α΅₯β var) = ParL w1 w2Ξ: t_ctx
A, B: pre_ty pos
w: whn Ξ `+ A
H: w `α΅₯β var = wOrR1 (w `α΅₯β var) = OrR1 wΞ: t_ctx
A, B: pre_ty pos
w: whn Ξ `+ B
H: w `α΅₯β var = wOrR2 (w `α΅₯β var) = OrR2 wΞ: t_ctx
A, B: pre_ty pos
s1: state (Ξ βΆβ `+ A)
H1: s1 ββ var = s1
s2: state (Ξ βΆβ `+ B)
H2: s2 ββ var = s2Whn (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 = s2Whn (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 = wAndL1 (w `α΅₯β var) = AndL1 wΞ: t_ctx
A, B: pre_ty neg
w: whn Ξ `- B
H: w `α΅₯β var = wAndL2 (w `α΅₯β var) = AndL2 wΞ: t_ctx
A: pre_ty neg
t: term Ξ `+ A
H: t `ββ var = tShiftPR (t `ββ var) = ShiftPR tΞ: t_ctx
A: pre_ty neg
s: state (Ξ βΆβ `+ A)
H: s ββ var = sWhn (ShiftPL (s_subst (Ξ βΆβ `+ A) s (Ξ βΆβ `+ A) (a_shift1 var))) = Whn (ShiftPL s)Ξ: t_ctx
A: pre_ty pos
s: state (Ξ βΆβ `- A)
H: s ββ var = sWhn (ShiftNR (s_subst (Ξ βΆβ `- A) s (Ξ βΆβ `- A) (a_shift1 var))) = Whn (ShiftNR s)Ξ: t_ctx
A: pre_ty pos
t: term Ξ `- A
H: t `ββ var = tShiftNL (t `ββ var) = ShiftNL tΞ: t_ctx
A: pre_ty neg
w: whn Ξ `- A
H: w `α΅₯β var = wNegPR (w `α΅₯β var) = NegPR wΞ: t_ctx
A: pre_ty neg
s: state (Ξ βΆβ `- A)
H: s ββ var = sWhn (NegPL (s_subst (Ξ βΆβ `- A) s (Ξ βΆβ `- A) (a_shift1 var))) = Whn (NegPL s)Ξ: t_ctx
A: pre_ty pos
s: state (Ξ βΆβ `+ A)
H: s ββ var = sWhn (NegNR (s_subst (Ξ βΆβ `+ A) s (Ξ βΆβ `+ A) (a_shift1 var))) = Whn (NegNR s)Ξ: t_ctx
A: pre_ty pos
w: whn Ξ `+ A
H: w `α΅₯β var = wNegNL (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 = t2Cut p (t1 `ββ var) (t2 `ββ var) = Cut p t1 t2all: first [ rewrite a_shift1_id | rewrite a_shift2_id ]; auto. Qed.Ξ: t_ctx
A: ty
s: state (Ξ βΆβ A β )
H: s ββ var = ss_subst (Ξ βΆβ A β ) s (Ξ βΆβ A β ) (a_shift1 var) = sΞ: t_ctx
A: pre_ty pos
t: term (Ξ βΆβ `- A) `- A
H: t `ββ var = tt `ββ a_shift1 var = tΞ: t_ctx
A: pre_ty neg
t: term (Ξ βΆβ `+ A) `+ A
H: t `ββ var = tt `ββ a_shift1 var = tΞ: t_ctx
A, B: pre_ty pos
s: state (Ξ βΆβ `+ A βΆβ `+ B)
H: s ββ var = ss_subst (Ξ βΆβ `+ A βΆβ `+ B) s (Ξ βΆβ `+ A βΆβ `+ B) (a_shift2 var) = sΞ: t_ctx
A, B: pre_ty neg
s: state (Ξ βΆβ `- A βΆβ `- B)
H: s ββ var = ss_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 = s2s_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 = s2s_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 = s2s_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 = s2s_subst (Ξ βΆβ `- B) s2 (Ξ βΆβ `- B) (a_shift1 var) = s2Ξ: t_ctx
A: pre_ty neg
s: state (Ξ βΆβ `+ A)
H: s ββ var = ss_subst (Ξ βΆβ `+ A) s (Ξ βΆβ `+ A) (a_shift1 var) = sΞ: t_ctx
A: pre_ty pos
s: state (Ξ βΆβ `- A)
H: s ββ var = ss_subst (Ξ βΆβ `- A) s (Ξ βΆβ `- A) (a_shift1 var) = sΞ: t_ctx
A: pre_ty neg
s: state (Ξ βΆβ `- A)
H: s ββ var = ss_subst (Ξ βΆβ `- A) s (Ξ βΆβ `- A) (a_shift1 var) = sΞ: t_ctx
A: pre_ty pos
s: state (Ξ βΆβ `+ A)
H: s ββ var = ss_subst (Ξ βΆβ `+ A) s (Ξ βΆβ `+ A) (a_shift1 var) = snow apply (term_ind_mut _ _ _ sub_id_l_prf). Qed.Ξ: t_ctx
A: ty
t: term Ξ At `ββ var = tnow apply (whn_ind_mut _ _ _ sub_id_l_prf). Qed.Ξ: t_ctx
A: ty
v: whn Ξ Av `α΅₯β var = vnow apply (state_ind_mut _ _ _ sub_id_l_prf). Qed.Ξ: t_ctx
s: state Ξs ββ var = sΞ: t_ctx
A: ty
v: val Ξ Av α΅₯β var = vΞ: t_ctx
p: pre_ty pos
v: val Ξ `+ pv α΅₯β var = vΞ: t_ctx
p: pre_ty neg
v: val Ξ `+ pv α΅₯β var = vΞ: t_ctx
p: pre_ty pos
v: val Ξ `- pv α΅₯β var = vΞ: t_ctx
p: pre_ty neg
v: val Ξ `- pv α΅₯β var = vnow apply w_sub_id_l.Ξ: t_ctx
p: pre_ty pos
v: val Ξ `+ pv α΅₯β var = vnow apply t_sub_id_l.Ξ: t_ctx
p: pre_ty neg
v: val Ξ `+ pv α΅₯β var = vnow apply t_sub_id_l.Ξ: t_ctx
p: pre_ty pos
v: val Ξ `- pv α΅₯β var = vnow apply w_sub_id_l. Qed.Ξ: t_ctx
p: pre_ty neg
v: val Ξ `- pv α΅₯β var = vΞ, Ξ: t_ctx
A: ty
f: Ξ =[ val ]> Ξ
v: val Ξ Aa_shift1 f β β[ v α΅₯β f] β‘β β[ v] β fΞ0: ctx ty
Ξ: t_ctx
a: ty
f: Ξ0 =[ val ]> Ξ
v: val Ξ0 av_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 Ξ1v_subst (Ξ βΆβ y) a (v_shift1 a (f a v0)) Ξ β[ v_subst Ξ1 y v Ξ f] = v_subst Ξ1 a (var v0) Ξ fnow rewrite v_sub_id_r.Ξ0: ctx ty
Ξ: t_ctx
a: ty
f: Ξ0 =[ val ]> Ξ
v: val Ξ0 av_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 Ξ1v_subst (Ξ βΆβ y) a (v_shift1 a (f a v0)) Ξ β[ v_subst Ξ1 y v Ξ f] = v_subst Ξ1 a (var v0) Ξ fnow apply v_sub_id_l. Qed.Ξ1: ctx ty
Ξ: t_ctx
y: ty
f: Ξ1 =[ val ]> Ξ
v: val Ξ1 y
a: ty
v0: Ctx.var a Ξ1f a v0 α΅₯β r_pop α΅£β β[ v_subst Ξ1 y v Ξ f] = f a v0Ξ, Ξ: ctx ty
A: ty
f: Ξ β Ξ
v: val Ξ Ar_shift1 f α΅£β β[ v α΅₯βα΅£ f] β‘β β[ v] βα΅£ fcbn; now rewrite v_ren_id_r. Qed.Ξ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)Ξ, Ξ: t_ctx
A, B: ty
f: Ξ =[ val ]> Ξ
v: val Ξ A
w: val (Ξ βΆβ A) B(w α΅₯β a_shift1 f) α΅₯β β[ v α΅₯β f] = (w α΅₯β β[ v]) α΅₯β fapply v_sub_eq; now rewrite sub1_sub. Qed.Ξ, Ξ: t_ctx
A, B: ty
f: Ξ =[ val ]> Ξ
v: val Ξ A
w: val (Ξ βΆβ A) Bw α΅₯β a_shift1 f β β[ v_subst Ξ A v Ξ f] = w α΅₯β β[ v] β fΞ, Ξ: ctx ty
A, B: ty
f: Ξ β Ξ
v: val Ξ A
w: val (Ξ βΆβ A) Bw α΅₯βα΅£ r_shift1 f α΅₯β β[ v α΅₯βα΅£ f] = (w α΅₯β β[ v]) α΅₯βα΅£ fapply v_sub_eq; now rewrite sub1_ren. Qed.Ξ, Ξ: ctx ty
A, B: ty
f: Ξ β Ξ
v: val Ξ A
w: val (Ξ βΆβ A) Bw α΅₯β r_shift1 f α΅£β β[ v α΅₯βα΅£ f] = w α΅₯β β[ v] βα΅£ fcbn; now rewrite 2 s_sub_sub, sub1_sub. Qed.Ξ, Ξ: t_ctx
A: ty
f: Ξ =[ val ]> Ξ
v: val Ξ A
s: state (Ξ βΆβ A)(s ββ a_shift1 f) ββ β[ v α΅₯β f] = (s ββ β[ v]) ββ fΞ, Ξ: 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 Ξ Ba_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 β av_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 Ξ1v_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) Ξ fnow apply v_sub_eq. Qed.Ξ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 Ξ1f a v0 α΅₯β (r_pop α΅£β r_pop) α΅£β β[ v_subst Ξ1 y0 u Ξ f, v_subst Ξ1 y v Ξ f] = f a v0 α΅₯β varcbn; now rewrite s_sub_ren, s_ren_sub, sub1_ren. Qed.Ξ, Ξ: ctx ty
A: ty
f: Ξ β Ξ
v: val Ξ A
s: state (Ξ βΆβ A)s ββα΅£ r_shift1 f ββ β[ v α΅₯βα΅£ f] = (s ββ β[ v]) ββα΅£ fΞ, Ξ: t_ctx
A, B: ty
f: Ξ =[ val ]> Ξ
v: val Ξ A
t: term (Ξ βΆβ A) B(t `ββ a_shift1 f) `ββ β[ v α΅₯β f] = (t `ββ β[ v]) `ββ fapply t_sub_eq; now rewrite sub1_sub. Qed.Ξ, Ξ: t_ctx
A, B: ty
f: Ξ =[ val ]> Ξ
v: val Ξ A
t: term (Ξ βΆβ A) Bt `ββ a_shift1 f β β[ v_subst Ξ A v Ξ f] = t `ββ β[ v] β fΞ, Ξ: ctx ty
A, B: ty
f: Ξ β Ξ
v: val Ξ A
t: term (Ξ βΆβ A) Bt ββα΅£ r_shift1 f `ββ β[ v α΅₯βα΅£ f] = (t `ββ β[ v]) ββα΅£ fapply t_sub_eq; now rewrite sub1_ren. Qed.Ξ, Ξ: ctx ty
A, B: ty
f: Ξ β Ξ
v: val Ξ A
t: term (Ξ βΆβ A) Bt `ββ r_shift1 f α΅£β β[ v α΅₯βα΅£ f] = t `ββ β[ v] βα΅£ fintros 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 .Ξ: t_ctx
A: ty
v: val Ξ A
m: pat A βProper (asgn_eq (p_dom m) Ξ ==> eq) (p_app v m)Ξ: neg_ctx
p: pol
A: pre_ty prefold_id_aux_P Ξ p AΞ: neg_ctx
v: whn Ξ `+ 0p_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 Ξ `+ 1p_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 = vdependent elimination v; destruct (s_prf c).Ξ: neg_ctx
v: whn Ξ `+ 0p_of_w_0p 0 v `α΅₯β p_dom_of_w_0p 0 v = vdependent elimination v; destruct (s_prf c).Ξ: neg_ctx
v: whn Ξ `- β€p_of_w_0n β€ v `α΅₯β p_dom_of_w_0n β€ v = vdependent elimination v; [ destruct (s_prf c) | ]; auto.Ξ: neg_ctx
v: whn Ξ `+ 1p_of_w_0p 1 v `α΅₯β p_dom_of_w_0p 1 v = vdependent elimination v; [ destruct (s_prf c) | ]; auto.Ξ: 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
A0, B: pre_ty pos
IHA1: refold_id_aux_P Ξ pos A0
IHA2: refold_id_aux_P Ξ pos B
w: whn Ξ `+ A0
w0: whn Ξ `+ Bp_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 Ξ `+ Bp_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 Ξ `+ Bp_of_w_0p B w0 `α΅₯β r_cover_r cover_cat α΅£β [p_dom_of_w_0p A0 w, p_dom_of_w_0p B w0] = w0rewrite <- IHA2; apply w_sub_eq; exact (a_cat_proj_r _ _).Ξ: 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 Ξ `+ Bp_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
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 Ξ `- B2p_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 Ξ `- B2p_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 Ξ `- B2p_of_w_0n B2 w2 `α΅₯β r_cover_r cover_cat α΅£β [p_dom_of_w_0n A5 w1, p_dom_of_w_0n B2 w2] = w2rewrite <- IHA2; apply w_sub_eq; exact (a_cat_proj_r _ _).Ξ: 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 Ξ `- B2p_of_w_0n B2 w2 `α΅₯β r_cover_r cover_cat α΅£β [p_dom_of_w_0n A5 w1, p_dom_of_w_0n B2 w2] = w2dependent elimination v; [ destruct (s_prf c) | | ]; cbn; f_equal; [ apply IHA1 | apply IHA2 ].Ξ: 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 = vdependent 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 = vdependent 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 = vdependent 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Ξ: 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 = vcbn; f_equal; apply IHA.Ξ: neg_ctx
A15: pre_ty neg
IHA: refold_id_aux_P Ξ neg A15
w7: whn Ξ `- A15p_of_w_0p β A15 (NegPR w7) `α΅₯β p_dom_of_w_0p β A15 (NegPR w7) = NegPR w7Ξ: 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 = vcbn; f_equal; apply IHA. Qed.Ξ: neg_ctx
A18: pre_ty pos
IHA: refold_id_aux_P Ξ pos A18
w8: whn Ξ `+ A18p_of_w_0n Β¬ A18 (NegNL w8) `α΅₯β p_dom_of_w_0n Β¬ A18 (NegNL w8) = NegNL w8destruct 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
A: ty
v: val Ξ Ap_of_v A v `α΅₯β p_dom_of_v A v = vΞ: neg_ctx
p: pol
A: pre_ty pp_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) β‘β eintros ? h; repeat (dependent elimination h; auto).Ξ: neg_ctx
e: p_dom POne =[ val ]> Ξ! β‘β eintros ? h; repeat (dependent elimination h; auto).Ξ: 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
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 α΅£β erew [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 α΅£β erew [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 Ξ `+ A3rew [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 Ξ `+ Brew [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 Ξ `+ Brew [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 Ξ `+ Brew [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 Ξ `+ Brew [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 α΅£β erew [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) = prew [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) = p0rew [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) = p0rew [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)] β‘β erefine (a_cat_uniq _ _ _ _ _); [ apply IHA1 | apply IHA2 ] .Ξ: 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
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 α΅£β erew [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 α΅£β erew [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 Ξ `- A4rew [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 Ξ `- B0rew [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 Ξ `- B0rew [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 Ξ `- B0rew [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 Ξ `- B0rew [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 α΅£β erew [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) = p1rew [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) = p2rew [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) = p2rew [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)] β‘β erefine (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 ]> Ξ
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
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' β‘β eapply IHA1.Ξ: 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Ξ: 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' β‘β eapply IHA2.Ξ: 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Ξ: 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' β‘β eapply IHA1.Ξ: 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Ξ: 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' β‘β eapply IHA2.Ξ: 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) β‘β eintros ? v; repeat (dependent elimination v; auto).Ξ: neg_ctx
A8: pre_ty neg
IHA: p_dom_of_w_eq_P Ξ neg A8
e: p_dom (PShiftP A8) =[ val ]> Ξ! βΆβ e `+ A8 top β‘β eintros ? 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Ξ: 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' β‘β eapply IHA.Ξ: 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Ξ: 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' β‘β eapply 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
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Ξ: 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 β¦ Ξ³ β¦)revert a' H; rewrite H'; intros; now econstructor. Qed.Ξ: 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 β¦ Ξ³ β¦)Ξ: 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 β¦ Ξ³ β¦)revert a' H; rewrite H'; intros; now econstructor. Qed.Ξ: 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 β¦ Ξ³ β¦)
Finally we can return to saner pursuits.
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_nc_var ββ val_nval_n ββ (β¦ val_n, val_n β§β)intros Ξ x i; exact (var i).c_var ββ val_nintros Ξ x v Ξ f; exact (v α΅₯β f). Defined.val_n ββ (β¦ val_n, val_n β§β)esplit; intros Ξ s Ξ f; exact (s ββ (f : Ξ =[val]> Ξ)). Defined.subst_module val_n state_nsubst_monoid_laws val_nProper (ββ Ξ, (ββ a, eq ==> (ββ Ξ, asgn_eq Ξ Ξ ==> eq))) v_subforall (Ξ1 Ξ2 : neg_ctx) (x : ty) (i : Ξ1 β x) (p : Ξ1 =[ val_n ]> Ξ2), a_id i α΅₯β p = p x iforall (Ξ : neg_ctx) (x : ty) (v : val Ξ x), v α΅₯β a_id = vforall (Ξ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) α΅₯β bintros ???? <- ????; now apply v_sub_eq.Proper (ββ Ξ, (ββ a, eq ==> (ββ Ξ, asgn_eq Ξ Ξ ==> eq))) v_subintros ?????; now apply v_sub_id_r.forall (Ξ1 Ξ2 : neg_ctx) (x : ty) (i : Ξ1 β x) (p : Ξ1 =[ val_n ]> Ξ2), a_id i α΅₯β p = p x iintros ???; now apply v_sub_id_l.forall (Ξ : neg_ctx) (x : ty) (v : val Ξ x), v α΅₯β a_id = vintros ???????; symmetry; now apply v_sub_sub. Qed.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) α΅₯β bsubst_module_laws val_n state_nProper (ββ Ξ, eq ==> (ββ Ξ, asgn_eq Ξ Ξ ==> eq)) c_subforall (Ξ : neg_ctx) (c : state Ξ), c ββ a_id = cforall (Ξ1 Ξ2 Ξ3 : neg_ctx) (c : state Ξ1) (a : Ξ1 =[ val_n ]> Ξ2) (b : Ξ2 =[ val_n ]> Ξ3), c ββ a β b = (c ββ a) ββ bintros ??? <- ????; now apply s_sub_eq.Proper (ββ Ξ, eq ==> (ββ Ξ, asgn_eq Ξ Ξ ==> eq)) c_subintros ??; now apply s_sub_id_l.forall (Ξ : neg_ctx) (c : state Ξ), c ββ a_id = cintros ??????; symmetry; now apply s_sub_sub. Qed.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
Variable assumptions, that is, lemmata related to decidability of a value being a variable are easily proven inline.
var_assumptions val_nforall (Ξ : 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 vintros ? [[]|[]] ?? H; now dependent destruction H.forall (Ξ : neg_ctx) (x : ty), injective (a_id (x:=x))forall (Ξ : neg_ctx) (x : ty) (v : val Ξ x), decidable (is_var v)Ξ: neg_ctx
p: pre_ty pos
c: Ξ β `+ pdecidable (is_var (Var c))Ξ: neg_ctxdecidable (is_var OneR)Ξ: neg_ctx
A0, B: pre_ty pos
w: whn Ξ `+ A0
w0: whn Ξ `+ Bdecidable (is_var (TenR w w0))Ξ: neg_ctx
A4, B3: pre_ty pos
w3: whn Ξ `+ A4decidable (is_var (OrR1 w3))Ξ: neg_ctx
A5, B4: pre_ty pos
w4: whn Ξ `+ B4decidable (is_var (OrR2 w4))Ξ: neg_ctx
A10: pre_ty neg
t: term Ξ `+ A10decidable (is_var (ShiftPR t))Ξ: neg_ctx
A14: pre_ty neg
w7: whn Ξ `- A14decidable (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) `+ A1decidable (is_var (RecR t0))Ξ: neg_ctx
p: pre_ty neg
w: whn Ξ `+ pdecidable (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) `- A0decidable (is_var (RecL t))Ξ: neg_ctx
p: pre_ty pos
w: whn Ξ `- pdecidable (is_var (Whn w))Ξ: neg_ctx
p: pre_ty neg
c: Ξ β `- pdecidable (is_var (Var c))Ξ: neg_ctxdecidable (is_var BotL)Ξ: neg_ctx
A3, B2: pre_ty neg
w1: whn Ξ `- A3
w2: whn Ξ `- B2decidable (is_var (ParL w1 w2))Ξ: neg_ctx
A8, B7: pre_ty neg
w5: whn Ξ `- A8decidable (is_var (AndL1 w5))Ξ: neg_ctx
A9, B8: pre_ty neg
w6: whn Ξ `- B8decidable (is_var (AndL2 w6))Ξ: neg_ctx
A13: pre_ty pos
t0: term Ξ `- A13decidable (is_var (ShiftNL t0))Ξ: neg_ctx
A17: pre_ty pos
w8: whn Ξ `+ A17decidable (is_var (NegNL w8))Ξ: neg_ctx
p: pre_ty pos
c: Ξ β `+ pdecidable (is_var (Var c))Ξ: neg_ctxdecidable (is_var OneR)Ξ: neg_ctx
A0, B: pre_ty pos
w: whn Ξ `+ A0
w0: whn Ξ `+ Bdecidable (is_var (TenR w w0))Ξ: neg_ctx
A4, B3: pre_ty pos
w3: whn Ξ `+ A4decidable (is_var (OrR1 w3))Ξ: neg_ctx
A5, B4: pre_ty pos
w4: whn Ξ `+ B4decidable (is_var (OrR2 w4))Ξ: neg_ctx
A10: pre_ty neg
t: term Ξ `+ A10decidable (is_var (ShiftPR t))Ξ: neg_ctx
A14: pre_ty neg
w7: whn Ξ `- A14decidable (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) `+ A1decidable (is_var (RecR t0))Ξ: neg_ctx
p: pre_ty neg
c: Ξ β `+ pdecidable (is_var (Whn (Var c)))Ξ: neg_ctxdecidable (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: Ξ β `- pdecidable (is_var (Whn (Var c)))Ξ: neg_ctxdecidable (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) `- A0decidable (is_var (RecL t))Ξ: neg_ctx
p: pre_ty neg
c: Ξ β `- pdecidable (is_var (Var c))Ξ: neg_ctxdecidable (is_var BotL)Ξ: neg_ctx
A3, B2: pre_ty neg
w1: whn Ξ `- A3
w2: whn Ξ `- B2decidable (is_var (ParL w1 w2))Ξ: neg_ctx
A8, B7: pre_ty neg
w5: whn Ξ `- A8decidable (is_var (AndL1 w5))Ξ: neg_ctx
A9, B8: pre_ty neg
w6: whn Ξ `- B8decidable (is_var (AndL2 w6))Ξ: neg_ctx
A13: pre_ty pos
t0: term Ξ `- A13decidable (is_var (ShiftNL t0))Ξ: neg_ctx
A17: pre_ty pos
w8: whn Ξ `+ A17decidable (is_var (NegNL w8))all: apply No; intro H; dependent destruction H.Ξ: neg_ctxdecidable (is_var OneR)Ξ: neg_ctx
A0, B: pre_ty pos
w: whn Ξ `+ A0
w0: whn Ξ `+ Bdecidable (is_var (TenR w w0))Ξ: neg_ctx
A4, B3: pre_ty pos
w3: whn Ξ `+ A4decidable (is_var (OrR1 w3))Ξ: neg_ctx
A5, B4: pre_ty pos
w4: whn Ξ `+ B4decidable (is_var (OrR2 w4))Ξ: neg_ctx
A10: pre_ty neg
t: term Ξ `+ A10decidable (is_var (ShiftPR t))Ξ: neg_ctx
A14: pre_ty neg
w7: whn Ξ `- A14decidable (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) `+ A1decidable (is_var (RecR t0))Ξ: neg_ctxdecidable (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_ctxdecidable (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) `- A0decidable (is_var (RecL t))Ξ: neg_ctxdecidable (is_var BotL)Ξ: neg_ctx
A3, B2: pre_ty neg
w1: whn Ξ `- A3
w2: whn Ξ `- B2decidable (is_var (ParL w1 w2))Ξ: neg_ctx
A8, B7: pre_ty neg
w5: whn Ξ `- A8decidable (is_var (AndL1 w5))Ξ: neg_ctx
A9, B8: pre_ty neg
w6: whn Ξ `- B8decidable (is_var (AndL2 w6))Ξ: neg_ctx
A13: pre_ty pos
t0: term Ξ `- A13decidable (is_var (ShiftNL t0))Ξ: neg_ctx
A17: pre_ty pos
w8: whn Ξ `+ A17decidable (is_var (NegNL w8))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)all: dependent induction w; dependent destruction X; exact (Vvar _). Qed.Ξ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)
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 uwell_founded head_inst_nostepintros; apply p_app_eq.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 β¦Ξ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 ]> Ξ2Cut 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 ]> Ξ2Cut 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 ]> Ξ2Cut 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 ]> Ξ2Cut neg ((o `α΅₯β a) `ββ b) (Whn (v `α΅₯β b)) = Cut neg (o `α΅₯β a β b) (Whn (v `α΅₯β b))all: change (?a `α΅₯β ?b) with (a α΅₯β b) at 1; now rewrite (w_sub_sub _ _ _ _).Ξ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 ]> Ξ2Cut 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 ]> Ξ2Cut pos (Whn ((o `α΅₯β a) `α΅₯β b)) (v `ββ b) = Cut pos (Whn (o `α΅₯β a β b)) (v `ββ b)
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)))apply CIH.Ξ: 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)))Ξ: 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)))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_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)))Ξ: 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)))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_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)))Ξ: 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)))now rewrite (refold_id_aux A v).Ξ: 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)))cbn; econstructor; refold_eval; apply CIH.Ξ: 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
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)))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_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)))Ξ: 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)))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_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)))Ξ: 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)))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_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)))Ξ: 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)))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_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)))Ξ: 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)))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_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)))Ξ: 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)))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_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)))Ξ: 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)))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_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)))Ξ: 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)))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_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)))Ξ: 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))))now rewrite (refold_id_aux A k).Ξ: 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))))cbn; econstructor; refold_eval; apply CIH.Ξ: 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
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)))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_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)))Ξ: 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)))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_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)))Ξ: 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)))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_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)))Ξ: 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)))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_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)))Ξ: 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)))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_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)))
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 β ,' oeval (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 β ,' oeval (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 β ,' oeval (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 β ,' oeval (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 β ,' oeval (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 β ,' oeval (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 β ,' oeval (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 β ,' oeval (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 β ,' oeval (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 β ,' oeval (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 β ,' oeval (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 β ,' oeval (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 β ,' oeval (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 β ,' oeval (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) β ,' oeval (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) β ,' oeval (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) β ,' oeval (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 = (`+ β₯) β ,' oeval (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)) β ,' oeval (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)) β ,' oeval (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)) β ,' oeval (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)) β ,' oeval (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)) β ,' oeval (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)) β ,' oeval (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)) β ,' oeval (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)) β ,' oeval (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)) β ,' oeval (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)) β ,' oeval (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) β ,' oeval (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 = (`+ β₯) β ,' oeval (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)) β ,' oeval (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)) β ,' oeval (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)) β ,' oeval (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)) β ,' oeval (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)) β ,' oeval (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)) β ,' oeval (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)) β ,' oeval (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)) β ,' oeval (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)) β ,' oeval (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)) β ,' oeval (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) β ,' POneeval (Cut pos (Whn OneR) (var i)) β ret_delay (i β POne β¦ Ξ³ β¦)Ξ: neg_ctx
i: Ξ β `+ β₯
Ξ³: dom PBot =[ val_n ]> Ξ
H1: `- β₯,' PBot = (`+ β₯) β ,' PBoteval (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 p2eval (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 p2eval (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 peval (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 peval (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 peval (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 peval (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 A7eval (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 A8eval (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 peval (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 peval (Cut neg (var i) (Whn (NegNL (p `α΅₯β Ξ³)))) β ret_delay (i β PNegN p β¦ Ξ³ β¦)Ξ: neg_ctx
i: Ξ β `- 1
Ξ³: dom POne =[ val_n ]> Ξ
H1: `+ 1,' POne = (`- 1) β ,' POnenf_eq (s_var_upg i β v_split_p OneR) (i β POne β¦ Ξ³ β¦)Ξ: neg_ctx
i: Ξ β `+ β₯
Ξ³: dom PBot =[ val_n ]> Ξ
H1: `- β₯,' PBot = (`+ β₯) β ,' PBotnf_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 p2nf_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 p2nf_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 pnf_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 pnf_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 pnf_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 pnf_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 A7nf_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 A8nf_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 pnf_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 pnf_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.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 p2nf_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 p2nf_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 pnf_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 pnf_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 pnf_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 pnf_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 A7nf_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 A8nf_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 pnf_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 pnf_eq (s_var_upg i β v_split_n (NegNL (p `α΅₯β Ξ³))) (i β PNegN p β¦ Ξ³ β¦)
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_nostepy: 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: Ξ β `- 1Acc 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 Ξ `- A8Acc 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 Ξ `+ A7Acc 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)all: apply it_eq_step in i0; cbn in i0; dependent elimination i0. Qed.Ξ: 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)
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).exact (ogs_correction _ x y). Qed.Ξ, Ξ: neg_ctx
x, y: state Ξx ββ¦ogs Ξ β§β y -> x ββ¦sub Ξ β§β y
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 Ξ `- ACut pos (t `ββ s) k = nameβΊ t ββ a_of_sk s kcbn; 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
t: term Ξ `+ A
s: Ξ =[ val ]> Ξ
k: term Ξ `- ACut pos (t `ββ s) k = nameβΊ t ββ a_of_sk s kΞ, Ξ: neg_ctx
A: pre_ty pos
x, y: term Ξ `+ AnameβΊ x ββ¦ogs Ξ β§β nameβΊ y -> x ββ¦ciu Ξ β§βΊβ ynow apply subst_correct. Qed.Ξ, Ξ: neg_ctx
A: pre_ty pos
x, y: term Ξ `+ A
H: nameβΊ x ββ¦ogs Ξ β§β nameβΊ y
Ο: Ξ =[ val ]> Ξ
k: term Ξ `- Aevalβ (nameβΊ x ββ a_of_sk Ο k) β evalβ (nameβΊ y ββ a_of_sk Ο k)