Multiplicative Classical Linear Logic (MLL) #
Multiplicative classical linear logic, defined as a fragment of classical linear logic by means of
a predicate (unbundled style) and Subtype (bundled style).
This file serves as the reference example of how to define a fragment of an inference system
through tagging of InferenceSystem and Subtype, following the next recipe. It is a work in
progress: the recipe will evolve together with how the Lean and CSLib ecosystems can
deal with this general problem.
- Define predicates for restricting relevant types to the fragment, here
IsMLLfor propositions (CLL.Proposition) and proofs (CLL.Proof). This part lives under the namespace of the original system (hereCslib.Logic.CLL). Custom recursors can be defined for convenient case analysis that automatically discharges irrelevant cases (those not in the fragment). - Define the inference system in the fragment -- here
MLL.Proof-- as an abbreviation of a subtype. This part lives under the namespace of the fragment (hereCslib.Logic.CLL.MLL).
We also call the first part the 'unbundled part' and the second the 'bundled part'.
A proposition is in the multiplicative fragment of CLL.
Equations
Instances For
Recursor for MLL propositions.
Equations
- One or more equations did not get rendered due to their size.
- Cslib.Logic.CLL.Proposition.IsMLL.rec atom atomDual one bot tensor parr x_1 = atom x
- Cslib.Logic.CLL.Proposition.IsMLL.rec atom atomDual one bot tensor parr x_1 = atomDual x
- Cslib.Logic.CLL.Proposition.IsMLL.rec atom atomDual one bot tensor parr x = one
- Cslib.Logic.CLL.Proposition.IsMLL.rec atom atomDual one bot tensor parr x = bot
Instances For
Duality in MLL stays in MLL.
A multiplicative propositional context.
Equations
- Cslib.Logic.CLL.Proposition.Context.hole.IsMLL = True
- (a.tensorL b).IsMLL = (a.IsMLL ∧ b.IsMLL)
- (Cslib.Logic.CLL.Proposition.Context.tensorR a b).IsMLL = (a.IsMLL ∧ b.IsMLL)
- (a.parrL b).IsMLL = (a.IsMLL ∧ b.IsMLL)
- (Cslib.Logic.CLL.Proposition.Context.parrR a b).IsMLL = (a.IsMLL ∧ b.IsMLL)
- x✝.IsMLL = False
Instances For
Filling a multiplicative propositional context with a multiplicative proposition stays in MLL.
A multiplicative sequent.
Equations
- Γ.IsMLL = ∀ (a : Cslib.Logic.CLL.Proposition Atom), a ∈ Γ → a.IsMLL
Instances For
A proof is in MLL.
Equations
Instances For
Recursor for MLL derivations.
Equations
- One or more equations did not get rendered due to their size.
- Cslib.Logic.CLL.Proof.IsMLL.rec ax one bot tensor parr cut hp = ax
- Cslib.Logic.CLL.Proof.IsMLL.rec ax one bot tensor parr cut x = one
Instances For
A proof in the MLL fragment can only prove MLL sequents.
If a CLL derivation is cut-free and concludes an MLL sequent, then it is an MLL derivation.
MLL derivations.
Equations
Instances For
MLL inference system.
Equations
MLL proofs derive only MLL sequents.
Downcasting of cut-free CLL proofs of multiplicative sequents into MLL proofs.
Equations
- Cslib.Logic.CLL.Proof.cutFreeToMLL p hΓ hp = ⟨p, ⋯⟩
Instances For
Equations
- Cslib.Logic.CLL.instCoeDerivationMLLSequentDefault = { coe := fun (p : Cslib.Logic.InferenceSystem.derivation Cslib.Logic.CLL.MLL Γ) => ↑p }