# Formatting rules for Extended Lightweight Text Assurance Case (LTAC) format
v1.5.0 2026-03-04 (based on v1.1.2, 26.02.2026)
Argevide and David A. Wheeler
Original: https://www.argevide.com/documents/ltac.txt

NOTE: This "Extended LTAC" is based on LTAC v1.1.2, 26.02.2026 from Argevide but has extensions developed by David A. Wheeler.

1. LTAC is a text format for representing assurance case arguments regardless of the notation originally used. LTAC can be mapped to GSN, CAE, TRUST-IT, and SACM notations. An LTAC package contains a set of elements, each presented in a separate line.
2. LTAC defines its own element types that can be mapped to GSN, CAE, TRUST-IT, and SACM. LTAC defines its own syntax described below which is different from the rules of GSN, CAE, TRUST-IT, or SACM. Only the rules described below apply to LTAC.
3. The allowed element types are Claim, Strategy, Justification, Evidence, Context, Assumption, and Relation. Each package in LTAC should start (at the top) with a Claim or Justification.
4. A keyword 'Link' is used to cite an already specified element within the same package.
5. Each element is defined in one line in LTAC that begins with dash and a type keyword (or 'Link' keyword). This is followed optionally by an identifier or by "^" and a mandatory identifier, e.g.
  - Claim C1
  - Strategy S1
  - Justification J1
  - Evidence E1
  - Context X1
  - Assumption A1
  - Relation R1
  - Link C4
  - Claim ^C22
6. If an element is to be used more than once, it should be defined once only and other occurrences should be defined as links or citations. A Link entry is a citation of previously defined element (often evidence or context) without repeating it.
7. Identifiers are optional, but when specified, they should be unique within the package except links. Links are citations of existing elements and they use existing identifiers within the package.
  - Identifiers G1, G2 can be used for claims, or Cxt1, Cxt2 can be used for context elements. Any letters, digits and other characters except ':' can be used in identifiers. Identifiers’ prefixes other than presented in point 1 and "^" are acceptable.
  - An identifier beginning with "^" is an external reference that refers to an element declared elsewhere (normally in another package). LTAC identifiers are globally unique, so no package qualifier is needed. Implementations may use this information to generate hyperlinks. External references should only be Claims or Justifications.
