theorem
proved
bool_distinguishable
show as:
view math explainer →
open explainer
Generate a durable explainer page for this declaration.
open lean source
IndisputableMonolith.Foundation.SelfBootstrapDistinguishability on GitHub at line 21.
browse module
All declarations in this module, on Recognition.
explainer page
depends on
used by
formal source
18namespace SelfBootstrap
19
20/-- The two-element type carries a definitional distinction. -/
21theorem bool_distinguishable : (false : Bool) ≠ true := by
22 decide
23
24/-- Any carrier supporting a Boolean predicate with both truth values
25inherits an object-level distinction. -/
26theorem distinguishability_lifted_from_bool
27 {K : Type*} (P : K → Bool)
28 (hpos : ∃ x : K, P x = true) (hneg : ∃ x : K, P x = false) :
29 ∃ x y : K, x ≠ y := by
30 obtain ⟨x, hx⟩ := hpos
31 obtain ⟨y, hy⟩ := hneg
32 refine ⟨x, y, ?_⟩
33 intro hxy
34 have hfalse : P x = false := by
35 simpa [hxy] using hy
36 cases hx.symm.trans hfalse
37
38/-- A proposition is never equal to its negation in classical logic. -/
39theorem prop_ne_not (P : Prop) : P ≠ ¬ P := by
40 intro h
41 by_cases hp : P
42 · have hnp : ¬ P := by
43 rw [h] at hp
44 exact hp
45 exact hnp hp
46 · have hp' : P := by
47 rw [h.symm] at hp
48 exact hp
49 exact hp hp'
50
51/-- The claim that a carrier admits a non-trivial distinction is itself