summaryrefslogtreecommitdiff
path: root/src/Data/Term.idr
diff options
context:
space:
mode:
authorGreg Brown <greg.brown01@ed.ac.uk>2023-07-07 17:36:37 +0100
committerGreg Brown <greg.brown01@ed.ac.uk>2023-07-07 17:36:37 +0100
commit6b637a6d2954e77985e24bbd17f3697eb6f8238a (patch)
treeff60597d324f182084ccf855a25b6f1251034293 /src/Data/Term.idr
parent8c529393421843a7ccad041d2f29fa90b46bf6b6 (diff)
Define properties of substitutions.
Diffstat (limited to 'src/Data/Term.idr')
-rw-r--r--src/Data/Term.idr11
1 files changed, 11 insertions, 0 deletions
diff --git a/src/Data/Term.idr b/src/Data/Term.idr
index 2afc774..3b16f38 100644
--- a/src/Data/Term.idr
+++ b/src/Data/Term.idr
@@ -38,6 +38,13 @@ public export
0 (.=.) : Rel (Fin k -> Term sig n)
f .=. g = (i : Fin k) -> f i = g i
+export
+subCong : {f, g : Fin k -> Term sig n} -> f .=. g -> (t : Term sig k) -> f <$> t = g <$> t
+subCong prf (Var i) = prf i
+subCong prf (Op op ts) =
+ cong (Op op) $
+ mapExtensional (f <$>) (g <$>) (\t => subCong prf (assert_smaller ts t)) ts
+
-- Substitution is Monadic -----------------------------------------------------
export
@@ -80,6 +87,10 @@ opInjectiveLen : (prf : Op {k} op ts = Op {k = n} op' us) -> k = n
opInjectiveLen Refl = Refl
export
+opInjectiveTs' : {0 ts, us : Vect k (Term sig n)} -> (prf : Op op ts = Op op us) -> ts = us
+opInjectiveTs' Refl = Refl
+
+export
opInjectiveTs :
{0 ts : Vect k (Term sig n)} ->
{0 us : Vect j (Term sig n)} ->