intro¶
In general, the intro tactic changes a goal of type P → Q into a hypothesis of type P and a goal of type Q. Here is a simple example.
example (P Q : Prop) (HQ : Q) : P → Q :=
begin
  intro HP,
  exact HQ
end
When this proof begins, the state is
P Q : Prop,
HQ : Q
⊢ P → Q
After intro HP the state is
P Q : Prop,
HQ : Q,
HP : P
⊢ Q
and the goal is then solved with the exact tactic.
∀ is a function¶
Terms of type ∀ x, P x can be regarded as functions which eat a variable x and spit out a proof of P x; here is an example of what this looks like.
example (X : Type) (a : X) (P : X → Prop) (H : ∀ x, P x) : P a :=
begin
  /-
  X : Type,
  a : X,
  P : X → Prop,
  H : ∀ (x : X), P x
  ⊢ P a
  -/
  exact (H a), -- H is a function; evaluate it at a
end
¬ is a function¶
In Lean, ¬ P is notation for not P, which is defined to mean P → false. So one can work with ¬ P as if it were a function.
example (P Q : Prop) : ¬ P → ¬ (P ∧ Q) :=
begin
  intro HnP,
    -- goal is now ⊢ ¬ (P ∧ Q)
  intro HPQ,
    -- state now
    -- HnP : ¬ P
    -- HPQ : P ∧ Q
    -- goal is ⊢ false
  apply HnP, -- think of HnP : P → false
    -- goal now P
  cases HPQ with HP HQ,
  exact HP
end