| ⊦ str < str2 ∨ str = str2 ∨ str2 < str |
str ≠ str2, ¬ str < str2, ¬ str2 < str ⊦
| str ≠ str2, ¬ str < str2, ¬ str2 < str ⊦ |
str ≠ str2, ¬ str < str2, ¬ str2 < str ⊦
| str ≠ str2, ¬ str < str2, ¬ str2 < str ⊦ |
char + str0 ≠ str2, ¬ char + str0 < str2, ¬ str2 < char + str0, ∀ str2. ¬(str0 ≠ str2 ∧ ¬ str0 < str2 ∧ ¬ str2 < str0) ⊦
Used simplifier rules: less-empty: ⊦ "" < str ↔ str ≠ ""; string freely generated by "", +;;
| char + str0 ≠ str2, ¬ char + str0 < str2, ¬ str2 < char + str0, ∀ str2. ¬(str0 ≠ str2 ∧ ¬ str0 < str2 ∧ ¬ str2 < str0) ⊦ |
char ' + str0 ≠ str2, ¬ char ' + str0 < str2, ¬ str2 < char ' + str0, ∀ str. str0 = str ∨ str0 < str ∨ str < str0 ⊦
Used simplifier rules: ⊦ a + x = a ' + x; (s)
| char ' + str0 ≠ str2, ¬ char ' + str0 < str2, ¬ str2 < char ' + str0, ∀ str. str0 = str ∨ str0 < str ∨ str < str0 ⊦ |
char ' + str0 ≠ char0 + str, ¬ char ' + str0 < char0 + str, ¬ char0 + str < char ' + str0, ∀ str. str0 = str ∨ str0 < str ∨ str < str0, ∀ char, str0. ¬(char ' + str0 ≠ str ∧ ¬ char ' + str0 < str ∧ ¬ str < char ' + str0 ∧ (∀ str. str0 = str ∨ str0 < str ∨ str < str0)) ⊦
Used simplifier rules: Less-empty: ⊦ "" < char ' + str; string freely generated by "", +;; ⊦ a ' + x ≠ ""; (s) a: ⊦ (x + y) + z = x + y + z; from specification list[string]
| char ' + str0 ≠ char0 + str, ¬ char ' + str0 < char0 + str, ¬ char0 + str < char ' + str0, ∀ str. str0 = str ∨ str0 < str ∨ str < str0, ∀ char, str0. ¬(char ' + str0 ≠ str ∧ ¬ char ' + str0 < str ∧ ¬ str < char ' + str0 ∧ (∀ str. str0 = str ∨ str0 < str ∨ str < str0)) ⊦ |
char ' + str0 ≠ char0 ' + str, ¬ char < char0, ¬ char0 < char, ∀ str. str0 = str ∨ str0 < str ∨ str < str0, ∀ char1, str1. char1 ' + str1 = str ∨ char1 ' + str1 < str ∨ str < char1 ' + str1 ∨ ¬(∀ str. str1 = str ∨ str1 < str ∨ str < str1) ⊦ char = char0 ∧ str0 < str, char0 = char ∧ str < str0
Used simplifier rules: Less-rec: ⊦ char1 ' + str1 < char2 ' + str2 ↔ char1 < char2 ∨ char1 = char2 ∧ str1 < str2; a: ⊦ (x + y) + z = x + y + z; from specification list[string] ⊦ a + x = a ' + x; (s)
| char ' + str0 ≠ char0 ' + str, ¬ char < char0, ¬ char0 < char, ∀ str. str0 = str ∨ str0 < str ∨ str < str0, ∀ char1, str1. char1 ' + str1 = str ∨ char1 ' + str1 < str ∨ str < char1 ' + str1 ∨ ¬(∀ str. str1 = str ∨ str1 < str ∨ str < str1) ⊦ char = char0 ∧ str0 < str, char0 = char ∧ str < str0 |
y ≠ "" ⊦ a ' + x = y + z ↔ a = y.char1 ∧ x = y.rstring + z
char0 ' ≠ "", ¬ char < char0, ¬ char0 < char, ∀ char1, str1. char1 ' + str1 = str ∨ char1 ' + str1 < str ∨ str < char1 ' + str1 ∨ ¬(∀ str. str1 = str ∨ str1 < str ∨ str < str1), ∀ str. str0 = str ∨ str0 < str ∨ str < str0, char ≠ char0 '.char1 ∨ str0 ≠ char0 '.rstring + str ⊦ char0 = char ∧ str < str0, char = char0 ∧ str0 < str
Used simplifier rules: ⊦ a ' ≠ ""; (s) Used terms: str, char0 ', str0, char
| y ≠ "" ⊦ a ' + x = y + z ↔ a = y.char1 ∧ x = y.rstring + z |
| char0 ' ≠ "", ¬ char < char0, ¬ char0 < char, ∀ char1, str1. char1 ' + str1 = str ∨ char1 ' + str1 < str ∨ str < char1 ' + str1 ∨ ¬(∀ str. str1 = str ∨ str1 < str ∨ str < str1), ∀ str. str0 = str ∨ str0 < str ∨ str < str0, char ≠ char0 '.char1 ∨ str0 ≠ char0 '.rstring + str ⊦ char0 = char ∧ str < str0, char = char0 ∧ str0 < str |
¬ char < char0, ¬ char0 < char, ∀ str. str0 = str ∨ str0 < str ∨ str < str0, ∀ char1, str1. char1 ' + str1 = str ∨ char1 ' + str1 < str ∨ str < char1 ' + str1 ∨ ¬(∀ str. str1 = str ∨ str1 < str ∨ str < str1), char ≠ char0 ∨ str0 ≠ str ⊦ char = char0 ∧ str0 < str, char0 = char ∧ str < str0
Used simplifier rules: a: ⊦ (x + y) + z = x + y + z; from specification list[string] ⊦ "" + x = x; (s) ⊦ a '.rstring = ""; (s) ⊦ a '.char1 = a; (s) ⊦ a ' ≠ ""; (s)
| ¬ char < char0, ¬ char0 < char, ∀ str. str0 = str ∨ str0 < str ∨ str < str0, ∀ char1, str1. char1 ' + str1 = str ∨ char1 ' + str1 < str ∨ str < char1 ' + str1 ∨ ¬(∀ str. str1 = str ∨ str1 < str ∨ str < str1), char ≠ char0 ∨ str0 ≠ str ⊦ char = char0 ∧ str0 < str, char0 = char ∧ str < str0 |
⊦ char1 < char2 ∨ char1 = char2 ∨ char2 < char1
¬ char < char0, ¬ char0 < char, ∀ char1, str1. char1 ' + str1 = str ∨ char1 ' + str1 < str ∨ str < char1 ' + str1 ∨ ¬(∀ str. str1 = str ∨ str1 < str ∨ str < str1), ∀ str. str0 = str ∨ str0 < str ∨ str < str0, char ≠ char0 ∨ str0 ≠ str, char < char0 ∨ char = char0 ∨ char0 < char ⊦ char0 = char ∧ str < str0, char = char0 ∧ str0 < str
Used terms: char, char0
| ⊦ char1 < char2 ∨ char1 = char2 ∨ char2 < char1 |
| ¬ char < char0, ¬ char0 < char, ∀ char1, str1. char1 ' + str1 = str ∨ char1 ' + str1 < str ∨ str < char1 ' + str1 ∨ ¬(∀ str. str1 = str ∨ str1 < str ∨ str < str1), ∀ str. str0 = str ∨ str0 < str ∨ str < str0, char ≠ char0 ∨ str0 ≠ str, char < char0 ∨ char = char0 ∨ char0 < char ⊦ char0 = char ∧ str < str0, char = char0 ∧ str0 < str |
str0 ≠ str, ¬ str < str0, ¬ str0 < str, ∀ char1, str1. char1 ' + str1 = str ∨ char1 ' + str1 < str ∨ str < char1 ' + str1 ∨ ¬(∀ str. str1 = str ∨ str1 < str ∨ str < str1), ∀ str. str0 = str ∨ str0 < str ∨ str < str0 ⊦
Used simplifier rules: Char-irref: ⊦ ¬ char < char;
| str0 ≠ str, ¬ str < str0, ¬ str0 < str, ∀ char1, str1. char1 ' + str1 = str ∨ char1 ' + str1 < str ∨ str < char1 ' + str1 ∨ ¬(∀ str. str1 = str ∨ str1 < str ∨ str < str1), ∀ str. str0 = str ∨ str0 < str ∨ str < str0 ⊦ |
Used terms: str
The following image shows the proof tree of sequent calculus. The proved goal is at the bottom. You can click on the nodes to view additional rules. See here for details on colors in a proof tree.