Skip to content

Instantly share code, notes, and snippets.

@nkaretnikov
Last active August 29, 2015 14:17
Show Gist options
  • Save nkaretnikov/86b84f74ff2cdc216bba to your computer and use it in GitHub Desktop.
Save nkaretnikov/86b84f74ff2cdc216bba to your computer and use it in GitHub Desktop.
Subseq
Inductive subseq {X : Type} : (list X) -> (list X) -> Prop :=
| s_nil : forall (xs : list X),
subseq nil xs
| s_diff : forall (y : X) (xs ys : list X),
subseq xs ys -> subseq xs (y::ys)
| s_same : forall (x : X) (xs ys : list X),
subseq xs ys -> subseq (x::xs) (x::ys).
(*
subseq [1,2,3] [1,2,3]:
------------ (s_nil)
subseq [] []
-------------- (s_same)
subseq [3] [3]
------------------ (s_same)
subseq [2,3] [2,3]
---------------------- (s_same)
subseq [1,2,3] [1,2,3]
subseq [1,2,3] [1,1,1,2,2,3]:
------------ (s_nil)
subseq [] []
-------------- (s_same)
subseq [3] [3]
---------------- (s_diff)
subseq [3] [2,3]
-------------------- (s_same)
subseq [2,3] [2,2,3]
---------------------- (s_diff)
subseq [2,3] [1,2,2,3]
------------------------ (s_diff)
subseq [2,3] [1,1,2,2,3]
---------------------------- (s_same)
subseq [1,2,3] [1,1,1,2,2,3]
subseq [1,2,3] [1,2,7,3]:
------------ (s_nil)
subseq [] []
-------------- (s_same)
subseq [3] [3]
---------------- (s_diff)
subseq [3] [7,3]
-------------------- (s_same)
subseq [2,3] [2,7,3]
------------------------ (s_same)
subseq [1,2,3] [1,2,7,3]
subseq [1,2,3] [5,6,1,9,9,2,7,3,8]:
------------- (s_nil)
subseq [] [8]
---------------- (s_same)
subseq [3] [3,8]
------------------ (s_diff)
subseq [3] [7,3,8]
---------------------- (s_same)
subseq [2,3] [2,7,3,8]
------------------------ (s_diff)
subseq [2,3] [9,2,7,3,8]
-------------------------- (s_diff)
subseq [2,3] [9,9,2,7,3,8]
------------------------------ (s_same)
subseq [1,2,3] [1,9,9,2,7,3,8]
-------------------------------- (s_diff)
subseq [1,2,3] [6,1,9,9,2,7,3,8]
---------------------------------- (s_diff)
subseq [1,2,3] [5,6,1,9,9,2,7,3,8]
!subseq [1,2,3] [1,2]:
------------- (no rule)
subseq [3] []
---------------- (s_same)
subseq [2,3] [2]
-------------------- (s_same)
subseq [1,2,3] [1,2]
!subseq [1,2,3] [1,3]:
------------- (no rule)
subseq [2] []
---------------- (s_diff)
subseq [2,3] [3]
-------------------- (s_same)
subseq [1,2,3] [1,3]
!subseq [1,2,3] [5,6,2,1,7,3,8]:
--------------- (no rule)
subseq [2,3] []
---------------- (s_diff)
subseq [2,3] [8]
------------------ (s_diff)
subseq [2,3] [3,8]
-------------------- (s_diff)
subseq [2,3] [7,3,8]
------------------------ (s_same)
subseq [1,2,3] [1,7,3,8]
-------------------------- (s_diff)
subseq [1,2,3] [2,1,7,3,8]
---------------------------- (s_diff)
subseq [1,2,3] [6,2,1,7,3,8]
------------------------------ (s_diff)
subseq [1,2,3] [5,6,2,1,7,3,8]
*)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment