Ltac landL :=
    repeat match goal with
    | |- ?L1 //\\ ?L2 |-- ?R =>
        match L1 with
        | context [R] => apply landL1
        | _ =>
          match L2 with
          | context [R] => apply landL2
          end
        end
    end.

(* Specifications: *)
Lemma lentails_refl P : P |-- P.
Lemma landC P Q: P //\\ Q -|- Q //\\ P.
Lemma landA P Q R: (P //\\ Q) //\\ R -|- P //\\ (Q //\\ R).
Lemma lorC P Q : P \\// Q -|- Q \\// P.
Lemma lorA P Q R : (P \\// Q) \\// R -|- P \\// (Q \\// R).
Lemma limplValid P Q: |-- P -->> Q <-> P |-- Q.
Lemma limplL P Q CL CR (HP: CL |-- P) (HR: Q //\\ CL |-- CR) : (P -->> Q) //\\ CL |-- CR.
Lemma limplAdj2 P Q R : P -->> Q -->> R -|- P //\\ Q -->> R.
Lemma landexistsDL1 (f : T -> A) (P : A) : lexists f //\\ P |-- Exists a, (f a //\\ P).
Lemma landexistsDL2 (f : T -> A) (P : A) : P //\\ lexists f |-- Exists a, (P //\\ f a).
Lemma landexistsDR1 (f : T -> A) (P : A) : Exists a, (f a //\\ P) |-- lexists f //\\ P.
Lemma landexistsDR2 (f : T -> A) (P : A) : Exists a, (P //\\ f a) |-- P //\\ lexists f.
Lemma landexistsD1 (f : T -> A) (P : A) : (Exists a, f a) //\\ P -|- Exists a, (f a //\\ P).
Lemma lorexistsDL (f : T -> A) (P : A) {H : Inhabited T} : (Exists a, f a) \\// P |-- Exists a, (f a \\// P).
Lemma lorexistsDR (f : T -> A) (P : A) : Exists a, (f a \\// P) |-- (Exists a, f a) \\// P.
Lemma lorexistsD (f : T -> A) (P : A) {H : Inhabited T} : (Exists a, f a) \\// P -|- Exists a, (f a \\// P).
Lemma landforallDL (f : T -> A) (P : A) : (Forall a, f a) //\\ P |-- Forall a, (f a //\\ P).
Lemma landforallDR {H: Inhabited T} (f : T -> A) (P : A) : Forall a, (f a //\\ P) |-- (Forall a, f a) //\\ P.
Lemma landforallD (f : T -> A) (P : A) {H : Inhabited T} : (Forall a, f a) //\\ P -|- Forall a, (f a //\\ P).
Lemma lorforallDL (f : T -> A) (P : A) : (Forall a, f a) \\// P |-- Forall a, (f a \\// P).
Lemma limplTrue P : ltrue -->> P -|- P.
Lemma limplexistsE (P : T -> A) (Q : A) : (Exists x, P x) -->> Q -|- Forall x, (P x -->> Q).
Lemma limplforallER (P : T -> A) (Q : A) : Exists x, (P x -->> Q) |-- (Forall x, P x) -->> Q.
Lemma lforallR2 (P : A) (Q : T -> A) (H : P |-- lforall Q) : forall x, P |-- Q x.
Lemma lexistsL2 (P : T -> A) (Q : A) (H : lexists P |-- Q) : forall x, P x |-- Q.
Lemma landtrueL : forall a, ltrue //\\ a -|- a.
Lemma landtrueR : forall a, a //\\ ltrue -|- a.
Lemma curry : forall a b c, (a //\\ b) -->> c -|- a -->> (b -->> c).