Theorem: cantor_diagonal (Lectures/CantorTree.lean)

State before:
α : Type
f : α → α → Bool
⊢ ∃ t, ∀ (a : α), t ≠ f a
Tactic:
use (fun a ↦ !(f a a) )
State after:
case h
α : Type
f : α → α → Bool
⊢ ∀ (a : α), (fun a => !f a a) ≠ f a

State before:
case h
α : Type
f : α → α → Bool
⊢ ∀ (a : α), (fun a => !f a a) ≠ f a
Tactic:
intro a h
State after:
case h
α : Type
f : α → α → Bool
a : α
h : (fun a => !f a a) = f a
⊢ False

State before:
case h
α : Type
f : α → α → Bool
a : α
h : (fun a => !f a a) = f a
⊢ False
Tactic:
let h' := congrFun h a
State after:
case h
α : Type
f : α → α → Bool
a : α
h : (fun a => !f a a) = f a
h' : (!f a a) = f a a := congrFun h a
⊢ False

State before:
case h
α : Type
f : α → α → Bool
a : α
h : (fun a => !f a a) = f a
h' : (!f a a) = f a a := congrFun h a
⊢ False
Tactic:
by_cases c:f a a <;> simp [c] at h'
State after:
no goals