8. After the identifier, a colon (':') separates it from the descriptive text, the element name. The text cannot contain new line characters. The text can contain colons (':'). An example of a correct element definition:
```
  - Claim C1: System is sufficiently safe
```
9. Argument structure
  a) The assurance case argument is structured using indentation. Two spaces are added for each level of the argument structure.
  b) Child nodes (sub-claims, evidence, strategies, etc.) are indented under their parents.
  c) Each indentation level, two spaces, represents one step deeper in the argument hierarchy.
  d) Hyphens '-' are used at the start of each line to mark list items.
  e) Evidence references may cite external artifacts, written inside parentheses at the end of element name.
  f) Justifications may need to be supported by evidence or an argument: subclaims or a strategy.
  g) The following relationships are permitted within the argument structure, which is presented in the format 'element -> sub-element'. Any relationships not listed below are not permitted.
    - Claim -> Claim, Strategy, Assumption, Justification, Evidence
    - Strategy -> Claim, Justification, Assumption
    - Justification -> Claim, Strategy, Evidence
    - Any element -> Context, Relation
  h) Claims supported by Evidence should not be supported by any Justifications, Assumptions nor Strategies.
    - Justifications and Assumptions should be used for higher-level claims and strategies.
	- If a Claim is to be supported by Evidence and by Strategy, the Evidence should be replaced by a Claim describing it and this Claim can be supported by this Evidence element
  i) LTAC can be used to present a single module argument, not modular arguments. Interfaces and away elements cannot be represented in LTAC. Other more advanced notations can be used to represent modular arguments.
  j) Each non-blank line must contain one element, link, citation, or comment (see rule 10); you can't add additional text about an element on following lines.
  k) LTAC is a code. In Markdown you should place 3 backticks ` ``` ` on a line above and below the code block to present LTAC packages.
  l) Elements can include "{Options}" which may influence how they are translated into various formats.
10. Comments
  a) A comment is a line whose first non-space character is '#'. The comment text runs from the '#' to the end of the line.
  b) A comment is associated with the next non-comment line in the file, wherever that line appears. Intervening blank lines do not change this association.
  c) A comment's indentation must equal the indentation of the line it is associated with. Consequently, comments before a package root must be at indentation level 0, comments within a package must match the depth of the element they precede, and trailing comments at the end of the file must be at indentation level 0.
  d) Blank lines are part of the comment block at their position in the file, whether they appear before, within, or after comment lines, and whether or not any comment lines are present. This applies at any depth, including between sibling elements within a package. Blank lines within a comment block may serve as visual separators. All comment lines in a group must share the same indentation level.
  e) Tools may normalize blank lines around package boundaries when rewriting them. Specifically they may remove a leading blank line from the comment block that precedes a package root (or the trailing comment block at end of file), add a blank line after some or all packages, and/or remove blank lines at the very beginning or end of the file.

11. Options and references
  a) After the element text you may add an optional curly-brace-enclosed comma-separated list of options that mark the element
  b) After that you may add an optional parentheses-enclosed reference (a URL or file being referred to)
  c) To define text ending in parentheses or braces, use `{}` or `()` afterwards to indicate they are not options and/or referencs
  d) Options are an ordered, case-insensitive, non-duplicative, comma-separated list of options. Comparisons of option values must be case-insensitive; implementations are free to normalize options to lowercase when reading or writing.

# LTAC example
```
- Claim G1: The system is acceptably safe for operation
  - Context X1: System specification (Dev17_specification_v1.3.pdf)
  - Strategy S1: Decompose safety argument by system hazards
    - Claim G2: All hazards have been identified
      - Evidence Ev1: Hazard analysis (HARA report.pdf)
    - Claim G3: All hazards have been mitigated {defeated}
      - Link Ev1
    - Claim ^Verification: Hazard mitigation verified
