import logic

theorem tst {a b c : Prop} : a → b → c → a ∧ b :=
begin
  intros [Ha, Hb, Hc],
  reverts [Hb, Ha],
  intros [Hb2, Ha2],
  apply (and.intro Ha2 Hb2),
end

theorem foo1 {A : Type} (a b c : A) (P : A → Prop) : P a → a = b → P b :=
begin
  intros  [Hp, Heq],
  reverts [Heq, Hp],
  intro Heq,
  apply (eq.rec_on Heq),
  intro Pa,
  apply Pa
end

theorem foo2 {A : Type} (a b c : A) (P : A → Prop) : P a → a = b → P b :=
begin
  intros [Hp, Heq],
  apply (eq.rec_on Heq Hp)
end

print definition foo1
print definition foo2
