annotate example2.agda @ 19:55a0d814fce7 default tip

...
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Wed, 16 Dec 2020 16:16:43 +0900
parents 6cd5b63ecc38
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
10
edf4a816abff starwars exmple
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1 module example2 where
edf4a816abff starwars exmple
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2 open import Data.List hiding (all ; and ; or )
edf4a816abff starwars exmple
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
3 open import Data.Maybe
15
2f4db56bb289 fix example
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
4 open import Data.Bool hiding ( not ; _∧_ ; _∨_ )
10
edf4a816abff starwars exmple
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
5
edf4a816abff starwars exmple
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
6 data Const : Set where
edf4a816abff starwars exmple
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
7 anakin : Const
edf4a816abff starwars exmple
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
8 luke : Const
edf4a816abff starwars exmple
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
9 leia : Const
edf4a816abff starwars exmple
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
10
edf4a816abff starwars exmple
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
11 data Var : Set where
edf4a816abff starwars exmple
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
12 X : Var
edf4a816abff starwars exmple
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
13 Y : Var
edf4a816abff starwars exmple
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
14 Z : Var
edf4a816abff starwars exmple
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
15
edf4a816abff starwars exmple
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
16 data Func : Set where
edf4a816abff starwars exmple
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
17
edf4a816abff starwars exmple
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
18 data Pred : Set where
edf4a816abff starwars exmple
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
19 father : Pred
edf4a816abff starwars exmple
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
20 brother : Pred
edf4a816abff starwars exmple
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
21
edf4a816abff starwars exmple
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
22 open import Logic Const Func Var Pred
edf4a816abff starwars exmple
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
23
edf4a816abff starwars exmple
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
24 _⇒_ : Statement → Statement → Statement
15
2f4db56bb289 fix example
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
25 x ⇒ y = ( ¬ x ) ∨ y
10
edf4a816abff starwars exmple
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
26
edf4a816abff starwars exmple
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
27 ex1 : Statement
15
2f4db56bb289 fix example
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
28 ex1 = All X => All Y => (( Exist Z => ( ( predx father ( var X , var Z ) ∧ predx father (var Y , var Z ) ))) ⇒ predx brother ( var X , var Y) )
10
edf4a816abff starwars exmple
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
29
edf4a816abff starwars exmple
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
30 subst-expr : Expr → Var → Expr → Expr
edf4a816abff starwars exmple
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
31 subst-expr (var X) X v = v
edf4a816abff starwars exmple
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
32 subst-expr (var Y) Y v = v
edf4a816abff starwars exmple
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
33 subst-expr (var Z) Z v = v
edf4a816abff starwars exmple
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
34 subst-expr (func f₁ e) xv v = func f₁ ( subst-expr e xv v )
edf4a816abff starwars exmple
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
35 subst-expr (e , e1) xv v = ( subst-expr e xv v ) , ( subst-expr e1 xv v )
edf4a816abff starwars exmple
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
36 subst-expr x _ v = x
edf4a816abff starwars exmple
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
37
edf4a816abff starwars exmple
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
38 amap : (px : Pred ) → Bool
edf4a816abff starwars exmple
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
39 amap px = false
edf4a816abff starwars exmple
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
40 pmap : (px : Pred ) → Expr → Bool
edf4a816abff starwars exmple
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
41 pmap father ( const leia , const anakin ) = true
edf4a816abff starwars exmple
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
42 pmap father ( const luke , const anakin ) = true
edf4a816abff starwars exmple
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
43 pmap brother ( const leia , const luke) = true
15
2f4db56bb289 fix example
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
44 pmap brother ( const luke , const leia) = true
2f4db56bb289 fix example
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
45 pmap brother ( const luke , const luke) = true -- strange but our definition of brother requires this
2f4db56bb289 fix example
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
46 pmap brother ( const leia , const leia) = true
10
edf4a816abff starwars exmple
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
47 pmap px _ = false
edf4a816abff starwars exmple
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
48
edf4a816abff starwars exmple
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
49 -- we only try simple constant, it may contains arbitrary complex functional value
edf4a816abff starwars exmple
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
50 all0 : List Expr
edf4a816abff starwars exmple
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
51 all0 = const anakin ∷ const luke ∷ const leia ∷ []
edf4a816abff starwars exmple
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
52
15
2f4db56bb289 fix example
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
53 --
2f4db56bb289 fix example
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
54 -- pmap is a model of axiom ex1
2f4db56bb289 fix example
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
55 --
2f4db56bb289 fix example
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
56 test9 : Bool
2f4db56bb289 fix example
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
57 test9 = M amap pmap all0 subst-expr ex1
2f4db56bb289 fix example
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
58
2f4db56bb289 fix example
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
59 test3 : Bool
2f4db56bb289 fix example
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
60 test3 = M amap pmap all0 subst-expr (
2f4db56bb289 fix example
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
61 ( predx father ( const leia , const anakin ) ∧ predx father ( const luke , const anakin ) ) ⇒ predx brother ( const leia , const luke) )
10
edf4a816abff starwars exmple
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
62
edf4a816abff starwars exmple
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
63 --
15
2f4db56bb289 fix example
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
64 -- Valid Proposition is true on any interpretation
10
edf4a816abff starwars exmple
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
65 --
edf4a816abff starwars exmple
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
66 pmap1 : (px : Pred ) → Expr → Bool
edf4a816abff starwars exmple
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
67 pmap1 father ( const leia , const anakin ) = true
edf4a816abff starwars exmple
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
68 pmap1 father ( const luke , const anakin ) = true
edf4a816abff starwars exmple
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
69 pmap1 brother ( const leia , const luke) = false
edf4a816abff starwars exmple
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
70 pmap1 px _ = false
edf4a816abff starwars exmple
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
71
15
2f4db56bb289 fix example
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
72 test6 : Bool
2f4db56bb289 fix example
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
73 test6 = M amap pmap1 all0 subst-expr (
2f4db56bb289 fix example
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
74 ( ex1 ∧ ( predx father ( const leia , const anakin ) ∧ predx father ( const luke , const anakin ) )) ⇒ predx brother ( const leia , const luke) )
10
edf4a816abff starwars exmple
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
75
15
2f4db56bb289 fix example
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
76 --
2f4db56bb289 fix example
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
77 -- pmap1 is not a model of axiom ex1
2f4db56bb289 fix example
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
78 --
10
edf4a816abff starwars exmple
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
79
15
2f4db56bb289 fix example
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
80 test4 : Bool
2f4db56bb289 fix example
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
81 test4 = M amap pmap1 all0 subst-expr ex1
2f4db56bb289 fix example
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
82
2f4db56bb289 fix example
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
83 test5 : Bool
2f4db56bb289 fix example
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
84 test5 = M amap pmap1 all0 subst-expr ( All X => All Y => ( predx father ( var X , const anakin ) ∧ predx father (var Y , const anakin ) ))
14
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
85
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
86 open import clausal Const Func Var Pred
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
87
15
2f4db56bb289 fix example
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
88 test7 : List Clause
2f4db56bb289 fix example
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 14
diff changeset
89 test7 = translate ex1 [] [] subst-expr
18
6cd5b63ecc38 replace syntax
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
90
6cd5b63ecc38 replace syntax
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
91 -- brother (X , Y) :- father (X , Z) , father (Y , Z)
6cd5b63ecc38 replace syntax
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 17
diff changeset
92