-- | Multi-valued and Heyting logics as circuit compile targets. -- -- == Role -- -- This package is __not__ substrate core. It sits in the same column as -- @FinRel@ and @Process@: an alternative (or complementary) meaning for -- boxes and wires — truth values, judgments, graded belief — that circuit -- syntax can compile into. -- -- == Hierarchy -- -- @ -- Lattice → Heyting → Boolean -- │ -- ├── Bool (classical propositional structure) -- ├── H3 (finite non-Boolean Heyting) -- ├── Goedel r (fuzzy \/ graded Heyting) -- └── (K3 is lattice-only — not Heyting) -- @ -- -- == numhask guess -- -- numhask already owns order lattices (@JoinSemiLattice@ \/ @MeetSemiLattice@). -- A plausible path is: -- -- 1. Keep this package as the logic laboratory and circuit payload home. -- 2. If Heyting earns its keep, lift a thin @Heyting@ class into numhask -- (or a @numhask-logic@ satellite) with the same laws. -- 3. Instances: @Bool@, maybe @Goedel Double@; leave H3\/K3 here as -- specialty carriers and oracles. -- 4. @Boolean2Ring@ documents Boolean↔Ring; only migrate if numhask wants -- that bridge next to its ring tower. -- -- Until then: compile logic here; keep numeric core clean. module Circuit.Logics ( -- * Lattice / Heyting / Boolean module Circuit.Logics.Lattice, module Circuit.Logics.Heyting, module Circuit.Logics.Boolean, -- * Carriers module Circuit.Logics.H3, module Circuit.Logics.K3, module Circuit.Logics.Goedel, module Circuit.Logics.Boolean2Ring, module Circuit.Logics.Prop, -- * Merge protocols module Circuit.Logics.Combine, -- * Streaming judges module Circuit.Logics.Process, -- * Oracles module Circuit.Logics.Laws, ) where import Circuit.Logics.Boolean import Circuit.Logics.Boolean2Ring import Circuit.Logics.Combine import Circuit.Logics.Goedel import Circuit.Logics.H3 import Circuit.Logics.Heyting import Circuit.Logics.K3 import Circuit.Logics.Lattice import Circuit.Logics.Laws import Circuit.Logics.Process import Circuit.Logics.Prop