lean4-htt/src/Init/Omega/Logic.lean
Sebastian Ullrich 09a5b34931
feat: make private the default in module (#9044)
This PR adjusts the experimental module system to make `private` the
default visibility modifier in `module`s, introducing `public` as a new
modifier instead. `public section` can be used to revert the default for
an entire section, though this is more intended to ease gradual adoption
of the new semantics such as in `Init` (and soon `Std`) where they
should be replaced by a future decl-by-decl re-review of visibilities.
2025-06-28 16:30:53 +00:00

54 lines
1.8 KiB
Text
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/-
Copyright (c) 2023 Lean FRO, LLC. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Kim Morrison
-/
module
prelude
public import Init.PropLemmas
public section
/-!
# Specializations of basic logic lemmas
These are useful for `omega` while constructing proofs, but not considered generally useful
so are hidden in the `Lean.Omega` namespace.
If you find yourself needing them elsewhere, please move them first to another file.
-/
namespace Lean.Omega
theorem and_not_not_of_not_or (h : ¬ (p q)) : ¬ p ∧ ¬ q := not_or.mp h
theorem Decidable.or_not_not_of_not_and [Decidable p] [Decidable q]
(h : ¬ (p ∧ q)) : ¬ p ¬ q :=
Decidable.not_and_iff_or_not.mp h
theorem Decidable.and_or_not_and_not_of_iff {p q : Prop} [Decidable q] (h : p ↔ q) :
(p ∧ q) (¬p ∧ ¬q) := Decidable.iff_iff_and_or_not_and_not.mp h
theorem Decidable.not_iff_iff_and_not_or_not_and [Decidable a] [Decidable b] :
(¬ (a ↔ b)) ↔ (a ∧ ¬ b) ((¬ a) ∧ b) :=
⟨fun e => if hb : b then
.inr ⟨fun ha => e ⟨fun _ => hb, fun _ => ha⟩, hb⟩
else
.inl ⟨if ha : a then ha else False.elim (e ⟨fun ha' => absurd ha' ha, fun hb' => absurd hb' hb⟩), hb⟩,
Or.rec (And.rec fun ha nb w => nb (w.mp ha)) (And.rec fun na hb w => na (w.mpr hb))⟩
theorem Decidable.and_not_or_not_and_of_not_iff [Decidable a] [Decidable b]
(h : ¬ (a ↔ b)) : a ∧ ¬b ¬a ∧ b :=
Decidable.not_iff_iff_and_not_or_not_and.mp h
theorem Decidable.and_not_of_not_imp [Decidable a] (h : ¬(a → b)) : a ∧ ¬b :=
Decidable.not_imp_iff_and_not.mp h
theorem ite_disjunction {α : Type u} {P : Prop} [Decidable P] {a b : α} :
(P ∧ (if P then a else b) = a) (¬ P ∧ (if P then a else b) = b) :=
if h : P then
.inl ⟨h, if_pos h⟩
else
.inr ⟨h, if_neg h⟩
end Lean.Omega