intros;apply in_split_app in H as [(?&?&?)|(?&?&?)];subst.
left;econstructor;split;reflexivity.
destruct x;injection H;intros;subst.
repeat (right||split||rewrite app_nil_r||reflexivity).
right;left;econstructor;split;reflexivity.
Qed.
Ltac rew1 := repeat rewrite <- app_assoc;repeat rewrite <- app_comm_cons.
Ltac rew2 := repeat rewrite app_comm_cons;try rewrite app_assoc.
Ltac constr := constructor 3||constructor 4||constructor 5||constructor 6||constructor 7||constructor 8.
Local Ltac temp2 X Y Z :=
(rew1;constr;rew2;eapply X;rew1;reflexivity)||
(rew2;constr;rew1;eapply X;rew2;reflexivity)||
(rew1;constr;rew2;[eapply Y|eapply Z];rew1;reflexivity)||
(rew2;constr;rew1;[eapply Y|eapply Z];rew2;reflexivity).
Local Ltac temp3 H IHG IHG1 IHG2 Heql A0 := induction H;intros;subst;
try apply in_split_app in Heql as [(?&?&?)|(?&?&?)];
subst;try (temp2 IHG IHG1 IHG2;fail);[is_ass|constructor 2;in_solve|
apply Cut with A0;[try rewrite app_comm_cons|rew2];auto..].

(* Specifications: *)
Lemma WeakL : forall Γ1 Γ2 Δ A, Γ1++Γ2 ⊃ Δ -> Γ1++A::Γ2 ⊃ Δ.
intros;remember (Γ1++Γ2);revert Γ1 Γ2 Heql;temp3 H IHG IHG1 IHG2 Heql A0.