Built with Alectryon, running Coq+SerAPI v8.10.0+0.7.0. Coq sources are in this panel; goals and messages will appear in the other. Bubbles () indicate interactive fragments: hover for details, tap to reveal contents. Use Ctrl+↑ Ctrl+↓ to navigate, Ctrl+🖱️ to focus.
(************************************************************************)
(* * The Coq Proof Assistant / The Coq Development Team *)
(* v * INRIA, CNRS and contributors - Copyright 1999-2018 *)
(* <O___,, * (see CREDITS file for the list of authors) *)
(* \VV/ **************************************************************)
(* // * This file is distributed under the terms of the *)
(* * GNU Lesser General Public License Version 2.1 *)
(* * (see LICENSE file for the text of the license) *)
(************************************************************************)
Author: Cristina Cornes
From : Constructing Recursion Operators in Type Theory
L. Paulson JSC (1986) 2, 325-355
Require Import List. Require Import Relation_Operators. Require Import Operators_Properties. Require Import Transitive_Closure. Import ListNotations. Section Wf_Lexicographic_Exponentiation. Variable A : Set. Variable leA : A -> A -> Prop. Notation Power := (Pow A leA). Notation Lex_Exp := (lex_exp A leA). Notation ltl := (Ltl A leA). Notation Descl := (Desc A leA). Notation List := (list A). Notation "<< x , y >>" := (exist Descl x y) (at level 0, x, y at level 100). (* Hint Resolve d_one d_nil t_step. *)A:SetleA:A -> A -> Propforall x y z : List, ltl (x ++ y) z -> ltl x zA:SetleA:A -> A -> Propforall x y z : List, ltl (x ++ y) z -> ltl x zA:SetleA:A -> A -> Propx:Listforall y z : List, ltl ([] ++ y) z -> ltl [] zA:SetleA:A -> A -> Propx:Listforall (a : A) (l : List), (forall y z : List, ltl (l ++ y) z -> ltl l z) -> forall y z : List, ltl ((a :: l) ++ y) z -> ltl (a :: l) zA:SetleA:A -> A -> Propx, y, z:Listltl ([] ++ y) [] -> ltl [] []A:SetleA:A -> A -> Propx, y, z:Listforall (a : A) (l : List), (ltl ([] ++ y) l -> ltl [] l) -> ltl ([] ++ y) (a :: l) -> ltl [] (a :: l)A:SetleA:A -> A -> Propx:Listforall (a : A) (l : List), (forall y z : List, ltl (l ++ y) z -> ltl l z) -> forall y z : List, ltl ((a :: l) ++ y) z -> ltl (a :: l) zA:SetleA:A -> A -> Propx, y, z:ListH:ltl y []ltl [] []A:SetleA:A -> A -> Propx, y, z:Listforall (a : A) (l : List), (ltl ([] ++ y) l -> ltl [] l) -> ltl ([] ++ y) (a :: l) -> ltl [] (a :: l)A:SetleA:A -> A -> Propx:Listforall (a : A) (l : List), (forall y z : List, ltl (l ++ y) z -> ltl l z) -> forall y z : List, ltl ((a :: l) ++ y) z -> ltl (a :: l) zA:SetleA:A -> A -> Propx, y, z:Listforall (a : A) (l : List), (ltl ([] ++ y) l -> ltl [] l) -> ltl ([] ++ y) (a :: l) -> ltl [] (a :: l)A:SetleA:A -> A -> Propx:Listforall (a : A) (l : List), (forall y z : List, ltl (l ++ y) z -> ltl l z) -> forall y z : List, ltl ((a :: l) ++ y) z -> ltl (a :: l) zA:SetleA:A -> A -> Propx:Listforall (a : A) (l : List), (forall y z : List, ltl (l ++ y) z -> ltl l z) -> forall y z : List, ltl ((a :: l) ++ y) z -> ltl (a :: l) zA:SetleA:A -> A -> Propx:Lista:Al:ListHInd:forall y z : List, ltl (l ++ y) z -> ltl l zforall y z : List, ltl ((a :: l) ++ y) z -> ltl (a :: l) zA:SetleA:A -> A -> Propx:Lista:Al:ListHInd:forall y z : List, ltl (l ++ y) z -> ltl l zforall y z : List, ltl (a :: l ++ y) z -> ltl (a :: l) zA:SetleA:A -> A -> Propx:Lista:Al:ListHInd:forall y0 z0 : List, ltl (l ++ y0) z0 -> ltl l z0y, z:ListH:ltl (a :: l ++ y) zltl (a :: l) zA:SetleA:A -> A -> Propx:Lista:Al:ListHInd:forall y1 z0 : List, ltl (l ++ y1) z0 -> ltl l z0y, z:Listb:Ay0:ListH0:leA a bltl (a :: l) (b :: y0)A:SetleA:A -> A -> Propx:Lista:Al:ListHInd:forall y1 z0 : List, ltl (l ++ y1) z0 -> ltl l z0y, z, y0:ListH0:ltl (l ++ y) y0ltl (a :: l) (a :: y0)A:SetleA:A -> A -> Propx:Lista:Al:ListHInd:forall y1 z0 : List, ltl (l ++ y1) z0 -> ltl l z0y, z, y0:ListH0:ltl (l ++ y) y0ltl (a :: l) (a :: y0)apply (HInd y y0); auto with sets. Qed.A:SetleA:A -> A -> Propx:Lista:Al:ListHInd:forall y1 z0 : List, ltl (l ++ y1) z0 -> ltl l z0y, z, y0:ListH0:ltl (l ++ y) y0ltl l y0A:SetleA:A -> A -> Propforall x y z : List, ltl x (y ++ z) -> ltl x y \/ (exists y' : List, x = y ++ y' /\ ltl y' z)A:SetleA:A -> A -> Propforall x y z : List, ltl x (y ++ z) -> ltl x y \/ (exists y' : List, x = y ++ y' /\ ltl y' z)A:SetleA:A -> A -> Propx, y:Listforall x0 z : List, ltl x0 (y ++ z) -> ltl x0 y \/ (exists y' : List, x0 = y ++ y' /\ ltl y' z)A:SetleA:A -> A -> Propx, y:Listforall x0 z : List, ltl x0 z -> ltl x0 [] \/ (exists y' : List, x0 = y' /\ ltl y' z)A:SetleA:A -> A -> Propx, y:Listforall (a : A) (l : List), (forall x0 z : List, ltl x0 (l ++ z) -> ltl x0 l \/ (exists y' : List, x0 = l ++ y' /\ ltl y' z)) -> forall x0 z : List, ltl x0 (a :: l ++ z) -> ltl x0 (a :: l) \/ (exists y' : List, x0 = a :: l ++ y' /\ ltl y' z)A:SetleA:A -> A -> Propx, y, x0, z:ListH:ltl x0 zexists y' : List, x0 = y' /\ ltl y' zA:SetleA:A -> A -> Propx, y:Listforall (a : A) (l : List), (forall x0 z : List, ltl x0 (l ++ z) -> ltl x0 l \/ (exists y' : List, x0 = l ++ y' /\ ltl y' z)) -> forall x0 z : List, ltl x0 (a :: l ++ z) -> ltl x0 (a :: l) \/ (exists y' : List, x0 = a :: l ++ y' /\ ltl y' z)A:SetleA:A -> A -> Propx, y:Listforall (a : A) (l : List), (forall x0 z : List, ltl x0 (l ++ z) -> ltl x0 l \/ (exists y' : List, x0 = l ++ y' /\ ltl y' z)) -> forall x0 z : List, ltl x0 (a :: l ++ z) -> ltl x0 (a :: l) \/ (exists y' : List, x0 = a :: l ++ y' /\ ltl y' z)A:SetleA:A -> A -> Propx, y:Lista:Al:ListH:forall x1 z0 : List, ltl x1 (l ++ z0) -> ltl x1 l \/ (exists y' : List, x1 = l ++ y' /\ ltl y' z0)x0, z:ListH0:ltl x0 (a :: l ++ z)ltl x0 (a :: l) \/ (exists y' : List, x0 = a :: l ++ y' /\ ltl y' z)A:SetleA:A -> A -> Propx, y:Lista:Al:ListH:forall x2 z0 : List, ltl x2 (l ++ z0) -> ltl x2 l \/ (exists y' : List, x2 = l ++ y' /\ ltl y' z0)x0, z:ListH0:ltl x0 (a :: l ++ z)a0:Ax1:ListH1:[] = x0H3:a0 = aH4:x1 = l ++ zltl [] (a :: l) \/ (exists y' : List, [] = a :: l ++ y' /\ ltl y' z)A:SetleA:A -> A -> Propx, y:Lista:Al:ListH:forall x2 z0 : List, ltl x2 (l ++ z0) -> ltl x2 l \/ (exists y' : List, x2 = l ++ y' /\ ltl y' z0)x0, z:ListH0:ltl x0 (a :: l ++ z)a0, b:Ax1, y0:ListH3:leA a0 aH2:a0 :: x1 = x0H1:b = aH4:y0 = l ++ zltl (a0 :: x1) (a :: l) \/ (exists y' : List, a0 :: x1 = a :: l ++ y' /\ ltl y' z)A:SetleA:A -> A -> Propx, y:Lista:Al:ListH:forall x2 z0 : List, ltl x2 (l ++ z0) -> ltl x2 l \/ (exists y' : List, x2 = l ++ y' /\ ltl y' z0)x0, z:ListH0:ltl x0 (a :: l ++ z)a0:Ax1, y0:ListH3:ltl x1 (l ++ z)H2:a0 :: x1 = x0H1:a0 = aH4:y0 = l ++ zltl (a :: x1) (a :: l) \/ (exists y' : List, a :: x1 = a :: l ++ y' /\ ltl y' z)A:SetleA:A -> A -> Propx, y:Lista:Al:ListH:forall x2 z0 : List, ltl x2 (l ++ z0) -> ltl x2 l \/ (exists y' : List, x2 = l ++ y' /\ ltl y' z0)x0, z:ListH0:ltl x0 (a :: l ++ z)a0, b:Ax1, y0:ListH3:leA a0 aH2:a0 :: x1 = x0H1:b = aH4:y0 = l ++ zltl (a0 :: x1) (a :: l) \/ (exists y' : List, a0 :: x1 = a :: l ++ y' /\ ltl y' z)A:SetleA:A -> A -> Propx, y:Lista:Al:ListH:forall x2 z0 : List, ltl x2 (l ++ z0) -> ltl x2 l \/ (exists y' : List, x2 = l ++ y' /\ ltl y' z0)x0, z:ListH0:ltl x0 (a :: l ++ z)a0:Ax1, y0:ListH3:ltl x1 (l ++ z)H2:a0 :: x1 = x0H1:a0 = aH4:y0 = l ++ zltl (a :: x1) (a :: l) \/ (exists y' : List, a :: x1 = a :: l ++ y' /\ ltl y' z)A:SetleA:A -> A -> Propx, y:Lista:Al:ListH:forall x2 z0 : List, ltl x2 (l ++ z0) -> ltl x2 l \/ (exists y' : List, x2 = l ++ y' /\ ltl y' z0)x0, z:ListH0:ltl x0 (a :: l ++ z)a0:Ax1, y0:ListH3:ltl x1 (l ++ z)H2:a0 :: x1 = x0H1:a0 = aH4:y0 = l ++ zltl (a :: x1) (a :: l) \/ (exists y' : List, a :: x1 = a :: l ++ y' /\ ltl y' z)A:SetleA:A -> A -> Propx, y:Lista:Al:ListH:forall x2 z0 : List, ltl x2 (l ++ z0) -> ltl x2 l \/ (exists y' : List, x2 = l ++ y' /\ ltl y' z0)x0, z:ListH0:ltl x0 (a :: l ++ z)a0:Ax1, y0:ListH3:ltl x1 (l ++ z)H2:a0 :: x1 = x0H1:a0 = aH4:y0 = l ++ zltl x1 l \/ (exists y' : List, x1 = l ++ y' /\ ltl y' z) -> ltl (a :: x1) (a :: l) \/ (exists y' : List, a :: x1 = a :: l ++ y' /\ ltl y' z)A:SetleA:A -> A -> Propx, y:Lista:Al:ListH:forall x2 z0 : List, ltl x2 (l ++ z0) -> ltl x2 l \/ (exists y' : List, x2 = l ++ y' /\ ltl y' z0)x0, z:ListH0:ltl x0 (a :: l ++ z)a0:Ax1, y0:ListH3:ltl x1 (l ++ z)H2:a0 :: x1 = x0H1:a0 = aH4:y0 = l ++ zH5:ltl x1 l \/ (exists y' : List, x1 = l ++ y' /\ ltl y' z)ltl x1 l -> ltl (a :: x1) (a :: l) \/ (exists y' : List, a :: x1 = a :: l ++ y' /\ ltl y' z)A:SetleA:A -> A -> Propx, y:Lista:Al:ListH:forall x2 z0 : List, ltl x2 (l ++ z0) -> ltl x2 l \/ (exists y' : List, x2 = l ++ y' /\ ltl y' z0)x0, z:ListH0:ltl x0 (a :: l ++ z)a0:Ax1, y0:ListH3:ltl x1 (l ++ z)H2:a0 :: x1 = x0H1:a0 = aH4:y0 = l ++ zH5:ltl x1 l \/ (exists y' : List, x1 = l ++ y' /\ ltl y' z)(exists y' : List, x1 = l ++ y' /\ ltl y' z) -> ltl (a :: x1) (a :: l) \/ (exists y' : List, a :: x1 = a :: l ++ y' /\ ltl y' z)A:SetleA:A -> A -> Propx, y:Lista:Al:ListH:forall x2 z0 : List, ltl x2 (l ++ z0) -> ltl x2 l \/ (exists y' : List, x2 = l ++ y' /\ ltl y' z0)x0, z:ListH0:ltl x0 (a :: l ++ z)a0:Ax1, y0:ListH3:ltl x1 (l ++ z)H2:a0 :: x1 = x0H1:a0 = aH4:y0 = l ++ zH5:ltl x1 l \/ (exists y' : List, x1 = l ++ y' /\ ltl y' z)(exists y' : List, x1 = l ++ y' /\ ltl y' z) -> ltl (a :: x1) (a :: l) \/ (exists y' : List, a :: x1 = a :: l ++ y' /\ ltl y' z)A:SetleA:A -> A -> Propx, y:Lista:Al:ListH:forall x2 z0 : List, ltl x2 (l ++ z0) -> ltl x2 l \/ (exists y' : List, x2 = l ++ y' /\ ltl y' z0)x0, z:ListH0:ltl x0 (a :: l ++ z)a0:Ax1, y0:ListH3:ltl x1 (l ++ z)H2:a0 :: x1 = x0H1:a0 = aH4:y0 = l ++ zH5:ltl x1 l \/ (exists y' : List, x1 = l ++ y' /\ ltl y' z)H6:exists y' : List, x1 = l ++ y' /\ ltl y' zforall x2 : List, x1 = l ++ x2 /\ ltl x2 z -> ltl (a :: x1) (a :: l) \/ (exists y' : List, a :: x1 = a :: l ++ y' /\ ltl y' z)A:SetleA:A -> A -> Propx, y:Lista:Al:ListH:forall x3 z0 : List, ltl x3 (l ++ z0) -> ltl x3 l \/ (exists y' : List, x3 = l ++ y' /\ ltl y' z0)x0, z:ListH0:ltl x0 (a :: l ++ z)a0:Ax1, y0:ListH3:ltl x1 (l ++ z)H2:a0 :: x1 = x0H1:a0 = aH4:y0 = l ++ zH5:ltl x1 l \/ (exists y' : List, x1 = l ++ y' /\ ltl y' z)H6:exists y' : List, x1 = l ++ y' /\ ltl y' zx2:ListH7:x1 = l ++ x2 /\ ltl x2 zH8:x1 = l ++ x2H9:ltl x2 zltl (a :: x1) (a :: l) \/ (exists y' : List, a :: x1 = a :: l ++ y' /\ ltl y' z)right; exists x2; auto with sets. Qed.A:SetleA:A -> A -> Propx, y:Lista:Al:ListH:forall x3 z0 : List, ltl x3 (l ++ z0) -> ltl x3 l \/ (exists y' : List, x3 = l ++ y' /\ ltl y' z0)x0, z:ListH0:ltl x0 (a :: l ++ z)a0:Ax1, y0:ListH3:ltl x1 (l ++ z)H2:a0 :: x1 = x0H1:a0 = aH4:y0 = l ++ zH5:ltl x1 l \/ (exists y' : List, x1 = l ++ y' /\ ltl y' z)H6:exists y' : List, x1 = l ++ y' /\ ltl y' zx2:ListH7:x1 = l ++ x2 /\ ltl x2 zH8:x1 = l ++ x2H9:ltl x2 zltl (a :: l ++ x2) (a :: l) \/ (exists y' : List, a :: l ++ x2 = a :: l ++ y' /\ ltl y' z)A:SetleA:A -> A -> Propforall (x : List) (a : A), Descl (x ++ [a]) -> Descl xA:SetleA:A -> A -> Propforall (x : List) (a : A), Descl (x ++ [a]) -> Descl xA:SetleA:A -> A -> Propx:Lista:AH:Descl (x ++ [a])Descl xA:SetleA:A -> A -> Propx:Lista:AH:Descl (x ++ [a])H1:[] = x ++ [a]Descl xA:SetleA:A -> A -> Propx:Lista:AH:Descl (x ++ [a])x0:AH1:[x0] = x ++ [a]Descl xA:SetleA:A -> A -> Propx:Lista:AH:Descl (x ++ [a])x0, y:Al:ListH1:clos_refl A leA x0 yH2:Descl (l ++ [y])H0:(l ++ [y]) ++ [x0] = x ++ [a]Descl xapply app_cons_not_nil in H1 as [].A:SetleA:A -> A -> Propx:Lista:AH:Descl (x ++ [a])H1:[] = x ++ [a]Descl xA:SetleA:A -> A -> Propx:Lista:AH:Descl (x ++ [a])x0:AH1:[x0] = x ++ [a]Descl xA:SetleA:A -> A -> Propx:Lista:AH:Descl (x ++ [a])x0:AH1:[x0] = x ++ [a]H0:x ++ [a] = [x0]Descl xauto using d_nil.A:SetleA:A -> A -> Propa:AH:Descl ([] ++ [a])x0:AH1:[x0] = [] ++ [a]Descl []A:SetleA:A -> A -> Propx:Lista:AH:Descl (x ++ [a])x0, y:Al:ListH1:clos_refl A leA x0 yH2:Descl (l ++ [y])H0:(l ++ [y]) ++ [x0] = x ++ [a]Descl xassumption. Qed.A:SetleA:A -> A -> Propa, y:Al:ListH:Descl ((l ++ [y]) ++ [a])x0:AH1:clos_refl A leA x0 yH2:Descl (l ++ [y])Descl (l ++ [y])A:SetleA:A -> A -> Propforall (x : List) (a b : A), Descl (b :: x ++ [a]) -> clos_refl_trans A leA a bA:SetleA:A -> A -> Propforall (x : List) (a b : A), Descl (b :: x ++ [a]) -> clos_refl_trans A leA a bA:SetleA:A -> A -> Propx:Listforall a b : A, Descl (b :: x ++ [a]) -> clos_refl_trans A leA a bA:SetleA:A -> A -> Propx:Lista, b:AH:Descl (b :: [] ++ [a])clos_refl_trans A leA a bA:SetleA:A -> A -> Propx:Listx0:Al:ListH:forall a0 b0 : A, Descl (b0 :: l ++ [a0]) -> clos_refl_trans A leA a0 b0a, b:AH0:Descl (b :: (l ++ [x0]) ++ [a])clos_refl_trans A leA a bA:SetleA:A -> A -> Propx:Lista, b:AH:Descl (b :: [] ++ [a])clos_refl_trans A leA a bA:SetleA:A -> A -> Propx:Lista, b:AH:Descl (b :: [] ++ [a])x0, y:Al:ListH1:clos_refl A leA x0 yH2:Descl (l ++ [y])H0:(l ++ [y]) ++ [x0] = [b; a]clos_refl_trans A leA a bA:SetleA:A -> A -> Propx:Lista, b:AH:Descl (b :: [] ++ [a])x0, y:Al:ListH1:clos_refl A leA x0 yH2:Descl (l ++ [y])H0:(l ++ [y]) ++ [x0] = [b; a]H3:[b; a] = ([] ++ [b]) ++ [a]clos_refl_trans A leA a binversion H1; subst; [ apply rt_step; assumption | apply rt_refl ].A:SetleA:A -> A -> Propx:Listy, x0:AH:Descl (y :: [] ++ [x0])l:ListH1:clos_refl A leA x0 yH2:Descl (l ++ [y])H0:(l ++ [y]) ++ [x0] = [y; x0]H3:[y; x0] = ([] ++ [y]) ++ [x0]H4:l = []clos_refl_trans A leA x0 yA:SetleA:A -> A -> Propx:Listx0:Al:ListH:forall a0 b0 : A, Descl (b0 :: l ++ [a0]) -> clos_refl_trans A leA a0 b0a, b:AH0:Descl (b :: (l ++ [x0]) ++ [a])clos_refl_trans A leA a bA:SetleA:A -> A -> Propx:Listx0:Al:ListH:forall a0 b0 : A, Descl (b0 :: l ++ [a0]) -> clos_refl_trans A leA a0 b0a, b:AH0:Descl (b :: (l ++ [x0]) ++ [a])x1:AH2:x1 = bH3:[] = (l ++ [x0]) ++ [a]clos_refl_trans A leA a bA:SetleA:A -> A -> Propx:Listx0:Al:ListH:forall a0 b0 : A, Descl (b0 :: l ++ [a0]) -> clos_refl_trans A leA a0 b0a, b:AH0:Descl (b :: (l ++ [x0]) ++ [a])x1, y:Al0:ListH2:clos_refl A leA x1 yH3:Descl (l0 ++ [y])H1:(l0 ++ [y]) ++ [x1] = b :: (l ++ [x0]) ++ [a]clos_refl_trans A leA a bapply app_cons_not_nil in H3 as [].A:SetleA:A -> A -> Propx:Listx0:Al:ListH:forall a0 b0 : A, Descl (b0 :: l ++ [a0]) -> clos_refl_trans A leA a0 b0a, b:AH0:Descl (b :: (l ++ [x0]) ++ [a])x1:AH2:x1 = bH3:[] = (l ++ [x0]) ++ [a]clos_refl_trans A leA a bA:SetleA:A -> A -> Propx:Listx0:Al:ListH:forall a0 b0 : A, Descl (b0 :: l ++ [a0]) -> clos_refl_trans A leA a0 b0a, b:AH0:Descl (b :: (l ++ [x0]) ++ [a])x1, y:Al0:ListH2:clos_refl A leA x1 yH3:Descl (l0 ++ [y])H1:(l0 ++ [y]) ++ [x1] = b :: (l ++ [x0]) ++ [a]clos_refl_trans A leA a bA:SetleA:A -> A -> Propx:Listx0:Al:ListH:forall a0 b0 : A, Descl (b0 :: l ++ [a0]) -> clos_refl_trans A leA a0 b0a, b:AH0:Descl ((b :: l ++ [x0]) ++ [a])x1, y:Al0:ListH2:clos_refl A leA x1 yH3:Descl (l0 ++ [y])H1:(l0 ++ [y]) ++ [x1] = (b :: l ++ [x0]) ++ [a]clos_refl_trans A leA a bA:SetleA:A -> A -> Propx:Listx0:Al:ListH:forall a0 b0 : A, Descl (b0 :: l ++ [a0]) -> clos_refl_trans A leA a0 b0a, b:AH0:Descl (b :: l ++ [x0])x1, y:Al0:ListH2:clos_refl A leA x1 yH3:Descl (l0 ++ [y])H1:(l0 ++ [y]) ++ [x1] = (b :: l ++ [x0]) ++ [a]clos_refl_trans A leA a bA:SetleA:A -> A -> Propx:Listx0:Al:ListH:forall a0 b0 : A, Descl (b0 :: l ++ [a0]) -> clos_refl_trans A leA a0 b0a, b:AH0:Descl (b :: l ++ [x0])x1, y:Al0:ListH2:clos_refl A leA x1 yH3:Descl (l0 ++ [y])H1:(l0 ++ [y]) ++ [x1] = (b :: l ++ [x0]) ++ [a]H4:clos_refl_trans A leA x0 bclos_refl_trans A leA a bA:SetleA:A -> A -> Propx:Listx0:Al:ListH:forall a0 b0 : A, Descl (b0 :: l ++ [a0]) -> clos_refl_trans A leA a0 b0a, b:AH0:Descl (b :: l ++ [x0])x1, y:Al0:ListH2:clos_refl A leA x1 yH3:Descl (l0 ++ [y])H1:(l0 ++ [y]) ++ [x1] = (b :: l ++ [x0]) ++ [a]H4:clos_refl_trans A leA x0 bclos_refl_trans A leA a x0A:SetleA:A -> A -> Propx:Listx0:Al:ListH:forall a0 b0 : A, Descl (b0 :: l ++ [a0]) -> clos_refl_trans A leA a0 b0a, b:AH0:Descl (b :: l ++ [x0])x1, y:Al0:ListH2:clos_refl A leA x1 yH3:Descl (l0 ++ [y])H1:(l0 ++ [y]) ++ [x1] = (b :: l ++ [x0]) ++ [a]H4:clos_refl_trans A leA x0 bclos_refl A leA a x0A:SetleA:A -> A -> Propx:Listx0:Al:ListH:forall a0 b0 : A, Descl (b0 :: l ++ [a0]) -> clos_refl_trans A leA a0 b0a, b:AH0:Descl (b :: l ++ [x0])y:Al0:ListH2:clos_refl A leA a yH3:Descl (l0 ++ [y])H1:l0 ++ [y] = b :: l ++ [x0]H4:clos_refl_trans A leA x0 bclos_refl A leA a x0A:SetleA:A -> A -> Propx:Listx0:Al:ListH:forall a0 b0 : A, Descl (b0 :: l ++ [a0]) -> clos_refl_trans A leA a0 b0a, b:AH0:Descl (b :: l ++ [x0])y:Al0:ListH2:clos_refl A leA a yH3:Descl (l0 ++ [y])H1:l0 ++ [y] = (b :: l) ++ [x0]H4:clos_refl_trans A leA x0 bclos_refl A leA a x0assumption. Qed.A:SetleA:A -> A -> Propx, l:ListH:forall a0 b0 : A, Descl (b0 :: l ++ [a0]) -> clos_refl_trans A leA a0 b0a, b, y:AH0:Descl (b :: l ++ [y])l0:ListH2:clos_refl A leA a yH3:Descl (l0 ++ [y])H4:clos_refl_trans A leA y bclos_refl A leA a yA:SetleA:A -> A -> Propforall z : List, Descl z -> forall x y : List, z = x ++ y -> Descl x /\ Descl yA:SetleA:A -> A -> Propforall z : List, Descl z -> forall x y : List, z = x ++ y -> Descl x /\ Descl yA:SetleA:A -> A -> Propz:ListD:Descl zforall x y : List, z = x ++ y -> Descl x /\ Descl yA:SetleA:A -> A -> Propx, y:ListH:[] = x ++ yDescl x /\ Descl yA:SetleA:A -> A -> Propx:Ax0, y:ListH:[x] = x0 ++ yDescl x0 /\ Descl yA:SetleA:A -> A -> Propx, y:Al:ListH:clos_refl A leA x yD:Descl (l ++ [y])Hind:forall x1 y1 : List, l ++ [y] = x1 ++ y1 -> Descl x1 /\ Descl y1x0, y0:ListH0:(l ++ [y]) ++ [x] = x0 ++ y0Descl x0 /\ Descl y0A:SetleA:A -> A -> Propx, y:ListH:[] = x ++ yDescl x /\ Descl yA:SetleA:A -> A -> Propx, y:ListH:[] = x ++ yH0:x ++ y = []Descl x /\ Descl ysplit; apply d_nil.A:SetleA:A -> A -> PropH:[] = [] ++ []Descl [] /\ Descl []A:SetleA:A -> A -> Propx:Ax0, y:ListH:[x] = x0 ++ yDescl x0 /\ Descl yA:SetleA:A -> A -> Propx:Ax0, y:ListH:[x] = x0 ++ yE:x0 ++ y = [x]Descl x0 /\ Descl yA:SetleA:A -> A -> Propx:AH:[x] = [] ++ [x]Descl [] /\ Descl [x]A:SetleA:A -> A -> Propx:AH:[x] = [x] ++ []Descl [x] /\ Descl []A:SetleA:A -> A -> Propx:AH:[x] = [] ++ [x]Descl [] /\ Descl [x]A:SetleA:A -> A -> Propx:AH:[x] = [] ++ [x]Descl []A:SetleA:A -> A -> Propx:AH:[x] = [] ++ [x]Descl [x]apply d_one.A:SetleA:A -> A -> Propx:AH:[x] = [] ++ [x]Descl [x]A:SetleA:A -> A -> Propx:AH:[x] = [x] ++ []Descl [x] /\ Descl []A:SetleA:A -> A -> Propx:AH:[x] = [x] ++ []Descl [x]A:SetleA:A -> A -> Propx:AH:[x] = [x] ++ []Descl []apply d_nil.A:SetleA:A -> A -> Propx:AH:[x] = [x] ++ []Descl []A:SetleA:A -> A -> Propx, y:Al:ListH:clos_refl A leA x yD:Descl (l ++ [y])Hind:forall x1 y1 : List, l ++ [y] = x1 ++ y1 -> Descl x1 /\ Descl y1x0, y0:ListH0:(l ++ [y]) ++ [x] = x0 ++ y0Descl x0 /\ Descl y0A:SetleA:A -> A -> Propx, y:Al:ListH:clos_refl A leA x yD:Descl (l ++ [y])Hind:forall x1 y0 : List, l ++ [y] = x1 ++ y0 -> Descl x1 /\ Descl y0x0:ListH0:(l ++ [y]) ++ [x] = x0 ++ []Descl x0 /\ Descl []A:SetleA:A -> A -> Propx, y:Al:ListH:clos_refl A leA x yD:Descl (l ++ [y])Hind:forall x2 y1 : List, l ++ [y] = x2 ++ y1 -> Descl x2 /\ Descl y1x0:Listx1:Ay0:ListH0:(l ++ [y]) ++ [x] = x0 ++ y0 ++ [x1]IHy0:forall x2 : List, (l ++ [y]) ++ [x] = x2 ++ y0 -> Descl x2 /\ Descl y0Descl x0 /\ Descl (y0 ++ [x1])A:SetleA:A -> A -> Propx, y:Al:ListH:clos_refl A leA x yD:Descl (l ++ [y])Hind:forall x1 y0 : List, l ++ [y] = x1 ++ y0 -> Descl x1 /\ Descl y0x0:ListH0:(l ++ [y]) ++ [x] = x0 ++ []Descl x0 /\ Descl []A:SetleA:A -> A -> Propx, y:Al:ListH:clos_refl A leA x yD:Descl (l ++ [y])Hind:forall x1 y0 : List, l ++ [y] = x1 ++ y0 -> Descl x1 /\ Descl y0x0:ListH0:(l ++ [y]) ++ [x] = x0Descl x0 /\ Descl []A:SetleA:A -> A -> Propx, y:Al:ListH:clos_refl A leA x yD:Descl (l ++ [y])Hind:forall x1 y0 : List, l ++ [y] = x1 ++ y0 -> Descl x1 /\ Descl y0x0:ListH0:(l ++ [y]) ++ [x] = x0Descl ((l ++ [y]) ++ [x]) /\ Descl []A:SetleA:A -> A -> Propx, y:Al:ListH:clos_refl A leA x yD:Descl (l ++ [y])Hind:forall x1 y0 : List, l ++ [y] = x1 ++ y0 -> Descl x1 /\ Descl y0x0:ListH0:(l ++ [y]) ++ [x] = x0Descl ((l ++ [y]) ++ [x])A:SetleA:A -> A -> Propx, y:Al:ListH:clos_refl A leA x yD:Descl (l ++ [y])Hind:forall x1 y0 : List, l ++ [y] = x1 ++ y0 -> Descl x1 /\ Descl y0x0:ListH0:(l ++ [y]) ++ [x] = x0Descl []apply d_nil.A:SetleA:A -> A -> Propx, y:Al:ListH:clos_refl A leA x yD:Descl (l ++ [y])Hind:forall x1 y0 : List, l ++ [y] = x1 ++ y0 -> Descl x1 /\ Descl y0x0:ListH0:(l ++ [y]) ++ [x] = x0Descl []A:SetleA:A -> A -> Propx, y:Al:ListH:clos_refl A leA x yD:Descl (l ++ [y])Hind:forall x2 y1 : List, l ++ [y] = x2 ++ y1 -> Descl x2 /\ Descl y1x0:Listx1:Ay0:ListH0:(l ++ [y]) ++ [x] = x0 ++ y0 ++ [x1]IHy0:forall x2 : List, (l ++ [y]) ++ [x] = x2 ++ y0 -> Descl x2 /\ Descl y0Descl x0 /\ Descl (y0 ++ [x1])A:SetleA:A -> A -> Propx, y:Al:ListH:clos_refl A leA x yD:Descl (l ++ [y])Hind:forall x2 y0 : List, l ++ [y] = x2 ++ y0 -> Descl x2 /\ Descl y0x0:Listx1:AH0:(l ++ [y]) ++ [x] = x0 ++ [] ++ [x1]Descl x0 /\ Descl ([] ++ [x1])A:SetleA:A -> A -> Propx, y:Al:ListH:clos_refl A leA x yD:Descl (l ++ [y])Hind:forall x3 y1 : List, l ++ [y] = x3 ++ y1 -> Descl x3 /\ Descl y1x0:Listx1, x2:Ay0:ListH0:(l ++ [y]) ++ [x] = x0 ++ (y0 ++ [x2]) ++ [x1]IHy0:forall (x3 : List) (x4 : A), (l ++ [y]) ++ [x] = x3 ++ y0 ++ [x4] -> Descl x3 /\ Descl (y0 ++ [x4])Descl x0 /\ Descl ((y0 ++ [x2]) ++ [x1])A:SetleA:A -> A -> Propx, y:Al:ListH:clos_refl A leA x yD:Descl (l ++ [y])Hind:forall x2 y0 : List, l ++ [y] = x2 ++ y0 -> Descl x2 /\ Descl y0x0:Listx1:AH0:(l ++ [y]) ++ [x] = x0 ++ [] ++ [x1]Descl x0 /\ Descl ([] ++ [x1])A:SetleA:A -> A -> Propx, y:Al:ListH:clos_refl A leA x yD:Descl (l ++ [y])Hind:forall x2 y0 : List, l ++ [y] = x2 ++ y0 -> Descl x2 /\ Descl y0x0:Listx1:AH0:(l ++ [y]) ++ [x] = x0 ++ [] ++ [x1]Descl x0 /\ Descl [x1]A:SetleA:A -> A -> Propx, y:Al:ListH:clos_refl A leA x yD:Descl (l ++ [y])Hind:forall x2 y0 : List, l ++ [y] = x2 ++ y0 -> Descl x2 /\ Descl y0x0:Listx1:AH0:(l ++ [y]) ++ [x] = x0 ++ [] ++ [x1]Descl x0A:SetleA:A -> A -> Propx, y:Al:ListH:clos_refl A leA x yD:Descl (l ++ [y])Hind:forall x2 y0 : List, l ++ [y] = x2 ++ y0 -> Descl x2 /\ Descl y0x0:Listx1:AH0:(l ++ [y]) ++ [x] = x0 ++ [] ++ [x1]Descl [x1]A:SetleA:A -> A -> Propx, y:Al:ListH:clos_refl A leA x yD:Descl (l ++ [y])Hind:forall x0 y0 : List, l ++ [y] = x0 ++ y0 -> Descl x0 /\ Descl y0x1:ADescl (l ++ [y])A:SetleA:A -> A -> Propx, y:Al:ListH:clos_refl A leA x yD:Descl (l ++ [y])Hind:forall x2 y0 : List, l ++ [y] = x2 ++ y0 -> Descl x2 /\ Descl y0x0:Listx1:AH0:(l ++ [y]) ++ [x] = x0 ++ [] ++ [x1]Descl [x1]apply d_one.A:SetleA:A -> A -> Propx, y:Al:ListH:clos_refl A leA x yD:Descl (l ++ [y])Hind:forall x2 y0 : List, l ++ [y] = x2 ++ y0 -> Descl x2 /\ Descl y0x0:Listx1:AH0:(l ++ [y]) ++ [x] = x0 ++ [] ++ [x1]Descl [x1]A:SetleA:A -> A -> Propx, y:Al:ListH:clos_refl A leA x yD:Descl (l ++ [y])Hind:forall x3 y1 : List, l ++ [y] = x3 ++ y1 -> Descl x3 /\ Descl y1x0:Listx1, x2:Ay0:ListH0:(l ++ [y]) ++ [x] = x0 ++ (y0 ++ [x2]) ++ [x1]IHy0:forall (x3 : List) (x4 : A), (l ++ [y]) ++ [x] = x3 ++ y0 ++ [x4] -> Descl x3 /\ Descl (y0 ++ [x4])Descl x0 /\ Descl ((y0 ++ [x2]) ++ [x1])A:SetleA:A -> A -> Propx, y:Al:ListH:clos_refl A leA x yD:Descl (l ++ [y])Hind:forall x3 y1 : List, l ++ [y] = x3 ++ y1 -> Descl x3 /\ Descl y1x0:Listx1, x2:Ay0:ListH0:(l ++ [y]) ++ [x] = ((x0 ++ y0) ++ [x2]) ++ [x1]IHy0:forall (x3 : List) (x4 : A), (l ++ [y]) ++ [x] = x3 ++ y0 ++ [x4] -> Descl x3 /\ Descl (y0 ++ [x4])Descl x0 /\ Descl ((y0 ++ [x2]) ++ [x1])A:SetleA:A -> A -> Propx, y:Al:ListH:clos_refl A leA x yD:Descl (l ++ [y])Hind:forall x1 y1 : List, l ++ [y] = x1 ++ y1 -> Descl x1 /\ Descl y1x0:Listx2:Ay0:ListH0:l ++ [y] = (x0 ++ y0) ++ [x2]IHy0:forall (x1 : List) (x3 : A), (l ++ [y]) ++ [x] = x1 ++ y0 ++ [x3] -> Descl x1 /\ Descl (y0 ++ [x3])Descl x0 /\ Descl ((y0 ++ [x2]) ++ [x])A:SetleA:A -> A -> Propx, y:Al:ListH:clos_refl A leA x yD:Descl (l ++ [y])Hind:forall x1 y1 : List, l ++ [y] = x1 ++ y1 -> Descl x1 /\ Descl y1x0:Listx2:Ay0:ListH0:l ++ [y] = (x0 ++ y0) ++ [x2]IHy0:forall (x1 : List) (x3 : A), (l ++ [y]) ++ [x] = x1 ++ y0 ++ [x3] -> Descl x1 /\ Descl (y0 ++ [x3])H0':l ++ [y] = (x0 ++ y0) ++ [x2]Descl x0 /\ Descl ((y0 ++ [x2]) ++ [x])A:SetleA:A -> A -> Propx:Al:Listx2:AHind:forall x1 y : List, l ++ [x2] = x1 ++ y -> Descl x1 /\ Descl yD:Descl (l ++ [x2])H:clos_refl A leA x x2x0, y0:ListIHy0:forall (x1 : List) (x3 : A), (l ++ [x2]) ++ [x] = x1 ++ y0 ++ [x3] -> Descl x1 /\ Descl (y0 ++ [x3])H0:l ++ [x2] = (x0 ++ y0) ++ [x2]Descl x0 /\ Descl ((y0 ++ [x2]) ++ [x])A:SetleA:A -> A -> Propx:Al:Listx2:AHind:forall x1 y : List, l ++ [x2] = x1 ++ y -> Descl x1 /\ Descl yD:Descl (l ++ [x2])H:clos_refl A leA x x2x0, y0:ListIHy0:forall (x1 : List) (x3 : A), (l ++ [x2]) ++ [x] = x1 ++ y0 ++ [x3] -> Descl x1 /\ Descl (y0 ++ [x3])H0:l ++ [x2] = x0 ++ y0 ++ [x2]Descl x0 /\ Descl ((y0 ++ [x2]) ++ [x])A:SetleA:A -> A -> Propx:Al:Listx2:AHind:forall x1 y : List, l ++ [x2] = x1 ++ y -> Descl x1 /\ Descl yD:Descl (l ++ [x2])H:clos_refl A leA x x2x0, y0:ListIHy0:forall (x1 : List) (x3 : A), (l ++ [x2]) ++ [x] = x1 ++ y0 ++ [x3] -> Descl x1 /\ Descl (y0 ++ [x3])H0:Descl x0H1:Descl (y0 ++ [x2])Descl x0 /\ Descl ((y0 ++ [x2]) ++ [x])A:SetleA:A -> A -> Propx:Al:Listx2:AHind:forall x1 y : List, l ++ [x2] = x1 ++ y -> Descl x1 /\ Descl yD:Descl (l ++ [x2])H:clos_refl A leA x x2x0, y0:ListIHy0:forall (x1 : List) (x3 : A), (l ++ [x2]) ++ [x] = x1 ++ y0 ++ [x3] -> Descl x1 /\ Descl (y0 ++ [x3])H0:Descl x0H1:Descl (y0 ++ [x2])Descl x0A:SetleA:A -> A -> Propx:Al:Listx2:AHind:forall x1 y : List, l ++ [x2] = x1 ++ y -> Descl x1 /\ Descl yD:Descl (l ++ [x2])H:clos_refl A leA x x2x0, y0:ListIHy0:forall (x1 : List) (x3 : A), (l ++ [x2]) ++ [x] = x1 ++ y0 ++ [x3] -> Descl x1 /\ Descl (y0 ++ [x3])H0:Descl x0H1:Descl (y0 ++ [x2])Descl ((y0 ++ [x2]) ++ [x])apply d_conc; auto with sets. Qed.A:SetleA:A -> A -> Propx:Al:Listx2:AHind:forall x1 y : List, l ++ [x2] = x1 ++ y -> Descl x1 /\ Descl yD:Descl (l ++ [x2])H:clos_refl A leA x x2x0, y0:ListIHy0:forall (x1 : List) (x3 : A), (l ++ [x2]) ++ [x] = x1 ++ y0 ++ [x3] -> Descl x1 /\ Descl (y0 ++ [x3])H0:Descl x0H1:Descl (y0 ++ [x2])Descl ((y0 ++ [x2]) ++ [x])A:SetleA:A -> A -> Propforall x y : List, Descl (x ++ y) -> Descl x /\ Descl yA:SetleA:A -> A -> Propforall x y : List, Descl (x ++ y) -> Descl x /\ Descl yapply (dist_aux (x ++ y) H x y); auto with sets. Qed.A:SetleA:A -> A -> Propx, y:ListH:Descl (x ++ y)Descl x /\ Descl yA:SetleA:A -> A -> Propforall (a b : A) (x : List), Descl (x ++ [a]) /\ ltl (x ++ [a]) [b] -> clos_trans A leA a bA:SetleA:A -> A -> Propforall (a b : A) (x : List), Descl (x ++ [a]) /\ ltl (x ++ [a]) [b] -> clos_trans A leA a bA:SetleA:A -> A -> Propa, b:Ax:ListDescl (x ++ [a]) /\ ltl (x ++ [a]) [b] -> clos_trans A leA a bA:SetleA:A -> A -> Propa, b:Ax:ListDescl ([] ++ [a]) /\ ltl ([] ++ [a]) [b] -> clos_trans A leA a bA:SetleA:A -> A -> Propa, b:Ax:Listforall (a0 : A) (l : List), Descl ((a0 :: l) ++ [a]) /\ ltl ((a0 :: l) ++ [a]) [b] -> clos_trans A leA a bA:SetleA:A -> A -> Propa, b:Ax:ListDescl [a] /\ ltl [a] [b] -> clos_trans A leA a bA:SetleA:A -> A -> Propa, b:Ax:Listforall (a0 : A) (l : List), Descl ((a0 :: l) ++ [a]) /\ ltl ((a0 :: l) ++ [a]) [b] -> clos_trans A leA a bA:SetleA:A -> A -> Propa, b:Ax:ListH:Descl [a] /\ ltl [a] [b]Descl [a] -> ltl [a] [b] -> clos_trans A leA a bA:SetleA:A -> A -> Propa, b:Ax:Listforall (a0 : A) (l : List), Descl ((a0 :: l) ++ [a]) /\ ltl ((a0 :: l) ++ [a]) [b] -> clos_trans A leA a bA:SetleA:A -> A -> Propa, b:Ax:ListH:Descl [a] /\ ltl [a] [b]H0:Descl [a]H1:ltl [a] [b]clos_trans A leA a bA:SetleA:A -> A -> Propa, b:Ax:Listforall (a0 : A) (l : List), Descl ((a0 :: l) ++ [a]) /\ ltl ((a0 :: l) ++ [a]) [b] -> clos_trans A leA a bA:SetleA:A -> A -> Propa, b:Ax:ListH:Descl [a] /\ ltl [a] [b]H0:Descl [a]H1:ltl [a] [b]a0:Ax0, y:ListH3:ltl [] []H2:a0 = aH4:x0 = []H5:a = bH6:y = []clos_trans A leA b bA:SetleA:A -> A -> Propa, b:Ax:Listforall (a0 : A) (l : List), Descl ((a0 :: l) ++ [a]) /\ ltl ((a0 :: l) ++ [a]) [b] -> clos_trans A leA a bA:SetleA:A -> A -> Propa, b:Ax:Listforall (a0 : A) (l : List), Descl ((a0 :: l) ++ [a]) /\ ltl ((a0 :: l) ++ [a]) [b] -> clos_trans A leA a bA:SetleA:A -> A -> Propa, b:Ax:Lista0:Al:ListH:Descl ((a0 :: l) ++ [a]) /\ ltl ((a0 :: l) ++ [a]) [b]Descl ((a0 :: l) ++ [a]) -> ltl ((a0 :: l) ++ [a]) [b] -> clos_trans A leA a bA:SetleA:A -> A -> Propa, b:Ax:Lista0:Al:ListH:Descl ((a0 :: l) ++ [a]) /\ ltl ((a0 :: l) ++ [a]) [b]a0 :: l ++ [a] = (a0 :: l) ++ [a] -> Descl ((a0 :: l) ++ [a]) -> ltl ((a0 :: l) ++ [a]) [b] -> clos_trans A leA a bA:SetleA:A -> A -> Propa, b:Ax:Lista0:Al:ListH:Descl ((a0 :: l) ++ [a]) /\ ltl ((a0 :: l) ++ [a]) [b]E:a0 :: l ++ [a] = (a0 :: l) ++ [a]H0:Descl (a0 :: l ++ [a])H1:ltl (a0 :: l ++ [a]) [b]clos_trans A leA a bA:SetleA:A -> A -> Propa, b:Ax:Lista0:Al:ListH:Descl ((a0 :: l) ++ [a]) /\ ltl ((a0 :: l) ++ [a]) [b]E:a0 :: l ++ [a] = (a0 :: l) ++ [a]H0:Descl (a0 :: l ++ [a])H1:ltl (a0 :: l ++ [a]) [b]H2:clos_refl_trans A leA a a0clos_trans A leA a bA:SetleA:A -> A -> Propa, b:Ax:Lista0:Al:ListH:Descl ((a0 :: l) ++ [a]) /\ ltl ((a0 :: l) ++ [a]) [b]E:a0 :: l ++ [a] = (a0 :: l) ++ [a]H0:Descl (a0 :: l ++ [a])H1:ltl (a0 :: l ++ [a]) [b]H2:clos_refl_trans A leA a a0a1, b0:Ax0, y:ListH4:leA a0 bH3:a1 = a0H5:x0 = l ++ [a]H6:b0 = bH7:y = []clos_trans A leA a bA:SetleA:A -> A -> Propa, b:Ax:Lista0:Al:ListH:Descl ((a0 :: l) ++ [a]) /\ ltl ((a0 :: l) ++ [a]) [b]E:a0 :: l ++ [a] = (a0 :: l) ++ [a]H0:Descl (a0 :: l ++ [a])H1:ltl (a0 :: l ++ [a]) [b]H2:clos_refl_trans A leA a a0a1:Ax0, y:ListH4:ltl (l ++ [a]) []H3:a1 = a0H5:x0 = l ++ [a]H6:a0 = bH7:y = []clos_trans A leA a binversion H4. Qed.A:SetleA:A -> A -> Propa, b:Ax:Lista0:Al:ListH:Descl ((a0 :: l) ++ [a]) /\ ltl ((a0 :: l) ++ [a]) [b]E:a0 :: l ++ [a] = (a0 :: l) ++ [a]H0:Descl (a0 :: l ++ [a])H1:ltl (a0 :: l ++ [a]) [b]H2:clos_refl_trans A leA a a0a1:Ax0, y:ListH4:ltl (l ++ [a]) []H3:a1 = a0H5:x0 = l ++ [a]H6:a0 = bH7:y = []clos_trans A leA a bA:SetleA:A -> A -> Propforall (x : List) (a b : A), Descl (x ++ [a]) -> ltl (x ++ [a]) [b] -> ltl x [b]A:SetleA:A -> A -> Propforall (x : List) (a b : A), Descl (x ++ [a]) -> ltl (x ++ [a]) [b] -> ltl x [b]A:SetleA:A -> A -> Propx:Listforall a b : A, Descl (x ++ [a]) -> ltl (x ++ [a]) [b] -> ltl x [b]A:SetleA:A -> A -> Propx:Listforall a b : A, Descl ([] ++ [a]) -> ltl ([] ++ [a]) [b] -> ltl [] [b]A:SetleA:A -> A -> Propx:Listforall (a : A) (l : List) (a0 b : A), Descl ((a :: l) ++ [a0]) -> ltl ((a :: l) ++ [a0]) [b] -> ltl (a :: l) [b]A:SetleA:A -> A -> Propx:Listforall (a : A) (l : List) (a0 b : A), Descl ((a :: l) ++ [a0]) -> ltl ((a :: l) ++ [a0]) [b] -> ltl (a :: l) [b]A:SetleA:A -> A -> Propx:Lista:Al:Lista0, b:AH:Descl (a :: l ++ [a0])H0:ltl (a :: l ++ [a0]) [b]ltl (a :: l) [b]A:SetleA:A -> A -> Propx:Lista:Al:Lista0, b:AH:Descl (a :: l ++ [a0])H1:leA a bltl (a :: l) [b]A:SetleA:A -> A -> Propx:Lista:Al:Lista0, b:AH:Descl (a :: l ++ [a0])H1:ltl (l ++ [a0]) []ltl (b :: l) [b]inversion_clear H1. Qed.A:SetleA:A -> A -> Propx:Lista:Al:Lista0, b:AH:Descl (a :: l ++ [a0])H1:ltl (l ++ [a0]) []ltl (b :: l) [b]A:SetleA:A -> A -> Propforall (x1 x2 : List) (y1 : Descl (x1 ++ x2)), Acc Lex_Exp << x1 ++ x2, y1 >> -> forall (x : List) (y : Descl x), ltl x (x1 ++ x2) -> Acc Lex_Exp << x, y >>A:SetleA:A -> A -> Propforall (x1 x2 : List) (y1 : Descl (x1 ++ x2)), Acc Lex_Exp << x1 ++ x2, y1 >> -> forall (x : List) (y : Descl x), ltl x (x1 ++ x2) -> Acc Lex_Exp << x, y >>A:SetleA:A -> A -> Propx1, x2:Listy1:Descl (x1 ++ x2)H:Acc Lex_Exp << x1 ++ x2, y1 >>x:Listy:Descl xH0:ltl x (x1 ++ x2)Acc Lex_Exp << x, y >>A:SetleA:A -> A -> Propx1, x2:Listy1:Descl (x1 ++ x2)H:Acc Lex_Exp << x1 ++ x2, y1 >>x:Listy:Descl xH0:ltl x (x1 ++ x2)Acc Lex_Exp << x1 ++ x2, y1 >>A:SetleA:A -> A -> Propx1, x2:Listy1:Descl (x1 ++ x2)H:Acc Lex_Exp << x1 ++ x2, y1 >>x:Listy:Descl xH0:ltl x (x1 ++ x2)Lex_Exp << x, y >> << x1 ++ x2, y1 >>unfold lex_exp; simpl; auto with sets. Qed.A:SetleA:A -> A -> Propx1, x2:Listy1:Descl (x1 ++ x2)H:Acc Lex_Exp << x1 ++ x2, y1 >>x:Listy:Descl xH0:ltl x (x1 ++ x2)Lex_Exp << x, y >> << x1 ++ x2, y1 >>A:SetleA:A -> A -> Propwell_founded leA -> well_founded Lex_ExpA:SetleA:A -> A -> Propwell_founded leA -> well_founded Lex_ExpA:SetleA:A -> A -> Propwell_founded leA -> forall a : Power, Acc Lex_Exp aA:SetleA:A -> A -> PropH:well_founded leAa:Powerx:Listy:Descl xAcc Lex_Exp << x, y >>A:SetleA:A -> A -> PropH:well_founded leAa:Powerx:Listy:Descl xforall y0 : Power, Lex_Exp y0 << x, y >> -> Acc Lex_Exp y0A:SetleA:A -> A -> PropH:well_founded leAa:Powerx:Listy:Descl xy0:Powerforall (x0 : List) (p : Descl x0), Lex_Exp << x0, p >> << x, y >> -> Acc Lex_Exp << x0, p >>A:SetleA:A -> A -> PropH:well_founded leAa:Powerx:Listy:Descl xy0:Powerforall (x0 : List) (p : Descl x0), ltl x0 x -> Acc Lex_Exp << x0, p >>A:SetleA:A -> A -> PropH:well_founded leAa:Powerx:Listy:Descl xy0:Powerforall (x0 : List) (y1 : Descl x0), ltl x0 [] -> Acc Lex_Exp << x0, y1 >>A:SetleA:A -> A -> PropH:well_founded leAa:Powerx:Listy:Descl xy0:Powerforall (x0 : A) (l : List), (forall (x1 : List) (y1 : Descl x1), ltl x1 l -> Acc Lex_Exp << x1, y1 >>) -> forall (x1 : List) (y1 : Descl x1), ltl x1 (l ++ [x0]) -> Acc Lex_Exp << x1, y1 >>A:SetleA:A -> A -> PropH:well_founded leAa:Powerx:Listy:Descl xy0:Powerx0:Listy1:Descl x0H0:ltl x0 []Acc Lex_Exp << x0, y1 >>A:SetleA:A -> A -> PropH:well_founded leAa:Powerx:Listy:Descl xy0:Powerforall (x0 : A) (l : List), (forall (x1 : List) (y1 : Descl x1), ltl x1 l -> Acc Lex_Exp << x1, y1 >>) -> forall (x1 : List) (y1 : Descl x1), ltl x1 (l ++ [x0]) -> Acc Lex_Exp << x1, y1 >>A:SetleA:A -> A -> PropH:well_founded leAa:Powerx:Listy:Descl xy0:Powerforall (x0 : A) (l : List), (forall (x1 : List) (y1 : Descl x1), ltl x1 l -> Acc Lex_Exp << x1, y1 >>) -> forall (x1 : List) (y1 : Descl x1), ltl x1 (l ++ [x0]) -> Acc Lex_Exp << x1, y1 >>A:SetleA:A -> A -> PropH:well_founded leAa:Powerx:Listy:Descl xy0:Powerx0:Aforall l : List, (forall (x1 : List) (y1 : Descl x1), ltl x1 l -> Acc Lex_Exp << x1, y1 >>) -> forall (x1 : List) (y1 : Descl x1), ltl x1 (l ++ [x0]) -> Acc Lex_Exp << x1, y1 >>A:SetleA:A -> A -> PropH:well_founded leAa:Powerx:Listy:Descl xy0:Powerx0:A(forall P : A -> Prop, (forall x1 : A, (forall y1 : A, clos_trans A leA y1 x1 -> P y1) -> P x1) -> forall a0 : A, P a0) -> forall l : List, (forall (x1 : List) (y1 : Descl x1), ltl x1 l -> Acc Lex_Exp << x1, y1 >>) -> forall (x1 : List) (y1 : Descl x1), ltl x1 (l ++ [x0]) -> Acc Lex_Exp << x1, y1 >>A:SetleA:A -> A -> PropH:well_founded leAa:Powerx:Listy:Descl xy0:Powerx0:AGR:forall P : A -> Prop, (forall x1 : A, (forall y1 : A, clos_trans A leA y1 x1 -> P y1) -> P x1) -> forall a0 : A, P a0forall l : List, (forall (x1 : List) (y1 : Descl x1), ltl x1 l -> Acc Lex_Exp << x1, y1 >>) -> forall (x1 : List) (y1 : Descl x1), ltl x1 (l ++ [x0]) -> Acc Lex_Exp << x1, y1 >>A:SetleA:A -> A -> PropH:well_founded leAa:Powerx:Listy:Descl xy0:Powerx0:AGR:forall P : A -> Prop, (forall x1 : A, (forall y1 : A, clos_trans A leA y1 x1 -> P y1) -> P x1) -> forall a0 : A, P a0forall x1 : A, (forall y1 : A, clos_trans A leA y1 x1 -> forall l : List, (forall (x2 : List) (y2 : Descl x2), ltl x2 l -> Acc Lex_Exp << x2, y2 >>) -> forall (x2 : List) (y2 : Descl x2), ltl x2 (l ++ [y1]) -> Acc Lex_Exp << x2, y2 >>) -> forall l : List, (forall (x2 : List) (y1 : Descl x2), ltl x2 l -> Acc Lex_Exp << x2, y1 >>) -> forall (x2 : List) (y1 : Descl x2), ltl x2 (l ++ [x1]) -> Acc Lex_Exp << x2, y1 >>A:SetleA:A -> A -> PropH:well_founded leAa:Powerx:Listy:Descl xy0:Powerx0:AGR:forall P : A -> Prop, (forall x3 : A, (forall y2 : A, clos_trans A leA y2 x3 -> P y2) -> P x3) -> forall a0 : A, P a0x1:AHInd:forall y2 : A, clos_trans A leA y2 x1 -> forall l0 : List, (forall (x3 : List) (y3 : Descl x3), ltl x3 l0 -> Acc Lex_Exp << x3, y3 >>) -> forall (x3 : List) (y3 : Descl x3), ltl x3 (l0 ++ [y2]) -> Acc Lex_Exp << x3, y3 >>l:ListH0:forall (x3 : List) (y2 : Descl x3), ltl x3 l -> Acc Lex_Exp << x3, y2 >>x2:Listy1:Descl x2H1:ltl x2 (l ++ [x1])Acc Lex_Exp << x2, y1 >>A:SetleA:A -> A -> PropH:well_founded leAa:Powerx:Listy:Descl xy0:Powerx0:AGR:forall P : A -> Prop, (forall x3 : A, (forall y2 : A, clos_trans A leA y2 x3 -> P y2) -> P x3) -> forall a0 : A, P a0x1:AHInd:forall y2 : A, clos_trans A leA y2 x1 -> forall l0 : List, (forall (x3 : List) (y3 : Descl x3), ltl x3 l0 -> Acc Lex_Exp << x3, y3 >>) -> forall (x3 : List) (y3 : Descl x3), ltl x3 (l0 ++ [y2]) -> Acc Lex_Exp << x3, y3 >>l:ListH0:forall (x3 : List) (y2 : Descl x3), ltl x3 l -> Acc Lex_Exp << x3, y2 >>x2:Listy1:Descl x2H1:ltl x2 (l ++ [x1])ltl x2 l \/ (exists y' : List, x2 = l ++ y' /\ ltl y' [x1]) -> Acc Lex_Exp << x2, y1 >>A:SetleA:A -> A -> PropH:well_founded leAa:Powerx:Listy:Descl xy0:Powerx0:AGR:forall P : A -> Prop, (forall x3 : A, (forall y2 : A, clos_trans A leA y2 x3 -> P y2) -> P x3) -> forall a0 : A, P a0x1:AHInd:forall y2 : A, clos_trans A leA y2 x1 -> forall l0 : List, (forall (x3 : List) (y3 : Descl x3), ltl x3 l0 -> Acc Lex_Exp << x3, y3 >>) -> forall (x3 : List) (y3 : Descl x3), ltl x3 (l0 ++ [y2]) -> Acc Lex_Exp << x3, y3 >>l:ListH0:forall (x3 : List) (y2 : Descl x3), ltl x3 l -> Acc Lex_Exp << x3, y2 >>x2:Listy1:Descl x2H1:ltl x2 (l ++ [x1])H2:ltl x2 l \/ (exists y' : List, x2 = l ++ y' /\ ltl y' [x1])ltl x2 l -> Acc Lex_Exp << x2, y1 >>A:SetleA:A -> A -> PropH:well_founded leAa:Powerx:Listy:Descl xy0:Powerx0:AGR:forall P : A -> Prop, (forall x3 : A, (forall y2 : A, clos_trans A leA y2 x3 -> P y2) -> P x3) -> forall a0 : A, P a0x1:AHInd:forall y2 : A, clos_trans A leA y2 x1 -> forall l0 : List, (forall (x3 : List) (y3 : Descl x3), ltl x3 l0 -> Acc Lex_Exp << x3, y3 >>) -> forall (x3 : List) (y3 : Descl x3), ltl x3 (l0 ++ [y2]) -> Acc Lex_Exp << x3, y3 >>l:ListH0:forall (x3 : List) (y2 : Descl x3), ltl x3 l -> Acc Lex_Exp << x3, y2 >>x2:Listy1:Descl x2H1:ltl x2 (l ++ [x1])H2:ltl x2 l \/ (exists y' : List, x2 = l ++ y' /\ ltl y' [x1])(exists y' : List, x2 = l ++ y' /\ ltl y' [x1]) -> Acc Lex_Exp << x2, y1 >>A:SetleA:A -> A -> PropH:well_founded leAa:Powerx:Listy:Descl xy0:Powerx0:AGR:forall P : A -> Prop, (forall x3 : A, (forall y2 : A, clos_trans A leA y2 x3 -> P y2) -> P x3) -> forall a0 : A, P a0x1:AHInd:forall y2 : A, clos_trans A leA y2 x1 -> forall l0 : List, (forall (x3 : List) (y3 : Descl x3), ltl x3 l0 -> Acc Lex_Exp << x3, y3 >>) -> forall (x3 : List) (y3 : Descl x3), ltl x3 (l0 ++ [y2]) -> Acc Lex_Exp << x3, y3 >>l:ListH0:forall (x3 : List) (y2 : Descl x3), ltl x3 l -> Acc Lex_Exp << x3, y2 >>x2:Listy1:Descl x2H1:ltl x2 (l ++ [x1])H2:ltl x2 l \/ (exists y' : List, x2 = l ++ y' /\ ltl y' [x1])(exists y' : List, x2 = l ++ y' /\ ltl y' [x1]) -> Acc Lex_Exp << x2, y1 >>A:SetleA:A -> A -> PropH:well_founded leAa:Powerx:Listy:Descl xy0:Powerx0:AGR:forall P : A -> Prop, (forall x3 : A, (forall y2 : A, clos_trans A leA y2 x3 -> P y2) -> P x3) -> forall a0 : A, P a0x1:AHInd:forall y2 : A, clos_trans A leA y2 x1 -> forall l0 : List, (forall (x3 : List) (y3 : Descl x3), ltl x3 l0 -> Acc Lex_Exp << x3, y3 >>) -> forall (x3 : List) (y3 : Descl x3), ltl x3 (l0 ++ [y2]) -> Acc Lex_Exp << x3, y3 >>l:ListH0:forall (x3 : List) (y2 : Descl x3), ltl x3 l -> Acc Lex_Exp << x3, y2 >>x2:Listy1:Descl x2H1:ltl x2 (l ++ [x1])H2:ltl x2 l \/ (exists y' : List, x2 = l ++ y' /\ ltl y' [x1])H3:exists y' : List, x2 = l ++ y' /\ ltl y' [x1]forall x3 : List, x2 = l ++ x3 /\ ltl x3 [x1] -> Acc Lex_Exp << x2, y1 >>A:SetleA:A -> A -> PropH:well_founded leAa:Powerx:Listy:Descl xy0:Powerx0:AGR:forall P : A -> Prop, (forall x4 : A, (forall y2 : A, clos_trans A leA y2 x4 -> P y2) -> P x4) -> forall a0 : A, P a0x1:AHInd:forall y2 : A, clos_trans A leA y2 x1 -> forall l0 : List, (forall (x4 : List) (y3 : Descl x4), ltl x4 l0 -> Acc Lex_Exp << x4, y3 >>) -> forall (x4 : List) (y3 : Descl x4), ltl x4 (l0 ++ [y2]) -> Acc Lex_Exp << x4, y3 >>l:ListH0:forall (x4 : List) (y2 : Descl x4), ltl x4 l -> Acc Lex_Exp << x4, y2 >>x2:Listy1:Descl x2H1:ltl x2 (l ++ [x1])H2:ltl x2 l \/ (exists y' : List, x2 = l ++ y' /\ ltl y' [x1])H3:exists y' : List, x2 = l ++ y' /\ ltl y' [x1]x3:ListH4:x2 = l ++ x3 /\ ltl x3 [x1]x2 = l ++ x3 -> ltl x3 [x1] -> Acc Lex_Exp << x2, y1 >>A:SetleA:A -> A -> PropH:well_founded leAa:Powerx:Listy:Descl xy0:Powerx0:AGR:forall P : A -> Prop, (forall x4 : A, (forall y2 : A, clos_trans A leA y2 x4 -> P y2) -> P x4) -> forall a0 : A, P a0x1:AHInd:forall y2 : A, clos_trans A leA y2 x1 -> forall l0 : List, (forall (x4 : List) (y3 : Descl x4), ltl x4 l0 -> Acc Lex_Exp << x4, y3 >>) -> forall (x4 : List) (y3 : Descl x4), ltl x4 (l0 ++ [y2]) -> Acc Lex_Exp << x4, y3 >>l:ListH0:forall (x4 : List) (y2 : Descl x4), ltl x4 l -> Acc Lex_Exp << x4, y2 >>x2:Listy1:Descl x2H1:ltl x2 (l ++ [x1])H3:exists y' : List, x2 = l ++ y' /\ ltl y' [x1]x3:Listx2 = l ++ x3 -> ltl x3 [x1] -> Acc Lex_Exp << x2, y1 >>A:SetleA:A -> A -> PropH:well_founded leAa:Powerx:Listy:Descl xy0:Powerx0:AGR:forall P : A -> Prop, (forall x4 : A, (forall y1 : A, clos_trans A leA y1 x4 -> P y1) -> P x4) -> forall a0 : A, P a0x1:AHInd:forall y1 : A, clos_trans A leA y1 x1 -> forall l0 : List, (forall (x4 : List) (y2 : Descl x4), ltl x4 l0 -> Acc Lex_Exp << x4, y2 >>) -> forall (x4 : List) (y2 : Descl x4), ltl x4 (l0 ++ [y1]) -> Acc Lex_Exp << x4, y2 >>l:ListH0:forall (x4 : List) (y1 : Descl x4), ltl x4 l -> Acc Lex_Exp << x4, y1 >>x2:ListH1:ltl x2 (l ++ [x1])H3:exists y' : List, x2 = l ++ y' /\ ltl y' [x1]x3:ListH2:x2 = l ++ x3forall y1 : Descl x2, ltl x3 [x1] -> Acc Lex_Exp << x2, y1 >>A:SetleA:A -> A -> PropH:well_founded leAa:Powerx:Listy:Descl xy0:Powerx0:AGR:forall P : A -> Prop, (forall x4 : A, (forall y1 : A, clos_trans A leA y1 x4 -> P y1) -> P x4) -> forall a0 : A, P a0x1:AHInd:forall y1 : A, clos_trans A leA y1 x1 -> forall l0 : List, (forall (x4 : List) (y2 : Descl x4), ltl x4 l0 -> Acc Lex_Exp << x4, y2 >>) -> forall (x4 : List) (y2 : Descl x4), ltl x4 (l0 ++ [y1]) -> Acc Lex_Exp << x4, y2 >>l:ListH0:forall (x4 : List) (y1 : Descl x4), ltl x4 l -> Acc Lex_Exp << x4, y1 >>x2:ListH1:ltl x2 (l ++ [x1])H3:exists y' : List, x2 = l ++ y' /\ ltl y' [x1]x3:ListH2:x2 = l ++ x3forall y1 : Descl (l ++ x3), ltl x3 [x1] -> Acc Lex_Exp << l ++ x3, y1 >>A:SetleA:A -> A -> PropH:well_founded leAa:Powerx:Listy:Descl xy0:Powerx0:AGR:forall P : A -> Prop, (forall x4 : A, (forall y1 : A, clos_trans A leA y1 x4 -> P y1) -> P x4) -> forall a0 : A, P a0x1:AHInd:forall y1 : A, clos_trans A leA y1 x1 -> forall l0 : List, (forall (x4 : List) (y2 : Descl x4), ltl x4 l0 -> Acc Lex_Exp << x4, y2 >>) -> forall (x4 : List) (y2 : Descl x4), ltl x4 (l0 ++ [y1]) -> Acc Lex_Exp << x4, y2 >>l:ListH0:forall (x4 : List) (y1 : Descl x4), ltl x4 l -> Acc Lex_Exp << x4, y1 >>x2:ListH1:ltl x2 (l ++ [x1])H3:exists y' : List, x2 = l ++ y' /\ ltl y' [x1]x3:ListH2:x2 = l ++ x3forall y1 : Descl (l ++ []), ltl [] [x1] -> Acc Lex_Exp << l ++ [], y1 >>A:SetleA:A -> A -> PropH:well_founded leAa:Powerx:Listy:Descl xy0:Powerx0:AGR:forall P : A -> Prop, (forall x4 : A, (forall y1 : A, clos_trans A leA y1 x4 -> P y1) -> P x4) -> forall a0 : A, P a0x1:AHInd:forall y1 : A, clos_trans A leA y1 x1 -> forall l0 : List, (forall (x4 : List) (y2 : Descl x4), ltl x4 l0 -> Acc Lex_Exp << x4, y2 >>) -> forall (x4 : List) (y2 : Descl x4), ltl x4 (l0 ++ [y1]) -> Acc Lex_Exp << x4, y2 >>l:ListH0:forall (x4 : List) (y1 : Descl x4), ltl x4 l -> Acc Lex_Exp << x4, y1 >>x2:ListH1:ltl x2 (l ++ [x1])H3:exists y' : List, x2 = l ++ y' /\ ltl y' [x1]x3:ListH2:x2 = l ++ x3forall (x4 : A) (l0 : List), (forall y1 : Descl (l ++ l0), ltl l0 [x1] -> Acc Lex_Exp << l ++ l0, y1 >>) -> forall y1 : Descl (l ++ l0 ++ [x4]), ltl (l0 ++ [x4]) [x1] -> Acc Lex_Exp << l ++ l0 ++ [x4], y1 >>A:SetleA:A -> A -> PropH:well_founded leAa:Powerx:Listy:Descl xy0:Powerx0:AGR:forall P : A -> Prop, (forall x4 : A, (forall y2 : A, clos_trans A leA y2 x4 -> P y2) -> P x4) -> forall a0 : A, P a0x1:AHInd:forall y2 : A, clos_trans A leA y2 x1 -> forall l0 : List, (forall (x4 : List) (y3 : Descl x4), ltl x4 l0 -> Acc Lex_Exp << x4, y3 >>) -> forall (x4 : List) (y3 : Descl x4), ltl x4 (l0 ++ [y2]) -> Acc Lex_Exp << x4, y3 >>l:ListH0:forall (x4 : List) (y2 : Descl x4), ltl x4 l -> Acc Lex_Exp << x4, y2 >>x2:ListH1:ltl x2 (l ++ [x1])H3:exists y' : List, x2 = l ++ y' /\ ltl y' [x1]x3:ListH2:x2 = l ++ x3y1:Descl (l ++ [])H4:ltl [] [x1]Acc Lex_Exp << l ++ [], y1 >>A:SetleA:A -> A -> PropH:well_founded leAa:Powerx:Listy:Descl xy0:Powerx0:AGR:forall P : A -> Prop, (forall x4 : A, (forall y1 : A, clos_trans A leA y1 x4 -> P y1) -> P x4) -> forall a0 : A, P a0x1:AHInd:forall y1 : A, clos_trans A leA y1 x1 -> forall l0 : List, (forall (x4 : List) (y2 : Descl x4), ltl x4 l0 -> Acc Lex_Exp << x4, y2 >>) -> forall (x4 : List) (y2 : Descl x4), ltl x4 (l0 ++ [y1]) -> Acc Lex_Exp << x4, y2 >>l:ListH0:forall (x4 : List) (y1 : Descl x4), ltl x4 l -> Acc Lex_Exp << x4, y1 >>x2:ListH1:ltl x2 (l ++ [x1])H3:exists y' : List, x2 = l ++ y' /\ ltl y' [x1]x3:ListH2:x2 = l ++ x3forall (x4 : A) (l0 : List), (forall y1 : Descl (l ++ l0), ltl l0 [x1] -> Acc Lex_Exp << l ++ l0, y1 >>) -> forall y1 : Descl (l ++ l0 ++ [x4]), ltl (l0 ++ [x4]) [x1] -> Acc Lex_Exp << l ++ l0 ++ [x4], y1 >>A:SetleA:A -> A -> PropH:well_founded leAa:Powerx:Listy:Descl xy0:Powerx0:AGR:forall P : A -> Prop, (forall x4 : A, (forall y2 : A, clos_trans A leA y2 x4 -> P y2) -> P x4) -> forall a0 : A, P a0x1:AHInd:forall y2 : A, clos_trans A leA y2 x1 -> forall l0 : List, (forall (x4 : List) (y3 : Descl x4), ltl x4 l0 -> Acc Lex_Exp << x4, y3 >>) -> forall (x4 : List) (y3 : Descl x4), ltl x4 (l0 ++ [y2]) -> Acc Lex_Exp << x4, y3 >>l:ListH0:forall (x4 : List) (y2 : Descl x4), ltl x4 l -> Acc Lex_Exp << x4, y2 >>x2:ListH1:ltl x2 (l ++ [x1])H3:exists y' : List, x2 = l ++ y' /\ ltl y' [x1]x3:ListH2:x2 = l ++ x3y1:Descl (l ++ [])H4:ltl [] [x1]Heq:l = l ++ []Acc Lex_Exp << l ++ [], y1 >>A:SetleA:A -> A -> PropH:well_founded leAa:Powerx:Listy:Descl xy0:Powerx0:AGR:forall P : A -> Prop, (forall x4 : A, (forall y1 : A, clos_trans A leA y1 x4 -> P y1) -> P x4) -> forall a0 : A, P a0x1:AHInd:forall y1 : A, clos_trans A leA y1 x1 -> forall l0 : List, (forall (x4 : List) (y2 : Descl x4), ltl x4 l0 -> Acc Lex_Exp << x4, y2 >>) -> forall (x4 : List) (y2 : Descl x4), ltl x4 (l0 ++ [y1]) -> Acc Lex_Exp << x4, y2 >>l:ListH0:forall (x4 : List) (y1 : Descl x4), ltl x4 l -> Acc Lex_Exp << x4, y1 >>x2:ListH1:ltl x2 (l ++ [x1])H3:exists y' : List, x2 = l ++ y' /\ ltl y' [x1]x3:ListH2:x2 = l ++ x3forall (x4 : A) (l0 : List), (forall y1 : Descl (l ++ l0), ltl l0 [x1] -> Acc Lex_Exp << l ++ l0, y1 >>) -> forall y1 : Descl (l ++ l0 ++ [x4]), ltl (l0 ++ [x4]) [x1] -> Acc Lex_Exp << l ++ l0 ++ [x4], y1 >>A:SetleA:A -> A -> PropH:well_founded leAa:Powerx:Listy:Descl xy0:Powerx0:AGR:forall P : A -> Prop, (forall x4 : A, (forall y2 : A, clos_trans A leA y2 x4 -> P y2) -> P x4) -> forall a0 : A, P a0x1:AHInd:forall y2 : A, clos_trans A leA y2 x1 -> forall l0 : List, (forall (x4 : List) (y3 : Descl x4), ltl x4 l0 -> Acc Lex_Exp << x4, y3 >>) -> forall (x4 : List) (y3 : Descl x4), ltl x4 (l0 ++ [y2]) -> Acc Lex_Exp << x4, y3 >>l:ListH0:forall (x4 : List) (y2 : Descl x4), ltl x4 l -> Acc Lex_Exp << x4, y2 >>x2:ListH1:ltl x2 (l ++ [x1])H3:exists y' : List, x2 = l ++ y' /\ ltl y' [x1]x3:ListH2:x2 = l ++ x3y1:Descl (l ++ [])H4:ltl [] [x1]Heq:l = l ++ []forall y2 : Descl (l ++ []), Acc Lex_Exp << l ++ [], y2 >>A:SetleA:A -> A -> PropH:well_founded leAa:Powerx:Listy:Descl xy0:Powerx0:AGR:forall P : A -> Prop, (forall x4 : A, (forall y1 : A, clos_trans A leA y1 x4 -> P y1) -> P x4) -> forall a0 : A, P a0x1:AHInd:forall y1 : A, clos_trans A leA y1 x1 -> forall l0 : List, (forall (x4 : List) (y2 : Descl x4), ltl x4 l0 -> Acc Lex_Exp << x4, y2 >>) -> forall (x4 : List) (y2 : Descl x4), ltl x4 (l0 ++ [y1]) -> Acc Lex_Exp << x4, y2 >>l:ListH0:forall (x4 : List) (y1 : Descl x4), ltl x4 l -> Acc Lex_Exp << x4, y1 >>x2:ListH1:ltl x2 (l ++ [x1])H3:exists y' : List, x2 = l ++ y' /\ ltl y' [x1]x3:ListH2:x2 = l ++ x3forall (x4 : A) (l0 : List), (forall y1 : Descl (l ++ l0), ltl l0 [x1] -> Acc Lex_Exp << l ++ l0, y1 >>) -> forall y1 : Descl (l ++ l0 ++ [x4]), ltl (l0 ++ [x4]) [x1] -> Acc Lex_Exp << l ++ l0 ++ [x4], y1 >>A:SetleA:A -> A -> PropH:well_founded leAa:Powerx:Listy:Descl xy0:Powerx0:AGR:forall P : A -> Prop, (forall x4 : A, (forall y1 : A, clos_trans A leA y1 x4 -> P y1) -> P x4) -> forall a0 : A, P a0x1:AHInd:forall y1 : A, clos_trans A leA y1 x1 -> forall l0 : List, (forall (x4 : List) (y2 : Descl x4), ltl x4 l0 -> Acc Lex_Exp << x4, y2 >>) -> forall (x4 : List) (y2 : Descl x4), ltl x4 (l0 ++ [y1]) -> Acc Lex_Exp << x4, y2 >>l:ListH0:forall (x4 : List) (y1 : Descl x4), ltl x4 l -> Acc Lex_Exp << x4, y1 >>x2:ListH1:ltl x2 (l ++ [x1])H3:exists y' : List, x2 = l ++ y' /\ ltl y' [x1]x3:ListH2:x2 = l ++ x3H4:ltl [] [x1]Heq:l = l ++ []forall y1 : Descl (l ++ []), Acc Lex_Exp << l ++ [], y1 >>A:SetleA:A -> A -> PropH:well_founded leAa:Powerx:Listy:Descl xy0:Powerx0:AGR:forall P : A -> Prop, (forall x4 : A, (forall y1 : A, clos_trans A leA y1 x4 -> P y1) -> P x4) -> forall a0 : A, P a0x1:AHInd:forall y1 : A, clos_trans A leA y1 x1 -> forall l0 : List, (forall (x4 : List) (y2 : Descl x4), ltl x4 l0 -> Acc Lex_Exp << x4, y2 >>) -> forall (x4 : List) (y2 : Descl x4), ltl x4 (l0 ++ [y1]) -> Acc Lex_Exp << x4, y2 >>l:ListH0:forall (x4 : List) (y1 : Descl x4), ltl x4 l -> Acc Lex_Exp << x4, y1 >>x2:ListH1:ltl x2 (l ++ [x1])H3:exists y' : List, x2 = l ++ y' /\ ltl y' [x1]x3:ListH2:x2 = l ++ x3forall (x4 : A) (l0 : List), (forall y1 : Descl (l ++ l0), ltl l0 [x1] -> Acc Lex_Exp << l ++ l0, y1 >>) -> forall y1 : Descl (l ++ l0 ++ [x4]), ltl (l0 ++ [x4]) [x1] -> Acc Lex_Exp << l ++ l0 ++ [x4], y1 >>A:SetleA:A -> A -> PropH:well_founded leAa:Powerx:Listy:Descl xy0:Powerx0:AGR:forall P : A -> Prop, (forall x4 : A, (forall y1 : A, clos_trans A leA y1 x4 -> P y1) -> P x4) -> forall a0 : A, P a0x1:AHInd:forall y1 : A, clos_trans A leA y1 x1 -> forall l0 : List, (forall (x4 : List) (y2 : Descl x4), ltl x4 l0 -> Acc Lex_Exp << x4, y2 >>) -> forall (x4 : List) (y2 : Descl x4), ltl x4 (l0 ++ [y1]) -> Acc Lex_Exp << x4, y2 >>l:ListH0:forall (x4 : List) (y1 : Descl x4), ltl x4 l -> Acc Lex_Exp << x4, y1 >>x2:ListH1:ltl x2 (l ++ [x1])H3:exists y' : List, x2 = l ++ y' /\ ltl y' [x1]x3:ListH2:x2 = l ++ x3H4:ltl [] [x1]Heq:l = l ++ []forall y1 : Descl l, Acc Lex_Exp << l, y1 >>A:SetleA:A -> A -> PropH:well_founded leAa:Powerx:Listy:Descl xy0:Powerx0:AGR:forall P : A -> Prop, (forall x4 : A, (forall y1 : A, clos_trans A leA y1 x4 -> P y1) -> P x4) -> forall a0 : A, P a0x1:AHInd:forall y1 : A, clos_trans A leA y1 x1 -> forall l0 : List, (forall (x4 : List) (y2 : Descl x4), ltl x4 l0 -> Acc Lex_Exp << x4, y2 >>) -> forall (x4 : List) (y2 : Descl x4), ltl x4 (l0 ++ [y1]) -> Acc Lex_Exp << x4, y2 >>l:ListH0:forall (x4 : List) (y1 : Descl x4), ltl x4 l -> Acc Lex_Exp << x4, y1 >>x2:ListH1:ltl x2 (l ++ [x1])H3:exists y' : List, x2 = l ++ y' /\ ltl y' [x1]x3:ListH2:x2 = l ++ x3forall (x4 : A) (l0 : List), (forall y1 : Descl (l ++ l0), ltl l0 [x1] -> Acc Lex_Exp << l ++ l0, y1 >>) -> forall y1 : Descl (l ++ l0 ++ [x4]), ltl (l0 ++ [x4]) [x1] -> Acc Lex_Exp << l ++ l0 ++ [x4], y1 >>A:SetleA:A -> A -> PropH:well_founded leAa:Powerx:Listy:Descl xy0:Powerx0:AGR:forall P : A -> Prop, (forall x4 : A, (forall y2 : A, clos_trans A leA y2 x4 -> P y2) -> P x4) -> forall a0 : A, P a0x1:AHInd:forall y2 : A, clos_trans A leA y2 x1 -> forall l0 : List, (forall (x4 : List) (y3 : Descl x4), ltl x4 l0 -> Acc Lex_Exp << x4, y3 >>) -> forall (x4 : List) (y3 : Descl x4), ltl x4 (l0 ++ [y2]) -> Acc Lex_Exp << x4, y3 >>l:ListH0:forall (x4 : List) (y2 : Descl x4), ltl x4 l -> Acc Lex_Exp << x4, y2 >>x2:ListH1:ltl x2 (l ++ [x1])H3:exists y' : List, x2 = l ++ y' /\ ltl y' [x1]x3:ListH2:x2 = l ++ x3H4:ltl [] [x1]Heq:l = l ++ []y1:Descl lAcc Lex_Exp << l, y1 >>A:SetleA:A -> A -> PropH:well_founded leAa:Powerx:Listy:Descl xy0:Powerx0:AGR:forall P : A -> Prop, (forall x4 : A, (forall y1 : A, clos_trans A leA y1 x4 -> P y1) -> P x4) -> forall a0 : A, P a0x1:AHInd:forall y1 : A, clos_trans A leA y1 x1 -> forall l0 : List, (forall (x4 : List) (y2 : Descl x4), ltl x4 l0 -> Acc Lex_Exp << x4, y2 >>) -> forall (x4 : List) (y2 : Descl x4), ltl x4 (l0 ++ [y1]) -> Acc Lex_Exp << x4, y2 >>l:ListH0:forall (x4 : List) (y1 : Descl x4), ltl x4 l -> Acc Lex_Exp << x4, y1 >>x2:ListH1:ltl x2 (l ++ [x1])H3:exists y' : List, x2 = l ++ y' /\ ltl y' [x1]x3:ListH2:x2 = l ++ x3forall (x4 : A) (l0 : List), (forall y1 : Descl (l ++ l0), ltl l0 [x1] -> Acc Lex_Exp << l ++ l0, y1 >>) -> forall y1 : Descl (l ++ l0 ++ [x4]), ltl (l0 ++ [x4]) [x1] -> Acc Lex_Exp << l ++ l0 ++ [x4], y1 >>A:SetleA:A -> A -> PropH:well_founded leAa:Powerx:Listy:Descl xy0:Powerx0:AGR:forall P : A -> Prop, (forall x4 : A, (forall y2 : A, clos_trans A leA y2 x4 -> P y2) -> P x4) -> forall a0 : A, P a0x1:AHInd:forall y2 : A, clos_trans A leA y2 x1 -> forall l0 : List, (forall (x4 : List) (y3 : Descl x4), ltl x4 l0 -> Acc Lex_Exp << x4, y3 >>) -> forall (x4 : List) (y3 : Descl x4), ltl x4 (l0 ++ [y2]) -> Acc Lex_Exp << x4, y3 >>l:ListH0:forall (x4 : List) (y2 : Descl x4), ltl x4 l -> Acc Lex_Exp << x4, y2 >>x2:ListH1:ltl x2 (l ++ [x1])H3:exists y' : List, x2 = l ++ y' /\ ltl y' [x1]x3:ListH2:x2 = l ++ x3H4:ltl [] [x1]Heq:l = l ++ []y1:Descl lforall y2 : Power, Lex_Exp y2 << l, y1 >> -> Acc Lex_Exp y2A:SetleA:A -> A -> PropH:well_founded leAa:Powerx:Listy:Descl xy0:Powerx0:AGR:forall P : A -> Prop, (forall x4 : A, (forall y1 : A, clos_trans A leA y1 x4 -> P y1) -> P x4) -> forall a0 : A, P a0x1:AHInd:forall y1 : A, clos_trans A leA y1 x1 -> forall l0 : List, (forall (x4 : List) (y2 : Descl x4), ltl x4 l0 -> Acc Lex_Exp << x4, y2 >>) -> forall (x4 : List) (y2 : Descl x4), ltl x4 (l0 ++ [y1]) -> Acc Lex_Exp << x4, y2 >>l:ListH0:forall (x4 : List) (y1 : Descl x4), ltl x4 l -> Acc Lex_Exp << x4, y1 >>x2:ListH1:ltl x2 (l ++ [x1])H3:exists y' : List, x2 = l ++ y' /\ ltl y' [x1]x3:ListH2:x2 = l ++ x3forall (x4 : A) (l0 : List), (forall y1 : Descl (l ++ l0), ltl l0 [x1] -> Acc Lex_Exp << l ++ l0, y1 >>) -> forall y1 : Descl (l ++ l0 ++ [x4]), ltl (l0 ++ [x4]) [x1] -> Acc Lex_Exp << l ++ l0 ++ [x4], y1 >>A:SetleA:A -> A -> PropH:well_founded leAa:Powerx:Listy:Descl xy0:Powerx0:AGR:forall P : A -> Prop, (forall x4 : A, (forall y3 : A, clos_trans A leA y3 x4 -> P y3) -> P x4) -> forall a0 : A, P a0x1:AHInd:forall y3 : A, clos_trans A leA y3 x1 -> forall l0 : List, (forall (x4 : List) (y4 : Descl x4), ltl x4 l0 -> Acc Lex_Exp << x4, y4 >>) -> forall (x4 : List) (y4 : Descl x4), ltl x4 (l0 ++ [y3]) -> Acc Lex_Exp << x4, y4 >>l:ListH0:forall (x4 : List) (y3 : Descl x4), ltl x4 l -> Acc Lex_Exp << x4, y3 >>x2:ListH1:ltl x2 (l ++ [x1])H3:exists y' : List, x2 = l ++ y' /\ ltl y' [x1]x3:ListH2:x2 = l ++ x3H4:ltl [] [x1]Heq:l = l ++ []y1:Descl ly2:Powerforall (x4 : List) (p : Descl x4), Lex_Exp << x4, p >> << l, y1 >> -> Acc Lex_Exp << x4, p >>A:SetleA:A -> A -> PropH:well_founded leAa:Powerx:Listy:Descl xy0:Powerx0:AGR:forall P : A -> Prop, (forall x4 : A, (forall y1 : A, clos_trans A leA y1 x4 -> P y1) -> P x4) -> forall a0 : A, P a0x1:AHInd:forall y1 : A, clos_trans A leA y1 x1 -> forall l0 : List, (forall (x4 : List) (y2 : Descl x4), ltl x4 l0 -> Acc Lex_Exp << x4, y2 >>) -> forall (x4 : List) (y2 : Descl x4), ltl x4 (l0 ++ [y1]) -> Acc Lex_Exp << x4, y2 >>l:ListH0:forall (x4 : List) (y1 : Descl x4), ltl x4 l -> Acc Lex_Exp << x4, y1 >>x2:ListH1:ltl x2 (l ++ [x1])H3:exists y' : List, x2 = l ++ y' /\ ltl y' [x1]x3:ListH2:x2 = l ++ x3forall (x4 : A) (l0 : List), (forall y1 : Descl (l ++ l0), ltl l0 [x1] -> Acc Lex_Exp << l ++ l0, y1 >>) -> forall y1 : Descl (l ++ l0 ++ [x4]), ltl (l0 ++ [x4]) [x1] -> Acc Lex_Exp << l ++ l0 ++ [x4], y1 >>A:SetleA:A -> A -> PropH:well_founded leAa:Powerx:Listy:Descl xy0:Powerx0:AGR:forall P : A -> Prop, (forall x4 : A, (forall y3 : A, clos_trans A leA y3 x4 -> P y3) -> P x4) -> forall a0 : A, P a0x1:AHInd:forall y3 : A, clos_trans A leA y3 x1 -> forall l0 : List, (forall (x4 : List) (y4 : Descl x4), ltl x4 l0 -> Acc Lex_Exp << x4, y4 >>) -> forall (x4 : List) (y4 : Descl x4), ltl x4 (l0 ++ [y3]) -> Acc Lex_Exp << x4, y4 >>l:ListH0:forall (x4 : List) (y3 : Descl x4), ltl x4 l -> Acc Lex_Exp << x4, y3 >>x2:ListH1:ltl x2 (l ++ [x1])H3:exists y' : List, x2 = l ++ y' /\ ltl y' [x1]x3:ListH2:x2 = l ++ x3H4:ltl [] [x1]Heq:l = l ++ []y1:Descl ly2:Powerforall (x4 : List) (p : Descl x4), ltl (proj1_sig << x4, p >>) (proj1_sig << l, y1 >>) -> Acc Lex_Exp << x4, p >>A:SetleA:A -> A -> PropH:well_founded leAa:Powerx:Listy:Descl xy0:Powerx0:AGR:forall P : A -> Prop, (forall x4 : A, (forall y1 : A, clos_trans A leA y1 x4 -> P y1) -> P x4) -> forall a0 : A, P a0x1:AHInd:forall y1 : A, clos_trans A leA y1 x1 -> forall l0 : List, (forall (x4 : List) (y2 : Descl x4), ltl x4 l0 -> Acc Lex_Exp << x4, y2 >>) -> forall (x4 : List) (y2 : Descl x4), ltl x4 (l0 ++ [y1]) -> Acc Lex_Exp << x4, y2 >>l:ListH0:forall (x4 : List) (y1 : Descl x4), ltl x4 l -> Acc Lex_Exp << x4, y1 >>x2:ListH1:ltl x2 (l ++ [x1])H3:exists y' : List, x2 = l ++ y' /\ ltl y' [x1]x3:ListH2:x2 = l ++ x3forall (x4 : A) (l0 : List), (forall y1 : Descl (l ++ l0), ltl l0 [x1] -> Acc Lex_Exp << l ++ l0, y1 >>) -> forall y1 : Descl (l ++ l0 ++ [x4]), ltl (l0 ++ [x4]) [x1] -> Acc Lex_Exp << l ++ l0 ++ [x4], y1 >>A:SetleA:A -> A -> PropH:well_founded leAa:Powerx:Listy:Descl xy0:Powerx0:AGR:forall P : A -> Prop, (forall x5 : A, (forall y4 : A, clos_trans A leA y4 x5 -> P y4) -> P x5) -> forall a0 : A, P a0x1:AHInd:forall y4 : A, clos_trans A leA y4 x1 -> forall l0 : List, (forall (x5 : List) (y5 : Descl x5), ltl x5 l0 -> Acc Lex_Exp << x5, y5 >>) -> forall (x5 : List) (y5 : Descl x5), ltl x5 (l0 ++ [y4]) -> Acc Lex_Exp << x5, y5 >>l:ListH0:forall (x5 : List) (y4 : Descl x5), ltl x5 l -> Acc Lex_Exp << x5, y4 >>x2:ListH1:ltl x2 (l ++ [x1])H3:exists y' : List, x2 = l ++ y' /\ ltl y' [x1]x3:ListH2:x2 = l ++ x3H4:ltl [] [x1]Heq:l = l ++ []y1:Descl ly2:Powerx4:Listy3:Descl x4ltl x4 l -> Acc Lex_Exp << x4, y3 >>A:SetleA:A -> A -> PropH:well_founded leAa:Powerx:Listy:Descl xy0:Powerx0:AGR:forall P : A -> Prop, (forall x4 : A, (forall y1 : A, clos_trans A leA y1 x4 -> P y1) -> P x4) -> forall a0 : A, P a0x1:AHInd:forall y1 : A, clos_trans A leA y1 x1 -> forall l0 : List, (forall (x4 : List) (y2 : Descl x4), ltl x4 l0 -> Acc Lex_Exp << x4, y2 >>) -> forall (x4 : List) (y2 : Descl x4), ltl x4 (l0 ++ [y1]) -> Acc Lex_Exp << x4, y2 >>l:ListH0:forall (x4 : List) (y1 : Descl x4), ltl x4 l -> Acc Lex_Exp << x4, y1 >>x2:ListH1:ltl x2 (l ++ [x1])H3:exists y' : List, x2 = l ++ y' /\ ltl y' [x1]x3:ListH2:x2 = l ++ x3forall (x4 : A) (l0 : List), (forall y1 : Descl (l ++ l0), ltl l0 [x1] -> Acc Lex_Exp << l ++ l0, y1 >>) -> forall y1 : Descl (l ++ l0 ++ [x4]), ltl (l0 ++ [x4]) [x1] -> Acc Lex_Exp << l ++ l0 ++ [x4], y1 >>A:SetleA:A -> A -> PropH:well_founded leAa:Powerx:Listy:Descl xy0:Powerx0:AGR:forall P : A -> Prop, (forall x5 : A, (forall y4 : A, clos_trans A leA y4 x5 -> P y4) -> P x5) -> forall a0 : A, P a0x1:AHInd:forall y4 : A, clos_trans A leA y4 x1 -> forall l0 : List, (forall (x5 : List) (y5 : Descl x5), ltl x5 l0 -> Acc Lex_Exp << x5, y5 >>) -> forall (x5 : List) (y5 : Descl x5), ltl x5 (l0 ++ [y4]) -> Acc Lex_Exp << x5, y5 >>l:ListH0:forall (x5 : List) (y4 : Descl x5), ltl x5 l -> Acc Lex_Exp << x5, y4 >>x2:ListH1:ltl x2 (l ++ [x1])H3:exists y' : List, x2 = l ++ y' /\ ltl y' [x1]x3:ListH2:x2 = l ++ x3H4:ltl [] [x1]Heq:l = l ++ []y1:Descl ly2:Powerx4:Listy3:Descl x4H5:ltl x4 lAcc Lex_Exp << x4, y3 >>A:SetleA:A -> A -> PropH:well_founded leAa:Powerx:Listy:Descl xy0:Powerx0:AGR:forall P : A -> Prop, (forall x4 : A, (forall y1 : A, clos_trans A leA y1 x4 -> P y1) -> P x4) -> forall a0 : A, P a0x1:AHInd:forall y1 : A, clos_trans A leA y1 x1 -> forall l0 : List, (forall (x4 : List) (y2 : Descl x4), ltl x4 l0 -> Acc Lex_Exp << x4, y2 >>) -> forall (x4 : List) (y2 : Descl x4), ltl x4 (l0 ++ [y1]) -> Acc Lex_Exp << x4, y2 >>l:ListH0:forall (x4 : List) (y1 : Descl x4), ltl x4 l -> Acc Lex_Exp << x4, y1 >>x2:ListH1:ltl x2 (l ++ [x1])H3:exists y' : List, x2 = l ++ y' /\ ltl y' [x1]x3:ListH2:x2 = l ++ x3forall (x4 : A) (l0 : List), (forall y1 : Descl (l ++ l0), ltl l0 [x1] -> Acc Lex_Exp << l ++ l0, y1 >>) -> forall y1 : Descl (l ++ l0 ++ [x4]), ltl (l0 ++ [x4]) [x1] -> Acc Lex_Exp << l ++ l0 ++ [x4], y1 >>A:SetleA:A -> A -> PropH:well_founded leAa:Powerx:Listy:Descl xy0:Powerx0:AGR:forall P : A -> Prop, (forall x4 : A, (forall y1 : A, clos_trans A leA y1 x4 -> P y1) -> P x4) -> forall a0 : A, P a0x1:AHInd:forall y1 : A, clos_trans A leA y1 x1 -> forall l0 : List, (forall (x4 : List) (y2 : Descl x4), ltl x4 l0 -> Acc Lex_Exp << x4, y2 >>) -> forall (x4 : List) (y2 : Descl x4), ltl x4 (l0 ++ [y1]) -> Acc Lex_Exp << x4, y2 >>l:ListH0:forall (x4 : List) (y1 : Descl x4), ltl x4 l -> Acc Lex_Exp << x4, y1 >>x2:ListH1:ltl x2 (l ++ [x1])H3:exists y' : List, x2 = l ++ y' /\ ltl y' [x1]x3:ListH2:x2 = l ++ x3forall (x4 : A) (l0 : List), (forall y1 : Descl (l ++ l0), ltl l0 [x1] -> Acc Lex_Exp << l ++ l0, y1 >>) -> forall y1 : Descl (l ++ l0 ++ [x4]), ltl (l0 ++ [x4]) [x1] -> Acc Lex_Exp << l ++ l0 ++ [x4], y1 >>A:SetleA:A -> A -> PropH:well_founded leAa:Powerx:Listy:Descl xy0:Powerx0:AGR:forall P : A -> Prop, (forall x5 : A, (forall y2 : A, clos_trans A leA y2 x5 -> P y2) -> P x5) -> forall a0 : A, P a0x1:AHInd:forall y2 : A, clos_trans A leA y2 x1 -> forall l1 : List, (forall (x5 : List) (y3 : Descl x5), ltl x5 l1 -> Acc Lex_Exp << x5, y3 >>) -> forall (x5 : List) (y3 : Descl x5), ltl x5 (l1 ++ [y2]) -> Acc Lex_Exp << x5, y3 >>l:ListH0:forall (x5 : List) (y2 : Descl x5), ltl x5 l -> Acc Lex_Exp << x5, y2 >>x2:ListH1:ltl x2 (l ++ [x1])H3:exists y' : List, x2 = l ++ y' /\ ltl y' [x1]x3:ListH2:x2 = l ++ x3x4:Al0:ListH4:forall y2 : Descl (l ++ l0), ltl l0 [x1] -> Acc Lex_Exp << l ++ l0, y2 >>y1:Descl (l ++ l0 ++ [x4])H5:ltl (l0 ++ [x4]) [x1]Acc Lex_Exp << l ++ l0 ++ [x4], y1 >>A:SetleA:A -> A -> PropH:well_founded leAa:Powerx:Listy:Descl xy0:Powerx0:AGR:forall P : A -> Prop, (forall x5 : A, (forall y2 : A, clos_trans A leA y2 x5 -> P y2) -> P x5) -> forall a0 : A, P a0x1:AHInd:forall y2 : A, clos_trans A leA y2 x1 -> forall l1 : List, (forall (x5 : List) (y3 : Descl x5), ltl x5 l1 -> Acc Lex_Exp << x5, y3 >>) -> forall (x5 : List) (y3 : Descl x5), ltl x5 (l1 ++ [y2]) -> Acc Lex_Exp << x5, y3 >>l:ListH0:forall (x5 : List) (y2 : Descl x5), ltl x5 l -> Acc Lex_Exp << x5, y2 >>x2:ListH1:ltl x2 (l ++ [x1])H3:exists y' : List, x2 = l ++ y' /\ ltl y' [x1]x3:ListH2:x2 = l ++ x3x4:Al0:ListH4:forall y2 : Descl (l ++ l0), ltl l0 [x1] -> Acc Lex_Exp << l ++ l0, y2 >>y1:Descl (l ++ l0 ++ [x4])H5:ltl (l0 ++ [x4]) [x1]Descl l /\ Descl (l0 ++ [x4]) -> Acc Lex_Exp << l ++ l0 ++ [x4], y1 >>A:SetleA:A -> A -> PropH:well_founded leAa:Powerx:Listy:Descl xy0:Powerx0:AGR:forall P : A -> Prop, (forall x5 : A, (forall y2 : A, clos_trans A leA y2 x5 -> P y2) -> P x5) -> forall a0 : A, P a0x1:AHInd:forall y2 : A, clos_trans A leA y2 x1 -> forall l1 : List, (forall (x5 : List) (y3 : Descl x5), ltl x5 l1 -> Acc Lex_Exp << x5, y3 >>) -> forall (x5 : List) (y3 : Descl x5), ltl x5 (l1 ++ [y2]) -> Acc Lex_Exp << x5, y3 >>l:ListH0:forall (x5 : List) (y2 : Descl x5), ltl x5 l -> Acc Lex_Exp << x5, y2 >>x2:ListH1:ltl x2 (l ++ [x1])H3:exists y' : List, x2 = l ++ y' /\ ltl y' [x1]x3:ListH2:x2 = l ++ x3x4:Al0:ListH4:forall y2 : Descl (l ++ l0), ltl l0 [x1] -> Acc Lex_Exp << l ++ l0, y2 >>y1:Descl (l ++ l0 ++ [x4])H5:ltl (l0 ++ [x4]) [x1]H6:Descl l /\ Descl (l0 ++ [x4])Descl l -> Descl (l0 ++ [x4]) -> Acc Lex_Exp << l ++ l0 ++ [x4], y1 >>A:SetleA:A -> A -> PropH:well_founded leAa:Powerx:Listy:Descl xy0:Powerx0:AGR:forall P : A -> Prop, (forall x5 : A, (forall y2 : A, clos_trans A leA y2 x5 -> P y2) -> P x5) -> forall a0 : A, P a0x1:AHInd:forall y2 : A, clos_trans A leA y2 x1 -> forall l1 : List, (forall (x5 : List) (y3 : Descl x5), ltl x5 l1 -> Acc Lex_Exp << x5, y3 >>) -> forall (x5 : List) (y3 : Descl x5), ltl x5 (l1 ++ [y2]) -> Acc Lex_Exp << x5, y3 >>l:ListH0:forall (x5 : List) (y2 : Descl x5), ltl x5 l -> Acc Lex_Exp << x5, y2 >>x2:ListH1:ltl x2 (l ++ [x1])H3:exists y' : List, x2 = l ++ y' /\ ltl y' [x1]x3:ListH2:x2 = l ++ x3x4:Al0:ListH4:forall y2 : Descl (l ++ l0), ltl l0 [x1] -> Acc Lex_Exp << l ++ l0, y2 >>y1:Descl (l ++ l0 ++ [x4])H5:ltl (l0 ++ [x4]) [x1]H6:Descl l /\ Descl (l0 ++ [x4])H7:Descl lH8:Descl (l0 ++ [x4])Acc Lex_Exp << l ++ l0 ++ [x4], y1 >>A:SetleA:A -> A -> PropH:well_founded leAa:Powerx:Listy:Descl xy0:Powerx0:AGR:forall P : A -> Prop, (forall x5 : A, (forall y2 : A, clos_trans A leA y2 x5 -> P y2) -> P x5) -> forall a0 : A, P a0x1:AHInd:forall y2 : A, clos_trans A leA y2 x1 -> forall l1 : List, (forall (x5 : List) (y3 : Descl x5), ltl x5 l1 -> Acc Lex_Exp << x5, y3 >>) -> forall (x5 : List) (y3 : Descl x5), ltl x5 (l1 ++ [y2]) -> Acc Lex_Exp << x5, y3 >>l:ListH0:forall (x5 : List) (y2 : Descl x5), ltl x5 l -> Acc Lex_Exp << x5, y2 >>x2:ListH1:ltl x2 (l ++ [x1])H3:exists y' : List, x2 = l ++ y' /\ ltl y' [x1]x3:ListH2:x2 = l ++ x3x4:Al0:ListH4:forall y2 : Descl (l ++ l0), ltl l0 [x1] -> Acc Lex_Exp << l ++ l0, y2 >>y1:Descl (l ++ l0 ++ [x4])H5:ltl (l0 ++ [x4]) [x1]H6:Descl l /\ Descl (l0 ++ [x4])H7:Descl lH8:Descl (l0 ++ [x4])H9:clos_trans A leA x4 x1Acc Lex_Exp << l ++ l0 ++ [x4], y1 >>A:SetleA:A -> A -> PropH:well_founded leAa:Powerx:Listy:Descl xy0:Powerx0:AGR:forall P : A -> Prop, (forall x5 : A, (forall y2 : A, clos_trans A leA y2 x5 -> P y2) -> P x5) -> forall a0 : A, P a0x1:AHInd:forall y2 : A, clos_trans A leA y2 x1 -> forall l1 : List, (forall (x5 : List) (y3 : Descl x5), ltl x5 l1 -> Acc Lex_Exp << x5, y3 >>) -> forall (x5 : List) (y3 : Descl x5), ltl x5 (l1 ++ [y2]) -> Acc Lex_Exp << x5, y3 >>l:ListH0:forall (x5 : List) (y2 : Descl x5), ltl x5 l -> Acc Lex_Exp << x5, y2 >>x2:ListH1:ltl x2 (l ++ [x1])H3:exists y' : List, x2 = l ++ y' /\ ltl y' [x1]x3:ListH2:x2 = l ++ x3x4:Al0:ListH4:forall y2 : Descl (l ++ l0), ltl l0 [x1] -> Acc Lex_Exp << l ++ l0, y2 >>y1:Descl (l ++ l0 ++ [x4])H5:ltl (l0 ++ [x4]) [x1]H6:Descl l /\ Descl (l0 ++ [x4])H7:Descl lH8:Descl (l0 ++ [x4])H9:clos_trans A leA x4 x1forall y2 : Descl (l ++ l0 ++ [x4]), Acc Lex_Exp << l ++ l0 ++ [x4], y2 >>A:SetleA:A -> A -> PropH:well_founded leAa:Powerx:Listy:Descl xy0:Powerx0:AGR:forall P : A -> Prop, (forall x5 : A, (forall y3 : A, clos_trans A leA y3 x5 -> P y3) -> P x5) -> forall a0 : A, P a0x1:AHInd:forall y3 : A, clos_trans A leA y3 x1 -> forall l1 : List, (forall (x5 : List) (y4 : Descl x5), ltl x5 l1 -> Acc Lex_Exp << x5, y4 >>) -> forall (x5 : List) (y4 : Descl x5), ltl x5 (l1 ++ [y3]) -> Acc Lex_Exp << x5, y4 >>l:ListH0:forall (x5 : List) (y3 : Descl x5), ltl x5 l -> Acc Lex_Exp << x5, y3 >>x2:ListH1:ltl x2 (l ++ [x1])H3:exists y' : List, x2 = l ++ y' /\ ltl y' [x1]x3:ListH2:x2 = l ++ x3x4:Al0:ListH4:forall y3 : Descl (l ++ l0), ltl l0 [x1] -> Acc Lex_Exp << l ++ l0, y3 >>y1:Descl (l ++ l0 ++ [x4])H5:ltl (l0 ++ [x4]) [x1]H6:Descl l /\ Descl (l0 ++ [x4])H7:Descl lH8:Descl (l0 ++ [x4])H9:clos_trans A leA x4 x1y2:Descl ((l ++ l0) ++ [x4])Acc Lex_Exp << (l ++ l0) ++ [x4], y2 >>A:SetleA:A -> A -> PropH:well_founded leAa:Powerx:Listy:Descl xy0:Powerx0:AGR:forall P : A -> Prop, (forall x5 : A, (forall y3 : A, clos_trans A leA y3 x5 -> P y3) -> P x5) -> forall a0 : A, P a0x1:AHInd:forall y3 : A, clos_trans A leA y3 x1 -> forall l1 : List, (forall (x5 : List) (y4 : Descl x5), ltl x5 l1 -> Acc Lex_Exp << x5, y4 >>) -> forall (x5 : List) (y4 : Descl x5), ltl x5 (l1 ++ [y3]) -> Acc Lex_Exp << x5, y4 >>l:ListH0:forall (x5 : List) (y3 : Descl x5), ltl x5 l -> Acc Lex_Exp << x5, y3 >>x2:ListH1:ltl x2 (l ++ [x1])H3:exists y' : List, x2 = l ++ y' /\ ltl y' [x1]x3:ListH2:x2 = l ++ x3x4:Al0:ListH4:forall y3 : Descl (l ++ l0), ltl l0 [x1] -> Acc Lex_Exp << l ++ l0, y3 >>y1:Descl (l ++ l0 ++ [x4])H5:ltl (l0 ++ [x4]) [x1]H6:Descl l /\ Descl (l0 ++ [x4])H7:Descl lH8:Descl (l0 ++ [x4])H9:clos_trans A leA x4 x1y2:Descl ((l ++ l0) ++ [x4])HInd2:(forall (x5 : List) (y3 : Descl x5), ltl x5 (l ++ l0) -> Acc Lex_Exp << x5, y3 >>) -> forall (x5 : List) (y3 : Descl x5), ltl x5 ((l ++ l0) ++ [x4]) -> Acc Lex_Exp << x5, y3 >>Acc Lex_Exp << (l ++ l0) ++ [x4], y2 >>A:SetleA:A -> A -> PropH:well_founded leAa:Powerx:Listy:Descl xy0:Powerx0:AGR:forall P : A -> Prop, (forall x5 : A, (forall y3 : A, clos_trans A leA y3 x5 -> P y3) -> P x5) -> forall a0 : A, P a0x1:AHInd:forall y3 : A, clos_trans A leA y3 x1 -> forall l1 : List, (forall (x5 : List) (y4 : Descl x5), ltl x5 l1 -> Acc Lex_Exp << x5, y4 >>) -> forall (x5 : List) (y4 : Descl x5), ltl x5 (l1 ++ [y3]) -> Acc Lex_Exp << x5, y4 >>l:ListH0:forall (x5 : List) (y3 : Descl x5), ltl x5 l -> Acc Lex_Exp << x5, y3 >>x2:ListH1:ltl x2 (l ++ [x1])H3:exists y' : List, x2 = l ++ y' /\ ltl y' [x1]x3:ListH2:x2 = l ++ x3x4:Al0:ListH4:forall y3 : Descl (l ++ l0), ltl l0 [x1] -> Acc Lex_Exp << l ++ l0, y3 >>y1:Descl (l ++ l0 ++ [x4])H5:ltl (l0 ++ [x4]) [x1]H6:Descl l /\ Descl (l0 ++ [x4])H7:Descl lH8:Descl (l0 ++ [x4])H9:clos_trans A leA x4 x1y2:Descl ((l ++ l0) ++ [x4])HInd2:(forall (x5 : List) (y3 : Descl x5), ltl x5 (l ++ l0) -> Acc Lex_Exp << x5, y3 >>) -> forall (x5 : List) (y3 : Descl x5), ltl x5 ((l ++ l0) ++ [x4]) -> Acc Lex_Exp << x5, y3 >>H10:ltl l0 [x1]Acc Lex_Exp << (l ++ l0) ++ [x4], y2 >>A:SetleA:A -> A -> PropH:well_founded leAa:Powerx:Listy:Descl xy0:Powerx0:AGR:forall P : A -> Prop, (forall x5 : A, (forall y3 : A, clos_trans A leA y3 x5 -> P y3) -> P x5) -> forall a0 : A, P a0x1:AHInd:forall y3 : A, clos_trans A leA y3 x1 -> forall l1 : List, (forall (x5 : List) (y4 : Descl x5), ltl x5 l1 -> Acc Lex_Exp << x5, y4 >>) -> forall (x5 : List) (y4 : Descl x5), ltl x5 (l1 ++ [y3]) -> Acc Lex_Exp << x5, y4 >>l:ListH0:forall (x5 : List) (y3 : Descl x5), ltl x5 l -> Acc Lex_Exp << x5, y3 >>x2:ListH1:ltl x2 (l ++ [x1])H3:exists y' : List, x2 = l ++ y' /\ ltl y' [x1]x3:ListH2:x2 = l ++ x3x4:Al0:ListH4:forall y3 : Descl (l ++ l0), ltl l0 [x1] -> Acc Lex_Exp << l ++ l0, y3 >>y1:Descl (l ++ l0 ++ [x4])H5:ltl (l0 ++ [x4]) [x1]H6:Descl l /\ Descl (l0 ++ [x4])H7:Descl lH8:Descl (l0 ++ [x4])H9:clos_trans A leA x4 x1y2:Descl ((l ++ l0) ++ [x4])HInd2:(forall (x5 : List) (y3 : Descl x5), ltl x5 (l ++ l0) -> Acc Lex_Exp << x5, y3 >>) -> forall (x5 : List) (y3 : Descl x5), ltl x5 ((l ++ l0) ++ [x4]) -> Acc Lex_Exp << x5, y3 >>H10:ltl l0 [x1]Descl (l ++ l0) /\ Descl [x4] -> Acc Lex_Exp << (l ++ l0) ++ [x4], y2 >>A:SetleA:A -> A -> PropH:well_founded leAa:Powerx:Listy:Descl xy0:Powerx0:AGR:forall P : A -> Prop, (forall x5 : A, (forall y3 : A, clos_trans A leA y3 x5 -> P y3) -> P x5) -> forall a0 : A, P a0x1:AHInd:forall y3 : A, clos_trans A leA y3 x1 -> forall l1 : List, (forall (x5 : List) (y4 : Descl x5), ltl x5 l1 -> Acc Lex_Exp << x5, y4 >>) -> forall (x5 : List) (y4 : Descl x5), ltl x5 (l1 ++ [y3]) -> Acc Lex_Exp << x5, y4 >>l:ListH0:forall (x5 : List) (y3 : Descl x5), ltl x5 l -> Acc Lex_Exp << x5, y3 >>x2:ListH1:ltl x2 (l ++ [x1])H3:exists y' : List, x2 = l ++ y' /\ ltl y' [x1]x3:ListH2:x2 = l ++ x3x4:Al0:ListH4:forall y3 : Descl (l ++ l0), ltl l0 [x1] -> Acc Lex_Exp << l ++ l0, y3 >>y1:Descl (l ++ l0 ++ [x4])H5:ltl (l0 ++ [x4]) [x1]H6:Descl l /\ Descl (l0 ++ [x4])H7:Descl lH8:Descl (l0 ++ [x4])H9:clos_trans A leA x4 x1y2:Descl ((l ++ l0) ++ [x4])HInd2:(forall (x5 : List) (y3 : Descl x5), ltl x5 (l ++ l0) -> Acc Lex_Exp << x5, y3 >>) -> forall (x5 : List) (y3 : Descl x5), ltl x5 ((l ++ l0) ++ [x4]) -> Acc Lex_Exp << x5, y3 >>H10:ltl l0 [x1]H11:Descl (l ++ l0) /\ Descl [x4]H12:Descl (l ++ l0)H13:Descl [x4]Acc Lex_Exp << (l ++ l0) ++ [x4], y2 >>A:SetleA:A -> A -> PropH:well_founded leAa:Powerx:Listy:Descl xy0:Powerx0:AGR:forall P : A -> Prop, (forall x5 : A, (forall y3 : A, clos_trans A leA y3 x5 -> P y3) -> P x5) -> forall a0 : A, P a0x1:AHInd:forall y3 : A, clos_trans A leA y3 x1 -> forall l1 : List, (forall (x5 : List) (y4 : Descl x5), ltl x5 l1 -> Acc Lex_Exp << x5, y4 >>) -> forall (x5 : List) (y4 : Descl x5), ltl x5 (l1 ++ [y3]) -> Acc Lex_Exp << x5, y4 >>l:ListH0:forall (x5 : List) (y3 : Descl x5), ltl x5 l -> Acc Lex_Exp << x5, y3 >>x2:ListH1:ltl x2 (l ++ [x1])H3:exists y' : List, x2 = l ++ y' /\ ltl y' [x1]x3:ListH2:x2 = l ++ x3x4:Al0:ListH4:forall y3 : Descl (l ++ l0), ltl l0 [x1] -> Acc Lex_Exp << l ++ l0, y3 >>y1:Descl (l ++ l0 ++ [x4])H5:ltl (l0 ++ [x4]) [x1]H6:Descl l /\ Descl (l0 ++ [x4])H7:Descl lH8:Descl (l0 ++ [x4])H9:clos_trans A leA x4 x1y2:Descl ((l ++ l0) ++ [x4])HInd2:(forall (x5 : List) (y3 : Descl x5), ltl x5 (l ++ l0) -> Acc Lex_Exp << x5, y3 >>) -> forall (x5 : List) (y3 : Descl x5), ltl x5 ((l ++ l0) ++ [x4]) -> Acc Lex_Exp << x5, y3 >>H10:ltl l0 [x1]H11:Descl (l ++ l0) /\ Descl [x4]H12:Descl (l ++ l0)H13:Descl [x4]H14:Acc Lex_Exp << l ++ l0, H12 >>Acc Lex_Exp << (l ++ l0) ++ [x4], y2 >>A:SetleA:A -> A -> PropH:well_founded leAa:Powerx:Listy:Descl xy0:Powerx0:AGR:forall P : A -> Prop, (forall x5 : A, (forall y3 : A, clos_trans A leA y3 x5 -> P y3) -> P x5) -> forall a0 : A, P a0x1:AHInd:forall y3 : A, clos_trans A leA y3 x1 -> forall l1 : List, (forall (x5 : List) (y4 : Descl x5), ltl x5 l1 -> Acc Lex_Exp << x5, y4 >>) -> forall (x5 : List) (y4 : Descl x5), ltl x5 (l1 ++ [y3]) -> Acc Lex_Exp << x5, y4 >>l:ListH0:forall (x5 : List) (y3 : Descl x5), ltl x5 l -> Acc Lex_Exp << x5, y3 >>x2:ListH1:ltl x2 (l ++ [x1])H3:exists y' : List, x2 = l ++ y' /\ ltl y' [x1]x3:ListH2:x2 = l ++ x3x4:Al0:ListH4:forall y3 : Descl (l ++ l0), ltl l0 [x1] -> Acc Lex_Exp << l ++ l0, y3 >>y1:Descl (l ++ l0 ++ [x4])H5:ltl (l0 ++ [x4]) [x1]H6:Descl l /\ Descl (l0 ++ [x4])H7:Descl lH8:Descl (l0 ++ [x4])H9:clos_trans A leA x4 x1y2:Descl ((l ++ l0) ++ [x4])HInd2:(forall (x5 : List) (y3 : Descl x5), ltl x5 (l ++ l0) -> Acc Lex_Exp << x5, y3 >>) -> forall (x5 : List) (y3 : Descl x5), ltl x5 ((l ++ l0) ++ [x4]) -> Acc Lex_Exp << x5, y3 >>H10:ltl l0 [x1]H11:Descl (l ++ l0) /\ Descl [x4]H12:Descl (l ++ l0)H13:Descl [x4]H14:Acc Lex_Exp << l ++ l0, H12 >>(forall y3 : Power, Lex_Exp y3 << l ++ l0, H12 >> -> Acc Lex_Exp y3) -> Acc Lex_Exp << (l ++ l0) ++ [x4], y2 >>A:SetleA:A -> A -> PropH:well_founded leAa:Powerx:Listy:Descl xy0:Powerx0:AGR:forall P : A -> Prop, (forall x5 : A, (forall y3 : A, clos_trans A leA y3 x5 -> P y3) -> P x5) -> forall a0 : A, P a0x1:AHInd:forall y3 : A, clos_trans A leA y3 x1 -> forall l1 : List, (forall (x5 : List) (y4 : Descl x5), ltl x5 l1 -> Acc Lex_Exp << x5, y4 >>) -> forall (x5 : List) (y4 : Descl x5), ltl x5 (l1 ++ [y3]) -> Acc Lex_Exp << x5, y4 >>l:ListH0:forall (x5 : List) (y3 : Descl x5), ltl x5 l -> Acc Lex_Exp << x5, y3 >>x2:ListH1:ltl x2 (l ++ [x1])H3:exists y' : List, x2 = l ++ y' /\ ltl y' [x1]x3:ListH2:x2 = l ++ x3x4:Al0:ListH4:forall y3 : Descl (l ++ l0), ltl l0 [x1] -> Acc Lex_Exp << l ++ l0, y3 >>y1:Descl (l ++ l0 ++ [x4])H5:ltl (l0 ++ [x4]) [x1]H6:Descl l /\ Descl (l0 ++ [x4])H7:Descl lH8:Descl (l0 ++ [x4])H9:clos_trans A leA x4 x1y2:Descl ((l ++ l0) ++ [x4])HInd2:(forall (x5 : List) (y3 : Descl x5), ltl x5 (l ++ l0) -> Acc Lex_Exp << x5, y3 >>) -> forall (x5 : List) (y3 : Descl x5), ltl x5 ((l ++ l0) ++ [x4]) -> Acc Lex_Exp << x5, y3 >>H10:ltl l0 [x1]H11:Descl (l ++ l0) /\ Descl [x4]H12:Descl (l ++ l0)H13:Descl [x4]H14:Acc Lex_Exp << l ++ l0, H12 >>(forall (x5 : List) (y3 : Descl x5), ltl x5 (l ++ l0) -> Acc Lex_Exp << x5, y3 >>) -> (forall y3 : Power, Lex_Exp y3 << l ++ l0, H12 >> -> Acc Lex_Exp y3) -> Acc Lex_Exp << (l ++ l0) ++ [x4], y2 >>A:SetleA:A -> A -> PropH:well_founded leAa:Powerx:Listy:Descl xy0:Powerx0:AGR:forall P : A -> Prop, (forall x5 : A, (forall y3 : A, clos_trans A leA y3 x5 -> P y3) -> P x5) -> forall a0 : A, P a0x1:AHInd:forall y3 : A, clos_trans A leA y3 x1 -> forall l1 : List, (forall (x5 : List) (y4 : Descl x5), ltl x5 l1 -> Acc Lex_Exp << x5, y4 >>) -> forall (x5 : List) (y4 : Descl x5), ltl x5 (l1 ++ [y3]) -> Acc Lex_Exp << x5, y4 >>l:ListH0:forall (x5 : List) (y3 : Descl x5), ltl x5 l -> Acc Lex_Exp << x5, y3 >>x2:ListH1:ltl x2 (l ++ [x1])H3:exists y' : List, x2 = l ++ y' /\ ltl y' [x1]x3:ListH2:x2 = l ++ x3x4:Al0:ListH4:forall y3 : Descl (l ++ l0), ltl l0 [x1] -> Acc Lex_Exp << l ++ l0, y3 >>y1:Descl (l ++ l0 ++ [x4])H5:ltl (l0 ++ [x4]) [x1]H6:Descl l /\ Descl (l0 ++ [x4])H7:Descl lH8:Descl (l0 ++ [x4])H9:clos_trans A leA x4 x1y2:Descl ((l ++ l0) ++ [x4])HInd2:(forall (x5 : List) (y3 : Descl x5), ltl x5 (l ++ l0) -> Acc Lex_Exp << x5, y3 >>) -> forall (x5 : List) (y3 : Descl x5), ltl x5 ((l ++ l0) ++ [x4]) -> Acc Lex_Exp << x5, y3 >>H10:ltl l0 [x1]H11:Descl (l ++ l0) /\ Descl [x4]H12:Descl (l ++ l0)H13:Descl [x4]H14:Acc Lex_Exp << l ++ l0, H12 >>f:forall (x5 : List) (y3 : Descl x5), ltl x5 (l ++ l0) -> Acc Lex_Exp << x5, y3 >>g:forall y3 : Power, Lex_Exp y3 << l ++ l0, H12 >> -> Acc Lex_Exp y3Acc Lex_Exp << (l ++ l0) ++ [x4], y2 >>A:SetleA:A -> A -> PropH:well_founded leAa:Powerx:Listy:Descl xy0:Powerx0:AGR:forall P : A -> Prop, (forall x5 : A, (forall y3 : A, clos_trans A leA y3 x5 -> P y3) -> P x5) -> forall a0 : A, P a0x1:AHInd:forall y3 : A, clos_trans A leA y3 x1 -> forall l1 : List, (forall (x5 : List) (y4 : Descl x5), ltl x5 l1 -> Acc Lex_Exp << x5, y4 >>) -> forall (x5 : List) (y4 : Descl x5), ltl x5 (l1 ++ [y3]) -> Acc Lex_Exp << x5, y4 >>l:ListH0:forall (x5 : List) (y3 : Descl x5), ltl x5 l -> Acc Lex_Exp << x5, y3 >>x2:ListH1:ltl x2 (l ++ [x1])H3:exists y' : List, x2 = l ++ y' /\ ltl y' [x1]x3:ListH2:x2 = l ++ x3x4:Al0:ListH4:forall y3 : Descl (l ++ l0), ltl l0 [x1] -> Acc Lex_Exp << l ++ l0, y3 >>y1:Descl (l ++ l0 ++ [x4])H5:ltl (l0 ++ [x4]) [x1]H6:Descl l /\ Descl (l0 ++ [x4])H7:Descl lH8:Descl (l0 ++ [x4])H9:clos_trans A leA x4 x1y2:Descl ((l ++ l0) ++ [x4])HInd2:(forall (x5 : List) (y3 : Descl x5), ltl x5 (l ++ l0) -> Acc Lex_Exp << x5, y3 >>) -> forall (x5 : List) (y3 : Descl x5), ltl x5 ((l ++ l0) ++ [x4]) -> Acc Lex_Exp << x5, y3 >>H10:ltl l0 [x1]H11:Descl (l ++ l0) /\ Descl [x4]H12:Descl (l ++ l0)H13:Descl [x4]H14:Acc Lex_Exp << l ++ l0, H12 >>f:forall (x5 : List) (y3 : Descl x5), ltl x5 (l ++ l0) -> Acc Lex_Exp << x5, y3 >>g:forall y3 : Power, Lex_Exp y3 << l ++ l0, H12 >> -> Acc Lex_Exp y3H15:forall (x5 : List) (y3 : Descl x5), ltl x5 ((l ++ l0) ++ [x4]) -> Acc Lex_Exp << x5, y3 >>Acc Lex_Exp << (l ++ l0) ++ [x4], y2 >>A:SetleA:A -> A -> PropH:well_founded leAa:Powerx:Listy:Descl xy0:Powerx0:AGR:forall P : A -> Prop, (forall x5 : A, (forall y3 : A, clos_trans A leA y3 x5 -> P y3) -> P x5) -> forall a0 : A, P a0x1:AHInd:forall y3 : A, clos_trans A leA y3 x1 -> forall l1 : List, (forall (x5 : List) (y4 : Descl x5), ltl x5 l1 -> Acc Lex_Exp << x5, y4 >>) -> forall (x5 : List) (y4 : Descl x5), ltl x5 (l1 ++ [y3]) -> Acc Lex_Exp << x5, y4 >>l:ListH0:forall (x5 : List) (y3 : Descl x5), ltl x5 l -> Acc Lex_Exp << x5, y3 >>x2:ListH1:ltl x2 (l ++ [x1])H3:exists y' : List, x2 = l ++ y' /\ ltl y' [x1]x3:ListH2:x2 = l ++ x3x4:Al0:ListH4:forall y3 : Descl (l ++ l0), ltl l0 [x1] -> Acc Lex_Exp << l ++ l0, y3 >>y1:Descl (l ++ l0 ++ [x4])H5:ltl (l0 ++ [x4]) [x1]H6:Descl l /\ Descl (l0 ++ [x4])H7:Descl lH8:Descl (l0 ++ [x4])H9:clos_trans A leA x4 x1y2:Descl ((l ++ l0) ++ [x4])HInd2:(forall (x5 : List) (y3 : Descl x5), ltl x5 (l ++ l0) -> Acc Lex_Exp << x5, y3 >>) -> forall (x5 : List) (y3 : Descl x5), ltl x5 ((l ++ l0) ++ [x4]) -> Acc Lex_Exp << x5, y3 >>H10:ltl l0 [x1]H11:Descl (l ++ l0) /\ Descl [x4]H12:Descl (l ++ l0)H13:Descl [x4]H14:Acc Lex_Exp << l ++ l0, H12 >>f:forall (x5 : List) (y3 : Descl x5), ltl x5 (l ++ l0) -> Acc Lex_Exp << x5, y3 >>g:forall y3 : Power, Lex_Exp y3 << l ++ l0, H12 >> -> Acc Lex_Exp y3H15:forall (x5 : List) (y3 : Descl x5), ltl x5 ((l ++ l0) ++ [x4]) -> Acc Lex_Exp << x5, y3 >>forall y3 : Power, Lex_Exp y3 << (l ++ l0) ++ [x4], y2 >> -> Acc Lex_Exp y3A:SetleA:A -> A -> PropH:well_founded leAa:Powerx:Listy:Descl xy0:Powerx0:AGR:forall P : A -> Prop, (forall x5 : A, (forall y4 : A, clos_trans A leA y4 x5 -> P y4) -> P x5) -> forall a0 : A, P a0x1:AHInd:forall y4 : A, clos_trans A leA y4 x1 -> forall l1 : List, (forall (x5 : List) (y5 : Descl x5), ltl x5 l1 -> Acc Lex_Exp << x5, y5 >>) -> forall (x5 : List) (y5 : Descl x5), ltl x5 (l1 ++ [y4]) -> Acc Lex_Exp << x5, y5 >>l:ListH0:forall (x5 : List) (y4 : Descl x5), ltl x5 l -> Acc Lex_Exp << x5, y4 >>x2:ListH1:ltl x2 (l ++ [x1])H3:exists y' : List, x2 = l ++ y' /\ ltl y' [x1]x3:ListH2:x2 = l ++ x3x4:Al0:ListH4:forall y4 : Descl (l ++ l0), ltl l0 [x1] -> Acc Lex_Exp << l ++ l0, y4 >>y1:Descl (l ++ l0 ++ [x4])H5:ltl (l0 ++ [x4]) [x1]H6:Descl l /\ Descl (l0 ++ [x4])H7:Descl lH8:Descl (l0 ++ [x4])H9:clos_trans A leA x4 x1y2:Descl ((l ++ l0) ++ [x4])HInd2:(forall (x5 : List) (y4 : Descl x5), ltl x5 (l ++ l0) -> Acc Lex_Exp << x5, y4 >>) -> forall (x5 : List) (y4 : Descl x5), ltl x5 ((l ++ l0) ++ [x4]) -> Acc Lex_Exp << x5, y4 >>H10:ltl l0 [x1]H11:Descl (l ++ l0) /\ Descl [x4]H12:Descl (l ++ l0)H13:Descl [x4]H14:Acc Lex_Exp << l ++ l0, H12 >>f:forall (x5 : List) (y4 : Descl x5), ltl x5 (l ++ l0) -> Acc Lex_Exp << x5, y4 >>g:forall y4 : Power, Lex_Exp y4 << l ++ l0, H12 >> -> Acc Lex_Exp y4H15:forall (x5 : List) (y4 : Descl x5), ltl x5 ((l ++ l0) ++ [x4]) -> Acc Lex_Exp << x5, y4 >>y3:Powerforall (x5 : List) (p : Descl x5), Lex_Exp << x5, p >> << (l ++ l0) ++ [x4], y2 >> -> Acc Lex_Exp << x5, p >>apply H15; auto with sets. Qed. End Wf_Lexicographic_Exponentiation.A:SetleA:A -> A -> PropH:well_founded leAa:Powerx:Listy:Descl xy0:Powerx0:AGR:forall P : A -> Prop, (forall x6 : A, (forall y4 : A, clos_trans A leA y4 x6 -> P y4) -> P x6) -> forall a0 : A, P a0x1:AHInd:forall y4 : A, clos_trans A leA y4 x1 -> forall l1 : List, (forall (x6 : List) (y5 : Descl x6), ltl x6 l1 -> Acc Lex_Exp << x6, y5 >>) -> forall (x6 : List) (y5 : Descl x6), ltl x6 (l1 ++ [y4]) -> Acc Lex_Exp << x6, y5 >>l:ListH0:forall (x6 : List) (y4 : Descl x6), ltl x6 l -> Acc Lex_Exp << x6, y4 >>x2:ListH1:ltl x2 (l ++ [x1])H3:exists y' : List, x2 = l ++ y' /\ ltl y' [x1]x3:ListH2:x2 = l ++ x3x4:Al0:ListH4:forall y4 : Descl (l ++ l0), ltl l0 [x1] -> Acc Lex_Exp << l ++ l0, y4 >>y1:Descl (l ++ l0 ++ [x4])H5:ltl (l0 ++ [x4]) [x1]H6:Descl l /\ Descl (l0 ++ [x4])H7:Descl lH8:Descl (l0 ++ [x4])H9:clos_trans A leA x4 x1y2:Descl ((l ++ l0) ++ [x4])HInd2:(forall (x6 : List) (y4 : Descl x6), ltl x6 (l ++ l0) -> Acc Lex_Exp << x6, y4 >>) -> forall (x6 : List) (y4 : Descl x6), ltl x6 ((l ++ l0) ++ [x4]) -> Acc Lex_Exp << x6, y4 >>H10:ltl l0 [x1]H11:Descl (l ++ l0) /\ Descl [x4]H12:Descl (l ++ l0)H13:Descl [x4]H14:Acc Lex_Exp << l ++ l0, H12 >>f:forall (x6 : List) (y4 : Descl x6), ltl x6 (l ++ l0) -> Acc Lex_Exp << x6, y4 >>g:forall y4 : Power, Lex_Exp y4 << l ++ l0, H12 >> -> Acc Lex_Exp y4H15:forall (x6 : List) (y4 : Descl x6), ltl x6 ((l ++ l0) ++ [x4]) -> Acc Lex_Exp << x6, y4 >>y3:Powerx5:Listp:Descl x5H16:ltl x5 ((l ++ l0) ++ [x4])Acc Lex_Exp << x5, p >>