Advertisement
elvecent

coqlogic

Apr 13th, 2017
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.64 KB | None | 0 0
  1. Require Export Utf8.
  2. Require Export String.
  3. Require Export Lists.List.
  4. Import ListNotations.
  5.  
  6. Inductive Term :=
  7. | Var : string → Term
  8. | Const : string → Term
  9. | Fun : string → list Term → Term.
  10.  
  11. Inductive Formula :=
  12. | Tr : Formula
  13. | Fa : Formula
  14. | Rel : string → list Term → Formula
  15. | Eq : Term → Term → Formula
  16. | Neg : Formula → Formula
  17. | Con : Formula → Formula → Formula
  18. | Dis : Formula → Formula → Formula
  19. | Imp : Formula → Formula → Formula
  20. | All : string → Formula → Formula
  21. | Ex : string → Formula → Formula.
  22.  
  23. Fixpoint subformulas (f : Formula) : list Formula :=
  24. match f with
  25. | Tr => Tr :: nil
  26. | Fa => Fa :: nil
  27. | Rel r ts => Rel r ts :: nil
  28. | Eq t1 t2 => Eq t1 t2 :: nil
  29. | Neg f1 => Neg f1 :: (subformulas f1)
  30. | Con f1 f2 => Con f1 f2 :: ((subformulas f1) ++ (subformulas f2))
  31. | Dis f1 f2 => Dis f1 f2 :: ((subformulas f1) ++ (subformulas f2))
  32. | Imp f1 f2 => Imp f1 f2 :: ((subformulas f1) ++ (subformulas f2))
  33. | All var f1 => All var f1 :: (subformulas f1)
  34. | Ex var f1 => Ex var f1 :: (subformulas f1)
  35. end.
  36.  
  37. Definition termvars (t : Term) : list Term :=
  38. match t with
  39. | Var v => [Var v]
  40. | Const c => []
  41. | Fun f ts => ts
  42. end.
  43.  
  44. Fixpoint freevars (f : Formula) : list Term
  45. match f with
  46. | Tr => []
  47. | Fa => []
  48. | Rel r ts => flat_map termvars ts
  49. | Eq t1 t2 => termvars t1 ++ termvars t2
  50. | Neg f1 => freevars f1
  51. | Con f1 f2 => freevars f1 ++ (freevars f2)
  52. | Dis f1 f2 => freevars f1 ++ (freevars f2)
  53. | Imp f1 f2 => freevars f1 ++ (freevars f2)
  54. | All var f1 => remove (Var var) (freevars f1)
  55. | Ex var f1 => remove (Var var) (freevars f1)
  56. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement