=============|||
Basic Unicode CASE
=============|||

---- MODULE Test ----
op ≜
    CASE 1 → 2
    □ 3 → 4
    □ OTHER → 5
====

--------------|||

(source_file (module (header_line) (identifier) (header_line)
  (operator_definition (identifier) (def_eq)
    (case
      (case_arm (nat_number) (case_arrow) (nat_number))
      (case_box) (case_arm (nat_number) (case_arrow) (nat_number))
      (case_box) (other_arm (case_arrow) (nat_number))
    )
  )
(double_line)))

=============|||
Conjlist with CASE
=============|||

---- MODULE Test ----
op ≜
  ∧ CASE 1 → 2
    □ 3 → 2
    □ OTHER → 5
  ∧ 6
====

-------------|||

(source_file (module (header_line) (identifier) (header_line)
  (operator_definition (identifier) (def_eq)
    (conj_list
      (conj_item
        (bullet_conj)
        (case
          (case_arm (nat_number) (case_arrow) (nat_number))
          (case_box) (case_arm (nat_number) (case_arrow) (nat_number))
          (case_box) (other_arm (case_arrow) (nat_number))
        )
      )
      (conj_item (bullet_conj) (nat_number))
    )
  )
(double_line)))

=============|||
Conjlist inside CASE
=============|||

---- MODULE Test ----
op ≜
  CASE
    ∧ 1
    ∧ 2
      →
        ∧ 3
        ∧ 4
  □
    ∧ 5
    ∧ 6
      →
        ∧ 7
        ∧ 8
  □ OTHER →
    ∧ 7
    ∧ 8
====

-------------|||

(source_file (module (header_line) (identifier) (header_line)
  (operator_definition (identifier) (def_eq)
    (case
      (case_arm
        (conj_list (conj_item (bullet_conj) (nat_number)) (conj_item (bullet_conj) (nat_number)))
        (case_arrow)
        (conj_list (conj_item (bullet_conj) (nat_number)) (conj_item (bullet_conj) (nat_number)))
      )
      (case_box)
      (case_arm
        (conj_list (conj_item (bullet_conj) (nat_number)) (conj_item (bullet_conj) (nat_number)))
        (case_arrow)
        (conj_list (conj_item (bullet_conj) (nat_number)) (conj_item (bullet_conj) (nat_number)))
      )
      (case_box)
      (other_arm (case_arrow)
        (conj_list (conj_item (bullet_conj) (nat_number)) (conj_item (bullet_conj) (nat_number)))
      )
    )
  )
(double_line)))

=============|||
Disjlist with CASE
=============|||

---- MODULE Test ----
op ≜
  ∨  CASE 1 → 2
      □ 3 → 2
      □ OTHER → 5
  ∨ 6
====

-------------|||

(source_file (module (header_line) (identifier) (header_line)
  (operator_definition (identifier) (def_eq)
    (disj_list
      (disj_item
        (bullet_disj)
        (case
          (case_arm (nat_number) (case_arrow) (nat_number))
          (case_box) (case_arm (nat_number) (case_arrow) (nat_number))
          (case_box) (other_arm (case_arrow) (nat_number))
        )
      )
      (disj_item (bullet_disj) (nat_number))
    )
  )
(double_line)))

=============|||
Disjlist inside CASE
=============|||

---- MODULE Test ----
op ≜
  CASE
    ∨ 1
    ∨ 2
      →
        ∨ 3
        ∨ 4
  □
    ∨ 5
    ∨ 6
      →
        ∨ 7
        ∨ 8
  □ OTHER →
    ∨ 7
    ∨ 8
====

-------------|||

(source_file (module (header_line) (identifier) (header_line)
  (operator_definition (identifier) (def_eq)
    (case
      (case_arm
        (disj_list (disj_item (bullet_disj) (nat_number)) (disj_item (bullet_disj) (nat_number)))
        (case_arrow)
        (disj_list (disj_item (bullet_disj) (nat_number)) (disj_item (bullet_disj) (nat_number)))
      )
      (case_box)
      (case_arm
        (disj_list (disj_item (bullet_disj) (nat_number)) (disj_item (bullet_disj) (nat_number)))
        (case_arrow)
        (disj_list (disj_item (bullet_disj) (nat_number)) (disj_item (bullet_disj) (nat_number)))
      )
      (case_box)
      (other_arm (case_arrow)
        (disj_list (disj_item (bullet_disj) (nat_number)) (disj_item (bullet_disj) (nat_number)))
      )
    )
  )
(double_line)))

===================|||
Unicode Conjunct Inside Ambiguous Case (GH tlaplus/tlaplus #487)
===================|||

---- MODULE Test ----
op ≜
  CASE A →
    ∧ CASE B → C
       □ D → E
  □ F → G

op2 ≜
  CASE H →
    ∧ CASE I → J
       □ OTHER → K
  □ L → M

op3 ≜
  CASE N →
    ∧ CASE O → P
       □ Q → R
    ∧ S
  □ T → U
====

-------------------|||

(source_file (module (header_line) (identifier) (header_line)
  (operator_definition (identifier) (def_eq)
    (case
      (case_arm (identifier_ref) (case_arrow) (conj_list (conj_item (bullet_conj)
        (case
          (case_arm (identifier_ref) (case_arrow) (identifier_ref))
          (case_box)
          (case_arm (identifier_ref) (case_arrow) (identifier_ref))
        )
      )))
      (case_box)
      (case_arm (identifier_ref) (case_arrow) (identifier_ref))
    )
  )
  (operator_definition (identifier) (def_eq)
    (case
      (case_arm (identifier_ref) (case_arrow) (conj_list (conj_item (bullet_conj)
        (case
          (case_arm (identifier_ref) (case_arrow) (identifier_ref))
          (case_box)
          (other_arm (case_arrow) (identifier_ref))
        )
      )))
      (case_box)
      (case_arm (identifier_ref) (case_arrow) (identifier_ref))
    )
  )
  (operator_definition (identifier) (def_eq)
    (case
      (case_arm (identifier_ref) (case_arrow) (conj_list
        (conj_item (bullet_conj)
          (case
            (case_arm (identifier_ref) (case_arrow) (identifier_ref))
            (case_box)
            (case_arm (identifier_ref) (case_arrow) (identifier_ref))
          )
        )
        (conj_item (bullet_conj) (identifier_ref))
      ))
      (case_box)
      (case_arm (identifier_ref) (case_arrow) (identifier_ref))
    )
  )
(double_line)))
