Lω₁ω Syntax — compatibility facade over the fixed-carrier syntax #
BoundedFormulaω, Formulaω and Sentenceω are no longer declared here. They come from
Mathlib.ModelTheory.Infinitary.Syntax, where BoundedFormulaω L α n is an abbrev for
BoundedFormulaInf L ℕ α n. This file re-exports that syntax under the module path and namespace
the project already uses, and adds only what Mathlib does not provide.
Why an abbrev and not a def #
The specialization must stay definitional, not merely propositional. Since Lean 4.34 a goal has
to be type-correct at implicit transparency before rw/simp will act on it, so a semireducible
wrapper around BoundedFormulaInf ℕ would silently break rewriting across the whole ω consumer
surface. The probes at the end of this file certify the identification with no change, rewrite,
or explicit cast — their absence is the certification.
What this file still owns #
- the qualified
BoundedFormulaω.*constructor surface, for consumers that name constructors explicitly rather than through dot-notation (dot-notation resolves through the head symbolBoundedFormulaInfand needs no help); - the derived connectives Mathlib does not define:
and,or,iff, with theirMin/Maxinstances; - the
Encodable-indexed connectiveseinf/esupand their explicit-encoding formseinfWith/esupWith; - the scoped notation.
Bot, Top, Inhabited, not and ex now come from Mathlib and are deliberately not
redeclared. BoundedFormulaInf.verum plays the role of the old top and is definitionally equal
to it
(not falsum reduces to imp falsum falsum).
Qualified constructor surface #
The constructors live in the BoundedFormulaInf namespace. Dot-notation on a
BoundedFormulaω already resolves there, but consumers naming a constructor explicitly as
BoundedFormulaω.falsum need these. Each is an abbrev, so it unfolds by rfl, and each is
@[match_pattern], so it may still be used in pattern position.
Falsity, as a qualified constructor name.
Instances For
Equality, as a qualified constructor name.
Equations
Instances For
Relation application, as a qualified constructor name.
Equations
Instances For
Implication, as a qualified constructor name.
Equations
Instances For
Universal quantification, as a qualified constructor name.
Equations
Instances For
Countable disjunction, as a qualified constructor name.
Equations
Instances For
Countable conjunction, as a qualified constructor name.
Equations
Instances For
Negation, as a qualified name. BoundedFormulaInf.not is the definition.
Equations
Instances For
Existential quantification, as a qualified name.
Equations
Instances For
The true formula. Mathlib calls it verum; this is the project's historical name for it, and
the two are definitionally equal (not falsum reduces to imp falsum falsum).
Instances For
Production's not and ex were @[match_pattern]; Mathlib's are not, and the attribute
cannot be added downstream ("cannot add attribute to a declaration in an imported module").
The qualified BoundedFormulaω.not/.ex above are declared here and so do carry it, which covers
consumers that name them explicitly; dot-notation patterns (| .not φ => …) resolve through the
head symbol to BoundedFormulaInf.not and are therefore not available. If a consumer needs them,
the fix belongs upstream on the fork, not here.
Derived connectives Mathlib does not provide #
Conjunction of two formulas, defined via De Morgan.
Instances For
Disjunction of two formulas.
Instances For
Biconditional between formulas.
Instances For
Indexed conjunction over any Encodable type. This extends iInf from ℕ-indexed
to general countable indices by encoding.
Equations
- FirstOrder.Language.BoundedFormulaω.einf φs = FirstOrder.Language.BoundedFormulaω.iInf fun (k : ℕ) => match Encodable.decode k with | some i => φs i | none => ⊤
Instances For
Indexed disjunction over any Encodable type. This extends iSup from ℕ-indexed
to general countable indices by encoding.
Equations
- FirstOrder.Language.BoundedFormulaω.esup φs = FirstOrder.Language.BoundedFormulaω.iSup fun (k : ℕ) => match Encodable.decode k with | some i => φs i | none => ⊥
Instances For
Explicit-encoding forms #
einf/esup take their encoding by instance search. A consumer that must use a specific
enumeration — one supplied as data rather than found — is otherwise forced into a local letI,
which is fragile and makes the resulting syntax look instance-dependent when it is not.
These are thin wrappers, deliberately: einf/esup are not redefined in terms of them.
Reversing that dependency would disturb definitional reductions across many existing consumers.
einf along an explicitly supplied encoding.
Equations
Instances For
esup along an explicitly supplied encoding.
Equations
Instances For
Implication notation for infinitary formulas.
Equations
- Lomega1omega.«term_⟹ω_» = Lean.ParserDescr.trailingNode `Lomega1omega.«term_⟹ω_» 62 63 (Lean.ParserDescr.binary `andthen (Lean.ParserDescr.symbol " ⟹ω ") (Lean.ParserDescr.cat `term 62))
Instances For
Universal-quantifier notation for infinitary formulas.
Equations
- Lomega1omega.«term∀'ω_» = Lean.ParserDescr.node `Lomega1omega.«term∀'ω_» 110 (Lean.ParserDescr.binary `andthen (Lean.ParserDescr.symbol "∀'ω ") (Lean.ParserDescr.cat `term 110))
Instances For
Negation notation for infinitary formulas.
Equations
- Lomega1omega.«term∼ω_» = Lean.ParserDescr.node `Lomega1omega.«term∼ω_» 1023 (Lean.ParserDescr.binary `andthen (Lean.ParserDescr.symbol "∼ω") (Lean.ParserDescr.cat `term 1023))
Instances For
Existential-quantifier notation for infinitary formulas.
Equations
- Lomega1omega.«term∃'ω_» = Lean.ParserDescr.node `Lomega1omega.«term∃'ω_» 110 (Lean.ParserDescr.binary `andthen (Lean.ParserDescr.symbol "∃'ω ") (Lean.ParserDescr.cat `term 110))
Instances For
Biconditional notation for infinitary formulas.
Equations
- Lomega1omega.«term_⇔ω_» = Lean.ParserDescr.trailingNode `Lomega1omega.«term_⇔ω_» 61 61 (Lean.ParserDescr.binary `andthen (Lean.ParserDescr.symbol " ⇔ω ") (Lean.ParserDescr.cat `term 62))
Instances For
Facade transparency gates #
These must elaborate with no change, rewrite, or explicit cast. That is precisely what
certifies that the ω names remain a definitional specialization — the property Lean 4.34's
implicit-transparency requirement makes load-bearing for every rw/simp in the ω tower.