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
         )).
    apply assumption_tactic (* solve first metavar *)
    done
    apply assumption_tactic (* solve second metavar *)
    done

(**
simple_tac = REPEAT(imp_tactic() ^ conj_tactic() ^ assumption_tactic())
**)

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

Show Environment 1

Theorem T3 : p => p /\ q => r => q /\ r /\ p := _.
    apply (** REPEAT(ORELSE(imp_tactic, conj_tactic, conj_hyp_tactic, assumption_tactic)) **)
    done

(* Display proof term generated by previous tactic *)
Show Environment 1