annotate Logic.agda @ 11:17cd0e70e931

add clausal form transformation
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Sat, 15 Aug 2020 10:18:55 +0900
parents edf4a816abff
children 1e3ebb348a54
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
9
627a6bf54ed5 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
1 module Logic (Const Func Var Pred : Set) where
1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
2 open import Data.List hiding (all ; and ; or )
2
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
3 open import Data.Bool hiding ( not )
5
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
4
9
627a6bf54ed5 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
5 data Expr : Set where
627a6bf54ed5 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
6 var : Var → Expr
10
edf4a816abff starwars exmple
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
7 func : Func → Expr → Expr
9
627a6bf54ed5 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
8 const : Const → Expr
11
17cd0e70e931 add clausal form transformation
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
9 _,_ : Expr → Expr → Expr
0
aeccd3123e03 First order logic in Agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
10
9
627a6bf54ed5 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
11 data Statement : Set where
10
edf4a816abff starwars exmple
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
12 pred : Pred → Statement
edf4a816abff starwars exmple
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
13 predx : Pred → Expr → Statement
edf4a816abff starwars exmple
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
14 _/\_ : Statement → Statement → Statement
edf4a816abff starwars exmple
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
15 _\/_ : Statement → Statement → Statement
edf4a816abff starwars exmple
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
16 ¬_ : Statement → Statement
edf4a816abff starwars exmple
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
17 All_=>_ : Var → Statement → Statement
edf4a816abff starwars exmple
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
18 Exist_=>_ : Var → Statement → Statement
edf4a816abff starwars exmple
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
19
edf4a816abff starwars exmple
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
20 subst-prop : (e : Statement ) → (sbst : Expr → Var → Expr → Expr ) → Var → Expr → Statement
edf4a816abff starwars exmple
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
21 subst-prop (pred x) sbst xv v = pred x
edf4a816abff starwars exmple
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
22 subst-prop (predx x x₁) sbst xv v = predx x ( sbst x₁ xv v )
edf4a816abff starwars exmple
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
23 subst-prop (e /\ e₁) sbst xv v = ( subst-prop e sbst xv v ) /\ ( subst-prop e₁ sbst xv v )
edf4a816abff starwars exmple
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
24 subst-prop (e \/ e₁) sbst xv v = ( subst-prop e sbst xv v ) \/ ( subst-prop e₁ sbst xv v )
edf4a816abff starwars exmple
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
25 subst-prop (¬ e) sbst xv v = ¬ ( subst-prop e sbst xv v )
edf4a816abff starwars exmple
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
26 subst-prop (All x => e) sbst xv v = All x => ( subst-prop e sbst xv v )
edf4a816abff starwars exmple
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
27 subst-prop (Exist x => e) sbst xv v = Exist x => ( subst-prop e sbst xv v )
0
aeccd3123e03 First order logic in Agda
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
28
9
627a6bf54ed5 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
29 {-# TERMINATING #-}
627a6bf54ed5 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
30 M : (amap : Pred → Bool ) (pmap : Pred → Expr → Bool )
627a6bf54ed5 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
31 → (all-const : List Expr )
10
edf4a816abff starwars exmple
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
32 → (subst-prop : Expr → Var → Expr → Expr )
9
627a6bf54ed5 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
33 → Statement → Bool
627a6bf54ed5 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
34 M amap pmap all0 sbst s = m s where
627a6bf54ed5 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
35 m : Statement → Bool
10
edf4a816abff starwars exmple
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
36 m (pred x) = amap x
edf4a816abff starwars exmple
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
37 m (predx x x₁) = pmap x x₁
edf4a816abff starwars exmple
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
38 m (s /\ s₁) = m s ∧ m s₁
edf4a816abff starwars exmple
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
39 m (s \/ s₁) = m s ∨ m s₁
edf4a816abff starwars exmple
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
40 m (¬ s) = Data.Bool.not (m s )
edf4a816abff starwars exmple
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
41 m (All x => s) = m-all all0 x s where
9
627a6bf54ed5 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
42 m-all : List Expr → Var → Statement → Bool
627a6bf54ed5 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
43 m-all [] vx s = true
10
edf4a816abff starwars exmple
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
44 m-all (x ∷ t) vx s = m (subst-prop s sbst vx x ) ∧ m-all t vx s
edf4a816abff starwars exmple
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
45 m (Exist x => s) = m-exist all0 x s where
9
627a6bf54ed5 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
46 m-exist : List Expr → Var → Statement → Bool
627a6bf54ed5 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 8
diff changeset
47 m-exist [] vx s = false
10
edf4a816abff starwars exmple
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
48 m-exist (x ∷ t) vx s = m (subst-prop s sbst vx x ) ∨ m-exist t vx s
1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
49