Add Goal.all and Goal.any

This commit is contained in:
Smaug123
2021-12-26 22:53:37 +00:00
parent 1c140469bd
commit 3a68c25ae0
2 changed files with 14 additions and 2 deletions

View File

@@ -0,0 +1,2 @@
module FicroKanSharp.Test.TestTypedMatch

View File

@@ -18,10 +18,20 @@ module Goal =
let equiv (term1 : Term) (term2 : Term) : Goal = Goal.Equiv (term1, term2) let equiv (term1 : Term) (term2 : Term) : Goal = Goal.Equiv (term1, term2)
let never : Goal = let never : Goal =
equiv (Term.Symbol ("_internal", [])) (Term.Symbol ("_internal", [ Term.Symbol ("_internal", []) ])) equiv (Term.Symbol ("_never", [])) (Term.Symbol ("_never2", []))
let always : Goal = let always : Goal =
equiv (Term.Symbol ("_internal", [])) (Term.Symbol ("_internal", [])) equiv (Term.Symbol ("_always", [])) (Term.Symbol ("_always", []))
let all (goals : Goal list) : Goal =
match goals with
| [] -> always
| goal :: goals -> goals |> List.fold conj goal
let any (goals : Goal list) : Goal =
match goals with
| [] -> never
| goal :: goals -> goals |> List.fold disj goal
let private walk (u : Term) (s : State) : Term = let private walk (u : Term) (s : State) : Term =
match u with match u with