```

# LTAC mapping to GSN (Goal Structuring Notation)
LTAC packages can be mapped to GSN.
 - Claim in LTAC corresponds to Goal in GSN.
 - Evidence in LTAC corresponds to Solution in GSN.
 - The remaining element type names are consistent in LTAC and GSN.
 - Links in LTAC are used to cite elements in GSN which support more than one element.

# LTAC mapping to TRUST-IT
LTAC packages can be mapped to TRUST-IT.
 - Justification in LTAC corresponds to Rationale in TRUST-IT.
 - Evidence in LTAC corresponds to Reference in TRUST-IT.
 - Context in LTAC corresponds to Information in TRUST-IT.
 - The remaining element type names are consistent in LTAC and TRUST-IT.
 - Links in LTAC are used to cite elements in TRUST-IT which support more than one element.

# LTAC mapping to CAE (Claims Arguments Evidence)
LTAC packages can be mapped to CAE.
 - Strategy in LTAC corresponds to Argument in CAE.
 - Assumption in LTAC corresponds to Claim accepted as true in CAE.
 - Justification in LTAC corresponds to Side Claim in CAE.
 - The remaining element type names are consistent in LTAC and CAE.
 - Links in LTAC are used to cite elements in CAE which support more than one element.

# LTAC mapping to SACM

- Claim in LTAC corresponds to Claim in SACM.
- Strategy in LTAC corresponds to ArgumentReasoning in SACM.
- Evidence in LTAC corresponds to ArtifactReference in SACM.
- Context in LTAC corresponds to ArtifactReference with an AssertedContext connection in SACM
- Assumption in LTAC corresponds to Claim with assertionDeclaration "assumed" in SACM.
- Justification in LTAC corresponds to Claim in SACM.
- Link in LTAC is used to cite elements in SACM which support more than one element.
- Relation in LTAC corresponds to AssertedRelationship in SACM. Typically this doesn't need to be shown separately in LTAC, but it *does* need to be in LTAC when applying options to the relationship.

By default assertionDeclaration=asserted and abstract=false. Any element that uses an external reference sets its assertionDeclaration=asCited.

Certain options are defined to enable better SACM support:

- asserted: assertionDeclaration=asserted (the default)
- needssupport: assertionDeclaration=needsSupport
- assumed: assertionDeclaration=assumed
- axiomatic: assertionDeclaration=axiomatic
- defeated: assertionDeclaration=defeated
- ascited: assertionDeclaration=asCited
- iscounter: isCounter=true (counters declared purpose). Counter-evidence doesn't always lead to the defeat of a claim, but it might.
- abstract: isAbstract=true
- metaclaim: metaClaim=true

Unless otherwise noted, parents are connected through children via a SACM AssertedRelationship with default the assertionDeclaration `asserted`. When a Strategy (ArgumentReasoning), sub-Claims, and/or Evidence share the same parent Claim, they all connect to a single shared AssertedRelationship (represented by default as a dot). If a Strategy has sub-Claims as Children, the children will become siblings of the Strategy and share the AssertedRelationship.

# Extensions

This specification extends LTAC as follows:

- Adds citation identifiers beginning with "^" for cross-package references; identifiers are globally unique so no package qualifier is needed. Cross-package citations have their own grammar form: the "^" and Identifier are mandatory (to name the cited element), while ": text" is optional (and when present must match the declared element's text; tools may fill it in automatically).
- An "LTACargument" became a "Package", and 1+ packages are supported. Elements can refer to elements in other packages, equivalent to how SACM packages can refer to elements in other SACM packages. This support for cross-links is critical for non-trivial assurance cases. We intentionally avoid the term "argument" here to reduce confusion, because in SACM and CAE an argument is equivalent to GSN Strategy. A case "component" is an element or a package.
- Adds mapping to SACM.
- Adds a "Relation" element type so SACM relationships can be defined
- Allows {Options} for richer mapping

# EBNF grammar for LTAC:

LTACfile        = { Package } CommentBlock ;

Package         = CommentBlock Element ElementList ;

ElementList     = { CommentBlock Element ElementList } ;

CommentBlock    = { CommentLine | BlankLine } ;

CommentLine     = Indent "#" { Character - Newline } Newline ;

BlankLine       = Newline ;

Element         = Indent "-" WS NodeType [WS Identifier] ":" WS Text [WS Options] [WS Reference] Newline
                | Indent "-" WS NodeType WS "^" Identifier [":" WS Text [WS Options] [WS Reference]] Newline
                | Indent "-" WS "Link" WS Identifier [WS Options] Newline ;

NodeType        = "Claim" | "Strategy" | "Evidence" | "Justification" | "Context" | "Assumption" | "Relation" ;

Identifier      = { Character - ":" - "^" - Newline } ;   (* e.g., C1, C1.1, Ev5, J1, X3; "^" is forbidden *)

Text            = { Character - Newline } ;       (* descriptive label text *)

Reference       = "(" , { Character - ")" - Newline } , ")" ; (* e.g. (Doc-HAZ-2025) *)

Options         = "{" Option { "," WS? Option } "}" ;

Option          = { Character - "," - "}" } ;

Indent          = { "  " } ;   (* each indentation level = 2 spaces *)

Newline         = ["\r"] "\n" ;

WS              = " " | "\t" ;
Character       = ? any printable character ? ;


# License
LTAC is licensed under the Creative Commons Attribution 4.0 International License.
To view a copy of this license, visit http://creativecommons.org/licenses/by/4.0/

Comments and questions regarding LTAC should be sent to support@argevide.com
Comments and questions regarding this extension go to dwheeler @ dwheeler . com
