import data.list open nat list example (H : false) : (1 : ℕ) + 1 = (2 : ℕ) := begin replace (1 : ℕ) with (succ 0) at {1}, end example (H : false) : (1 : ℕ) + 1 = (2 : ℕ) := begin replace (1 : ℕ) with (succ 1), end definition foo (n : ℕ) : ℕ := n definition bar := foo example (h : true) : foo 2 = bar 2 := begin replace foo 2 with bar 2 at h, reflexivity end constants (P : ℕ → Type₁) (p : P (3 + 1)) (f : Πn, P n) example : f (3 + 1) = p := begin replace ((3 : ℕ) + 1) with (4 : ℕ), end variables {A B : Type} lemma my_map_concat (f : A → B) (a : A) : Πl, map f (concat a l) = concat (f a) (map f l) | nil := rfl | (b::l) := begin replace concat a (b :: l) with b :: concat a l, replace concat (f a) (map f (b :: l)) with f b :: concat (f a) (map f l), replace map f (b :: concat a l) with f b :: map f (concat a l), congruence, apply my_map_concat end