diff options
| -rw-r--r-- | Algebra/Derivations.lean | 29 |
1 files changed, 13 insertions, 16 deletions
diff --git a/Algebra/Derivations.lean b/Algebra/Derivations.lean index e2cd052..717ffe1 100644 --- a/Algebra/Derivations.lean +++ b/Algebra/Derivations.lean @@ -12,7 +12,6 @@ variable (sig : Signature) structure Equation where vars : Type [vars_nominal : NominalSet πΈ vars] - [vars_orbitFinite : OrbitFinite πΈ vars] left : Term πΈ sig vars right : Term πΈ sig vars @@ -21,9 +20,6 @@ namespace Equation instance (eq : Equation πΈ sig) : NominalSet πΈ eq.vars := eq.vars_nominal -instance (eq : Equation πΈ sig) : OrbitFinite πΈ eq.vars := - eq.vars_orbitFinite - def HasDepth {πΈ : Type} [Infinite πΈ] [Countable πΈ] [DecidableEq πΈ] {sig : Signature} (eq : Equation πΈ sig) (n : β) : Prop := @@ -37,6 +33,7 @@ def UniformEquation := structure Theory where sig : Signature axioms : Set (UniformEquation πΈ sig) + axioms_orbitFinite : β eq β axioms, OrbitFinite πΈ eq.val.vars end Theories @@ -46,7 +43,7 @@ variable {sig : Signature} section Helpers def UniformEquation.mk - (X : Type) [NominalSet πΈ X] [OrbitFinite πΈ X] {n : β} (t u : TermAtDepth πΈ sig X n) : + (X : Type) [NominalSet πΈ X] {n : β} (t u : TermAtDepth πΈ sig X n) : UniformEquation πΈ sig := β¨β¨X, t.val, u.valβ©, β¨n, t.prop, u.propβ©β© @@ -57,47 +54,47 @@ end Helpers section DerivableEquations inductive Derivable (T : Theory πΈ) : (eq : UniformEquation πΈ T.sig) β Prop - | refl {X : Type} [NominalSet πΈ X] [OrbitFinite πΈ X] {x : X} : + | refl {X : Type} [NominalSet πΈ X] {x : X} : Derivable T (X β’ .var x β£ .var x) - | symm {X : Type} [NominalSet πΈ X] [OrbitFinite πΈ X] + | symm {X : Type} [NominalSet πΈ X] {m : β} {t u : TermAtDepth πΈ T.sig X m} : Derivable T (X β’ u β£ t) β Derivable T (X β’ t β£ u) - | trans {X : Type} [NominalSet πΈ X] [OrbitFinite πΈ X] + | trans {X : Type} [NominalSet πΈ X] {m : β} {t u v : TermAtDepth πΈ T.sig X m} : Derivable T (X β’ t β£ v) β Derivable T (X β’ v β£ u) β Derivable T (X β’ t β£ u) - | cong_pure {X : Type} [NominalSet πΈ X] [OrbitFinite πΈ X] + | cong_pure {X : Type} [NominalSet πΈ X] {f : T.sig.pure} {m : β} {ts us : T.sig.pureArgs f β TermAtDepth πΈ T.sig X m} : (β x, Derivable T (X β’ ts x β£ us x)) β Derivable T (X β’ .pure f ts β£ .pure f us) - | cong_free {X : Type} [NominalSet πΈ X] [OrbitFinite πΈ X] + | cong_free {X : Type} [NominalSet πΈ X] {a : πΈ} {f : T.sig.free} {m : β} {ts us : T.sig.freeArgs f β TermAtDepth πΈ T.sig X m} : (β x, Derivable T (X β’ ts x β£ us x)) β Derivable T (X β’ .free a f ts β£ .free a f us) - | cong_bound {X : Type} [NominalSet πΈ X] [OrbitFinite πΈ X] + | cong_bound {X : Type} [NominalSet πΈ X] {a : πΈ} {f : T.sig.bound} {m : β} {ts us : T.sig.boundArgs f β TermAtDepth πΈ T.sig X m} : (β x, Derivable T (X β’ ts x β£ us x)) β Derivable T (X β’ .bound a f ts β£ .bound a f us) - | ax' {X Y : Type} [NominalSet πΈ X] [OrbitFinite πΈ X] [NominalSet πΈ Y] [OrbitFinite πΈ Y] + | ax' {X Y : Type} [NominalSet πΈ X] [NominalSet πΈ Y] {m : β} {r s : TermAtDepth πΈ T.sig Y m} {l : β} {Ο : UniformSubstitution πΈ T.sig Y X l} {Ο : FPerm πΈ} : ((Y β’ r β£ s) β T.axioms) β (β (y : Y) (Ο : FPerm πΈ), Derivable T (X β’ Ο (Ο β’ y) β£ Ο β’ (Ο y))) β Derivable T (X β’ Ο.apply (Ο β’ r) β£ Ο.apply (Ο β’ s)) - | perm {X : Type} [NominalSet πΈ X] [OrbitFinite πΈ X] + | perm {X : Type} [NominalSet πΈ X] {a b : πΈ} {f : T.sig.bound} {m : β} {ts us : T.sig.boundArgs f β TermAtDepth πΈ T.sig X m} : a β b β (β x, a # us x) β (β x, Derivable T (X β’ ts x β£ βΈ¨a, bβΈ© β’ us x)) β Derivable T (X β’ .bound a f ts β£ .bound b f us) -def DerivableEq (T : Theory πΈ) (X : Type) [NominalSet πΈ X] [OrbitFinite πΈ X] (n : β) : +def DerivableEq (T : Theory πΈ) (X : Type) [NominalSet πΈ X] (n : β) : Rel (TermAtDepth πΈ T.sig X n) (TermAtDepth πΈ T.sig X n) := fun t u => Derivable T (X β’ t β£ u) -variable {X Y : Type} [NominalSet πΈ X] [OrbitFinite πΈ X] [NominalSet πΈ Y] [OrbitFinite πΈ Y] +variable {X Y : Type} [NominalSet πΈ X] [NominalSet πΈ Y] def UniformSubstitution.DerivablyEquivariant (T : Theory πΈ) {l : β} (Ο : UniformSubstitution πΈ T.sig X Y l) : Prop := @@ -157,7 +154,7 @@ lemma Derivable.equivariant {m : β} {t u : TermAtDepth πΈ T.sig X m} : let right : TermAtDepth πΈ T.sig eq.val.vars n := β¨eq.val.right, hnββ© use n; exact β¨(Ο β’ left).prop, (Ο β’ right).propβ©β© have rename_eq - {Y : Type} [NominalSet πΈ Y] [OrbitFinite πΈ Y] {Ο : FPerm πΈ} {k : β} + {Y : Type} [NominalSet πΈ Y] {Ο : FPerm πΈ} {k : β} {r s : TermAtDepth πΈ T.sig Y k} : rename Ο (Y β’ r β£ s) = (Y β’ Ο β’ r β£ Ο β’ s) := rfl suffices β eq, Derivable T eq β Derivable T (rename Ο eq) by exact this (X β’ t β£ u) |
