meta def Fait_parser : lean.parser (name × pexpr × option pexpr) :=
with_desc "... : ... (par ... (appliqué à ...))" $
do { dem ← tk "par" *> texpr,
args ← applique_a_parser,
pure (n, enonce, some (pexpr_mk_app dem args)) } <|>
Annonce un énoncé intermédiaire (et le démontre immédiatement si « par » est utilisé).
meta def tactic.interactive.Fait : parse Fait_parser → tactic unit
| (n, enonce, some prf) := do verifie_nom n,
eenonce ← i_to_expr enonce,
| (n, enonce, none) := do verifie_nom n,
i_to_expr enonce >>= tactic.assert n,
example (n : ℕ) : n + n + n = 3*n :=
example (n : ℤ) (h : 0 < n) : true :=
Fait clef : 0 < 2*n par h,
success_if_fail { Fait clef : 0 < 2*n par h },
Fait clefbis : 0 < 2*n par mul_pos appliqué à [zero_lt_two, h],
example (n : ℕ) (h : 0 < n) : 0 < 2*n :=
Fait clef : 0 < 2*n par h,