set_option blast.subst false set_option blast.simp false set_option blast.init_depth 10 set_option blast.inc_depth 100 example (p : nat → nat → Prop) (f : nat → nat) (a b c d : nat) : p (f a) (f b) → a = c → b = d → b = c → p (f c) (f c) := by blast example (p : nat → nat → Prop) (a b c d : nat) : p a b → a = c → b = d → p c d := by blast example (p : nat → nat → Prop) (f : nat → nat) (a b c d : nat) : p (f (f (f (f (f (f a)))))) (f (f (f (f (f (f b)))))) → a = c → b = d → b = c → p (f (f (f (f (f (f c)))))) (f (f (f (f (f (f c)))))) := by blast