==============================|||
Basic Submodule Reference
==============================|||

---- MODULE Test ----
op == M!X!Y!Z
====

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

(source_file (module (header_line) (identifier) (header_line)
  (operator_definition (identifier) (def_eq)
    (prefixed_op
      (subexpr_prefix
        (subexpr_component (identifier_ref))
        (subexpr_component (identifier_ref))
        (subexpr_component (identifier_ref))
      )
      (identifier_ref)
    )
  )
(double_line)))

==============================|||
Subexpression Tree Navigation
==============================|||

---- MODULE Test ----
tree_nav == op(a, b)!<<!>>!3!(x, y)!:!@
====

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

(source_file (module (header_line) name: (identifier) (header_line)
  (operator_definition name: (identifier) (def_eq) definition:
    (subexpression
      (subexpr_prefix
        (subexpr_component (bound_op name: (identifier_ref) parameter: (identifier_ref) parameter: (identifier_ref)))
        (subexpr_tree_nav (langle_bracket))
        (subexpr_tree_nav (rangle_bracket))
        (subexpr_tree_nav (child_id))
        (subexpr_tree_nav (operator_args (identifier_ref) (identifier_ref)))
        (subexpr_tree_nav (colon))
      )
      (subexpr_tree_nav (address))
    )
  )
(double_line)))

===============================|||
Proof Step ID Subexpression Tree Navigation
===============================|||

---- MODULE Test ----
COROLLARY TRUE
PROOF <1>a QED BY <1>a!<<!>>!3!(x, y)!:!@, <1>a!<<!>>!3!(x, y)!:!@
====

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

(source_file (module (header_line) name: (identifier) (header_line)
  (theorem statement: (boolean)
    proof: (non_terminal_proof
      (qed_step (proof_step_id (level) (name))
        (terminal_proof (use_body (use_body_expr
          (subexpression
            (subexpr_prefix
              (proof_step_ref (level) (name))
              (subexpr_tree_nav (langle_bracket))
              (subexpr_tree_nav (rangle_bracket))
              (subexpr_tree_nav (child_id))
              (subexpr_tree_nav (operator_args (identifier_ref) (identifier_ref)))
              (subexpr_tree_nav (colon))
            )
            (subexpr_tree_nav (address))
          )
          (subexpression
            (subexpr_prefix
              (proof_step_ref (level) (name))
              (subexpr_tree_nav (langle_bracket))
              (subexpr_tree_nav (rangle_bracket))
              (subexpr_tree_nav (child_id))
              (subexpr_tree_nav (operator_args (identifier_ref) (identifier_ref)))
              (subexpr_tree_nav (colon))
            )
            (subexpr_tree_nav (address))
          )
        )))
      )
    )
  )
(double_line)))

