ben1996123

coq lemmas (regexp)

Aug 18th, 2018
192
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.61 KB | None | 0 0
  1. Definition substring {T} (s s' : list T) := exists a b, s = a ++ s' ++ b.
  2.  
  3. Fixpoint StringTake {T} (l : list T) n :=
  4. match n with
  5. | 0 => []
  6. | S n' => match l with
  7. | [] => []
  8. | x :: l' => x :: StringTake l' n'
  9. end
  10. end.
  11.  
  12. Fixpoint StringDrop {T} (l : list T) n :=
  13. match n with
  14. | 0 => l
  15. | S n' => match l with
  16. | [] => []
  17. | x :: l' => StringDrop l' n'
  18. end
  19. end.
  20.  
  21. Definition StringRTake {T} (l : list T) n := StringDrop l (length l - n).
  22. Definition StringRDrop {T} (l : list T) n := StringTake l (length l - n).
  23. Definition ConstString {T} (x : T) n := napp n [x].
  24. Definition BinStr a b := ConstString 0 a ++ ConstString 1 b.
  25.  
  26. Lemma ConstStr_length : forall T (x : T) n, length (ConstStr x n) = n.
  27. Lemma BinStr_length : forall n m, length (BinStr n m) = n + m.
  28. Lemma StringTake_Const : forall T (a : T) n m, m <= n ->
  29. StringTake (ConstStr a n) m = ConstStr a m.
  30. Lemma StringDrop_Const : forall T (x : T) m n,
  31. StringDrop (ConstStr x m) n = ConstStr x (m - n).
  32. Lemma StringTake_0 : forall T (l : list T), StringTake l 0 = [].
  33. Lemma StringDrop_0 : forall T (l : list T), StringDrop l 0 = l.
  34. Lemma StringTake_length : forall T (l : list T), StringTake l (length l) = l.
  35. Lemma StringDrop_length : forall T (l : list T), StringDrop l (length l) = [].
  36. Lemma StringTake_length_le : forall T (l : list T) n,
  37. length l <= n -> StringTake l n = l.
  38. Lemma StringDrop_length_le : forall T (l : list T) n,
  39. length l <= n -> StringDrop l n = [].
  40. Lemma StringTakeLength : forall T (l : list T) n,
  41. n <= length l -> length (StringTake l n) = n.
  42. Lemma StringDropLength : forall T (l : list T) n,
  43. length (StringDrop l n) = length l - n.
  44. Lemma StringTake_nil : forall T n, StringTake (@nil T) n = [].
  45. Lemma StringDrop_nil : forall T n, StringDrop (@nil T) n = [].
  46. Lemma StringTake_app_length : forall T (a b : list T),
  47. StringTake (a ++ b) (length a) = a.
  48. Lemma StringDrop_app_length : forall T (a b : list T),
  49. StringDrop (a ++ b) (length a) = b.
  50. Lemma StringRTake_0 : forall T (l : list T), StringRTake l 0 = [].
  51. Lemma StringDecomposition : forall T (l : list T) n,
  52. l = StringTake l n ++ StringDrop l n.
  53. Lemma StringDrop_sum : forall T (l : list T) a b,
  54. StringDrop (StringDrop l a) b = StringDrop l (a + b).
  55. Lemma Substring' : forall T (a b : list T),
  56. substring a b -> exists m n, b = StringTake (StringDrop a m) n.
  57. Lemma Substring'' : forall T (a b : list T),
  58. (exists m n, b = StringTake (StringDrop a m) n) -> substring a b.
  59. Lemma StringDrop_app_length_le : forall T (a b : list T) n,
  60. length a <= n -> StringDrop (a ++ b) n = StringDrop b (n - length a).
  61. Lemma StringDrop_app_length_ge : forall T (a b : list T) n,
  62. n <= length a -> StringDrop (a ++ b) n = StringDrop a n ++ b.
  63. Lemma length0 : forall T (a : list T), length a = 0 -> a = [].
  64. Lemma app_injective_r : forall T (a b c : list T), a ++ b = a ++ c -> b = c.
  65. Lemma app_injective_l : forall T (a b c : list T), a ++ c = b ++ c -> a = b.
  66. Lemma StringTake_app_length_le : forall T (a b : list T) n,
  67. length a <= n -> StringTake (a ++ b) n = a ++ StringTake b (n - length a).
  68. Lemma StringTake_app_length_ge : forall T (a b : list T) n,
  69. n <= length a -> StringTake (a ++ b) n = StringTake a n.
  70. Lemma Substring_app : forall T (a b s : list T),
  71. substring (a ++ b) s -> substring a s \/ substring b s \/ exists m n,
  72. m <= length a /\ n <= length b /\ s = StringRTake a m ++ StringTake b n.
  73. Lemma Substring_Const : forall T (x : T) n s, substring (ConstStr x n) s ->
  74. exists n', n' <= n /\ s = ConstStr x n'.
  75. Lemma Substring_BinStr : forall m n s, substring (BinStr m n) s ->
  76. exists m' n', s = BinStr m' n'.
  77. Lemma StringTake_BinStr : forall m n m',
  78. m' <= m -> StringTake (BinStr m n) m' = ConstStr 0 m'.
  79. Lemma StringDrop_BinStr : forall m n m',
  80. m <= m' -> StringDrop (BinStr m n) m' = ConstStr 1 (m + n - m').
  81. Lemma BinStr_n_0 : forall n, BinStr n 0 = ConstStr 0 n.
  82. Lemma BinStr_0_n : forall n, BinStr 0 n = ConstStr 1 n.
  83. Lemma ConstStr_app : forall T a b (x : T),
  84. ConstStr x a ++ ConstStr x b = ConstStr x (a + b).
  85. Lemma ConstStr_decomposition : forall T (x : T) n a b, ConstStr x n = a ++ b ->
  86. exists m' n', a = ConstStr x m' /\ b = ConstStr x n'.
  87. Lemma ConstStr_count : forall x n, count (ConstStr x n) x = n.
  88. Lemma ConstStr_count' : forall x y n, x <> y -> count (ConstStr x n) y = 0.
  89. Lemma count_app : forall l1 l2 n, count (l1 ++ l2) n = count l1 n + count l2 n.
  90. Lemma BinStr_count_l : forall m n, count (BinStr m n) 0 = m.
  91. Lemma BinStr_count_r : forall m n, count (BinStr m n) 1 = n.
  92. Theorem RegExp_BinStr : ~ exists re,
  93. (forall s, s =~ re <-> exists n, s = BinStr n n).
Add Comment
Please, Sign In to add comment