Require terminaison. Require Relations. Require term. Require List. Require equational_theory. Require rpo_extension. Require equational_extension. Require closure_extension. Require term_extension. Require dp. Require Inclusion. Require or_ext_generated. Require ZArith. Require ring_extention. Require Zwf. Require Inverse_Image. Require matrix. Require more_list_extention. Import List. Import ZArith. Set Implicit Arguments. Module algebra. Module F <:term.Signature. Inductive symb : Set := (* id_active *) | id_active : symb (* id_proper *) | id_proper : symb (* id_isQid *) | id_isQid : symb (* id_and *) | id_and : symb (* id_e *) | id_e : symb (* id_mark *) | id_mark : symb (* id_top *) | id_top : symb (* id_isPal *) | id_isPal : symb (* id_isList *) | id_isList : symb (* id_o *) | id_o : symb (* id___ *) | id___ : symb (* id_ok *) | id_ok : symb (* id_isNePal *) | id_isNePal : symb (* id_tt *) | id_tt : symb (* id_i *) | id_i : symb (* id_nil *) | id_nil : symb (* id_a *) | id_a : symb (* id_isNeList *) | id_isNeList : symb (* id_u *) | id_u : symb . Definition symb_eq_bool (f1 f2:symb) : bool := match f1,f2 with | id_active,id_active => true | id_proper,id_proper => true | id_isQid,id_isQid => true | id_and,id_and => true | id_e,id_e => true | id_mark,id_mark => true | id_top,id_top => true | id_isPal,id_isPal => true | id_isList,id_isList => true | id_o,id_o => true | id___,id___ => true | id_ok,id_ok => true | id_isNePal,id_isNePal => true | id_tt,id_tt => true | id_i,id_i => true | id_nil,id_nil => true | id_a,id_a => true | id_isNeList,id_isNeList => true | id_u,id_u => true | _,_ => false end. (* Proof of decidability of equality over symb *) Definition symb_eq_bool_ok(f1 f2:symb) : match symb_eq_bool f1 f2 with | true => f1 = f2 | false => f1 <> f2 end. Proof. intros f1 f2. refine match f1 as u1,f2 as u2 return match symb_eq_bool u1 u2 return Prop with | true => u1 = u2 | false => u1 <> u2 end with | id_active,id_active => refl_equal _ | id_proper,id_proper => refl_equal _ | id_isQid,id_isQid => refl_equal _ | id_and,id_and => refl_equal _ | id_e,id_e => refl_equal _ | id_mark,id_mark => refl_equal _ | id_top,id_top => refl_equal _ | id_isPal,id_isPal => refl_equal _ | id_isList,id_isList => refl_equal _ | id_o,id_o => refl_equal _ | id___,id___ => refl_equal _ | id_ok,id_ok => refl_equal _ | id_isNePal,id_isNePal => refl_equal _ | id_tt,id_tt => refl_equal _ | id_i,id_i => refl_equal _ | id_nil,id_nil => refl_equal _ | id_a,id_a => refl_equal _ | id_isNeList,id_isNeList => refl_equal _ | id_u,id_u => refl_equal _ | _,_ => _ end;intros abs;discriminate. Defined. Definition arity (f:symb) := match f with | id_active => term.Free 1 | id_proper => term.Free 1 | id_isQid => term.Free 1 | id_and => term.Free 2 | id_e => term.Free 0 | id_mark => term.Free 1 | id_top => term.Free 1 | id_isPal => term.Free 1 | id_isList => term.Free 1 | id_o => term.Free 0 | id___ => term.Free 2 | id_ok => term.Free 1 | id_isNePal => term.Free 1 | id_tt => term.Free 0 | id_i => term.Free 0 | id_nil => term.Free 0 | id_a => term.Free 0 | id_isNeList => term.Free 1 | id_u => term.Free 0 end. Definition symb_order (f1 f2:symb) : bool := match f1,f2 with | id_active,id_active => true | id_active,id_proper => false | id_active,id_isQid => false | id_active,id_and => false | id_active,id_e => false | id_active,id_mark => false | id_active,id_top => false | id_active,id_isPal => false | id_active,id_isList => false | id_active,id_o => false | id_active,id___ => false | id_active,id_ok => false | id_active,id_isNePal => false | id_active,id_tt => false | id_active,id_i => false | id_active,id_nil => false | id_active,id_a => false | id_active,id_isNeList => false | id_active,id_u => false | id_proper,id_active => true | id_proper,id_proper => true | id_proper,id_isQid => false | id_proper,id_and => false | id_proper,id_e => false | id_proper,id_mark => false | id_proper,id_top => false | id_proper,id_isPal => false | id_proper,id_isList => false | id_proper,id_o => false | id_proper,id___ => false | id_proper,id_ok => false | id_proper,id_isNePal => false | id_proper,id_tt => false | id_proper,id_i => false | id_proper,id_nil => false | id_proper,id_a => false | id_proper,id_isNeList => false | id_proper,id_u => false | id_isQid,id_active => true | id_isQid,id_proper => true | id_isQid,id_isQid => true | id_isQid,id_and => false | id_isQid,id_e => false | id_isQid,id_mark => false | id_isQid,id_top => false | id_isQid,id_isPal => false | id_isQid,id_isList => false | id_isQid,id_o => false | id_isQid,id___ => false | id_isQid,id_ok => false | id_isQid,id_isNePal => false | id_isQid,id_tt => false | id_isQid,id_i => false | id_isQid,id_nil => false | id_isQid,id_a => false | id_isQid,id_isNeList => false | id_isQid,id_u => false | id_and,id_active => true | id_and,id_proper => true | id_and,id_isQid => true | id_and,id_and => true | id_and,id_e => false | id_and,id_mark => false | id_and,id_top => false | id_and,id_isPal => false | id_and,id_isList => false | id_and,id_o => false | id_and,id___ => false | id_and,id_ok => false | id_and,id_isNePal => false | id_and,id_tt => false | id_and,id_i => false | id_and,id_nil => false | id_and,id_a => false | id_and,id_isNeList => false | id_and,id_u => false | id_e,id_active => true | id_e,id_proper => true | id_e,id_isQid => true | id_e,id_and => true | id_e,id_e => true | id_e,id_mark => false | id_e,id_top => false | id_e,id_isPal => false | id_e,id_isList => false | id_e,id_o => false | id_e,id___ => false | id_e,id_ok => false | id_e,id_isNePal => false | id_e,id_tt => false | id_e,id_i => false | id_e,id_nil => false | id_e,id_a => false | id_e,id_isNeList => false | id_e,id_u => false | id_mark,id_active => true | id_mark,id_proper => true | id_mark,id_isQid => true | id_mark,id_and => true | id_mark,id_e => true | id_mark,id_mark => true | id_mark,id_top => false | id_mark,id_isPal => false | id_mark,id_isList => false | id_mark,id_o => false | id_mark,id___ => false | id_mark,id_ok => false | id_mark,id_isNePal => false | id_mark,id_tt => false | id_mark,id_i => false | id_mark,id_nil => false | id_mark,id_a => false | id_mark,id_isNeList => false | id_mark,id_u => false | id_top,id_active => true | id_top,id_proper => true | id_top,id_isQid => true | id_top,id_and => true | id_top,id_e => true | id_top,id_mark => true | id_top,id_top => true | id_top,id_isPal => false | id_top,id_isList => false | id_top,id_o => false | id_top,id___ => false | id_top,id_ok => false | id_top,id_isNePal => false | id_top,id_tt => false | id_top,id_i => false | id_top,id_nil => false | id_top,id_a => false | id_top,id_isNeList => false | id_top,id_u => false | id_isPal,id_active => true | id_isPal,id_proper => true | id_isPal,id_isQid => true | id_isPal,id_and => true | id_isPal,id_e => true | id_isPal,id_mark => true | id_isPal,id_top => true | id_isPal,id_isPal => true | id_isPal,id_isList => false | id_isPal,id_o => false | id_isPal,id___ => false | id_isPal,id_ok => false | id_isPal,id_isNePal => false | id_isPal,id_tt => false | id_isPal,id_i => false | id_isPal,id_nil => false | id_isPal,id_a => false | id_isPal,id_isNeList => false | id_isPal,id_u => false | id_isList,id_active => true | id_isList,id_proper => true | id_isList,id_isQid => true | id_isList,id_and => true | id_isList,id_e => true | id_isList,id_mark => true | id_isList,id_top => true | id_isList,id_isPal => true | id_isList,id_isList => true | id_isList,id_o => false | id_isList,id___ => false | id_isList,id_ok => false | id_isList,id_isNePal => false | id_isList,id_tt => false | id_isList,id_i => false | id_isList,id_nil => false | id_isList,id_a => false | id_isList,id_isNeList => false | id_isList,id_u => false | id_o,id_active => true | id_o,id_proper => true | id_o,id_isQid => true | id_o,id_and => true | id_o,id_e => true | id_o,id_mark => true | id_o,id_top => true | id_o,id_isPal => true | id_o,id_isList => true | id_o,id_o => true | id_o,id___ => false | id_o,id_ok => false | id_o,id_isNePal => false | id_o,id_tt => false | id_o,id_i => false | id_o,id_nil => false | id_o,id_a => false | id_o,id_isNeList => false | id_o,id_u => false | id___,id_active => true | id___,id_proper => true | id___,id_isQid => true | id___,id_and => true | id___,id_e => true | id___,id_mark => true | id___,id_top => true | id___,id_isPal => true | id___,id_isList => true | id___,id_o => true | id___,id___ => true | id___,id_ok => false | id___,id_isNePal => false | id___,id_tt => false | id___,id_i => false | id___,id_nil => false | id___,id_a => false | id___,id_isNeList => false | id___,id_u => false | id_ok,id_active => true | id_ok,id_proper => true | id_ok,id_isQid => true | id_ok,id_and => true | id_ok,id_e => true | id_ok,id_mark => true | id_ok,id_top => true | id_ok,id_isPal => true | id_ok,id_isList => true | id_ok,id_o => true | id_ok,id___ => true | id_ok,id_ok => true | id_ok,id_isNePal => false | id_ok,id_tt => false | id_ok,id_i => false | id_ok,id_nil => false | id_ok,id_a => false | id_ok,id_isNeList => false | id_ok,id_u => false | id_isNePal,id_active => true | id_isNePal,id_proper => true | id_isNePal,id_isQid => true | id_isNePal,id_and => true | id_isNePal,id_e => true | id_isNePal,id_mark => true | id_isNePal,id_top => true | id_isNePal,id_isPal => true | id_isNePal,id_isList => true | id_isNePal,id_o => true | id_isNePal,id___ => true | id_isNePal,id_ok => true | id_isNePal,id_isNePal => true | id_isNePal,id_tt => false | id_isNePal,id_i => false | id_isNePal,id_nil => false | id_isNePal,id_a => false | id_isNePal,id_isNeList => false | id_isNePal,id_u => false | id_tt,id_active => true | id_tt,id_proper => true | id_tt,id_isQid => true | id_tt,id_and => true | id_tt,id_e => true | id_tt,id_mark => true | id_tt,id_top => true | id_tt,id_isPal => true | id_tt,id_isList => true | id_tt,id_o => true | id_tt,id___ => true | id_tt,id_ok => true | id_tt,id_isNePal => true | id_tt,id_tt => true | id_tt,id_i => false | id_tt,id_nil => false | id_tt,id_a => false | id_tt,id_isNeList => false | id_tt,id_u => false | id_i,id_active => true | id_i,id_proper => true | id_i,id_isQid => true | id_i,id_and => true | id_i,id_e => true | id_i,id_mark => true | id_i,id_top => true | id_i,id_isPal => true | id_i,id_isList => true | id_i,id_o => true | id_i,id___ => true | id_i,id_ok => true | id_i,id_isNePal => true | id_i,id_tt => true | id_i,id_i => true | id_i,id_nil => false | id_i,id_a => false | id_i,id_isNeList => false | id_i,id_u => false | id_nil,id_active => true | id_nil,id_proper => true | id_nil,id_isQid => true | id_nil,id_and => true | id_nil,id_e => true | id_nil,id_mark => true | id_nil,id_top => true | id_nil,id_isPal => true | id_nil,id_isList => true | id_nil,id_o => true | id_nil,id___ => true | id_nil,id_ok => true | id_nil,id_isNePal => true | id_nil,id_tt => true | id_nil,id_i => true | id_nil,id_nil => true | id_nil,id_a => false | id_nil,id_isNeList => false | id_nil,id_u => false | id_a,id_active => true | id_a,id_proper => true | id_a,id_isQid => true | id_a,id_and => true | id_a,id_e => true | id_a,id_mark => true | id_a,id_top => true | id_a,id_isPal => true | id_a,id_isList => true | id_a,id_o => true | id_a,id___ => true | id_a,id_ok => true | id_a,id_isNePal => true | id_a,id_tt => true | id_a,id_i => true | id_a,id_nil => true | id_a,id_a => true | id_a,id_isNeList => false | id_a,id_u => false | id_isNeList,id_active => true | id_isNeList,id_proper => true | id_isNeList,id_isQid => true | id_isNeList,id_and => true | id_isNeList,id_e => true | id_isNeList,id_mark => true | id_isNeList,id_top => true | id_isNeList,id_isPal => true | id_isNeList,id_isList => true | id_isNeList,id_o => true | id_isNeList,id___ => true | id_isNeList,id_ok => true | id_isNeList,id_isNePal => true | id_isNeList,id_tt => true | id_isNeList,id_i => true | id_isNeList,id_nil => true | id_isNeList,id_a => true | id_isNeList,id_isNeList => true | id_isNeList,id_u => false | id_u,id_active => true | id_u,id_proper => true | id_u,id_isQid => true | id_u,id_and => true | id_u,id_e => true | id_u,id_mark => true | id_u,id_top => true | id_u,id_isPal => true | id_u,id_isList => true | id_u,id_o => true | id_u,id___ => true | id_u,id_ok => true | id_u,id_isNePal => true | id_u,id_tt => true | id_u,id_i => true | id_u,id_nil => true | id_u,id_a => true | id_u,id_isNeList => true | id_u,id_u => true end. Module Symb. Definition A := symb. Definition eq_A := @eq A. Definition eq_proof : equivalence A eq_A. Proof. constructor. red ;reflexivity . red ;intros ;transitivity y ;assumption. red ;intros ;symmetry ;assumption. Defined. Add Relation A eq_A reflexivity proved by (@equiv_refl _ _ eq_proof) symmetry proved by (@equiv_sym _ _ eq_proof) transitivity proved by (@equiv_trans _ _ eq_proof) as EQA . Definition eq_bool := symb_eq_bool. Definition eq_bool_ok := symb_eq_bool_ok. End Symb. Export Symb. End F. Module Alg := term.Make'(F)(term_extension.IntVars). Module Alg_ext := term_extension.Make(Alg). Module EQT := equational_theory.Make(Alg). Module EQT_ext := equational_extension.Make(EQT). End algebra. Module R_xml_0_deep_rew. Inductive R_xml_0_rules : algebra.Alg.term ->algebra.Alg.term ->Prop := (* active(__(__(X_,Y_),Z_)) -> mark(__(X_,__(Y_,Z_))) *) | R_xml_0_rule_0 : R_xml_0_rules (algebra.Alg.Term algebra.F.id_mark ((algebra.Alg.Term algebra.F.id___ ((algebra.Alg.Var 1)::(algebra.Alg.Term algebra.F.id___ ((algebra.Alg.Var 2):: (algebra.Alg.Var 3)::nil))::nil))::nil)) (algebra.Alg.Term algebra.F.id_active ((algebra.Alg.Term algebra.F.id___ ((algebra.Alg.Term algebra.F.id___ ((algebra.Alg.Var 1)::(algebra.Alg.Var 2)::nil)):: (algebra.Alg.Var 3)::nil))::nil)) (* active(__(X_,nil)) -> mark(X_) *) | R_xml_0_rule_1 : R_xml_0_rules (algebra.Alg.Term algebra.F.id_mark ((algebra.Alg.Var 1)::nil)) (algebra.Alg.Term algebra.F.id_active ((algebra.Alg.Term algebra.F.id___ ((algebra.Alg.Var 1)::(algebra.Alg.Term algebra.F.id_nil nil)::nil))::nil)) (* active(__(nil,X_)) -> mark(X_) *) | R_xml_0_rule_2 : R_xml_0_rules (algebra.Alg.Term algebra.F.id_mark ((algebra.Alg.Var 1)::nil)) (algebra.Alg.Term algebra.F.id_active ((algebra.Alg.Term algebra.F.id___ ((algebra.Alg.Term algebra.F.id_nil nil):: (algebra.Alg.Var 1)::nil))::nil)) (* active(and(tt,X_)) -> mark(X_) *) | R_xml_0_rule_3 : R_xml_0_rules (algebra.Alg.Term algebra.F.id_mark ((algebra.Alg.Var 1)::nil)) (algebra.Alg.Term algebra.F.id_active ((algebra.Alg.Term algebra.F.id_and ((algebra.Alg.Term algebra.F.id_tt nil):: (algebra.Alg.Var 1)::nil))::nil)) (* active(isList(V_)) -> mark(isNeList(V_)) *) | R_xml_0_rule_4 : R_xml_0_rules (algebra.Alg.Term algebra.F.id_mark ((algebra.Alg.Term algebra.F.id_isNeList ((algebra.Alg.Var 4)::nil))::nil)) (algebra.Alg.Term algebra.F.id_active ((algebra.Alg.Term algebra.F.id_isList ((algebra.Alg.Var 4)::nil))::nil)) (* active(isList(nil)) -> mark(tt) *) | R_xml_0_rule_5 : R_xml_0_rules (algebra.Alg.Term algebra.F.id_mark ((algebra.Alg.Term algebra.F.id_tt nil)::nil)) (algebra.Alg.Term algebra.F.id_active ((algebra.Alg.Term algebra.F.id_isList ((algebra.Alg.Term algebra.F.id_nil nil)::nil))::nil)) (* active(isList(__(V1_,V2_))) -> mark(and(isList(V1_),isList(V2_))) *) | R_xml_0_rule_6 : R_xml_0_rules (algebra.Alg.Term algebra.F.id_mark ((algebra.Alg.Term algebra.F.id_and ((algebra.Alg.Term algebra.F.id_isList ((algebra.Alg.Var 5)::nil))::(algebra.Alg.Term algebra.F.id_isList ((algebra.Alg.Var 6)::nil))::nil))::nil)) (algebra.Alg.Term algebra.F.id_active ((algebra.Alg.Term algebra.F.id_isList ((algebra.Alg.Term algebra.F.id___ ((algebra.Alg.Var 5)::(algebra.Alg.Var 6)::nil))::nil))::nil)) (* active(isNeList(V_)) -> mark(isQid(V_)) *) | R_xml_0_rule_7 : R_xml_0_rules (algebra.Alg.Term algebra.F.id_mark ((algebra.Alg.Term algebra.F.id_isQid ((algebra.Alg.Var 4)::nil))::nil)) (algebra.Alg.Term algebra.F.id_active ((algebra.Alg.Term algebra.F.id_isNeList ((algebra.Alg.Var 4)::nil))::nil)) (* active(isNeList(__(V1_,V2_))) -> mark(and(isList(V1_),isNeList(V2_))) *) | R_xml_0_rule_8 : R_xml_0_rules (algebra.Alg.Term algebra.F.id_mark ((algebra.Alg.Term algebra.F.id_and ((algebra.Alg.Term algebra.F.id_isList ((algebra.Alg.Var 5)::nil))::(algebra.Alg.Term algebra.F.id_isNeList ((algebra.Alg.Var 6)::nil))::nil))::nil)) (algebra.Alg.Term algebra.F.id_active ((algebra.Alg.Term algebra.F.id_isNeList ((algebra.Alg.Term algebra.F.id___ ((algebra.Alg.Var 5)::(algebra.Alg.Var 6)::nil))::nil))::nil)) (* active(isNeList(__(V1_,V2_))) -> mark(and(isNeList(V1_),isList(V2_))) *) | R_xml_0_rule_9 : R_xml_0_rules (algebra.Alg.Term algebra.F.id_mark ((algebra.Alg.Term algebra.F.id_and ((algebra.Alg.Term algebra.F.id_isNeList ((algebra.Alg.Var 5)::nil))::(algebra.Alg.Term algebra.F.id_isList ((algebra.Alg.Var 6)::nil))::nil))::nil)) (algebra.Alg.Term algebra.F.id_active ((algebra.Alg.Term algebra.F.id_isNeList ((algebra.Alg.Term algebra.F.id___ ((algebra.Alg.Var 5)::(algebra.Alg.Var 6)::nil))::nil))::nil)) (* active(isNePal(V_)) -> mark(isQid(V_)) *) | R_xml_0_rule_10 : R_xml_0_rules (algebra.Alg.Term algebra.F.id_mark ((algebra.Alg.Term algebra.F.id_isQid ((algebra.Alg.Var 4)::nil))::nil)) (algebra.Alg.Term algebra.F.id_active ((algebra.Alg.Term algebra.F.id_isNePal ((algebra.Alg.Var 4)::nil))::nil)) (* active(isNePal(__(I_,__(P_,I_)))) -> mark(and(isQid(I_),isPal(P_))) *) | R_xml_0_rule_11 : R_xml_0_rules (algebra.Alg.Term algebra.F.id_mark ((algebra.Alg.Term algebra.F.id_and ((algebra.Alg.Term algebra.F.id_isQid ((algebra.Alg.Var 7)::nil))::(algebra.Alg.Term algebra.F.id_isPal ((algebra.Alg.Var 8)::nil))::nil))::nil)) (algebra.Alg.Term algebra.F.id_active ((algebra.Alg.Term algebra.F.id_isNePal ((algebra.Alg.Term algebra.F.id___ ((algebra.Alg.Var 7)::(algebra.Alg.Term algebra.F.id___ ((algebra.Alg.Var 8)::(algebra.Alg.Var 7)::nil))::nil))::nil))::nil)) (* active(isPal(V_)) -> mark(isNePal(V_)) *) | R_xml_0_rule_12 : R_xml_0_rules (algebra.Alg.Term algebra.F.id_mark ((algebra.Alg.Term algebra.F.id_isNePal ((algebra.Alg.Var 4)::nil))::nil)) (algebra.Alg.Term algebra.F.id_active ((algebra.Alg.Term algebra.F.id_isPal ((algebra.Alg.Var 4)::nil))::nil)) (* active(isPal(nil)) -> mark(tt) *) | R_xml_0_rule_13 : R_xml_0_rules (algebra.Alg.Term algebra.F.id_mark ((algebra.Alg.Term algebra.F.id_tt nil)::nil)) (algebra.Alg.Term algebra.F.id_active ((algebra.Alg.Term algebra.F.id_isPal ((algebra.Alg.Term algebra.F.id_nil nil)::nil))::nil)) (* active(isQid(a)) -> mark(tt) *) | R_xml_0_rule_14 : R_xml_0_rules (algebra.Alg.Term algebra.F.id_mark ((algebra.Alg.Term algebra.F.id_tt nil)::nil)) (algebra.Alg.Term algebra.F.id_active ((algebra.Alg.Term algebra.F.id_isQid ((algebra.Alg.Term algebra.F.id_a nil)::nil))::nil)) (* active(isQid(e)) -> mark(tt) *) | R_xml_0_rule_15 : R_xml_0_rules (algebra.Alg.Term algebra.F.id_mark ((algebra.Alg.Term algebra.F.id_tt nil)::nil)) (algebra.Alg.Term algebra.F.id_active ((algebra.Alg.Term algebra.F.id_isQid ((algebra.Alg.Term algebra.F.id_e nil)::nil))::nil)) (* active(isQid(i)) -> mark(tt) *) | R_xml_0_rule_16 : R_xml_0_rules (algebra.Alg.Term algebra.F.id_mark ((algebra.Alg.Term algebra.F.id_tt nil)::nil)) (algebra.Alg.Term algebra.F.id_active ((algebra.Alg.Term algebra.F.id_isQid ((algebra.Alg.Term algebra.F.id_i nil)::nil))::nil)) (* active(isQid(o)) -> mark(tt) *) | R_xml_0_rule_17 : R_xml_0_rules (algebra.Alg.Term algebra.F.id_mark ((algebra.Alg.Term algebra.F.id_tt nil)::nil)) (algebra.Alg.Term algebra.F.id_active ((algebra.Alg.Term algebra.F.id_isQid ((algebra.Alg.Term algebra.F.id_o nil)::nil))::nil)) (* active(isQid(u)) -> mark(tt) *) | R_xml_0_rule_18 : R_xml_0_rules (algebra.Alg.Term algebra.F.id_mark ((algebra.Alg.Term algebra.F.id_tt nil)::nil)) (algebra.Alg.Term algebra.F.id_active ((algebra.Alg.Term algebra.F.id_isQid ((algebra.Alg.Term algebra.F.id_u nil)::nil))::nil)) (* active(__(X1_,X2_)) -> __(active(X1_),X2_) *) | R_xml_0_rule_19 : R_xml_0_rules (algebra.Alg.Term algebra.F.id___ ((algebra.Alg.Term algebra.F.id_active ((algebra.Alg.Var 9)::nil)):: (algebra.Alg.Var 10)::nil)) (algebra.Alg.Term algebra.F.id_active ((algebra.Alg.Term algebra.F.id___ ((algebra.Alg.Var 9):: (algebra.Alg.Var 10)::nil))::nil)) (* active(__(X1_,X2_)) -> __(X1_,active(X2_)) *) | R_xml_0_rule_20 : R_xml_0_rules (algebra.Alg.Term algebra.F.id___ ((algebra.Alg.Var 9):: (algebra.Alg.Term algebra.F.id_active ((algebra.Alg.Var 10)::nil))::nil)) (algebra.Alg.Term algebra.F.id_active ((algebra.Alg.Term algebra.F.id___ ((algebra.Alg.Var 9):: (algebra.Alg.Var 10)::nil))::nil)) (* active(and(X1_,X2_)) -> and(active(X1_),X2_) *) | R_xml_0_rule_21 : R_xml_0_rules (algebra.Alg.Term algebra.F.id_and ((algebra.Alg.Term algebra.F.id_active ((algebra.Alg.Var 9)::nil)):: (algebra.Alg.Var 10)::nil)) (algebra.Alg.Term algebra.F.id_active ((algebra.Alg.Term algebra.F.id_and ((algebra.Alg.Var 9):: (algebra.Alg.Var 10)::nil))::nil)) (* __(mark(X1_),X2_) -> mark(__(X1_,X2_)) *) | R_xml_0_rule_22 : R_xml_0_rules (algebra.Alg.Term algebra.F.id_mark ((algebra.Alg.Term algebra.F.id___ ((algebra.Alg.Var 9):: (algebra.Alg.Var 10)::nil))::nil)) (algebra.Alg.Term algebra.F.id___ ((algebra.Alg.Term algebra.F.id_mark ((algebra.Alg.Var 9)::nil))::(algebra.Alg.Var 10)::nil)) (* __(X1_,mark(X2_)) -> mark(__(X1_,X2_)) *) | R_xml_0_rule_23 : R_xml_0_rules (algebra.Alg.Term algebra.F.id_mark ((algebra.Alg.Term algebra.F.id___ ((algebra.Alg.Var 9):: (algebra.Alg.Var 10)::nil))::nil)) (algebra.Alg.Term algebra.F.id___ ((algebra.Alg.Var 9):: (algebra.Alg.Term algebra.F.id_mark ((algebra.Alg.Var 10)::nil))::nil)) (* and(mark(X1_),X2_) -> mark(and(X1_,X2_)) *) | R_xml_0_rule_24 : R_xml_0_rules (algebra.Alg.Term algebra.F.id_mark ((algebra.Alg.Term algebra.F.id_and ((algebra.Alg.Var 9):: (algebra.Alg.Var 10)::nil))::nil)) (algebra.Alg.Term algebra.F.id_and ((algebra.Alg.Term algebra.F.id_mark ((algebra.Alg.Var 9)::nil))::(algebra.Alg.Var 10)::nil)) (* proper(__(X1_,X2_)) -> __(proper(X1_),proper(X2_)) *) | R_xml_0_rule_25 : R_xml_0_rules (algebra.Alg.Term algebra.F.id___ ((algebra.Alg.Term algebra.F.id_proper ((algebra.Alg.Var 9)::nil)):: (algebra.Alg.Term algebra.F.id_proper ((algebra.Alg.Var 10)::nil))::nil)) (algebra.Alg.Term algebra.F.id_proper ((algebra.Alg.Term algebra.F.id___ ((algebra.Alg.Var 9):: (algebra.Alg.Var 10)::nil))::nil)) (* proper(nil) -> ok(nil) *) | R_xml_0_rule_26 : R_xml_0_rules (algebra.Alg.Term algebra.F.id_ok ((algebra.Alg.Term algebra.F.id_nil nil)::nil)) (algebra.Alg.Term algebra.F.id_proper ((algebra.Alg.Term algebra.F.id_nil nil)::nil)) (* proper(and(X1_,X2_)) -> and(proper(X1_),proper(X2_)) *) | R_xml_0_rule_27 : R_xml_0_rules (algebra.Alg.Term algebra.F.id_and ((algebra.Alg.Term algebra.F.id_proper ((algebra.Alg.Var 9)::nil)):: (algebra.Alg.Term algebra.F.id_proper ((algebra.Alg.Var 10)::nil))::nil)) (algebra.Alg.Term algebra.F.id_proper ((algebra.Alg.Term algebra.F.id_and ((algebra.Alg.Var 9):: (algebra.Alg.Var 10)::nil))::nil)) (* proper(tt) -> ok(tt) *) | R_xml_0_rule_28 : R_xml_0_rules (algebra.Alg.Term algebra.F.id_ok ((algebra.Alg.Term algebra.F.id_tt nil)::nil)) (algebra.Alg.Term algebra.F.id_proper ((algebra.Alg.Term algebra.F.id_tt nil)::nil)) (* proper(isList(X_)) -> isList(proper(X_)) *) | R_xml_0_rule_29 : R_xml_0_rules (algebra.Alg.Term algebra.F.id_isList ((algebra.Alg.Term algebra.F.id_proper ((algebra.Alg.Var 1)::nil))::nil)) (algebra.Alg.Term algebra.F.id_proper ((algebra.Alg.Term algebra.F.id_isList ((algebra.Alg.Var 1)::nil))::nil)) (* proper(isNeList(X_)) -> isNeList(proper(X_)) *) | R_xml_0_rule_30 : R_xml_0_rules (algebra.Alg.Term algebra.F.id_isNeList ((algebra.Alg.Term algebra.F.id_proper ((algebra.Alg.Var 1)::nil))::nil)) (algebra.Alg.Term algebra.F.id_proper ((algebra.Alg.Term algebra.F.id_isNeList ((algebra.Alg.Var 1)::nil))::nil)) (* proper(isQid(X_)) -> isQid(proper(X_)) *) | R_xml_0_rule_31 : R_xml_0_rules (algebra.Alg.Term algebra.F.id_isQid ((algebra.Alg.Term algebra.F.id_proper ((algebra.Alg.Var 1)::nil))::nil)) (algebra.Alg.Term algebra.F.id_proper ((algebra.Alg.Term algebra.F.id_isQid ((algebra.Alg.Var 1)::nil))::nil)) (* proper(isNePal(X_)) -> isNePal(proper(X_)) *) | R_xml_0_rule_32 : R_xml_0_rules (algebra.Alg.Term algebra.F.id_isNePal ((algebra.Alg.Term algebra.F.id_proper ((algebra.Alg.Var 1)::nil))::nil)) (algebra.Alg.Term algebra.F.id_proper ((algebra.Alg.Term algebra.F.id_isNePal ((algebra.Alg.Var 1)::nil))::nil)) (* proper(isPal(X_)) -> isPal(proper(X_)) *) | R_xml_0_rule_33 : R_xml_0_rules (algebra.Alg.Term algebra.F.id_isPal ((algebra.Alg.Term algebra.F.id_proper ((algebra.Alg.Var 1)::nil))::nil)) (algebra.Alg.Term algebra.F.id_proper ((algebra.Alg.Term algebra.F.id_isPal ((algebra.Alg.Var 1)::nil))::nil)) (* proper(a) -> ok(a) *) | R_xml_0_rule_34 : R_xml_0_rules (algebra.Alg.Term algebra.F.id_ok ((algebra.Alg.Term algebra.F.id_a nil)::nil)) (algebra.Alg.Term algebra.F.id_proper ((algebra.Alg.Term algebra.F.id_a nil)::nil)) (* proper(e) -> ok(e) *) | R_xml_0_rule_35 : R_xml_0_rules (algebra.Alg.Term algebra.F.id_ok ((algebra.Alg.Term algebra.F.id_e nil)::nil)) (algebra.Alg.Term algebra.F.id_proper ((algebra.Alg.Term algebra.F.id_e nil)::nil)) (* proper(i) -> ok(i) *) | R_xml_0_rule_36 : R_xml_0_rules (algebra.Alg.Term algebra.F.id_ok ((algebra.Alg.Term algebra.F.id_i nil)::nil)) (algebra.Alg.Term algebra.F.id_proper ((algebra.Alg.Term algebra.F.id_i nil)::nil)) (* proper(o) -> ok(o) *) | R_xml_0_rule_37 : R_xml_0_rules (algebra.Alg.Term algebra.F.id_ok ((algebra.Alg.Term algebra.F.id_o nil)::nil)) (algebra.Alg.Term algebra.F.id_proper ((algebra.Alg.Term algebra.F.id_o nil)::nil)) (* proper(u) -> ok(u) *) | R_xml_0_rule_38 : R_xml_0_rules (algebra.Alg.Term algebra.F.id_ok ((algebra.Alg.Term algebra.F.id_u nil)::nil)) (algebra.Alg.Term algebra.F.id_proper ((algebra.Alg.Term algebra.F.id_u nil)::nil)) (* __(ok(X1_),ok(X2_)) -> ok(__(X1_,X2_)) *) | R_xml_0_rule_39 : R_xml_0_rules (algebra.Alg.Term algebra.F.id_ok ((algebra.Alg.Term algebra.F.id___ ((algebra.Alg.Var 9):: (algebra.Alg.Var 10)::nil))::nil)) (algebra.Alg.Term algebra.F.id___ ((algebra.Alg.Term algebra.F.id_ok ((algebra.Alg.Var 9)::nil))::(algebra.Alg.Term algebra.F.id_ok ((algebra.Alg.Var 10)::nil))::nil)) (* and(ok(X1_),ok(X2_)) -> ok(and(X1_,X2_)) *) | R_xml_0_rule_40 : R_xml_0_rules (algebra.Alg.Term algebra.F.id_ok ((algebra.Alg.Term algebra.F.id_and ((algebra.Alg.Var 9):: (algebra.Alg.Var 10)::nil))::nil)) (algebra.Alg.Term algebra.F.id_and ((algebra.Alg.Term algebra.F.id_ok ((algebra.Alg.Var 9)::nil))::(algebra.Alg.Term algebra.F.id_ok ((algebra.Alg.Var 10)::nil))::nil)) (* isList(ok(X_)) -> ok(isList(X_)) *) | R_xml_0_rule_41 : R_xml_0_rules (algebra.Alg.Term algebra.F.id_ok ((algebra.Alg.Term algebra.F.id_isList ((algebra.Alg.Var 1)::nil))::nil)) (algebra.Alg.Term algebra.F.id_isList ((algebra.Alg.Term algebra.F.id_ok ((algebra.Alg.Var 1)::nil))::nil)) (* isNeList(ok(X_)) -> ok(isNeList(X_)) *) | R_xml_0_rule_42 : R_xml_0_rules (algebra.Alg.Term algebra.F.id_ok ((algebra.Alg.Term algebra.F.id_isNeList ((algebra.Alg.Var 1)::nil))::nil)) (algebra.Alg.Term algebra.F.id_isNeList ((algebra.Alg.Term algebra.F.id_ok ((algebra.Alg.Var 1)::nil))::nil)) (* isQid(ok(X_)) -> ok(isQid(X_)) *) | R_xml_0_rule_43 : R_xml_0_rules (algebra.Alg.Term algebra.F.id_ok ((algebra.Alg.Term algebra.F.id_isQid ((algebra.Alg.Var 1)::nil))::nil)) (algebra.Alg.Term algebra.F.id_isQid ((algebra.Alg.Term algebra.F.id_ok ((algebra.Alg.Var 1)::nil))::nil)) (* isNePal(ok(X_)) -> ok(isNePal(X_)) *) | R_xml_0_rule_44 : R_xml_0_rules (algebra.Alg.Term algebra.F.id_ok ((algebra.Alg.Term algebra.F.id_isNePal ((algebra.Alg.Var 1)::nil))::nil)) (algebra.Alg.Term algebra.F.id_isNePal ((algebra.Alg.Term algebra.F.id_ok ((algebra.Alg.Var 1)::nil))::nil)) (* isPal(ok(X_)) -> ok(isPal(X_)) *) | R_xml_0_rule_45 : R_xml_0_rules (algebra.Alg.Term algebra.F.id_ok ((algebra.Alg.Term algebra.F.id_isPal ((algebra.Alg.Var 1)::nil))::nil)) (algebra.Alg.Term algebra.F.id_isPal ((algebra.Alg.Term algebra.F.id_ok ((algebra.Alg.Var 1)::nil))::nil)) (* top(mark(X_)) -> top(proper(X_)) *) | R_xml_0_rule_46 : R_xml_0_rules (algebra.Alg.Term algebra.F.id_top ((algebra.Alg.Term algebra.F.id_proper ((algebra.Alg.Var 1)::nil))::nil)) (algebra.Alg.Term algebra.F.id_top ((algebra.Alg.Term algebra.F.id_mark ((algebra.Alg.Var 1)::nil))::nil)) (* top(ok(X_)) -> top(active(X_)) *) | R_xml_0_rule_47 : R_xml_0_rules (algebra.Alg.Term algebra.F.id_top ((algebra.Alg.Term algebra.F.id_active ((algebra.Alg.Var 1)::nil))::nil)) (algebra.Alg.Term algebra.F.id_top ((algebra.Alg.Term algebra.F.id_ok ((algebra.Alg.Var 1)::nil))::nil)) . Definition R_xml_0_rule_as_list_0 := ((algebra.Alg.Term algebra.F.id_active ((algebra.Alg.Term algebra.F.id___ ((algebra.Alg.Term algebra.F.id___ ((algebra.Alg.Var 1):: (algebra.Alg.Var 2)::nil))::(algebra.Alg.Var 3)::nil))::nil)), (algebra.Alg.Term algebra.F.id_mark ((algebra.Alg.Term algebra.F.id___ ((algebra.Alg.Var 1)::(algebra.Alg.Term algebra.F.id___ ((algebra.Alg.Var 2)::(algebra.Alg.Var 3)::nil))::nil))::nil))):: nil. Definition R_xml_0_rule_as_list_1 := ((algebra.Alg.Term algebra.F.id_active ((algebra.Alg.Term algebra.F.id___ ((algebra.Alg.Var 1)::(algebra.Alg.Term algebra.F.id_nil nil)::nil))::nil)), (algebra.Alg.Term algebra.F.id_mark ((algebra.Alg.Var 1)::nil))):: R_xml_0_rule_as_list_0. Definition R_xml_0_rule_as_list_2 := ((algebra.Alg.Term algebra.F.id_active ((algebra.Alg.Term algebra.F.id___ ((algebra.Alg.Term algebra.F.id_nil nil):: (algebra.Alg.Var 1)::nil))::nil)), (algebra.Alg.Term algebra.F.id_mark ((algebra.Alg.Var 1)::nil))):: R_xml_0_rule_as_list_1. Definition R_xml_0_rule_as_list_3 := ((algebra.Alg.Term algebra.F.id_active ((algebra.Alg.Term algebra.F.id_and ((algebra.Alg.Term algebra.F.id_tt nil):: (algebra.Alg.Var 1)::nil))::nil)), (algebra.Alg.Term algebra.F.id_mark ((algebra.Alg.Var 1)::nil))):: R_xml_0_rule_as_list_2. Definition R_xml_0_rule_as_list_4 := ((algebra.Alg.Term algebra.F.id_active ((algebra.Alg.Term algebra.F.id_isList ((algebra.Alg.Var 4)::nil))::nil)), (algebra.Alg.Term algebra.F.id_mark ((algebra.Alg.Term algebra.F.id_isNeList ((algebra.Alg.Var 4)::nil))::nil))):: R_xml_0_rule_as_list_3. Definition R_xml_0_rule_as_list_5 := ((algebra.Alg.Term algebra.F.id_active ((algebra.Alg.Term algebra.F.id_isList ((algebra.Alg.Term algebra.F.id_nil nil)::nil))::nil)), (algebra.Alg.Term algebra.F.id_mark ((algebra.Alg.Term algebra.F.id_tt nil)::nil)))::R_xml_0_rule_as_list_4. Definition R_xml_0_rule_as_list_6 := ((algebra.Alg.Term algebra.F.id_active ((algebra.Alg.Term algebra.F.id_isList ((algebra.Alg.Term algebra.F.id___ ((algebra.Alg.Var 5)::(algebra.Alg.Var 6)::nil))::nil))::nil)), (algebra.Alg.Term algebra.F.id_mark ((algebra.Alg.Term algebra.F.id_and ((algebra.Alg.Term algebra.F.id_isList ((algebra.Alg.Var 5)::nil)):: (algebra.Alg.Term algebra.F.id_isList ((algebra.Alg.Var 6)::nil))::nil))::nil)))::R_xml_0_rule_as_list_5. Definition R_xml_0_rule_as_list_7 := ((algebra.Alg.Term algebra.F.id_active ((algebra.Alg.Term algebra.F.id_isNeList ((algebra.Alg.Var 4)::nil))::nil)), (algebra.Alg.Term algebra.F.id_mark ((algebra.Alg.Term algebra.F.id_isQid ((algebra.Alg.Var 4)::nil))::nil))):: R_xml_0_rule_as_list_6. Definition R_xml_0_rule_as_list_8 := ((algebra.Alg.Term algebra.F.id_active ((algebra.Alg.Term algebra.F.id_isNeList ((algebra.Alg.Term algebra.F.id___ ((algebra.Alg.Var 5)::(algebra.Alg.Var 6)::nil))::nil))::nil)), (algebra.Alg.Term algebra.F.id_mark ((algebra.Alg.Term algebra.F.id_and ((algebra.Alg.Term algebra.F.id_isList ((algebra.Alg.Var 5)::nil)):: (algebra.Alg.Term algebra.F.id_isNeList ((algebra.Alg.Var 6)::nil))::nil))::nil)))::R_xml_0_rule_as_list_7. Definition R_xml_0_rule_as_list_9 := ((algebra.Alg.Term algebra.F.id_active ((algebra.Alg.Term algebra.F.id_isNeList ((algebra.Alg.Term algebra.F.id___ ((algebra.Alg.Var 5)::(algebra.Alg.Var 6)::nil))::nil))::nil)), (algebra.Alg.Term algebra.F.id_mark ((algebra.Alg.Term algebra.F.id_and ((algebra.Alg.Term algebra.F.id_isNeList ((algebra.Alg.Var 5)::nil)):: (algebra.Alg.Term algebra.F.id_isList ((algebra.Alg.Var 6)::nil))::nil))::nil)))::R_xml_0_rule_as_list_8. Definition R_xml_0_rule_as_list_10 := ((algebra.Alg.Term algebra.F.id_active ((algebra.Alg.Term algebra.F.id_isNePal ((algebra.Alg.Var 4)::nil))::nil)), (algebra.Alg.Term algebra.F.id_mark ((algebra.Alg.Term algebra.F.id_isQid ((algebra.Alg.Var 4)::nil))::nil))):: R_xml_0_rule_as_list_9. Definition R_xml_0_rule_as_list_11 := ((algebra.Alg.Term algebra.F.id_active ((algebra.Alg.Term algebra.F.id_isNePal ((algebra.Alg.Term algebra.F.id___ ((algebra.Alg.Var 7)::(algebra.Alg.Term algebra.F.id___ ((algebra.Alg.Var 8)::(algebra.Alg.Var 7)::nil))::nil))::nil))::nil)), (algebra.Alg.Term algebra.F.id_mark ((algebra.Alg.Term algebra.F.id_and ((algebra.Alg.Term algebra.F.id_isQid ((algebra.Alg.Var 7)::nil)):: (algebra.Alg.Term algebra.F.id_isPal ((algebra.Alg.Var 8)::nil))::nil))::nil)))::R_xml_0_rule_as_list_10. Definition R_xml_0_rule_as_list_12 := ((algebra.Alg.Term algebra.F.id_active ((algebra.Alg.Term algebra.F.id_isPal ((algebra.Alg.Var 4)::nil))::nil)), (algebra.Alg.Term algebra.F.id_mark ((algebra.Alg.Term algebra.F.id_isNePal ((algebra.Alg.Var 4)::nil))::nil))):: R_xml_0_rule_as_list_11. Definition R_xml_0_rule_as_list_13 := ((algebra.Alg.Term algebra.F.id_active ((algebra.Alg.Term algebra.F.id_isPal ((algebra.Alg.Term algebra.F.id_nil nil)::nil))::nil)), (algebra.Alg.Term algebra.F.id_mark ((algebra.Alg.Term algebra.F.id_tt nil)::nil)))::R_xml_0_rule_as_list_12. Definition R_xml_0_rule_as_list_14 := ((algebra.Alg.Term algebra.F.id_active ((algebra.Alg.Term algebra.F.id_isQid ((algebra.Alg.Term algebra.F.id_a nil)::nil))::nil)), (algebra.Alg.Term algebra.F.id_mark ((algebra.Alg.Term algebra.F.id_tt nil)::nil)))::R_xml_0_rule_as_list_13. Definition R_xml_0_rule_as_list_15 := ((algebra.Alg.Term algebra.F.id_active ((algebra.Alg.Term algebra.F.id_isQid ((algebra.Alg.Term algebra.F.id_e nil)::nil))::nil)), (algebra.Alg.Term algebra.F.id_mark ((algebra.Alg.Term algebra.F.id_tt nil)::nil)))::R_xml_0_rule_as_list_14. Definition R_xml_0_rule_as_list_16 := ((algebra.Alg.Term algebra.F.id_active ((algebra.Alg.Term algebra.F.id_isQid ((algebra.Alg.Term algebra.F.id_i nil)::nil))::nil)), (algebra.Alg.Term algebra.F.id_mark ((algebra.Alg.Term algebra.F.id_tt nil)::nil)))::R_xml_0_rule_as_list_15. Definition R_xml_0_rule_as_list_17 := ((algebra.Alg.Term algebra.F.id_active ((algebra.Alg.Term algebra.F.id_isQid ((algebra.Alg.Term algebra.F.id_o nil)::nil))::nil)), (algebra.Alg.Term algebra.F.id_mark ((algebra.Alg.Term algebra.F.id_tt nil)::nil)))::R_xml_0_rule_as_list_16. Definition R_xml_0_rule_as_list_18 := ((algebra.Alg.Term algebra.F.id_active ((algebra.Alg.Term algebra.F.id_isQid ((algebra.Alg.Term algebra.F.id_u nil)::nil))::nil)), (algebra.Alg.Term algebra.F.id_mark ((algebra.Alg.Term algebra.F.id_tt nil)::nil)))::R_xml_0_rule_as_list_17. Definition R_xml_0_rule_as_list_19 := ((algebra.Alg.Term algebra.F.id_active ((algebra.Alg.Term algebra.F.id___ ((algebra.Alg.Var 9)::(algebra.Alg.Var 10)::nil))::nil)), (algebra.Alg.Term algebra.F.id___ ((algebra.Alg.Term algebra.F.id_active ((algebra.Alg.Var 9)::nil))::(algebra.Alg.Var 10)::nil))):: R_xml_0_rule_as_list_18. Definition R_xml_0_rule_as_list_20 := ((algebra.Alg.Term algebra.F.id_active ((algebra.Alg.Term algebra.F.id___ ((algebra.Alg.Var 9)::(algebra.Alg.Var 10)::nil))::nil)), (algebra.Alg.Term algebra.F.id___ ((algebra.Alg.Var 9):: (algebra.Alg.Term algebra.F.id_active ((algebra.Alg.Var 10)::nil))::nil)))::R_xml_0_rule_as_list_19. Definition R_xml_0_rule_as_list_21 := ((algebra.Alg.Term algebra.F.id_active ((algebra.Alg.Term algebra.F.id_and ((algebra.Alg.Var 9):: (algebra.Alg.Var 10)::nil))::nil)), (algebra.Alg.Term algebra.F.id_and ((algebra.Alg.Term algebra.F.id_active ((algebra.Alg.Var 9)::nil)):: (algebra.Alg.Var 10)::nil)))::R_xml_0_rule_as_list_20. Definition R_xml_0_rule_as_list_22 := ((algebra.Alg.Term algebra.F.id___ ((algebra.Alg.Term algebra.F.id_mark ((algebra.Alg.Var 9)::nil))::(algebra.Alg.Var 10)::nil)), (algebra.Alg.Term algebra.F.id_mark ((algebra.Alg.Term algebra.F.id___ ((algebra.Alg.Var 9)::(algebra.Alg.Var 10)::nil))::nil))):: R_xml_0_rule_as_list_21. Definition R_xml_0_rule_as_list_23 := ((algebra.Alg.Term algebra.F.id___ ((algebra.Alg.Var 9):: (algebra.Alg.Term algebra.F.id_mark ((algebra.Alg.Var 10)::nil))::nil)), (algebra.Alg.Term algebra.F.id_mark ((algebra.Alg.Term algebra.F.id___ ((algebra.Alg.Var 9)::(algebra.Alg.Var 10)::nil))::nil))):: R_xml_0_rule_as_list_22. Definition R_xml_0_rule_as_list_24 := ((algebra.Alg.Term algebra.F.id_and ((algebra.Alg.Term algebra.F.id_mark ((algebra.Alg.Var 9)::nil))::(algebra.Alg.Var 10)::nil)), (algebra.Alg.Term algebra.F.id_mark ((algebra.Alg.Term algebra.F.id_and ((algebra.Alg.Var 9)::(algebra.Alg.Var 10)::nil))::nil))):: R_xml_0_rule_as_list_23. Definition R_xml_0_rule_as_list_25 := ((algebra.Alg.Term algebra.F.id_proper ((algebra.Alg.Term algebra.F.id___ ((algebra.Alg.Var 9)::(algebra.Alg.Var 10)::nil))::nil)), (algebra.Alg.Term algebra.F.id___ ((algebra.Alg.Term algebra.F.id_proper ((algebra.Alg.Var 9)::nil))::(algebra.Alg.Term algebra.F.id_proper ((algebra.Alg.Var 10)::nil))::nil)))::R_xml_0_rule_as_list_24. Definition R_xml_0_rule_as_list_26 := ((algebra.Alg.Term algebra.F.id_proper ((algebra.Alg.Term algebra.F.id_nil nil)::nil)), (algebra.Alg.Term algebra.F.id_ok ((algebra.Alg.Term algebra.F.id_nil nil)::nil)))::R_xml_0_rule_as_list_25. Definition R_xml_0_rule_as_list_27 := ((algebra.Alg.Term algebra.F.id_proper ((algebra.Alg.Term algebra.F.id_and ((algebra.Alg.Var 9):: (algebra.Alg.Var 10)::nil))::nil)), (algebra.Alg.Term algebra.F.id_and ((algebra.Alg.Term algebra.F.id_proper ((algebra.Alg.Var 9)::nil))::(algebra.Alg.Term algebra.F.id_proper ((algebra.Alg.Var 10)::nil))::nil))):: R_xml_0_rule_as_list_26. Definition R_xml_0_rule_as_list_28 := ((algebra.Alg.Term algebra.F.id_proper ((algebra.Alg.Term algebra.F.id_tt nil)::nil)), (algebra.Alg.Term algebra.F.id_ok ((algebra.Alg.Term algebra.F.id_tt nil)::nil)))::R_xml_0_rule_as_list_27. Definition R_xml_0_rule_as_list_29 := ((algebra.Alg.Term algebra.F.id_proper ((algebra.Alg.Term algebra.F.id_isList ((algebra.Alg.Var 1)::nil))::nil)), (algebra.Alg.Term algebra.F.id_isList ((algebra.Alg.Term algebra.F.id_proper ((algebra.Alg.Var 1)::nil))::nil))):: R_xml_0_rule_as_list_28. Definition R_xml_0_rule_as_list_30 := ((algebra.Alg.Term algebra.F.id_proper ((algebra.Alg.Term algebra.F.id_isNeList ((algebra.Alg.Var 1)::nil))::nil)), (algebra.Alg.Term algebra.F.id_isNeList ((algebra.Alg.Term algebra.F.id_proper ((algebra.Alg.Var 1)::nil))::nil))):: R_xml_0_rule_as_list_29. Definition R_xml_0_rule_as_list_31 := ((algebra.Alg.Term algebra.F.id_proper ((algebra.Alg.Term algebra.F.id_isQid ((algebra.Alg.Var 1)::nil))::nil)), (algebra.Alg.Term algebra.F.id_isQid ((algebra.Alg.Term algebra.F.id_proper ((algebra.Alg.Var 1)::nil))::nil))):: R_xml_0_rule_as_list_30. Definition R_xml_0_rule_as_list_32 := ((algebra.Alg.Term algebra.F.id_proper ((algebra.Alg.Term algebra.F.id_isNePal ((algebra.Alg.Var 1)::nil))::nil)), (algebra.Alg.Term algebra.F.id_isNePal ((algebra.Alg.Term algebra.F.id_proper ((algebra.Alg.Var 1)::nil))::nil))):: R_xml_0_rule_as_list_31. Definition R_xml_0_rule_as_list_33 := ((algebra.Alg.Term algebra.F.id_proper ((algebra.Alg.Term algebra.F.id_isPal ((algebra.Alg.Var 1)::nil))::nil)), (algebra.Alg.Term algebra.F.id_isPal ((algebra.Alg.Term algebra.F.id_proper ((algebra.Alg.Var 1)::nil))::nil))):: R_xml_0_rule_as_list_32. Definition R_xml_0_rule_as_list_34 := ((algebra.Alg.Term algebra.F.id_proper ((algebra.Alg.Term algebra.F.id_a nil)::nil)), (algebra.Alg.Term algebra.F.id_ok ((algebra.Alg.Term algebra.F.id_a nil)::nil)))::R_xml_0_rule_as_list_33. Definition R_xml_0_rule_as_list_35 := ((algebra.Alg.Term algebra.F.id_proper ((algebra.Alg.Term algebra.F.id_e nil)::nil)), (algebra.Alg.Term algebra.F.id_ok ((algebra.Alg.Term algebra.F.id_e nil)::nil)))::R_xml_0_rule_as_list_34. Definition R_xml_0_rule_as_list_36 := ((algebra.Alg.Term algebra.F.id_proper ((algebra.Alg.Term algebra.F.id_i nil)::nil)), (algebra.Alg.Term algebra.F.id_ok ((algebra.Alg.Term algebra.F.id_i nil)::nil)))::R_xml_0_rule_as_list_35. Definition R_xml_0_rule_as_list_37 := ((algebra.Alg.Term algebra.F.id_proper ((algebra.Alg.Term algebra.F.id_o nil)::nil)), (algebra.Alg.Term algebra.F.id_ok ((algebra.Alg.Term algebra.F.id_o nil)::nil)))::R_xml_0_rule_as_list_36. Definition R_xml_0_rule_as_list_38 := ((algebra.Alg.Term algebra.F.id_proper ((algebra.Alg.Term algebra.F.id_u nil)::nil)), (algebra.Alg.Term algebra.F.id_ok ((algebra.Alg.Term algebra.F.id_u nil)::nil)))::R_xml_0_rule_as_list_37. Definition R_xml_0_rule_as_list_39 := ((algebra.Alg.Term algebra.F.id___ ((algebra.Alg.Term algebra.F.id_ok ((algebra.Alg.Var 9)::nil))::(algebra.Alg.Term algebra.F.id_ok ((algebra.Alg.Var 10)::nil))::nil)), (algebra.Alg.Term algebra.F.id_ok ((algebra.Alg.Term algebra.F.id___ ((algebra.Alg.Var 9)::(algebra.Alg.Var 10)::nil))::nil))):: R_xml_0_rule_as_list_38. Definition R_xml_0_rule_as_list_40 := ((algebra.Alg.Term algebra.F.id_and ((algebra.Alg.Term algebra.F.id_ok ((algebra.Alg.Var 9)::nil))::(algebra.Alg.Term algebra.F.id_ok ((algebra.Alg.Var 10)::nil))::nil)), (algebra.Alg.Term algebra.F.id_ok ((algebra.Alg.Term algebra.F.id_and ((algebra.Alg.Var 9)::(algebra.Alg.Var 10)::nil))::nil))):: R_xml_0_rule_as_list_39. Definition R_xml_0_rule_as_list_41 := ((algebra.Alg.Term algebra.F.id_isList ((algebra.Alg.Term algebra.F.id_ok ((algebra.Alg.Var 1)::nil))::nil)), (algebra.Alg.Term algebra.F.id_ok ((algebra.Alg.Term algebra.F.id_isList ((algebra.Alg.Var 1)::nil))::nil)))::R_xml_0_rule_as_list_40. Definition R_xml_0_rule_as_list_42 := ((algebra.Alg.Term algebra.F.id_isNeList ((algebra.Alg.Term algebra.F.id_ok ((algebra.Alg.Var 1)::nil))::nil)), (algebra.Alg.Term algebra.F.id_ok ((algebra.Alg.Term algebra.F.id_isNeList ((algebra.Alg.Var 1)::nil))::nil))):: R_xml_0_rule_as_list_41. Definition R_xml_0_rule_as_list_43 := ((algebra.Alg.Term algebra.F.id_isQid ((algebra.Alg.Term algebra.F.id_ok ((algebra.Alg.Var 1)::nil))::nil)), (algebra.Alg.Term algebra.F.id_ok ((algebra.Alg.Term algebra.F.id_isQid ((algebra.Alg.Var 1)::nil))::nil)))::R_xml_0_rule_as_list_42. Definition R_xml_0_rule_as_list_44 := ((algebra.Alg.Term algebra.F.id_isNePal ((algebra.Alg.Term algebra.F.id_ok ((algebra.Alg.Var 1)::nil))::nil)), (algebra.Alg.Term algebra.F.id_ok ((algebra.Alg.Term algebra.F.id_isNePal ((algebra.Alg.Var 1)::nil))::nil))):: R_xml_0_rule_as_list_43. Definition R_xml_0_rule_as_list_45 := ((algebra.Alg.Term algebra.F.id_isPal ((algebra.Alg.Term algebra.F.id_ok ((algebra.Alg.Var 1)::nil))::nil)), (algebra.Alg.Term algebra.F.id_ok ((algebra.Alg.Term algebra.F.id_isPal ((algebra.Alg.Var 1)::nil))::nil)))::R_xml_0_rule_as_list_44. Definition R_xml_0_rule_as_list_46 := ((algebra.Alg.Term algebra.F.id_top ((algebra.Alg.Term algebra.F.id_mark ((algebra.Alg.Var 1)::nil))::nil)), (algebra.Alg.Term algebra.F.id_top ((algebra.Alg.Term algebra.F.id_proper ((algebra.Alg.Var 1)::nil))::nil))):: R_xml_0_rule_as_list_45. Definition R_xml_0_rule_as_list_47 := ((algebra.Alg.Term algebra.F.id_top ((algebra.Alg.Term algebra.F.id_ok ((algebra.Alg.Var 1)::nil))::nil)), (algebra.Alg.Term algebra.F.id_top ((algebra.Alg.Term algebra.F.id_active ((algebra.Alg.Var 1)::nil))::nil))):: R_xml_0_rule_as_list_46. Definition R_xml_0_rule_as_list := R_xml_0_rule_as_list_47. Lemma R_xml_0_rules_included : forall l r, R_xml_0_rules r l <-> In (l,r) R_xml_0_rule_as_list. Proof. intros l r. constructor. intros H. case H;clear H; (apply (more_list.mem_impl_in (@eq (algebra.Alg.term*algebra.Alg.term))); [tauto|idtac]); match goal with | |- _ _ _ ?t ?l => let u := fresh "u" in (generalize (more_list.mem_bool_ok _ _ algebra.Alg_ext.eq_term_term_bool_ok t l); set (u:=more_list.mem_bool algebra.Alg_ext.eq_term_term_bool t l) in *; vm_compute in u|-;unfold u in *;clear u;intros H;refine H) end . intros H. vm_compute in H|-. rewrite <- or_ext_generated.or25_equiv in H|-. case H;clear H;intros H. injection H;intros ;subst;constructor 48. injection H;intros ;subst;constructor 47. injection H;intros ;subst;constructor 46. injection H;intros ;subst;constructor 45. injection H;intros ;subst;constructor 44. injection H;intros ;subst;constructor 43. injection H;intros ;subst;constructor 42. injection H;intros ;subst;constructor 41. injection H;intros ;subst;constructor 40. injection H;intros ;subst;constructor 39. injection H;intros ;subst;constructor 38. injection H;intros ;subst;constructor 37. injection H;intros ;subst;constructor 36. injection H;intros ;subst;constructor 35. injection H;intros ;subst;constructor 34. injection H;intros ;subst;constructor 33. injection H;intros ;subst;constructor 32. injection H;intros ;subst;constructor 31. injection H;intros ;subst;constructor 30. injection H;intros ;subst;constructor 29. injection H;intros ;subst;constructor 28. injection H;intros ;subst;constructor 27. injection H;intros ;subst;constructor 26. injection H;intros ;subst;constructor 25. rewrite <- or_ext_generated.or25_equiv in H|-. case H;clear H;intros H. injection H;intros ;subst;constructor 24. injection H;intros ;subst;constructor 23. injection H;intros ;subst;constructor 22. injection H;intros ;subst;constructor 21. injection H;intros ;subst;constructor 20. injection H;intros ;subst;constructor 19. injection H;intros ;subst;constructor 18. injection H;intros ;subst;constructor 17. injection H;intros ;subst;constructor 16. injection H;intros ;subst;constructor 15. injection H;intros ;subst;constructor 14. injection H;intros ;subst;constructor 13. injection H;intros ;subst;constructor 12. injection H;intros ;subst;constructor 11. injection H;intros ;subst;constructor 10. injection H;intros ;subst;constructor 9. injection H;intros ;subst;constructor 8. injection H;intros ;subst;constructor 7. injection H;intros ;subst;constructor 6. injection H;intros ;subst;constructor 5. injection H;intros ;subst;constructor 4. injection H;intros ;subst;constructor 3. injection H;intros ;subst;constructor 2. injection H;intros ;subst;constructor 1. elim H. Qed. Lemma R_xml_0_non_var : forall x t, ~R_xml_0_rules t (algebra.EQT.T.Var x). Proof. intros x t H. inversion H. Qed. Lemma R_xml_0_reg : forall s t, (R_xml_0_rules s t) -> forall x, In x (algebra.Alg.var_list s) ->In x (algebra.Alg.var_list t). Proof. intros s t H. inversion H;intros x Hx; (apply (more_list.mem_impl_in (@eq algebra.Alg.variable));[tauto|idtac]); apply (more_list.in_impl_mem (@eq algebra.Alg.variable)) in Hx; vm_compute in Hx|-*;tauto. Qed. Inductive and_9 (x12 x13 x14 x15 x16 x17 x18 x19 x20:Prop) : Prop := | conj_9 : x12->x13->x14->x15->x16->x17->x18->x19->x20-> and_9 x12 x13 x14 x15 x16 x17 x18 x19 x20 . Lemma are_constuctors_of_R_xml_0 : forall t t', (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_rules) t' t) -> and_9 (t = (algebra.Alg.Term algebra.F.id_e nil) -> t' = (algebra.Alg.Term algebra.F.id_e nil)) (forall x13, t = (algebra.Alg.Term algebra.F.id_mark (x13::nil)) -> exists x12, t' = (algebra.Alg.Term algebra.F.id_mark (x12::nil))/\ (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_rules) x12 x13)) (t = (algebra.Alg.Term algebra.F.id_o nil) -> t' = (algebra.Alg.Term algebra.F.id_o nil)) (forall x13, t = (algebra.Alg.Term algebra.F.id_ok (x13::nil)) -> exists x12, t' = (algebra.Alg.Term algebra.F.id_ok (x12::nil))/\ (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_rules) x12 x13)) (t = (algebra.Alg.Term algebra.F.id_tt nil) -> t' = (algebra.Alg.Term algebra.F.id_tt nil)) (t = (algebra.Alg.Term algebra.F.id_i nil) -> t' = (algebra.Alg.Term algebra.F.id_i nil)) (t = (algebra.Alg.Term algebra.F.id_nil nil) -> t' = (algebra.Alg.Term algebra.F.id_nil nil)) (t = (algebra.Alg.Term algebra.F.id_a nil) -> t' = (algebra.Alg.Term algebra.F.id_a nil)) (t = (algebra.Alg.Term algebra.F.id_u nil) -> t' = (algebra.Alg.Term algebra.F.id_u nil)). Proof. intros t t' H. induction H as [|y IH z z_to_y] using closure_extension.refl_trans_clos_ind2. constructor 1. intros H;intuition;constructor 1. intros x13 H;exists x13;intuition;constructor 1. intros H;intuition;constructor 1. intros x13 H;exists x13;intuition;constructor 1. intros H;intuition;constructor 1. intros H;intuition;constructor 1. intros H;intuition;constructor 1. intros H;intuition;constructor 1. intros H;intuition;constructor 1. inversion z_to_y as [t1 t2 H H0 H1|f l1 l2 H0 H H2];clear z_to_y;subst. inversion H as [t1 t2 sigma H2 H1 H0];clear H IH;subst;inversion H2; clear ;constructor;try (intros until 0 );clear ;intros abs; discriminate abs. destruct IH as [H_id_e H_id_mark H_id_o H_id_ok H_id_tt H_id_i H_id_nil H_id_a H_id_u]. constructor. clear H_id_mark H_id_o H_id_ok H_id_tt H_id_i H_id_nil H_id_a H_id_u; intros H;injection H;clear H;intros ;subst; repeat ( match goal with | H:closure.one_step_list (algebra.EQT.one_step _) _ _ |- _ => inversion H;clear H;subst end ). clear H_id_e H_id_o H_id_ok H_id_tt H_id_i H_id_nil H_id_a H_id_u; intros x13 H;injection H;clear H;intros ;subst; repeat ( match goal with | H:closure.one_step_list (algebra.EQT.one_step _) _ _ |- _ => inversion H;clear H;subst end ). match goal with | H:algebra.EQT.one_step _ ?y x13 |- _ => destruct (H_id_mark y (refl_equal _)) as [x12];intros ;intuition; exists x12;intuition;eapply closure_extension.refl_trans_clos_R; eassumption end . clear H_id_e H_id_mark H_id_ok H_id_tt H_id_i H_id_nil H_id_a H_id_u; intros H;injection H;clear H;intros ;subst; repeat ( match goal with | H:closure.one_step_list (algebra.EQT.one_step _) _ _ |- _ => inversion H;clear H;subst end ). clear H_id_e H_id_mark H_id_o H_id_tt H_id_i H_id_nil H_id_a H_id_u; intros x13 H;injection H;clear H;intros ;subst; repeat ( match goal with | H:closure.one_step_list (algebra.EQT.one_step _) _ _ |- _ => inversion H;clear H;subst end ). match goal with | H:algebra.EQT.one_step _ ?y x13 |- _ => destruct (H_id_ok y (refl_equal _)) as [x12];intros ;intuition; exists x12;intuition;eapply closure_extension.refl_trans_clos_R; eassumption end . clear H_id_e H_id_mark H_id_o H_id_ok H_id_i H_id_nil H_id_a H_id_u; intros H;injection H;clear H;intros ;subst; repeat ( match goal with | H:closure.one_step_list (algebra.EQT.one_step _) _ _ |- _ => inversion H;clear H;subst end ). clear H_id_e H_id_mark H_id_o H_id_ok H_id_tt H_id_nil H_id_a H_id_u; intros H;injection H;clear H;intros ;subst; repeat ( match goal with | H:closure.one_step_list (algebra.EQT.one_step _) _ _ |- _ => inversion H;clear H;subst end ). clear H_id_e H_id_mark H_id_o H_id_ok H_id_tt H_id_i H_id_a H_id_u; intros H;injection H;clear H;intros ;subst; repeat ( match goal with | H:closure.one_step_list (algebra.EQT.one_step _) _ _ |- _ => inversion H;clear H;subst end ). clear H_id_e H_id_mark H_id_o H_id_ok H_id_tt H_id_i H_id_nil H_id_u; intros H;injection H;clear H;intros ;subst; repeat ( match goal with | H:closure.one_step_list (algebra.EQT.one_step _) _ _ |- _ => inversion H;clear H;subst end ). clear H_id_e H_id_mark H_id_o H_id_ok H_id_tt H_id_i H_id_nil H_id_a; intros H;injection H;clear H;intros ;subst; repeat ( match goal with | H:closure.one_step_list (algebra.EQT.one_step _) _ _ |- _ => inversion H;clear H;subst end ). Qed. Lemma id_e_is_R_xml_0_constructor : forall t t', (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_rules) t' t) -> t = (algebra.Alg.Term algebra.F.id_e nil) -> t' = (algebra.Alg.Term algebra.F.id_e nil). Proof. intros t t' H. destruct (are_constuctors_of_R_xml_0 H). assumption. Qed. Lemma id_mark_is_R_xml_0_constructor : forall t t', (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_rules) t' t) -> forall x13, t = (algebra.Alg.Term algebra.F.id_mark (x13::nil)) -> exists x12, t' = (algebra.Alg.Term algebra.F.id_mark (x12::nil))/\ (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_rules) x12 x13). Proof. intros t t' H. destruct (are_constuctors_of_R_xml_0 H). assumption. Qed. Lemma id_o_is_R_xml_0_constructor : forall t t', (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_rules) t' t) -> t = (algebra.Alg.Term algebra.F.id_o nil) -> t' = (algebra.Alg.Term algebra.F.id_o nil). Proof. intros t t' H. destruct (are_constuctors_of_R_xml_0 H). assumption. Qed. Lemma id_ok_is_R_xml_0_constructor : forall t t', (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_rules) t' t) -> forall x13, t = (algebra.Alg.Term algebra.F.id_ok (x13::nil)) -> exists x12, t' = (algebra.Alg.Term algebra.F.id_ok (x12::nil))/\ (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_rules) x12 x13). Proof. intros t t' H. destruct (are_constuctors_of_R_xml_0 H). assumption. Qed. Lemma id_tt_is_R_xml_0_constructor : forall t t', (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_rules) t' t) -> t = (algebra.Alg.Term algebra.F.id_tt nil) -> t' = (algebra.Alg.Term algebra.F.id_tt nil). Proof. intros t t' H. destruct (are_constuctors_of_R_xml_0 H). assumption. Qed. Lemma id_i_is_R_xml_0_constructor : forall t t', (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_rules) t' t) -> t = (algebra.Alg.Term algebra.F.id_i nil) -> t' = (algebra.Alg.Term algebra.F.id_i nil). Proof. intros t t' H. destruct (are_constuctors_of_R_xml_0 H). assumption. Qed. Lemma id_nil_is_R_xml_0_constructor : forall t t', (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_rules) t' t) -> t = (algebra.Alg.Term algebra.F.id_nil nil) -> t' = (algebra.Alg.Term algebra.F.id_nil nil). Proof. intros t t' H. destruct (are_constuctors_of_R_xml_0 H). assumption. Qed. Lemma id_a_is_R_xml_0_constructor : forall t t', (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_rules) t' t) -> t = (algebra.Alg.Term algebra.F.id_a nil) -> t' = (algebra.Alg.Term algebra.F.id_a nil). Proof. intros t t' H. destruct (are_constuctors_of_R_xml_0 H). assumption. Qed. Lemma id_u_is_R_xml_0_constructor : forall t t', (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_rules) t' t) -> t = (algebra.Alg.Term algebra.F.id_u nil) -> t' = (algebra.Alg.Term algebra.F.id_u nil). Proof. intros t t' H. destruct (are_constuctors_of_R_xml_0 H). assumption. Qed. Ltac impossible_star_reduction_R_xml_0 := match goal with | H:closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_rules) _ (algebra.Alg.Term algebra.F.id_e nil) |- _ => let Heq := fresh "Heq" in (set (Heq:=id_e_is_R_xml_0_constructor H (refl_equal _)) in *; (discriminate Heq)|| (clearbody Heq;try (subst);try (clear Heq);clear H; impossible_star_reduction_R_xml_0 )) | H:closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_rules) _ (algebra.Alg.Term algebra.F.id_mark (?x12::nil)) |- _ => let x12 := fresh "x" in (let Heq := fresh "Heq" in (let Hred1 := fresh "Hred" in (destruct (id_mark_is_R_xml_0_constructor H (refl_equal _)) as [x12 [Heq Hred1]]; (discriminate Heq)|| (injection Heq;intros ;subst;clear Heq;clear H; impossible_star_reduction_R_xml_0 )))) | H:closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_rules) _ (algebra.Alg.Term algebra.F.id_o nil) |- _ => let Heq := fresh "Heq" in (set (Heq:=id_o_is_R_xml_0_constructor H (refl_equal _)) in *; (discriminate Heq)|| (clearbody Heq;try (subst);try (clear Heq);clear H; impossible_star_reduction_R_xml_0 )) | H:closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_rules) _ (algebra.Alg.Term algebra.F.id_ok (?x12::nil)) |- _ => let x12 := fresh "x" in (let Heq := fresh "Heq" in (let Hred1 := fresh "Hred" in (destruct (id_ok_is_R_xml_0_constructor H (refl_equal _)) as [x12 [Heq Hred1]]; (discriminate Heq)|| (injection Heq;intros ;subst;clear Heq;clear H; impossible_star_reduction_R_xml_0 )))) | H:closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_rules) _ (algebra.Alg.Term algebra.F.id_tt nil) |- _ => let Heq := fresh "Heq" in (set (Heq:=id_tt_is_R_xml_0_constructor H (refl_equal _)) in *; (discriminate Heq)|| (clearbody Heq;try (subst);try (clear Heq);clear H; impossible_star_reduction_R_xml_0 )) | H:closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_rules) _ (algebra.Alg.Term algebra.F.id_i nil) |- _ => let Heq := fresh "Heq" in (set (Heq:=id_i_is_R_xml_0_constructor H (refl_equal _)) in *; (discriminate Heq)|| (clearbody Heq;try (subst);try (clear Heq);clear H; impossible_star_reduction_R_xml_0 )) | H:closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_rules) _ (algebra.Alg.Term algebra.F.id_nil nil) |- _ => let Heq := fresh "Heq" in (set (Heq:=id_nil_is_R_xml_0_constructor H (refl_equal _)) in *; (discriminate Heq)|| (clearbody Heq;try (subst);try (clear Heq);clear H; impossible_star_reduction_R_xml_0 )) | H:closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_rules) _ (algebra.Alg.Term algebra.F.id_a nil) |- _ => let Heq := fresh "Heq" in (set (Heq:=id_a_is_R_xml_0_constructor H (refl_equal _)) in *; (discriminate Heq)|| (clearbody Heq;try (subst);try (clear Heq);clear H; impossible_star_reduction_R_xml_0 )) | H:closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_rules) _ (algebra.Alg.Term algebra.F.id_u nil) |- _ => let Heq := fresh "Heq" in (set (Heq:=id_u_is_R_xml_0_constructor H (refl_equal _)) in *; (discriminate Heq)|| (clearbody Heq;try (subst);try (clear Heq);clear H; impossible_star_reduction_R_xml_0 )) end . Ltac simplify_star_reduction_R_xml_0 := match goal with | H:closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_rules) _ (algebra.Alg.Term algebra.F.id_e nil) |- _ => let Heq := fresh "Heq" in (set (Heq:=id_e_is_R_xml_0_constructor H (refl_equal _)) in *; (discriminate Heq)|| (clearbody Heq;try (subst);try (clear Heq);clear H; try (simplify_star_reduction_R_xml_0 ))) | H:closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_rules) _ (algebra.Alg.Term algebra.F.id_mark (?x12::nil)) |- _ => let x12 := fresh "x" in (let Heq := fresh "Heq" in (let Hred1 := fresh "Hred" in (destruct (id_mark_is_R_xml_0_constructor H (refl_equal _)) as [x12 [Heq Hred1]]; (discriminate Heq)|| (injection Heq;intros ;subst;clear Heq;clear H; try (simplify_star_reduction_R_xml_0 ))))) | H:closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_rules) _ (algebra.Alg.Term algebra.F.id_o nil) |- _ => let Heq := fresh "Heq" in (set (Heq:=id_o_is_R_xml_0_constructor H (refl_equal _)) in *; (discriminate Heq)|| (clearbody Heq;try (subst);try (clear Heq);clear H; try (simplify_star_reduction_R_xml_0 ))) | H:closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_rules) _ (algebra.Alg.Term algebra.F.id_ok (?x12::nil)) |- _ => let x12 := fresh "x" in (let Heq := fresh "Heq" in (let Hred1 := fresh "Hred" in (destruct (id_ok_is_R_xml_0_constructor H (refl_equal _)) as [x12 [Heq Hred1]]; (discriminate Heq)|| (injection Heq;intros ;subst;clear Heq;clear H; try (simplify_star_reduction_R_xml_0 ))))) | H:closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_rules) _ (algebra.Alg.Term algebra.F.id_tt nil) |- _ => let Heq := fresh "Heq" in (set (Heq:=id_tt_is_R_xml_0_constructor H (refl_equal _)) in *; (discriminate Heq)|| (clearbody Heq;try (subst);try (clear Heq);clear H; try (simplify_star_reduction_R_xml_0 ))) | H:closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_rules) _ (algebra.Alg.Term algebra.F.id_i nil) |- _ => let Heq := fresh "Heq" in (set (Heq:=id_i_is_R_xml_0_constructor H (refl_equal _)) in *; (discriminate Heq)|| (clearbody Heq;try (subst);try (clear Heq);clear H; try (simplify_star_reduction_R_xml_0 ))) | H:closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_rules) _ (algebra.Alg.Term algebra.F.id_nil nil) |- _ => let Heq := fresh "Heq" in (set (Heq:=id_nil_is_R_xml_0_constructor H (refl_equal _)) in *; (discriminate Heq)|| (clearbody Heq;try (subst);try (clear Heq);clear H; try (simplify_star_reduction_R_xml_0 ))) | H:closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_rules) _ (algebra.Alg.Term algebra.F.id_a nil) |- _ => let Heq := fresh "Heq" in (set (Heq:=id_a_is_R_xml_0_constructor H (refl_equal _)) in *; (discriminate Heq)|| (clearbody Heq;try (subst);try (clear Heq);clear H; try (simplify_star_reduction_R_xml_0 ))) | H:closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_rules) _ (algebra.Alg.Term algebra.F.id_u nil) |- _ => let Heq := fresh "Heq" in (set (Heq:=id_u_is_R_xml_0_constructor H (refl_equal _)) in *; (discriminate Heq)|| (clearbody Heq;try (subst);try (clear Heq);clear H; try (simplify_star_reduction_R_xml_0 ))) end . End R_xml_0_deep_rew. Module InterpGen := interp.Interp(algebra.EQT). Module ddp := dp.MakeDP(algebra.EQT). Module SymbType. Definition A := algebra.Alg.F.Symb.A. End SymbType. Module Symb_more_list := more_list_extention.Make(SymbType)(algebra.Alg.F.Symb). Module SymbSet := list_set.Make(algebra.F.Symb). Module Interp. Section S. Require Import interp. Hypothesis A : Type. Hypothesis Ale Alt Aeq : A -> A -> Prop. Hypothesis Aop : interp.ordering_pair Aeq Alt Ale. Hypothesis A0 : A. Notation Local "a <= b" := (Ale a b). Hypothesis P_id_active : A ->A. Hypothesis P_id_proper : A ->A. Hypothesis P_id_isQid : A ->A. Hypothesis P_id_and : A ->A ->A. Hypothesis P_id_e : A. Hypothesis P_id_mark : A ->A. Hypothesis P_id_top : A ->A. Hypothesis P_id_isPal : A ->A. Hypothesis P_id_isList : A ->A. Hypothesis P_id_o : A. Hypothesis P_id___ : A ->A ->A. Hypothesis P_id_ok : A ->A. Hypothesis P_id_isNePal : A ->A. Hypothesis P_id_tt : A. Hypothesis P_id_i : A. Hypothesis P_id_nil : A. Hypothesis P_id_a : A. Hypothesis P_id_isNeList : A ->A. Hypothesis P_id_u : A. Hypothesis P_id_active_monotonic : forall x12 x13, (A0 <= x13)/\ (x13 <= x12) ->P_id_active x13 <= P_id_active x12. Hypothesis P_id_proper_monotonic : forall x12 x13, (A0 <= x13)/\ (x13 <= x12) ->P_id_proper x13 <= P_id_proper x12. Hypothesis P_id_isQid_monotonic : forall x12 x13, (A0 <= x13)/\ (x13 <= x12) ->P_id_isQid x13 <= P_id_isQid x12. Hypothesis P_id_and_monotonic : forall x12 x14 x13 x15, (A0 <= x15)/\ (x15 <= x14) -> (A0 <= x13)/\ (x13 <= x12) ->P_id_and x13 x15 <= P_id_and x12 x14. Hypothesis P_id_mark_monotonic : forall x12 x13, (A0 <= x13)/\ (x13 <= x12) ->P_id_mark x13 <= P_id_mark x12. Hypothesis P_id_top_monotonic : forall x12 x13, (A0 <= x13)/\ (x13 <= x12) ->P_id_top x13 <= P_id_top x12. Hypothesis P_id_isPal_monotonic : forall x12 x13, (A0 <= x13)/\ (x13 <= x12) ->P_id_isPal x13 <= P_id_isPal x12. Hypothesis P_id_isList_monotonic : forall x12 x13, (A0 <= x13)/\ (x13 <= x12) ->P_id_isList x13 <= P_id_isList x12. Hypothesis P_id____monotonic : forall x12 x14 x13 x15, (A0 <= x15)/\ (x15 <= x14) -> (A0 <= x13)/\ (x13 <= x12) ->P_id___ x13 x15 <= P_id___ x12 x14. Hypothesis P_id_ok_monotonic : forall x12 x13, (A0 <= x13)/\ (x13 <= x12) ->P_id_ok x13 <= P_id_ok x12. Hypothesis P_id_isNePal_monotonic : forall x12 x13, (A0 <= x13)/\ (x13 <= x12) ->P_id_isNePal x13 <= P_id_isNePal x12. Hypothesis P_id_isNeList_monotonic : forall x12 x13, (A0 <= x13)/\ (x13 <= x12) ->P_id_isNeList x13 <= P_id_isNeList x12. Hypothesis P_id_active_bounded : forall x12, (A0 <= x12) ->A0 <= P_id_active x12. Hypothesis P_id_proper_bounded : forall x12, (A0 <= x12) ->A0 <= P_id_proper x12. Hypothesis P_id_isQid_bounded : forall x12, (A0 <= x12) ->A0 <= P_id_isQid x12. Hypothesis P_id_and_bounded : forall x12 x13, (A0 <= x12) ->(A0 <= x13) ->A0 <= P_id_and x13 x12. Hypothesis P_id_e_bounded : A0 <= P_id_e . Hypothesis P_id_mark_bounded : forall x12, (A0 <= x12) ->A0 <= P_id_mark x12. Hypothesis P_id_top_bounded : forall x12, (A0 <= x12) ->A0 <= P_id_top x12. Hypothesis P_id_isPal_bounded : forall x12, (A0 <= x12) ->A0 <= P_id_isPal x12. Hypothesis P_id_isList_bounded : forall x12, (A0 <= x12) ->A0 <= P_id_isList x12. Hypothesis P_id_o_bounded : A0 <= P_id_o . Hypothesis P_id____bounded : forall x12 x13, (A0 <= x12) ->(A0 <= x13) ->A0 <= P_id___ x13 x12. Hypothesis P_id_ok_bounded : forall x12, (A0 <= x12) ->A0 <= P_id_ok x12. Hypothesis P_id_isNePal_bounded : forall x12, (A0 <= x12) ->A0 <= P_id_isNePal x12. Hypothesis P_id_tt_bounded : A0 <= P_id_tt . Hypothesis P_id_i_bounded : A0 <= P_id_i . Hypothesis P_id_nil_bounded : A0 <= P_id_nil . Hypothesis P_id_a_bounded : A0 <= P_id_a . Hypothesis P_id_isNeList_bounded : forall x12, (A0 <= x12) ->A0 <= P_id_isNeList x12. Hypothesis P_id_u_bounded : A0 <= P_id_u . Fixpoint measure t { struct t } := match t with | (algebra.Alg.Term algebra.F.id_active (x12::nil)) => P_id_active (measure x12) | (algebra.Alg.Term algebra.F.id_proper (x12::nil)) => P_id_proper (measure x12) | (algebra.Alg.Term algebra.F.id_isQid (x12::nil)) => P_id_isQid (measure x12) | (algebra.Alg.Term algebra.F.id_and (x13::x12::nil)) => P_id_and (measure x13) (measure x12) | (algebra.Alg.Term algebra.F.id_e nil) => P_id_e | (algebra.Alg.Term algebra.F.id_mark (x12::nil)) => P_id_mark (measure x12) | (algebra.Alg.Term algebra.F.id_top (x12::nil)) => P_id_top (measure x12) | (algebra.Alg.Term algebra.F.id_isPal (x12::nil)) => P_id_isPal (measure x12) | (algebra.Alg.Term algebra.F.id_isList (x12::nil)) => P_id_isList (measure x12) | (algebra.Alg.Term algebra.F.id_o nil) => P_id_o | (algebra.Alg.Term algebra.F.id___ (x13::x12::nil)) => P_id___ (measure x13) (measure x12) | (algebra.Alg.Term algebra.F.id_ok (x12::nil)) => P_id_ok (measure x12) | (algebra.Alg.Term algebra.F.id_isNePal (x12::nil)) => P_id_isNePal (measure x12) | (algebra.Alg.Term algebra.F.id_tt nil) => P_id_tt | (algebra.Alg.Term algebra.F.id_i nil) => P_id_i | (algebra.Alg.Term algebra.F.id_nil nil) => P_id_nil | (algebra.Alg.Term algebra.F.id_a nil) => P_id_a | (algebra.Alg.Term algebra.F.id_isNeList (x12::nil)) => P_id_isNeList (measure x12) | (algebra.Alg.Term algebra.F.id_u nil) => P_id_u | _ => A0 end. Lemma measure_equation : forall t, measure t = match t with | (algebra.Alg.Term algebra.F.id_active (x12::nil)) => P_id_active (measure x12) | (algebra.Alg.Term algebra.F.id_proper (x12::nil)) => P_id_proper (measure x12) | (algebra.Alg.Term algebra.F.id_isQid (x12::nil)) => P_id_isQid (measure x12) | (algebra.Alg.Term algebra.F.id_and (x13::x12::nil)) => P_id_and (measure x13) (measure x12) | (algebra.Alg.Term algebra.F.id_e nil) => P_id_e | (algebra.Alg.Term algebra.F.id_mark (x12::nil)) => P_id_mark (measure x12) | (algebra.Alg.Term algebra.F.id_top (x12::nil)) => P_id_top (measure x12) | (algebra.Alg.Term algebra.F.id_isPal (x12::nil)) => P_id_isPal (measure x12) | (algebra.Alg.Term algebra.F.id_isList (x12::nil)) => P_id_isList (measure x12) | (algebra.Alg.Term algebra.F.id_o nil) => P_id_o | (algebra.Alg.Term algebra.F.id___ (x13::x12::nil)) => P_id___ (measure x13) (measure x12) | (algebra.Alg.Term algebra.F.id_ok (x12::nil)) => P_id_ok (measure x12) | (algebra.Alg.Term algebra.F.id_isNePal (x12::nil)) => P_id_isNePal (measure x12) | (algebra.Alg.Term algebra.F.id_tt nil) => P_id_tt | (algebra.Alg.Term algebra.F.id_i nil) => P_id_i | (algebra.Alg.Term algebra.F.id_nil nil) => P_id_nil | (algebra.Alg.Term algebra.F.id_a nil) => P_id_a | (algebra.Alg.Term algebra.F.id_isNeList (x12::nil)) => P_id_isNeList (measure x12) | (algebra.Alg.Term algebra.F.id_u nil) => P_id_u | _ => A0 end. Proof. intros t;case t;intros ;apply refl_equal. Qed. Definition Pols f : InterpGen.Pol_type A (InterpGen.get_arity f) := match f with | algebra.F.id_active => P_id_active | algebra.F.id_proper => P_id_proper | algebra.F.id_isQid => P_id_isQid | algebra.F.id_and => P_id_and | algebra.F.id_e => P_id_e | algebra.F.id_mark => P_id_mark | algebra.F.id_top => P_id_top | algebra.F.id_isPal => P_id_isPal | algebra.F.id_isList => P_id_isList | algebra.F.id_o => P_id_o | algebra.F.id___ => P_id___ | algebra.F.id_ok => P_id_ok | algebra.F.id_isNePal => P_id_isNePal | algebra.F.id_tt => P_id_tt | algebra.F.id_i => P_id_i | algebra.F.id_nil => P_id_nil | algebra.F.id_a => P_id_a | algebra.F.id_isNeList => P_id_isNeList | algebra.F.id_u => P_id_u end. Lemma same_measure : forall t, measure t = InterpGen.measure A0 Pols t. Proof. fix 1 . intros [a| f l]. simpl in |-*. unfold eq_rect_r, eq_rect, sym_eq in |-*. reflexivity . refine match f with | algebra.F.id_active => match l with | nil => _ | _::nil => _ | _::_::_ => _ end | algebra.F.id_proper => match l with | nil => _ | _::nil => _ | _::_::_ => _ end | algebra.F.id_isQid => match l with | nil => _ | _::nil => _ | _::_::_ => _ end | algebra.F.id_and => match l with | nil => _ | _::nil => _ | _::_::nil => _ | _::_::_::_ => _ end | algebra.F.id_e => match l with | nil => _ | _::_ => _ end | algebra.F.id_mark => match l with | nil => _ | _::nil => _ | _::_::_ => _ end | algebra.F.id_top => match l with | nil => _ | _::nil => _ | _::_::_ => _ end | algebra.F.id_isPal => match l with | nil => _ | _::nil => _ | _::_::_ => _ end | algebra.F.id_isList => match l with | nil => _ | _::nil => _ | _::_::_ => _ end | algebra.F.id_o => match l with | nil => _ | _::_ => _ end | algebra.F.id___ => match l with | nil => _ | _::nil => _ | _::_::nil => _ | _::_::_::_ => _ end | algebra.F.id_ok => match l with | nil => _ | _::nil => _ | _::_::_ => _ end | algebra.F.id_isNePal => match l with | nil => _ | _::nil => _ | _::_::_ => _ end | algebra.F.id_tt => match l with | nil => _ | _::_ => _ end | algebra.F.id_i => match l with | nil => _ | _::_ => _ end | algebra.F.id_nil => match l with | nil => _ | _::_ => _ end | algebra.F.id_a => match l with | nil => _ | _::_ => _ end | algebra.F.id_isNeList => match l with | nil => _ | _::nil => _ | _::_::_ => _ end | algebra.F.id_u => match l with | nil => _ | _::_ => _ end end;simpl in |-*;unfold eq_rect_r, eq_rect, sym_eq in |-*; try (reflexivity );f_equal ;auto. Qed. Lemma measure_bounded : forall t, A0 <= measure t. Proof. intros t. rewrite same_measure in |-*. apply (InterpGen.measure_bounded Aop). intros f. case f. vm_compute in |-*;intros ;apply P_id_active_bounded;assumption. vm_compute in |-*;intros ;apply P_id_proper_bounded;assumption. vm_compute in |-*;intros ;apply P_id_isQid_bounded;assumption. vm_compute in |-*;intros ;apply P_id_and_bounded;assumption. vm_compute in |-*;intros ;apply P_id_e_bounded;assumption. vm_compute in |-*;intros ;apply P_id_mark_bounded;assumption. vm_compute in |-*;intros ;apply P_id_top_bounded;assumption. vm_compute in |-*;intros ;apply P_id_isPal_bounded;assumption. vm_compute in |-*;intros ;apply P_id_isList_bounded;assumption. vm_compute in |-*;intros ;apply P_id_o_bounded;assumption. vm_compute in |-*;intros ;apply P_id____bounded;assumption. vm_compute in |-*;intros ;apply P_id_ok_bounded;assumption. vm_compute in |-*;intros ;apply P_id_isNePal_bounded;assumption. vm_compute in |-*;intros ;apply P_id_tt_bounded;assumption. vm_compute in |-*;intros ;apply P_id_i_bounded;assumption. vm_compute in |-*;intros ;apply P_id_nil_bounded;assumption. vm_compute in |-*;intros ;apply P_id_a_bounded;assumption. vm_compute in |-*;intros ;apply P_id_isNeList_bounded;assumption. vm_compute in |-*;intros ;apply P_id_u_bounded;assumption. Qed. Ltac generate_pos_hyp := match goal with | H:context [measure ?x] |- _ => let v := fresh "v" in (let H := fresh "h" in (set (H:=measure_bounded x) in *;set (v:=measure x) in *; clearbody H;clearbody v)) | |- context [measure ?x] => let v := fresh "v" in (let H := fresh "h" in (set (H:=measure_bounded x) in *;set (v:=measure x) in *; clearbody H;clearbody v)) end . Hypothesis rules_monotonic : forall l r, (algebra.EQT.axiom R_xml_0_deep_rew.R_xml_0_rules r l) -> measure r <= measure l. Lemma measure_star_monotonic : forall l r, (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) r l) ->measure r <= measure l. Proof. intros . do 2 (rewrite same_measure in |-*). apply InterpGen.measure_star_monotonic with (1:=Aop) (Pols:=Pols) (rules:=R_xml_0_deep_rew.R_xml_0_rules). intros f. case f. vm_compute in |-*;intros ;apply P_id_active_monotonic;assumption. vm_compute in |-*;intros ;apply P_id_proper_monotonic;assumption. vm_compute in |-*;intros ;apply P_id_isQid_monotonic;assumption. vm_compute in |-*;intros ;apply P_id_and_monotonic;assumption. vm_compute in |-*;apply (Aop.(le_refl)). vm_compute in |-*;intros ;apply P_id_mark_monotonic;assumption. vm_compute in |-*;intros ;apply P_id_top_monotonic;assumption. vm_compute in |-*;intros ;apply P_id_isPal_monotonic;assumption. vm_compute in |-*;intros ;apply P_id_isList_monotonic;assumption. vm_compute in |-*;apply (Aop.(le_refl)). vm_compute in |-*;intros ;apply P_id____monotonic;assumption. vm_compute in |-*;intros ;apply P_id_ok_monotonic;assumption. vm_compute in |-*;intros ;apply P_id_isNePal_monotonic;assumption. vm_compute in |-*;apply (Aop.(le_refl)). vm_compute in |-*;apply (Aop.(le_refl)). vm_compute in |-*;apply (Aop.(le_refl)). vm_compute in |-*;apply (Aop.(le_refl)). vm_compute in |-*;intros ;apply P_id_isNeList_monotonic;assumption. vm_compute in |-*;apply (Aop.(le_refl)). intros f. case f. vm_compute in |-*;intros ;apply P_id_active_bounded;assumption. vm_compute in |-*;intros ;apply P_id_proper_bounded;assumption. vm_compute in |-*;intros ;apply P_id_isQid_bounded;assumption. vm_compute in |-*;intros ;apply P_id_and_bounded;assumption. vm_compute in |-*;intros ;apply P_id_e_bounded;assumption. vm_compute in |-*;intros ;apply P_id_mark_bounded;assumption. vm_compute in |-*;intros ;apply P_id_top_bounded;assumption. vm_compute in |-*;intros ;apply P_id_isPal_bounded;assumption. vm_compute in |-*;intros ;apply P_id_isList_bounded;assumption. vm_compute in |-*;intros ;apply P_id_o_bounded;assumption. vm_compute in |-*;intros ;apply P_id____bounded;assumption. vm_compute in |-*;intros ;apply P_id_ok_bounded;assumption. vm_compute in |-*;intros ;apply P_id_isNePal_bounded;assumption. vm_compute in |-*;intros ;apply P_id_tt_bounded;assumption. vm_compute in |-*;intros ;apply P_id_i_bounded;assumption. vm_compute in |-*;intros ;apply P_id_nil_bounded;assumption. vm_compute in |-*;intros ;apply P_id_a_bounded;assumption. vm_compute in |-*;intros ;apply P_id_isNeList_bounded;assumption. vm_compute in |-*;intros ;apply P_id_u_bounded;assumption. intros . do 2 (rewrite <- same_measure in |-*). apply rules_monotonic;assumption. assumption. Qed. Hypothesis P_id_ISQID : A ->A. Hypothesis P_id____hat_1 : A ->A ->A. Hypothesis P_id_TOP : A ->A. Hypothesis P_id_ISNEPAL : A ->A. Hypothesis P_id_AND : A ->A ->A. Hypothesis P_id_ISPAL : A ->A. Hypothesis P_id_ISNELIST : A ->A. Hypothesis P_id_ACTIVE : A ->A. Hypothesis P_id_PROPER : A ->A. Hypothesis P_id_ISLIST : A ->A. Hypothesis P_id_ISQID_monotonic : forall x12 x13, (A0 <= x13)/\ (x13 <= x12) ->P_id_ISQID x13 <= P_id_ISQID x12. Hypothesis P_id____hat_1_monotonic : forall x12 x14 x13 x15, (A0 <= x15)/\ (x15 <= x14) -> (A0 <= x13)/\ (x13 <= x12) -> P_id____hat_1 x13 x15 <= P_id____hat_1 x12 x14. Hypothesis P_id_TOP_monotonic : forall x12 x13, (A0 <= x13)/\ (x13 <= x12) ->P_id_TOP x13 <= P_id_TOP x12. Hypothesis P_id_ISNEPAL_monotonic : forall x12 x13, (A0 <= x13)/\ (x13 <= x12) ->P_id_ISNEPAL x13 <= P_id_ISNEPAL x12. Hypothesis P_id_AND_monotonic : forall x12 x14 x13 x15, (A0 <= x15)/\ (x15 <= x14) -> (A0 <= x13)/\ (x13 <= x12) ->P_id_AND x13 x15 <= P_id_AND x12 x14. Hypothesis P_id_ISPAL_monotonic : forall x12 x13, (A0 <= x13)/\ (x13 <= x12) ->P_id_ISPAL x13 <= P_id_ISPAL x12. Hypothesis P_id_ISNELIST_monotonic : forall x12 x13, (A0 <= x13)/\ (x13 <= x12) ->P_id_ISNELIST x13 <= P_id_ISNELIST x12. Hypothesis P_id_ACTIVE_monotonic : forall x12 x13, (A0 <= x13)/\ (x13 <= x12) ->P_id_ACTIVE x13 <= P_id_ACTIVE x12. Hypothesis P_id_PROPER_monotonic : forall x12 x13, (A0 <= x13)/\ (x13 <= x12) ->P_id_PROPER x13 <= P_id_PROPER x12. Hypothesis P_id_ISLIST_monotonic : forall x12 x13, (A0 <= x13)/\ (x13 <= x12) ->P_id_ISLIST x13 <= P_id_ISLIST x12. Definition marked_measure t := match t with | (algebra.Alg.Term algebra.F.id_isQid (x12::nil)) => P_id_ISQID (measure x12) | (algebra.Alg.Term algebra.F.id___ (x13::x12::nil)) => P_id____hat_1 (measure x13) (measure x12) | (algebra.Alg.Term algebra.F.id_top (x12::nil)) => P_id_TOP (measure x12) | (algebra.Alg.Term algebra.F.id_isNePal (x12::nil)) => P_id_ISNEPAL (measure x12) | (algebra.Alg.Term algebra.F.id_and (x13::x12::nil)) => P_id_AND (measure x13) (measure x12) | (algebra.Alg.Term algebra.F.id_isPal (x12::nil)) => P_id_ISPAL (measure x12) | (algebra.Alg.Term algebra.F.id_isNeList (x12::nil)) => P_id_ISNELIST (measure x12) | (algebra.Alg.Term algebra.F.id_active (x12::nil)) => P_id_ACTIVE (measure x12) | (algebra.Alg.Term algebra.F.id_proper (x12::nil)) => P_id_PROPER (measure x12) | (algebra.Alg.Term algebra.F.id_isList (x12::nil)) => P_id_ISLIST (measure x12) | _ => measure t end. Definition Marked_pols : forall f, (algebra.EQT.defined R_xml_0_deep_rew.R_xml_0_rules f) -> InterpGen.Pol_type A (InterpGen.get_arity f). Proof. intros f H. apply ddp.defined_list_complete with (1:=R_xml_0_deep_rew.R_xml_0_rules_included) in H . apply (Symb_more_list.change_in algebra.F.symb_order) in H . set (u := (Symb_more_list.qs algebra.F.symb_order (Symb_more_list.XSet.remove_red (ddp.defined_list R_xml_0_deep_rew.R_xml_0_rule_as_list)))) in * . vm_compute in u . unfold u in * . clear u . unfold more_list.mem_bool in H . match type of H with | orb ?a ?b = true => assert (H':{a = true}+{b = true});[ revert H;case a;[left;reflexivity|simpl;intros h;right;exact h]| clear H;destruct H' as [H|H]] end . match type of H with | _ _ ?t = true => generalize (algebra.F.symb_eq_bool_ok f t); unfold algebra.Alg.eq_symb_bool in H; rewrite H;clear H;intros ;subst end . vm_compute in |-*;intros x12;apply (P_id_ISNELIST x12). match type of H with | orb ?a ?b = true => assert (H':{a = true}+{b = true});[ revert H;case a;[left;reflexivity|simpl;intros h;right;exact h]| clear H;destruct H' as [H|H]] end . match type of H with | _ _ ?t = true => generalize (algebra.F.symb_eq_bool_ok f t); unfold algebra.Alg.eq_symb_bool in H; rewrite H;clear H;intros ;subst end . vm_compute in |-*;intros x12;apply (P_id_ISNEPAL x12). match type of H with | orb ?a ?b = true => assert (H':{a = true}+{b = true});[ revert H;case a;[left;reflexivity|simpl;intros h;right;exact h]| clear H;destruct H' as [H|H]] end . match type of H with | _ _ ?t = true => generalize (algebra.F.symb_eq_bool_ok f t); unfold algebra.Alg.eq_symb_bool in H; rewrite H;clear H;intros ;subst end . vm_compute in |-*;intros x13 x12;apply (P_id____hat_1 x13 x12). match type of H with | orb ?a ?b = true => assert (H':{a = true}+{b = true});[ revert H;case a;[left;reflexivity|simpl;intros h;right;exact h]| clear H;destruct H' as [H|H]] end . match type of H with | _ _ ?t = true => generalize (algebra.F.symb_eq_bool_ok f t); unfold algebra.Alg.eq_symb_bool in H; rewrite H;clear H;intros ;subst end . vm_compute in |-*;intros x12;apply (P_id_ISLIST x12). match type of H with | orb ?a ?b = true => assert (H':{a = true}+{b = true});[ revert H;case a;[left;reflexivity|simpl;intros h;right;exact h]| clear H;destruct H' as [H|H]] end . match type of H with | _ _ ?t = true => generalize (algebra.F.symb_eq_bool_ok f t); unfold algebra.Alg.eq_symb_bool in H; rewrite H;clear H;intros ;subst end . vm_compute in |-*;intros x12;apply (P_id_ISPAL x12). match type of H with | orb ?a ?b = true => assert (H':{a = true}+{b = true});[ revert H;case a;[left;reflexivity|simpl;intros h;right;exact h]| clear H;destruct H' as [H|H]] end . match type of H with | _ _ ?t = true => generalize (algebra.F.symb_eq_bool_ok f t); unfold algebra.Alg.eq_symb_bool in H; rewrite H;clear H;intros ;subst end . vm_compute in |-*;intros x12;apply (P_id_TOP x12). match type of H with | orb ?a ?b = true => assert (H':{a = true}+{b = true});[ revert H;case a;[left;reflexivity|simpl;intros h;right;exact h]| clear H;destruct H' as [H|H]] end . match type of H with | _ _ ?t = true => generalize (algebra.F.symb_eq_bool_ok f t); unfold algebra.Alg.eq_symb_bool in H; rewrite H;clear H;intros ;subst end . vm_compute in |-*;intros x13 x12;apply (P_id_AND x13 x12). match type of H with | orb ?a ?b = true => assert (H':{a = true}+{b = true});[ revert H;case a;[left;reflexivity|simpl;intros h;right;exact h]| clear H;destruct H' as [H|H]] end . match type of H with | _ _ ?t = true => generalize (algebra.F.symb_eq_bool_ok f t); unfold algebra.Alg.eq_symb_bool in H; rewrite H;clear H;intros ;subst end . vm_compute in |-*;intros x12;apply (P_id_ISQID x12). match type of H with | orb ?a ?b = true => assert (H':{a = true}+{b = true});[ revert H;case a;[left;reflexivity|simpl;intros h;right;exact h]| clear H;destruct H' as [H|H]] end . match type of H with | _ _ ?t = true => generalize (algebra.F.symb_eq_bool_ok f t); unfold algebra.Alg.eq_symb_bool in H; rewrite H;clear H;intros ;subst end . vm_compute in |-*;intros x12;apply (P_id_PROPER x12). match type of H with | orb ?a ?b = true => assert (H':{a = true}+{b = true});[ revert H;case a;[left;reflexivity|simpl;intros h;right;exact h]| clear H;destruct H' as [H|H]] end . match type of H with | _ _ ?t = true => generalize (algebra.F.symb_eq_bool_ok f t); unfold algebra.Alg.eq_symb_bool in H; rewrite H;clear H;intros ;subst end . vm_compute in |-*;intros x12;apply (P_id_ACTIVE x12). discriminate H. Defined. Lemma same_marked_measure : forall t, marked_measure t = InterpGen.marked_measure A0 Pols Marked_pols (ddp.defined_dec _ _ R_xml_0_deep_rew.R_xml_0_rules_included) t. Proof. intros [a| f l]. simpl in |-*. unfold eq_rect_r, eq_rect, sym_eq in |-*. reflexivity . refine match f with | algebra.F.id_active => match l with | nil => _ | _::nil => _ | _::_::_ => _ end | algebra.F.id_proper => match l with | nil => _ | _::nil => _ | _::_::_ => _ end | algebra.F.id_isQid => match l with | nil => _ | _::nil => _ | _::_::_ => _ end | algebra.F.id_and => match l with | nil => _ | _::nil => _ | _::_::nil => _ | _::_::_::_ => _ end | algebra.F.id_e => match l with | nil => _ | _::_ => _ end | algebra.F.id_mark => match l with | nil => _ | _::nil => _ | _::_::_ => _ end | algebra.F.id_top => match l with | nil => _ | _::nil => _ | _::_::_ => _ end | algebra.F.id_isPal => match l with | nil => _ | _::nil => _ | _::_::_ => _ end | algebra.F.id_isList => match l with | nil => _ | _::nil => _ | _::_::_ => _ end | algebra.F.id_o => match l with | nil => _ | _::_ => _ end | algebra.F.id___ => match l with | nil => _ | _::nil => _ | _::_::nil => _ | _::_::_::_ => _ end | algebra.F.id_ok => match l with | nil => _ | _::nil => _ | _::_::_ => _ end | algebra.F.id_isNePal => match l with | nil => _ | _::nil => _ | _::_::_ => _ end | algebra.F.id_tt => match l with | nil => _ | _::_ => _ end | algebra.F.id_i => match l with | nil => _ | _::_ => _ end | algebra.F.id_nil => match l with | nil => _ | _::_ => _ end | algebra.F.id_a => match l with | nil => _ | _::_ => _ end | algebra.F.id_isNeList => match l with | nil => _ | _::nil => _ | _::_::_ => _ end | algebra.F.id_u => match l with | nil => _ | _::_ => _ end end. vm_compute in |-*;reflexivity . lazy - [measure InterpGen.measure Pols] in |-* ;f_equal ; apply same_measure. vm_compute in |-*;reflexivity . vm_compute in |-*;reflexivity . lazy - [measure InterpGen.measure Pols] in |-* ;f_equal ; apply same_measure. vm_compute in |-*;reflexivity . vm_compute in |-*;reflexivity . lazy - [measure InterpGen.measure Pols] in |-* ;f_equal ; apply same_measure. vm_compute in |-*;reflexivity . vm_compute in |-*;reflexivity . vm_compute in |-*;reflexivity . lazy - [measure InterpGen.measure Pols] in |-* ;f_equal ; apply same_measure. vm_compute in |-*;reflexivity . vm_compute in |-*;reflexivity . vm_compute in |-*;reflexivity . vm_compute in |-*;reflexivity . lazy - [measure InterpGen.measure Pols] in |-* ;f_equal ; apply same_measure. vm_compute in |-*;reflexivity . vm_compute in |-*;reflexivity . lazy - [measure InterpGen.measure Pols] in |-* ;f_equal ; apply same_measure. vm_compute in |-*;reflexivity . vm_compute in |-*;reflexivity . lazy - [measure InterpGen.measure Pols] in |-* ;f_equal ; apply same_measure. vm_compute in |-*;reflexivity . vm_compute in |-*;reflexivity . lazy - [measure InterpGen.measure Pols] in |-* ;f_equal ; apply same_measure. vm_compute in |-*;reflexivity . vm_compute in |-*;reflexivity . vm_compute in |-*;reflexivity . vm_compute in |-*;reflexivity . vm_compute in |-*;reflexivity . lazy - [measure InterpGen.measure Pols] in |-* ;f_equal ; apply same_measure. vm_compute in |-*;reflexivity . vm_compute in |-*;reflexivity . lazy - [measure InterpGen.measure Pols] in |-* ;f_equal ; apply same_measure. vm_compute in |-*;reflexivity . vm_compute in |-*;reflexivity . lazy - [measure InterpGen.measure Pols] in |-* ;f_equal ; apply same_measure. vm_compute in |-*;reflexivity . vm_compute in |-*;reflexivity . vm_compute in |-*;reflexivity . vm_compute in |-*;reflexivity . vm_compute in |-*;reflexivity . vm_compute in |-*;reflexivity . vm_compute in |-*;reflexivity . vm_compute in |-*;reflexivity . vm_compute in |-*;reflexivity . vm_compute in |-*;reflexivity . lazy - [measure InterpGen.measure Pols] in |-* ;f_equal ; apply same_measure. vm_compute in |-*;reflexivity . vm_compute in |-*;reflexivity . vm_compute in |-*;reflexivity . Qed. Lemma marked_measure_equation : forall t, marked_measure t = match t with | (algebra.Alg.Term algebra.F.id_isQid (x12::nil)) => P_id_ISQID (measure x12) | (algebra.Alg.Term algebra.F.id___ (x13:: x12::nil)) => P_id____hat_1 (measure x13) (measure x12) | (algebra.Alg.Term algebra.F.id_top (x12::nil)) => P_id_TOP (measure x12) | (algebra.Alg.Term algebra.F.id_isNePal (x12::nil)) => P_id_ISNEPAL (measure x12) | (algebra.Alg.Term algebra.F.id_and (x13:: x12::nil)) => P_id_AND (measure x13) (measure x12) | (algebra.Alg.Term algebra.F.id_isPal (x12::nil)) => P_id_ISPAL (measure x12) | (algebra.Alg.Term algebra.F.id_isNeList (x12::nil)) => P_id_ISNELIST (measure x12) | (algebra.Alg.Term algebra.F.id_active (x12::nil)) => P_id_ACTIVE (measure x12) | (algebra.Alg.Term algebra.F.id_proper (x12::nil)) => P_id_PROPER (measure x12) | (algebra.Alg.Term algebra.F.id_isList (x12::nil)) => P_id_ISLIST (measure x12) | _ => measure t end. Proof. reflexivity . Qed. Lemma marked_measure_star_monotonic : forall f l1 l2, (closure.refl_trans_clos (closure.one_step_list (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) ) l1 l2) -> marked_measure (algebra.Alg.Term f l1) <= marked_measure (algebra.Alg.Term f l2). Proof. intros . do 2 (rewrite same_marked_measure in |-*). apply InterpGen.marked_measure_star_monotonic with (1:=Aop) (Pols:= Pols) (rules:=R_xml_0_deep_rew.R_xml_0_rules). clear f. intros f. case f. vm_compute in |-*;intros ;apply P_id_active_monotonic;assumption. vm_compute in |-*;intros ;apply P_id_proper_monotonic;assumption. vm_compute in |-*;intros ;apply P_id_isQid_monotonic;assumption. vm_compute in |-*;intros ;apply P_id_and_monotonic;assumption. vm_compute in |-*;apply (Aop.(le_refl)). vm_compute in |-*;intros ;apply P_id_mark_monotonic;assumption. vm_compute in |-*;intros ;apply P_id_top_monotonic;assumption. vm_compute in |-*;intros ;apply P_id_isPal_monotonic;assumption. vm_compute in |-*;intros ;apply P_id_isList_monotonic;assumption. vm_compute in |-*;apply (Aop.(le_refl)). vm_compute in |-*;intros ;apply P_id____monotonic;assumption. vm_compute in |-*;intros ;apply P_id_ok_monotonic;assumption. vm_compute in |-*;intros ;apply P_id_isNePal_monotonic;assumption. vm_compute in |-*;apply (Aop.(le_refl)). vm_compute in |-*;apply (Aop.(le_refl)). vm_compute in |-*;apply (Aop.(le_refl)). vm_compute in |-*;apply (Aop.(le_refl)). vm_compute in |-*;intros ;apply P_id_isNeList_monotonic;assumption. vm_compute in |-*;apply (Aop.(le_refl)). clear f. intros f. case f. vm_compute in |-*;intros ;apply P_id_active_bounded;assumption. vm_compute in |-*;intros ;apply P_id_proper_bounded;assumption. vm_compute in |-*;intros ;apply P_id_isQid_bounded;assumption. vm_compute in |-*;intros ;apply P_id_and_bounded;assumption. vm_compute in |-*;intros ;apply P_id_e_bounded;assumption. vm_compute in |-*;intros ;apply P_id_mark_bounded;assumption. vm_compute in |-*;intros ;apply P_id_top_bounded;assumption. vm_compute in |-*;intros ;apply P_id_isPal_bounded;assumption. vm_compute in |-*;intros ;apply P_id_isList_bounded;assumption. vm_compute in |-*;intros ;apply P_id_o_bounded;assumption. vm_compute in |-*;intros ;apply P_id____bounded;assumption. vm_compute in |-*;intros ;apply P_id_ok_bounded;assumption. vm_compute in |-*;intros ;apply P_id_isNePal_bounded;assumption. vm_compute in |-*;intros ;apply P_id_tt_bounded;assumption. vm_compute in |-*;intros ;apply P_id_i_bounded;assumption. vm_compute in |-*;intros ;apply P_id_nil_bounded;assumption. vm_compute in |-*;intros ;apply P_id_a_bounded;assumption. vm_compute in |-*;intros ;apply P_id_isNeList_bounded;assumption. vm_compute in |-*;intros ;apply P_id_u_bounded;assumption. intros . do 2 (rewrite <- same_measure in |-*). apply rules_monotonic;assumption. clear f. intros f. clear H. intros H. generalize H. apply ddp.defined_list_complete with (1:=R_xml_0_deep_rew.R_xml_0_rules_included) in H . apply (Symb_more_list.change_in algebra.F.symb_order) in H . set (u := (Symb_more_list.qs algebra.F.symb_order (Symb_more_list.XSet.remove_red (ddp.defined_list R_xml_0_deep_rew.R_xml_0_rule_as_list)))) in * . vm_compute in u . unfold u in * . clear u . unfold more_list.mem_bool in H . match type of H with | orb ?a ?b = true => assert (H':{a = true}+{b = true});[ revert H;case a;[left;reflexivity|simpl;intros h;right;exact h]| clear H;destruct H' as [H|H]] end . match type of H with | _ _ ?t = true => generalize (algebra.F.symb_eq_bool_ok f t); unfold algebra.Alg.eq_symb_bool in H; rewrite H;clear H;intros ;subst end . vm_compute in |-*;intros ;apply P_id_ISNELIST_monotonic;assumption. match type of H with | orb ?a ?b = true => assert (H':{a = true}+{b = true});[ revert H;case a;[left;reflexivity|simpl;intros h;right;exact h]| clear H;destruct H' as [H|H]] end . match type of H with | _ _ ?t = true => generalize (algebra.F.symb_eq_bool_ok f t); unfold algebra.Alg.eq_symb_bool in H; rewrite H;clear H;intros ;subst end . vm_compute in |-*;intros ;apply P_id_ISNEPAL_monotonic;assumption. match type of H with | orb ?a ?b = true => assert (H':{a = true}+{b = true});[ revert H;case a;[left;reflexivity|simpl;intros h;right;exact h]| clear H;destruct H' as [H|H]] end . match type of H with | _ _ ?t = true => generalize (algebra.F.symb_eq_bool_ok f t); unfold algebra.Alg.eq_symb_bool in H; rewrite H;clear H;intros ;subst end . vm_compute in |-*;intros ;apply P_id____hat_1_monotonic;assumption. match type of H with | orb ?a ?b = true => assert (H':{a = true}+{b = true});[ revert H;case a;[left;reflexivity|simpl;intros h;right;exact h]| clear H;destruct H' as [H|H]] end . match type of H with | _ _ ?t = true => generalize (algebra.F.symb_eq_bool_ok f t); unfold algebra.Alg.eq_symb_bool in H; rewrite H;clear H;intros ;subst end . vm_compute in |-*;intros ;apply P_id_ISLIST_monotonic;assumption. match type of H with | orb ?a ?b = true => assert (H':{a = true}+{b = true});[ revert H;case a;[left;reflexivity|simpl;intros h;right;exact h]| clear H;destruct H' as [H|H]] end . match type of H with | _ _ ?t = true => generalize (algebra.F.symb_eq_bool_ok f t); unfold algebra.Alg.eq_symb_bool in H; rewrite H;clear H;intros ;subst end . vm_compute in |-*;intros ;apply P_id_ISPAL_monotonic;assumption. match type of H with | orb ?a ?b = true => assert (H':{a = true}+{b = true});[ revert H;case a;[left;reflexivity|simpl;intros h;right;exact h]| clear H;destruct H' as [H|H]] end . match type of H with | _ _ ?t = true => generalize (algebra.F.symb_eq_bool_ok f t); unfold algebra.Alg.eq_symb_bool in H; rewrite H;clear H;intros ;subst end . vm_compute in |-*;intros ;apply P_id_TOP_monotonic;assumption. match type of H with | orb ?a ?b = true => assert (H':{a = true}+{b = true});[ revert H;case a;[left;reflexivity|simpl;intros h;right;exact h]| clear H;destruct H' as [H|H]] end . match type of H with | _ _ ?t = true => generalize (algebra.F.symb_eq_bool_ok f t); unfold algebra.Alg.eq_symb_bool in H; rewrite H;clear H;intros ;subst end . vm_compute in |-*;intros ;apply P_id_AND_monotonic;assumption. match type of H with | orb ?a ?b = true => assert (H':{a = true}+{b = true});[ revert H;case a;[left;reflexivity|simpl;intros h;right;exact h]| clear H;destruct H' as [H|H]] end . match type of H with | _ _ ?t = true => generalize (algebra.F.symb_eq_bool_ok f t); unfold algebra.Alg.eq_symb_bool in H; rewrite H;clear H;intros ;subst end . vm_compute in |-*;intros ;apply P_id_ISQID_monotonic;assumption. match type of H with | orb ?a ?b = true => assert (H':{a = true}+{b = true});[ revert H;case a;[left;reflexivity|simpl;intros h;right;exact h]| clear H;destruct H' as [H|H]] end . match type of H with | _ _ ?t = true => generalize (algebra.F.symb_eq_bool_ok f t); unfold algebra.Alg.eq_symb_bool in H; rewrite H;clear H;intros ;subst end . vm_compute in |-*;intros ;apply P_id_PROPER_monotonic;assumption. match type of H with | orb ?a ?b = true => assert (H':{a = true}+{b = true});[ revert H;case a;[left;reflexivity|simpl;intros h;right;exact h]| clear H;destruct H' as [H|H]] end . match type of H with | _ _ ?t = true => generalize (algebra.F.symb_eq_bool_ok f t); unfold algebra.Alg.eq_symb_bool in H; rewrite H;clear H;intros ;subst end . vm_compute in |-*;intros ;apply P_id_ACTIVE_monotonic;assumption. discriminate H. assumption. Qed. End S. End Interp. Module InterpZ. Section S. Open Scope Z_scope. Hypothesis min_value : Z. Import ring_extention. Notation Local "'Alt'" := (Zwf.Zwf min_value). Notation Local "'Ale'" := Zle. Notation Local "'Aeq'" := (@eq Z). Notation Local "a <= b" := (Ale a b). Notation Local "a < b" := (Alt a b). Hypothesis P_id_active : Z ->Z. Hypothesis P_id_proper : Z ->Z. Hypothesis P_id_isQid : Z ->Z. Hypothesis P_id_and : Z ->Z ->Z. Hypothesis P_id_e : Z. Hypothesis P_id_mark : Z ->Z. Hypothesis P_id_top : Z ->Z. Hypothesis P_id_isPal : Z ->Z. Hypothesis P_id_isList : Z ->Z. Hypothesis P_id_o : Z. Hypothesis P_id___ : Z ->Z ->Z. Hypothesis P_id_ok : Z ->Z. Hypothesis P_id_isNePal : Z ->Z. Hypothesis P_id_tt : Z. Hypothesis P_id_i : Z. Hypothesis P_id_nil : Z. Hypothesis P_id_a : Z. Hypothesis P_id_isNeList : Z ->Z. Hypothesis P_id_u : Z. Hypothesis P_id_active_monotonic : forall x12 x13, (min_value <= x13)/\ (x13 <= x12) ->P_id_active x13 <= P_id_active x12. Hypothesis P_id_proper_monotonic : forall x12 x13, (min_value <= x13)/\ (x13 <= x12) ->P_id_proper x13 <= P_id_proper x12. Hypothesis P_id_isQid_monotonic : forall x12 x13, (min_value <= x13)/\ (x13 <= x12) ->P_id_isQid x13 <= P_id_isQid x12. Hypothesis P_id_and_monotonic : forall x12 x14 x13 x15, (min_value <= x15)/\ (x15 <= x14) -> (min_value <= x13)/\ (x13 <= x12) -> P_id_and x13 x15 <= P_id_and x12 x14. Hypothesis P_id_mark_monotonic : forall x12 x13, (min_value <= x13)/\ (x13 <= x12) ->P_id_mark x13 <= P_id_mark x12. Hypothesis P_id_top_monotonic : forall x12 x13, (min_value <= x13)/\ (x13 <= x12) ->P_id_top x13 <= P_id_top x12. Hypothesis P_id_isPal_monotonic : forall x12 x13, (min_value <= x13)/\ (x13 <= x12) ->P_id_isPal x13 <= P_id_isPal x12. Hypothesis P_id_isList_monotonic : forall x12 x13, (min_value <= x13)/\ (x13 <= x12) ->P_id_isList x13 <= P_id_isList x12. Hypothesis P_id____monotonic : forall x12 x14 x13 x15, (min_value <= x15)/\ (x15 <= x14) -> (min_value <= x13)/\ (x13 <= x12) ->P_id___ x13 x15 <= P_id___ x12 x14. Hypothesis P_id_ok_monotonic : forall x12 x13, (min_value <= x13)/\ (x13 <= x12) ->P_id_ok x13 <= P_id_ok x12. Hypothesis P_id_isNePal_monotonic : forall x12 x13, (min_value <= x13)/\ (x13 <= x12) ->P_id_isNePal x13 <= P_id_isNePal x12. Hypothesis P_id_isNeList_monotonic : forall x12 x13, (min_value <= x13)/\ (x13 <= x12) -> P_id_isNeList x13 <= P_id_isNeList x12. Hypothesis P_id_active_bounded : forall x12, (min_value <= x12) ->min_value <= P_id_active x12. Hypothesis P_id_proper_bounded : forall x12, (min_value <= x12) ->min_value <= P_id_proper x12. Hypothesis P_id_isQid_bounded : forall x12, (min_value <= x12) ->min_value <= P_id_isQid x12. Hypothesis P_id_and_bounded : forall x12 x13, (min_value <= x12) ->(min_value <= x13) ->min_value <= P_id_and x13 x12. Hypothesis P_id_e_bounded : min_value <= P_id_e . Hypothesis P_id_mark_bounded : forall x12, (min_value <= x12) ->min_value <= P_id_mark x12. Hypothesis P_id_top_bounded : forall x12, (min_value <= x12) ->min_value <= P_id_top x12. Hypothesis P_id_isPal_bounded : forall x12, (min_value <= x12) ->min_value <= P_id_isPal x12. Hypothesis P_id_isList_bounded : forall x12, (min_value <= x12) ->min_value <= P_id_isList x12. Hypothesis P_id_o_bounded : min_value <= P_id_o . Hypothesis P_id____bounded : forall x12 x13, (min_value <= x12) ->(min_value <= x13) ->min_value <= P_id___ x13 x12. Hypothesis P_id_ok_bounded : forall x12, (min_value <= x12) ->min_value <= P_id_ok x12. Hypothesis P_id_isNePal_bounded : forall x12, (min_value <= x12) ->min_value <= P_id_isNePal x12. Hypothesis P_id_tt_bounded : min_value <= P_id_tt . Hypothesis P_id_i_bounded : min_value <= P_id_i . Hypothesis P_id_nil_bounded : min_value <= P_id_nil . Hypothesis P_id_a_bounded : min_value <= P_id_a . Hypothesis P_id_isNeList_bounded : forall x12, (min_value <= x12) ->min_value <= P_id_isNeList x12. Hypothesis P_id_u_bounded : min_value <= P_id_u . Definition measure := Interp.measure min_value P_id_active P_id_proper P_id_isQid P_id_and P_id_e P_id_mark P_id_top P_id_isPal P_id_isList P_id_o P_id___ P_id_ok P_id_isNePal P_id_tt P_id_i P_id_nil P_id_a P_id_isNeList P_id_u. Lemma measure_equation : forall t, measure t = match t with | (algebra.Alg.Term algebra.F.id_active (x12::nil)) => P_id_active (measure x12) | (algebra.Alg.Term algebra.F.id_proper (x12::nil)) => P_id_proper (measure x12) | (algebra.Alg.Term algebra.F.id_isQid (x12::nil)) => P_id_isQid (measure x12) | (algebra.Alg.Term algebra.F.id_and (x13::x12::nil)) => P_id_and (measure x13) (measure x12) | (algebra.Alg.Term algebra.F.id_e nil) => P_id_e | (algebra.Alg.Term algebra.F.id_mark (x12::nil)) => P_id_mark (measure x12) | (algebra.Alg.Term algebra.F.id_top (x12::nil)) => P_id_top (measure x12) | (algebra.Alg.Term algebra.F.id_isPal (x12::nil)) => P_id_isPal (measure x12) | (algebra.Alg.Term algebra.F.id_isList (x12::nil)) => P_id_isList (measure x12) | (algebra.Alg.Term algebra.F.id_o nil) => P_id_o | (algebra.Alg.Term algebra.F.id___ (x13::x12::nil)) => P_id___ (measure x13) (measure x12) | (algebra.Alg.Term algebra.F.id_ok (x12::nil)) => P_id_ok (measure x12) | (algebra.Alg.Term algebra.F.id_isNePal (x12::nil)) => P_id_isNePal (measure x12) | (algebra.Alg.Term algebra.F.id_tt nil) => P_id_tt | (algebra.Alg.Term algebra.F.id_i nil) => P_id_i | (algebra.Alg.Term algebra.F.id_nil nil) => P_id_nil | (algebra.Alg.Term algebra.F.id_a nil) => P_id_a | (algebra.Alg.Term algebra.F.id_isNeList (x12::nil)) => P_id_isNeList (measure x12) | (algebra.Alg.Term algebra.F.id_u nil) => P_id_u | _ => min_value end. Proof. intros t;case t;intros ;apply refl_equal. Qed. Lemma measure_bounded : forall t, min_value <= measure t. Proof. unfold measure in |-*. apply Interp.measure_bounded with Alt Aeq; (apply interp.o_Z)|| (cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;auto with zarith). Qed. Ltac generate_pos_hyp := match goal with | H:context [measure ?x] |- _ => let v := fresh "v" in (let H := fresh "h" in (set (H:=measure_bounded x) in *;set (v:=measure x) in *; clearbody H;clearbody v)) | |- context [measure ?x] => let v := fresh "v" in (let H := fresh "h" in (set (H:=measure_bounded x) in *;set (v:=measure x) in *; clearbody H;clearbody v)) end . Hypothesis rules_monotonic : forall l r, (algebra.EQT.axiom R_xml_0_deep_rew.R_xml_0_rules r l) -> measure r <= measure l. Lemma measure_star_monotonic : forall l r, (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) r l) ->measure r <= measure l. Proof. unfold measure in *. apply Interp.measure_star_monotonic with Alt Aeq. (apply interp.o_Z)|| (cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;auto with zarith). intros ;apply P_id_active_monotonic;assumption. intros ;apply P_id_proper_monotonic;assumption. intros ;apply P_id_isQid_monotonic;assumption. intros ;apply P_id_and_monotonic;assumption. intros ;apply P_id_mark_monotonic;assumption. intros ;apply P_id_top_monotonic;assumption. intros ;apply P_id_isPal_monotonic;assumption. intros ;apply P_id_isList_monotonic;assumption. intros ;apply P_id____monotonic;assumption. intros ;apply P_id_ok_monotonic;assumption. intros ;apply P_id_isNePal_monotonic;assumption. intros ;apply P_id_isNeList_monotonic;assumption. intros ;apply P_id_active_bounded;assumption. intros ;apply P_id_proper_bounded;assumption. intros ;apply P_id_isQid_bounded;assumption. intros ;apply P_id_and_bounded;assumption. intros ;apply P_id_e_bounded;assumption. intros ;apply P_id_mark_bounded;assumption. intros ;apply P_id_top_bounded;assumption. intros ;apply P_id_isPal_bounded;assumption. intros ;apply P_id_isList_bounded;assumption. intros ;apply P_id_o_bounded;assumption. intros ;apply P_id____bounded;assumption. intros ;apply P_id_ok_bounded;assumption. intros ;apply P_id_isNePal_bounded;assumption. intros ;apply P_id_tt_bounded;assumption. intros ;apply P_id_i_bounded;assumption. intros ;apply P_id_nil_bounded;assumption. intros ;apply P_id_a_bounded;assumption. intros ;apply P_id_isNeList_bounded;assumption. intros ;apply P_id_u_bounded;assumption. apply rules_monotonic. Qed. Hypothesis P_id_ISQID : Z ->Z. Hypothesis P_id____hat_1 : Z ->Z ->Z. Hypothesis P_id_TOP : Z ->Z. Hypothesis P_id_ISNEPAL : Z ->Z. Hypothesis P_id_AND : Z ->Z ->Z. Hypothesis P_id_ISPAL : Z ->Z. Hypothesis P_id_ISNELIST : Z ->Z. Hypothesis P_id_ACTIVE : Z ->Z. Hypothesis P_id_PROPER : Z ->Z. Hypothesis P_id_ISLIST : Z ->Z. Hypothesis P_id_ISQID_monotonic : forall x12 x13, (min_value <= x13)/\ (x13 <= x12) ->P_id_ISQID x13 <= P_id_ISQID x12. Hypothesis P_id____hat_1_monotonic : forall x12 x14 x13 x15, (min_value <= x15)/\ (x15 <= x14) -> (min_value <= x13)/\ (x13 <= x12) -> P_id____hat_1 x13 x15 <= P_id____hat_1 x12 x14. Hypothesis P_id_TOP_monotonic : forall x12 x13, (min_value <= x13)/\ (x13 <= x12) ->P_id_TOP x13 <= P_id_TOP x12. Hypothesis P_id_ISNEPAL_monotonic : forall x12 x13, (min_value <= x13)/\ (x13 <= x12) ->P_id_ISNEPAL x13 <= P_id_ISNEPAL x12. Hypothesis P_id_AND_monotonic : forall x12 x14 x13 x15, (min_value <= x15)/\ (x15 <= x14) -> (min_value <= x13)/\ (x13 <= x12) -> P_id_AND x13 x15 <= P_id_AND x12 x14. Hypothesis P_id_ISPAL_monotonic : forall x12 x13, (min_value <= x13)/\ (x13 <= x12) ->P_id_ISPAL x13 <= P_id_ISPAL x12. Hypothesis P_id_ISNELIST_monotonic : forall x12 x13, (min_value <= x13)/\ (x13 <= x12) -> P_id_ISNELIST x13 <= P_id_ISNELIST x12. Hypothesis P_id_ACTIVE_monotonic : forall x12 x13, (min_value <= x13)/\ (x13 <= x12) ->P_id_ACTIVE x13 <= P_id_ACTIVE x12. Hypothesis P_id_PROPER_monotonic : forall x12 x13, (min_value <= x13)/\ (x13 <= x12) ->P_id_PROPER x13 <= P_id_PROPER x12. Hypothesis P_id_ISLIST_monotonic : forall x12 x13, (min_value <= x13)/\ (x13 <= x12) ->P_id_ISLIST x13 <= P_id_ISLIST x12. Definition marked_measure := Interp.marked_measure min_value P_id_active P_id_proper P_id_isQid P_id_and P_id_e P_id_mark P_id_top P_id_isPal P_id_isList P_id_o P_id___ P_id_ok P_id_isNePal P_id_tt P_id_i P_id_nil P_id_a P_id_isNeList P_id_u P_id_ISQID P_id____hat_1 P_id_TOP P_id_ISNEPAL P_id_AND P_id_ISPAL P_id_ISNELIST P_id_ACTIVE P_id_PROPER P_id_ISLIST. Lemma marked_measure_equation : forall t, marked_measure t = match t with | (algebra.Alg.Term algebra.F.id_isQid (x12::nil)) => P_id_ISQID (measure x12) | (algebra.Alg.Term algebra.F.id___ (x13:: x12::nil)) => P_id____hat_1 (measure x13) (measure x12) | (algebra.Alg.Term algebra.F.id_top (x12::nil)) => P_id_TOP (measure x12) | (algebra.Alg.Term algebra.F.id_isNePal (x12::nil)) => P_id_ISNEPAL (measure x12) | (algebra.Alg.Term algebra.F.id_and (x13:: x12::nil)) => P_id_AND (measure x13) (measure x12) | (algebra.Alg.Term algebra.F.id_isPal (x12::nil)) => P_id_ISPAL (measure x12) | (algebra.Alg.Term algebra.F.id_isNeList (x12::nil)) => P_id_ISNELIST (measure x12) | (algebra.Alg.Term algebra.F.id_active (x12::nil)) => P_id_ACTIVE (measure x12) | (algebra.Alg.Term algebra.F.id_proper (x12::nil)) => P_id_PROPER (measure x12) | (algebra.Alg.Term algebra.F.id_isList (x12::nil)) => P_id_ISLIST (measure x12) | _ => measure t end. Proof. reflexivity . Qed. Lemma marked_measure_star_monotonic : forall f l1 l2, (closure.refl_trans_clos (closure.one_step_list (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) ) l1 l2) -> marked_measure (algebra.Alg.Term f l1) <= marked_measure (algebra.Alg.Term f l2). Proof. unfold marked_measure in *. apply Interp.marked_measure_star_monotonic with Alt Aeq. (apply interp.o_Z)|| (cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;auto with zarith). intros ;apply P_id_active_monotonic;assumption. intros ;apply P_id_proper_monotonic;assumption. intros ;apply P_id_isQid_monotonic;assumption. intros ;apply P_id_and_monotonic;assumption. intros ;apply P_id_mark_monotonic;assumption. intros ;apply P_id_top_monotonic;assumption. intros ;apply P_id_isPal_monotonic;assumption. intros ;apply P_id_isList_monotonic;assumption. intros ;apply P_id____monotonic;assumption. intros ;apply P_id_ok_monotonic;assumption. intros ;apply P_id_isNePal_monotonic;assumption. intros ;apply P_id_isNeList_monotonic;assumption. intros ;apply P_id_active_bounded;assumption. intros ;apply P_id_proper_bounded;assumption. intros ;apply P_id_isQid_bounded;assumption. intros ;apply P_id_and_bounded;assumption. intros ;apply P_id_e_bounded;assumption. intros ;apply P_id_mark_bounded;assumption. intros ;apply P_id_top_bounded;assumption. intros ;apply P_id_isPal_bounded;assumption. intros ;apply P_id_isList_bounded;assumption. intros ;apply P_id_o_bounded;assumption. intros ;apply P_id____bounded;assumption. intros ;apply P_id_ok_bounded;assumption. intros ;apply P_id_isNePal_bounded;assumption. intros ;apply P_id_tt_bounded;assumption. intros ;apply P_id_i_bounded;assumption. intros ;apply P_id_nil_bounded;assumption. intros ;apply P_id_a_bounded;assumption. intros ;apply P_id_isNeList_bounded;assumption. intros ;apply P_id_u_bounded;assumption. apply rules_monotonic. intros ;apply P_id_ISQID_monotonic;assumption. intros ;apply P_id____hat_1_monotonic;assumption. intros ;apply P_id_TOP_monotonic;assumption. intros ;apply P_id_ISNEPAL_monotonic;assumption. intros ;apply P_id_AND_monotonic;assumption. intros ;apply P_id_ISPAL_monotonic;assumption. intros ;apply P_id_ISNELIST_monotonic;assumption. intros ;apply P_id_ACTIVE_monotonic;assumption. intros ;apply P_id_PROPER_monotonic;assumption. intros ;apply P_id_ISLIST_monotonic;assumption. Qed. End S. End InterpZ. Module WF_R_xml_0_deep_rew. Inductive DP_R_xml_0 : algebra.Alg.term ->algebra.Alg.term ->Prop := (* *) | DP_R_xml_0_0 : forall x12 x2 x1 x3, (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) (algebra.Alg.Term algebra.F.id___ ((algebra.Alg.Term algebra.F.id___ (x1::x2::nil))::x3::nil)) x12) -> DP_R_xml_0 (algebra.Alg.Term algebra.F.id___ (x1::(algebra.Alg.Term algebra.F.id___ (x2::x3::nil))::nil)) (algebra.Alg.Term algebra.F.id_active (x12::nil)) (* *) | DP_R_xml_0_1 : forall x12 x2 x1 x3, (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) (algebra.Alg.Term algebra.F.id___ ((algebra.Alg.Term algebra.F.id___ (x1::x2::nil))::x3::nil)) x12) -> DP_R_xml_0 (algebra.Alg.Term algebra.F.id___ (x2::x3::nil)) (algebra.Alg.Term algebra.F.id_active (x12::nil)) (* *) | DP_R_xml_0_2 : forall x4 x12, (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) (algebra.Alg.Term algebra.F.id_isList (x4::nil)) x12) -> DP_R_xml_0 (algebra.Alg.Term algebra.F.id_isNeList (x4::nil)) (algebra.Alg.Term algebra.F.id_active (x12::nil)) (* *) | DP_R_xml_0_3 : forall x12 x6 x5, (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) (algebra.Alg.Term algebra.F.id_isList ((algebra.Alg.Term algebra.F.id___ (x5::x6::nil))::nil)) x12) -> DP_R_xml_0 (algebra.Alg.Term algebra.F.id_and ((algebra.Alg.Term algebra.F.id_isList (x5::nil))::(algebra.Alg.Term algebra.F.id_isList (x6::nil))::nil)) (algebra.Alg.Term algebra.F.id_active (x12::nil)) (* *) | DP_R_xml_0_4 : forall x12 x6 x5, (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) (algebra.Alg.Term algebra.F.id_isList ((algebra.Alg.Term algebra.F.id___ (x5::x6::nil))::nil)) x12) -> DP_R_xml_0 (algebra.Alg.Term algebra.F.id_isList (x5::nil)) (algebra.Alg.Term algebra.F.id_active (x12::nil)) (* *) | DP_R_xml_0_5 : forall x12 x6 x5, (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) (algebra.Alg.Term algebra.F.id_isList ((algebra.Alg.Term algebra.F.id___ (x5::x6::nil))::nil)) x12) -> DP_R_xml_0 (algebra.Alg.Term algebra.F.id_isList (x6::nil)) (algebra.Alg.Term algebra.F.id_active (x12::nil)) (* *) | DP_R_xml_0_6 : forall x4 x12, (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) (algebra.Alg.Term algebra.F.id_isNeList (x4::nil)) x12) -> DP_R_xml_0 (algebra.Alg.Term algebra.F.id_isQid (x4::nil)) (algebra.Alg.Term algebra.F.id_active (x12::nil)) (* *) | DP_R_xml_0_7 : forall x12 x6 x5, (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) (algebra.Alg.Term algebra.F.id_isNeList ((algebra.Alg.Term algebra.F.id___ (x5::x6::nil))::nil)) x12) -> DP_R_xml_0 (algebra.Alg.Term algebra.F.id_and ((algebra.Alg.Term algebra.F.id_isList (x5::nil))::(algebra.Alg.Term algebra.F.id_isNeList (x6::nil))::nil)) (algebra.Alg.Term algebra.F.id_active (x12::nil)) (* *) | DP_R_xml_0_8 : forall x12 x6 x5, (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) (algebra.Alg.Term algebra.F.id_isNeList ((algebra.Alg.Term algebra.F.id___ (x5::x6::nil))::nil)) x12) -> DP_R_xml_0 (algebra.Alg.Term algebra.F.id_isList (x5::nil)) (algebra.Alg.Term algebra.F.id_active (x12::nil)) (* *) | DP_R_xml_0_9 : forall x12 x6 x5, (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) (algebra.Alg.Term algebra.F.id_isNeList ((algebra.Alg.Term algebra.F.id___ (x5::x6::nil))::nil)) x12) -> DP_R_xml_0 (algebra.Alg.Term algebra.F.id_isNeList (x6::nil)) (algebra.Alg.Term algebra.F.id_active (x12::nil)) (* *) | DP_R_xml_0_10 : forall x12 x6 x5, (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) (algebra.Alg.Term algebra.F.id_isNeList ((algebra.Alg.Term algebra.F.id___ (x5::x6::nil))::nil)) x12) -> DP_R_xml_0 (algebra.Alg.Term algebra.F.id_and ((algebra.Alg.Term algebra.F.id_isNeList (x5::nil))::(algebra.Alg.Term algebra.F.id_isList (x6::nil))::nil)) (algebra.Alg.Term algebra.F.id_active (x12::nil)) (* *) | DP_R_xml_0_11 : forall x12 x6 x5, (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) (algebra.Alg.Term algebra.F.id_isNeList ((algebra.Alg.Term algebra.F.id___ (x5::x6::nil))::nil)) x12) -> DP_R_xml_0 (algebra.Alg.Term algebra.F.id_isNeList (x5::nil)) (algebra.Alg.Term algebra.F.id_active (x12::nil)) (* *) | DP_R_xml_0_12 : forall x12 x6 x5, (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) (algebra.Alg.Term algebra.F.id_isNeList ((algebra.Alg.Term algebra.F.id___ (x5::x6::nil))::nil)) x12) -> DP_R_xml_0 (algebra.Alg.Term algebra.F.id_isList (x6::nil)) (algebra.Alg.Term algebra.F.id_active (x12::nil)) (* *) | DP_R_xml_0_13 : forall x4 x12, (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) (algebra.Alg.Term algebra.F.id_isNePal (x4::nil)) x12) -> DP_R_xml_0 (algebra.Alg.Term algebra.F.id_isQid (x4::nil)) (algebra.Alg.Term algebra.F.id_active (x12::nil)) (* *) | DP_R_xml_0_14 : forall x8 x12 x7, (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) (algebra.Alg.Term algebra.F.id_isNePal ((algebra.Alg.Term algebra.F.id___ (x7::(algebra.Alg.Term algebra.F.id___ (x8:: x7::nil))::nil))::nil)) x12) -> DP_R_xml_0 (algebra.Alg.Term algebra.F.id_and ((algebra.Alg.Term algebra.F.id_isQid (x7::nil))::(algebra.Alg.Term algebra.F.id_isPal (x8::nil))::nil)) (algebra.Alg.Term algebra.F.id_active (x12::nil)) (* *) | DP_R_xml_0_15 : forall x8 x12 x7, (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) (algebra.Alg.Term algebra.F.id_isNePal ((algebra.Alg.Term algebra.F.id___ (x7::(algebra.Alg.Term algebra.F.id___ (x8:: x7::nil))::nil))::nil)) x12) -> DP_R_xml_0 (algebra.Alg.Term algebra.F.id_isQid (x7::nil)) (algebra.Alg.Term algebra.F.id_active (x12::nil)) (* *) | DP_R_xml_0_16 : forall x8 x12 x7, (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) (algebra.Alg.Term algebra.F.id_isNePal ((algebra.Alg.Term algebra.F.id___ (x7::(algebra.Alg.Term algebra.F.id___ (x8:: x7::nil))::nil))::nil)) x12) -> DP_R_xml_0 (algebra.Alg.Term algebra.F.id_isPal (x8::nil)) (algebra.Alg.Term algebra.F.id_active (x12::nil)) (* *) | DP_R_xml_0_17 : forall x4 x12, (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) (algebra.Alg.Term algebra.F.id_isPal (x4::nil)) x12) -> DP_R_xml_0 (algebra.Alg.Term algebra.F.id_isNePal (x4::nil)) (algebra.Alg.Term algebra.F.id_active (x12::nil)) (* *) | DP_R_xml_0_18 : forall x12 x10 x9, (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) (algebra.Alg.Term algebra.F.id___ (x9::x10::nil)) x12) -> DP_R_xml_0 (algebra.Alg.Term algebra.F.id___ ((algebra.Alg.Term algebra.F.id_active (x9::nil))::x10::nil)) (algebra.Alg.Term algebra.F.id_active (x12::nil)) (* *) | DP_R_xml_0_19 : forall x12 x10 x9, (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) (algebra.Alg.Term algebra.F.id___ (x9::x10::nil)) x12) -> DP_R_xml_0 (algebra.Alg.Term algebra.F.id_active (x9::nil)) (algebra.Alg.Term algebra.F.id_active (x12::nil)) (* *) | DP_R_xml_0_20 : forall x12 x10 x9, (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) (algebra.Alg.Term algebra.F.id___ (x9::x10::nil)) x12) -> DP_R_xml_0 (algebra.Alg.Term algebra.F.id___ (x9::(algebra.Alg.Term algebra.F.id_active (x10::nil))::nil)) (algebra.Alg.Term algebra.F.id_active (x12::nil)) (* *) | DP_R_xml_0_21 : forall x12 x10 x9, (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) (algebra.Alg.Term algebra.F.id___ (x9::x10::nil)) x12) -> DP_R_xml_0 (algebra.Alg.Term algebra.F.id_active (x10::nil)) (algebra.Alg.Term algebra.F.id_active (x12::nil)) (* *) | DP_R_xml_0_22 : forall x12 x10 x9, (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) (algebra.Alg.Term algebra.F.id_and (x9::x10::nil)) x12) -> DP_R_xml_0 (algebra.Alg.Term algebra.F.id_and ((algebra.Alg.Term algebra.F.id_active (x9::nil))::x10::nil)) (algebra.Alg.Term algebra.F.id_active (x12::nil)) (* *) | DP_R_xml_0_23 : forall x12 x10 x9, (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) (algebra.Alg.Term algebra.F.id_and (x9::x10::nil)) x12) -> DP_R_xml_0 (algebra.Alg.Term algebra.F.id_active (x9::nil)) (algebra.Alg.Term algebra.F.id_active (x12::nil)) (* <__(mark(X1_),X2_),__(X1_,X2_)> *) | DP_R_xml_0_24 : forall x12 x10 x9 x13, (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) (algebra.Alg.Term algebra.F.id_mark (x9::nil)) x13) -> (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) x10 x12) -> DP_R_xml_0 (algebra.Alg.Term algebra.F.id___ (x9::x10::nil)) (algebra.Alg.Term algebra.F.id___ (x13::x12::nil)) (* <__(X1_,mark(X2_)),__(X1_,X2_)> *) | DP_R_xml_0_25 : forall x12 x10 x9 x13, (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) x9 x13) -> (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) (algebra.Alg.Term algebra.F.id_mark (x10::nil)) x12) -> DP_R_xml_0 (algebra.Alg.Term algebra.F.id___ (x9::x10::nil)) (algebra.Alg.Term algebra.F.id___ (x13::x12::nil)) (* *) | DP_R_xml_0_26 : forall x12 x10 x9 x13, (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) (algebra.Alg.Term algebra.F.id_mark (x9::nil)) x13) -> (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) x10 x12) -> DP_R_xml_0 (algebra.Alg.Term algebra.F.id_and (x9::x10::nil)) (algebra.Alg.Term algebra.F.id_and (x13::x12::nil)) (* *) | DP_R_xml_0_27 : forall x12 x10 x9, (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) (algebra.Alg.Term algebra.F.id___ (x9::x10::nil)) x12) -> DP_R_xml_0 (algebra.Alg.Term algebra.F.id___ ((algebra.Alg.Term algebra.F.id_proper (x9::nil))::(algebra.Alg.Term algebra.F.id_proper (x10::nil))::nil)) (algebra.Alg.Term algebra.F.id_proper (x12::nil)) (* *) | DP_R_xml_0_28 : forall x12 x10 x9, (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) (algebra.Alg.Term algebra.F.id___ (x9::x10::nil)) x12) -> DP_R_xml_0 (algebra.Alg.Term algebra.F.id_proper (x9::nil)) (algebra.Alg.Term algebra.F.id_proper (x12::nil)) (* *) | DP_R_xml_0_29 : forall x12 x10 x9, (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) (algebra.Alg.Term algebra.F.id___ (x9::x10::nil)) x12) -> DP_R_xml_0 (algebra.Alg.Term algebra.F.id_proper (x10::nil)) (algebra.Alg.Term algebra.F.id_proper (x12::nil)) (* *) | DP_R_xml_0_30 : forall x12 x10 x9, (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) (algebra.Alg.Term algebra.F.id_and (x9::x10::nil)) x12) -> DP_R_xml_0 (algebra.Alg.Term algebra.F.id_and ((algebra.Alg.Term algebra.F.id_proper (x9::nil))::(algebra.Alg.Term algebra.F.id_proper (x10::nil))::nil)) (algebra.Alg.Term algebra.F.id_proper (x12::nil)) (* *) | DP_R_xml_0_31 : forall x12 x10 x9, (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) (algebra.Alg.Term algebra.F.id_and (x9::x10::nil)) x12) -> DP_R_xml_0 (algebra.Alg.Term algebra.F.id_proper (x9::nil)) (algebra.Alg.Term algebra.F.id_proper (x12::nil)) (* *) | DP_R_xml_0_32 : forall x12 x10 x9, (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) (algebra.Alg.Term algebra.F.id_and (x9::x10::nil)) x12) -> DP_R_xml_0 (algebra.Alg.Term algebra.F.id_proper (x10::nil)) (algebra.Alg.Term algebra.F.id_proper (x12::nil)) (* *) | DP_R_xml_0_33 : forall x12 x1, (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) (algebra.Alg.Term algebra.F.id_isList (x1::nil)) x12) -> DP_R_xml_0 (algebra.Alg.Term algebra.F.id_isList ((algebra.Alg.Term algebra.F.id_proper (x1::nil))::nil)) (algebra.Alg.Term algebra.F.id_proper (x12::nil)) (* *) | DP_R_xml_0_34 : forall x12 x1, (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) (algebra.Alg.Term algebra.F.id_isList (x1::nil)) x12) -> DP_R_xml_0 (algebra.Alg.Term algebra.F.id_proper (x1::nil)) (algebra.Alg.Term algebra.F.id_proper (x12::nil)) (* *) | DP_R_xml_0_35 : forall x12 x1, (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) (algebra.Alg.Term algebra.F.id_isNeList (x1::nil)) x12) -> DP_R_xml_0 (algebra.Alg.Term algebra.F.id_isNeList ((algebra.Alg.Term algebra.F.id_proper (x1::nil))::nil)) (algebra.Alg.Term algebra.F.id_proper (x12::nil)) (* *) | DP_R_xml_0_36 : forall x12 x1, (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) (algebra.Alg.Term algebra.F.id_isNeList (x1::nil)) x12) -> DP_R_xml_0 (algebra.Alg.Term algebra.F.id_proper (x1::nil)) (algebra.Alg.Term algebra.F.id_proper (x12::nil)) (* *) | DP_R_xml_0_37 : forall x12 x1, (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) (algebra.Alg.Term algebra.F.id_isQid (x1::nil)) x12) -> DP_R_xml_0 (algebra.Alg.Term algebra.F.id_isQid ((algebra.Alg.Term algebra.F.id_proper (x1::nil))::nil)) (algebra.Alg.Term algebra.F.id_proper (x12::nil)) (* *) | DP_R_xml_0_38 : forall x12 x1, (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) (algebra.Alg.Term algebra.F.id_isQid (x1::nil)) x12) -> DP_R_xml_0 (algebra.Alg.Term algebra.F.id_proper (x1::nil)) (algebra.Alg.Term algebra.F.id_proper (x12::nil)) (* *) | DP_R_xml_0_39 : forall x12 x1, (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) (algebra.Alg.Term algebra.F.id_isNePal (x1::nil)) x12) -> DP_R_xml_0 (algebra.Alg.Term algebra.F.id_isNePal ((algebra.Alg.Term algebra.F.id_proper (x1::nil))::nil)) (algebra.Alg.Term algebra.F.id_proper (x12::nil)) (* *) | DP_R_xml_0_40 : forall x12 x1, (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) (algebra.Alg.Term algebra.F.id_isNePal (x1::nil)) x12) -> DP_R_xml_0 (algebra.Alg.Term algebra.F.id_proper (x1::nil)) (algebra.Alg.Term algebra.F.id_proper (x12::nil)) (* *) | DP_R_xml_0_41 : forall x12 x1, (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) (algebra.Alg.Term algebra.F.id_isPal (x1::nil)) x12) -> DP_R_xml_0 (algebra.Alg.Term algebra.F.id_isPal ((algebra.Alg.Term algebra.F.id_proper (x1::nil))::nil)) (algebra.Alg.Term algebra.F.id_proper (x12::nil)) (* *) | DP_R_xml_0_42 : forall x12 x1, (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) (algebra.Alg.Term algebra.F.id_isPal (x1::nil)) x12) -> DP_R_xml_0 (algebra.Alg.Term algebra.F.id_proper (x1::nil)) (algebra.Alg.Term algebra.F.id_proper (x12::nil)) (* <__(ok(X1_),ok(X2_)),__(X1_,X2_)> *) | DP_R_xml_0_43 : forall x12 x10 x9 x13, (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) (algebra.Alg.Term algebra.F.id_ok (x9::nil)) x13) -> (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) (algebra.Alg.Term algebra.F.id_ok (x10::nil)) x12) -> DP_R_xml_0 (algebra.Alg.Term algebra.F.id___ (x9::x10::nil)) (algebra.Alg.Term algebra.F.id___ (x13::x12::nil)) (* *) | DP_R_xml_0_44 : forall x12 x10 x9 x13, (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) (algebra.Alg.Term algebra.F.id_ok (x9::nil)) x13) -> (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) (algebra.Alg.Term algebra.F.id_ok (x10::nil)) x12) -> DP_R_xml_0 (algebra.Alg.Term algebra.F.id_and (x9::x10::nil)) (algebra.Alg.Term algebra.F.id_and (x13::x12::nil)) (* *) | DP_R_xml_0_45 : forall x12 x1, (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) (algebra.Alg.Term algebra.F.id_ok (x1::nil)) x12) -> DP_R_xml_0 (algebra.Alg.Term algebra.F.id_isList (x1::nil)) (algebra.Alg.Term algebra.F.id_isList (x12::nil)) (* *) | DP_R_xml_0_46 : forall x12 x1, (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) (algebra.Alg.Term algebra.F.id_ok (x1::nil)) x12) -> DP_R_xml_0 (algebra.Alg.Term algebra.F.id_isNeList (x1::nil)) (algebra.Alg.Term algebra.F.id_isNeList (x12::nil)) (* *) | DP_R_xml_0_47 : forall x12 x1, (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) (algebra.Alg.Term algebra.F.id_ok (x1::nil)) x12) -> DP_R_xml_0 (algebra.Alg.Term algebra.F.id_isQid (x1::nil)) (algebra.Alg.Term algebra.F.id_isQid (x12::nil)) (* *) | DP_R_xml_0_48 : forall x12 x1, (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) (algebra.Alg.Term algebra.F.id_ok (x1::nil)) x12) -> DP_R_xml_0 (algebra.Alg.Term algebra.F.id_isNePal (x1::nil)) (algebra.Alg.Term algebra.F.id_isNePal (x12::nil)) (* *) | DP_R_xml_0_49 : forall x12 x1, (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) (algebra.Alg.Term algebra.F.id_ok (x1::nil)) x12) -> DP_R_xml_0 (algebra.Alg.Term algebra.F.id_isPal (x1::nil)) (algebra.Alg.Term algebra.F.id_isPal (x12::nil)) (* *) | DP_R_xml_0_50 : forall x12 x1, (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) (algebra.Alg.Term algebra.F.id_mark (x1::nil)) x12) -> DP_R_xml_0 (algebra.Alg.Term algebra.F.id_top ((algebra.Alg.Term algebra.F.id_proper (x1::nil))::nil)) (algebra.Alg.Term algebra.F.id_top (x12::nil)) (* *) | DP_R_xml_0_51 : forall x12 x1, (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) (algebra.Alg.Term algebra.F.id_mark (x1::nil)) x12) -> DP_R_xml_0 (algebra.Alg.Term algebra.F.id_proper (x1::nil)) (algebra.Alg.Term algebra.F.id_top (x12::nil)) (* *) | DP_R_xml_0_52 : forall x12 x1, (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) (algebra.Alg.Term algebra.F.id_ok (x1::nil)) x12) -> DP_R_xml_0 (algebra.Alg.Term algebra.F.id_top ((algebra.Alg.Term algebra.F.id_active (x1::nil))::nil)) (algebra.Alg.Term algebra.F.id_top (x12::nil)) (* *) | DP_R_xml_0_53 : forall x12 x1, (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) (algebra.Alg.Term algebra.F.id_ok (x1::nil)) x12) -> DP_R_xml_0 (algebra.Alg.Term algebra.F.id_active (x1::nil)) (algebra.Alg.Term algebra.F.id_top (x12::nil)) . Module ddp := dp.MakeDP(algebra.EQT). Lemma R_xml_0_dp_step_spec : forall x y, (ddp.dp_step R_xml_0_deep_rew.R_xml_0_rules x y) -> exists f, exists l1, exists l2, y = algebra.Alg.Term f l2/\ (closure.refl_trans_clos (closure.one_step_list (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) ) l1 l2)/\ (ddp.dp R_xml_0_deep_rew.R_xml_0_rules x (algebra.Alg.Term f l1)). Proof. intros x y H. induction H. inversion H. subst. destruct t0. refine ((False_ind) _ _). refine (R_xml_0_deep_rew.R_xml_0_non_var H0). simpl in H|-*. exists a. exists ((List.map) (algebra.Alg.apply_subst sigma) l). exists ((List.map) (algebra.Alg.apply_subst sigma) l). repeat (constructor). assumption. exists f. exists l2. exists l1. constructor. constructor. constructor. constructor. rewrite <- closure.rwr_list_trans_clos_one_step_list. assumption. assumption. Qed. Ltac included_dp_tac H := injection H;clear H;intros;subst; repeat (match goal with | H: closure.refl_trans_clos (closure.one_step_list _) (_::_) _ |- _=> let x := fresh "x" in let l := fresh "l" in let h1 := fresh "h" in let h2 := fresh "h" in let h3 := fresh "h" in destruct (@algebra.EQT_ext.one_step_list_star_decompose_cons _ _ _ _ H) as [x [l[h1[h2 h3]]]];clear H;subst | H: closure.refl_trans_clos (closure.one_step_list _) nil _ |- _ => rewrite (@algebra.EQT_ext.one_step_list_star_decompose_nil _ _ H) in *;clear H end );simpl; econstructor eassumption . Ltac dp_concl_tac h2 h cont_tac t := match t with | False => let h' := fresh "a" in (set (h':=t) in *;cont_tac h'; repeat ( let e := type of h in (match e with | ?t => unfold t in h|-; (case h; [abstract (clear h;intros h;injection h; clear h;intros ;subst; included_dp_tac h2)| clear h;intros h;clear t]) | ?t => unfold t in h|-;elim h end ) )) | or ?a ?b => let cont_tac h' := let h'' := fresh "a" in (set (h'':=or a h') in *;cont_tac h'') in (dp_concl_tac h2 h cont_tac b) end . Module WF_DP_R_xml_0. Inductive DP_R_xml_0_scc_1 : algebra.Alg.term ->algebra.Alg.term ->Prop := (* *) | DP_R_xml_0_scc_1_0 : forall x12 x1, (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) (algebra.Alg.Term algebra.F.id_ok (x1::nil)) x12) -> DP_R_xml_0_scc_1 (algebra.Alg.Term algebra.F.id_isPal (x1::nil)) (algebra.Alg.Term algebra.F.id_isPal (x12::nil)) . Module WF_DP_R_xml_0_scc_1. Open Scope Z_scope. Import ring_extention. Notation Local "a <= b" := (Zle a b). Notation Local "a < b" := (Zlt a b). Definition P_id_active (x12:Z) := 1* x12. Definition P_id_proper (x12:Z) := 2* x12. Definition P_id_isQid (x12:Z) := 3 + 2* x12. Definition P_id_and (x12:Z) (x13:Z) := 2* x13. Definition P_id_e := 1. Definition P_id_mark (x12:Z) := 0. Definition P_id_top (x12:Z) := 0. Definition P_id_isPal (x12:Z) := 2* x12. Definition P_id_isList (x12:Z) := 2* x12. Definition P_id_o := 3. Definition P_id___ (x12:Z) (x13:Z) := 1* x12 + 2* x13. Definition P_id_ok (x12:Z) := 1 + 1* x12. Definition P_id_isNePal (x12:Z) := 1* x12. Definition P_id_tt := 2. Definition P_id_i := 3. Definition P_id_nil := 1. Definition P_id_a := 1. Definition P_id_isNeList (x12:Z) := 2* x12. Definition P_id_u := 2. Lemma P_id_active_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_active x13 <= P_id_active x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_proper_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_proper x13 <= P_id_proper x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_isQid_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_isQid x13 <= P_id_isQid x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_and_monotonic : forall x12 x14 x13 x15, (0 <= x15)/\ (x15 <= x14) -> (0 <= x13)/\ (x13 <= x12) ->P_id_and x13 x15 <= P_id_and x12 x14. Proof. intros x15 x14 x13 x12. intros [H_1 H_0]. intros [H_3 H_2]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_mark_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_mark x13 <= P_id_mark x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_top_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_top x13 <= P_id_top x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_isPal_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_isPal x13 <= P_id_isPal x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_isList_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_isList x13 <= P_id_isList x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id____monotonic : forall x12 x14 x13 x15, (0 <= x15)/\ (x15 <= x14) -> (0 <= x13)/\ (x13 <= x12) ->P_id___ x13 x15 <= P_id___ x12 x14. Proof. intros x15 x14 x13 x12. intros [H_1 H_0]. intros [H_3 H_2]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_ok_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_ok x13 <= P_id_ok x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_isNePal_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_isNePal x13 <= P_id_isNePal x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_isNeList_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_isNeList x13 <= P_id_isNeList x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_active_bounded : forall x12, (0 <= x12) ->0 <= P_id_active x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_proper_bounded : forall x12, (0 <= x12) ->0 <= P_id_proper x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_isQid_bounded : forall x12, (0 <= x12) ->0 <= P_id_isQid x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_and_bounded : forall x12 x13, (0 <= x12) ->(0 <= x13) ->0 <= P_id_and x13 x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_e_bounded : 0 <= P_id_e . Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_mark_bounded : forall x12, (0 <= x12) ->0 <= P_id_mark x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_top_bounded : forall x12, (0 <= x12) ->0 <= P_id_top x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_isPal_bounded : forall x12, (0 <= x12) ->0 <= P_id_isPal x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_isList_bounded : forall x12, (0 <= x12) ->0 <= P_id_isList x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_o_bounded : 0 <= P_id_o . Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id____bounded : forall x12 x13, (0 <= x12) ->(0 <= x13) ->0 <= P_id___ x13 x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_ok_bounded : forall x12, (0 <= x12) ->0 <= P_id_ok x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_isNePal_bounded : forall x12, (0 <= x12) ->0 <= P_id_isNePal x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_tt_bounded : 0 <= P_id_tt . Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_i_bounded : 0 <= P_id_i . Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_nil_bounded : 0 <= P_id_nil . Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_a_bounded : 0 <= P_id_a . Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_isNeList_bounded : forall x12, (0 <= x12) ->0 <= P_id_isNeList x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_u_bounded : 0 <= P_id_u . Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Definition measure := InterpZ.measure 0 P_id_active P_id_proper P_id_isQid P_id_and P_id_e P_id_mark P_id_top P_id_isPal P_id_isList P_id_o P_id___ P_id_ok P_id_isNePal P_id_tt P_id_i P_id_nil P_id_a P_id_isNeList P_id_u. Lemma measure_equation : forall t, measure t = match t with | (algebra.Alg.Term algebra.F.id_active (x12::nil)) => P_id_active (measure x12) | (algebra.Alg.Term algebra.F.id_proper (x12::nil)) => P_id_proper (measure x12) | (algebra.Alg.Term algebra.F.id_isQid (x12::nil)) => P_id_isQid (measure x12) | (algebra.Alg.Term algebra.F.id_and (x13::x12::nil)) => P_id_and (measure x13) (measure x12) | (algebra.Alg.Term algebra.F.id_e nil) => P_id_e | (algebra.Alg.Term algebra.F.id_mark (x12::nil)) => P_id_mark (measure x12) | (algebra.Alg.Term algebra.F.id_top (x12::nil)) => P_id_top (measure x12) | (algebra.Alg.Term algebra.F.id_isPal (x12::nil)) => P_id_isPal (measure x12) | (algebra.Alg.Term algebra.F.id_isList (x12::nil)) => P_id_isList (measure x12) | (algebra.Alg.Term algebra.F.id_o nil) => P_id_o | (algebra.Alg.Term algebra.F.id___ (x13::x12::nil)) => P_id___ (measure x13) (measure x12) | (algebra.Alg.Term algebra.F.id_ok (x12::nil)) => P_id_ok (measure x12) | (algebra.Alg.Term algebra.F.id_isNePal (x12::nil)) => P_id_isNePal (measure x12) | (algebra.Alg.Term algebra.F.id_tt nil) => P_id_tt | (algebra.Alg.Term algebra.F.id_i nil) => P_id_i | (algebra.Alg.Term algebra.F.id_nil nil) => P_id_nil | (algebra.Alg.Term algebra.F.id_a nil) => P_id_a | (algebra.Alg.Term algebra.F.id_isNeList (x12::nil)) => P_id_isNeList (measure x12) | (algebra.Alg.Term algebra.F.id_u nil) => P_id_u | _ => 0 end. Proof. intros t;case t;intros ;apply refl_equal. Qed. Lemma measure_bounded : forall t, 0 <= measure t. Proof. unfold measure in |-*. apply InterpZ.measure_bounded; cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Ltac generate_pos_hyp := match goal with | H:context [measure ?x] |- _ => let v := fresh "v" in (let H := fresh "h" in (set (H:=measure_bounded x) in *;set (v:=measure x) in *; clearbody H;clearbody v)) | |- context [measure ?x] => let v := fresh "v" in (let H := fresh "h" in (set (H:=measure_bounded x) in *;set (v:=measure x) in *; clearbody H;clearbody v)) end . Lemma rules_monotonic : forall l r, (algebra.EQT.axiom R_xml_0_deep_rew.R_xml_0_rules r l) -> measure r <= measure l. Proof. intros l r H. fold measure in |-*. inversion H;clear H;subst;inversion H0;clear H0;subst; simpl algebra.EQT.T.apply_subst in |-*; repeat ( match goal with | |- context [measure (algebra.Alg.Term ?f ?t)] => rewrite (measure_equation (algebra.Alg.Term f t)) end );repeat (generate_pos_hyp ); cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma measure_star_monotonic : forall l r, (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) r l) ->measure r <= measure l. Proof. unfold measure in *. apply InterpZ.measure_star_monotonic. intros ;apply P_id_active_monotonic;assumption. intros ;apply P_id_proper_monotonic;assumption. intros ;apply P_id_isQid_monotonic;assumption. intros ;apply P_id_and_monotonic;assumption. intros ;apply P_id_mark_monotonic;assumption. intros ;apply P_id_top_monotonic;assumption. intros ;apply P_id_isPal_monotonic;assumption. intros ;apply P_id_isList_monotonic;assumption. intros ;apply P_id____monotonic;assumption. intros ;apply P_id_ok_monotonic;assumption. intros ;apply P_id_isNePal_monotonic;assumption. intros ;apply P_id_isNeList_monotonic;assumption. intros ;apply P_id_active_bounded;assumption. intros ;apply P_id_proper_bounded;assumption. intros ;apply P_id_isQid_bounded;assumption. intros ;apply P_id_and_bounded;assumption. intros ;apply P_id_e_bounded;assumption. intros ;apply P_id_mark_bounded;assumption. intros ;apply P_id_top_bounded;assumption. intros ;apply P_id_isPal_bounded;assumption. intros ;apply P_id_isList_bounded;assumption. intros ;apply P_id_o_bounded;assumption. intros ;apply P_id____bounded;assumption. intros ;apply P_id_ok_bounded;assumption. intros ;apply P_id_isNePal_bounded;assumption. intros ;apply P_id_tt_bounded;assumption. intros ;apply P_id_i_bounded;assumption. intros ;apply P_id_nil_bounded;assumption. intros ;apply P_id_a_bounded;assumption. intros ;apply P_id_isNeList_bounded;assumption. intros ;apply P_id_u_bounded;assumption. apply rules_monotonic. Qed. Definition P_id_ISQID (x12:Z) := 0. Definition P_id____hat_1 (x12:Z) (x13:Z) := 0. Definition P_id_TOP (x12:Z) := 0. Definition P_id_ISNEPAL (x12:Z) := 0. Definition P_id_AND (x12:Z) (x13:Z) := 0. Definition P_id_ISPAL (x12:Z) := 1* x12. Definition P_id_ISNELIST (x12:Z) := 0. Definition P_id_ACTIVE (x12:Z) := 0. Definition P_id_PROPER (x12:Z) := 0. Definition P_id_ISLIST (x12:Z) := 0. Lemma P_id_ISQID_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_ISQID x13 <= P_id_ISQID x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id____hat_1_monotonic : forall x12 x14 x13 x15, (0 <= x15)/\ (x15 <= x14) -> (0 <= x13)/\ (x13 <= x12) -> P_id____hat_1 x13 x15 <= P_id____hat_1 x12 x14. Proof. intros x15 x14 x13 x12. intros [H_1 H_0]. intros [H_3 H_2]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_TOP_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_TOP x13 <= P_id_TOP x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_ISNEPAL_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_ISNEPAL x13 <= P_id_ISNEPAL x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_AND_monotonic : forall x12 x14 x13 x15, (0 <= x15)/\ (x15 <= x14) -> (0 <= x13)/\ (x13 <= x12) ->P_id_AND x13 x15 <= P_id_AND x12 x14. Proof. intros x15 x14 x13 x12. intros [H_1 H_0]. intros [H_3 H_2]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_ISPAL_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_ISPAL x13 <= P_id_ISPAL x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_ISNELIST_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_ISNELIST x13 <= P_id_ISNELIST x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_ACTIVE_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_ACTIVE x13 <= P_id_ACTIVE x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_PROPER_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_PROPER x13 <= P_id_PROPER x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_ISLIST_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_ISLIST x13 <= P_id_ISLIST x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Definition marked_measure := InterpZ.marked_measure 0 P_id_active P_id_proper P_id_isQid P_id_and P_id_e P_id_mark P_id_top P_id_isPal P_id_isList P_id_o P_id___ P_id_ok P_id_isNePal P_id_tt P_id_i P_id_nil P_id_a P_id_isNeList P_id_u P_id_ISQID P_id____hat_1 P_id_TOP P_id_ISNEPAL P_id_AND P_id_ISPAL P_id_ISNELIST P_id_ACTIVE P_id_PROPER P_id_ISLIST. Lemma marked_measure_equation : forall t, marked_measure t = match t with | (algebra.Alg.Term algebra.F.id_isQid (x12::nil)) => P_id_ISQID (measure x12) | (algebra.Alg.Term algebra.F.id___ (x13:: x12::nil)) => P_id____hat_1 (measure x13) (measure x12) | (algebra.Alg.Term algebra.F.id_top (x12::nil)) => P_id_TOP (measure x12) | (algebra.Alg.Term algebra.F.id_isNePal (x12::nil)) => P_id_ISNEPAL (measure x12) | (algebra.Alg.Term algebra.F.id_and (x13:: x12::nil)) => P_id_AND (measure x13) (measure x12) | (algebra.Alg.Term algebra.F.id_isPal (x12::nil)) => P_id_ISPAL (measure x12) | (algebra.Alg.Term algebra.F.id_isNeList (x12::nil)) => P_id_ISNELIST (measure x12) | (algebra.Alg.Term algebra.F.id_active (x12::nil)) => P_id_ACTIVE (measure x12) | (algebra.Alg.Term algebra.F.id_proper (x12::nil)) => P_id_PROPER (measure x12) | (algebra.Alg.Term algebra.F.id_isList (x12::nil)) => P_id_ISLIST (measure x12) | _ => measure t end. Proof. reflexivity . Qed. Lemma marked_measure_star_monotonic : forall f l1 l2, (closure.refl_trans_clos (closure.one_step_list (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) ) l1 l2) -> marked_measure (algebra.Alg.Term f l1) <= marked_measure (algebra.Alg.Term f l2). Proof. unfold marked_measure in *. apply InterpZ.marked_measure_star_monotonic. intros ;apply P_id_active_monotonic;assumption. intros ;apply P_id_proper_monotonic;assumption. intros ;apply P_id_isQid_monotonic;assumption. intros ;apply P_id_and_monotonic;assumption. intros ;apply P_id_mark_monotonic;assumption. intros ;apply P_id_top_monotonic;assumption. intros ;apply P_id_isPal_monotonic;assumption. intros ;apply P_id_isList_monotonic;assumption. intros ;apply P_id____monotonic;assumption. intros ;apply P_id_ok_monotonic;assumption. intros ;apply P_id_isNePal_monotonic;assumption. intros ;apply P_id_isNeList_monotonic;assumption. intros ;apply P_id_active_bounded;assumption. intros ;apply P_id_proper_bounded;assumption. intros ;apply P_id_isQid_bounded;assumption. intros ;apply P_id_and_bounded;assumption. intros ;apply P_id_e_bounded;assumption. intros ;apply P_id_mark_bounded;assumption. intros ;apply P_id_top_bounded;assumption. intros ;apply P_id_isPal_bounded;assumption. intros ;apply P_id_isList_bounded;assumption. intros ;apply P_id_o_bounded;assumption. intros ;apply P_id____bounded;assumption. intros ;apply P_id_ok_bounded;assumption. intros ;apply P_id_isNePal_bounded;assumption. intros ;apply P_id_tt_bounded;assumption. intros ;apply P_id_i_bounded;assumption. intros ;apply P_id_nil_bounded;assumption. intros ;apply P_id_a_bounded;assumption. intros ;apply P_id_isNeList_bounded;assumption. intros ;apply P_id_u_bounded;assumption. apply rules_monotonic. intros ;apply P_id_ISQID_monotonic;assumption. intros ;apply P_id____hat_1_monotonic;assumption. intros ;apply P_id_TOP_monotonic;assumption. intros ;apply P_id_ISNEPAL_monotonic;assumption. intros ;apply P_id_AND_monotonic;assumption. intros ;apply P_id_ISPAL_monotonic;assumption. intros ;apply P_id_ISNELIST_monotonic;assumption. intros ;apply P_id_ACTIVE_monotonic;assumption. intros ;apply P_id_PROPER_monotonic;assumption. intros ;apply P_id_ISLIST_monotonic;assumption. Qed. Ltac rewrite_and_unfold := do 2 (rewrite marked_measure_equation); repeat ( match goal with | |- context [measure (algebra.Alg.Term ?f ?t)] => rewrite (measure_equation (algebra.Alg.Term f t)) | H:context [measure (algebra.Alg.Term ?f ?t)] |- _ => rewrite (measure_equation (algebra.Alg.Term f t)) in H|- end ). Lemma wf : well_founded WF_DP_R_xml_0.DP_R_xml_0_scc_1. Proof. intros x. apply well_founded_ind with (R:=fun x y => (Zwf.Zwf 0) (marked_measure x) (marked_measure y)). apply Inverse_Image.wf_inverse_image with (B:=Z). apply Zwf.Zwf_well_founded. clear x. intros x IHx. repeat ( constructor;inversion 1;subst; full_prove_ineq algebra.Alg.Term ltac:(algebra.Alg_ext.find_replacement ) algebra.EQT_ext.one_step_list_refl_trans_clos marked_measure marked_measure_star_monotonic (Zwf.Zwf 0) (interp.o_Z 0) ltac:(fun _ => R_xml_0_deep_rew.impossible_star_reduction_R_xml_0 ) ltac:(fun _ => rewrite_and_unfold ) ltac:(fun _ => generate_pos_hyp ) ltac:(fun _ => cbv beta iota zeta delta - [Zplus Zmult Zle Zlt] in * ; try (constructor)) IHx ). Qed. End WF_DP_R_xml_0_scc_1. Definition wf_DP_R_xml_0_scc_1 := WF_DP_R_xml_0_scc_1.wf. Lemma acc_DP_R_xml_0_scc_1 : forall x y, (DP_R_xml_0_scc_1 x y) ->Acc WF_R_xml_0_deep_rew.DP_R_xml_0 x. Proof. intros x. pattern x. apply (@Acc_ind _ DP_R_xml_0_scc_1). intros x' _ Hrec y h. inversion h;clear h;subst; constructor;intros _y _h;inversion _h;clear _h;subst; (eapply Hrec;econstructor eassumption)|| ((R_xml_0_deep_rew.impossible_star_reduction_R_xml_0 )|| (eapply Hrec;econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))). apply wf_DP_R_xml_0_scc_1. Qed. Inductive DP_R_xml_0_scc_2 : algebra.Alg.term ->algebra.Alg.term ->Prop := (* *) | DP_R_xml_0_scc_2_0 : forall x12 x1, (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) (algebra.Alg.Term algebra.F.id_ok (x1::nil)) x12) -> DP_R_xml_0_scc_2 (algebra.Alg.Term algebra.F.id_isNePal (x1::nil)) (algebra.Alg.Term algebra.F.id_isNePal (x12::nil)) . Module WF_DP_R_xml_0_scc_2. Open Scope Z_scope. Import ring_extention. Notation Local "a <= b" := (Zle a b). Notation Local "a < b" := (Zlt a b). Definition P_id_active (x12:Z) := 1* x12. Definition P_id_proper (x12:Z) := 2* x12. Definition P_id_isQid (x12:Z) := 3 + 2* x12. Definition P_id_and (x12:Z) (x13:Z) := 2* x13. Definition P_id_e := 1. Definition P_id_mark (x12:Z) := 0. Definition P_id_top (x12:Z) := 0. Definition P_id_isPal (x12:Z) := 2* x12. Definition P_id_isList (x12:Z) := 2* x12. Definition P_id_o := 3. Definition P_id___ (x12:Z) (x13:Z) := 1* x12 + 2* x13. Definition P_id_ok (x12:Z) := 1 + 1* x12. Definition P_id_isNePal (x12:Z) := 1* x12. Definition P_id_tt := 2. Definition P_id_i := 3. Definition P_id_nil := 1. Definition P_id_a := 1. Definition P_id_isNeList (x12:Z) := 2* x12. Definition P_id_u := 2. Lemma P_id_active_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_active x13 <= P_id_active x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_proper_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_proper x13 <= P_id_proper x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_isQid_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_isQid x13 <= P_id_isQid x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_and_monotonic : forall x12 x14 x13 x15, (0 <= x15)/\ (x15 <= x14) -> (0 <= x13)/\ (x13 <= x12) ->P_id_and x13 x15 <= P_id_and x12 x14. Proof. intros x15 x14 x13 x12. intros [H_1 H_0]. intros [H_3 H_2]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_mark_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_mark x13 <= P_id_mark x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_top_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_top x13 <= P_id_top x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_isPal_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_isPal x13 <= P_id_isPal x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_isList_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_isList x13 <= P_id_isList x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id____monotonic : forall x12 x14 x13 x15, (0 <= x15)/\ (x15 <= x14) -> (0 <= x13)/\ (x13 <= x12) ->P_id___ x13 x15 <= P_id___ x12 x14. Proof. intros x15 x14 x13 x12. intros [H_1 H_0]. intros [H_3 H_2]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_ok_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_ok x13 <= P_id_ok x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_isNePal_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_isNePal x13 <= P_id_isNePal x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_isNeList_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_isNeList x13 <= P_id_isNeList x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_active_bounded : forall x12, (0 <= x12) ->0 <= P_id_active x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_proper_bounded : forall x12, (0 <= x12) ->0 <= P_id_proper x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_isQid_bounded : forall x12, (0 <= x12) ->0 <= P_id_isQid x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_and_bounded : forall x12 x13, (0 <= x12) ->(0 <= x13) ->0 <= P_id_and x13 x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_e_bounded : 0 <= P_id_e . Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_mark_bounded : forall x12, (0 <= x12) ->0 <= P_id_mark x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_top_bounded : forall x12, (0 <= x12) ->0 <= P_id_top x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_isPal_bounded : forall x12, (0 <= x12) ->0 <= P_id_isPal x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_isList_bounded : forall x12, (0 <= x12) ->0 <= P_id_isList x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_o_bounded : 0 <= P_id_o . Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id____bounded : forall x12 x13, (0 <= x12) ->(0 <= x13) ->0 <= P_id___ x13 x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_ok_bounded : forall x12, (0 <= x12) ->0 <= P_id_ok x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_isNePal_bounded : forall x12, (0 <= x12) ->0 <= P_id_isNePal x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_tt_bounded : 0 <= P_id_tt . Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_i_bounded : 0 <= P_id_i . Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_nil_bounded : 0 <= P_id_nil . Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_a_bounded : 0 <= P_id_a . Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_isNeList_bounded : forall x12, (0 <= x12) ->0 <= P_id_isNeList x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_u_bounded : 0 <= P_id_u . Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Definition measure := InterpZ.measure 0 P_id_active P_id_proper P_id_isQid P_id_and P_id_e P_id_mark P_id_top P_id_isPal P_id_isList P_id_o P_id___ P_id_ok P_id_isNePal P_id_tt P_id_i P_id_nil P_id_a P_id_isNeList P_id_u. Lemma measure_equation : forall t, measure t = match t with | (algebra.Alg.Term algebra.F.id_active (x12::nil)) => P_id_active (measure x12) | (algebra.Alg.Term algebra.F.id_proper (x12::nil)) => P_id_proper (measure x12) | (algebra.Alg.Term algebra.F.id_isQid (x12::nil)) => P_id_isQid (measure x12) | (algebra.Alg.Term algebra.F.id_and (x13::x12::nil)) => P_id_and (measure x13) (measure x12) | (algebra.Alg.Term algebra.F.id_e nil) => P_id_e | (algebra.Alg.Term algebra.F.id_mark (x12::nil)) => P_id_mark (measure x12) | (algebra.Alg.Term algebra.F.id_top (x12::nil)) => P_id_top (measure x12) | (algebra.Alg.Term algebra.F.id_isPal (x12::nil)) => P_id_isPal (measure x12) | (algebra.Alg.Term algebra.F.id_isList (x12::nil)) => P_id_isList (measure x12) | (algebra.Alg.Term algebra.F.id_o nil) => P_id_o | (algebra.Alg.Term algebra.F.id___ (x13::x12::nil)) => P_id___ (measure x13) (measure x12) | (algebra.Alg.Term algebra.F.id_ok (x12::nil)) => P_id_ok (measure x12) | (algebra.Alg.Term algebra.F.id_isNePal (x12::nil)) => P_id_isNePal (measure x12) | (algebra.Alg.Term algebra.F.id_tt nil) => P_id_tt | (algebra.Alg.Term algebra.F.id_i nil) => P_id_i | (algebra.Alg.Term algebra.F.id_nil nil) => P_id_nil | (algebra.Alg.Term algebra.F.id_a nil) => P_id_a | (algebra.Alg.Term algebra.F.id_isNeList (x12::nil)) => P_id_isNeList (measure x12) | (algebra.Alg.Term algebra.F.id_u nil) => P_id_u | _ => 0 end. Proof. intros t;case t;intros ;apply refl_equal. Qed. Lemma measure_bounded : forall t, 0 <= measure t. Proof. unfold measure in |-*. apply InterpZ.measure_bounded; cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Ltac generate_pos_hyp := match goal with | H:context [measure ?x] |- _ => let v := fresh "v" in (let H := fresh "h" in (set (H:=measure_bounded x) in *;set (v:=measure x) in *; clearbody H;clearbody v)) | |- context [measure ?x] => let v := fresh "v" in (let H := fresh "h" in (set (H:=measure_bounded x) in *;set (v:=measure x) in *; clearbody H;clearbody v)) end . Lemma rules_monotonic : forall l r, (algebra.EQT.axiom R_xml_0_deep_rew.R_xml_0_rules r l) -> measure r <= measure l. Proof. intros l r H. fold measure in |-*. inversion H;clear H;subst;inversion H0;clear H0;subst; simpl algebra.EQT.T.apply_subst in |-*; repeat ( match goal with | |- context [measure (algebra.Alg.Term ?f ?t)] => rewrite (measure_equation (algebra.Alg.Term f t)) end );repeat (generate_pos_hyp ); cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma measure_star_monotonic : forall l r, (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) r l) ->measure r <= measure l. Proof. unfold measure in *. apply InterpZ.measure_star_monotonic. intros ;apply P_id_active_monotonic;assumption. intros ;apply P_id_proper_monotonic;assumption. intros ;apply P_id_isQid_monotonic;assumption. intros ;apply P_id_and_monotonic;assumption. intros ;apply P_id_mark_monotonic;assumption. intros ;apply P_id_top_monotonic;assumption. intros ;apply P_id_isPal_monotonic;assumption. intros ;apply P_id_isList_monotonic;assumption. intros ;apply P_id____monotonic;assumption. intros ;apply P_id_ok_monotonic;assumption. intros ;apply P_id_isNePal_monotonic;assumption. intros ;apply P_id_isNeList_monotonic;assumption. intros ;apply P_id_active_bounded;assumption. intros ;apply P_id_proper_bounded;assumption. intros ;apply P_id_isQid_bounded;assumption. intros ;apply P_id_and_bounded;assumption. intros ;apply P_id_e_bounded;assumption. intros ;apply P_id_mark_bounded;assumption. intros ;apply P_id_top_bounded;assumption. intros ;apply P_id_isPal_bounded;assumption. intros ;apply P_id_isList_bounded;assumption. intros ;apply P_id_o_bounded;assumption. intros ;apply P_id____bounded;assumption. intros ;apply P_id_ok_bounded;assumption. intros ;apply P_id_isNePal_bounded;assumption. intros ;apply P_id_tt_bounded;assumption. intros ;apply P_id_i_bounded;assumption. intros ;apply P_id_nil_bounded;assumption. intros ;apply P_id_a_bounded;assumption. intros ;apply P_id_isNeList_bounded;assumption. intros ;apply P_id_u_bounded;assumption. apply rules_monotonic. Qed. Definition P_id_ISQID (x12:Z) := 0. Definition P_id____hat_1 (x12:Z) (x13:Z) := 0. Definition P_id_TOP (x12:Z) := 0. Definition P_id_ISNEPAL (x12:Z) := 1* x12. Definition P_id_AND (x12:Z) (x13:Z) := 0. Definition P_id_ISPAL (x12:Z) := 0. Definition P_id_ISNELIST (x12:Z) := 0. Definition P_id_ACTIVE (x12:Z) := 0. Definition P_id_PROPER (x12:Z) := 0. Definition P_id_ISLIST (x12:Z) := 0. Lemma P_id_ISQID_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_ISQID x13 <= P_id_ISQID x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id____hat_1_monotonic : forall x12 x14 x13 x15, (0 <= x15)/\ (x15 <= x14) -> (0 <= x13)/\ (x13 <= x12) -> P_id____hat_1 x13 x15 <= P_id____hat_1 x12 x14. Proof. intros x15 x14 x13 x12. intros [H_1 H_0]. intros [H_3 H_2]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_TOP_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_TOP x13 <= P_id_TOP x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_ISNEPAL_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_ISNEPAL x13 <= P_id_ISNEPAL x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_AND_monotonic : forall x12 x14 x13 x15, (0 <= x15)/\ (x15 <= x14) -> (0 <= x13)/\ (x13 <= x12) ->P_id_AND x13 x15 <= P_id_AND x12 x14. Proof. intros x15 x14 x13 x12. intros [H_1 H_0]. intros [H_3 H_2]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_ISPAL_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_ISPAL x13 <= P_id_ISPAL x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_ISNELIST_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_ISNELIST x13 <= P_id_ISNELIST x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_ACTIVE_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_ACTIVE x13 <= P_id_ACTIVE x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_PROPER_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_PROPER x13 <= P_id_PROPER x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_ISLIST_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_ISLIST x13 <= P_id_ISLIST x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Definition marked_measure := InterpZ.marked_measure 0 P_id_active P_id_proper P_id_isQid P_id_and P_id_e P_id_mark P_id_top P_id_isPal P_id_isList P_id_o P_id___ P_id_ok P_id_isNePal P_id_tt P_id_i P_id_nil P_id_a P_id_isNeList P_id_u P_id_ISQID P_id____hat_1 P_id_TOP P_id_ISNEPAL P_id_AND P_id_ISPAL P_id_ISNELIST P_id_ACTIVE P_id_PROPER P_id_ISLIST. Lemma marked_measure_equation : forall t, marked_measure t = match t with | (algebra.Alg.Term algebra.F.id_isQid (x12::nil)) => P_id_ISQID (measure x12) | (algebra.Alg.Term algebra.F.id___ (x13:: x12::nil)) => P_id____hat_1 (measure x13) (measure x12) | (algebra.Alg.Term algebra.F.id_top (x12::nil)) => P_id_TOP (measure x12) | (algebra.Alg.Term algebra.F.id_isNePal (x12::nil)) => P_id_ISNEPAL (measure x12) | (algebra.Alg.Term algebra.F.id_and (x13:: x12::nil)) => P_id_AND (measure x13) (measure x12) | (algebra.Alg.Term algebra.F.id_isPal (x12::nil)) => P_id_ISPAL (measure x12) | (algebra.Alg.Term algebra.F.id_isNeList (x12::nil)) => P_id_ISNELIST (measure x12) | (algebra.Alg.Term algebra.F.id_active (x12::nil)) => P_id_ACTIVE (measure x12) | (algebra.Alg.Term algebra.F.id_proper (x12::nil)) => P_id_PROPER (measure x12) | (algebra.Alg.Term algebra.F.id_isList (x12::nil)) => P_id_ISLIST (measure x12) | _ => measure t end. Proof. reflexivity . Qed. Lemma marked_measure_star_monotonic : forall f l1 l2, (closure.refl_trans_clos (closure.one_step_list (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) ) l1 l2) -> marked_measure (algebra.Alg.Term f l1) <= marked_measure (algebra.Alg.Term f l2). Proof. unfold marked_measure in *. apply InterpZ.marked_measure_star_monotonic. intros ;apply P_id_active_monotonic;assumption. intros ;apply P_id_proper_monotonic;assumption. intros ;apply P_id_isQid_monotonic;assumption. intros ;apply P_id_and_monotonic;assumption. intros ;apply P_id_mark_monotonic;assumption. intros ;apply P_id_top_monotonic;assumption. intros ;apply P_id_isPal_monotonic;assumption. intros ;apply P_id_isList_monotonic;assumption. intros ;apply P_id____monotonic;assumption. intros ;apply P_id_ok_monotonic;assumption. intros ;apply P_id_isNePal_monotonic;assumption. intros ;apply P_id_isNeList_monotonic;assumption. intros ;apply P_id_active_bounded;assumption. intros ;apply P_id_proper_bounded;assumption. intros ;apply P_id_isQid_bounded;assumption. intros ;apply P_id_and_bounded;assumption. intros ;apply P_id_e_bounded;assumption. intros ;apply P_id_mark_bounded;assumption. intros ;apply P_id_top_bounded;assumption. intros ;apply P_id_isPal_bounded;assumption. intros ;apply P_id_isList_bounded;assumption. intros ;apply P_id_o_bounded;assumption. intros ;apply P_id____bounded;assumption. intros ;apply P_id_ok_bounded;assumption. intros ;apply P_id_isNePal_bounded;assumption. intros ;apply P_id_tt_bounded;assumption. intros ;apply P_id_i_bounded;assumption. intros ;apply P_id_nil_bounded;assumption. intros ;apply P_id_a_bounded;assumption. intros ;apply P_id_isNeList_bounded;assumption. intros ;apply P_id_u_bounded;assumption. apply rules_monotonic. intros ;apply P_id_ISQID_monotonic;assumption. intros ;apply P_id____hat_1_monotonic;assumption. intros ;apply P_id_TOP_monotonic;assumption. intros ;apply P_id_ISNEPAL_monotonic;assumption. intros ;apply P_id_AND_monotonic;assumption. intros ;apply P_id_ISPAL_monotonic;assumption. intros ;apply P_id_ISNELIST_monotonic;assumption. intros ;apply P_id_ACTIVE_monotonic;assumption. intros ;apply P_id_PROPER_monotonic;assumption. intros ;apply P_id_ISLIST_monotonic;assumption. Qed. Ltac rewrite_and_unfold := do 2 (rewrite marked_measure_equation); repeat ( match goal with | |- context [measure (algebra.Alg.Term ?f ?t)] => rewrite (measure_equation (algebra.Alg.Term f t)) | H:context [measure (algebra.Alg.Term ?f ?t)] |- _ => rewrite (measure_equation (algebra.Alg.Term f t)) in H|- end ). Lemma wf : well_founded WF_DP_R_xml_0.DP_R_xml_0_scc_2. Proof. intros x. apply well_founded_ind with (R:=fun x y => (Zwf.Zwf 0) (marked_measure x) (marked_measure y)). apply Inverse_Image.wf_inverse_image with (B:=Z). apply Zwf.Zwf_well_founded. clear x. intros x IHx. repeat ( constructor;inversion 1;subst; full_prove_ineq algebra.Alg.Term ltac:(algebra.Alg_ext.find_replacement ) algebra.EQT_ext.one_step_list_refl_trans_clos marked_measure marked_measure_star_monotonic (Zwf.Zwf 0) (interp.o_Z 0) ltac:(fun _ => R_xml_0_deep_rew.impossible_star_reduction_R_xml_0 ) ltac:(fun _ => rewrite_and_unfold ) ltac:(fun _ => generate_pos_hyp ) ltac:(fun _ => cbv beta iota zeta delta - [Zplus Zmult Zle Zlt] in * ; try (constructor)) IHx ). Qed. End WF_DP_R_xml_0_scc_2. Definition wf_DP_R_xml_0_scc_2 := WF_DP_R_xml_0_scc_2.wf. Lemma acc_DP_R_xml_0_scc_2 : forall x y, (DP_R_xml_0_scc_2 x y) ->Acc WF_R_xml_0_deep_rew.DP_R_xml_0 x. Proof. intros x. pattern x. apply (@Acc_ind _ DP_R_xml_0_scc_2). intros x' _ Hrec y h. inversion h;clear h;subst; constructor;intros _y _h;inversion _h;clear _h;subst; (eapply Hrec;econstructor eassumption)|| ((R_xml_0_deep_rew.impossible_star_reduction_R_xml_0 )|| (eapply Hrec;econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))). apply wf_DP_R_xml_0_scc_2. Qed. Inductive DP_R_xml_0_scc_3 : algebra.Alg.term ->algebra.Alg.term ->Prop := (* *) | DP_R_xml_0_scc_3_0 : forall x12 x1, (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) (algebra.Alg.Term algebra.F.id_ok (x1::nil)) x12) -> DP_R_xml_0_scc_3 (algebra.Alg.Term algebra.F.id_isQid (x1::nil)) (algebra.Alg.Term algebra.F.id_isQid (x12::nil)) . Module WF_DP_R_xml_0_scc_3. Open Scope Z_scope. Import ring_extention. Notation Local "a <= b" := (Zle a b). Notation Local "a < b" := (Zlt a b). Definition P_id_active (x12:Z) := 1* x12. Definition P_id_proper (x12:Z) := 2* x12. Definition P_id_isQid (x12:Z) := 3 + 2* x12. Definition P_id_and (x12:Z) (x13:Z) := 2* x13. Definition P_id_e := 1. Definition P_id_mark (x12:Z) := 0. Definition P_id_top (x12:Z) := 0. Definition P_id_isPal (x12:Z) := 2* x12. Definition P_id_isList (x12:Z) := 2* x12. Definition P_id_o := 3. Definition P_id___ (x12:Z) (x13:Z) := 1* x12 + 2* x13. Definition P_id_ok (x12:Z) := 1 + 1* x12. Definition P_id_isNePal (x12:Z) := 1* x12. Definition P_id_tt := 2. Definition P_id_i := 3. Definition P_id_nil := 1. Definition P_id_a := 1. Definition P_id_isNeList (x12:Z) := 2* x12. Definition P_id_u := 2. Lemma P_id_active_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_active x13 <= P_id_active x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_proper_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_proper x13 <= P_id_proper x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_isQid_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_isQid x13 <= P_id_isQid x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_and_monotonic : forall x12 x14 x13 x15, (0 <= x15)/\ (x15 <= x14) -> (0 <= x13)/\ (x13 <= x12) ->P_id_and x13 x15 <= P_id_and x12 x14. Proof. intros x15 x14 x13 x12. intros [H_1 H_0]. intros [H_3 H_2]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_mark_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_mark x13 <= P_id_mark x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_top_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_top x13 <= P_id_top x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_isPal_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_isPal x13 <= P_id_isPal x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_isList_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_isList x13 <= P_id_isList x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id____monotonic : forall x12 x14 x13 x15, (0 <= x15)/\ (x15 <= x14) -> (0 <= x13)/\ (x13 <= x12) ->P_id___ x13 x15 <= P_id___ x12 x14. Proof. intros x15 x14 x13 x12. intros [H_1 H_0]. intros [H_3 H_2]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_ok_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_ok x13 <= P_id_ok x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_isNePal_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_isNePal x13 <= P_id_isNePal x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_isNeList_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_isNeList x13 <= P_id_isNeList x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_active_bounded : forall x12, (0 <= x12) ->0 <= P_id_active x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_proper_bounded : forall x12, (0 <= x12) ->0 <= P_id_proper x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_isQid_bounded : forall x12, (0 <= x12) ->0 <= P_id_isQid x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_and_bounded : forall x12 x13, (0 <= x12) ->(0 <= x13) ->0 <= P_id_and x13 x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_e_bounded : 0 <= P_id_e . Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_mark_bounded : forall x12, (0 <= x12) ->0 <= P_id_mark x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_top_bounded : forall x12, (0 <= x12) ->0 <= P_id_top x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_isPal_bounded : forall x12, (0 <= x12) ->0 <= P_id_isPal x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_isList_bounded : forall x12, (0 <= x12) ->0 <= P_id_isList x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_o_bounded : 0 <= P_id_o . Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id____bounded : forall x12 x13, (0 <= x12) ->(0 <= x13) ->0 <= P_id___ x13 x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_ok_bounded : forall x12, (0 <= x12) ->0 <= P_id_ok x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_isNePal_bounded : forall x12, (0 <= x12) ->0 <= P_id_isNePal x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_tt_bounded : 0 <= P_id_tt . Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_i_bounded : 0 <= P_id_i . Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_nil_bounded : 0 <= P_id_nil . Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_a_bounded : 0 <= P_id_a . Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_isNeList_bounded : forall x12, (0 <= x12) ->0 <= P_id_isNeList x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_u_bounded : 0 <= P_id_u . Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Definition measure := InterpZ.measure 0 P_id_active P_id_proper P_id_isQid P_id_and P_id_e P_id_mark P_id_top P_id_isPal P_id_isList P_id_o P_id___ P_id_ok P_id_isNePal P_id_tt P_id_i P_id_nil P_id_a P_id_isNeList P_id_u. Lemma measure_equation : forall t, measure t = match t with | (algebra.Alg.Term algebra.F.id_active (x12::nil)) => P_id_active (measure x12) | (algebra.Alg.Term algebra.F.id_proper (x12::nil)) => P_id_proper (measure x12) | (algebra.Alg.Term algebra.F.id_isQid (x12::nil)) => P_id_isQid (measure x12) | (algebra.Alg.Term algebra.F.id_and (x13::x12::nil)) => P_id_and (measure x13) (measure x12) | (algebra.Alg.Term algebra.F.id_e nil) => P_id_e | (algebra.Alg.Term algebra.F.id_mark (x12::nil)) => P_id_mark (measure x12) | (algebra.Alg.Term algebra.F.id_top (x12::nil)) => P_id_top (measure x12) | (algebra.Alg.Term algebra.F.id_isPal (x12::nil)) => P_id_isPal (measure x12) | (algebra.Alg.Term algebra.F.id_isList (x12::nil)) => P_id_isList (measure x12) | (algebra.Alg.Term algebra.F.id_o nil) => P_id_o | (algebra.Alg.Term algebra.F.id___ (x13::x12::nil)) => P_id___ (measure x13) (measure x12) | (algebra.Alg.Term algebra.F.id_ok (x12::nil)) => P_id_ok (measure x12) | (algebra.Alg.Term algebra.F.id_isNePal (x12::nil)) => P_id_isNePal (measure x12) | (algebra.Alg.Term algebra.F.id_tt nil) => P_id_tt | (algebra.Alg.Term algebra.F.id_i nil) => P_id_i | (algebra.Alg.Term algebra.F.id_nil nil) => P_id_nil | (algebra.Alg.Term algebra.F.id_a nil) => P_id_a | (algebra.Alg.Term algebra.F.id_isNeList (x12::nil)) => P_id_isNeList (measure x12) | (algebra.Alg.Term algebra.F.id_u nil) => P_id_u | _ => 0 end. Proof. intros t;case t;intros ;apply refl_equal. Qed. Lemma measure_bounded : forall t, 0 <= measure t. Proof. unfold measure in |-*. apply InterpZ.measure_bounded; cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Ltac generate_pos_hyp := match goal with | H:context [measure ?x] |- _ => let v := fresh "v" in (let H := fresh "h" in (set (H:=measure_bounded x) in *;set (v:=measure x) in *; clearbody H;clearbody v)) | |- context [measure ?x] => let v := fresh "v" in (let H := fresh "h" in (set (H:=measure_bounded x) in *;set (v:=measure x) in *; clearbody H;clearbody v)) end . Lemma rules_monotonic : forall l r, (algebra.EQT.axiom R_xml_0_deep_rew.R_xml_0_rules r l) -> measure r <= measure l. Proof. intros l r H. fold measure in |-*. inversion H;clear H;subst;inversion H0;clear H0;subst; simpl algebra.EQT.T.apply_subst in |-*; repeat ( match goal with | |- context [measure (algebra.Alg.Term ?f ?t)] => rewrite (measure_equation (algebra.Alg.Term f t)) end );repeat (generate_pos_hyp ); cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma measure_star_monotonic : forall l r, (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) r l) ->measure r <= measure l. Proof. unfold measure in *. apply InterpZ.measure_star_monotonic. intros ;apply P_id_active_monotonic;assumption. intros ;apply P_id_proper_monotonic;assumption. intros ;apply P_id_isQid_monotonic;assumption. intros ;apply P_id_and_monotonic;assumption. intros ;apply P_id_mark_monotonic;assumption. intros ;apply P_id_top_monotonic;assumption. intros ;apply P_id_isPal_monotonic;assumption. intros ;apply P_id_isList_monotonic;assumption. intros ;apply P_id____monotonic;assumption. intros ;apply P_id_ok_monotonic;assumption. intros ;apply P_id_isNePal_monotonic;assumption. intros ;apply P_id_isNeList_monotonic;assumption. intros ;apply P_id_active_bounded;assumption. intros ;apply P_id_proper_bounded;assumption. intros ;apply P_id_isQid_bounded;assumption. intros ;apply P_id_and_bounded;assumption. intros ;apply P_id_e_bounded;assumption. intros ;apply P_id_mark_bounded;assumption. intros ;apply P_id_top_bounded;assumption. intros ;apply P_id_isPal_bounded;assumption. intros ;apply P_id_isList_bounded;assumption. intros ;apply P_id_o_bounded;assumption. intros ;apply P_id____bounded;assumption. intros ;apply P_id_ok_bounded;assumption. intros ;apply P_id_isNePal_bounded;assumption. intros ;apply P_id_tt_bounded;assumption. intros ;apply P_id_i_bounded;assumption. intros ;apply P_id_nil_bounded;assumption. intros ;apply P_id_a_bounded;assumption. intros ;apply P_id_isNeList_bounded;assumption. intros ;apply P_id_u_bounded;assumption. apply rules_monotonic. Qed. Definition P_id_ISQID (x12:Z) := 1* x12. Definition P_id____hat_1 (x12:Z) (x13:Z) := 0. Definition P_id_TOP (x12:Z) := 0. Definition P_id_ISNEPAL (x12:Z) := 0. Definition P_id_AND (x12:Z) (x13:Z) := 0. Definition P_id_ISPAL (x12:Z) := 0. Definition P_id_ISNELIST (x12:Z) := 0. Definition P_id_ACTIVE (x12:Z) := 0. Definition P_id_PROPER (x12:Z) := 0. Definition P_id_ISLIST (x12:Z) := 0. Lemma P_id_ISQID_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_ISQID x13 <= P_id_ISQID x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id____hat_1_monotonic : forall x12 x14 x13 x15, (0 <= x15)/\ (x15 <= x14) -> (0 <= x13)/\ (x13 <= x12) -> P_id____hat_1 x13 x15 <= P_id____hat_1 x12 x14. Proof. intros x15 x14 x13 x12. intros [H_1 H_0]. intros [H_3 H_2]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_TOP_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_TOP x13 <= P_id_TOP x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_ISNEPAL_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_ISNEPAL x13 <= P_id_ISNEPAL x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_AND_monotonic : forall x12 x14 x13 x15, (0 <= x15)/\ (x15 <= x14) -> (0 <= x13)/\ (x13 <= x12) ->P_id_AND x13 x15 <= P_id_AND x12 x14. Proof. intros x15 x14 x13 x12. intros [H_1 H_0]. intros [H_3 H_2]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_ISPAL_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_ISPAL x13 <= P_id_ISPAL x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_ISNELIST_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_ISNELIST x13 <= P_id_ISNELIST x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_ACTIVE_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_ACTIVE x13 <= P_id_ACTIVE x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_PROPER_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_PROPER x13 <= P_id_PROPER x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_ISLIST_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_ISLIST x13 <= P_id_ISLIST x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Definition marked_measure := InterpZ.marked_measure 0 P_id_active P_id_proper P_id_isQid P_id_and P_id_e P_id_mark P_id_top P_id_isPal P_id_isList P_id_o P_id___ P_id_ok P_id_isNePal P_id_tt P_id_i P_id_nil P_id_a P_id_isNeList P_id_u P_id_ISQID P_id____hat_1 P_id_TOP P_id_ISNEPAL P_id_AND P_id_ISPAL P_id_ISNELIST P_id_ACTIVE P_id_PROPER P_id_ISLIST. Lemma marked_measure_equation : forall t, marked_measure t = match t with | (algebra.Alg.Term algebra.F.id_isQid (x12::nil)) => P_id_ISQID (measure x12) | (algebra.Alg.Term algebra.F.id___ (x13:: x12::nil)) => P_id____hat_1 (measure x13) (measure x12) | (algebra.Alg.Term algebra.F.id_top (x12::nil)) => P_id_TOP (measure x12) | (algebra.Alg.Term algebra.F.id_isNePal (x12::nil)) => P_id_ISNEPAL (measure x12) | (algebra.Alg.Term algebra.F.id_and (x13:: x12::nil)) => P_id_AND (measure x13) (measure x12) | (algebra.Alg.Term algebra.F.id_isPal (x12::nil)) => P_id_ISPAL (measure x12) | (algebra.Alg.Term algebra.F.id_isNeList (x12::nil)) => P_id_ISNELIST (measure x12) | (algebra.Alg.Term algebra.F.id_active (x12::nil)) => P_id_ACTIVE (measure x12) | (algebra.Alg.Term algebra.F.id_proper (x12::nil)) => P_id_PROPER (measure x12) | (algebra.Alg.Term algebra.F.id_isList (x12::nil)) => P_id_ISLIST (measure x12) | _ => measure t end. Proof. reflexivity . Qed. Lemma marked_measure_star_monotonic : forall f l1 l2, (closure.refl_trans_clos (closure.one_step_list (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) ) l1 l2) -> marked_measure (algebra.Alg.Term f l1) <= marked_measure (algebra.Alg.Term f l2). Proof. unfold marked_measure in *. apply InterpZ.marked_measure_star_monotonic. intros ;apply P_id_active_monotonic;assumption. intros ;apply P_id_proper_monotonic;assumption. intros ;apply P_id_isQid_monotonic;assumption. intros ;apply P_id_and_monotonic;assumption. intros ;apply P_id_mark_monotonic;assumption. intros ;apply P_id_top_monotonic;assumption. intros ;apply P_id_isPal_monotonic;assumption. intros ;apply P_id_isList_monotonic;assumption. intros ;apply P_id____monotonic;assumption. intros ;apply P_id_ok_monotonic;assumption. intros ;apply P_id_isNePal_monotonic;assumption. intros ;apply P_id_isNeList_monotonic;assumption. intros ;apply P_id_active_bounded;assumption. intros ;apply P_id_proper_bounded;assumption. intros ;apply P_id_isQid_bounded;assumption. intros ;apply P_id_and_bounded;assumption. intros ;apply P_id_e_bounded;assumption. intros ;apply P_id_mark_bounded;assumption. intros ;apply P_id_top_bounded;assumption. intros ;apply P_id_isPal_bounded;assumption. intros ;apply P_id_isList_bounded;assumption. intros ;apply P_id_o_bounded;assumption. intros ;apply P_id____bounded;assumption. intros ;apply P_id_ok_bounded;assumption. intros ;apply P_id_isNePal_bounded;assumption. intros ;apply P_id_tt_bounded;assumption. intros ;apply P_id_i_bounded;assumption. intros ;apply P_id_nil_bounded;assumption. intros ;apply P_id_a_bounded;assumption. intros ;apply P_id_isNeList_bounded;assumption. intros ;apply P_id_u_bounded;assumption. apply rules_monotonic. intros ;apply P_id_ISQID_monotonic;assumption. intros ;apply P_id____hat_1_monotonic;assumption. intros ;apply P_id_TOP_monotonic;assumption. intros ;apply P_id_ISNEPAL_monotonic;assumption. intros ;apply P_id_AND_monotonic;assumption. intros ;apply P_id_ISPAL_monotonic;assumption. intros ;apply P_id_ISNELIST_monotonic;assumption. intros ;apply P_id_ACTIVE_monotonic;assumption. intros ;apply P_id_PROPER_monotonic;assumption. intros ;apply P_id_ISLIST_monotonic;assumption. Qed. Ltac rewrite_and_unfold := do 2 (rewrite marked_measure_equation); repeat ( match goal with | |- context [measure (algebra.Alg.Term ?f ?t)] => rewrite (measure_equation (algebra.Alg.Term f t)) | H:context [measure (algebra.Alg.Term ?f ?t)] |- _ => rewrite (measure_equation (algebra.Alg.Term f t)) in H|- end ). Lemma wf : well_founded WF_DP_R_xml_0.DP_R_xml_0_scc_3. Proof. intros x. apply well_founded_ind with (R:=fun x y => (Zwf.Zwf 0) (marked_measure x) (marked_measure y)). apply Inverse_Image.wf_inverse_image with (B:=Z). apply Zwf.Zwf_well_founded. clear x. intros x IHx. repeat ( constructor;inversion 1;subst; full_prove_ineq algebra.Alg.Term ltac:(algebra.Alg_ext.find_replacement ) algebra.EQT_ext.one_step_list_refl_trans_clos marked_measure marked_measure_star_monotonic (Zwf.Zwf 0) (interp.o_Z 0) ltac:(fun _ => R_xml_0_deep_rew.impossible_star_reduction_R_xml_0 ) ltac:(fun _ => rewrite_and_unfold ) ltac:(fun _ => generate_pos_hyp ) ltac:(fun _ => cbv beta iota zeta delta - [Zplus Zmult Zle Zlt] in * ; try (constructor)) IHx ). Qed. End WF_DP_R_xml_0_scc_3. Definition wf_DP_R_xml_0_scc_3 := WF_DP_R_xml_0_scc_3.wf. Lemma acc_DP_R_xml_0_scc_3 : forall x y, (DP_R_xml_0_scc_3 x y) ->Acc WF_R_xml_0_deep_rew.DP_R_xml_0 x. Proof. intros x. pattern x. apply (@Acc_ind _ DP_R_xml_0_scc_3). intros x' _ Hrec y h. inversion h;clear h;subst; constructor;intros _y _h;inversion _h;clear _h;subst; (eapply Hrec;econstructor eassumption)|| ((R_xml_0_deep_rew.impossible_star_reduction_R_xml_0 )|| (eapply Hrec;econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))). apply wf_DP_R_xml_0_scc_3. Qed. Inductive DP_R_xml_0_scc_4 : algebra.Alg.term ->algebra.Alg.term ->Prop := (* *) | DP_R_xml_0_scc_4_0 : forall x12 x1, (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) (algebra.Alg.Term algebra.F.id_ok (x1::nil)) x12) -> DP_R_xml_0_scc_4 (algebra.Alg.Term algebra.F.id_isNeList (x1::nil)) (algebra.Alg.Term algebra.F.id_isNeList (x12::nil)) . Module WF_DP_R_xml_0_scc_4. Open Scope Z_scope. Import ring_extention. Notation Local "a <= b" := (Zle a b). Notation Local "a < b" := (Zlt a b). Definition P_id_active (x12:Z) := 1* x12. Definition P_id_proper (x12:Z) := 2* x12. Definition P_id_isQid (x12:Z) := 3 + 2* x12. Definition P_id_and (x12:Z) (x13:Z) := 2* x13. Definition P_id_e := 1. Definition P_id_mark (x12:Z) := 0. Definition P_id_top (x12:Z) := 0. Definition P_id_isPal (x12:Z) := 2* x12. Definition P_id_isList (x12:Z) := 2* x12. Definition P_id_o := 3. Definition P_id___ (x12:Z) (x13:Z) := 1* x12 + 2* x13. Definition P_id_ok (x12:Z) := 1 + 1* x12. Definition P_id_isNePal (x12:Z) := 1* x12. Definition P_id_tt := 2. Definition P_id_i := 3. Definition P_id_nil := 1. Definition P_id_a := 1. Definition P_id_isNeList (x12:Z) := 2* x12. Definition P_id_u := 2. Lemma P_id_active_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_active x13 <= P_id_active x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_proper_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_proper x13 <= P_id_proper x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_isQid_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_isQid x13 <= P_id_isQid x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_and_monotonic : forall x12 x14 x13 x15, (0 <= x15)/\ (x15 <= x14) -> (0 <= x13)/\ (x13 <= x12) ->P_id_and x13 x15 <= P_id_and x12 x14. Proof. intros x15 x14 x13 x12. intros [H_1 H_0]. intros [H_3 H_2]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_mark_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_mark x13 <= P_id_mark x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_top_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_top x13 <= P_id_top x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_isPal_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_isPal x13 <= P_id_isPal x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_isList_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_isList x13 <= P_id_isList x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id____monotonic : forall x12 x14 x13 x15, (0 <= x15)/\ (x15 <= x14) -> (0 <= x13)/\ (x13 <= x12) ->P_id___ x13 x15 <= P_id___ x12 x14. Proof. intros x15 x14 x13 x12. intros [H_1 H_0]. intros [H_3 H_2]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_ok_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_ok x13 <= P_id_ok x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_isNePal_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_isNePal x13 <= P_id_isNePal x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_isNeList_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_isNeList x13 <= P_id_isNeList x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_active_bounded : forall x12, (0 <= x12) ->0 <= P_id_active x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_proper_bounded : forall x12, (0 <= x12) ->0 <= P_id_proper x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_isQid_bounded : forall x12, (0 <= x12) ->0 <= P_id_isQid x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_and_bounded : forall x12 x13, (0 <= x12) ->(0 <= x13) ->0 <= P_id_and x13 x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_e_bounded : 0 <= P_id_e . Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_mark_bounded : forall x12, (0 <= x12) ->0 <= P_id_mark x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_top_bounded : forall x12, (0 <= x12) ->0 <= P_id_top x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_isPal_bounded : forall x12, (0 <= x12) ->0 <= P_id_isPal x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_isList_bounded : forall x12, (0 <= x12) ->0 <= P_id_isList x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_o_bounded : 0 <= P_id_o . Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id____bounded : forall x12 x13, (0 <= x12) ->(0 <= x13) ->0 <= P_id___ x13 x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_ok_bounded : forall x12, (0 <= x12) ->0 <= P_id_ok x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_isNePal_bounded : forall x12, (0 <= x12) ->0 <= P_id_isNePal x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_tt_bounded : 0 <= P_id_tt . Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_i_bounded : 0 <= P_id_i . Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_nil_bounded : 0 <= P_id_nil . Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_a_bounded : 0 <= P_id_a . Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_isNeList_bounded : forall x12, (0 <= x12) ->0 <= P_id_isNeList x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_u_bounded : 0 <= P_id_u . Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Definition measure := InterpZ.measure 0 P_id_active P_id_proper P_id_isQid P_id_and P_id_e P_id_mark P_id_top P_id_isPal P_id_isList P_id_o P_id___ P_id_ok P_id_isNePal P_id_tt P_id_i P_id_nil P_id_a P_id_isNeList P_id_u. Lemma measure_equation : forall t, measure t = match t with | (algebra.Alg.Term algebra.F.id_active (x12::nil)) => P_id_active (measure x12) | (algebra.Alg.Term algebra.F.id_proper (x12::nil)) => P_id_proper (measure x12) | (algebra.Alg.Term algebra.F.id_isQid (x12::nil)) => P_id_isQid (measure x12) | (algebra.Alg.Term algebra.F.id_and (x13::x12::nil)) => P_id_and (measure x13) (measure x12) | (algebra.Alg.Term algebra.F.id_e nil) => P_id_e | (algebra.Alg.Term algebra.F.id_mark (x12::nil)) => P_id_mark (measure x12) | (algebra.Alg.Term algebra.F.id_top (x12::nil)) => P_id_top (measure x12) | (algebra.Alg.Term algebra.F.id_isPal (x12::nil)) => P_id_isPal (measure x12) | (algebra.Alg.Term algebra.F.id_isList (x12::nil)) => P_id_isList (measure x12) | (algebra.Alg.Term algebra.F.id_o nil) => P_id_o | (algebra.Alg.Term algebra.F.id___ (x13::x12::nil)) => P_id___ (measure x13) (measure x12) | (algebra.Alg.Term algebra.F.id_ok (x12::nil)) => P_id_ok (measure x12) | (algebra.Alg.Term algebra.F.id_isNePal (x12::nil)) => P_id_isNePal (measure x12) | (algebra.Alg.Term algebra.F.id_tt nil) => P_id_tt | (algebra.Alg.Term algebra.F.id_i nil) => P_id_i | (algebra.Alg.Term algebra.F.id_nil nil) => P_id_nil | (algebra.Alg.Term algebra.F.id_a nil) => P_id_a | (algebra.Alg.Term algebra.F.id_isNeList (x12::nil)) => P_id_isNeList (measure x12) | (algebra.Alg.Term algebra.F.id_u nil) => P_id_u | _ => 0 end. Proof. intros t;case t;intros ;apply refl_equal. Qed. Lemma measure_bounded : forall t, 0 <= measure t. Proof. unfold measure in |-*. apply InterpZ.measure_bounded; cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Ltac generate_pos_hyp := match goal with | H:context [measure ?x] |- _ => let v := fresh "v" in (let H := fresh "h" in (set (H:=measure_bounded x) in *;set (v:=measure x) in *; clearbody H;clearbody v)) | |- context [measure ?x] => let v := fresh "v" in (let H := fresh "h" in (set (H:=measure_bounded x) in *;set (v:=measure x) in *; clearbody H;clearbody v)) end . Lemma rules_monotonic : forall l r, (algebra.EQT.axiom R_xml_0_deep_rew.R_xml_0_rules r l) -> measure r <= measure l. Proof. intros l r H. fold measure in |-*. inversion H;clear H;subst;inversion H0;clear H0;subst; simpl algebra.EQT.T.apply_subst in |-*; repeat ( match goal with | |- context [measure (algebra.Alg.Term ?f ?t)] => rewrite (measure_equation (algebra.Alg.Term f t)) end );repeat (generate_pos_hyp ); cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma measure_star_monotonic : forall l r, (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) r l) ->measure r <= measure l. Proof. unfold measure in *. apply InterpZ.measure_star_monotonic. intros ;apply P_id_active_monotonic;assumption. intros ;apply P_id_proper_monotonic;assumption. intros ;apply P_id_isQid_monotonic;assumption. intros ;apply P_id_and_monotonic;assumption. intros ;apply P_id_mark_monotonic;assumption. intros ;apply P_id_top_monotonic;assumption. intros ;apply P_id_isPal_monotonic;assumption. intros ;apply P_id_isList_monotonic;assumption. intros ;apply P_id____monotonic;assumption. intros ;apply P_id_ok_monotonic;assumption. intros ;apply P_id_isNePal_monotonic;assumption. intros ;apply P_id_isNeList_monotonic;assumption. intros ;apply P_id_active_bounded;assumption. intros ;apply P_id_proper_bounded;assumption. intros ;apply P_id_isQid_bounded;assumption. intros ;apply P_id_and_bounded;assumption. intros ;apply P_id_e_bounded;assumption. intros ;apply P_id_mark_bounded;assumption. intros ;apply P_id_top_bounded;assumption. intros ;apply P_id_isPal_bounded;assumption. intros ;apply P_id_isList_bounded;assumption. intros ;apply P_id_o_bounded;assumption. intros ;apply P_id____bounded;assumption. intros ;apply P_id_ok_bounded;assumption. intros ;apply P_id_isNePal_bounded;assumption. intros ;apply P_id_tt_bounded;assumption. intros ;apply P_id_i_bounded;assumption. intros ;apply P_id_nil_bounded;assumption. intros ;apply P_id_a_bounded;assumption. intros ;apply P_id_isNeList_bounded;assumption. intros ;apply P_id_u_bounded;assumption. apply rules_monotonic. Qed. Definition P_id_ISQID (x12:Z) := 0. Definition P_id____hat_1 (x12:Z) (x13:Z) := 0. Definition P_id_TOP (x12:Z) := 0. Definition P_id_ISNEPAL (x12:Z) := 0. Definition P_id_AND (x12:Z) (x13:Z) := 0. Definition P_id_ISPAL (x12:Z) := 0. Definition P_id_ISNELIST (x12:Z) := 1* x12. Definition P_id_ACTIVE (x12:Z) := 0. Definition P_id_PROPER (x12:Z) := 0. Definition P_id_ISLIST (x12:Z) := 0. Lemma P_id_ISQID_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_ISQID x13 <= P_id_ISQID x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id____hat_1_monotonic : forall x12 x14 x13 x15, (0 <= x15)/\ (x15 <= x14) -> (0 <= x13)/\ (x13 <= x12) -> P_id____hat_1 x13 x15 <= P_id____hat_1 x12 x14. Proof. intros x15 x14 x13 x12. intros [H_1 H_0]. intros [H_3 H_2]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_TOP_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_TOP x13 <= P_id_TOP x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_ISNEPAL_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_ISNEPAL x13 <= P_id_ISNEPAL x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_AND_monotonic : forall x12 x14 x13 x15, (0 <= x15)/\ (x15 <= x14) -> (0 <= x13)/\ (x13 <= x12) ->P_id_AND x13 x15 <= P_id_AND x12 x14. Proof. intros x15 x14 x13 x12. intros [H_1 H_0]. intros [H_3 H_2]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_ISPAL_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_ISPAL x13 <= P_id_ISPAL x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_ISNELIST_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_ISNELIST x13 <= P_id_ISNELIST x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_ACTIVE_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_ACTIVE x13 <= P_id_ACTIVE x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_PROPER_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_PROPER x13 <= P_id_PROPER x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_ISLIST_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_ISLIST x13 <= P_id_ISLIST x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Definition marked_measure := InterpZ.marked_measure 0 P_id_active P_id_proper P_id_isQid P_id_and P_id_e P_id_mark P_id_top P_id_isPal P_id_isList P_id_o P_id___ P_id_ok P_id_isNePal P_id_tt P_id_i P_id_nil P_id_a P_id_isNeList P_id_u P_id_ISQID P_id____hat_1 P_id_TOP P_id_ISNEPAL P_id_AND P_id_ISPAL P_id_ISNELIST P_id_ACTIVE P_id_PROPER P_id_ISLIST. Lemma marked_measure_equation : forall t, marked_measure t = match t with | (algebra.Alg.Term algebra.F.id_isQid (x12::nil)) => P_id_ISQID (measure x12) | (algebra.Alg.Term algebra.F.id___ (x13:: x12::nil)) => P_id____hat_1 (measure x13) (measure x12) | (algebra.Alg.Term algebra.F.id_top (x12::nil)) => P_id_TOP (measure x12) | (algebra.Alg.Term algebra.F.id_isNePal (x12::nil)) => P_id_ISNEPAL (measure x12) | (algebra.Alg.Term algebra.F.id_and (x13:: x12::nil)) => P_id_AND (measure x13) (measure x12) | (algebra.Alg.Term algebra.F.id_isPal (x12::nil)) => P_id_ISPAL (measure x12) | (algebra.Alg.Term algebra.F.id_isNeList (x12::nil)) => P_id_ISNELIST (measure x12) | (algebra.Alg.Term algebra.F.id_active (x12::nil)) => P_id_ACTIVE (measure x12) | (algebra.Alg.Term algebra.F.id_proper (x12::nil)) => P_id_PROPER (measure x12) | (algebra.Alg.Term algebra.F.id_isList (x12::nil)) => P_id_ISLIST (measure x12) | _ => measure t end. Proof. reflexivity . Qed. Lemma marked_measure_star_monotonic : forall f l1 l2, (closure.refl_trans_clos (closure.one_step_list (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) ) l1 l2) -> marked_measure (algebra.Alg.Term f l1) <= marked_measure (algebra.Alg.Term f l2). Proof. unfold marked_measure in *. apply InterpZ.marked_measure_star_monotonic. intros ;apply P_id_active_monotonic;assumption. intros ;apply P_id_proper_monotonic;assumption. intros ;apply P_id_isQid_monotonic;assumption. intros ;apply P_id_and_monotonic;assumption. intros ;apply P_id_mark_monotonic;assumption. intros ;apply P_id_top_monotonic;assumption. intros ;apply P_id_isPal_monotonic;assumption. intros ;apply P_id_isList_monotonic;assumption. intros ;apply P_id____monotonic;assumption. intros ;apply P_id_ok_monotonic;assumption. intros ;apply P_id_isNePal_monotonic;assumption. intros ;apply P_id_isNeList_monotonic;assumption. intros ;apply P_id_active_bounded;assumption. intros ;apply P_id_proper_bounded;assumption. intros ;apply P_id_isQid_bounded;assumption. intros ;apply P_id_and_bounded;assumption. intros ;apply P_id_e_bounded;assumption. intros ;apply P_id_mark_bounded;assumption. intros ;apply P_id_top_bounded;assumption. intros ;apply P_id_isPal_bounded;assumption. intros ;apply P_id_isList_bounded;assumption. intros ;apply P_id_o_bounded;assumption. intros ;apply P_id____bounded;assumption. intros ;apply P_id_ok_bounded;assumption. intros ;apply P_id_isNePal_bounded;assumption. intros ;apply P_id_tt_bounded;assumption. intros ;apply P_id_i_bounded;assumption. intros ;apply P_id_nil_bounded;assumption. intros ;apply P_id_a_bounded;assumption. intros ;apply P_id_isNeList_bounded;assumption. intros ;apply P_id_u_bounded;assumption. apply rules_monotonic. intros ;apply P_id_ISQID_monotonic;assumption. intros ;apply P_id____hat_1_monotonic;assumption. intros ;apply P_id_TOP_monotonic;assumption. intros ;apply P_id_ISNEPAL_monotonic;assumption. intros ;apply P_id_AND_monotonic;assumption. intros ;apply P_id_ISPAL_monotonic;assumption. intros ;apply P_id_ISNELIST_monotonic;assumption. intros ;apply P_id_ACTIVE_monotonic;assumption. intros ;apply P_id_PROPER_monotonic;assumption. intros ;apply P_id_ISLIST_monotonic;assumption. Qed. Ltac rewrite_and_unfold := do 2 (rewrite marked_measure_equation); repeat ( match goal with | |- context [measure (algebra.Alg.Term ?f ?t)] => rewrite (measure_equation (algebra.Alg.Term f t)) | H:context [measure (algebra.Alg.Term ?f ?t)] |- _ => rewrite (measure_equation (algebra.Alg.Term f t)) in H|- end ). Lemma wf : well_founded WF_DP_R_xml_0.DP_R_xml_0_scc_4. Proof. intros x. apply well_founded_ind with (R:=fun x y => (Zwf.Zwf 0) (marked_measure x) (marked_measure y)). apply Inverse_Image.wf_inverse_image with (B:=Z). apply Zwf.Zwf_well_founded. clear x. intros x IHx. repeat ( constructor;inversion 1;subst; full_prove_ineq algebra.Alg.Term ltac:(algebra.Alg_ext.find_replacement ) algebra.EQT_ext.one_step_list_refl_trans_clos marked_measure marked_measure_star_monotonic (Zwf.Zwf 0) (interp.o_Z 0) ltac:(fun _ => R_xml_0_deep_rew.impossible_star_reduction_R_xml_0 ) ltac:(fun _ => rewrite_and_unfold ) ltac:(fun _ => generate_pos_hyp ) ltac:(fun _ => cbv beta iota zeta delta - [Zplus Zmult Zle Zlt] in * ; try (constructor)) IHx ). Qed. End WF_DP_R_xml_0_scc_4. Definition wf_DP_R_xml_0_scc_4 := WF_DP_R_xml_0_scc_4.wf. Lemma acc_DP_R_xml_0_scc_4 : forall x y, (DP_R_xml_0_scc_4 x y) ->Acc WF_R_xml_0_deep_rew.DP_R_xml_0 x. Proof. intros x. pattern x. apply (@Acc_ind _ DP_R_xml_0_scc_4). intros x' _ Hrec y h. inversion h;clear h;subst; constructor;intros _y _h;inversion _h;clear _h;subst; (eapply Hrec;econstructor eassumption)|| ((R_xml_0_deep_rew.impossible_star_reduction_R_xml_0 )|| (eapply Hrec;econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))). apply wf_DP_R_xml_0_scc_4. Qed. Inductive DP_R_xml_0_scc_5 : algebra.Alg.term ->algebra.Alg.term ->Prop := (* *) | DP_R_xml_0_scc_5_0 : forall x12 x1, (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) (algebra.Alg.Term algebra.F.id_ok (x1::nil)) x12) -> DP_R_xml_0_scc_5 (algebra.Alg.Term algebra.F.id_isList (x1::nil)) (algebra.Alg.Term algebra.F.id_isList (x12::nil)) . Module WF_DP_R_xml_0_scc_5. Open Scope Z_scope. Import ring_extention. Notation Local "a <= b" := (Zle a b). Notation Local "a < b" := (Zlt a b). Definition P_id_active (x12:Z) := 1* x12. Definition P_id_proper (x12:Z) := 2* x12. Definition P_id_isQid (x12:Z) := 3 + 2* x12. Definition P_id_and (x12:Z) (x13:Z) := 2* x13. Definition P_id_e := 1. Definition P_id_mark (x12:Z) := 0. Definition P_id_top (x12:Z) := 0. Definition P_id_isPal (x12:Z) := 2* x12. Definition P_id_isList (x12:Z) := 2* x12. Definition P_id_o := 3. Definition P_id___ (x12:Z) (x13:Z) := 1* x12 + 2* x13. Definition P_id_ok (x12:Z) := 1 + 1* x12. Definition P_id_isNePal (x12:Z) := 1* x12. Definition P_id_tt := 2. Definition P_id_i := 3. Definition P_id_nil := 1. Definition P_id_a := 1. Definition P_id_isNeList (x12:Z) := 2* x12. Definition P_id_u := 2. Lemma P_id_active_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_active x13 <= P_id_active x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_proper_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_proper x13 <= P_id_proper x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_isQid_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_isQid x13 <= P_id_isQid x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_and_monotonic : forall x12 x14 x13 x15, (0 <= x15)/\ (x15 <= x14) -> (0 <= x13)/\ (x13 <= x12) ->P_id_and x13 x15 <= P_id_and x12 x14. Proof. intros x15 x14 x13 x12. intros [H_1 H_0]. intros [H_3 H_2]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_mark_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_mark x13 <= P_id_mark x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_top_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_top x13 <= P_id_top x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_isPal_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_isPal x13 <= P_id_isPal x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_isList_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_isList x13 <= P_id_isList x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id____monotonic : forall x12 x14 x13 x15, (0 <= x15)/\ (x15 <= x14) -> (0 <= x13)/\ (x13 <= x12) ->P_id___ x13 x15 <= P_id___ x12 x14. Proof. intros x15 x14 x13 x12. intros [H_1 H_0]. intros [H_3 H_2]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_ok_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_ok x13 <= P_id_ok x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_isNePal_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_isNePal x13 <= P_id_isNePal x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_isNeList_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_isNeList x13 <= P_id_isNeList x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_active_bounded : forall x12, (0 <= x12) ->0 <= P_id_active x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_proper_bounded : forall x12, (0 <= x12) ->0 <= P_id_proper x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_isQid_bounded : forall x12, (0 <= x12) ->0 <= P_id_isQid x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_and_bounded : forall x12 x13, (0 <= x12) ->(0 <= x13) ->0 <= P_id_and x13 x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_e_bounded : 0 <= P_id_e . Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_mark_bounded : forall x12, (0 <= x12) ->0 <= P_id_mark x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_top_bounded : forall x12, (0 <= x12) ->0 <= P_id_top x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_isPal_bounded : forall x12, (0 <= x12) ->0 <= P_id_isPal x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_isList_bounded : forall x12, (0 <= x12) ->0 <= P_id_isList x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_o_bounded : 0 <= P_id_o . Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id____bounded : forall x12 x13, (0 <= x12) ->(0 <= x13) ->0 <= P_id___ x13 x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_ok_bounded : forall x12, (0 <= x12) ->0 <= P_id_ok x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_isNePal_bounded : forall x12, (0 <= x12) ->0 <= P_id_isNePal x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_tt_bounded : 0 <= P_id_tt . Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_i_bounded : 0 <= P_id_i . Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_nil_bounded : 0 <= P_id_nil . Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_a_bounded : 0 <= P_id_a . Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_isNeList_bounded : forall x12, (0 <= x12) ->0 <= P_id_isNeList x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_u_bounded : 0 <= P_id_u . Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Definition measure := InterpZ.measure 0 P_id_active P_id_proper P_id_isQid P_id_and P_id_e P_id_mark P_id_top P_id_isPal P_id_isList P_id_o P_id___ P_id_ok P_id_isNePal P_id_tt P_id_i P_id_nil P_id_a P_id_isNeList P_id_u. Lemma measure_equation : forall t, measure t = match t with | (algebra.Alg.Term algebra.F.id_active (x12::nil)) => P_id_active (measure x12) | (algebra.Alg.Term algebra.F.id_proper (x12::nil)) => P_id_proper (measure x12) | (algebra.Alg.Term algebra.F.id_isQid (x12::nil)) => P_id_isQid (measure x12) | (algebra.Alg.Term algebra.F.id_and (x13::x12::nil)) => P_id_and (measure x13) (measure x12) | (algebra.Alg.Term algebra.F.id_e nil) => P_id_e | (algebra.Alg.Term algebra.F.id_mark (x12::nil)) => P_id_mark (measure x12) | (algebra.Alg.Term algebra.F.id_top (x12::nil)) => P_id_top (measure x12) | (algebra.Alg.Term algebra.F.id_isPal (x12::nil)) => P_id_isPal (measure x12) | (algebra.Alg.Term algebra.F.id_isList (x12::nil)) => P_id_isList (measure x12) | (algebra.Alg.Term algebra.F.id_o nil) => P_id_o | (algebra.Alg.Term algebra.F.id___ (x13::x12::nil)) => P_id___ (measure x13) (measure x12) | (algebra.Alg.Term algebra.F.id_ok (x12::nil)) => P_id_ok (measure x12) | (algebra.Alg.Term algebra.F.id_isNePal (x12::nil)) => P_id_isNePal (measure x12) | (algebra.Alg.Term algebra.F.id_tt nil) => P_id_tt | (algebra.Alg.Term algebra.F.id_i nil) => P_id_i | (algebra.Alg.Term algebra.F.id_nil nil) => P_id_nil | (algebra.Alg.Term algebra.F.id_a nil) => P_id_a | (algebra.Alg.Term algebra.F.id_isNeList (x12::nil)) => P_id_isNeList (measure x12) | (algebra.Alg.Term algebra.F.id_u nil) => P_id_u | _ => 0 end. Proof. intros t;case t;intros ;apply refl_equal. Qed. Lemma measure_bounded : forall t, 0 <= measure t. Proof. unfold measure in |-*. apply InterpZ.measure_bounded; cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Ltac generate_pos_hyp := match goal with | H:context [measure ?x] |- _ => let v := fresh "v" in (let H := fresh "h" in (set (H:=measure_bounded x) in *;set (v:=measure x) in *; clearbody H;clearbody v)) | |- context [measure ?x] => let v := fresh "v" in (let H := fresh "h" in (set (H:=measure_bounded x) in *;set (v:=measure x) in *; clearbody H;clearbody v)) end . Lemma rules_monotonic : forall l r, (algebra.EQT.axiom R_xml_0_deep_rew.R_xml_0_rules r l) -> measure r <= measure l. Proof. intros l r H. fold measure in |-*. inversion H;clear H;subst;inversion H0;clear H0;subst; simpl algebra.EQT.T.apply_subst in |-*; repeat ( match goal with | |- context [measure (algebra.Alg.Term ?f ?t)] => rewrite (measure_equation (algebra.Alg.Term f t)) end );repeat (generate_pos_hyp ); cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma measure_star_monotonic : forall l r, (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) r l) ->measure r <= measure l. Proof. unfold measure in *. apply InterpZ.measure_star_monotonic. intros ;apply P_id_active_monotonic;assumption. intros ;apply P_id_proper_monotonic;assumption. intros ;apply P_id_isQid_monotonic;assumption. intros ;apply P_id_and_monotonic;assumption. intros ;apply P_id_mark_monotonic;assumption. intros ;apply P_id_top_monotonic;assumption. intros ;apply P_id_isPal_monotonic;assumption. intros ;apply P_id_isList_monotonic;assumption. intros ;apply P_id____monotonic;assumption. intros ;apply P_id_ok_monotonic;assumption. intros ;apply P_id_isNePal_monotonic;assumption. intros ;apply P_id_isNeList_monotonic;assumption. intros ;apply P_id_active_bounded;assumption. intros ;apply P_id_proper_bounded;assumption. intros ;apply P_id_isQid_bounded;assumption. intros ;apply P_id_and_bounded;assumption. intros ;apply P_id_e_bounded;assumption. intros ;apply P_id_mark_bounded;assumption. intros ;apply P_id_top_bounded;assumption. intros ;apply P_id_isPal_bounded;assumption. intros ;apply P_id_isList_bounded;assumption. intros ;apply P_id_o_bounded;assumption. intros ;apply P_id____bounded;assumption. intros ;apply P_id_ok_bounded;assumption. intros ;apply P_id_isNePal_bounded;assumption. intros ;apply P_id_tt_bounded;assumption. intros ;apply P_id_i_bounded;assumption. intros ;apply P_id_nil_bounded;assumption. intros ;apply P_id_a_bounded;assumption. intros ;apply P_id_isNeList_bounded;assumption. intros ;apply P_id_u_bounded;assumption. apply rules_monotonic. Qed. Definition P_id_ISQID (x12:Z) := 0. Definition P_id____hat_1 (x12:Z) (x13:Z) := 0. Definition P_id_TOP (x12:Z) := 0. Definition P_id_ISNEPAL (x12:Z) := 0. Definition P_id_AND (x12:Z) (x13:Z) := 0. Definition P_id_ISPAL (x12:Z) := 0. Definition P_id_ISNELIST (x12:Z) := 0. Definition P_id_ACTIVE (x12:Z) := 0. Definition P_id_PROPER (x12:Z) := 0. Definition P_id_ISLIST (x12:Z) := 1* x12. Lemma P_id_ISQID_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_ISQID x13 <= P_id_ISQID x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id____hat_1_monotonic : forall x12 x14 x13 x15, (0 <= x15)/\ (x15 <= x14) -> (0 <= x13)/\ (x13 <= x12) -> P_id____hat_1 x13 x15 <= P_id____hat_1 x12 x14. Proof. intros x15 x14 x13 x12. intros [H_1 H_0]. intros [H_3 H_2]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_TOP_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_TOP x13 <= P_id_TOP x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_ISNEPAL_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_ISNEPAL x13 <= P_id_ISNEPAL x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_AND_monotonic : forall x12 x14 x13 x15, (0 <= x15)/\ (x15 <= x14) -> (0 <= x13)/\ (x13 <= x12) ->P_id_AND x13 x15 <= P_id_AND x12 x14. Proof. intros x15 x14 x13 x12. intros [H_1 H_0]. intros [H_3 H_2]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_ISPAL_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_ISPAL x13 <= P_id_ISPAL x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_ISNELIST_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_ISNELIST x13 <= P_id_ISNELIST x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_ACTIVE_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_ACTIVE x13 <= P_id_ACTIVE x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_PROPER_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_PROPER x13 <= P_id_PROPER x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_ISLIST_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_ISLIST x13 <= P_id_ISLIST x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Definition marked_measure := InterpZ.marked_measure 0 P_id_active P_id_proper P_id_isQid P_id_and P_id_e P_id_mark P_id_top P_id_isPal P_id_isList P_id_o P_id___ P_id_ok P_id_isNePal P_id_tt P_id_i P_id_nil P_id_a P_id_isNeList P_id_u P_id_ISQID P_id____hat_1 P_id_TOP P_id_ISNEPAL P_id_AND P_id_ISPAL P_id_ISNELIST P_id_ACTIVE P_id_PROPER P_id_ISLIST. Lemma marked_measure_equation : forall t, marked_measure t = match t with | (algebra.Alg.Term algebra.F.id_isQid (x12::nil)) => P_id_ISQID (measure x12) | (algebra.Alg.Term algebra.F.id___ (x13:: x12::nil)) => P_id____hat_1 (measure x13) (measure x12) | (algebra.Alg.Term algebra.F.id_top (x12::nil)) => P_id_TOP (measure x12) | (algebra.Alg.Term algebra.F.id_isNePal (x12::nil)) => P_id_ISNEPAL (measure x12) | (algebra.Alg.Term algebra.F.id_and (x13:: x12::nil)) => P_id_AND (measure x13) (measure x12) | (algebra.Alg.Term algebra.F.id_isPal (x12::nil)) => P_id_ISPAL (measure x12) | (algebra.Alg.Term algebra.F.id_isNeList (x12::nil)) => P_id_ISNELIST (measure x12) | (algebra.Alg.Term algebra.F.id_active (x12::nil)) => P_id_ACTIVE (measure x12) | (algebra.Alg.Term algebra.F.id_proper (x12::nil)) => P_id_PROPER (measure x12) | (algebra.Alg.Term algebra.F.id_isList (x12::nil)) => P_id_ISLIST (measure x12) | _ => measure t end. Proof. reflexivity . Qed. Lemma marked_measure_star_monotonic : forall f l1 l2, (closure.refl_trans_clos (closure.one_step_list (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) ) l1 l2) -> marked_measure (algebra.Alg.Term f l1) <= marked_measure (algebra.Alg.Term f l2). Proof. unfold marked_measure in *. apply InterpZ.marked_measure_star_monotonic. intros ;apply P_id_active_monotonic;assumption. intros ;apply P_id_proper_monotonic;assumption. intros ;apply P_id_isQid_monotonic;assumption. intros ;apply P_id_and_monotonic;assumption. intros ;apply P_id_mark_monotonic;assumption. intros ;apply P_id_top_monotonic;assumption. intros ;apply P_id_isPal_monotonic;assumption. intros ;apply P_id_isList_monotonic;assumption. intros ;apply P_id____monotonic;assumption. intros ;apply P_id_ok_monotonic;assumption. intros ;apply P_id_isNePal_monotonic;assumption. intros ;apply P_id_isNeList_monotonic;assumption. intros ;apply P_id_active_bounded;assumption. intros ;apply P_id_proper_bounded;assumption. intros ;apply P_id_isQid_bounded;assumption. intros ;apply P_id_and_bounded;assumption. intros ;apply P_id_e_bounded;assumption. intros ;apply P_id_mark_bounded;assumption. intros ;apply P_id_top_bounded;assumption. intros ;apply P_id_isPal_bounded;assumption. intros ;apply P_id_isList_bounded;assumption. intros ;apply P_id_o_bounded;assumption. intros ;apply P_id____bounded;assumption. intros ;apply P_id_ok_bounded;assumption. intros ;apply P_id_isNePal_bounded;assumption. intros ;apply P_id_tt_bounded;assumption. intros ;apply P_id_i_bounded;assumption. intros ;apply P_id_nil_bounded;assumption. intros ;apply P_id_a_bounded;assumption. intros ;apply P_id_isNeList_bounded;assumption. intros ;apply P_id_u_bounded;assumption. apply rules_monotonic. intros ;apply P_id_ISQID_monotonic;assumption. intros ;apply P_id____hat_1_monotonic;assumption. intros ;apply P_id_TOP_monotonic;assumption. intros ;apply P_id_ISNEPAL_monotonic;assumption. intros ;apply P_id_AND_monotonic;assumption. intros ;apply P_id_ISPAL_monotonic;assumption. intros ;apply P_id_ISNELIST_monotonic;assumption. intros ;apply P_id_ACTIVE_monotonic;assumption. intros ;apply P_id_PROPER_monotonic;assumption. intros ;apply P_id_ISLIST_monotonic;assumption. Qed. Ltac rewrite_and_unfold := do 2 (rewrite marked_measure_equation); repeat ( match goal with | |- context [measure (algebra.Alg.Term ?f ?t)] => rewrite (measure_equation (algebra.Alg.Term f t)) | H:context [measure (algebra.Alg.Term ?f ?t)] |- _ => rewrite (measure_equation (algebra.Alg.Term f t)) in H|- end ). Lemma wf : well_founded WF_DP_R_xml_0.DP_R_xml_0_scc_5. Proof. intros x. apply well_founded_ind with (R:=fun x y => (Zwf.Zwf 0) (marked_measure x) (marked_measure y)). apply Inverse_Image.wf_inverse_image with (B:=Z). apply Zwf.Zwf_well_founded. clear x. intros x IHx. repeat ( constructor;inversion 1;subst; full_prove_ineq algebra.Alg.Term ltac:(algebra.Alg_ext.find_replacement ) algebra.EQT_ext.one_step_list_refl_trans_clos marked_measure marked_measure_star_monotonic (Zwf.Zwf 0) (interp.o_Z 0) ltac:(fun _ => R_xml_0_deep_rew.impossible_star_reduction_R_xml_0 ) ltac:(fun _ => rewrite_and_unfold ) ltac:(fun _ => generate_pos_hyp ) ltac:(fun _ => cbv beta iota zeta delta - [Zplus Zmult Zle Zlt] in * ; try (constructor)) IHx ). Qed. End WF_DP_R_xml_0_scc_5. Definition wf_DP_R_xml_0_scc_5 := WF_DP_R_xml_0_scc_5.wf. Lemma acc_DP_R_xml_0_scc_5 : forall x y, (DP_R_xml_0_scc_5 x y) ->Acc WF_R_xml_0_deep_rew.DP_R_xml_0 x. Proof. intros x. pattern x. apply (@Acc_ind _ DP_R_xml_0_scc_5). intros x' _ Hrec y h. inversion h;clear h;subst; constructor;intros _y _h;inversion _h;clear _h;subst; (eapply Hrec;econstructor eassumption)|| ((R_xml_0_deep_rew.impossible_star_reduction_R_xml_0 )|| (eapply Hrec;econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))). apply wf_DP_R_xml_0_scc_5. Qed. Inductive DP_R_xml_0_non_scc_6 : algebra.Alg.term ->algebra.Alg.term ->Prop := (* *) | DP_R_xml_0_non_scc_6_0 : forall x12 x1, (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) (algebra.Alg.Term algebra.F.id_isPal (x1::nil)) x12) -> DP_R_xml_0_non_scc_6 (algebra.Alg.Term algebra.F.id_isPal ((algebra.Alg.Term algebra.F.id_proper (x1::nil))::nil)) (algebra.Alg.Term algebra.F.id_proper (x12::nil)) . Lemma acc_DP_R_xml_0_non_scc_6 : forall x y, (DP_R_xml_0_non_scc_6 x y) ->Acc WF_R_xml_0_deep_rew.DP_R_xml_0 x. Proof. intros x y h. inversion h;clear h;subst; constructor;intros _y _h;inversion _h;clear _h;subst; (eapply acc_DP_R_xml_0_scc_1; econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))|| ((R_xml_0_deep_rew.impossible_star_reduction_R_xml_0 )|| (eapply Hrec;econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))). Qed. Inductive DP_R_xml_0_non_scc_7 : algebra.Alg.term ->algebra.Alg.term ->Prop := (* *) | DP_R_xml_0_non_scc_7_0 : forall x12 x1, (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) (algebra.Alg.Term algebra.F.id_isNePal (x1::nil)) x12) -> DP_R_xml_0_non_scc_7 (algebra.Alg.Term algebra.F.id_isNePal ((algebra.Alg.Term algebra.F.id_proper (x1::nil))::nil)) (algebra.Alg.Term algebra.F.id_proper (x12::nil)) . Lemma acc_DP_R_xml_0_non_scc_7 : forall x y, (DP_R_xml_0_non_scc_7 x y) ->Acc WF_R_xml_0_deep_rew.DP_R_xml_0 x. Proof. intros x y h. inversion h;clear h;subst; constructor;intros _y _h;inversion _h;clear _h;subst; (eapply acc_DP_R_xml_0_scc_2; econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))|| ((R_xml_0_deep_rew.impossible_star_reduction_R_xml_0 )|| (eapply Hrec;econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))). Qed. Inductive DP_R_xml_0_non_scc_8 : algebra.Alg.term ->algebra.Alg.term ->Prop := (* *) | DP_R_xml_0_non_scc_8_0 : forall x12 x1, (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) (algebra.Alg.Term algebra.F.id_isQid (x1::nil)) x12) -> DP_R_xml_0_non_scc_8 (algebra.Alg.Term algebra.F.id_isQid ((algebra.Alg.Term algebra.F.id_proper (x1::nil))::nil)) (algebra.Alg.Term algebra.F.id_proper (x12::nil)) . Lemma acc_DP_R_xml_0_non_scc_8 : forall x y, (DP_R_xml_0_non_scc_8 x y) ->Acc WF_R_xml_0_deep_rew.DP_R_xml_0 x. Proof. intros x y h. inversion h;clear h;subst; constructor;intros _y _h;inversion _h;clear _h;subst; (eapply acc_DP_R_xml_0_scc_3; econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))|| ((R_xml_0_deep_rew.impossible_star_reduction_R_xml_0 )|| (eapply Hrec;econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))). Qed. Inductive DP_R_xml_0_non_scc_9 : algebra.Alg.term ->algebra.Alg.term ->Prop := (* *) | DP_R_xml_0_non_scc_9_0 : forall x12 x1, (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) (algebra.Alg.Term algebra.F.id_isNeList (x1::nil)) x12) -> DP_R_xml_0_non_scc_9 (algebra.Alg.Term algebra.F.id_isNeList ((algebra.Alg.Term algebra.F.id_proper (x1::nil))::nil)) (algebra.Alg.Term algebra.F.id_proper (x12::nil)) . Lemma acc_DP_R_xml_0_non_scc_9 : forall x y, (DP_R_xml_0_non_scc_9 x y) ->Acc WF_R_xml_0_deep_rew.DP_R_xml_0 x. Proof. intros x y h. inversion h;clear h;subst; constructor;intros _y _h;inversion _h;clear _h;subst; (eapply acc_DP_R_xml_0_scc_4; econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))|| ((R_xml_0_deep_rew.impossible_star_reduction_R_xml_0 )|| (eapply Hrec;econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))). Qed. Inductive DP_R_xml_0_non_scc_10 : algebra.Alg.term ->algebra.Alg.term ->Prop := (* *) | DP_R_xml_0_non_scc_10_0 : forall x12 x1, (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) (algebra.Alg.Term algebra.F.id_isList (x1::nil)) x12) -> DP_R_xml_0_non_scc_10 (algebra.Alg.Term algebra.F.id_isList ((algebra.Alg.Term algebra.F.id_proper (x1::nil))::nil)) (algebra.Alg.Term algebra.F.id_proper (x12::nil)) . Lemma acc_DP_R_xml_0_non_scc_10 : forall x y, (DP_R_xml_0_non_scc_10 x y) ->Acc WF_R_xml_0_deep_rew.DP_R_xml_0 x. Proof. intros x y h. inversion h;clear h;subst; constructor;intros _y _h;inversion _h;clear _h;subst; (eapply acc_DP_R_xml_0_scc_5; econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))|| ((R_xml_0_deep_rew.impossible_star_reduction_R_xml_0 )|| (eapply Hrec;econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))). Qed. Inductive DP_R_xml_0_scc_11 : algebra.Alg.term ->algebra.Alg.term ->Prop := (* *) | DP_R_xml_0_scc_11_0 : forall x12 x10 x9 x13, (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) (algebra.Alg.Term algebra.F.id_ok (x9::nil)) x13) -> (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) (algebra.Alg.Term algebra.F.id_ok (x10::nil)) x12) -> DP_R_xml_0_scc_11 (algebra.Alg.Term algebra.F.id_and (x9::x10::nil)) (algebra.Alg.Term algebra.F.id_and (x13::x12::nil)) (* *) | DP_R_xml_0_scc_11_1 : forall x12 x10 x9 x13, (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) (algebra.Alg.Term algebra.F.id_mark (x9::nil)) x13) -> (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) x10 x12) -> DP_R_xml_0_scc_11 (algebra.Alg.Term algebra.F.id_and (x9::x10::nil)) (algebra.Alg.Term algebra.F.id_and (x13::x12::nil)) . Module WF_DP_R_xml_0_scc_11. Inductive DP_R_xml_0_scc_11_large : algebra.Alg.term ->algebra.Alg.term ->Prop := (* *) | DP_R_xml_0_scc_11_large_0 : forall x12 x10 x9 x13, (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) (algebra.Alg.Term algebra.F.id_mark (x9::nil)) x13) -> (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) x10 x12) -> DP_R_xml_0_scc_11_large (algebra.Alg.Term algebra.F.id_and (x9:: x10::nil)) (algebra.Alg.Term algebra.F.id_and (x13::x12::nil)) . Inductive DP_R_xml_0_scc_11_strict : algebra.Alg.term ->algebra.Alg.term ->Prop := (* *) | DP_R_xml_0_scc_11_strict_0 : forall x12 x10 x9 x13, (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) (algebra.Alg.Term algebra.F.id_ok (x9::nil)) x13) -> (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) (algebra.Alg.Term algebra.F.id_ok (x10::nil)) x12) -> DP_R_xml_0_scc_11_strict (algebra.Alg.Term algebra.F.id_and (x9:: x10::nil)) (algebra.Alg.Term algebra.F.id_and (x13::x12::nil)) . Module WF_DP_R_xml_0_scc_11_large. Open Scope Z_scope. Import ring_extention. Notation Local "a <= b" := (Zle a b). Notation Local "a < b" := (Zlt a b). Definition P_id_active (x12:Z) := 1 + 1* x12. Definition P_id_proper (x12:Z) := 0. Definition P_id_isQid (x12:Z) := 0. Definition P_id_and (x12:Z) (x13:Z) := 1* x12 + 1* x13. Definition P_id_e := 0. Definition P_id_mark (x12:Z) := 1 + 1* x12. Definition P_id_top (x12:Z) := 0. Definition P_id_isPal (x12:Z) := 0. Definition P_id_isList (x12:Z) := 0. Definition P_id_o := 0. Definition P_id___ (x12:Z) (x13:Z) := 1* x12 + 1* x13. Definition P_id_ok (x12:Z) := 0. Definition P_id_isNePal (x12:Z) := 0. Definition P_id_tt := 0. Definition P_id_i := 0. Definition P_id_nil := 0. Definition P_id_a := 0. Definition P_id_isNeList (x12:Z) := 0. Definition P_id_u := 0. Lemma P_id_active_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_active x13 <= P_id_active x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_proper_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_proper x13 <= P_id_proper x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_isQid_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_isQid x13 <= P_id_isQid x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_and_monotonic : forall x12 x14 x13 x15, (0 <= x15)/\ (x15 <= x14) -> (0 <= x13)/\ (x13 <= x12) ->P_id_and x13 x15 <= P_id_and x12 x14. Proof. intros x15 x14 x13 x12. intros [H_1 H_0]. intros [H_3 H_2]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_mark_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_mark x13 <= P_id_mark x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_top_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_top x13 <= P_id_top x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_isPal_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_isPal x13 <= P_id_isPal x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_isList_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_isList x13 <= P_id_isList x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id____monotonic : forall x12 x14 x13 x15, (0 <= x15)/\ (x15 <= x14) -> (0 <= x13)/\ (x13 <= x12) ->P_id___ x13 x15 <= P_id___ x12 x14. Proof. intros x15 x14 x13 x12. intros [H_1 H_0]. intros [H_3 H_2]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_ok_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_ok x13 <= P_id_ok x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_isNePal_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_isNePal x13 <= P_id_isNePal x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_isNeList_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_isNeList x13 <= P_id_isNeList x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_active_bounded : forall x12, (0 <= x12) ->0 <= P_id_active x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_proper_bounded : forall x12, (0 <= x12) ->0 <= P_id_proper x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_isQid_bounded : forall x12, (0 <= x12) ->0 <= P_id_isQid x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_and_bounded : forall x12 x13, (0 <= x12) ->(0 <= x13) ->0 <= P_id_and x13 x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_e_bounded : 0 <= P_id_e . Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_mark_bounded : forall x12, (0 <= x12) ->0 <= P_id_mark x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_top_bounded : forall x12, (0 <= x12) ->0 <= P_id_top x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_isPal_bounded : forall x12, (0 <= x12) ->0 <= P_id_isPal x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_isList_bounded : forall x12, (0 <= x12) ->0 <= P_id_isList x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_o_bounded : 0 <= P_id_o . Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id____bounded : forall x12 x13, (0 <= x12) ->(0 <= x13) ->0 <= P_id___ x13 x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_ok_bounded : forall x12, (0 <= x12) ->0 <= P_id_ok x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_isNePal_bounded : forall x12, (0 <= x12) ->0 <= P_id_isNePal x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_tt_bounded : 0 <= P_id_tt . Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_i_bounded : 0 <= P_id_i . Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_nil_bounded : 0 <= P_id_nil . Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_a_bounded : 0 <= P_id_a . Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_isNeList_bounded : forall x12, (0 <= x12) ->0 <= P_id_isNeList x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_u_bounded : 0 <= P_id_u . Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Definition measure := InterpZ.measure 0 P_id_active P_id_proper P_id_isQid P_id_and P_id_e P_id_mark P_id_top P_id_isPal P_id_isList P_id_o P_id___ P_id_ok P_id_isNePal P_id_tt P_id_i P_id_nil P_id_a P_id_isNeList P_id_u. Lemma measure_equation : forall t, measure t = match t with | (algebra.Alg.Term algebra.F.id_active (x12::nil)) => P_id_active (measure x12) | (algebra.Alg.Term algebra.F.id_proper (x12::nil)) => P_id_proper (measure x12) | (algebra.Alg.Term algebra.F.id_isQid (x12::nil)) => P_id_isQid (measure x12) | (algebra.Alg.Term algebra.F.id_and (x13::x12::nil)) => P_id_and (measure x13) (measure x12) | (algebra.Alg.Term algebra.F.id_e nil) => P_id_e | (algebra.Alg.Term algebra.F.id_mark (x12::nil)) => P_id_mark (measure x12) | (algebra.Alg.Term algebra.F.id_top (x12::nil)) => P_id_top (measure x12) | (algebra.Alg.Term algebra.F.id_isPal (x12::nil)) => P_id_isPal (measure x12) | (algebra.Alg.Term algebra.F.id_isList (x12::nil)) => P_id_isList (measure x12) | (algebra.Alg.Term algebra.F.id_o nil) => P_id_o | (algebra.Alg.Term algebra.F.id___ (x13::x12::nil)) => P_id___ (measure x13) (measure x12) | (algebra.Alg.Term algebra.F.id_ok (x12::nil)) => P_id_ok (measure x12) | (algebra.Alg.Term algebra.F.id_isNePal (x12::nil)) => P_id_isNePal (measure x12) | (algebra.Alg.Term algebra.F.id_tt nil) => P_id_tt | (algebra.Alg.Term algebra.F.id_i nil) => P_id_i | (algebra.Alg.Term algebra.F.id_nil nil) => P_id_nil | (algebra.Alg.Term algebra.F.id_a nil) => P_id_a | (algebra.Alg.Term algebra.F.id_isNeList (x12::nil)) => P_id_isNeList (measure x12) | (algebra.Alg.Term algebra.F.id_u nil) => P_id_u | _ => 0 end. Proof. intros t;case t;intros ;apply refl_equal. Qed. Lemma measure_bounded : forall t, 0 <= measure t. Proof. unfold measure in |-*. apply InterpZ.measure_bounded; cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Ltac generate_pos_hyp := match goal with | H:context [measure ?x] |- _ => let v := fresh "v" in (let H := fresh "h" in (set (H:=measure_bounded x) in *;set (v:=measure x) in *; clearbody H;clearbody v)) | |- context [measure ?x] => let v := fresh "v" in (let H := fresh "h" in (set (H:=measure_bounded x) in *;set (v:=measure x) in *; clearbody H;clearbody v)) end . Lemma rules_monotonic : forall l r, (algebra.EQT.axiom R_xml_0_deep_rew.R_xml_0_rules r l) -> measure r <= measure l. Proof. intros l r H. fold measure in |-*. inversion H;clear H;subst;inversion H0;clear H0;subst; simpl algebra.EQT.T.apply_subst in |-*; repeat ( match goal with | |- context [measure (algebra.Alg.Term ?f ?t)] => rewrite (measure_equation (algebra.Alg.Term f t)) end );repeat (generate_pos_hyp ); cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma measure_star_monotonic : forall l r, (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) r l) ->measure r <= measure l. Proof. unfold measure in *. apply InterpZ.measure_star_monotonic. intros ;apply P_id_active_monotonic;assumption. intros ;apply P_id_proper_monotonic;assumption. intros ;apply P_id_isQid_monotonic;assumption. intros ;apply P_id_and_monotonic;assumption. intros ;apply P_id_mark_monotonic;assumption. intros ;apply P_id_top_monotonic;assumption. intros ;apply P_id_isPal_monotonic;assumption. intros ;apply P_id_isList_monotonic;assumption. intros ;apply P_id____monotonic;assumption. intros ;apply P_id_ok_monotonic;assumption. intros ;apply P_id_isNePal_monotonic;assumption. intros ;apply P_id_isNeList_monotonic;assumption. intros ;apply P_id_active_bounded;assumption. intros ;apply P_id_proper_bounded;assumption. intros ;apply P_id_isQid_bounded;assumption. intros ;apply P_id_and_bounded;assumption. intros ;apply P_id_e_bounded;assumption. intros ;apply P_id_mark_bounded;assumption. intros ;apply P_id_top_bounded;assumption. intros ;apply P_id_isPal_bounded;assumption. intros ;apply P_id_isList_bounded;assumption. intros ;apply P_id_o_bounded;assumption. intros ;apply P_id____bounded;assumption. intros ;apply P_id_ok_bounded;assumption. intros ;apply P_id_isNePal_bounded;assumption. intros ;apply P_id_tt_bounded;assumption. intros ;apply P_id_i_bounded;assumption. intros ;apply P_id_nil_bounded;assumption. intros ;apply P_id_a_bounded;assumption. intros ;apply P_id_isNeList_bounded;assumption. intros ;apply P_id_u_bounded;assumption. apply rules_monotonic. Qed. Definition P_id_ISQID (x12:Z) := 0. Definition P_id____hat_1 (x12:Z) (x13:Z) := 0. Definition P_id_TOP (x12:Z) := 0. Definition P_id_ISNEPAL (x12:Z) := 0. Definition P_id_AND (x12:Z) (x13:Z) := 1* x12. Definition P_id_ISPAL (x12:Z) := 0. Definition P_id_ISNELIST (x12:Z) := 0. Definition P_id_ACTIVE (x12:Z) := 0. Definition P_id_PROPER (x12:Z) := 0. Definition P_id_ISLIST (x12:Z) := 0. Lemma P_id_ISQID_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_ISQID x13 <= P_id_ISQID x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id____hat_1_monotonic : forall x12 x14 x13 x15, (0 <= x15)/\ (x15 <= x14) -> (0 <= x13)/\ (x13 <= x12) -> P_id____hat_1 x13 x15 <= P_id____hat_1 x12 x14. Proof. intros x15 x14 x13 x12. intros [H_1 H_0]. intros [H_3 H_2]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_TOP_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_TOP x13 <= P_id_TOP x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_ISNEPAL_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_ISNEPAL x13 <= P_id_ISNEPAL x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_AND_monotonic : forall x12 x14 x13 x15, (0 <= x15)/\ (x15 <= x14) -> (0 <= x13)/\ (x13 <= x12) ->P_id_AND x13 x15 <= P_id_AND x12 x14. Proof. intros x15 x14 x13 x12. intros [H_1 H_0]. intros [H_3 H_2]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_ISPAL_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_ISPAL x13 <= P_id_ISPAL x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_ISNELIST_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_ISNELIST x13 <= P_id_ISNELIST x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_ACTIVE_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_ACTIVE x13 <= P_id_ACTIVE x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_PROPER_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_PROPER x13 <= P_id_PROPER x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_ISLIST_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_ISLIST x13 <= P_id_ISLIST x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Definition marked_measure := InterpZ.marked_measure 0 P_id_active P_id_proper P_id_isQid P_id_and P_id_e P_id_mark P_id_top P_id_isPal P_id_isList P_id_o P_id___ P_id_ok P_id_isNePal P_id_tt P_id_i P_id_nil P_id_a P_id_isNeList P_id_u P_id_ISQID P_id____hat_1 P_id_TOP P_id_ISNEPAL P_id_AND P_id_ISPAL P_id_ISNELIST P_id_ACTIVE P_id_PROPER P_id_ISLIST. Lemma marked_measure_equation : forall t, marked_measure t = match t with | (algebra.Alg.Term algebra.F.id_isQid (x12::nil)) => P_id_ISQID (measure x12) | (algebra.Alg.Term algebra.F.id___ (x13:: x12::nil)) => P_id____hat_1 (measure x13) (measure x12) | (algebra.Alg.Term algebra.F.id_top (x12::nil)) => P_id_TOP (measure x12) | (algebra.Alg.Term algebra.F.id_isNePal (x12::nil)) => P_id_ISNEPAL (measure x12) | (algebra.Alg.Term algebra.F.id_and (x13:: x12::nil)) => P_id_AND (measure x13) (measure x12) | (algebra.Alg.Term algebra.F.id_isPal (x12::nil)) => P_id_ISPAL (measure x12) | (algebra.Alg.Term algebra.F.id_isNeList (x12::nil)) => P_id_ISNELIST (measure x12) | (algebra.Alg.Term algebra.F.id_active (x12::nil)) => P_id_ACTIVE (measure x12) | (algebra.Alg.Term algebra.F.id_proper (x12::nil)) => P_id_PROPER (measure x12) | (algebra.Alg.Term algebra.F.id_isList (x12::nil)) => P_id_ISLIST (measure x12) | _ => measure t end. Proof. reflexivity . Qed. Lemma marked_measure_star_monotonic : forall f l1 l2, (closure.refl_trans_clos (closure.one_step_list (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) ) l1 l2) -> marked_measure (algebra.Alg.Term f l1) <= marked_measure (algebra.Alg.Term f l2). Proof. unfold marked_measure in *. apply InterpZ.marked_measure_star_monotonic. intros ;apply P_id_active_monotonic;assumption. intros ;apply P_id_proper_monotonic;assumption. intros ;apply P_id_isQid_monotonic;assumption. intros ;apply P_id_and_monotonic;assumption. intros ;apply P_id_mark_monotonic;assumption. intros ;apply P_id_top_monotonic;assumption. intros ;apply P_id_isPal_monotonic;assumption. intros ;apply P_id_isList_monotonic;assumption. intros ;apply P_id____monotonic;assumption. intros ;apply P_id_ok_monotonic;assumption. intros ;apply P_id_isNePal_monotonic;assumption. intros ;apply P_id_isNeList_monotonic;assumption. intros ;apply P_id_active_bounded;assumption. intros ;apply P_id_proper_bounded;assumption. intros ;apply P_id_isQid_bounded;assumption. intros ;apply P_id_and_bounded;assumption. intros ;apply P_id_e_bounded;assumption. intros ;apply P_id_mark_bounded;assumption. intros ;apply P_id_top_bounded;assumption. intros ;apply P_id_isPal_bounded;assumption. intros ;apply P_id_isList_bounded;assumption. intros ;apply P_id_o_bounded;assumption. intros ;apply P_id____bounded;assumption. intros ;apply P_id_ok_bounded;assumption. intros ;apply P_id_isNePal_bounded;assumption. intros ;apply P_id_tt_bounded;assumption. intros ;apply P_id_i_bounded;assumption. intros ;apply P_id_nil_bounded;assumption. intros ;apply P_id_a_bounded;assumption. intros ;apply P_id_isNeList_bounded;assumption. intros ;apply P_id_u_bounded;assumption. apply rules_monotonic. intros ;apply P_id_ISQID_monotonic;assumption. intros ;apply P_id____hat_1_monotonic;assumption. intros ;apply P_id_TOP_monotonic;assumption. intros ;apply P_id_ISNEPAL_monotonic;assumption. intros ;apply P_id_AND_monotonic;assumption. intros ;apply P_id_ISPAL_monotonic;assumption. intros ;apply P_id_ISNELIST_monotonic;assumption. intros ;apply P_id_ACTIVE_monotonic;assumption. intros ;apply P_id_PROPER_monotonic;assumption. intros ;apply P_id_ISLIST_monotonic;assumption. Qed. Ltac rewrite_and_unfold := do 2 (rewrite marked_measure_equation); repeat ( match goal with | |- context [measure (algebra.Alg.Term ?f ?t)] => rewrite (measure_equation (algebra.Alg.Term f t)) | H:context [measure (algebra.Alg.Term ?f ?t)] |- _ => rewrite (measure_equation (algebra.Alg.Term f t)) in H|- end ). Lemma wf : well_founded WF_DP_R_xml_0_scc_11.DP_R_xml_0_scc_11_large. Proof. intros x. apply well_founded_ind with (R:=fun x y => (Zwf.Zwf 0) (marked_measure x) (marked_measure y)). apply Inverse_Image.wf_inverse_image with (B:=Z). apply Zwf.Zwf_well_founded. clear x. intros x IHx. repeat ( constructor;inversion 1;subst; full_prove_ineq algebra.Alg.Term ltac:(algebra.Alg_ext.find_replacement ) algebra.EQT_ext.one_step_list_refl_trans_clos marked_measure marked_measure_star_monotonic (Zwf.Zwf 0) (interp.o_Z 0) ltac:(fun _ => R_xml_0_deep_rew.impossible_star_reduction_R_xml_0 ) ltac:(fun _ => rewrite_and_unfold ) ltac:(fun _ => generate_pos_hyp ) ltac:(fun _ => cbv beta iota zeta delta - [Zplus Zmult Zle Zlt] in * ; try (constructor)) IHx ). Qed. End WF_DP_R_xml_0_scc_11_large. Open Scope Z_scope. Import ring_extention. Notation Local "a <= b" := (Zle a b). Notation Local "a < b" := (Zlt a b). Definition P_id_active (x12:Z) := 1* x12. Definition P_id_proper (x12:Z) := 2* x12. Definition P_id_isQid (x12:Z) := 3* x12. Definition P_id_and (x12:Z) (x13:Z) := 1 + 2* x13. Definition P_id_e := 2. Definition P_id_mark (x12:Z) := 0. Definition P_id_top (x12:Z) := 0. Definition P_id_isPal (x12:Z) := 1* x12. Definition P_id_isList (x12:Z) := 1 + 3* x12. Definition P_id_o := 2. Definition P_id___ (x12:Z) (x13:Z) := 3* x12. Definition P_id_ok (x12:Z) := 1 + 1* x12. Definition P_id_isNePal (x12:Z) := 2* x12. Definition P_id_tt := 2. Definition P_id_i := 2. Definition P_id_nil := 2. Definition P_id_a := 2. Definition P_id_isNeList (x12:Z) := 1* x12. Definition P_id_u := 1. Lemma P_id_active_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_active x13 <= P_id_active x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_proper_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_proper x13 <= P_id_proper x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_isQid_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_isQid x13 <= P_id_isQid x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_and_monotonic : forall x12 x14 x13 x15, (0 <= x15)/\ (x15 <= x14) -> (0 <= x13)/\ (x13 <= x12) ->P_id_and x13 x15 <= P_id_and x12 x14. Proof. intros x15 x14 x13 x12. intros [H_1 H_0]. intros [H_3 H_2]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_mark_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_mark x13 <= P_id_mark x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_top_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_top x13 <= P_id_top x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_isPal_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_isPal x13 <= P_id_isPal x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_isList_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_isList x13 <= P_id_isList x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id____monotonic : forall x12 x14 x13 x15, (0 <= x15)/\ (x15 <= x14) -> (0 <= x13)/\ (x13 <= x12) ->P_id___ x13 x15 <= P_id___ x12 x14. Proof. intros x15 x14 x13 x12. intros [H_1 H_0]. intros [H_3 H_2]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_ok_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_ok x13 <= P_id_ok x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_isNePal_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_isNePal x13 <= P_id_isNePal x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_isNeList_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_isNeList x13 <= P_id_isNeList x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_active_bounded : forall x12, (0 <= x12) ->0 <= P_id_active x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_proper_bounded : forall x12, (0 <= x12) ->0 <= P_id_proper x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_isQid_bounded : forall x12, (0 <= x12) ->0 <= P_id_isQid x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_and_bounded : forall x12 x13, (0 <= x12) ->(0 <= x13) ->0 <= P_id_and x13 x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_e_bounded : 0 <= P_id_e . Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_mark_bounded : forall x12, (0 <= x12) ->0 <= P_id_mark x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_top_bounded : forall x12, (0 <= x12) ->0 <= P_id_top x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_isPal_bounded : forall x12, (0 <= x12) ->0 <= P_id_isPal x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_isList_bounded : forall x12, (0 <= x12) ->0 <= P_id_isList x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_o_bounded : 0 <= P_id_o . Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id____bounded : forall x12 x13, (0 <= x12) ->(0 <= x13) ->0 <= P_id___ x13 x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_ok_bounded : forall x12, (0 <= x12) ->0 <= P_id_ok x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_isNePal_bounded : forall x12, (0 <= x12) ->0 <= P_id_isNePal x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_tt_bounded : 0 <= P_id_tt . Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_i_bounded : 0 <= P_id_i . Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_nil_bounded : 0 <= P_id_nil . Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_a_bounded : 0 <= P_id_a . Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_isNeList_bounded : forall x12, (0 <= x12) ->0 <= P_id_isNeList x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_u_bounded : 0 <= P_id_u . Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Definition measure := InterpZ.measure 0 P_id_active P_id_proper P_id_isQid P_id_and P_id_e P_id_mark P_id_top P_id_isPal P_id_isList P_id_o P_id___ P_id_ok P_id_isNePal P_id_tt P_id_i P_id_nil P_id_a P_id_isNeList P_id_u. Lemma measure_equation : forall t, measure t = match t with | (algebra.Alg.Term algebra.F.id_active (x12::nil)) => P_id_active (measure x12) | (algebra.Alg.Term algebra.F.id_proper (x12::nil)) => P_id_proper (measure x12) | (algebra.Alg.Term algebra.F.id_isQid (x12::nil)) => P_id_isQid (measure x12) | (algebra.Alg.Term algebra.F.id_and (x13::x12::nil)) => P_id_and (measure x13) (measure x12) | (algebra.Alg.Term algebra.F.id_e nil) => P_id_e | (algebra.Alg.Term algebra.F.id_mark (x12::nil)) => P_id_mark (measure x12) | (algebra.Alg.Term algebra.F.id_top (x12::nil)) => P_id_top (measure x12) | (algebra.Alg.Term algebra.F.id_isPal (x12::nil)) => P_id_isPal (measure x12) | (algebra.Alg.Term algebra.F.id_isList (x12::nil)) => P_id_isList (measure x12) | (algebra.Alg.Term algebra.F.id_o nil) => P_id_o | (algebra.Alg.Term algebra.F.id___ (x13::x12::nil)) => P_id___ (measure x13) (measure x12) | (algebra.Alg.Term algebra.F.id_ok (x12::nil)) => P_id_ok (measure x12) | (algebra.Alg.Term algebra.F.id_isNePal (x12::nil)) => P_id_isNePal (measure x12) | (algebra.Alg.Term algebra.F.id_tt nil) => P_id_tt | (algebra.Alg.Term algebra.F.id_i nil) => P_id_i | (algebra.Alg.Term algebra.F.id_nil nil) => P_id_nil | (algebra.Alg.Term algebra.F.id_a nil) => P_id_a | (algebra.Alg.Term algebra.F.id_isNeList (x12::nil)) => P_id_isNeList (measure x12) | (algebra.Alg.Term algebra.F.id_u nil) => P_id_u | _ => 0 end. Proof. intros t;case t;intros ;apply refl_equal. Qed. Lemma measure_bounded : forall t, 0 <= measure t. Proof. unfold measure in |-*. apply InterpZ.measure_bounded; cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Ltac generate_pos_hyp := match goal with | H:context [measure ?x] |- _ => let v := fresh "v" in (let H := fresh "h" in (set (H:=measure_bounded x) in *;set (v:=measure x) in *; clearbody H;clearbody v)) | |- context [measure ?x] => let v := fresh "v" in (let H := fresh "h" in (set (H:=measure_bounded x) in *;set (v:=measure x) in *; clearbody H;clearbody v)) end . Lemma rules_monotonic : forall l r, (algebra.EQT.axiom R_xml_0_deep_rew.R_xml_0_rules r l) -> measure r <= measure l. Proof. intros l r H. fold measure in |-*. inversion H;clear H;subst;inversion H0;clear H0;subst; simpl algebra.EQT.T.apply_subst in |-*; repeat ( match goal with | |- context [measure (algebra.Alg.Term ?f ?t)] => rewrite (measure_equation (algebra.Alg.Term f t)) end );repeat (generate_pos_hyp ); cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma measure_star_monotonic : forall l r, (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) r l) ->measure r <= measure l. Proof. unfold measure in *. apply InterpZ.measure_star_monotonic. intros ;apply P_id_active_monotonic;assumption. intros ;apply P_id_proper_monotonic;assumption. intros ;apply P_id_isQid_monotonic;assumption. intros ;apply P_id_and_monotonic;assumption. intros ;apply P_id_mark_monotonic;assumption. intros ;apply P_id_top_monotonic;assumption. intros ;apply P_id_isPal_monotonic;assumption. intros ;apply P_id_isList_monotonic;assumption. intros ;apply P_id____monotonic;assumption. intros ;apply P_id_ok_monotonic;assumption. intros ;apply P_id_isNePal_monotonic;assumption. intros ;apply P_id_isNeList_monotonic;assumption. intros ;apply P_id_active_bounded;assumption. intros ;apply P_id_proper_bounded;assumption. intros ;apply P_id_isQid_bounded;assumption. intros ;apply P_id_and_bounded;assumption. intros ;apply P_id_e_bounded;assumption. intros ;apply P_id_mark_bounded;assumption. intros ;apply P_id_top_bounded;assumption. intros ;apply P_id_isPal_bounded;assumption. intros ;apply P_id_isList_bounded;assumption. intros ;apply P_id_o_bounded;assumption. intros ;apply P_id____bounded;assumption. intros ;apply P_id_ok_bounded;assumption. intros ;apply P_id_isNePal_bounded;assumption. intros ;apply P_id_tt_bounded;assumption. intros ;apply P_id_i_bounded;assumption. intros ;apply P_id_nil_bounded;assumption. intros ;apply P_id_a_bounded;assumption. intros ;apply P_id_isNeList_bounded;assumption. intros ;apply P_id_u_bounded;assumption. apply rules_monotonic. Qed. Definition P_id_ISQID (x12:Z) := 0. Definition P_id____hat_1 (x12:Z) (x13:Z) := 0. Definition P_id_TOP (x12:Z) := 0. Definition P_id_ISNEPAL (x12:Z) := 0. Definition P_id_AND (x12:Z) (x13:Z) := 2* x13. Definition P_id_ISPAL (x12:Z) := 0. Definition P_id_ISNELIST (x12:Z) := 0. Definition P_id_ACTIVE (x12:Z) := 0. Definition P_id_PROPER (x12:Z) := 0. Definition P_id_ISLIST (x12:Z) := 0. Lemma P_id_ISQID_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_ISQID x13 <= P_id_ISQID x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id____hat_1_monotonic : forall x12 x14 x13 x15, (0 <= x15)/\ (x15 <= x14) -> (0 <= x13)/\ (x13 <= x12) -> P_id____hat_1 x13 x15 <= P_id____hat_1 x12 x14. Proof. intros x15 x14 x13 x12. intros [H_1 H_0]. intros [H_3 H_2]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_TOP_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_TOP x13 <= P_id_TOP x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_ISNEPAL_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_ISNEPAL x13 <= P_id_ISNEPAL x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_AND_monotonic : forall x12 x14 x13 x15, (0 <= x15)/\ (x15 <= x14) -> (0 <= x13)/\ (x13 <= x12) ->P_id_AND x13 x15 <= P_id_AND x12 x14. Proof. intros x15 x14 x13 x12. intros [H_1 H_0]. intros [H_3 H_2]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_ISPAL_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_ISPAL x13 <= P_id_ISPAL x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_ISNELIST_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_ISNELIST x13 <= P_id_ISNELIST x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_ACTIVE_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_ACTIVE x13 <= P_id_ACTIVE x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_PROPER_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_PROPER x13 <= P_id_PROPER x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_ISLIST_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_ISLIST x13 <= P_id_ISLIST x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Definition marked_measure := InterpZ.marked_measure 0 P_id_active P_id_proper P_id_isQid P_id_and P_id_e P_id_mark P_id_top P_id_isPal P_id_isList P_id_o P_id___ P_id_ok P_id_isNePal P_id_tt P_id_i P_id_nil P_id_a P_id_isNeList P_id_u P_id_ISQID P_id____hat_1 P_id_TOP P_id_ISNEPAL P_id_AND P_id_ISPAL P_id_ISNELIST P_id_ACTIVE P_id_PROPER P_id_ISLIST. Lemma marked_measure_equation : forall t, marked_measure t = match t with | (algebra.Alg.Term algebra.F.id_isQid (x12::nil)) => P_id_ISQID (measure x12) | (algebra.Alg.Term algebra.F.id___ (x13:: x12::nil)) => P_id____hat_1 (measure x13) (measure x12) | (algebra.Alg.Term algebra.F.id_top (x12::nil)) => P_id_TOP (measure x12) | (algebra.Alg.Term algebra.F.id_isNePal (x12::nil)) => P_id_ISNEPAL (measure x12) | (algebra.Alg.Term algebra.F.id_and (x13:: x12::nil)) => P_id_AND (measure x13) (measure x12) | (algebra.Alg.Term algebra.F.id_isPal (x12::nil)) => P_id_ISPAL (measure x12) | (algebra.Alg.Term algebra.F.id_isNeList (x12::nil)) => P_id_ISNELIST (measure x12) | (algebra.Alg.Term algebra.F.id_active (x12::nil)) => P_id_ACTIVE (measure x12) | (algebra.Alg.Term algebra.F.id_proper (x12::nil)) => P_id_PROPER (measure x12) | (algebra.Alg.Term algebra.F.id_isList (x12::nil)) => P_id_ISLIST (measure x12) | _ => measure t end. Proof. reflexivity . Qed. Lemma marked_measure_star_monotonic : forall f l1 l2, (closure.refl_trans_clos (closure.one_step_list (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) ) l1 l2) -> marked_measure (algebra.Alg.Term f l1) <= marked_measure (algebra.Alg.Term f l2). Proof. unfold marked_measure in *. apply InterpZ.marked_measure_star_monotonic. intros ;apply P_id_active_monotonic;assumption. intros ;apply P_id_proper_monotonic;assumption. intros ;apply P_id_isQid_monotonic;assumption. intros ;apply P_id_and_monotonic;assumption. intros ;apply P_id_mark_monotonic;assumption. intros ;apply P_id_top_monotonic;assumption. intros ;apply P_id_isPal_monotonic;assumption. intros ;apply P_id_isList_monotonic;assumption. intros ;apply P_id____monotonic;assumption. intros ;apply P_id_ok_monotonic;assumption. intros ;apply P_id_isNePal_monotonic;assumption. intros ;apply P_id_isNeList_monotonic;assumption. intros ;apply P_id_active_bounded;assumption. intros ;apply P_id_proper_bounded;assumption. intros ;apply P_id_isQid_bounded;assumption. intros ;apply P_id_and_bounded;assumption. intros ;apply P_id_e_bounded;assumption. intros ;apply P_id_mark_bounded;assumption. intros ;apply P_id_top_bounded;assumption. intros ;apply P_id_isPal_bounded;assumption. intros ;apply P_id_isList_bounded;assumption. intros ;apply P_id_o_bounded;assumption. intros ;apply P_id____bounded;assumption. intros ;apply P_id_ok_bounded;assumption. intros ;apply P_id_isNePal_bounded;assumption. intros ;apply P_id_tt_bounded;assumption. intros ;apply P_id_i_bounded;assumption. intros ;apply P_id_nil_bounded;assumption. intros ;apply P_id_a_bounded;assumption. intros ;apply P_id_isNeList_bounded;assumption. intros ;apply P_id_u_bounded;assumption. apply rules_monotonic. intros ;apply P_id_ISQID_monotonic;assumption. intros ;apply P_id____hat_1_monotonic;assumption. intros ;apply P_id_TOP_monotonic;assumption. intros ;apply P_id_ISNEPAL_monotonic;assumption. intros ;apply P_id_AND_monotonic;assumption. intros ;apply P_id_ISPAL_monotonic;assumption. intros ;apply P_id_ISNELIST_monotonic;assumption. intros ;apply P_id_ACTIVE_monotonic;assumption. intros ;apply P_id_PROPER_monotonic;assumption. intros ;apply P_id_ISLIST_monotonic;assumption. Qed. Ltac rewrite_and_unfold := do 2 (rewrite marked_measure_equation); repeat ( match goal with | |- context [measure (algebra.Alg.Term ?f ?t)] => rewrite (measure_equation (algebra.Alg.Term f t)) | H:context [measure (algebra.Alg.Term ?f ?t)] |- _ => rewrite (measure_equation (algebra.Alg.Term f t)) in H|- end ). Definition lt a b := (Zwf.Zwf 0) (marked_measure a) (marked_measure b). Definition le a b := marked_measure a <= marked_measure b. Lemma lt_le_compat : forall a b c, (lt a b) ->(le b c) ->lt a c. Proof. unfold lt, le in *. intros a b c. apply (interp.le_lt_compat_right (interp.o_Z 0)). Qed. Lemma wf_lt : well_founded lt. Proof. unfold lt in *. apply Inverse_Image.wf_inverse_image with (B:=Z). apply Zwf.Zwf_well_founded. Qed. Lemma DP_R_xml_0_scc_11_strict_in_lt : Relation_Definitions.inclusion _ DP_R_xml_0_scc_11_strict lt. Proof. unfold Relation_Definitions.inclusion, lt in *. intros a b H;destruct H; match goal with | |- (Zwf.Zwf 0) _ (marked_measure (algebra.Alg.Term ?f ?l)) => let l'' := algebra.Alg_ext.find_replacement l in ((apply (interp.le_lt_compat_right (interp.o_Z 0)) with (marked_measure (algebra.Alg.Term f l''));[idtac| apply marked_measure_star_monotonic; repeat (apply algebra.EQT_ext.one_step_list_refl_trans_clos); (assumption)||(constructor 1)])) end ;clear ;rewrite_and_unfold ;repeat (generate_pos_hyp ); cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma DP_R_xml_0_scc_11_large_in_le : Relation_Definitions.inclusion _ DP_R_xml_0_scc_11_large le. Proof. unfold Relation_Definitions.inclusion, le, Zwf.Zwf in *. intros a b H;destruct H; match goal with | |- _ <= marked_measure (algebra.Alg.Term ?f ?l) => let l'' := algebra.Alg_ext.find_replacement l in ((apply (interp.le_trans (interp.o_Z 0)) with (marked_measure (algebra.Alg.Term f l''));[idtac| apply marked_measure_star_monotonic; repeat (apply algebra.EQT_ext.one_step_list_refl_trans_clos); (assumption)||(constructor 1)])) end ;clear ;rewrite_and_unfold ;repeat (generate_pos_hyp ); cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Definition wf_DP_R_xml_0_scc_11_large := WF_DP_R_xml_0_scc_11_large.wf. Lemma wf : well_founded WF_DP_R_xml_0.DP_R_xml_0_scc_11. Proof. intros x. apply (well_founded_ind wf_lt). clear x. intros x. pattern x. apply (@Acc_ind _ DP_R_xml_0_scc_11_large). clear x. intros x _ IHx IHx'. constructor. intros y H. destruct H; (apply IHx';apply DP_R_xml_0_scc_11_strict_in_lt; econstructor eassumption)|| ((apply IHx;[econstructor eassumption| intros y' Hlt;apply IHx';apply lt_le_compat with (1:=Hlt) ; apply DP_R_xml_0_scc_11_large_in_le;econstructor eassumption])). apply wf_DP_R_xml_0_scc_11_large. Qed. End WF_DP_R_xml_0_scc_11. Definition wf_DP_R_xml_0_scc_11 := WF_DP_R_xml_0_scc_11.wf. Lemma acc_DP_R_xml_0_scc_11 : forall x y, (DP_R_xml_0_scc_11 x y) ->Acc WF_R_xml_0_deep_rew.DP_R_xml_0 x. Proof. intros x. pattern x. apply (@Acc_ind _ DP_R_xml_0_scc_11). intros x' _ Hrec y h. inversion h;clear h;subst; constructor;intros _y _h;inversion _h;clear _h;subst; (eapply Hrec;econstructor eassumption)|| ((R_xml_0_deep_rew.impossible_star_reduction_R_xml_0 )|| (eapply Hrec;econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))). apply wf_DP_R_xml_0_scc_11. Qed. Inductive DP_R_xml_0_non_scc_12 : algebra.Alg.term ->algebra.Alg.term ->Prop := (* *) | DP_R_xml_0_non_scc_12_0 : forall x12 x10 x9, (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) (algebra.Alg.Term algebra.F.id_and (x9::x10::nil)) x12) -> DP_R_xml_0_non_scc_12 (algebra.Alg.Term algebra.F.id_and ((algebra.Alg.Term algebra.F.id_proper (x9::nil))::(algebra.Alg.Term algebra.F.id_proper (x10::nil))::nil)) (algebra.Alg.Term algebra.F.id_proper (x12::nil)) . Lemma acc_DP_R_xml_0_non_scc_12 : forall x y, (DP_R_xml_0_non_scc_12 x y) ->Acc WF_R_xml_0_deep_rew.DP_R_xml_0 x. Proof. intros x y h. inversion h;clear h;subst; constructor;intros _y _h;inversion _h;clear _h;subst; (eapply acc_DP_R_xml_0_scc_11; econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))|| ((R_xml_0_deep_rew.impossible_star_reduction_R_xml_0 )|| (eapply Hrec;econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))). Qed. Inductive DP_R_xml_0_scc_13 : algebra.Alg.term ->algebra.Alg.term ->Prop := (* <__(X1_,mark(X2_)),__(X1_,X2_)> *) | DP_R_xml_0_scc_13_0 : forall x12 x10 x9 x13, (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) x9 x13) -> (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) (algebra.Alg.Term algebra.F.id_mark (x10::nil)) x12) -> DP_R_xml_0_scc_13 (algebra.Alg.Term algebra.F.id___ (x9::x10::nil)) (algebra.Alg.Term algebra.F.id___ (x13::x12::nil)) (* <__(mark(X1_),X2_),__(X1_,X2_)> *) | DP_R_xml_0_scc_13_1 : forall x12 x10 x9 x13, (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) (algebra.Alg.Term algebra.F.id_mark (x9::nil)) x13) -> (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) x10 x12) -> DP_R_xml_0_scc_13 (algebra.Alg.Term algebra.F.id___ (x9::x10::nil)) (algebra.Alg.Term algebra.F.id___ (x13::x12::nil)) (* <__(ok(X1_),ok(X2_)),__(X1_,X2_)> *) | DP_R_xml_0_scc_13_2 : forall x12 x10 x9 x13, (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) (algebra.Alg.Term algebra.F.id_ok (x9::nil)) x13) -> (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) (algebra.Alg.Term algebra.F.id_ok (x10::nil)) x12) -> DP_R_xml_0_scc_13 (algebra.Alg.Term algebra.F.id___ (x9::x10::nil)) (algebra.Alg.Term algebra.F.id___ (x13::x12::nil)) . Module WF_DP_R_xml_0_scc_13. Inductive DP_R_xml_0_scc_13_large : algebra.Alg.term ->algebra.Alg.term ->Prop := (* <__(ok(X1_),ok(X2_)),__(X1_,X2_)> *) | DP_R_xml_0_scc_13_large_0 : forall x12 x10 x9 x13, (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) (algebra.Alg.Term algebra.F.id_ok (x9::nil)) x13) -> (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) (algebra.Alg.Term algebra.F.id_ok (x10::nil)) x12) -> DP_R_xml_0_scc_13_large (algebra.Alg.Term algebra.F.id___ (x9:: x10::nil)) (algebra.Alg.Term algebra.F.id___ (x13::x12::nil)) . Inductive DP_R_xml_0_scc_13_strict : algebra.Alg.term ->algebra.Alg.term ->Prop := (* <__(X1_,mark(X2_)),__(X1_,X2_)> *) | DP_R_xml_0_scc_13_strict_0 : forall x12 x10 x9 x13, (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) x9 x13) -> (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) (algebra.Alg.Term algebra.F.id_mark (x10::nil)) x12) -> DP_R_xml_0_scc_13_strict (algebra.Alg.Term algebra.F.id___ (x9:: x10::nil)) (algebra.Alg.Term algebra.F.id___ (x13::x12::nil)) (* <__(mark(X1_),X2_),__(X1_,X2_)> *) | DP_R_xml_0_scc_13_strict_1 : forall x12 x10 x9 x13, (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) (algebra.Alg.Term algebra.F.id_mark (x9::nil)) x13) -> (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) x10 x12) -> DP_R_xml_0_scc_13_strict (algebra.Alg.Term algebra.F.id___ (x9:: x10::nil)) (algebra.Alg.Term algebra.F.id___ (x13::x12::nil)) . Module WF_DP_R_xml_0_scc_13_large. Open Scope Z_scope. Import ring_extention. Notation Local "a <= b" := (Zle a b). Notation Local "a < b" := (Zlt a b). Definition P_id_active (x12:Z) := 1* x12. Definition P_id_proper (x12:Z) := 3* x12. Definition P_id_isQid (x12:Z) := 1* x12. Definition P_id_and (x12:Z) (x13:Z) := 1* x13. Definition P_id_e := 1. Definition P_id_mark (x12:Z) := 0. Definition P_id_top (x12:Z) := 0. Definition P_id_isPal (x12:Z) := 1 + 3* x12. Definition P_id_isList (x12:Z) := 2* x12. Definition P_id_o := 3. Definition P_id___ (x12:Z) (x13:Z) := 1* x12 + 2* x13. Definition P_id_ok (x12:Z) := 1 + 2* x12. Definition P_id_isNePal (x12:Z) := 1 + 2* x12. Definition P_id_tt := 3. Definition P_id_i := 1. Definition P_id_nil := 2. Definition P_id_a := 1. Definition P_id_isNeList (x12:Z) := 2 + 3* x12. Definition P_id_u := 3. Lemma P_id_active_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_active x13 <= P_id_active x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_proper_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_proper x13 <= P_id_proper x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_isQid_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_isQid x13 <= P_id_isQid x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_and_monotonic : forall x12 x14 x13 x15, (0 <= x15)/\ (x15 <= x14) -> (0 <= x13)/\ (x13 <= x12) ->P_id_and x13 x15 <= P_id_and x12 x14. Proof. intros x15 x14 x13 x12. intros [H_1 H_0]. intros [H_3 H_2]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_mark_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_mark x13 <= P_id_mark x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_top_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_top x13 <= P_id_top x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_isPal_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_isPal x13 <= P_id_isPal x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_isList_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_isList x13 <= P_id_isList x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id____monotonic : forall x12 x14 x13 x15, (0 <= x15)/\ (x15 <= x14) -> (0 <= x13)/\ (x13 <= x12) ->P_id___ x13 x15 <= P_id___ x12 x14. Proof. intros x15 x14 x13 x12. intros [H_1 H_0]. intros [H_3 H_2]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_ok_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_ok x13 <= P_id_ok x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_isNePal_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_isNePal x13 <= P_id_isNePal x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_isNeList_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_isNeList x13 <= P_id_isNeList x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_active_bounded : forall x12, (0 <= x12) ->0 <= P_id_active x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_proper_bounded : forall x12, (0 <= x12) ->0 <= P_id_proper x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_isQid_bounded : forall x12, (0 <= x12) ->0 <= P_id_isQid x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_and_bounded : forall x12 x13, (0 <= x12) ->(0 <= x13) ->0 <= P_id_and x13 x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_e_bounded : 0 <= P_id_e . Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_mark_bounded : forall x12, (0 <= x12) ->0 <= P_id_mark x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_top_bounded : forall x12, (0 <= x12) ->0 <= P_id_top x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_isPal_bounded : forall x12, (0 <= x12) ->0 <= P_id_isPal x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_isList_bounded : forall x12, (0 <= x12) ->0 <= P_id_isList x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_o_bounded : 0 <= P_id_o . Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id____bounded : forall x12 x13, (0 <= x12) ->(0 <= x13) ->0 <= P_id___ x13 x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_ok_bounded : forall x12, (0 <= x12) ->0 <= P_id_ok x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_isNePal_bounded : forall x12, (0 <= x12) ->0 <= P_id_isNePal x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_tt_bounded : 0 <= P_id_tt . Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_i_bounded : 0 <= P_id_i . Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_nil_bounded : 0 <= P_id_nil . Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_a_bounded : 0 <= P_id_a . Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_isNeList_bounded : forall x12, (0 <= x12) ->0 <= P_id_isNeList x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_u_bounded : 0 <= P_id_u . Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Definition measure := InterpZ.measure 0 P_id_active P_id_proper P_id_isQid P_id_and P_id_e P_id_mark P_id_top P_id_isPal P_id_isList P_id_o P_id___ P_id_ok P_id_isNePal P_id_tt P_id_i P_id_nil P_id_a P_id_isNeList P_id_u. Lemma measure_equation : forall t, measure t = match t with | (algebra.Alg.Term algebra.F.id_active (x12::nil)) => P_id_active (measure x12) | (algebra.Alg.Term algebra.F.id_proper (x12::nil)) => P_id_proper (measure x12) | (algebra.Alg.Term algebra.F.id_isQid (x12::nil)) => P_id_isQid (measure x12) | (algebra.Alg.Term algebra.F.id_and (x13::x12::nil)) => P_id_and (measure x13) (measure x12) | (algebra.Alg.Term algebra.F.id_e nil) => P_id_e | (algebra.Alg.Term algebra.F.id_mark (x12::nil)) => P_id_mark (measure x12) | (algebra.Alg.Term algebra.F.id_top (x12::nil)) => P_id_top (measure x12) | (algebra.Alg.Term algebra.F.id_isPal (x12::nil)) => P_id_isPal (measure x12) | (algebra.Alg.Term algebra.F.id_isList (x12::nil)) => P_id_isList (measure x12) | (algebra.Alg.Term algebra.F.id_o nil) => P_id_o | (algebra.Alg.Term algebra.F.id___ (x13::x12::nil)) => P_id___ (measure x13) (measure x12) | (algebra.Alg.Term algebra.F.id_ok (x12::nil)) => P_id_ok (measure x12) | (algebra.Alg.Term algebra.F.id_isNePal (x12::nil)) => P_id_isNePal (measure x12) | (algebra.Alg.Term algebra.F.id_tt nil) => P_id_tt | (algebra.Alg.Term algebra.F.id_i nil) => P_id_i | (algebra.Alg.Term algebra.F.id_nil nil) => P_id_nil | (algebra.Alg.Term algebra.F.id_a nil) => P_id_a | (algebra.Alg.Term algebra.F.id_isNeList (x12::nil)) => P_id_isNeList (measure x12) | (algebra.Alg.Term algebra.F.id_u nil) => P_id_u | _ => 0 end. Proof. intros t;case t;intros ;apply refl_equal. Qed. Lemma measure_bounded : forall t, 0 <= measure t. Proof. unfold measure in |-*. apply InterpZ.measure_bounded; cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Ltac generate_pos_hyp := match goal with | H:context [measure ?x] |- _ => let v := fresh "v" in (let H := fresh "h" in (set (H:=measure_bounded x) in *;set (v:=measure x) in *; clearbody H;clearbody v)) | |- context [measure ?x] => let v := fresh "v" in (let H := fresh "h" in (set (H:=measure_bounded x) in *;set (v:=measure x) in *; clearbody H;clearbody v)) end . Lemma rules_monotonic : forall l r, (algebra.EQT.axiom R_xml_0_deep_rew.R_xml_0_rules r l) -> measure r <= measure l. Proof. intros l r H. fold measure in |-*. inversion H;clear H;subst;inversion H0;clear H0;subst; simpl algebra.EQT.T.apply_subst in |-*; repeat ( match goal with | |- context [measure (algebra.Alg.Term ?f ?t)] => rewrite (measure_equation (algebra.Alg.Term f t)) end );repeat (generate_pos_hyp ); cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma measure_star_monotonic : forall l r, (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) r l) ->measure r <= measure l. Proof. unfold measure in *. apply InterpZ.measure_star_monotonic. intros ;apply P_id_active_monotonic;assumption. intros ;apply P_id_proper_monotonic;assumption. intros ;apply P_id_isQid_monotonic;assumption. intros ;apply P_id_and_monotonic;assumption. intros ;apply P_id_mark_monotonic;assumption. intros ;apply P_id_top_monotonic;assumption. intros ;apply P_id_isPal_monotonic;assumption. intros ;apply P_id_isList_monotonic;assumption. intros ;apply P_id____monotonic;assumption. intros ;apply P_id_ok_monotonic;assumption. intros ;apply P_id_isNePal_monotonic;assumption. intros ;apply P_id_isNeList_monotonic;assumption. intros ;apply P_id_active_bounded;assumption. intros ;apply P_id_proper_bounded;assumption. intros ;apply P_id_isQid_bounded;assumption. intros ;apply P_id_and_bounded;assumption. intros ;apply P_id_e_bounded;assumption. intros ;apply P_id_mark_bounded;assumption. intros ;apply P_id_top_bounded;assumption. intros ;apply P_id_isPal_bounded;assumption. intros ;apply P_id_isList_bounded;assumption. intros ;apply P_id_o_bounded;assumption. intros ;apply P_id____bounded;assumption. intros ;apply P_id_ok_bounded;assumption. intros ;apply P_id_isNePal_bounded;assumption. intros ;apply P_id_tt_bounded;assumption. intros ;apply P_id_i_bounded;assumption. intros ;apply P_id_nil_bounded;assumption. intros ;apply P_id_a_bounded;assumption. intros ;apply P_id_isNeList_bounded;assumption. intros ;apply P_id_u_bounded;assumption. apply rules_monotonic. Qed. Definition P_id_ISQID (x12:Z) := 0. Definition P_id____hat_1 (x12:Z) (x13:Z) := 1* x13. Definition P_id_TOP (x12:Z) := 0. Definition P_id_ISNEPAL (x12:Z) := 0. Definition P_id_AND (x12:Z) (x13:Z) := 0. Definition P_id_ISPAL (x12:Z) := 0. Definition P_id_ISNELIST (x12:Z) := 0. Definition P_id_ACTIVE (x12:Z) := 0. Definition P_id_PROPER (x12:Z) := 0. Definition P_id_ISLIST (x12:Z) := 0. Lemma P_id_ISQID_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_ISQID x13 <= P_id_ISQID x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id____hat_1_monotonic : forall x12 x14 x13 x15, (0 <= x15)/\ (x15 <= x14) -> (0 <= x13)/\ (x13 <= x12) -> P_id____hat_1 x13 x15 <= P_id____hat_1 x12 x14. Proof. intros x15 x14 x13 x12. intros [H_1 H_0]. intros [H_3 H_2]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_TOP_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_TOP x13 <= P_id_TOP x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_ISNEPAL_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_ISNEPAL x13 <= P_id_ISNEPAL x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_AND_monotonic : forall x12 x14 x13 x15, (0 <= x15)/\ (x15 <= x14) -> (0 <= x13)/\ (x13 <= x12) ->P_id_AND x13 x15 <= P_id_AND x12 x14. Proof. intros x15 x14 x13 x12. intros [H_1 H_0]. intros [H_3 H_2]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_ISPAL_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_ISPAL x13 <= P_id_ISPAL x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_ISNELIST_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_ISNELIST x13 <= P_id_ISNELIST x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_ACTIVE_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_ACTIVE x13 <= P_id_ACTIVE x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_PROPER_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_PROPER x13 <= P_id_PROPER x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_ISLIST_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_ISLIST x13 <= P_id_ISLIST x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Definition marked_measure := InterpZ.marked_measure 0 P_id_active P_id_proper P_id_isQid P_id_and P_id_e P_id_mark P_id_top P_id_isPal P_id_isList P_id_o P_id___ P_id_ok P_id_isNePal P_id_tt P_id_i P_id_nil P_id_a P_id_isNeList P_id_u P_id_ISQID P_id____hat_1 P_id_TOP P_id_ISNEPAL P_id_AND P_id_ISPAL P_id_ISNELIST P_id_ACTIVE P_id_PROPER P_id_ISLIST. Lemma marked_measure_equation : forall t, marked_measure t = match t with | (algebra.Alg.Term algebra.F.id_isQid (x12::nil)) => P_id_ISQID (measure x12) | (algebra.Alg.Term algebra.F.id___ (x13:: x12::nil)) => P_id____hat_1 (measure x13) (measure x12) | (algebra.Alg.Term algebra.F.id_top (x12::nil)) => P_id_TOP (measure x12) | (algebra.Alg.Term algebra.F.id_isNePal (x12::nil)) => P_id_ISNEPAL (measure x12) | (algebra.Alg.Term algebra.F.id_and (x13:: x12::nil)) => P_id_AND (measure x13) (measure x12) | (algebra.Alg.Term algebra.F.id_isPal (x12::nil)) => P_id_ISPAL (measure x12) | (algebra.Alg.Term algebra.F.id_isNeList (x12::nil)) => P_id_ISNELIST (measure x12) | (algebra.Alg.Term algebra.F.id_active (x12::nil)) => P_id_ACTIVE (measure x12) | (algebra.Alg.Term algebra.F.id_proper (x12::nil)) => P_id_PROPER (measure x12) | (algebra.Alg.Term algebra.F.id_isList (x12::nil)) => P_id_ISLIST (measure x12) | _ => measure t end. Proof. reflexivity . Qed. Lemma marked_measure_star_monotonic : forall f l1 l2, (closure.refl_trans_clos (closure.one_step_list (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) ) l1 l2) -> marked_measure (algebra.Alg.Term f l1) <= marked_measure (algebra.Alg.Term f l2). Proof. unfold marked_measure in *. apply InterpZ.marked_measure_star_monotonic. intros ;apply P_id_active_monotonic;assumption. intros ;apply P_id_proper_monotonic;assumption. intros ;apply P_id_isQid_monotonic;assumption. intros ;apply P_id_and_monotonic;assumption. intros ;apply P_id_mark_monotonic;assumption. intros ;apply P_id_top_monotonic;assumption. intros ;apply P_id_isPal_monotonic;assumption. intros ;apply P_id_isList_monotonic;assumption. intros ;apply P_id____monotonic;assumption. intros ;apply P_id_ok_monotonic;assumption. intros ;apply P_id_isNePal_monotonic;assumption. intros ;apply P_id_isNeList_monotonic;assumption. intros ;apply P_id_active_bounded;assumption. intros ;apply P_id_proper_bounded;assumption. intros ;apply P_id_isQid_bounded;assumption. intros ;apply P_id_and_bounded;assumption. intros ;apply P_id_e_bounded;assumption. intros ;apply P_id_mark_bounded;assumption. intros ;apply P_id_top_bounded;assumption. intros ;apply P_id_isPal_bounded;assumption. intros ;apply P_id_isList_bounded;assumption. intros ;apply P_id_o_bounded;assumption. intros ;apply P_id____bounded;assumption. intros ;apply P_id_ok_bounded;assumption. intros ;apply P_id_isNePal_bounded;assumption. intros ;apply P_id_tt_bounded;assumption. intros ;apply P_id_i_bounded;assumption. intros ;apply P_id_nil_bounded;assumption. intros ;apply P_id_a_bounded;assumption. intros ;apply P_id_isNeList_bounded;assumption. intros ;apply P_id_u_bounded;assumption. apply rules_monotonic. intros ;apply P_id_ISQID_monotonic;assumption. intros ;apply P_id____hat_1_monotonic;assumption. intros ;apply P_id_TOP_monotonic;assumption. intros ;apply P_id_ISNEPAL_monotonic;assumption. intros ;apply P_id_AND_monotonic;assumption. intros ;apply P_id_ISPAL_monotonic;assumption. intros ;apply P_id_ISNELIST_monotonic;assumption. intros ;apply P_id_ACTIVE_monotonic;assumption. intros ;apply P_id_PROPER_monotonic;assumption. intros ;apply P_id_ISLIST_monotonic;assumption. Qed. Ltac rewrite_and_unfold := do 2 (rewrite marked_measure_equation); repeat ( match goal with | |- context [measure (algebra.Alg.Term ?f ?t)] => rewrite (measure_equation (algebra.Alg.Term f t)) | H:context [measure (algebra.Alg.Term ?f ?t)] |- _ => rewrite (measure_equation (algebra.Alg.Term f t)) in H|- end ). Lemma wf : well_founded WF_DP_R_xml_0_scc_13.DP_R_xml_0_scc_13_large. Proof. intros x. apply well_founded_ind with (R:=fun x y => (Zwf.Zwf 0) (marked_measure x) (marked_measure y)). apply Inverse_Image.wf_inverse_image with (B:=Z). apply Zwf.Zwf_well_founded. clear x. intros x IHx. repeat ( constructor;inversion 1;subst; full_prove_ineq algebra.Alg.Term ltac:(algebra.Alg_ext.find_replacement ) algebra.EQT_ext.one_step_list_refl_trans_clos marked_measure marked_measure_star_monotonic (Zwf.Zwf 0) (interp.o_Z 0) ltac:(fun _ => R_xml_0_deep_rew.impossible_star_reduction_R_xml_0 ) ltac:(fun _ => rewrite_and_unfold ) ltac:(fun _ => generate_pos_hyp ) ltac:(fun _ => cbv beta iota zeta delta - [Zplus Zmult Zle Zlt] in * ; try (constructor)) IHx ). Qed. End WF_DP_R_xml_0_scc_13_large. Open Scope Z_scope. Import ring_extention. Notation Local "a <= b" := (Zle a b). Notation Local "a < b" := (Zlt a b). Definition P_id_active (x12:Z) := 1 + 1* x12. Definition P_id_proper (x12:Z) := 0. Definition P_id_isQid (x12:Z) := 0. Definition P_id_and (x12:Z) (x13:Z) := 1* x12 + 2* x13. Definition P_id_e := 0. Definition P_id_mark (x12:Z) := 1 + 1* x12. Definition P_id_top (x12:Z) := 0. Definition P_id_isPal (x12:Z) := 0. Definition P_id_isList (x12:Z) := 0. Definition P_id_o := 0. Definition P_id___ (x12:Z) (x13:Z) := 1* x12 + 1* x13. Definition P_id_ok (x12:Z) := 1* x12. Definition P_id_isNePal (x12:Z) := 0. Definition P_id_tt := 0. Definition P_id_i := 0. Definition P_id_nil := 0. Definition P_id_a := 0. Definition P_id_isNeList (x12:Z) := 0. Definition P_id_u := 0. Lemma P_id_active_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_active x13 <= P_id_active x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_proper_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_proper x13 <= P_id_proper x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_isQid_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_isQid x13 <= P_id_isQid x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_and_monotonic : forall x12 x14 x13 x15, (0 <= x15)/\ (x15 <= x14) -> (0 <= x13)/\ (x13 <= x12) ->P_id_and x13 x15 <= P_id_and x12 x14. Proof. intros x15 x14 x13 x12. intros [H_1 H_0]. intros [H_3 H_2]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_mark_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_mark x13 <= P_id_mark x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_top_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_top x13 <= P_id_top x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_isPal_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_isPal x13 <= P_id_isPal x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_isList_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_isList x13 <= P_id_isList x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id____monotonic : forall x12 x14 x13 x15, (0 <= x15)/\ (x15 <= x14) -> (0 <= x13)/\ (x13 <= x12) ->P_id___ x13 x15 <= P_id___ x12 x14. Proof. intros x15 x14 x13 x12. intros [H_1 H_0]. intros [H_3 H_2]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_ok_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_ok x13 <= P_id_ok x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_isNePal_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_isNePal x13 <= P_id_isNePal x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_isNeList_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_isNeList x13 <= P_id_isNeList x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_active_bounded : forall x12, (0 <= x12) ->0 <= P_id_active x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_proper_bounded : forall x12, (0 <= x12) ->0 <= P_id_proper x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_isQid_bounded : forall x12, (0 <= x12) ->0 <= P_id_isQid x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_and_bounded : forall x12 x13, (0 <= x12) ->(0 <= x13) ->0 <= P_id_and x13 x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_e_bounded : 0 <= P_id_e . Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_mark_bounded : forall x12, (0 <= x12) ->0 <= P_id_mark x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_top_bounded : forall x12, (0 <= x12) ->0 <= P_id_top x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_isPal_bounded : forall x12, (0 <= x12) ->0 <= P_id_isPal x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_isList_bounded : forall x12, (0 <= x12) ->0 <= P_id_isList x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_o_bounded : 0 <= P_id_o . Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id____bounded : forall x12 x13, (0 <= x12) ->(0 <= x13) ->0 <= P_id___ x13 x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_ok_bounded : forall x12, (0 <= x12) ->0 <= P_id_ok x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_isNePal_bounded : forall x12, (0 <= x12) ->0 <= P_id_isNePal x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_tt_bounded : 0 <= P_id_tt . Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_i_bounded : 0 <= P_id_i . Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_nil_bounded : 0 <= P_id_nil . Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_a_bounded : 0 <= P_id_a . Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_isNeList_bounded : forall x12, (0 <= x12) ->0 <= P_id_isNeList x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_u_bounded : 0 <= P_id_u . Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Definition measure := InterpZ.measure 0 P_id_active P_id_proper P_id_isQid P_id_and P_id_e P_id_mark P_id_top P_id_isPal P_id_isList P_id_o P_id___ P_id_ok P_id_isNePal P_id_tt P_id_i P_id_nil P_id_a P_id_isNeList P_id_u. Lemma measure_equation : forall t, measure t = match t with | (algebra.Alg.Term algebra.F.id_active (x12::nil)) => P_id_active (measure x12) | (algebra.Alg.Term algebra.F.id_proper (x12::nil)) => P_id_proper (measure x12) | (algebra.Alg.Term algebra.F.id_isQid (x12::nil)) => P_id_isQid (measure x12) | (algebra.Alg.Term algebra.F.id_and (x13::x12::nil)) => P_id_and (measure x13) (measure x12) | (algebra.Alg.Term algebra.F.id_e nil) => P_id_e | (algebra.Alg.Term algebra.F.id_mark (x12::nil)) => P_id_mark (measure x12) | (algebra.Alg.Term algebra.F.id_top (x12::nil)) => P_id_top (measure x12) | (algebra.Alg.Term algebra.F.id_isPal (x12::nil)) => P_id_isPal (measure x12) | (algebra.Alg.Term algebra.F.id_isList (x12::nil)) => P_id_isList (measure x12) | (algebra.Alg.Term algebra.F.id_o nil) => P_id_o | (algebra.Alg.Term algebra.F.id___ (x13::x12::nil)) => P_id___ (measure x13) (measure x12) | (algebra.Alg.Term algebra.F.id_ok (x12::nil)) => P_id_ok (measure x12) | (algebra.Alg.Term algebra.F.id_isNePal (x12::nil)) => P_id_isNePal (measure x12) | (algebra.Alg.Term algebra.F.id_tt nil) => P_id_tt | (algebra.Alg.Term algebra.F.id_i nil) => P_id_i | (algebra.Alg.Term algebra.F.id_nil nil) => P_id_nil | (algebra.Alg.Term algebra.F.id_a nil) => P_id_a | (algebra.Alg.Term algebra.F.id_isNeList (x12::nil)) => P_id_isNeList (measure x12) | (algebra.Alg.Term algebra.F.id_u nil) => P_id_u | _ => 0 end. Proof. intros t;case t;intros ;apply refl_equal. Qed. Lemma measure_bounded : forall t, 0 <= measure t. Proof. unfold measure in |-*. apply InterpZ.measure_bounded; cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Ltac generate_pos_hyp := match goal with | H:context [measure ?x] |- _ => let v := fresh "v" in (let H := fresh "h" in (set (H:=measure_bounded x) in *;set (v:=measure x) in *; clearbody H;clearbody v)) | |- context [measure ?x] => let v := fresh "v" in (let H := fresh "h" in (set (H:=measure_bounded x) in *;set (v:=measure x) in *; clearbody H;clearbody v)) end . Lemma rules_monotonic : forall l r, (algebra.EQT.axiom R_xml_0_deep_rew.R_xml_0_rules r l) -> measure r <= measure l. Proof. intros l r H. fold measure in |-*. inversion H;clear H;subst;inversion H0;clear H0;subst; simpl algebra.EQT.T.apply_subst in |-*; repeat ( match goal with | |- context [measure (algebra.Alg.Term ?f ?t)] => rewrite (measure_equation (algebra.Alg.Term f t)) end );repeat (generate_pos_hyp ); cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma measure_star_monotonic : forall l r, (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) r l) ->measure r <= measure l. Proof. unfold measure in *. apply InterpZ.measure_star_monotonic. intros ;apply P_id_active_monotonic;assumption. intros ;apply P_id_proper_monotonic;assumption. intros ;apply P_id_isQid_monotonic;assumption. intros ;apply P_id_and_monotonic;assumption. intros ;apply P_id_mark_monotonic;assumption. intros ;apply P_id_top_monotonic;assumption. intros ;apply P_id_isPal_monotonic;assumption. intros ;apply P_id_isList_monotonic;assumption. intros ;apply P_id____monotonic;assumption. intros ;apply P_id_ok_monotonic;assumption. intros ;apply P_id_isNePal_monotonic;assumption. intros ;apply P_id_isNeList_monotonic;assumption. intros ;apply P_id_active_bounded;assumption. intros ;apply P_id_proper_bounded;assumption. intros ;apply P_id_isQid_bounded;assumption. intros ;apply P_id_and_bounded;assumption. intros ;apply P_id_e_bounded;assumption. intros ;apply P_id_mark_bounded;assumption. intros ;apply P_id_top_bounded;assumption. intros ;apply P_id_isPal_bounded;assumption. intros ;apply P_id_isList_bounded;assumption. intros ;apply P_id_o_bounded;assumption. intros ;apply P_id____bounded;assumption. intros ;apply P_id_ok_bounded;assumption. intros ;apply P_id_isNePal_bounded;assumption. intros ;apply P_id_tt_bounded;assumption. intros ;apply P_id_i_bounded;assumption. intros ;apply P_id_nil_bounded;assumption. intros ;apply P_id_a_bounded;assumption. intros ;apply P_id_isNeList_bounded;assumption. intros ;apply P_id_u_bounded;assumption. apply rules_monotonic. Qed. Definition P_id_ISQID (x12:Z) := 0. Definition P_id____hat_1 (x12:Z) (x13:Z) := 3* x12 + 3* x13. Definition P_id_TOP (x12:Z) := 0. Definition P_id_ISNEPAL (x12:Z) := 0. Definition P_id_AND (x12:Z) (x13:Z) := 0. Definition P_id_ISPAL (x12:Z) := 0. Definition P_id_ISNELIST (x12:Z) := 0. Definition P_id_ACTIVE (x12:Z) := 0. Definition P_id_PROPER (x12:Z) := 0. Definition P_id_ISLIST (x12:Z) := 0. Lemma P_id_ISQID_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_ISQID x13 <= P_id_ISQID x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id____hat_1_monotonic : forall x12 x14 x13 x15, (0 <= x15)/\ (x15 <= x14) -> (0 <= x13)/\ (x13 <= x12) -> P_id____hat_1 x13 x15 <= P_id____hat_1 x12 x14. Proof. intros x15 x14 x13 x12. intros [H_1 H_0]. intros [H_3 H_2]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_TOP_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_TOP x13 <= P_id_TOP x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_ISNEPAL_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_ISNEPAL x13 <= P_id_ISNEPAL x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_AND_monotonic : forall x12 x14 x13 x15, (0 <= x15)/\ (x15 <= x14) -> (0 <= x13)/\ (x13 <= x12) ->P_id_AND x13 x15 <= P_id_AND x12 x14. Proof. intros x15 x14 x13 x12. intros [H_1 H_0]. intros [H_3 H_2]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_ISPAL_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_ISPAL x13 <= P_id_ISPAL x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_ISNELIST_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_ISNELIST x13 <= P_id_ISNELIST x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_ACTIVE_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_ACTIVE x13 <= P_id_ACTIVE x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_PROPER_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_PROPER x13 <= P_id_PROPER x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_ISLIST_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_ISLIST x13 <= P_id_ISLIST x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Definition marked_measure := InterpZ.marked_measure 0 P_id_active P_id_proper P_id_isQid P_id_and P_id_e P_id_mark P_id_top P_id_isPal P_id_isList P_id_o P_id___ P_id_ok P_id_isNePal P_id_tt P_id_i P_id_nil P_id_a P_id_isNeList P_id_u P_id_ISQID P_id____hat_1 P_id_TOP P_id_ISNEPAL P_id_AND P_id_ISPAL P_id_ISNELIST P_id_ACTIVE P_id_PROPER P_id_ISLIST. Lemma marked_measure_equation : forall t, marked_measure t = match t with | (algebra.Alg.Term algebra.F.id_isQid (x12::nil)) => P_id_ISQID (measure x12) | (algebra.Alg.Term algebra.F.id___ (x13:: x12::nil)) => P_id____hat_1 (measure x13) (measure x12) | (algebra.Alg.Term algebra.F.id_top (x12::nil)) => P_id_TOP (measure x12) | (algebra.Alg.Term algebra.F.id_isNePal (x12::nil)) => P_id_ISNEPAL (measure x12) | (algebra.Alg.Term algebra.F.id_and (x13:: x12::nil)) => P_id_AND (measure x13) (measure x12) | (algebra.Alg.Term algebra.F.id_isPal (x12::nil)) => P_id_ISPAL (measure x12) | (algebra.Alg.Term algebra.F.id_isNeList (x12::nil)) => P_id_ISNELIST (measure x12) | (algebra.Alg.Term algebra.F.id_active (x12::nil)) => P_id_ACTIVE (measure x12) | (algebra.Alg.Term algebra.F.id_proper (x12::nil)) => P_id_PROPER (measure x12) | (algebra.Alg.Term algebra.F.id_isList (x12::nil)) => P_id_ISLIST (measure x12) | _ => measure t end. Proof. reflexivity . Qed. Lemma marked_measure_star_monotonic : forall f l1 l2, (closure.refl_trans_clos (closure.one_step_list (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) ) l1 l2) -> marked_measure (algebra.Alg.Term f l1) <= marked_measure (algebra.Alg.Term f l2). Proof. unfold marked_measure in *. apply InterpZ.marked_measure_star_monotonic. intros ;apply P_id_active_monotonic;assumption. intros ;apply P_id_proper_monotonic;assumption. intros ;apply P_id_isQid_monotonic;assumption. intros ;apply P_id_and_monotonic;assumption. intros ;apply P_id_mark_monotonic;assumption. intros ;apply P_id_top_monotonic;assumption. intros ;apply P_id_isPal_monotonic;assumption. intros ;apply P_id_isList_monotonic;assumption. intros ;apply P_id____monotonic;assumption. intros ;apply P_id_ok_monotonic;assumption. intros ;apply P_id_isNePal_monotonic;assumption. intros ;apply P_id_isNeList_monotonic;assumption. intros ;apply P_id_active_bounded;assumption. intros ;apply P_id_proper_bounded;assumption. intros ;apply P_id_isQid_bounded;assumption. intros ;apply P_id_and_bounded;assumption. intros ;apply P_id_e_bounded;assumption. intros ;apply P_id_mark_bounded;assumption. intros ;apply P_id_top_bounded;assumption. intros ;apply P_id_isPal_bounded;assumption. intros ;apply P_id_isList_bounded;assumption. intros ;apply P_id_o_bounded;assumption. intros ;apply P_id____bounded;assumption. intros ;apply P_id_ok_bounded;assumption. intros ;apply P_id_isNePal_bounded;assumption. intros ;apply P_id_tt_bounded;assumption. intros ;apply P_id_i_bounded;assumption. intros ;apply P_id_nil_bounded;assumption. intros ;apply P_id_a_bounded;assumption. intros ;apply P_id_isNeList_bounded;assumption. intros ;apply P_id_u_bounded;assumption. apply rules_monotonic. intros ;apply P_id_ISQID_monotonic;assumption. intros ;apply P_id____hat_1_monotonic;assumption. intros ;apply P_id_TOP_monotonic;assumption. intros ;apply P_id_ISNEPAL_monotonic;assumption. intros ;apply P_id_AND_monotonic;assumption. intros ;apply P_id_ISPAL_monotonic;assumption. intros ;apply P_id_ISNELIST_monotonic;assumption. intros ;apply P_id_ACTIVE_monotonic;assumption. intros ;apply P_id_PROPER_monotonic;assumption. intros ;apply P_id_ISLIST_monotonic;assumption. Qed. Ltac rewrite_and_unfold := do 2 (rewrite marked_measure_equation); repeat ( match goal with | |- context [measure (algebra.Alg.Term ?f ?t)] => rewrite (measure_equation (algebra.Alg.Term f t)) | H:context [measure (algebra.Alg.Term ?f ?t)] |- _ => rewrite (measure_equation (algebra.Alg.Term f t)) in H|- end ). Definition lt a b := (Zwf.Zwf 0) (marked_measure a) (marked_measure b). Definition le a b := marked_measure a <= marked_measure b. Lemma lt_le_compat : forall a b c, (lt a b) ->(le b c) ->lt a c. Proof. unfold lt, le in *. intros a b c. apply (interp.le_lt_compat_right (interp.o_Z 0)). Qed. Lemma wf_lt : well_founded lt. Proof. unfold lt in *. apply Inverse_Image.wf_inverse_image with (B:=Z). apply Zwf.Zwf_well_founded. Qed. Lemma DP_R_xml_0_scc_13_strict_in_lt : Relation_Definitions.inclusion _ DP_R_xml_0_scc_13_strict lt. Proof. unfold Relation_Definitions.inclusion, lt in *. intros a b H;destruct H; match goal with | |- (Zwf.Zwf 0) _ (marked_measure (algebra.Alg.Term ?f ?l)) => let l'' := algebra.Alg_ext.find_replacement l in ((apply (interp.le_lt_compat_right (interp.o_Z 0)) with (marked_measure (algebra.Alg.Term f l''));[idtac| apply marked_measure_star_monotonic; repeat (apply algebra.EQT_ext.one_step_list_refl_trans_clos); (assumption)||(constructor 1)])) end ;clear ;rewrite_and_unfold ;repeat (generate_pos_hyp ); cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma DP_R_xml_0_scc_13_large_in_le : Relation_Definitions.inclusion _ DP_R_xml_0_scc_13_large le. Proof. unfold Relation_Definitions.inclusion, le, Zwf.Zwf in *. intros a b H;destruct H; match goal with | |- _ <= marked_measure (algebra.Alg.Term ?f ?l) => let l'' := algebra.Alg_ext.find_replacement l in ((apply (interp.le_trans (interp.o_Z 0)) with (marked_measure (algebra.Alg.Term f l''));[idtac| apply marked_measure_star_monotonic; repeat (apply algebra.EQT_ext.one_step_list_refl_trans_clos); (assumption)||(constructor 1)])) end ;clear ;rewrite_and_unfold ;repeat (generate_pos_hyp ); cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Definition wf_DP_R_xml_0_scc_13_large := WF_DP_R_xml_0_scc_13_large.wf. Lemma wf : well_founded WF_DP_R_xml_0.DP_R_xml_0_scc_13. Proof. intros x. apply (well_founded_ind wf_lt). clear x. intros x. pattern x. apply (@Acc_ind _ DP_R_xml_0_scc_13_large). clear x. intros x _ IHx IHx'. constructor. intros y H. destruct H; (apply IHx';apply DP_R_xml_0_scc_13_strict_in_lt; econstructor eassumption)|| ((apply IHx;[econstructor eassumption| intros y' Hlt;apply IHx';apply lt_le_compat with (1:=Hlt) ; apply DP_R_xml_0_scc_13_large_in_le;econstructor eassumption])). apply wf_DP_R_xml_0_scc_13_large. Qed. End WF_DP_R_xml_0_scc_13. Definition wf_DP_R_xml_0_scc_13 := WF_DP_R_xml_0_scc_13.wf. Lemma acc_DP_R_xml_0_scc_13 : forall x y, (DP_R_xml_0_scc_13 x y) ->Acc WF_R_xml_0_deep_rew.DP_R_xml_0 x. Proof. intros x. pattern x. apply (@Acc_ind _ DP_R_xml_0_scc_13). intros x' _ Hrec y h. inversion h;clear h;subst; constructor;intros _y _h;inversion _h;clear _h;subst; (eapply Hrec;econstructor eassumption)|| ((R_xml_0_deep_rew.impossible_star_reduction_R_xml_0 )|| (eapply Hrec;econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))). apply wf_DP_R_xml_0_scc_13. Qed. Inductive DP_R_xml_0_non_scc_14 : algebra.Alg.term ->algebra.Alg.term ->Prop := (* *) | DP_R_xml_0_non_scc_14_0 : forall x12 x10 x9, (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) (algebra.Alg.Term algebra.F.id___ (x9::x10::nil)) x12) -> DP_R_xml_0_non_scc_14 (algebra.Alg.Term algebra.F.id___ ((algebra.Alg.Term algebra.F.id_proper (x9::nil))::(algebra.Alg.Term algebra.F.id_proper (x10::nil))::nil)) (algebra.Alg.Term algebra.F.id_proper (x12::nil)) . Lemma acc_DP_R_xml_0_non_scc_14 : forall x y, (DP_R_xml_0_non_scc_14 x y) ->Acc WF_R_xml_0_deep_rew.DP_R_xml_0 x. Proof. intros x y h. inversion h;clear h;subst; constructor;intros _y _h;inversion _h;clear _h;subst; (eapply acc_DP_R_xml_0_scc_13; econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))|| ((R_xml_0_deep_rew.impossible_star_reduction_R_xml_0 )|| (eapply Hrec;econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))). Qed. Inductive DP_R_xml_0_scc_15 : algebra.Alg.term ->algebra.Alg.term ->Prop := (* *) | DP_R_xml_0_scc_15_0 : forall x12 x10 x9, (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) (algebra.Alg.Term algebra.F.id___ (x9::x10::nil)) x12) -> DP_R_xml_0_scc_15 (algebra.Alg.Term algebra.F.id_proper (x10::nil)) (algebra.Alg.Term algebra.F.id_proper (x12::nil)) (* *) | DP_R_xml_0_scc_15_1 : forall x12 x10 x9, (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) (algebra.Alg.Term algebra.F.id___ (x9::x10::nil)) x12) -> DP_R_xml_0_scc_15 (algebra.Alg.Term algebra.F.id_proper (x9::nil)) (algebra.Alg.Term algebra.F.id_proper (x12::nil)) (* *) | DP_R_xml_0_scc_15_2 : forall x12 x10 x9, (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) (algebra.Alg.Term algebra.F.id_and (x9::x10::nil)) x12) -> DP_R_xml_0_scc_15 (algebra.Alg.Term algebra.F.id_proper (x9::nil)) (algebra.Alg.Term algebra.F.id_proper (x12::nil)) (* *) | DP_R_xml_0_scc_15_3 : forall x12 x10 x9, (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) (algebra.Alg.Term algebra.F.id_and (x9::x10::nil)) x12) -> DP_R_xml_0_scc_15 (algebra.Alg.Term algebra.F.id_proper (x10::nil)) (algebra.Alg.Term algebra.F.id_proper (x12::nil)) (* *) | DP_R_xml_0_scc_15_4 : forall x12 x1, (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) (algebra.Alg.Term algebra.F.id_isList (x1::nil)) x12) -> DP_R_xml_0_scc_15 (algebra.Alg.Term algebra.F.id_proper (x1::nil)) (algebra.Alg.Term algebra.F.id_proper (x12::nil)) (* *) | DP_R_xml_0_scc_15_5 : forall x12 x1, (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) (algebra.Alg.Term algebra.F.id_isNeList (x1::nil)) x12) -> DP_R_xml_0_scc_15 (algebra.Alg.Term algebra.F.id_proper (x1::nil)) (algebra.Alg.Term algebra.F.id_proper (x12::nil)) (* *) | DP_R_xml_0_scc_15_6 : forall x12 x1, (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) (algebra.Alg.Term algebra.F.id_isQid (x1::nil)) x12) -> DP_R_xml_0_scc_15 (algebra.Alg.Term algebra.F.id_proper (x1::nil)) (algebra.Alg.Term algebra.F.id_proper (x12::nil)) (* *) | DP_R_xml_0_scc_15_7 : forall x12 x1, (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) (algebra.Alg.Term algebra.F.id_isNePal (x1::nil)) x12) -> DP_R_xml_0_scc_15 (algebra.Alg.Term algebra.F.id_proper (x1::nil)) (algebra.Alg.Term algebra.F.id_proper (x12::nil)) (* *) | DP_R_xml_0_scc_15_8 : forall x12 x1, (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) (algebra.Alg.Term algebra.F.id_isPal (x1::nil)) x12) -> DP_R_xml_0_scc_15 (algebra.Alg.Term algebra.F.id_proper (x1::nil)) (algebra.Alg.Term algebra.F.id_proper (x12::nil)) . Module WF_DP_R_xml_0_scc_15. Inductive DP_R_xml_0_scc_15_large : algebra.Alg.term ->algebra.Alg.term ->Prop := (* *) | DP_R_xml_0_scc_15_large_0 : forall x12 x10 x9, (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) (algebra.Alg.Term algebra.F.id___ (x9::x10::nil)) x12) -> DP_R_xml_0_scc_15_large (algebra.Alg.Term algebra.F.id_proper (x10::nil)) (algebra.Alg.Term algebra.F.id_proper (x12::nil)) (* *) | DP_R_xml_0_scc_15_large_1 : forall x12 x10 x9, (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) (algebra.Alg.Term algebra.F.id___ (x9::x10::nil)) x12) -> DP_R_xml_0_scc_15_large (algebra.Alg.Term algebra.F.id_proper (x9::nil)) (algebra.Alg.Term algebra.F.id_proper (x12::nil)) . Inductive DP_R_xml_0_scc_15_strict : algebra.Alg.term ->algebra.Alg.term ->Prop := (* *) | DP_R_xml_0_scc_15_strict_0 : forall x12 x10 x9, (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) (algebra.Alg.Term algebra.F.id_and (x9::x10::nil)) x12) -> DP_R_xml_0_scc_15_strict (algebra.Alg.Term algebra.F.id_proper (x9::nil)) (algebra.Alg.Term algebra.F.id_proper (x12::nil)) (* *) | DP_R_xml_0_scc_15_strict_1 : forall x12 x10 x9, (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) (algebra.Alg.Term algebra.F.id_and (x9::x10::nil)) x12) -> DP_R_xml_0_scc_15_strict (algebra.Alg.Term algebra.F.id_proper (x10::nil)) (algebra.Alg.Term algebra.F.id_proper (x12::nil)) (* *) | DP_R_xml_0_scc_15_strict_2 : forall x12 x1, (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) (algebra.Alg.Term algebra.F.id_isList (x1::nil)) x12) -> DP_R_xml_0_scc_15_strict (algebra.Alg.Term algebra.F.id_proper (x1::nil)) (algebra.Alg.Term algebra.F.id_proper (x12::nil)) (* *) | DP_R_xml_0_scc_15_strict_3 : forall x12 x1, (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) (algebra.Alg.Term algebra.F.id_isNeList (x1::nil)) x12) -> DP_R_xml_0_scc_15_strict (algebra.Alg.Term algebra.F.id_proper (x1::nil)) (algebra.Alg.Term algebra.F.id_proper (x12::nil)) (* *) | DP_R_xml_0_scc_15_strict_4 : forall x12 x1, (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) (algebra.Alg.Term algebra.F.id_isQid (x1::nil)) x12) -> DP_R_xml_0_scc_15_strict (algebra.Alg.Term algebra.F.id_proper (x1::nil)) (algebra.Alg.Term algebra.F.id_proper (x12::nil)) (* *) | DP_R_xml_0_scc_15_strict_5 : forall x12 x1, (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) (algebra.Alg.Term algebra.F.id_isNePal (x1::nil)) x12) -> DP_R_xml_0_scc_15_strict (algebra.Alg.Term algebra.F.id_proper (x1::nil)) (algebra.Alg.Term algebra.F.id_proper (x12::nil)) (* *) | DP_R_xml_0_scc_15_strict_6 : forall x12 x1, (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) (algebra.Alg.Term algebra.F.id_isPal (x1::nil)) x12) -> DP_R_xml_0_scc_15_strict (algebra.Alg.Term algebra.F.id_proper (x1::nil)) (algebra.Alg.Term algebra.F.id_proper (x12::nil)) . Module WF_DP_R_xml_0_scc_15_large. Open Scope Z_scope. Import ring_extention. Notation Local "a <= b" := (Zle a b). Notation Local "a < b" := (Zlt a b). Definition P_id_active (x12:Z) := 2* x12. Definition P_id_proper (x12:Z) := 1* x12. Definition P_id_isQid (x12:Z) := 3* x12. Definition P_id_and (x12:Z) (x13:Z) := 1* x12 + 3* x13. Definition P_id_e := 3. Definition P_id_mark (x12:Z) := 0. Definition P_id_top (x12:Z) := 0. Definition P_id_isPal (x12:Z) := 1* x12. Definition P_id_isList (x12:Z) := 2* x12. Definition P_id_o := 3. Definition P_id___ (x12:Z) (x13:Z) := 1 + 2* x12 + 1* x13. Definition P_id_ok (x12:Z) := 0. Definition P_id_isNePal (x12:Z) := 1* x12. Definition P_id_tt := 3. Definition P_id_i := 3. Definition P_id_nil := 0. Definition P_id_a := 3. Definition P_id_isNeList (x12:Z) := 0. Definition P_id_u := 3. Lemma P_id_active_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_active x13 <= P_id_active x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_proper_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_proper x13 <= P_id_proper x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_isQid_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_isQid x13 <= P_id_isQid x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_and_monotonic : forall x12 x14 x13 x15, (0 <= x15)/\ (x15 <= x14) -> (0 <= x13)/\ (x13 <= x12) ->P_id_and x13 x15 <= P_id_and x12 x14. Proof. intros x15 x14 x13 x12. intros [H_1 H_0]. intros [H_3 H_2]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_mark_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_mark x13 <= P_id_mark x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_top_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_top x13 <= P_id_top x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_isPal_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_isPal x13 <= P_id_isPal x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_isList_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_isList x13 <= P_id_isList x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id____monotonic : forall x12 x14 x13 x15, (0 <= x15)/\ (x15 <= x14) -> (0 <= x13)/\ (x13 <= x12) ->P_id___ x13 x15 <= P_id___ x12 x14. Proof. intros x15 x14 x13 x12. intros [H_1 H_0]. intros [H_3 H_2]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_ok_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_ok x13 <= P_id_ok x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_isNePal_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_isNePal x13 <= P_id_isNePal x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_isNeList_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_isNeList x13 <= P_id_isNeList x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_active_bounded : forall x12, (0 <= x12) ->0 <= P_id_active x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_proper_bounded : forall x12, (0 <= x12) ->0 <= P_id_proper x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_isQid_bounded : forall x12, (0 <= x12) ->0 <= P_id_isQid x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_and_bounded : forall x12 x13, (0 <= x12) ->(0 <= x13) ->0 <= P_id_and x13 x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_e_bounded : 0 <= P_id_e . Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_mark_bounded : forall x12, (0 <= x12) ->0 <= P_id_mark x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_top_bounded : forall x12, (0 <= x12) ->0 <= P_id_top x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_isPal_bounded : forall x12, (0 <= x12) ->0 <= P_id_isPal x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_isList_bounded : forall x12, (0 <= x12) ->0 <= P_id_isList x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_o_bounded : 0 <= P_id_o . Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id____bounded : forall x12 x13, (0 <= x12) ->(0 <= x13) ->0 <= P_id___ x13 x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_ok_bounded : forall x12, (0 <= x12) ->0 <= P_id_ok x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_isNePal_bounded : forall x12, (0 <= x12) ->0 <= P_id_isNePal x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_tt_bounded : 0 <= P_id_tt . Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_i_bounded : 0 <= P_id_i . Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_nil_bounded : 0 <= P_id_nil . Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_a_bounded : 0 <= P_id_a . Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_isNeList_bounded : forall x12, (0 <= x12) ->0 <= P_id_isNeList x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_u_bounded : 0 <= P_id_u . Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Definition measure := InterpZ.measure 0 P_id_active P_id_proper P_id_isQid P_id_and P_id_e P_id_mark P_id_top P_id_isPal P_id_isList P_id_o P_id___ P_id_ok P_id_isNePal P_id_tt P_id_i P_id_nil P_id_a P_id_isNeList P_id_u. Lemma measure_equation : forall t, measure t = match t with | (algebra.Alg.Term algebra.F.id_active (x12::nil)) => P_id_active (measure x12) | (algebra.Alg.Term algebra.F.id_proper (x12::nil)) => P_id_proper (measure x12) | (algebra.Alg.Term algebra.F.id_isQid (x12::nil)) => P_id_isQid (measure x12) | (algebra.Alg.Term algebra.F.id_and (x13::x12::nil)) => P_id_and (measure x13) (measure x12) | (algebra.Alg.Term algebra.F.id_e nil) => P_id_e | (algebra.Alg.Term algebra.F.id_mark (x12::nil)) => P_id_mark (measure x12) | (algebra.Alg.Term algebra.F.id_top (x12::nil)) => P_id_top (measure x12) | (algebra.Alg.Term algebra.F.id_isPal (x12::nil)) => P_id_isPal (measure x12) | (algebra.Alg.Term algebra.F.id_isList (x12::nil)) => P_id_isList (measure x12) | (algebra.Alg.Term algebra.F.id_o nil) => P_id_o | (algebra.Alg.Term algebra.F.id___ (x13::x12::nil)) => P_id___ (measure x13) (measure x12) | (algebra.Alg.Term algebra.F.id_ok (x12::nil)) => P_id_ok (measure x12) | (algebra.Alg.Term algebra.F.id_isNePal (x12::nil)) => P_id_isNePal (measure x12) | (algebra.Alg.Term algebra.F.id_tt nil) => P_id_tt | (algebra.Alg.Term algebra.F.id_i nil) => P_id_i | (algebra.Alg.Term algebra.F.id_nil nil) => P_id_nil | (algebra.Alg.Term algebra.F.id_a nil) => P_id_a | (algebra.Alg.Term algebra.F.id_isNeList (x12::nil)) => P_id_isNeList (measure x12) | (algebra.Alg.Term algebra.F.id_u nil) => P_id_u | _ => 0 end. Proof. intros t;case t;intros ;apply refl_equal. Qed. Lemma measure_bounded : forall t, 0 <= measure t. Proof. unfold measure in |-*. apply InterpZ.measure_bounded; cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Ltac generate_pos_hyp := match goal with | H:context [measure ?x] |- _ => let v := fresh "v" in (let H := fresh "h" in (set (H:=measure_bounded x) in *;set (v:=measure x) in *; clearbody H;clearbody v)) | |- context [measure ?x] => let v := fresh "v" in (let H := fresh "h" in (set (H:=measure_bounded x) in *;set (v:=measure x) in *; clearbody H;clearbody v)) end . Lemma rules_monotonic : forall l r, (algebra.EQT.axiom R_xml_0_deep_rew.R_xml_0_rules r l) -> measure r <= measure l. Proof. intros l r H. fold measure in |-*. inversion H;clear H;subst;inversion H0;clear H0;subst; simpl algebra.EQT.T.apply_subst in |-*; repeat ( match goal with | |- context [measure (algebra.Alg.Term ?f ?t)] => rewrite (measure_equation (algebra.Alg.Term f t)) end );repeat (generate_pos_hyp ); cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma measure_star_monotonic : forall l r, (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) r l) ->measure r <= measure l. Proof. unfold measure in *. apply InterpZ.measure_star_monotonic. intros ;apply P_id_active_monotonic;assumption. intros ;apply P_id_proper_monotonic;assumption. intros ;apply P_id_isQid_monotonic;assumption. intros ;apply P_id_and_monotonic;assumption. intros ;apply P_id_mark_monotonic;assumption. intros ;apply P_id_top_monotonic;assumption. intros ;apply P_id_isPal_monotonic;assumption. intros ;apply P_id_isList_monotonic;assumption. intros ;apply P_id____monotonic;assumption. intros ;apply P_id_ok_monotonic;assumption. intros ;apply P_id_isNePal_monotonic;assumption. intros ;apply P_id_isNeList_monotonic;assumption. intros ;apply P_id_active_bounded;assumption. intros ;apply P_id_proper_bounded;assumption. intros ;apply P_id_isQid_bounded;assumption. intros ;apply P_id_and_bounded;assumption. intros ;apply P_id_e_bounded;assumption. intros ;apply P_id_mark_bounded;assumption. intros ;apply P_id_top_bounded;assumption. intros ;apply P_id_isPal_bounded;assumption. intros ;apply P_id_isList_bounded;assumption. intros ;apply P_id_o_bounded;assumption. intros ;apply P_id____bounded;assumption. intros ;apply P_id_ok_bounded;assumption. intros ;apply P_id_isNePal_bounded;assumption. intros ;apply P_id_tt_bounded;assumption. intros ;apply P_id_i_bounded;assumption. intros ;apply P_id_nil_bounded;assumption. intros ;apply P_id_a_bounded;assumption. intros ;apply P_id_isNeList_bounded;assumption. intros ;apply P_id_u_bounded;assumption. apply rules_monotonic. Qed. Definition P_id_ISQID (x12:Z) := 0. Definition P_id____hat_1 (x12:Z) (x13:Z) := 0. Definition P_id_TOP (x12:Z) := 0. Definition P_id_ISNEPAL (x12:Z) := 0. Definition P_id_AND (x12:Z) (x13:Z) := 0. Definition P_id_ISPAL (x12:Z) := 0. Definition P_id_ISNELIST (x12:Z) := 0. Definition P_id_ACTIVE (x12:Z) := 0. Definition P_id_PROPER (x12:Z) := 2* x12. Definition P_id_ISLIST (x12:Z) := 0. Lemma P_id_ISQID_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_ISQID x13 <= P_id_ISQID x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id____hat_1_monotonic : forall x12 x14 x13 x15, (0 <= x15)/\ (x15 <= x14) -> (0 <= x13)/\ (x13 <= x12) -> P_id____hat_1 x13 x15 <= P_id____hat_1 x12 x14. Proof. intros x15 x14 x13 x12. intros [H_1 H_0]. intros [H_3 H_2]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_TOP_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_TOP x13 <= P_id_TOP x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_ISNEPAL_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_ISNEPAL x13 <= P_id_ISNEPAL x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_AND_monotonic : forall x12 x14 x13 x15, (0 <= x15)/\ (x15 <= x14) -> (0 <= x13)/\ (x13 <= x12) ->P_id_AND x13 x15 <= P_id_AND x12 x14. Proof. intros x15 x14 x13 x12. intros [H_1 H_0]. intros [H_3 H_2]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_ISPAL_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_ISPAL x13 <= P_id_ISPAL x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_ISNELIST_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_ISNELIST x13 <= P_id_ISNELIST x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_ACTIVE_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_ACTIVE x13 <= P_id_ACTIVE x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_PROPER_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_PROPER x13 <= P_id_PROPER x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_ISLIST_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_ISLIST x13 <= P_id_ISLIST x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Definition marked_measure := InterpZ.marked_measure 0 P_id_active P_id_proper P_id_isQid P_id_and P_id_e P_id_mark P_id_top P_id_isPal P_id_isList P_id_o P_id___ P_id_ok P_id_isNePal P_id_tt P_id_i P_id_nil P_id_a P_id_isNeList P_id_u P_id_ISQID P_id____hat_1 P_id_TOP P_id_ISNEPAL P_id_AND P_id_ISPAL P_id_ISNELIST P_id_ACTIVE P_id_PROPER P_id_ISLIST. Lemma marked_measure_equation : forall t, marked_measure t = match t with | (algebra.Alg.Term algebra.F.id_isQid (x12::nil)) => P_id_ISQID (measure x12) | (algebra.Alg.Term algebra.F.id___ (x13:: x12::nil)) => P_id____hat_1 (measure x13) (measure x12) | (algebra.Alg.Term algebra.F.id_top (x12::nil)) => P_id_TOP (measure x12) | (algebra.Alg.Term algebra.F.id_isNePal (x12::nil)) => P_id_ISNEPAL (measure x12) | (algebra.Alg.Term algebra.F.id_and (x13:: x12::nil)) => P_id_AND (measure x13) (measure x12) | (algebra.Alg.Term algebra.F.id_isPal (x12::nil)) => P_id_ISPAL (measure x12) | (algebra.Alg.Term algebra.F.id_isNeList (x12::nil)) => P_id_ISNELIST (measure x12) | (algebra.Alg.Term algebra.F.id_active (x12::nil)) => P_id_ACTIVE (measure x12) | (algebra.Alg.Term algebra.F.id_proper (x12::nil)) => P_id_PROPER (measure x12) | (algebra.Alg.Term algebra.F.id_isList (x12::nil)) => P_id_ISLIST (measure x12) | _ => measure t end. Proof. reflexivity . Qed. Lemma marked_measure_star_monotonic : forall f l1 l2, (closure.refl_trans_clos (closure.one_step_list (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) ) l1 l2) -> marked_measure (algebra.Alg.Term f l1) <= marked_measure (algebra.Alg.Term f l2). Proof. unfold marked_measure in *. apply InterpZ.marked_measure_star_monotonic. intros ;apply P_id_active_monotonic;assumption. intros ;apply P_id_proper_monotonic;assumption. intros ;apply P_id_isQid_monotonic;assumption. intros ;apply P_id_and_monotonic;assumption. intros ;apply P_id_mark_monotonic;assumption. intros ;apply P_id_top_monotonic;assumption. intros ;apply P_id_isPal_monotonic;assumption. intros ;apply P_id_isList_monotonic;assumption. intros ;apply P_id____monotonic;assumption. intros ;apply P_id_ok_monotonic;assumption. intros ;apply P_id_isNePal_monotonic;assumption. intros ;apply P_id_isNeList_monotonic;assumption. intros ;apply P_id_active_bounded;assumption. intros ;apply P_id_proper_bounded;assumption. intros ;apply P_id_isQid_bounded;assumption. intros ;apply P_id_and_bounded;assumption. intros ;apply P_id_e_bounded;assumption. intros ;apply P_id_mark_bounded;assumption. intros ;apply P_id_top_bounded;assumption. intros ;apply P_id_isPal_bounded;assumption. intros ;apply P_id_isList_bounded;assumption. intros ;apply P_id_o_bounded;assumption. intros ;apply P_id____bounded;assumption. intros ;apply P_id_ok_bounded;assumption. intros ;apply P_id_isNePal_bounded;assumption. intros ;apply P_id_tt_bounded;assumption. intros ;apply P_id_i_bounded;assumption. intros ;apply P_id_nil_bounded;assumption. intros ;apply P_id_a_bounded;assumption. intros ;apply P_id_isNeList_bounded;assumption. intros ;apply P_id_u_bounded;assumption. apply rules_monotonic. intros ;apply P_id_ISQID_monotonic;assumption. intros ;apply P_id____hat_1_monotonic;assumption. intros ;apply P_id_TOP_monotonic;assumption. intros ;apply P_id_ISNEPAL_monotonic;assumption. intros ;apply P_id_AND_monotonic;assumption. intros ;apply P_id_ISPAL_monotonic;assumption. intros ;apply P_id_ISNELIST_monotonic;assumption. intros ;apply P_id_ACTIVE_monotonic;assumption. intros ;apply P_id_PROPER_monotonic;assumption. intros ;apply P_id_ISLIST_monotonic;assumption. Qed. Ltac rewrite_and_unfold := do 2 (rewrite marked_measure_equation); repeat ( match goal with | |- context [measure (algebra.Alg.Term ?f ?t)] => rewrite (measure_equation (algebra.Alg.Term f t)) | H:context [measure (algebra.Alg.Term ?f ?t)] |- _ => rewrite (measure_equation (algebra.Alg.Term f t)) in H|- end ). Lemma wf : well_founded WF_DP_R_xml_0_scc_15.DP_R_xml_0_scc_15_large. Proof. intros x. apply well_founded_ind with (R:=fun x y => (Zwf.Zwf 0) (marked_measure x) (marked_measure y)). apply Inverse_Image.wf_inverse_image with (B:=Z). apply Zwf.Zwf_well_founded. clear x. intros x IHx. repeat ( constructor;inversion 1;subst; full_prove_ineq algebra.Alg.Term ltac:(algebra.Alg_ext.find_replacement ) algebra.EQT_ext.one_step_list_refl_trans_clos marked_measure marked_measure_star_monotonic (Zwf.Zwf 0) (interp.o_Z 0) ltac:(fun _ => R_xml_0_deep_rew.impossible_star_reduction_R_xml_0 ) ltac:(fun _ => rewrite_and_unfold ) ltac:(fun _ => generate_pos_hyp ) ltac:(fun _ => cbv beta iota zeta delta - [Zplus Zmult Zle Zlt] in * ; try (constructor)) IHx ). Qed. End WF_DP_R_xml_0_scc_15_large. Open Scope Z_scope. Import ring_extention. Notation Local "a <= b" := (Zle a b). Notation Local "a < b" := (Zlt a b). Definition P_id_active (x12:Z) := 2* x12. Definition P_id_proper (x12:Z) := 1* x12. Definition P_id_isQid (x12:Z) := 1 + 1* x12. Definition P_id_and (x12:Z) (x13:Z) := 1 + 1* x12 + 2* x13. Definition P_id_e := 3. Definition P_id_mark (x12:Z) := 0. Definition P_id_top (x12:Z) := 0. Definition P_id_isPal (x12:Z) := 1 + 1* x12. Definition P_id_isList (x12:Z) := 3 + 1* x12. Definition P_id_o := 3. Definition P_id___ (x12:Z) (x13:Z) := 2* x12 + 1* x13. Definition P_id_ok (x12:Z) := 0. Definition P_id_isNePal (x12:Z) := 1 + 2* x12. Definition P_id_tt := 0. Definition P_id_i := 3. Definition P_id_nil := 3. Definition P_id_a := 3. Definition P_id_isNeList (x12:Z) := 3 + 1* x12. Definition P_id_u := 1. Lemma P_id_active_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_active x13 <= P_id_active x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_proper_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_proper x13 <= P_id_proper x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_isQid_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_isQid x13 <= P_id_isQid x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_and_monotonic : forall x12 x14 x13 x15, (0 <= x15)/\ (x15 <= x14) -> (0 <= x13)/\ (x13 <= x12) ->P_id_and x13 x15 <= P_id_and x12 x14. Proof. intros x15 x14 x13 x12. intros [H_1 H_0]. intros [H_3 H_2]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_mark_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_mark x13 <= P_id_mark x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_top_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_top x13 <= P_id_top x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_isPal_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_isPal x13 <= P_id_isPal x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_isList_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_isList x13 <= P_id_isList x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id____monotonic : forall x12 x14 x13 x15, (0 <= x15)/\ (x15 <= x14) -> (0 <= x13)/\ (x13 <= x12) ->P_id___ x13 x15 <= P_id___ x12 x14. Proof. intros x15 x14 x13 x12. intros [H_1 H_0]. intros [H_3 H_2]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_ok_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_ok x13 <= P_id_ok x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_isNePal_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_isNePal x13 <= P_id_isNePal x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_isNeList_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_isNeList x13 <= P_id_isNeList x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_active_bounded : forall x12, (0 <= x12) ->0 <= P_id_active x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_proper_bounded : forall x12, (0 <= x12) ->0 <= P_id_proper x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_isQid_bounded : forall x12, (0 <= x12) ->0 <= P_id_isQid x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_and_bounded : forall x12 x13, (0 <= x12) ->(0 <= x13) ->0 <= P_id_and x13 x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_e_bounded : 0 <= P_id_e . Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_mark_bounded : forall x12, (0 <= x12) ->0 <= P_id_mark x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_top_bounded : forall x12, (0 <= x12) ->0 <= P_id_top x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_isPal_bounded : forall x12, (0 <= x12) ->0 <= P_id_isPal x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_isList_bounded : forall x12, (0 <= x12) ->0 <= P_id_isList x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_o_bounded : 0 <= P_id_o . Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id____bounded : forall x12 x13, (0 <= x12) ->(0 <= x13) ->0 <= P_id___ x13 x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_ok_bounded : forall x12, (0 <= x12) ->0 <= P_id_ok x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_isNePal_bounded : forall x12, (0 <= x12) ->0 <= P_id_isNePal x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_tt_bounded : 0 <= P_id_tt . Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_i_bounded : 0 <= P_id_i . Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_nil_bounded : 0 <= P_id_nil . Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_a_bounded : 0 <= P_id_a . Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_isNeList_bounded : forall x12, (0 <= x12) ->0 <= P_id_isNeList x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_u_bounded : 0 <= P_id_u . Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Definition measure := InterpZ.measure 0 P_id_active P_id_proper P_id_isQid P_id_and P_id_e P_id_mark P_id_top P_id_isPal P_id_isList P_id_o P_id___ P_id_ok P_id_isNePal P_id_tt P_id_i P_id_nil P_id_a P_id_isNeList P_id_u. Lemma measure_equation : forall t, measure t = match t with | (algebra.Alg.Term algebra.F.id_active (x12::nil)) => P_id_active (measure x12) | (algebra.Alg.Term algebra.F.id_proper (x12::nil)) => P_id_proper (measure x12) | (algebra.Alg.Term algebra.F.id_isQid (x12::nil)) => P_id_isQid (measure x12) | (algebra.Alg.Term algebra.F.id_and (x13::x12::nil)) => P_id_and (measure x13) (measure x12) | (algebra.Alg.Term algebra.F.id_e nil) => P_id_e | (algebra.Alg.Term algebra.F.id_mark (x12::nil)) => P_id_mark (measure x12) | (algebra.Alg.Term algebra.F.id_top (x12::nil)) => P_id_top (measure x12) | (algebra.Alg.Term algebra.F.id_isPal (x12::nil)) => P_id_isPal (measure x12) | (algebra.Alg.Term algebra.F.id_isList (x12::nil)) => P_id_isList (measure x12) | (algebra.Alg.Term algebra.F.id_o nil) => P_id_o | (algebra.Alg.Term algebra.F.id___ (x13::x12::nil)) => P_id___ (measure x13) (measure x12) | (algebra.Alg.Term algebra.F.id_ok (x12::nil)) => P_id_ok (measure x12) | (algebra.Alg.Term algebra.F.id_isNePal (x12::nil)) => P_id_isNePal (measure x12) | (algebra.Alg.Term algebra.F.id_tt nil) => P_id_tt | (algebra.Alg.Term algebra.F.id_i nil) => P_id_i | (algebra.Alg.Term algebra.F.id_nil nil) => P_id_nil | (algebra.Alg.Term algebra.F.id_a nil) => P_id_a | (algebra.Alg.Term algebra.F.id_isNeList (x12::nil)) => P_id_isNeList (measure x12) | (algebra.Alg.Term algebra.F.id_u nil) => P_id_u | _ => 0 end. Proof. intros t;case t;intros ;apply refl_equal. Qed. Lemma measure_bounded : forall t, 0 <= measure t. Proof. unfold measure in |-*. apply InterpZ.measure_bounded; cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Ltac generate_pos_hyp := match goal with | H:context [measure ?x] |- _ => let v := fresh "v" in (let H := fresh "h" in (set (H:=measure_bounded x) in *;set (v:=measure x) in *; clearbody H;clearbody v)) | |- context [measure ?x] => let v := fresh "v" in (let H := fresh "h" in (set (H:=measure_bounded x) in *;set (v:=measure x) in *; clearbody H;clearbody v)) end . Lemma rules_monotonic : forall l r, (algebra.EQT.axiom R_xml_0_deep_rew.R_xml_0_rules r l) -> measure r <= measure l. Proof. intros l r H. fold measure in |-*. inversion H;clear H;subst;inversion H0;clear H0;subst; simpl algebra.EQT.T.apply_subst in |-*; repeat ( match goal with | |- context [measure (algebra.Alg.Term ?f ?t)] => rewrite (measure_equation (algebra.Alg.Term f t)) end );repeat (generate_pos_hyp ); cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma measure_star_monotonic : forall l r, (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) r l) ->measure r <= measure l. Proof. unfold measure in *. apply InterpZ.measure_star_monotonic. intros ;apply P_id_active_monotonic;assumption. intros ;apply P_id_proper_monotonic;assumption. intros ;apply P_id_isQid_monotonic;assumption. intros ;apply P_id_and_monotonic;assumption. intros ;apply P_id_mark_monotonic;assumption. intros ;apply P_id_top_monotonic;assumption. intros ;apply P_id_isPal_monotonic;assumption. intros ;apply P_id_isList_monotonic;assumption. intros ;apply P_id____monotonic;assumption. intros ;apply P_id_ok_monotonic;assumption. intros ;apply P_id_isNePal_monotonic;assumption. intros ;apply P_id_isNeList_monotonic;assumption. intros ;apply P_id_active_bounded;assumption. intros ;apply P_id_proper_bounded;assumption. intros ;apply P_id_isQid_bounded;assumption. intros ;apply P_id_and_bounded;assumption. intros ;apply P_id_e_bounded;assumption. intros ;apply P_id_mark_bounded;assumption. intros ;apply P_id_top_bounded;assumption. intros ;apply P_id_isPal_bounded;assumption. intros ;apply P_id_isList_bounded;assumption. intros ;apply P_id_o_bounded;assumption. intros ;apply P_id____bounded;assumption. intros ;apply P_id_ok_bounded;assumption. intros ;apply P_id_isNePal_bounded;assumption. intros ;apply P_id_tt_bounded;assumption. intros ;apply P_id_i_bounded;assumption. intros ;apply P_id_nil_bounded;assumption. intros ;apply P_id_a_bounded;assumption. intros ;apply P_id_isNeList_bounded;assumption. intros ;apply P_id_u_bounded;assumption. apply rules_monotonic. Qed. Definition P_id_ISQID (x12:Z) := 0. Definition P_id____hat_1 (x12:Z) (x13:Z) := 0. Definition P_id_TOP (x12:Z) := 0. Definition P_id_ISNEPAL (x12:Z) := 0. Definition P_id_AND (x12:Z) (x13:Z) := 0. Definition P_id_ISPAL (x12:Z) := 0. Definition P_id_ISNELIST (x12:Z) := 0. Definition P_id_ACTIVE (x12:Z) := 0. Definition P_id_PROPER (x12:Z) := 1* x12. Definition P_id_ISLIST (x12:Z) := 0. Lemma P_id_ISQID_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_ISQID x13 <= P_id_ISQID x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id____hat_1_monotonic : forall x12 x14 x13 x15, (0 <= x15)/\ (x15 <= x14) -> (0 <= x13)/\ (x13 <= x12) -> P_id____hat_1 x13 x15 <= P_id____hat_1 x12 x14. Proof. intros x15 x14 x13 x12. intros [H_1 H_0]. intros [H_3 H_2]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_TOP_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_TOP x13 <= P_id_TOP x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_ISNEPAL_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_ISNEPAL x13 <= P_id_ISNEPAL x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_AND_monotonic : forall x12 x14 x13 x15, (0 <= x15)/\ (x15 <= x14) -> (0 <= x13)/\ (x13 <= x12) ->P_id_AND x13 x15 <= P_id_AND x12 x14. Proof. intros x15 x14 x13 x12. intros [H_1 H_0]. intros [H_3 H_2]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_ISPAL_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_ISPAL x13 <= P_id_ISPAL x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_ISNELIST_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_ISNELIST x13 <= P_id_ISNELIST x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_ACTIVE_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_ACTIVE x13 <= P_id_ACTIVE x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_PROPER_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_PROPER x13 <= P_id_PROPER x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_ISLIST_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_ISLIST x13 <= P_id_ISLIST x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Definition marked_measure := InterpZ.marked_measure 0 P_id_active P_id_proper P_id_isQid P_id_and P_id_e P_id_mark P_id_top P_id_isPal P_id_isList P_id_o P_id___ P_id_ok P_id_isNePal P_id_tt P_id_i P_id_nil P_id_a P_id_isNeList P_id_u P_id_ISQID P_id____hat_1 P_id_TOP P_id_ISNEPAL P_id_AND P_id_ISPAL P_id_ISNELIST P_id_ACTIVE P_id_PROPER P_id_ISLIST. Lemma marked_measure_equation : forall t, marked_measure t = match t with | (algebra.Alg.Term algebra.F.id_isQid (x12::nil)) => P_id_ISQID (measure x12) | (algebra.Alg.Term algebra.F.id___ (x13:: x12::nil)) => P_id____hat_1 (measure x13) (measure x12) | (algebra.Alg.Term algebra.F.id_top (x12::nil)) => P_id_TOP (measure x12) | (algebra.Alg.Term algebra.F.id_isNePal (x12::nil)) => P_id_ISNEPAL (measure x12) | (algebra.Alg.Term algebra.F.id_and (x13:: x12::nil)) => P_id_AND (measure x13) (measure x12) | (algebra.Alg.Term algebra.F.id_isPal (x12::nil)) => P_id_ISPAL (measure x12) | (algebra.Alg.Term algebra.F.id_isNeList (x12::nil)) => P_id_ISNELIST (measure x12) | (algebra.Alg.Term algebra.F.id_active (x12::nil)) => P_id_ACTIVE (measure x12) | (algebra.Alg.Term algebra.F.id_proper (x12::nil)) => P_id_PROPER (measure x12) | (algebra.Alg.Term algebra.F.id_isList (x12::nil)) => P_id_ISLIST (measure x12) | _ => measure t end. Proof. reflexivity . Qed. Lemma marked_measure_star_monotonic : forall f l1 l2, (closure.refl_trans_clos (closure.one_step_list (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) ) l1 l2) -> marked_measure (algebra.Alg.Term f l1) <= marked_measure (algebra.Alg.Term f l2). Proof. unfold marked_measure in *. apply InterpZ.marked_measure_star_monotonic. intros ;apply P_id_active_monotonic;assumption. intros ;apply P_id_proper_monotonic;assumption. intros ;apply P_id_isQid_monotonic;assumption. intros ;apply P_id_and_monotonic;assumption. intros ;apply P_id_mark_monotonic;assumption. intros ;apply P_id_top_monotonic;assumption. intros ;apply P_id_isPal_monotonic;assumption. intros ;apply P_id_isList_monotonic;assumption. intros ;apply P_id____monotonic;assumption. intros ;apply P_id_ok_monotonic;assumption. intros ;apply P_id_isNePal_monotonic;assumption. intros ;apply P_id_isNeList_monotonic;assumption. intros ;apply P_id_active_bounded;assumption. intros ;apply P_id_proper_bounded;assumption. intros ;apply P_id_isQid_bounded;assumption. intros ;apply P_id_and_bounded;assumption. intros ;apply P_id_e_bounded;assumption. intros ;apply P_id_mark_bounded;assumption. intros ;apply P_id_top_bounded;assumption. intros ;apply P_id_isPal_bounded;assumption. intros ;apply P_id_isList_bounded;assumption. intros ;apply P_id_o_bounded;assumption. intros ;apply P_id____bounded;assumption. intros ;apply P_id_ok_bounded;assumption. intros ;apply P_id_isNePal_bounded;assumption. intros ;apply P_id_tt_bounded;assumption. intros ;apply P_id_i_bounded;assumption. intros ;apply P_id_nil_bounded;assumption. intros ;apply P_id_a_bounded;assumption. intros ;apply P_id_isNeList_bounded;assumption. intros ;apply P_id_u_bounded;assumption. apply rules_monotonic. intros ;apply P_id_ISQID_monotonic;assumption. intros ;apply P_id____hat_1_monotonic;assumption. intros ;apply P_id_TOP_monotonic;assumption. intros ;apply P_id_ISNEPAL_monotonic;assumption. intros ;apply P_id_AND_monotonic;assumption. intros ;apply P_id_ISPAL_monotonic;assumption. intros ;apply P_id_ISNELIST_monotonic;assumption. intros ;apply P_id_ACTIVE_monotonic;assumption. intros ;apply P_id_PROPER_monotonic;assumption. intros ;apply P_id_ISLIST_monotonic;assumption. Qed. Ltac rewrite_and_unfold := do 2 (rewrite marked_measure_equation); repeat ( match goal with | |- context [measure (algebra.Alg.Term ?f ?t)] => rewrite (measure_equation (algebra.Alg.Term f t)) | H:context [measure (algebra.Alg.Term ?f ?t)] |- _ => rewrite (measure_equation (algebra.Alg.Term f t)) in H|- end ). Definition lt a b := (Zwf.Zwf 0) (marked_measure a) (marked_measure b). Definition le a b := marked_measure a <= marked_measure b. Lemma lt_le_compat : forall a b c, (lt a b) ->(le b c) ->lt a c. Proof. unfold lt, le in *. intros a b c. apply (interp.le_lt_compat_right (interp.o_Z 0)). Qed. Lemma wf_lt : well_founded lt. Proof. unfold lt in *. apply Inverse_Image.wf_inverse_image with (B:=Z). apply Zwf.Zwf_well_founded. Qed. Lemma DP_R_xml_0_scc_15_strict_in_lt : Relation_Definitions.inclusion _ DP_R_xml_0_scc_15_strict lt. Proof. unfold Relation_Definitions.inclusion, lt in *. intros a b H;destruct H; match goal with | |- (Zwf.Zwf 0) _ (marked_measure (algebra.Alg.Term ?f ?l)) => let l'' := algebra.Alg_ext.find_replacement l in ((apply (interp.le_lt_compat_right (interp.o_Z 0)) with (marked_measure (algebra.Alg.Term f l''));[idtac| apply marked_measure_star_monotonic; repeat (apply algebra.EQT_ext.one_step_list_refl_trans_clos); (assumption)||(constructor 1)])) end ;clear ;rewrite_and_unfold ;repeat (generate_pos_hyp ); cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma DP_R_xml_0_scc_15_large_in_le : Relation_Definitions.inclusion _ DP_R_xml_0_scc_15_large le. Proof. unfold Relation_Definitions.inclusion, le, Zwf.Zwf in *. intros a b H;destruct H; match goal with | |- _ <= marked_measure (algebra.Alg.Term ?f ?l) => let l'' := algebra.Alg_ext.find_replacement l in ((apply (interp.le_trans (interp.o_Z 0)) with (marked_measure (algebra.Alg.Term f l''));[idtac| apply marked_measure_star_monotonic; repeat (apply algebra.EQT_ext.one_step_list_refl_trans_clos); (assumption)||(constructor 1)])) end ;clear ;rewrite_and_unfold ;repeat (generate_pos_hyp ); cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Definition wf_DP_R_xml_0_scc_15_large := WF_DP_R_xml_0_scc_15_large.wf. Lemma wf : well_founded WF_DP_R_xml_0.DP_R_xml_0_scc_15. Proof. intros x. apply (well_founded_ind wf_lt). clear x. intros x. pattern x. apply (@Acc_ind _ DP_R_xml_0_scc_15_large). clear x. intros x _ IHx IHx'. constructor. intros y H. destruct H; (apply IHx';apply DP_R_xml_0_scc_15_strict_in_lt; econstructor eassumption)|| ((apply IHx;[econstructor eassumption| intros y' Hlt;apply IHx';apply lt_le_compat with (1:=Hlt) ; apply DP_R_xml_0_scc_15_large_in_le;econstructor eassumption])). apply wf_DP_R_xml_0_scc_15_large. Qed. End WF_DP_R_xml_0_scc_15. Definition wf_DP_R_xml_0_scc_15 := WF_DP_R_xml_0_scc_15.wf. Lemma acc_DP_R_xml_0_scc_15 : forall x y, (DP_R_xml_0_scc_15 x y) ->Acc WF_R_xml_0_deep_rew.DP_R_xml_0 x. Proof. intros x. pattern x. apply (@Acc_ind _ DP_R_xml_0_scc_15). intros x' _ Hrec y h. inversion h;clear h;subst; constructor;intros _y _h;inversion _h;clear _h;subst; (eapply Hrec;econstructor eassumption)|| ((eapply acc_DP_R_xml_0_non_scc_14; econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))|| ((eapply acc_DP_R_xml_0_non_scc_12; econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))|| ((eapply acc_DP_R_xml_0_non_scc_10; econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))|| ((eapply acc_DP_R_xml_0_non_scc_9; econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))|| ((eapply acc_DP_R_xml_0_non_scc_8; econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))|| ((eapply acc_DP_R_xml_0_non_scc_7; econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))|| ((eapply acc_DP_R_xml_0_non_scc_6; econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))|| ((R_xml_0_deep_rew.impossible_star_reduction_R_xml_0 )|| (eapply Hrec; econstructor (eassumption)||(algebra.Alg_ext.star_refl' )))))))))). apply wf_DP_R_xml_0_scc_15. Qed. Inductive DP_R_xml_0_non_scc_16 : algebra.Alg.term ->algebra.Alg.term ->Prop := (* *) | DP_R_xml_0_non_scc_16_0 : forall x12 x1, (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) (algebra.Alg.Term algebra.F.id_mark (x1::nil)) x12) -> DP_R_xml_0_non_scc_16 (algebra.Alg.Term algebra.F.id_proper (x1::nil)) (algebra.Alg.Term algebra.F.id_top (x12::nil)) . Lemma acc_DP_R_xml_0_non_scc_16 : forall x y, (DP_R_xml_0_non_scc_16 x y) ->Acc WF_R_xml_0_deep_rew.DP_R_xml_0 x. Proof. intros x y h. inversion h;clear h;subst; constructor;intros _y _h;inversion _h;clear _h;subst; (eapply acc_DP_R_xml_0_scc_15; econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))|| ((eapply acc_DP_R_xml_0_non_scc_14; econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))|| ((eapply acc_DP_R_xml_0_non_scc_12; econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))|| ((eapply acc_DP_R_xml_0_non_scc_10; econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))|| ((eapply acc_DP_R_xml_0_non_scc_9; econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))|| ((eapply acc_DP_R_xml_0_non_scc_8; econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))|| ((eapply acc_DP_R_xml_0_non_scc_7; econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))|| ((eapply acc_DP_R_xml_0_non_scc_6; econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))|| ((R_xml_0_deep_rew.impossible_star_reduction_R_xml_0 )|| (eapply Hrec; econstructor (eassumption)||(algebra.Alg_ext.star_refl' )))))))))). Qed. Inductive DP_R_xml_0_non_scc_17 : algebra.Alg.term ->algebra.Alg.term ->Prop := (* *) | DP_R_xml_0_non_scc_17_0 : forall x12 x10 x9, (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) (algebra.Alg.Term algebra.F.id_and (x9::x10::nil)) x12) -> DP_R_xml_0_non_scc_17 (algebra.Alg.Term algebra.F.id_and ((algebra.Alg.Term algebra.F.id_active (x9::nil))::x10::nil)) (algebra.Alg.Term algebra.F.id_active (x12::nil)) . Lemma acc_DP_R_xml_0_non_scc_17 : forall x y, (DP_R_xml_0_non_scc_17 x y) ->Acc WF_R_xml_0_deep_rew.DP_R_xml_0 x. Proof. intros x y h. inversion h;clear h;subst; constructor;intros _y _h;inversion _h;clear _h;subst; (eapply acc_DP_R_xml_0_scc_11; econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))|| ((R_xml_0_deep_rew.impossible_star_reduction_R_xml_0 )|| (eapply Hrec;econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))). Qed. Inductive DP_R_xml_0_non_scc_18 : algebra.Alg.term ->algebra.Alg.term ->Prop := (* *) | DP_R_xml_0_non_scc_18_0 : forall x12 x10 x9, (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) (algebra.Alg.Term algebra.F.id___ (x9::x10::nil)) x12) -> DP_R_xml_0_non_scc_18 (algebra.Alg.Term algebra.F.id___ (x9:: (algebra.Alg.Term algebra.F.id_active (x10::nil))::nil)) (algebra.Alg.Term algebra.F.id_active (x12::nil)) . Lemma acc_DP_R_xml_0_non_scc_18 : forall x y, (DP_R_xml_0_non_scc_18 x y) ->Acc WF_R_xml_0_deep_rew.DP_R_xml_0 x. Proof. intros x y h. inversion h;clear h;subst; constructor;intros _y _h;inversion _h;clear _h;subst; (eapply acc_DP_R_xml_0_scc_13; econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))|| ((R_xml_0_deep_rew.impossible_star_reduction_R_xml_0 )|| (eapply Hrec;econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))). Qed. Inductive DP_R_xml_0_non_scc_19 : algebra.Alg.term ->algebra.Alg.term ->Prop := (* *) | DP_R_xml_0_non_scc_19_0 : forall x12 x10 x9, (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) (algebra.Alg.Term algebra.F.id___ (x9::x10::nil)) x12) -> DP_R_xml_0_non_scc_19 (algebra.Alg.Term algebra.F.id___ ((algebra.Alg.Term algebra.F.id_active (x9::nil))::x10::nil)) (algebra.Alg.Term algebra.F.id_active (x12::nil)) . Lemma acc_DP_R_xml_0_non_scc_19 : forall x y, (DP_R_xml_0_non_scc_19 x y) ->Acc WF_R_xml_0_deep_rew.DP_R_xml_0 x. Proof. intros x y h. inversion h;clear h;subst; constructor;intros _y _h;inversion _h;clear _h;subst; (eapply acc_DP_R_xml_0_scc_13; econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))|| ((R_xml_0_deep_rew.impossible_star_reduction_R_xml_0 )|| (eapply Hrec;econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))). Qed. Inductive DP_R_xml_0_non_scc_20 : algebra.Alg.term ->algebra.Alg.term ->Prop := (* *) | DP_R_xml_0_non_scc_20_0 : forall x4 x12, (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) (algebra.Alg.Term algebra.F.id_isPal (x4::nil)) x12) -> DP_R_xml_0_non_scc_20 (algebra.Alg.Term algebra.F.id_isNePal (x4::nil)) (algebra.Alg.Term algebra.F.id_active (x12::nil)) . Lemma acc_DP_R_xml_0_non_scc_20 : forall x y, (DP_R_xml_0_non_scc_20 x y) ->Acc WF_R_xml_0_deep_rew.DP_R_xml_0 x. Proof. intros x y h. inversion h;clear h;subst; constructor;intros _y _h;inversion _h;clear _h;subst; (eapply acc_DP_R_xml_0_scc_2; econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))|| ((R_xml_0_deep_rew.impossible_star_reduction_R_xml_0 )|| (eapply Hrec;econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))). Qed. Inductive DP_R_xml_0_non_scc_21 : algebra.Alg.term ->algebra.Alg.term ->Prop := (* *) | DP_R_xml_0_non_scc_21_0 : forall x8 x12 x7, (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) (algebra.Alg.Term algebra.F.id_isNePal ((algebra.Alg.Term algebra.F.id___ (x7::(algebra.Alg.Term algebra.F.id___ (x8:: x7::nil))::nil))::nil)) x12) -> DP_R_xml_0_non_scc_21 (algebra.Alg.Term algebra.F.id_isPal (x8::nil)) (algebra.Alg.Term algebra.F.id_active (x12::nil)) . Lemma acc_DP_R_xml_0_non_scc_21 : forall x y, (DP_R_xml_0_non_scc_21 x y) ->Acc WF_R_xml_0_deep_rew.DP_R_xml_0 x. Proof. intros x y h. inversion h;clear h;subst; constructor;intros _y _h;inversion _h;clear _h;subst; (eapply acc_DP_R_xml_0_scc_1; econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))|| ((R_xml_0_deep_rew.impossible_star_reduction_R_xml_0 )|| (eapply Hrec;econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))). Qed. Inductive DP_R_xml_0_non_scc_22 : algebra.Alg.term ->algebra.Alg.term ->Prop := (* *) | DP_R_xml_0_non_scc_22_0 : forall x8 x12 x7, (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) (algebra.Alg.Term algebra.F.id_isNePal ((algebra.Alg.Term algebra.F.id___ (x7::(algebra.Alg.Term algebra.F.id___ (x8:: x7::nil))::nil))::nil)) x12) -> DP_R_xml_0_non_scc_22 (algebra.Alg.Term algebra.F.id_isQid (x7::nil)) (algebra.Alg.Term algebra.F.id_active (x12::nil)) . Lemma acc_DP_R_xml_0_non_scc_22 : forall x y, (DP_R_xml_0_non_scc_22 x y) ->Acc WF_R_xml_0_deep_rew.DP_R_xml_0 x. Proof. intros x y h. inversion h;clear h;subst; constructor;intros _y _h;inversion _h;clear _h;subst; (eapply acc_DP_R_xml_0_scc_3; econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))|| ((R_xml_0_deep_rew.impossible_star_reduction_R_xml_0 )|| (eapply Hrec;econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))). Qed. Inductive DP_R_xml_0_non_scc_23 : algebra.Alg.term ->algebra.Alg.term ->Prop := (* *) | DP_R_xml_0_non_scc_23_0 : forall x8 x12 x7, (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) (algebra.Alg.Term algebra.F.id_isNePal ((algebra.Alg.Term algebra.F.id___ (x7::(algebra.Alg.Term algebra.F.id___ (x8:: x7::nil))::nil))::nil)) x12) -> DP_R_xml_0_non_scc_23 (algebra.Alg.Term algebra.F.id_and ((algebra.Alg.Term algebra.F.id_isQid (x7::nil))::(algebra.Alg.Term algebra.F.id_isPal (x8::nil))::nil)) (algebra.Alg.Term algebra.F.id_active (x12::nil)) . Lemma acc_DP_R_xml_0_non_scc_23 : forall x y, (DP_R_xml_0_non_scc_23 x y) ->Acc WF_R_xml_0_deep_rew.DP_R_xml_0 x. Proof. intros x y h. inversion h;clear h;subst; constructor;intros _y _h;inversion _h;clear _h;subst; (eapply acc_DP_R_xml_0_scc_11; econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))|| ((R_xml_0_deep_rew.impossible_star_reduction_R_xml_0 )|| (eapply Hrec;econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))). Qed. Inductive DP_R_xml_0_non_scc_24 : algebra.Alg.term ->algebra.Alg.term ->Prop := (* *) | DP_R_xml_0_non_scc_24_0 : forall x4 x12, (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) (algebra.Alg.Term algebra.F.id_isNePal (x4::nil)) x12) -> DP_R_xml_0_non_scc_24 (algebra.Alg.Term algebra.F.id_isQid (x4::nil)) (algebra.Alg.Term algebra.F.id_active (x12::nil)) . Lemma acc_DP_R_xml_0_non_scc_24 : forall x y, (DP_R_xml_0_non_scc_24 x y) ->Acc WF_R_xml_0_deep_rew.DP_R_xml_0 x. Proof. intros x y h. inversion h;clear h;subst; constructor;intros _y _h;inversion _h;clear _h;subst; (eapply acc_DP_R_xml_0_scc_3; econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))|| ((R_xml_0_deep_rew.impossible_star_reduction_R_xml_0 )|| (eapply Hrec;econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))). Qed. Inductive DP_R_xml_0_non_scc_25 : algebra.Alg.term ->algebra.Alg.term ->Prop := (* *) | DP_R_xml_0_non_scc_25_0 : forall x12 x6 x5, (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) (algebra.Alg.Term algebra.F.id_isNeList ((algebra.Alg.Term algebra.F.id___ (x5::x6::nil))::nil)) x12) -> DP_R_xml_0_non_scc_25 (algebra.Alg.Term algebra.F.id_isList (x6::nil)) (algebra.Alg.Term algebra.F.id_active (x12::nil)) . Lemma acc_DP_R_xml_0_non_scc_25 : forall x y, (DP_R_xml_0_non_scc_25 x y) ->Acc WF_R_xml_0_deep_rew.DP_R_xml_0 x. Proof. intros x y h. inversion h;clear h;subst; constructor;intros _y _h;inversion _h;clear _h;subst; (eapply acc_DP_R_xml_0_scc_5; econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))|| ((R_xml_0_deep_rew.impossible_star_reduction_R_xml_0 )|| (eapply Hrec;econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))). Qed. Inductive DP_R_xml_0_non_scc_26 : algebra.Alg.term ->algebra.Alg.term ->Prop := (* *) | DP_R_xml_0_non_scc_26_0 : forall x12 x6 x5, (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) (algebra.Alg.Term algebra.F.id_isNeList ((algebra.Alg.Term algebra.F.id___ (x5::x6::nil))::nil)) x12) -> DP_R_xml_0_non_scc_26 (algebra.Alg.Term algebra.F.id_isNeList (x5::nil)) (algebra.Alg.Term algebra.F.id_active (x12::nil)) . Lemma acc_DP_R_xml_0_non_scc_26 : forall x y, (DP_R_xml_0_non_scc_26 x y) ->Acc WF_R_xml_0_deep_rew.DP_R_xml_0 x. Proof. intros x y h. inversion h;clear h;subst; constructor;intros _y _h;inversion _h;clear _h;subst; (eapply acc_DP_R_xml_0_scc_4; econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))|| ((R_xml_0_deep_rew.impossible_star_reduction_R_xml_0 )|| (eapply Hrec;econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))). Qed. Inductive DP_R_xml_0_non_scc_27 : algebra.Alg.term ->algebra.Alg.term ->Prop := (* *) | DP_R_xml_0_non_scc_27_0 : forall x12 x6 x5, (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) (algebra.Alg.Term algebra.F.id_isNeList ((algebra.Alg.Term algebra.F.id___ (x5::x6::nil))::nil)) x12) -> DP_R_xml_0_non_scc_27 (algebra.Alg.Term algebra.F.id_and ((algebra.Alg.Term algebra.F.id_isNeList (x5::nil))::(algebra.Alg.Term algebra.F.id_isList (x6::nil))::nil)) (algebra.Alg.Term algebra.F.id_active (x12::nil)) . Lemma acc_DP_R_xml_0_non_scc_27 : forall x y, (DP_R_xml_0_non_scc_27 x y) ->Acc WF_R_xml_0_deep_rew.DP_R_xml_0 x. Proof. intros x y h. inversion h;clear h;subst; constructor;intros _y _h;inversion _h;clear _h;subst; (eapply acc_DP_R_xml_0_scc_11; econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))|| ((R_xml_0_deep_rew.impossible_star_reduction_R_xml_0 )|| (eapply Hrec;econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))). Qed. Inductive DP_R_xml_0_non_scc_28 : algebra.Alg.term ->algebra.Alg.term ->Prop := (* *) | DP_R_xml_0_non_scc_28_0 : forall x12 x6 x5, (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) (algebra.Alg.Term algebra.F.id_isNeList ((algebra.Alg.Term algebra.F.id___ (x5::x6::nil))::nil)) x12) -> DP_R_xml_0_non_scc_28 (algebra.Alg.Term algebra.F.id_isNeList (x6::nil)) (algebra.Alg.Term algebra.F.id_active (x12::nil)) . Lemma acc_DP_R_xml_0_non_scc_28 : forall x y, (DP_R_xml_0_non_scc_28 x y) ->Acc WF_R_xml_0_deep_rew.DP_R_xml_0 x. Proof. intros x y h. inversion h;clear h;subst; constructor;intros _y _h;inversion _h;clear _h;subst; (eapply acc_DP_R_xml_0_scc_4; econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))|| ((R_xml_0_deep_rew.impossible_star_reduction_R_xml_0 )|| (eapply Hrec;econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))). Qed. Inductive DP_R_xml_0_non_scc_29 : algebra.Alg.term ->algebra.Alg.term ->Prop := (* *) | DP_R_xml_0_non_scc_29_0 : forall x12 x6 x5, (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) (algebra.Alg.Term algebra.F.id_isNeList ((algebra.Alg.Term algebra.F.id___ (x5::x6::nil))::nil)) x12) -> DP_R_xml_0_non_scc_29 (algebra.Alg.Term algebra.F.id_isList (x5::nil)) (algebra.Alg.Term algebra.F.id_active (x12::nil)) . Lemma acc_DP_R_xml_0_non_scc_29 : forall x y, (DP_R_xml_0_non_scc_29 x y) ->Acc WF_R_xml_0_deep_rew.DP_R_xml_0 x. Proof. intros x y h. inversion h;clear h;subst; constructor;intros _y _h;inversion _h;clear _h;subst; (eapply acc_DP_R_xml_0_scc_5; econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))|| ((R_xml_0_deep_rew.impossible_star_reduction_R_xml_0 )|| (eapply Hrec;econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))). Qed. Inductive DP_R_xml_0_non_scc_30 : algebra.Alg.term ->algebra.Alg.term ->Prop := (* *) | DP_R_xml_0_non_scc_30_0 : forall x12 x6 x5, (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) (algebra.Alg.Term algebra.F.id_isNeList ((algebra.Alg.Term algebra.F.id___ (x5::x6::nil))::nil)) x12) -> DP_R_xml_0_non_scc_30 (algebra.Alg.Term algebra.F.id_and ((algebra.Alg.Term algebra.F.id_isList (x5::nil))::(algebra.Alg.Term algebra.F.id_isNeList (x6::nil))::nil)) (algebra.Alg.Term algebra.F.id_active (x12::nil)) . Lemma acc_DP_R_xml_0_non_scc_30 : forall x y, (DP_R_xml_0_non_scc_30 x y) ->Acc WF_R_xml_0_deep_rew.DP_R_xml_0 x. Proof. intros x y h. inversion h;clear h;subst; constructor;intros _y _h;inversion _h;clear _h;subst; (eapply acc_DP_R_xml_0_scc_11; econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))|| ((R_xml_0_deep_rew.impossible_star_reduction_R_xml_0 )|| (eapply Hrec;econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))). Qed. Inductive DP_R_xml_0_non_scc_31 : algebra.Alg.term ->algebra.Alg.term ->Prop := (* *) | DP_R_xml_0_non_scc_31_0 : forall x4 x12, (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) (algebra.Alg.Term algebra.F.id_isNeList (x4::nil)) x12) -> DP_R_xml_0_non_scc_31 (algebra.Alg.Term algebra.F.id_isQid (x4::nil)) (algebra.Alg.Term algebra.F.id_active (x12::nil)) . Lemma acc_DP_R_xml_0_non_scc_31 : forall x y, (DP_R_xml_0_non_scc_31 x y) ->Acc WF_R_xml_0_deep_rew.DP_R_xml_0 x. Proof. intros x y h. inversion h;clear h;subst; constructor;intros _y _h;inversion _h;clear _h;subst; (eapply acc_DP_R_xml_0_scc_3; econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))|| ((R_xml_0_deep_rew.impossible_star_reduction_R_xml_0 )|| (eapply Hrec;econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))). Qed. Inductive DP_R_xml_0_non_scc_32 : algebra.Alg.term ->algebra.Alg.term ->Prop := (* *) | DP_R_xml_0_non_scc_32_0 : forall x12 x6 x5, (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) (algebra.Alg.Term algebra.F.id_isList ((algebra.Alg.Term algebra.F.id___ (x5::x6::nil))::nil)) x12) -> DP_R_xml_0_non_scc_32 (algebra.Alg.Term algebra.F.id_isList (x6::nil)) (algebra.Alg.Term algebra.F.id_active (x12::nil)) . Lemma acc_DP_R_xml_0_non_scc_32 : forall x y, (DP_R_xml_0_non_scc_32 x y) ->Acc WF_R_xml_0_deep_rew.DP_R_xml_0 x. Proof. intros x y h. inversion h;clear h;subst; constructor;intros _y _h;inversion _h;clear _h;subst; (eapply acc_DP_R_xml_0_scc_5; econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))|| ((R_xml_0_deep_rew.impossible_star_reduction_R_xml_0 )|| (eapply Hrec;econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))). Qed. Inductive DP_R_xml_0_non_scc_33 : algebra.Alg.term ->algebra.Alg.term ->Prop := (* *) | DP_R_xml_0_non_scc_33_0 : forall x12 x6 x5, (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) (algebra.Alg.Term algebra.F.id_isList ((algebra.Alg.Term algebra.F.id___ (x5::x6::nil))::nil)) x12) -> DP_R_xml_0_non_scc_33 (algebra.Alg.Term algebra.F.id_isList (x5::nil)) (algebra.Alg.Term algebra.F.id_active (x12::nil)) . Lemma acc_DP_R_xml_0_non_scc_33 : forall x y, (DP_R_xml_0_non_scc_33 x y) ->Acc WF_R_xml_0_deep_rew.DP_R_xml_0 x. Proof. intros x y h. inversion h;clear h;subst; constructor;intros _y _h;inversion _h;clear _h;subst; (eapply acc_DP_R_xml_0_scc_5; econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))|| ((R_xml_0_deep_rew.impossible_star_reduction_R_xml_0 )|| (eapply Hrec;econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))). Qed. Inductive DP_R_xml_0_non_scc_34 : algebra.Alg.term ->algebra.Alg.term ->Prop := (* *) | DP_R_xml_0_non_scc_34_0 : forall x12 x6 x5, (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) (algebra.Alg.Term algebra.F.id_isList ((algebra.Alg.Term algebra.F.id___ (x5::x6::nil))::nil)) x12) -> DP_R_xml_0_non_scc_34 (algebra.Alg.Term algebra.F.id_and ((algebra.Alg.Term algebra.F.id_isList (x5::nil))::(algebra.Alg.Term algebra.F.id_isList (x6::nil))::nil)) (algebra.Alg.Term algebra.F.id_active (x12::nil)) . Lemma acc_DP_R_xml_0_non_scc_34 : forall x y, (DP_R_xml_0_non_scc_34 x y) ->Acc WF_R_xml_0_deep_rew.DP_R_xml_0 x. Proof. intros x y h. inversion h;clear h;subst; constructor;intros _y _h;inversion _h;clear _h;subst; (eapply acc_DP_R_xml_0_scc_11; econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))|| ((R_xml_0_deep_rew.impossible_star_reduction_R_xml_0 )|| (eapply Hrec;econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))). Qed. Inductive DP_R_xml_0_non_scc_35 : algebra.Alg.term ->algebra.Alg.term ->Prop := (* *) | DP_R_xml_0_non_scc_35_0 : forall x4 x12, (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) (algebra.Alg.Term algebra.F.id_isList (x4::nil)) x12) -> DP_R_xml_0_non_scc_35 (algebra.Alg.Term algebra.F.id_isNeList (x4::nil)) (algebra.Alg.Term algebra.F.id_active (x12::nil)) . Lemma acc_DP_R_xml_0_non_scc_35 : forall x y, (DP_R_xml_0_non_scc_35 x y) ->Acc WF_R_xml_0_deep_rew.DP_R_xml_0 x. Proof. intros x y h. inversion h;clear h;subst; constructor;intros _y _h;inversion _h;clear _h;subst; (eapply acc_DP_R_xml_0_scc_4; econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))|| ((R_xml_0_deep_rew.impossible_star_reduction_R_xml_0 )|| (eapply Hrec;econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))). Qed. Inductive DP_R_xml_0_non_scc_36 : algebra.Alg.term ->algebra.Alg.term ->Prop := (* *) | DP_R_xml_0_non_scc_36_0 : forall x12 x2 x1 x3, (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) (algebra.Alg.Term algebra.F.id___ ((algebra.Alg.Term algebra.F.id___ (x1::x2::nil))::x3::nil)) x12) -> DP_R_xml_0_non_scc_36 (algebra.Alg.Term algebra.F.id___ (x2::x3::nil)) (algebra.Alg.Term algebra.F.id_active (x12::nil)) . Lemma acc_DP_R_xml_0_non_scc_36 : forall x y, (DP_R_xml_0_non_scc_36 x y) ->Acc WF_R_xml_0_deep_rew.DP_R_xml_0 x. Proof. intros x y h. inversion h;clear h;subst; constructor;intros _y _h;inversion _h;clear _h;subst; (eapply acc_DP_R_xml_0_scc_13; econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))|| ((R_xml_0_deep_rew.impossible_star_reduction_R_xml_0 )|| (eapply Hrec;econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))). Qed. Inductive DP_R_xml_0_non_scc_37 : algebra.Alg.term ->algebra.Alg.term ->Prop := (* *) | DP_R_xml_0_non_scc_37_0 : forall x12 x2 x1 x3, (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) (algebra.Alg.Term algebra.F.id___ ((algebra.Alg.Term algebra.F.id___ (x1::x2::nil))::x3::nil)) x12) -> DP_R_xml_0_non_scc_37 (algebra.Alg.Term algebra.F.id___ (x1:: (algebra.Alg.Term algebra.F.id___ (x2:: x3::nil))::nil)) (algebra.Alg.Term algebra.F.id_active (x12::nil)) . Lemma acc_DP_R_xml_0_non_scc_37 : forall x y, (DP_R_xml_0_non_scc_37 x y) ->Acc WF_R_xml_0_deep_rew.DP_R_xml_0 x. Proof. intros x y h. inversion h;clear h;subst; constructor;intros _y _h;inversion _h;clear _h;subst; (eapply acc_DP_R_xml_0_scc_13; econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))|| ((R_xml_0_deep_rew.impossible_star_reduction_R_xml_0 )|| (eapply Hrec;econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))). Qed. Inductive DP_R_xml_0_scc_38 : algebra.Alg.term ->algebra.Alg.term ->Prop := (* *) | DP_R_xml_0_scc_38_0 : forall x12 x10 x9, (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) (algebra.Alg.Term algebra.F.id___ (x9::x10::nil)) x12) -> DP_R_xml_0_scc_38 (algebra.Alg.Term algebra.F.id_active (x10::nil)) (algebra.Alg.Term algebra.F.id_active (x12::nil)) (* *) | DP_R_xml_0_scc_38_1 : forall x12 x10 x9, (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) (algebra.Alg.Term algebra.F.id___ (x9::x10::nil)) x12) -> DP_R_xml_0_scc_38 (algebra.Alg.Term algebra.F.id_active (x9::nil)) (algebra.Alg.Term algebra.F.id_active (x12::nil)) (* *) | DP_R_xml_0_scc_38_2 : forall x12 x10 x9, (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) (algebra.Alg.Term algebra.F.id_and (x9::x10::nil)) x12) -> DP_R_xml_0_scc_38 (algebra.Alg.Term algebra.F.id_active (x9::nil)) (algebra.Alg.Term algebra.F.id_active (x12::nil)) . Module WF_DP_R_xml_0_scc_38. Open Scope Z_scope. Import ring_extention. Notation Local "a <= b" := (Zle a b). Notation Local "a < b" := (Zlt a b). Definition P_id_active (x12:Z) := 1* x12. Definition P_id_proper (x12:Z) := 2* x12. Definition P_id_isQid (x12:Z) := 3 + 3* x12. Definition P_id_and (x12:Z) (x13:Z) := 1 + 2* x12 + 3* x13. Definition P_id_e := 2. Definition P_id_mark (x12:Z) := 0. Definition P_id_top (x12:Z) := 0. Definition P_id_isPal (x12:Z) := 1 + 3* x12. Definition P_id_isList (x12:Z) := 3. Definition P_id_o := 2. Definition P_id___ (x12:Z) (x13:Z) := 2 + 1* x12 + 1* x13. Definition P_id_ok (x12:Z) := 0. Definition P_id_isNePal (x12:Z) := 0. Definition P_id_tt := 2. Definition P_id_i := 2. Definition P_id_nil := 0. Definition P_id_a := 2. Definition P_id_isNeList (x12:Z) := 3 + 3* x12. Definition P_id_u := 0. Lemma P_id_active_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_active x13 <= P_id_active x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_proper_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_proper x13 <= P_id_proper x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_isQid_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_isQid x13 <= P_id_isQid x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_and_monotonic : forall x12 x14 x13 x15, (0 <= x15)/\ (x15 <= x14) -> (0 <= x13)/\ (x13 <= x12) ->P_id_and x13 x15 <= P_id_and x12 x14. Proof. intros x15 x14 x13 x12. intros [H_1 H_0]. intros [H_3 H_2]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_mark_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_mark x13 <= P_id_mark x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_top_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_top x13 <= P_id_top x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_isPal_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_isPal x13 <= P_id_isPal x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_isList_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_isList x13 <= P_id_isList x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id____monotonic : forall x12 x14 x13 x15, (0 <= x15)/\ (x15 <= x14) -> (0 <= x13)/\ (x13 <= x12) ->P_id___ x13 x15 <= P_id___ x12 x14. Proof. intros x15 x14 x13 x12. intros [H_1 H_0]. intros [H_3 H_2]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_ok_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_ok x13 <= P_id_ok x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_isNePal_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_isNePal x13 <= P_id_isNePal x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_isNeList_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_isNeList x13 <= P_id_isNeList x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_active_bounded : forall x12, (0 <= x12) ->0 <= P_id_active x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_proper_bounded : forall x12, (0 <= x12) ->0 <= P_id_proper x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_isQid_bounded : forall x12, (0 <= x12) ->0 <= P_id_isQid x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_and_bounded : forall x12 x13, (0 <= x12) ->(0 <= x13) ->0 <= P_id_and x13 x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_e_bounded : 0 <= P_id_e . Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_mark_bounded : forall x12, (0 <= x12) ->0 <= P_id_mark x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_top_bounded : forall x12, (0 <= x12) ->0 <= P_id_top x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_isPal_bounded : forall x12, (0 <= x12) ->0 <= P_id_isPal x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_isList_bounded : forall x12, (0 <= x12) ->0 <= P_id_isList x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_o_bounded : 0 <= P_id_o . Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id____bounded : forall x12 x13, (0 <= x12) ->(0 <= x13) ->0 <= P_id___ x13 x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_ok_bounded : forall x12, (0 <= x12) ->0 <= P_id_ok x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_isNePal_bounded : forall x12, (0 <= x12) ->0 <= P_id_isNePal x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_tt_bounded : 0 <= P_id_tt . Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_i_bounded : 0 <= P_id_i . Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_nil_bounded : 0 <= P_id_nil . Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_a_bounded : 0 <= P_id_a . Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_isNeList_bounded : forall x12, (0 <= x12) ->0 <= P_id_isNeList x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_u_bounded : 0 <= P_id_u . Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Definition measure := InterpZ.measure 0 P_id_active P_id_proper P_id_isQid P_id_and P_id_e P_id_mark P_id_top P_id_isPal P_id_isList P_id_o P_id___ P_id_ok P_id_isNePal P_id_tt P_id_i P_id_nil P_id_a P_id_isNeList P_id_u. Lemma measure_equation : forall t, measure t = match t with | (algebra.Alg.Term algebra.F.id_active (x12::nil)) => P_id_active (measure x12) | (algebra.Alg.Term algebra.F.id_proper (x12::nil)) => P_id_proper (measure x12) | (algebra.Alg.Term algebra.F.id_isQid (x12::nil)) => P_id_isQid (measure x12) | (algebra.Alg.Term algebra.F.id_and (x13::x12::nil)) => P_id_and (measure x13) (measure x12) | (algebra.Alg.Term algebra.F.id_e nil) => P_id_e | (algebra.Alg.Term algebra.F.id_mark (x12::nil)) => P_id_mark (measure x12) | (algebra.Alg.Term algebra.F.id_top (x12::nil)) => P_id_top (measure x12) | (algebra.Alg.Term algebra.F.id_isPal (x12::nil)) => P_id_isPal (measure x12) | (algebra.Alg.Term algebra.F.id_isList (x12::nil)) => P_id_isList (measure x12) | (algebra.Alg.Term algebra.F.id_o nil) => P_id_o | (algebra.Alg.Term algebra.F.id___ (x13::x12::nil)) => P_id___ (measure x13) (measure x12) | (algebra.Alg.Term algebra.F.id_ok (x12::nil)) => P_id_ok (measure x12) | (algebra.Alg.Term algebra.F.id_isNePal (x12::nil)) => P_id_isNePal (measure x12) | (algebra.Alg.Term algebra.F.id_tt nil) => P_id_tt | (algebra.Alg.Term algebra.F.id_i nil) => P_id_i | (algebra.Alg.Term algebra.F.id_nil nil) => P_id_nil | (algebra.Alg.Term algebra.F.id_a nil) => P_id_a | (algebra.Alg.Term algebra.F.id_isNeList (x12::nil)) => P_id_isNeList (measure x12) | (algebra.Alg.Term algebra.F.id_u nil) => P_id_u | _ => 0 end. Proof. intros t;case t;intros ;apply refl_equal. Qed. Lemma measure_bounded : forall t, 0 <= measure t. Proof. unfold measure in |-*. apply InterpZ.measure_bounded; cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Ltac generate_pos_hyp := match goal with | H:context [measure ?x] |- _ => let v := fresh "v" in (let H := fresh "h" in (set (H:=measure_bounded x) in *;set (v:=measure x) in *; clearbody H;clearbody v)) | |- context [measure ?x] => let v := fresh "v" in (let H := fresh "h" in (set (H:=measure_bounded x) in *;set (v:=measure x) in *; clearbody H;clearbody v)) end . Lemma rules_monotonic : forall l r, (algebra.EQT.axiom R_xml_0_deep_rew.R_xml_0_rules r l) -> measure r <= measure l. Proof. intros l r H. fold measure in |-*. inversion H;clear H;subst;inversion H0;clear H0;subst; simpl algebra.EQT.T.apply_subst in |-*; repeat ( match goal with | |- context [measure (algebra.Alg.Term ?f ?t)] => rewrite (measure_equation (algebra.Alg.Term f t)) end );repeat (generate_pos_hyp ); cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma measure_star_monotonic : forall l r, (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) r l) ->measure r <= measure l. Proof. unfold measure in *. apply InterpZ.measure_star_monotonic. intros ;apply P_id_active_monotonic;assumption. intros ;apply P_id_proper_monotonic;assumption. intros ;apply P_id_isQid_monotonic;assumption. intros ;apply P_id_and_monotonic;assumption. intros ;apply P_id_mark_monotonic;assumption. intros ;apply P_id_top_monotonic;assumption. intros ;apply P_id_isPal_monotonic;assumption. intros ;apply P_id_isList_monotonic;assumption. intros ;apply P_id____monotonic;assumption. intros ;apply P_id_ok_monotonic;assumption. intros ;apply P_id_isNePal_monotonic;assumption. intros ;apply P_id_isNeList_monotonic;assumption. intros ;apply P_id_active_bounded;assumption. intros ;apply P_id_proper_bounded;assumption. intros ;apply P_id_isQid_bounded;assumption. intros ;apply P_id_and_bounded;assumption. intros ;apply P_id_e_bounded;assumption. intros ;apply P_id_mark_bounded;assumption. intros ;apply P_id_top_bounded;assumption. intros ;apply P_id_isPal_bounded;assumption. intros ;apply P_id_isList_bounded;assumption. intros ;apply P_id_o_bounded;assumption. intros ;apply P_id____bounded;assumption. intros ;apply P_id_ok_bounded;assumption. intros ;apply P_id_isNePal_bounded;assumption. intros ;apply P_id_tt_bounded;assumption. intros ;apply P_id_i_bounded;assumption. intros ;apply P_id_nil_bounded;assumption. intros ;apply P_id_a_bounded;assumption. intros ;apply P_id_isNeList_bounded;assumption. intros ;apply P_id_u_bounded;assumption. apply rules_monotonic. Qed. Definition P_id_ISQID (x12:Z) := 0. Definition P_id____hat_1 (x12:Z) (x13:Z) := 0. Definition P_id_TOP (x12:Z) := 0. Definition P_id_ISNEPAL (x12:Z) := 0. Definition P_id_AND (x12:Z) (x13:Z) := 0. Definition P_id_ISPAL (x12:Z) := 0. Definition P_id_ISNELIST (x12:Z) := 0. Definition P_id_ACTIVE (x12:Z) := 2* x12. Definition P_id_PROPER (x12:Z) := 0. Definition P_id_ISLIST (x12:Z) := 0. Lemma P_id_ISQID_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_ISQID x13 <= P_id_ISQID x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id____hat_1_monotonic : forall x12 x14 x13 x15, (0 <= x15)/\ (x15 <= x14) -> (0 <= x13)/\ (x13 <= x12) -> P_id____hat_1 x13 x15 <= P_id____hat_1 x12 x14. Proof. intros x15 x14 x13 x12. intros [H_1 H_0]. intros [H_3 H_2]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_TOP_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_TOP x13 <= P_id_TOP x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_ISNEPAL_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_ISNEPAL x13 <= P_id_ISNEPAL x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_AND_monotonic : forall x12 x14 x13 x15, (0 <= x15)/\ (x15 <= x14) -> (0 <= x13)/\ (x13 <= x12) ->P_id_AND x13 x15 <= P_id_AND x12 x14. Proof. intros x15 x14 x13 x12. intros [H_1 H_0]. intros [H_3 H_2]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_ISPAL_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_ISPAL x13 <= P_id_ISPAL x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_ISNELIST_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_ISNELIST x13 <= P_id_ISNELIST x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_ACTIVE_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_ACTIVE x13 <= P_id_ACTIVE x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_PROPER_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_PROPER x13 <= P_id_PROPER x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_ISLIST_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_ISLIST x13 <= P_id_ISLIST x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Definition marked_measure := InterpZ.marked_measure 0 P_id_active P_id_proper P_id_isQid P_id_and P_id_e P_id_mark P_id_top P_id_isPal P_id_isList P_id_o P_id___ P_id_ok P_id_isNePal P_id_tt P_id_i P_id_nil P_id_a P_id_isNeList P_id_u P_id_ISQID P_id____hat_1 P_id_TOP P_id_ISNEPAL P_id_AND P_id_ISPAL P_id_ISNELIST P_id_ACTIVE P_id_PROPER P_id_ISLIST. Lemma marked_measure_equation : forall t, marked_measure t = match t with | (algebra.Alg.Term algebra.F.id_isQid (x12::nil)) => P_id_ISQID (measure x12) | (algebra.Alg.Term algebra.F.id___ (x13:: x12::nil)) => P_id____hat_1 (measure x13) (measure x12) | (algebra.Alg.Term algebra.F.id_top (x12::nil)) => P_id_TOP (measure x12) | (algebra.Alg.Term algebra.F.id_isNePal (x12::nil)) => P_id_ISNEPAL (measure x12) | (algebra.Alg.Term algebra.F.id_and (x13:: x12::nil)) => P_id_AND (measure x13) (measure x12) | (algebra.Alg.Term algebra.F.id_isPal (x12::nil)) => P_id_ISPAL (measure x12) | (algebra.Alg.Term algebra.F.id_isNeList (x12::nil)) => P_id_ISNELIST (measure x12) | (algebra.Alg.Term algebra.F.id_active (x12::nil)) => P_id_ACTIVE (measure x12) | (algebra.Alg.Term algebra.F.id_proper (x12::nil)) => P_id_PROPER (measure x12) | (algebra.Alg.Term algebra.F.id_isList (x12::nil)) => P_id_ISLIST (measure x12) | _ => measure t end. Proof. reflexivity . Qed. Lemma marked_measure_star_monotonic : forall f l1 l2, (closure.refl_trans_clos (closure.one_step_list (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) ) l1 l2) -> marked_measure (algebra.Alg.Term f l1) <= marked_measure (algebra.Alg.Term f l2). Proof. unfold marked_measure in *. apply InterpZ.marked_measure_star_monotonic. intros ;apply P_id_active_monotonic;assumption. intros ;apply P_id_proper_monotonic;assumption. intros ;apply P_id_isQid_monotonic;assumption. intros ;apply P_id_and_monotonic;assumption. intros ;apply P_id_mark_monotonic;assumption. intros ;apply P_id_top_monotonic;assumption. intros ;apply P_id_isPal_monotonic;assumption. intros ;apply P_id_isList_monotonic;assumption. intros ;apply P_id____monotonic;assumption. intros ;apply P_id_ok_monotonic;assumption. intros ;apply P_id_isNePal_monotonic;assumption. intros ;apply P_id_isNeList_monotonic;assumption. intros ;apply P_id_active_bounded;assumption. intros ;apply P_id_proper_bounded;assumption. intros ;apply P_id_isQid_bounded;assumption. intros ;apply P_id_and_bounded;assumption. intros ;apply P_id_e_bounded;assumption. intros ;apply P_id_mark_bounded;assumption. intros ;apply P_id_top_bounded;assumption. intros ;apply P_id_isPal_bounded;assumption. intros ;apply P_id_isList_bounded;assumption. intros ;apply P_id_o_bounded;assumption. intros ;apply P_id____bounded;assumption. intros ;apply P_id_ok_bounded;assumption. intros ;apply P_id_isNePal_bounded;assumption. intros ;apply P_id_tt_bounded;assumption. intros ;apply P_id_i_bounded;assumption. intros ;apply P_id_nil_bounded;assumption. intros ;apply P_id_a_bounded;assumption. intros ;apply P_id_isNeList_bounded;assumption. intros ;apply P_id_u_bounded;assumption. apply rules_monotonic. intros ;apply P_id_ISQID_monotonic;assumption. intros ;apply P_id____hat_1_monotonic;assumption. intros ;apply P_id_TOP_monotonic;assumption. intros ;apply P_id_ISNEPAL_monotonic;assumption. intros ;apply P_id_AND_monotonic;assumption. intros ;apply P_id_ISPAL_monotonic;assumption. intros ;apply P_id_ISNELIST_monotonic;assumption. intros ;apply P_id_ACTIVE_monotonic;assumption. intros ;apply P_id_PROPER_monotonic;assumption. intros ;apply P_id_ISLIST_monotonic;assumption. Qed. Ltac rewrite_and_unfold := do 2 (rewrite marked_measure_equation); repeat ( match goal with | |- context [measure (algebra.Alg.Term ?f ?t)] => rewrite (measure_equation (algebra.Alg.Term f t)) | H:context [measure (algebra.Alg.Term ?f ?t)] |- _ => rewrite (measure_equation (algebra.Alg.Term f t)) in H|- end ). Lemma wf : well_founded WF_DP_R_xml_0.DP_R_xml_0_scc_38. Proof. intros x. apply well_founded_ind with (R:=fun x y => (Zwf.Zwf 0) (marked_measure x) (marked_measure y)). apply Inverse_Image.wf_inverse_image with (B:=Z). apply Zwf.Zwf_well_founded. clear x. intros x IHx. repeat ( constructor;inversion 1;subst; full_prove_ineq algebra.Alg.Term ltac:(algebra.Alg_ext.find_replacement ) algebra.EQT_ext.one_step_list_refl_trans_clos marked_measure marked_measure_star_monotonic (Zwf.Zwf 0) (interp.o_Z 0) ltac:(fun _ => R_xml_0_deep_rew.impossible_star_reduction_R_xml_0 ) ltac:(fun _ => rewrite_and_unfold ) ltac:(fun _ => generate_pos_hyp ) ltac:(fun _ => cbv beta iota zeta delta - [Zplus Zmult Zle Zlt] in * ; try (constructor)) IHx ). Qed. End WF_DP_R_xml_0_scc_38. Definition wf_DP_R_xml_0_scc_38 := WF_DP_R_xml_0_scc_38.wf. Lemma acc_DP_R_xml_0_scc_38 : forall x y, (DP_R_xml_0_scc_38 x y) ->Acc WF_R_xml_0_deep_rew.DP_R_xml_0 x. Proof. intros x. pattern x. apply (@Acc_ind _ DP_R_xml_0_scc_38). intros x' _ Hrec y h. inversion h;clear h;subst; constructor;intros _y _h;inversion _h;clear _h;subst; (eapply Hrec;econstructor eassumption)|| ((eapply acc_DP_R_xml_0_non_scc_37; econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))|| ((eapply acc_DP_R_xml_0_non_scc_36; econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))|| ((eapply acc_DP_R_xml_0_non_scc_35; econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))|| ((eapply acc_DP_R_xml_0_non_scc_34; econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))|| ((eapply acc_DP_R_xml_0_non_scc_33; econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))|| ((eapply acc_DP_R_xml_0_non_scc_32; econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))|| ((eapply acc_DP_R_xml_0_non_scc_31; econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))|| ((eapply acc_DP_R_xml_0_non_scc_30; econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))|| ((eapply acc_DP_R_xml_0_non_scc_29; econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))|| ((eapply acc_DP_R_xml_0_non_scc_28; econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))|| ((eapply acc_DP_R_xml_0_non_scc_27; econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))|| ((eapply acc_DP_R_xml_0_non_scc_26; econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))|| ((eapply acc_DP_R_xml_0_non_scc_25; econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))|| ((eapply acc_DP_R_xml_0_non_scc_24; econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))|| ((eapply acc_DP_R_xml_0_non_scc_23; econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))|| ((eapply acc_DP_R_xml_0_non_scc_22; econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))|| ((eapply acc_DP_R_xml_0_non_scc_21; econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))|| ((eapply acc_DP_R_xml_0_non_scc_20; econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))|| ((eapply acc_DP_R_xml_0_non_scc_19; econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))|| ((eapply acc_DP_R_xml_0_non_scc_18; econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))|| ((eapply acc_DP_R_xml_0_non_scc_17; econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))|| ((R_xml_0_deep_rew.impossible_star_reduction_R_xml_0 )|| (eapply Hrec; econstructor (eassumption)||(algebra.Alg_ext.star_refl' )))))))))))))))))))))))). apply wf_DP_R_xml_0_scc_38. Qed. Inductive DP_R_xml_0_non_scc_39 : algebra.Alg.term ->algebra.Alg.term ->Prop := (* *) | DP_R_xml_0_non_scc_39_0 : forall x12 x1, (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) (algebra.Alg.Term algebra.F.id_ok (x1::nil)) x12) -> DP_R_xml_0_non_scc_39 (algebra.Alg.Term algebra.F.id_active (x1::nil)) (algebra.Alg.Term algebra.F.id_top (x12::nil)) . Lemma acc_DP_R_xml_0_non_scc_39 : forall x y, (DP_R_xml_0_non_scc_39 x y) ->Acc WF_R_xml_0_deep_rew.DP_R_xml_0 x. Proof. intros x y h. inversion h;clear h;subst; constructor;intros _y _h;inversion _h;clear _h;subst; (eapply acc_DP_R_xml_0_scc_38; econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))|| ((eapply acc_DP_R_xml_0_non_scc_37; econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))|| ((eapply acc_DP_R_xml_0_non_scc_36; econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))|| ((eapply acc_DP_R_xml_0_non_scc_35; econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))|| ((eapply acc_DP_R_xml_0_non_scc_34; econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))|| ((eapply acc_DP_R_xml_0_non_scc_33; econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))|| ((eapply acc_DP_R_xml_0_non_scc_32; econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))|| ((eapply acc_DP_R_xml_0_non_scc_31; econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))|| ((eapply acc_DP_R_xml_0_non_scc_30; econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))|| ((eapply acc_DP_R_xml_0_non_scc_29; econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))|| ((eapply acc_DP_R_xml_0_non_scc_28; econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))|| ((eapply acc_DP_R_xml_0_non_scc_27; econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))|| ((eapply acc_DP_R_xml_0_non_scc_26; econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))|| ((eapply acc_DP_R_xml_0_non_scc_25; econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))|| ((eapply acc_DP_R_xml_0_non_scc_24; econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))|| ((eapply acc_DP_R_xml_0_non_scc_23; econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))|| ((eapply acc_DP_R_xml_0_non_scc_22; econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))|| ((eapply acc_DP_R_xml_0_non_scc_21; econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))|| ((eapply acc_DP_R_xml_0_non_scc_20; econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))|| ((eapply acc_DP_R_xml_0_non_scc_19; econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))|| ((eapply acc_DP_R_xml_0_non_scc_18; econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))|| ((eapply acc_DP_R_xml_0_non_scc_17; econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))|| ((R_xml_0_deep_rew.impossible_star_reduction_R_xml_0 )|| (eapply Hrec; econstructor (eassumption)||(algebra.Alg_ext.star_refl' )))))))))))))))))))))))). Qed. Inductive DP_R_xml_0_scc_40 : algebra.Alg.term ->algebra.Alg.term ->Prop := (* *) | DP_R_xml_0_scc_40_0 : forall x12 x1, (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) (algebra.Alg.Term algebra.F.id_ok (x1::nil)) x12) -> DP_R_xml_0_scc_40 (algebra.Alg.Term algebra.F.id_top ((algebra.Alg.Term algebra.F.id_active (x1::nil))::nil)) (algebra.Alg.Term algebra.F.id_top (x12::nil)) (* *) | DP_R_xml_0_scc_40_1 : forall x12 x1, (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) (algebra.Alg.Term algebra.F.id_mark (x1::nil)) x12) -> DP_R_xml_0_scc_40 (algebra.Alg.Term algebra.F.id_top ((algebra.Alg.Term algebra.F.id_proper (x1::nil))::nil)) (algebra.Alg.Term algebra.F.id_top (x12::nil)) . Module WF_DP_R_xml_0_scc_40. Inductive DP_R_xml_0_scc_40_large : algebra.Alg.term ->algebra.Alg.term ->Prop := (* *) | DP_R_xml_0_scc_40_large_0 : forall x12 x1, (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) (algebra.Alg.Term algebra.F.id_ok (x1::nil)) x12) -> DP_R_xml_0_scc_40_large (algebra.Alg.Term algebra.F.id_top ((algebra.Alg.Term algebra.F.id_active (x1::nil))::nil)) (algebra.Alg.Term algebra.F.id_top (x12::nil)) . Inductive DP_R_xml_0_scc_40_strict : algebra.Alg.term ->algebra.Alg.term ->Prop := (* *) | DP_R_xml_0_scc_40_strict_0 : forall x12 x1, (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) (algebra.Alg.Term algebra.F.id_mark (x1::nil)) x12) -> DP_R_xml_0_scc_40_strict (algebra.Alg.Term algebra.F.id_top ((algebra.Alg.Term algebra.F.id_proper (x1::nil))::nil)) (algebra.Alg.Term algebra.F.id_top (x12::nil)) . Module WF_DP_R_xml_0_scc_40_large. Open Scope Z_scope. Import ring_extention. Notation Local "a <= b" := (Zle a b). Notation Local "a < b" := (Zlt a b). Definition P_id_active (x12:Z) := 1* x12. Definition P_id_proper (x12:Z) := 3* x12. Definition P_id_isQid (x12:Z) := 2* x12. Definition P_id_and (x12:Z) (x13:Z) := 2* x13. Definition P_id_e := 2. Definition P_id_mark (x12:Z) := 0. Definition P_id_top (x12:Z) := 0. Definition P_id_isPal (x12:Z) := 1* x12. Definition P_id_isList (x12:Z) := 2* x12. Definition P_id_o := 2. Definition P_id___ (x12:Z) (x13:Z) := 1* x12 + 3* x13. Definition P_id_ok (x12:Z) := 2 + 2* x12. Definition P_id_isNePal (x12:Z) := 1* x12. Definition P_id_tt := 2. Definition P_id_i := 2. Definition P_id_nil := 2. Definition P_id_a := 2. Definition P_id_isNeList (x12:Z) := 2 + 2* x12. Definition P_id_u := 2. Lemma P_id_active_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_active x13 <= P_id_active x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_proper_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_proper x13 <= P_id_proper x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_isQid_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_isQid x13 <= P_id_isQid x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_and_monotonic : forall x12 x14 x13 x15, (0 <= x15)/\ (x15 <= x14) -> (0 <= x13)/\ (x13 <= x12) ->P_id_and x13 x15 <= P_id_and x12 x14. Proof. intros x15 x14 x13 x12. intros [H_1 H_0]. intros [H_3 H_2]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_mark_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_mark x13 <= P_id_mark x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_top_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_top x13 <= P_id_top x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_isPal_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_isPal x13 <= P_id_isPal x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_isList_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_isList x13 <= P_id_isList x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id____monotonic : forall x12 x14 x13 x15, (0 <= x15)/\ (x15 <= x14) -> (0 <= x13)/\ (x13 <= x12) ->P_id___ x13 x15 <= P_id___ x12 x14. Proof. intros x15 x14 x13 x12. intros [H_1 H_0]. intros [H_3 H_2]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_ok_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_ok x13 <= P_id_ok x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_isNePal_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_isNePal x13 <= P_id_isNePal x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_isNeList_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_isNeList x13 <= P_id_isNeList x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_active_bounded : forall x12, (0 <= x12) ->0 <= P_id_active x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_proper_bounded : forall x12, (0 <= x12) ->0 <= P_id_proper x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_isQid_bounded : forall x12, (0 <= x12) ->0 <= P_id_isQid x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_and_bounded : forall x12 x13, (0 <= x12) ->(0 <= x13) ->0 <= P_id_and x13 x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_e_bounded : 0 <= P_id_e . Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_mark_bounded : forall x12, (0 <= x12) ->0 <= P_id_mark x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_top_bounded : forall x12, (0 <= x12) ->0 <= P_id_top x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_isPal_bounded : forall x12, (0 <= x12) ->0 <= P_id_isPal x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_isList_bounded : forall x12, (0 <= x12) ->0 <= P_id_isList x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_o_bounded : 0 <= P_id_o . Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id____bounded : forall x12 x13, (0 <= x12) ->(0 <= x13) ->0 <= P_id___ x13 x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_ok_bounded : forall x12, (0 <= x12) ->0 <= P_id_ok x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_isNePal_bounded : forall x12, (0 <= x12) ->0 <= P_id_isNePal x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_tt_bounded : 0 <= P_id_tt . Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_i_bounded : 0 <= P_id_i . Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_nil_bounded : 0 <= P_id_nil . Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_a_bounded : 0 <= P_id_a . Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_isNeList_bounded : forall x12, (0 <= x12) ->0 <= P_id_isNeList x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_u_bounded : 0 <= P_id_u . Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Definition measure := InterpZ.measure 0 P_id_active P_id_proper P_id_isQid P_id_and P_id_e P_id_mark P_id_top P_id_isPal P_id_isList P_id_o P_id___ P_id_ok P_id_isNePal P_id_tt P_id_i P_id_nil P_id_a P_id_isNeList P_id_u. Lemma measure_equation : forall t, measure t = match t with | (algebra.Alg.Term algebra.F.id_active (x12::nil)) => P_id_active (measure x12) | (algebra.Alg.Term algebra.F.id_proper (x12::nil)) => P_id_proper (measure x12) | (algebra.Alg.Term algebra.F.id_isQid (x12::nil)) => P_id_isQid (measure x12) | (algebra.Alg.Term algebra.F.id_and (x13::x12::nil)) => P_id_and (measure x13) (measure x12) | (algebra.Alg.Term algebra.F.id_e nil) => P_id_e | (algebra.Alg.Term algebra.F.id_mark (x12::nil)) => P_id_mark (measure x12) | (algebra.Alg.Term algebra.F.id_top (x12::nil)) => P_id_top (measure x12) | (algebra.Alg.Term algebra.F.id_isPal (x12::nil)) => P_id_isPal (measure x12) | (algebra.Alg.Term algebra.F.id_isList (x12::nil)) => P_id_isList (measure x12) | (algebra.Alg.Term algebra.F.id_o nil) => P_id_o | (algebra.Alg.Term algebra.F.id___ (x13::x12::nil)) => P_id___ (measure x13) (measure x12) | (algebra.Alg.Term algebra.F.id_ok (x12::nil)) => P_id_ok (measure x12) | (algebra.Alg.Term algebra.F.id_isNePal (x12::nil)) => P_id_isNePal (measure x12) | (algebra.Alg.Term algebra.F.id_tt nil) => P_id_tt | (algebra.Alg.Term algebra.F.id_i nil) => P_id_i | (algebra.Alg.Term algebra.F.id_nil nil) => P_id_nil | (algebra.Alg.Term algebra.F.id_a nil) => P_id_a | (algebra.Alg.Term algebra.F.id_isNeList (x12::nil)) => P_id_isNeList (measure x12) | (algebra.Alg.Term algebra.F.id_u nil) => P_id_u | _ => 0 end. Proof. intros t;case t;intros ;apply refl_equal. Qed. Lemma measure_bounded : forall t, 0 <= measure t. Proof. unfold measure in |-*. apply InterpZ.measure_bounded; cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Ltac generate_pos_hyp := match goal with | H:context [measure ?x] |- _ => let v := fresh "v" in (let H := fresh "h" in (set (H:=measure_bounded x) in *;set (v:=measure x) in *; clearbody H;clearbody v)) | |- context [measure ?x] => let v := fresh "v" in (let H := fresh "h" in (set (H:=measure_bounded x) in *;set (v:=measure x) in *; clearbody H;clearbody v)) end . Lemma rules_monotonic : forall l r, (algebra.EQT.axiom R_xml_0_deep_rew.R_xml_0_rules r l) -> measure r <= measure l. Proof. intros l r H. fold measure in |-*. inversion H;clear H;subst;inversion H0;clear H0;subst; simpl algebra.EQT.T.apply_subst in |-*; repeat ( match goal with | |- context [measure (algebra.Alg.Term ?f ?t)] => rewrite (measure_equation (algebra.Alg.Term f t)) end );repeat (generate_pos_hyp ); cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma measure_star_monotonic : forall l r, (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) r l) ->measure r <= measure l. Proof. unfold measure in *. apply InterpZ.measure_star_monotonic. intros ;apply P_id_active_monotonic;assumption. intros ;apply P_id_proper_monotonic;assumption. intros ;apply P_id_isQid_monotonic;assumption. intros ;apply P_id_and_monotonic;assumption. intros ;apply P_id_mark_monotonic;assumption. intros ;apply P_id_top_monotonic;assumption. intros ;apply P_id_isPal_monotonic;assumption. intros ;apply P_id_isList_monotonic;assumption. intros ;apply P_id____monotonic;assumption. intros ;apply P_id_ok_monotonic;assumption. intros ;apply P_id_isNePal_monotonic;assumption. intros ;apply P_id_isNeList_monotonic;assumption. intros ;apply P_id_active_bounded;assumption. intros ;apply P_id_proper_bounded;assumption. intros ;apply P_id_isQid_bounded;assumption. intros ;apply P_id_and_bounded;assumption. intros ;apply P_id_e_bounded;assumption. intros ;apply P_id_mark_bounded;assumption. intros ;apply P_id_top_bounded;assumption. intros ;apply P_id_isPal_bounded;assumption. intros ;apply P_id_isList_bounded;assumption. intros ;apply P_id_o_bounded;assumption. intros ;apply P_id____bounded;assumption. intros ;apply P_id_ok_bounded;assumption. intros ;apply P_id_isNePal_bounded;assumption. intros ;apply P_id_tt_bounded;assumption. intros ;apply P_id_i_bounded;assumption. intros ;apply P_id_nil_bounded;assumption. intros ;apply P_id_a_bounded;assumption. intros ;apply P_id_isNeList_bounded;assumption. intros ;apply P_id_u_bounded;assumption. apply rules_monotonic. Qed. Definition P_id_ISQID (x12:Z) := 0. Definition P_id____hat_1 (x12:Z) (x13:Z) := 0. Definition P_id_TOP (x12:Z) := 3* x12. Definition P_id_ISNEPAL (x12:Z) := 0. Definition P_id_AND (x12:Z) (x13:Z) := 0. Definition P_id_ISPAL (x12:Z) := 0. Definition P_id_ISNELIST (x12:Z) := 0. Definition P_id_ACTIVE (x12:Z) := 0. Definition P_id_PROPER (x12:Z) := 0. Definition P_id_ISLIST (x12:Z) := 0. Lemma P_id_ISQID_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_ISQID x13 <= P_id_ISQID x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id____hat_1_monotonic : forall x12 x14 x13 x15, (0 <= x15)/\ (x15 <= x14) -> (0 <= x13)/\ (x13 <= x12) -> P_id____hat_1 x13 x15 <= P_id____hat_1 x12 x14. Proof. intros x15 x14 x13 x12. intros [H_1 H_0]. intros [H_3 H_2]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_TOP_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_TOP x13 <= P_id_TOP x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_ISNEPAL_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_ISNEPAL x13 <= P_id_ISNEPAL x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_AND_monotonic : forall x12 x14 x13 x15, (0 <= x15)/\ (x15 <= x14) -> (0 <= x13)/\ (x13 <= x12) ->P_id_AND x13 x15 <= P_id_AND x12 x14. Proof. intros x15 x14 x13 x12. intros [H_1 H_0]. intros [H_3 H_2]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_ISPAL_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_ISPAL x13 <= P_id_ISPAL x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_ISNELIST_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_ISNELIST x13 <= P_id_ISNELIST x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_ACTIVE_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_ACTIVE x13 <= P_id_ACTIVE x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_PROPER_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_PROPER x13 <= P_id_PROPER x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_ISLIST_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_ISLIST x13 <= P_id_ISLIST x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Definition marked_measure := InterpZ.marked_measure 0 P_id_active P_id_proper P_id_isQid P_id_and P_id_e P_id_mark P_id_top P_id_isPal P_id_isList P_id_o P_id___ P_id_ok P_id_isNePal P_id_tt P_id_i P_id_nil P_id_a P_id_isNeList P_id_u P_id_ISQID P_id____hat_1 P_id_TOP P_id_ISNEPAL P_id_AND P_id_ISPAL P_id_ISNELIST P_id_ACTIVE P_id_PROPER P_id_ISLIST. Lemma marked_measure_equation : forall t, marked_measure t = match t with | (algebra.Alg.Term algebra.F.id_isQid (x12::nil)) => P_id_ISQID (measure x12) | (algebra.Alg.Term algebra.F.id___ (x13:: x12::nil)) => P_id____hat_1 (measure x13) (measure x12) | (algebra.Alg.Term algebra.F.id_top (x12::nil)) => P_id_TOP (measure x12) | (algebra.Alg.Term algebra.F.id_isNePal (x12::nil)) => P_id_ISNEPAL (measure x12) | (algebra.Alg.Term algebra.F.id_and (x13:: x12::nil)) => P_id_AND (measure x13) (measure x12) | (algebra.Alg.Term algebra.F.id_isPal (x12::nil)) => P_id_ISPAL (measure x12) | (algebra.Alg.Term algebra.F.id_isNeList (x12::nil)) => P_id_ISNELIST (measure x12) | (algebra.Alg.Term algebra.F.id_active (x12::nil)) => P_id_ACTIVE (measure x12) | (algebra.Alg.Term algebra.F.id_proper (x12::nil)) => P_id_PROPER (measure x12) | (algebra.Alg.Term algebra.F.id_isList (x12::nil)) => P_id_ISLIST (measure x12) | _ => measure t end. Proof. reflexivity . Qed. Lemma marked_measure_star_monotonic : forall f l1 l2, (closure.refl_trans_clos (closure.one_step_list (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) ) l1 l2) -> marked_measure (algebra.Alg.Term f l1) <= marked_measure (algebra.Alg.Term f l2). Proof. unfold marked_measure in *. apply InterpZ.marked_measure_star_monotonic. intros ;apply P_id_active_monotonic;assumption. intros ;apply P_id_proper_monotonic;assumption. intros ;apply P_id_isQid_monotonic;assumption. intros ;apply P_id_and_monotonic;assumption. intros ;apply P_id_mark_monotonic;assumption. intros ;apply P_id_top_monotonic;assumption. intros ;apply P_id_isPal_monotonic;assumption. intros ;apply P_id_isList_monotonic;assumption. intros ;apply P_id____monotonic;assumption. intros ;apply P_id_ok_monotonic;assumption. intros ;apply P_id_isNePal_monotonic;assumption. intros ;apply P_id_isNeList_monotonic;assumption. intros ;apply P_id_active_bounded;assumption. intros ;apply P_id_proper_bounded;assumption. intros ;apply P_id_isQid_bounded;assumption. intros ;apply P_id_and_bounded;assumption. intros ;apply P_id_e_bounded;assumption. intros ;apply P_id_mark_bounded;assumption. intros ;apply P_id_top_bounded;assumption. intros ;apply P_id_isPal_bounded;assumption. intros ;apply P_id_isList_bounded;assumption. intros ;apply P_id_o_bounded;assumption. intros ;apply P_id____bounded;assumption. intros ;apply P_id_ok_bounded;assumption. intros ;apply P_id_isNePal_bounded;assumption. intros ;apply P_id_tt_bounded;assumption. intros ;apply P_id_i_bounded;assumption. intros ;apply P_id_nil_bounded;assumption. intros ;apply P_id_a_bounded;assumption. intros ;apply P_id_isNeList_bounded;assumption. intros ;apply P_id_u_bounded;assumption. apply rules_monotonic. intros ;apply P_id_ISQID_monotonic;assumption. intros ;apply P_id____hat_1_monotonic;assumption. intros ;apply P_id_TOP_monotonic;assumption. intros ;apply P_id_ISNEPAL_monotonic;assumption. intros ;apply P_id_AND_monotonic;assumption. intros ;apply P_id_ISPAL_monotonic;assumption. intros ;apply P_id_ISNELIST_monotonic;assumption. intros ;apply P_id_ACTIVE_monotonic;assumption. intros ;apply P_id_PROPER_monotonic;assumption. intros ;apply P_id_ISLIST_monotonic;assumption. Qed. Ltac rewrite_and_unfold := do 2 (rewrite marked_measure_equation); repeat ( match goal with | |- context [measure (algebra.Alg.Term ?f ?t)] => rewrite (measure_equation (algebra.Alg.Term f t)) | H:context [measure (algebra.Alg.Term ?f ?t)] |- _ => rewrite (measure_equation (algebra.Alg.Term f t)) in H|- end ). Lemma wf : well_founded WF_DP_R_xml_0_scc_40.DP_R_xml_0_scc_40_large. Proof. intros x. apply well_founded_ind with (R:=fun x y => (Zwf.Zwf 0) (marked_measure x) (marked_measure y)). apply Inverse_Image.wf_inverse_image with (B:=Z). apply Zwf.Zwf_well_founded. clear x. intros x IHx. repeat ( constructor;inversion 1;subst; full_prove_ineq algebra.Alg.Term ltac:(algebra.Alg_ext.find_replacement ) algebra.EQT_ext.one_step_list_refl_trans_clos marked_measure marked_measure_star_monotonic (Zwf.Zwf 0) (interp.o_Z 0) ltac:(fun _ => R_xml_0_deep_rew.impossible_star_reduction_R_xml_0 ) ltac:(fun _ => rewrite_and_unfold ) ltac:(fun _ => generate_pos_hyp ) ltac:(fun _ => cbv beta iota zeta delta - [Zplus Zmult Zle Zlt] in * ; try (constructor)) IHx ). Qed. End WF_DP_R_xml_0_scc_40_large. Open Scope Z_scope. Import ring_extention. Notation Local "a <= b" := (Zle a b). Notation Local "a < b" := (Zlt a b). Definition P_id_active (x12:Z) := 1* x12. Definition P_id_proper (x12:Z) := 1* x12. Definition P_id_isQid (x12:Z) := 2* x12. Definition P_id_and (x12:Z) (x13:Z) := 1* x12 + 1* x13. Definition P_id_e := 2. Definition P_id_mark (x12:Z) := 1 + 1* x12. Definition P_id_top (x12:Z) := 0. Definition P_id_isPal (x12:Z) := 3 + 2* x12. Definition P_id_isList (x12:Z) := 2 + 3* x12. Definition P_id_o := 2. Definition P_id___ (x12:Z) (x13:Z) := 1 + 2* x12 + 1* x13. Definition P_id_ok (x12:Z) := 1* x12. Definition P_id_isNePal (x12:Z) := 2 + 2* x12. Definition P_id_tt := 2. Definition P_id_i := 2. Definition P_id_nil := 2. Definition P_id_a := 2. Definition P_id_isNeList (x12:Z) := 1 + 3* x12. Definition P_id_u := 2. Lemma P_id_active_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_active x13 <= P_id_active x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_proper_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_proper x13 <= P_id_proper x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_isQid_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_isQid x13 <= P_id_isQid x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_and_monotonic : forall x12 x14 x13 x15, (0 <= x15)/\ (x15 <= x14) -> (0 <= x13)/\ (x13 <= x12) ->P_id_and x13 x15 <= P_id_and x12 x14. Proof. intros x15 x14 x13 x12. intros [H_1 H_0]. intros [H_3 H_2]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_mark_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_mark x13 <= P_id_mark x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_top_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_top x13 <= P_id_top x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_isPal_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_isPal x13 <= P_id_isPal x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_isList_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_isList x13 <= P_id_isList x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id____monotonic : forall x12 x14 x13 x15, (0 <= x15)/\ (x15 <= x14) -> (0 <= x13)/\ (x13 <= x12) ->P_id___ x13 x15 <= P_id___ x12 x14. Proof. intros x15 x14 x13 x12. intros [H_1 H_0]. intros [H_3 H_2]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_ok_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_ok x13 <= P_id_ok x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_isNePal_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_isNePal x13 <= P_id_isNePal x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_isNeList_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_isNeList x13 <= P_id_isNeList x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_active_bounded : forall x12, (0 <= x12) ->0 <= P_id_active x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_proper_bounded : forall x12, (0 <= x12) ->0 <= P_id_proper x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_isQid_bounded : forall x12, (0 <= x12) ->0 <= P_id_isQid x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_and_bounded : forall x12 x13, (0 <= x12) ->(0 <= x13) ->0 <= P_id_and x13 x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_e_bounded : 0 <= P_id_e . Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_mark_bounded : forall x12, (0 <= x12) ->0 <= P_id_mark x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_top_bounded : forall x12, (0 <= x12) ->0 <= P_id_top x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_isPal_bounded : forall x12, (0 <= x12) ->0 <= P_id_isPal x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_isList_bounded : forall x12, (0 <= x12) ->0 <= P_id_isList x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_o_bounded : 0 <= P_id_o . Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id____bounded : forall x12 x13, (0 <= x12) ->(0 <= x13) ->0 <= P_id___ x13 x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_ok_bounded : forall x12, (0 <= x12) ->0 <= P_id_ok x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_isNePal_bounded : forall x12, (0 <= x12) ->0 <= P_id_isNePal x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_tt_bounded : 0 <= P_id_tt . Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_i_bounded : 0 <= P_id_i . Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_nil_bounded : 0 <= P_id_nil . Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_a_bounded : 0 <= P_id_a . Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_isNeList_bounded : forall x12, (0 <= x12) ->0 <= P_id_isNeList x12. Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_u_bounded : 0 <= P_id_u . Proof. intros . cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Definition measure := InterpZ.measure 0 P_id_active P_id_proper P_id_isQid P_id_and P_id_e P_id_mark P_id_top P_id_isPal P_id_isList P_id_o P_id___ P_id_ok P_id_isNePal P_id_tt P_id_i P_id_nil P_id_a P_id_isNeList P_id_u. Lemma measure_equation : forall t, measure t = match t with | (algebra.Alg.Term algebra.F.id_active (x12::nil)) => P_id_active (measure x12) | (algebra.Alg.Term algebra.F.id_proper (x12::nil)) => P_id_proper (measure x12) | (algebra.Alg.Term algebra.F.id_isQid (x12::nil)) => P_id_isQid (measure x12) | (algebra.Alg.Term algebra.F.id_and (x13::x12::nil)) => P_id_and (measure x13) (measure x12) | (algebra.Alg.Term algebra.F.id_e nil) => P_id_e | (algebra.Alg.Term algebra.F.id_mark (x12::nil)) => P_id_mark (measure x12) | (algebra.Alg.Term algebra.F.id_top (x12::nil)) => P_id_top (measure x12) | (algebra.Alg.Term algebra.F.id_isPal (x12::nil)) => P_id_isPal (measure x12) | (algebra.Alg.Term algebra.F.id_isList (x12::nil)) => P_id_isList (measure x12) | (algebra.Alg.Term algebra.F.id_o nil) => P_id_o | (algebra.Alg.Term algebra.F.id___ (x13::x12::nil)) => P_id___ (measure x13) (measure x12) | (algebra.Alg.Term algebra.F.id_ok (x12::nil)) => P_id_ok (measure x12) | (algebra.Alg.Term algebra.F.id_isNePal (x12::nil)) => P_id_isNePal (measure x12) | (algebra.Alg.Term algebra.F.id_tt nil) => P_id_tt | (algebra.Alg.Term algebra.F.id_i nil) => P_id_i | (algebra.Alg.Term algebra.F.id_nil nil) => P_id_nil | (algebra.Alg.Term algebra.F.id_a nil) => P_id_a | (algebra.Alg.Term algebra.F.id_isNeList (x12::nil)) => P_id_isNeList (measure x12) | (algebra.Alg.Term algebra.F.id_u nil) => P_id_u | _ => 0 end. Proof. intros t;case t;intros ;apply refl_equal. Qed. Lemma measure_bounded : forall t, 0 <= measure t. Proof. unfold measure in |-*. apply InterpZ.measure_bounded; cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Ltac generate_pos_hyp := match goal with | H:context [measure ?x] |- _ => let v := fresh "v" in (let H := fresh "h" in (set (H:=measure_bounded x) in *;set (v:=measure x) in *; clearbody H;clearbody v)) | |- context [measure ?x] => let v := fresh "v" in (let H := fresh "h" in (set (H:=measure_bounded x) in *;set (v:=measure x) in *; clearbody H;clearbody v)) end . Lemma rules_monotonic : forall l r, (algebra.EQT.axiom R_xml_0_deep_rew.R_xml_0_rules r l) -> measure r <= measure l. Proof. intros l r H. fold measure in |-*. inversion H;clear H;subst;inversion H0;clear H0;subst; simpl algebra.EQT.T.apply_subst in |-*; repeat ( match goal with | |- context [measure (algebra.Alg.Term ?f ?t)] => rewrite (measure_equation (algebra.Alg.Term f t)) end );repeat (generate_pos_hyp ); cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma measure_star_monotonic : forall l r, (closure.refl_trans_clos (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) r l) ->measure r <= measure l. Proof. unfold measure in *. apply InterpZ.measure_star_monotonic. intros ;apply P_id_active_monotonic;assumption. intros ;apply P_id_proper_monotonic;assumption. intros ;apply P_id_isQid_monotonic;assumption. intros ;apply P_id_and_monotonic;assumption. intros ;apply P_id_mark_monotonic;assumption. intros ;apply P_id_top_monotonic;assumption. intros ;apply P_id_isPal_monotonic;assumption. intros ;apply P_id_isList_monotonic;assumption. intros ;apply P_id____monotonic;assumption. intros ;apply P_id_ok_monotonic;assumption. intros ;apply P_id_isNePal_monotonic;assumption. intros ;apply P_id_isNeList_monotonic;assumption. intros ;apply P_id_active_bounded;assumption. intros ;apply P_id_proper_bounded;assumption. intros ;apply P_id_isQid_bounded;assumption. intros ;apply P_id_and_bounded;assumption. intros ;apply P_id_e_bounded;assumption. intros ;apply P_id_mark_bounded;assumption. intros ;apply P_id_top_bounded;assumption. intros ;apply P_id_isPal_bounded;assumption. intros ;apply P_id_isList_bounded;assumption. intros ;apply P_id_o_bounded;assumption. intros ;apply P_id____bounded;assumption. intros ;apply P_id_ok_bounded;assumption. intros ;apply P_id_isNePal_bounded;assumption. intros ;apply P_id_tt_bounded;assumption. intros ;apply P_id_i_bounded;assumption. intros ;apply P_id_nil_bounded;assumption. intros ;apply P_id_a_bounded;assumption. intros ;apply P_id_isNeList_bounded;assumption. intros ;apply P_id_u_bounded;assumption. apply rules_monotonic. Qed. Definition P_id_ISQID (x12:Z) := 0. Definition P_id____hat_1 (x12:Z) (x13:Z) := 0. Definition P_id_TOP (x12:Z) := 1* x12. Definition P_id_ISNEPAL (x12:Z) := 0. Definition P_id_AND (x12:Z) (x13:Z) := 0. Definition P_id_ISPAL (x12:Z) := 0. Definition P_id_ISNELIST (x12:Z) := 0. Definition P_id_ACTIVE (x12:Z) := 0. Definition P_id_PROPER (x12:Z) := 0. Definition P_id_ISLIST (x12:Z) := 0. Lemma P_id_ISQID_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_ISQID x13 <= P_id_ISQID x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id____hat_1_monotonic : forall x12 x14 x13 x15, (0 <= x15)/\ (x15 <= x14) -> (0 <= x13)/\ (x13 <= x12) -> P_id____hat_1 x13 x15 <= P_id____hat_1 x12 x14. Proof. intros x15 x14 x13 x12. intros [H_1 H_0]. intros [H_3 H_2]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_TOP_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_TOP x13 <= P_id_TOP x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_ISNEPAL_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_ISNEPAL x13 <= P_id_ISNEPAL x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_AND_monotonic : forall x12 x14 x13 x15, (0 <= x15)/\ (x15 <= x14) -> (0 <= x13)/\ (x13 <= x12) ->P_id_AND x13 x15 <= P_id_AND x12 x14. Proof. intros x15 x14 x13 x12. intros [H_1 H_0]. intros [H_3 H_2]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_ISPAL_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_ISPAL x13 <= P_id_ISPAL x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_ISNELIST_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_ISNELIST x13 <= P_id_ISNELIST x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_ACTIVE_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_ACTIVE x13 <= P_id_ACTIVE x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_PROPER_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_PROPER x13 <= P_id_PROPER x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma P_id_ISLIST_monotonic : forall x12 x13, (0 <= x13)/\ (x13 <= x12) ->P_id_ISLIST x13 <= P_id_ISLIST x12. Proof. intros x13 x12. intros [H_1 H_0]. cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Definition marked_measure := InterpZ.marked_measure 0 P_id_active P_id_proper P_id_isQid P_id_and P_id_e P_id_mark P_id_top P_id_isPal P_id_isList P_id_o P_id___ P_id_ok P_id_isNePal P_id_tt P_id_i P_id_nil P_id_a P_id_isNeList P_id_u P_id_ISQID P_id____hat_1 P_id_TOP P_id_ISNEPAL P_id_AND P_id_ISPAL P_id_ISNELIST P_id_ACTIVE P_id_PROPER P_id_ISLIST. Lemma marked_measure_equation : forall t, marked_measure t = match t with | (algebra.Alg.Term algebra.F.id_isQid (x12::nil)) => P_id_ISQID (measure x12) | (algebra.Alg.Term algebra.F.id___ (x13:: x12::nil)) => P_id____hat_1 (measure x13) (measure x12) | (algebra.Alg.Term algebra.F.id_top (x12::nil)) => P_id_TOP (measure x12) | (algebra.Alg.Term algebra.F.id_isNePal (x12::nil)) => P_id_ISNEPAL (measure x12) | (algebra.Alg.Term algebra.F.id_and (x13:: x12::nil)) => P_id_AND (measure x13) (measure x12) | (algebra.Alg.Term algebra.F.id_isPal (x12::nil)) => P_id_ISPAL (measure x12) | (algebra.Alg.Term algebra.F.id_isNeList (x12::nil)) => P_id_ISNELIST (measure x12) | (algebra.Alg.Term algebra.F.id_active (x12::nil)) => P_id_ACTIVE (measure x12) | (algebra.Alg.Term algebra.F.id_proper (x12::nil)) => P_id_PROPER (measure x12) | (algebra.Alg.Term algebra.F.id_isList (x12::nil)) => P_id_ISLIST (measure x12) | _ => measure t end. Proof. reflexivity . Qed. Lemma marked_measure_star_monotonic : forall f l1 l2, (closure.refl_trans_clos (closure.one_step_list (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules) ) l1 l2) -> marked_measure (algebra.Alg.Term f l1) <= marked_measure (algebra.Alg.Term f l2). Proof. unfold marked_measure in *. apply InterpZ.marked_measure_star_monotonic. intros ;apply P_id_active_monotonic;assumption. intros ;apply P_id_proper_monotonic;assumption. intros ;apply P_id_isQid_monotonic;assumption. intros ;apply P_id_and_monotonic;assumption. intros ;apply P_id_mark_monotonic;assumption. intros ;apply P_id_top_monotonic;assumption. intros ;apply P_id_isPal_monotonic;assumption. intros ;apply P_id_isList_monotonic;assumption. intros ;apply P_id____monotonic;assumption. intros ;apply P_id_ok_monotonic;assumption. intros ;apply P_id_isNePal_monotonic;assumption. intros ;apply P_id_isNeList_monotonic;assumption. intros ;apply P_id_active_bounded;assumption. intros ;apply P_id_proper_bounded;assumption. intros ;apply P_id_isQid_bounded;assumption. intros ;apply P_id_and_bounded;assumption. intros ;apply P_id_e_bounded;assumption. intros ;apply P_id_mark_bounded;assumption. intros ;apply P_id_top_bounded;assumption. intros ;apply P_id_isPal_bounded;assumption. intros ;apply P_id_isList_bounded;assumption. intros ;apply P_id_o_bounded;assumption. intros ;apply P_id____bounded;assumption. intros ;apply P_id_ok_bounded;assumption. intros ;apply P_id_isNePal_bounded;assumption. intros ;apply P_id_tt_bounded;assumption. intros ;apply P_id_i_bounded;assumption. intros ;apply P_id_nil_bounded;assumption. intros ;apply P_id_a_bounded;assumption. intros ;apply P_id_isNeList_bounded;assumption. intros ;apply P_id_u_bounded;assumption. apply rules_monotonic. intros ;apply P_id_ISQID_monotonic;assumption. intros ;apply P_id____hat_1_monotonic;assumption. intros ;apply P_id_TOP_monotonic;assumption. intros ;apply P_id_ISNEPAL_monotonic;assumption. intros ;apply P_id_AND_monotonic;assumption. intros ;apply P_id_ISPAL_monotonic;assumption. intros ;apply P_id_ISNELIST_monotonic;assumption. intros ;apply P_id_ACTIVE_monotonic;assumption. intros ;apply P_id_PROPER_monotonic;assumption. intros ;apply P_id_ISLIST_monotonic;assumption. Qed. Ltac rewrite_and_unfold := do 2 (rewrite marked_measure_equation); repeat ( match goal with | |- context [measure (algebra.Alg.Term ?f ?t)] => rewrite (measure_equation (algebra.Alg.Term f t)) | H:context [measure (algebra.Alg.Term ?f ?t)] |- _ => rewrite (measure_equation (algebra.Alg.Term f t)) in H|- end ). Definition lt a b := (Zwf.Zwf 0) (marked_measure a) (marked_measure b). Definition le a b := marked_measure a <= marked_measure b. Lemma lt_le_compat : forall a b c, (lt a b) ->(le b c) ->lt a c. Proof. unfold lt, le in *. intros a b c. apply (interp.le_lt_compat_right (interp.o_Z 0)). Qed. Lemma wf_lt : well_founded lt. Proof. unfold lt in *. apply Inverse_Image.wf_inverse_image with (B:=Z). apply Zwf.Zwf_well_founded. Qed. Lemma DP_R_xml_0_scc_40_strict_in_lt : Relation_Definitions.inclusion _ DP_R_xml_0_scc_40_strict lt. Proof. unfold Relation_Definitions.inclusion, lt in *. intros a b H;destruct H; match goal with | |- (Zwf.Zwf 0) _ (marked_measure (algebra.Alg.Term ?f ?l)) => let l'' := algebra.Alg_ext.find_replacement l in ((apply (interp.le_lt_compat_right (interp.o_Z 0)) with (marked_measure (algebra.Alg.Term f l''));[idtac| apply marked_measure_star_monotonic; repeat (apply algebra.EQT_ext.one_step_list_refl_trans_clos); (assumption)||(constructor 1)])) end ;clear ;rewrite_and_unfold ;repeat (generate_pos_hyp ); cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Lemma DP_R_xml_0_scc_40_large_in_le : Relation_Definitions.inclusion _ DP_R_xml_0_scc_40_large le. Proof. unfold Relation_Definitions.inclusion, le, Zwf.Zwf in *. intros a b H;destruct H; match goal with | |- _ <= marked_measure (algebra.Alg.Term ?f ?l) => let l'' := algebra.Alg_ext.find_replacement l in ((apply (interp.le_trans (interp.o_Z 0)) with (marked_measure (algebra.Alg.Term f l''));[idtac| apply marked_measure_star_monotonic; repeat (apply algebra.EQT_ext.one_step_list_refl_trans_clos); (assumption)||(constructor 1)])) end ;clear ;rewrite_and_unfold ;repeat (generate_pos_hyp ); cbv beta iota zeta delta - [Zle Zlt Zplus Zmult] ;intuition; (auto with zarith)||(repeat (translate_vars );prove_ineq ). Qed. Definition wf_DP_R_xml_0_scc_40_large := WF_DP_R_xml_0_scc_40_large.wf. Lemma wf : well_founded WF_DP_R_xml_0.DP_R_xml_0_scc_40. Proof. intros x. apply (well_founded_ind wf_lt). clear x. intros x. pattern x. apply (@Acc_ind _ DP_R_xml_0_scc_40_large). clear x. intros x _ IHx IHx'. constructor. intros y H. destruct H; (apply IHx';apply DP_R_xml_0_scc_40_strict_in_lt; econstructor eassumption)|| ((apply IHx;[econstructor eassumption| intros y' Hlt;apply IHx';apply lt_le_compat with (1:=Hlt) ; apply DP_R_xml_0_scc_40_large_in_le;econstructor eassumption])). apply wf_DP_R_xml_0_scc_40_large. Qed. End WF_DP_R_xml_0_scc_40. Definition wf_DP_R_xml_0_scc_40 := WF_DP_R_xml_0_scc_40.wf. Lemma acc_DP_R_xml_0_scc_40 : forall x y, (DP_R_xml_0_scc_40 x y) ->Acc WF_R_xml_0_deep_rew.DP_R_xml_0 x. Proof. intros x. pattern x. apply (@Acc_ind _ DP_R_xml_0_scc_40). intros x' _ Hrec y h. inversion h;clear h;subst; constructor;intros _y _h;inversion _h;clear _h;subst; (eapply Hrec;econstructor eassumption)|| ((eapply acc_DP_R_xml_0_non_scc_39; econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))|| ((eapply acc_DP_R_xml_0_non_scc_16; econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))|| ((R_xml_0_deep_rew.impossible_star_reduction_R_xml_0 )|| (eapply Hrec; econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))))). apply wf_DP_R_xml_0_scc_40. Qed. Lemma wf : well_founded WF_R_xml_0_deep_rew.DP_R_xml_0. Proof. constructor;intros _y _h;inversion _h;clear _h;subst; (eapply acc_DP_R_xml_0_non_scc_39; econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))|| ((eapply acc_DP_R_xml_0_non_scc_38; econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))|| ((eapply acc_DP_R_xml_0_non_scc_37; econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))|| ((eapply acc_DP_R_xml_0_non_scc_36; econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))|| ((eapply acc_DP_R_xml_0_non_scc_35; econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))|| ((eapply acc_DP_R_xml_0_non_scc_34; econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))|| ((eapply acc_DP_R_xml_0_non_scc_33; econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))|| ((eapply acc_DP_R_xml_0_non_scc_32; econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))|| ((eapply acc_DP_R_xml_0_non_scc_31; econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))|| ((eapply acc_DP_R_xml_0_non_scc_30; econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))|| ((eapply acc_DP_R_xml_0_non_scc_29; econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))|| ((eapply acc_DP_R_xml_0_non_scc_28; econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))|| ((eapply acc_DP_R_xml_0_non_scc_27; econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))|| ((eapply acc_DP_R_xml_0_non_scc_26; econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))|| ((eapply acc_DP_R_xml_0_non_scc_25; econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))|| ((eapply acc_DP_R_xml_0_non_scc_24; econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))|| ((eapply acc_DP_R_xml_0_non_scc_23; econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))|| ((eapply acc_DP_R_xml_0_non_scc_22; econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))|| ((eapply acc_DP_R_xml_0_non_scc_21; econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))|| ((eapply acc_DP_R_xml_0_non_scc_20; econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))|| ((eapply acc_DP_R_xml_0_non_scc_19; econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))|| ((eapply acc_DP_R_xml_0_non_scc_18; econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))|| ((eapply acc_DP_R_xml_0_non_scc_17; econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))|| ((eapply acc_DP_R_xml_0_non_scc_16; econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))|| ((eapply acc_DP_R_xml_0_non_scc_15; econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))|| ((eapply acc_DP_R_xml_0_non_scc_14; econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))|| ((eapply acc_DP_R_xml_0_non_scc_13; econstructor (eassumption)||(algebra.Alg_ext.star_refl' ))|| ((eapply acc_DP_R_xml_0_non_scc_12; econstructor (eassumption)|| (algebra.Alg_ext.star_refl' ))|| ((eapply acc_DP_R_xml_0_non_scc_11; econstructor (eassumption)|| (algebra.Alg_ext.star_refl' ))|| ((eapply acc_DP_R_xml_0_non_scc_10; econstructor (eassumption)|| (algebra.Alg_ext.star_refl' ))|| ((eapply acc_DP_R_xml_0_non_scc_9; econstructor (eassumption)|| (algebra.Alg_ext.star_refl' ))|| ((eapply acc_DP_R_xml_0_non_scc_8; econstructor (eassumption)|| (algebra.Alg_ext.star_refl' ))|| ((eapply acc_DP_R_xml_0_non_scc_7; econstructor (eassumption)|| (algebra.Alg_ext.star_refl' ))|| ((eapply acc_DP_R_xml_0_non_scc_6; econstructor (eassumption)|| (algebra.Alg_ext.star_refl' ))|| ((eapply acc_DP_R_xml_0_non_scc_5; econstructor (eassumption)|| (algebra.Alg_ext.star_refl' ))|| ((eapply acc_DP_R_xml_0_non_scc_4; econstructor (eassumption)|| (algebra.Alg_ext.star_refl' ))|| ((eapply acc_DP_R_xml_0_non_scc_3; econstructor (eassumption)|| (algebra.Alg_ext.star_refl' ))|| ((eapply acc_DP_R_xml_0_non_scc_2; econstructor (eassumption)|| (algebra.Alg_ext.star_refl' ))|| ((eapply acc_DP_R_xml_0_non_scc_1; econstructor (eassumption)|| (algebra.Alg_ext.star_refl' ))|| ((eapply acc_DP_R_xml_0_non_scc_0; econstructor (eassumption)|| (algebra.Alg_ext.star_refl' ))|| ((eapply acc_DP_R_xml_0_scc_40; econstructor (eassumption)|| (algebra.Alg_ext.star_refl' ))|| ((eapply acc_DP_R_xml_0_scc_39; econstructor (eassumption)|| (algebra.Alg_ext.star_refl' ))|| ((eapply acc_DP_R_xml_0_scc_38; econstructor (eassumption)|| (algebra.Alg_ext.star_refl' ))|| ((eapply acc_DP_R_xml_0_scc_37; econstructor (eassumption)|| (algebra.Alg_ext.star_refl' ))|| ((eapply acc_DP_R_xml_0_scc_36; econstructor (eassumption)|| (algebra.Alg_ext.star_refl' ))|| ((eapply acc_DP_R_xml_0_scc_35; econstructor (eassumption)|| (algebra.Alg_ext.star_refl' ))|| ((eapply acc_DP_R_xml_0_scc_34; econstructor (eassumption)|| (algebra.Alg_ext.star_refl' ))|| ((eapply acc_DP_R_xml_0_scc_33; econstructor (eassumption)|| (algebra.Alg_ext.star_refl' ))|| ((eapply acc_DP_R_xml_0_scc_32; econstructor (eassumption)|| (algebra.Alg_ext.star_refl' ))|| ((eapply acc_DP_R_xml_0_scc_31; econstructor (eassumption)|| (algebra.Alg_ext.star_refl' ))|| ((eapply acc_DP_R_xml_0_scc_30; econstructor (eassumption)|| (algebra.Alg_ext.star_refl' ))|| ((eapply acc_DP_R_xml_0_scc_29; econstructor (eassumption)|| (algebra.Alg_ext.star_refl' ))|| ((eapply acc_DP_R_xml_0_scc_28; econstructor (eassumption)|| (algebra.Alg_ext.star_refl' ))|| ((eapply acc_DP_R_xml_0_scc_27; econstructor (eassumption)|| (algebra.Alg_ext.star_refl' ))|| ((eapply acc_DP_R_xml_0_scc_26; econstructor (eassumption)|| (algebra.Alg_ext.star_refl' ))|| ((eapply acc_DP_R_xml_0_scc_25; econstructor (eassumption)|| (algebra.Alg_ext.star_refl' ))|| ((eapply acc_DP_R_xml_0_scc_24; econstructor (eassumption)|| (algebra.Alg_ext.star_refl' ))|| ((eapply acc_DP_R_xml_0_scc_23; econstructor (eassumption)|| (algebra.Alg_ext.star_refl' ))|| ((eapply acc_DP_R_xml_0_scc_22; econstructor (eassumption)|| (algebra.Alg_ext.star_refl' ))|| ((eapply acc_DP_R_xml_0_scc_21; econstructor (eassumption)|| (algebra.Alg_ext.star_refl' ))|| ((eapply acc_DP_R_xml_0_scc_20; econstructor (eassumption)|| (algebra.Alg_ext.star_refl' ))|| ((eapply acc_DP_R_xml_0_scc_19; econstructor ( eassumption)|| ( algebra.Alg_ext.star_refl' ))|| ((eapply acc_DP_R_xml_0_scc_18; econstructor ( eassumption)|| ( algebra.Alg_ext.star_refl' ))|| (( eapply acc_DP_R_xml_0_scc_17; econstructor ( eassumption)|| ( algebra.Alg_ext.star_refl' ))|| ( ( eapply acc_DP_R_xml_0_scc_16; econstructor ( eassumption)|| ( algebra.Alg_ext.star_refl' ))|| ( ( eapply acc_DP_R_xml_0_scc_15; econstructor ( eassumption)|| ( algebra.Alg_ext.star_refl' ))|| ( ( eapply acc_DP_R_xml_0_scc_14; econstructor ( eassumption)|| ( algebra.Alg_ext.star_refl' ))|| ( ( eapply acc_DP_R_xml_0_scc_13; econstructor ( eassumption)|| ( algebra.Alg_ext.star_refl' ))|| ( ( eapply acc_DP_R_xml_0_scc_12; econstructor ( eassumption)|| ( algebra.Alg_ext.star_refl' ))|| ( ( eapply acc_DP_R_xml_0_scc_11; econstructor ( eassumption)|| ( algebra.Alg_ext.star_refl' ))|| ( ( eapply acc_DP_R_xml_0_scc_10; econstructor ( eassumption)|| ( algebra.Alg_ext.star_refl' ))|| ( ( eapply acc_DP_R_xml_0_scc_9; econstructor ( eassumption)|| ( algebra.Alg_ext.star_refl' ))|| ( ( eapply acc_DP_R_xml_0_scc_8; econstructor ( eassumption)|| ( algebra.Alg_ext.star_refl' ))|| ( ( eapply acc_DP_R_xml_0_scc_7; econstructor ( eassumption)|| ( algebra.Alg_ext.star_refl' ))|| ( ( eapply acc_DP_R_xml_0_scc_6; econstructor ( eassumption)|| ( algebra.Alg_ext.star_refl' ))|| ( ( eapply acc_DP_R_xml_0_scc_5; econstructor ( eassumption)|| ( algebra.Alg_ext.star_refl' ))|| ( ( eapply acc_DP_R_xml_0_scc_4; econstructor ( eassumption)|| ( algebra.Alg_ext.star_refl' ))|| ( ( eapply acc_DP_R_xml_0_scc_3; econstructor ( eassumption)|| ( algebra.Alg_ext.star_refl' ))|| ( ( eapply acc_DP_R_xml_0_scc_2; econstructor ( eassumption)|| ( algebra.Alg_ext.star_refl' ))|| ( ( eapply acc_DP_R_xml_0_scc_1; econstructor ( eassumption)|| ( algebra.Alg_ext.star_refl' ))|| ( ( eapply acc_DP_R_xml_0_scc_0; econstructor ( eassumption)|| ( algebra.Alg_ext.star_refl' ))|| ( ( R_xml_0_deep_rew.impossible_star_reduction_R_xml_0 )|| ( fail)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))). Qed. End WF_DP_R_xml_0. Definition wf_H := WF_DP_R_xml_0.wf. Lemma wf : well_founded (algebra.EQT.one_step R_xml_0_deep_rew.R_xml_0_rules). Proof. apply ddp.dp_criterion. apply R_xml_0_deep_rew.R_xml_0_non_var. apply R_xml_0_deep_rew.R_xml_0_reg. intros ; apply (ddp.constructor_defined_dec _ _ R_xml_0_deep_rew.R_xml_0_rules_included). refine (Inclusion.wf_incl _ _ _ _ wf_H). intros x y H. destruct (R_xml_0_dp_step_spec H) as [f [l1 [l2 [H1 [H2 H3]]]]]. destruct (ddp.dp_list_complete _ _ R_xml_0_deep_rew.R_xml_0_rules_included _ _ H3) as [x' [y' [sigma [h1 [h2 h3]]]]]. clear H3. subst. vm_compute in h3|-. let e := type of h3 in (dp_concl_tac h2 h3 ltac:(fun _ => idtac) e). Qed. End WF_R_xml_0_deep_rew. (* *** Local Variables: *** *** coq-prog-name: "coqtop" *** *** coq-prog-args: ("-emacs-U" "-I" "$COCCINELLE/examples" "-I" "$COCCINELLE/term_algebra" "-I" "$COCCINELLE/term_orderings" "-I" "$COCCINELLE/basis" "-I" "$COCCINELLE/list_extensions" "-I" "$COCCINELLE/examples/cime_trace/") *** *** compile-command: "coqc -I $COCCINELLE/term_algebra -I $COCCINELLE/term_orderings -I $COCCINELLE/basis -I $COCCINELLE/list_extensions -I $COCCINELLE/examples/cime_trace/ -I $COCCINELLE/examples/ c_output/strat/tpdb-5.0___TRS___TRCSR___PALINDROME_nokinds_C.trs/a3pat.v" *** *** End: *** *)