(* import("tactic.lua") *)
Variables p q r : Bool

Theorem T1 : p => q => p /\ q :=
   Discharge (fun H1,
      Discharge (fun H2,
            let H1 : p := _,
                H2 : q := _
            in Conj H1 H2
         )).
    exact -- solve first metavar
    done
    exact -- solve second metavar
    done

(*
simple_tac = Repeat(imp_tac() ^ conj_tac() ^ assumption_tac())
*)

Theorem T2 : p => q => p /\ q /\ p := _.
    simple_tac
    done

print Environment 1

Theorem T3 : p => p /\ q => r => q /\ r /\ p := _.
    (* Repeat(OrElse(imp_tac(), conj_tac(), conj_hyp_tac(), assumption_tac())) *)
    done

-- Display proof term generated by previous tac
print Environment 1

Theorem T4 : p => p /\ q => r => q /\ r /\ p := _.
    Repeat (OrElse (apply Discharge) (apply Conj) conj_hyp exact)
    done

-- Display proof term generated by previous tac --
print Environment 1