Duality #
@cite{barwise-cooper-1981}
Universal vs existential operators formalized as a Galois connection.
Main definitions #
DualityType: existential vs universal classificationaggregate: aggregate list by duality type
For GQ-level duality operations (outer negation, inner negation, dual) see
Core.Quantification.outerNeg / innerNeg / dualQ.
Existential vs universal classification.
- existential : DualityType
- universal : DualityType
Instances For
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
Equations
- Core.Duality.instBEqDualityType.beq x✝ y✝ = (x✝.ctorIdx == y✝.ctorIdx)
Instances For
Equations
Existential is robust: one witness suffices.
Equations
Instances For
Universal is fragile: one counterexample breaks.
Equations
Instances For
Swap existential and universal.
Equations
Instances For
Aggregate a list according to duality type.
Equations
- Core.Duality.aggregate Core.Duality.DualityType.existential l = List.foldl (fun (x1 x2 : Core.Duality.Truth3) => x1 ⊔ x2) ⊥ l
- Core.Duality.aggregate Core.Duality.DualityType.universal l = List.foldl (fun (x1 x2 : Core.Duality.Truth3) => x1 ⊓ x2) ⊤ l
Instances For
Existential aggregation: true if ANY true.
Instances For
Universal aggregation: true only if ALL true.
Instances For
theorem
Core.Duality.existential_robust
(l : List Truth3)
(h : (l.any fun (x : Truth3) => x == Truth3.true) = true)
:
theorem
Core.Duality.universal_fragile
(l : List Truth3)
(h : (l.any fun (x : Truth3) => x == Truth3.false) = true)
:
Equations
- Core.Duality.const t x✝ = t
Instances For
Equations
- Core.Duality.exists' P l = Core.Duality.existsAny (List.map P l)
Instances For
Equations
- Core.Duality.forall' P l = Core.Duality.forallAll (List.map P l)