Propositions and theories #
Main definitions #
Proposition: the type of propositions over a given type of atom. This type has aBotinstance wheneverAtomdoes, and aTopwheneverAtomis inhabited.Theory: set ofProposition.IsIntuitionistic: a theory is intuitionistic if it contains the principle of explosion.IsClassical: an intuitionistic theory is classical if it further contains double negation elimination.Proposition.subst: replaceatom xin aA : Proposition Atomwithf x, for a functionf : Atom → Proposition Atom'. This induces a monad structure onProposition, withpure := Proposition.atom.Theoryis a functor, by mapping each propositionA ∈ Ttof <$> A.Theory.intuitionisticCompletion: the freely generated intuitionistic theory extending a given theory.
Notation #
We introduce notation for the logical connectives: ⊥ ⊤ ∧ ∨ → ¬ for, respectively, falsum, verum,
conjunction, disjunction, implication and negation.
Propositions.
- atom
{Atom : Type u}
(x : Atom)
: Proposition Atom
Propositional atoms
- and
{Atom : Type u}
(a b : Proposition Atom)
: Proposition Atom
Conjunction
- or
{Atom : Type u}
(a b : Proposition Atom)
: Proposition Atom
Disjunction
- impl
{Atom : Type u}
(a b : Proposition Atom)
: Proposition Atom
Implication
Instances For
Equations
- One or more equations did not get rendered due to their size.
- Cslib.Logic.PL.instDecidableEqProposition.decEq (Cslib.Logic.PL.Proposition.atom a) (Cslib.Logic.PL.Proposition.atom b) = if h : a = b then h ▸ isTrue ⋯ else isFalse ⋯
- Cslib.Logic.PL.instDecidableEqProposition.decEq (Cslib.Logic.PL.Proposition.atom x_2) (a.and b) = isFalse ⋯
- Cslib.Logic.PL.instDecidableEqProposition.decEq (Cslib.Logic.PL.Proposition.atom x_2) (a.or b) = isFalse ⋯
- Cslib.Logic.PL.instDecidableEqProposition.decEq (Cslib.Logic.PL.Proposition.atom x_2) (a.impl b) = isFalse ⋯
- Cslib.Logic.PL.instDecidableEqProposition.decEq (a.and b) (Cslib.Logic.PL.Proposition.atom x_2) = isFalse ⋯
- Cslib.Logic.PL.instDecidableEqProposition.decEq (a.and b) (a_1.or b_1) = isFalse ⋯
- Cslib.Logic.PL.instDecidableEqProposition.decEq (a.and b) (a_1.impl b_1) = isFalse ⋯
- Cslib.Logic.PL.instDecidableEqProposition.decEq (a.or b) (Cslib.Logic.PL.Proposition.atom x_2) = isFalse ⋯
- Cslib.Logic.PL.instDecidableEqProposition.decEq (a.or b) (a_1.and b_1) = isFalse ⋯
- Cslib.Logic.PL.instDecidableEqProposition.decEq (a.or b) (a_1.impl b_1) = isFalse ⋯
- Cslib.Logic.PL.instDecidableEqProposition.decEq (a.impl b) (Cslib.Logic.PL.Proposition.atom x_2) = isFalse ⋯
- Cslib.Logic.PL.instDecidableEqProposition.decEq (a.impl b) (a_1.and b_1) = isFalse ⋯
- Cslib.Logic.PL.instDecidableEqProposition.decEq (a.impl b) (a_1.or b_1) = isFalse ⋯
Instances For
Equations
- Cslib.Logic.PL.instBEqProposition.beq (Cslib.Logic.PL.Proposition.atom a) (Cslib.Logic.PL.Proposition.atom b) = (a == b)
- Cslib.Logic.PL.instBEqProposition.beq (a.and a_1) (b.and b_1) = (Cslib.Logic.PL.instBEqProposition.beq a b && Cslib.Logic.PL.instBEqProposition.beq a_1 b_1)
- Cslib.Logic.PL.instBEqProposition.beq (a.or a_1) (b.or b_1) = (Cslib.Logic.PL.instBEqProposition.beq a b && Cslib.Logic.PL.instBEqProposition.beq a_1 b_1)
- Cslib.Logic.PL.instBEqProposition.beq (a.impl a_1) (b.impl b_1) = (Cslib.Logic.PL.instBEqProposition.beq a b && Cslib.Logic.PL.instBEqProposition.beq a_1 b_1)
- Cslib.Logic.PL.instBEqProposition.beq x✝¹ x✝ = false
Instances For
Equations
Equations
Equations
- Cslib.Logic.PL.instInhabitedOfBot = { default := ⊥ }
We view negation as a defined connective ~A := A → ⊥
Instances For
A fixed choice of a derivable proposition (of course any two are equivalent).
Equations
Instances For
Equations
Conjunction
Equations
- Cslib.Logic.PL.«term_∧_» = Lean.ParserDescr.trailingNode `Cslib.Logic.PL.«term_∧_» 36 37 (Lean.ParserDescr.binary `andthen (Lean.ParserDescr.symbol " ∧ ") (Lean.ParserDescr.cat `term 37))
Instances For
Disjunction
Equations
- Cslib.Logic.PL.«term_∨_» = Lean.ParserDescr.trailingNode `Cslib.Logic.PL.«term_∨_» 35 36 (Lean.ParserDescr.binary `andthen (Lean.ParserDescr.symbol " ∨ ") (Lean.ParserDescr.cat `term 36))
Instances For
Implication
Equations
- Cslib.Logic.PL.«term_→_» = Lean.ParserDescr.trailingNode `Cslib.Logic.PL.«term_→_» 30 31 (Lean.ParserDescr.binary `andthen (Lean.ParserDescr.symbol " → ") (Lean.ParserDescr.cat `term 31))
Instances For
We view negation as a defined connective ~A := A → ⊥
Equations
- Cslib.Logic.PL.«term¬_» = Lean.ParserDescr.node `Cslib.Logic.PL.«term¬_» 40 (Lean.ParserDescr.binary `andthen (Lean.ParserDescr.symbol " ¬ ") (Lean.ParserDescr.cat `term 40))
Instances For
Substitute each atom in a proposition for a proposition, possibly changing the atomic language.
Equations
- Cslib.Logic.PL.Proposition.subst f (Cslib.Logic.PL.Proposition.atom x_1) = f x_1
- Cslib.Logic.PL.Proposition.subst f (A.and B) = (Cslib.Logic.PL.Proposition.subst f A).and (Cslib.Logic.PL.Proposition.subst f B)
- Cslib.Logic.PL.Proposition.subst f (A.or B) = (Cslib.Logic.PL.Proposition.subst f A).or (Cslib.Logic.PL.Proposition.subst f B)
- Cslib.Logic.PL.Proposition.subst f (A.impl B) = (Cslib.Logic.PL.Proposition.subst f A).impl (Cslib.Logic.PL.Proposition.subst f B)
Instances For
Equations
- One or more equations did not get rendered due to their size.
Theories are arbitrary sets of propositions.
Equations
- Cslib.Logic.PL.Theory Atom = Set (Cslib.Logic.PL.Proposition Atom)
Instances For
Extend a substitution from Proposition to Theory.
Equations
- T.subst f = (fun (x : Cslib.Logic.PL.Proposition Atom) => x >>= f) '' T
Instances For
Equations
- Cslib.Logic.PL.Theory.instFunctor = { map := fun {α β : Type ?u.13} (f : α → β) => Set.image fun (x : Cslib.Logic.PL.Proposition α) => f <$> x }
The empty theory corresponds to minimal propositional logic.
Equations
Instances For
Intuitionistic propositional logic adds the principle of explosion (ex falso quodlibet).
Equations
- Cslib.Logic.PL.Theory.IPL = Set.range fun (x : Cslib.Logic.PL.Proposition Atom) => ⊥.impl x
Instances For
Classical logic further adds double negation elimination.
Equations
- Cslib.Logic.PL.Theory.CPL = Set.range fun (A : Cslib.Logic.PL.Proposition Atom) => A.neg.neg.impl A
Instances For
A theory is intuitionistic if it validates ex falso quodlibet.
Instances
Attach a bottom element to a theory T, and the principle of explosion for that bottom.