Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
C
coqdram
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Package Registry
Container Registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
sdram20
coqdram
Commits
ff9f74c9
Commit
ff9f74c9
authored
4 years ago
by
Felipe Lisboa Malaquias
Browse files
Options
Downloads
Patches
Plain Diff
Added SequencesExt
parent
2132dd22
No related branches found
Branches containing commit
No related tags found
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
TLAplus/SequencesExt.tla
+145
-0
145 additions, 0 deletions
TLAplus/SequencesExt.tla
with
145 additions
and
0 deletions
TLAplus/SequencesExt.tla
0 → 100644
+
145
−
0
View file @
ff9f74c9
---------------------------- MODULE SequencesExt ----------------------------
LOCAL INSTANCE Sequences
LOCAL INSTANCE Naturals
LOCAL INSTANCE FiniteSets
LOCAL INSTANCE Functions
(*************************************************************************)
(* Imports the definitions from the modules, but doesn't export them. *)
(*************************************************************************)
-----------------------------------------------------------------------------
ToSet(s) ==
(*************************************************************************)
(* The image of the given sequence s. Cardinality(ToSet(s)) <= Len(s) *)
(* see https://en.wikipedia.org/wiki/Image_(mathematics) *)
(*************************************************************************)
{ s[i] : i \in DOMAIN s }
IsInjective(s) ==
(*************************************************************************)
(* TRUE iff the sequence s contains no duplicates where two elements *)
(* a, b of s are defined to be duplicates iff a = b. In other words, *)
(* Cardinality(ToSet(s)) = Len(s) *)
(* *)
(* This definition is overridden by TLC in the Java class SequencesExt. *)
(* The operator is overridden by the Java method with the same name. *)
(* *)
(* Also see Functions!Injective operator. *)
(*************************************************************************)
\A i, j \in DOMAIN s: (s[i] = s[j]) => (i = j)
SetToSeq(S) ==
(**************************************************************************)
(* Convert a set to some sequence that contains all the elements of the *)
(* set exactly once, and contains no other elements. *)
(**************************************************************************)
CHOOSE f \in [1..Cardinality(S) -> S] : IsInjective(f)
-----------------------------------------------------------------------------
Contains(s, e) ==
(**************************************************************************)
(* TRUE iff the element e \in ToSet(s). *)
(**************************************************************************)
\E i \in 1..Len(s) : s[i] = e
Reverse(s) ==
(**************************************************************************)
(* Reverse the given sequence s: Let l be Len(s) (length of s). *)
(* Equals a sequence s.t. << S[l], S[l-1], ..., S[1]>> *)
(**************************************************************************)
[ i \in 1..Len(s) |-> s[(Len(s) - i) + 1] ]
Remove(s, e) ==
(************************************************************************)
(* The sequence s with e removed or s iff e \notin Range(s) *)
(************************************************************************)
SelectSeq(s, LAMBDA t: t # e)
ReplaceAll(s, old, new) ==
(*************************************************************************)
(* Equals the sequence s except that all occurrences of element old are *)
(* replaced with the element new. *)
(*************************************************************************)
LET F[i \in 0..Len(s)] ==
IF i = 0 THEN << >>
ELSE IF s[i] = old THEN Append(F[i-1], new)
ELSE Append(F[i-1], s[i])
IN F[Len(s)]
-----------------------------------------------------------------------------
\* The operators below have been extracted from the TLAPS module
\* SequencesTheorems.tla as of 10/14/2019. The original comments have been
\* partially rewritten.
InsertAt(s, i, e) ==
(**************************************************************************)
(* Inserts element e at the position i moving the original element to i+1 *)
(* and so on. In other words, a sequence t s.t.: *)
(* /\ Len(t) = Len(s) + 1 *)
(* /\ t[i] = e *)
(* /\ \A j \in 1..(i - 1): t[j] = s[j] *)
(* /\ \A k \in (i + 1)..Len(s): t[k + 1] = s[k] *)
(**************************************************************************)
SubSeq(s, 1, i-1) \o <<e>> \o SubSeq(s, i, Len(s))
ReplaceAt(s, i, e) ==
(**************************************************************************)
(* Replaces the element at position i with the element e. *)
(**************************************************************************)
[s EXCEPT ![i] = e]
RemoveAt(s, i) ==
(**************************************************************************)
(* Replaces the element at position i shortening the length of s by one. *)
(**************************************************************************)
SubSeq(s, 1, i-1) \o SubSeq(s, i+1, Len(s))
-----------------------------------------------------------------------------
Front(s) ==
(**************************************************************************)
(* The sequence formed by removing its last element. *)
(**************************************************************************)
SubSeq(s, 1, Len(s)-1)
Last(s) ==
(**************************************************************************)
(* The last element of the sequence. *)
(**************************************************************************)
s[Len(s)]
-----------------------------------------------------------------------------
IsPrefix(s, t) ==
(**************************************************************************)
(* TRUE iff the sequence s is a prefix of the sequence t, s.t. *)
(* \E u \in Seq(Range(t)) : t = s \o u. In other words, there exists *)
(* a suffix u that with s prepended equals t. *)
(**************************************************************************)
DOMAIN s \subseteq DOMAIN t /\ \A i \in DOMAIN s: s[i] = t[i]
IsStrictPrefix(s,t) ==
(**************************************************************************)
(* TRUE iff the sequence s is a prefix of the sequence t and s # t *)
(**************************************************************************)
IsPrefix(s, t) /\ s # t
IsSuffix(s, t) ==
(**************************************************************************)
(* TRUE iff the sequence s is a suffix of the sequence t, s.t. *)
(* \E u \in Seq(Range(t)) : t = u \o s. In other words, there exists a *)
(* prefix that with s appended equals t. *)
(**************************************************************************)
IsPrefix(Reverse(s), Reverse(t))
IsStrictSuffix(s, t) ==
(**************************************************************************)
(* TRUE iff the sequence s is a suffix of the sequence t and s # t *)
(**************************************************************************)
IsSuffix(s,t) /\ s # t
=============================================================================
\ No newline at end of file
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment