summaryrefslogtreecommitdiff
path: root/Algebra/Semantics.lean
diff options
context:
space:
mode:
authorHannes Schulze <haschu0103@outlook.de>2025-12-05 23:19:57 +0100
committerHannes Schulze <haschu0103@outlook.de>2025-12-05 23:19:57 +0100
commitaa280ca672aff145e811b79f4315ba200a09bad5 (patch)
treeab6e3f4944c52a8ba928a2f1358084364762baf4 /Algebra/Semantics.lean
parentcc3483496781b10b6acd2450117b443d03957dc4 (diff)
define algebras
Diffstat (limited to 'Algebra/Semantics.lean')
-rw-r--r--Algebra/Semantics.lean34
1 files changed, 34 insertions, 0 deletions
diff --git a/Algebra/Semantics.lean b/Algebra/Semantics.lean
new file mode 100644
index 0000000..f5160dd
--- /dev/null
+++ b/Algebra/Semantics.lean
@@ -0,0 +1,34 @@
+import Mathlib
+import Algebra.Terms
+import Algebra.Derivations
+
+namespace NominalAlgebra
+
+variable (𝔸 : Type) [Infinite 𝔸] [Countable 𝔸] [DecidableEq 𝔸]
+variable (sig : Signature)
+
+structure Algebra where
+ carrier : β„• β†’ Nom 𝔸
+ pure (f : sig.pure) {m : β„•} :
+ (sig.pureArgs f β†’ carrier m) β†’β‚‘[𝔸] carrier (m + sig.pureDepth f)
+ free (f : sig.free) {m : β„•} :
+ (𝔸 Γ— (sig.freeArgs f β†’ carrier m)) β†’β‚‘[𝔸] carrier (m + sig.freeDepth f)
+ bound (f : sig.bound) {m : β„•} :
+ NameAbstraction 𝔸 (sig.boundArgs f β†’ carrier m) β†’β‚‘[𝔸] carrier (m + sig.boundDepth f)
+
+instance : CoeFun (Algebra 𝔸 sig) (fun _ => β„• β†’ Nom 𝔸) where
+ coe A := A.carrier
+
+structure Algebra.Hom (A B : Algebra 𝔸 sig) where
+ toFun : (n : β„•) β†’ (A n β†’β‚‘[𝔸] B n)
+ preserve_pure : βˆ€ (f : sig.pure) {m : β„•} (args : sig.pureArgs f β†’ A m),
+ toFun (m + sig.pureDepth f) (A.pure f args) = B.pure f (toFun m ∘ args)
+ preserve_free : βˆ€ (a : 𝔸) (f : sig.free) {m : β„•} (args : sig.freeArgs f β†’ A m),
+ toFun (m + sig.freeDepth f) (A.free f ⟨a, args⟩) = B.free f ⟨a, toFun m ∘ args⟩
+ preserve_bound : βˆ€ (a : 𝔸) (f : sig.bound) {m : β„•} (args : sig.boundArgs f β†’ A m),
+ toFun (m + sig.boundDepth f) (A.bound f (βŸͺa⟫ args)) = B.bound f (βŸͺa⟫ toFun m ∘ args)
+
+instance {A B : Algebra 𝔸 sig} : CoeFun (Algebra.Hom 𝔸 sig A B) (fun _ => (n : β„•) β†’ (A n β†’β‚‘[𝔸] B n)) where
+ coe h := h.toFun
+
+end NominalAlgebra