Now class invariants names use internally the class name
as a user Binding.qualifier.
This way one can use the same name for an invariant
in two different classes in the same theory:
doc_class "hypothesis" = math_content +
referentiable :: bool <= "True"
level :: "int option" <= "Some 2"
mcc :: "math_content_class" <= "hypt"
invariant d :: "mcc σ = hypt"
doc_class "math_proof" = math_content +
referentiable :: bool <= "True"
level :: "int option" <= "Some 2"
mcc :: "math_content_class" <= "prf_stmt"
invariant d :: "mcc σ = prf_stmt"
find_consts name:"math_proof.d_inv"
find_consts name:"hypothesis.d_inv"
Examples with value* that now work:
value*‹@{scholarly-paper.author ‹church'›}›
value*‹@{author ‹church›}›
value*‹@{Concept-High-Level-Invariants.author ‹church›}›
value*‹@{scholarly-paper.author-instances}›
value*‹@{author-instances}›
value*‹@{Concept-High-Level-Invariants.author-instances}›
ci/woodpecker/push/build Pipeline was successfulDetails
- Update term context section
- Add option to define a default class for declare_reference*
- Use defined symbol identifiers \<quote> and \<doublequote>
to simplify caveat section about lexical conventions
- Rename Manual theories to avoid issues
when using Syntax.parse_term that is not compatible with
with long-names staring with a number or an underscore
- Rewrite names used as mixfix annotation
for the term-antiquotations to rule out
mixform form excluded symbols
ci/woodpecker/push/build Pipeline was successfulDetails
- Add tests for monitors spanning two theories.
- Fix monitors trace update bug.
When updating a monitor trace when we define a new instance,
the monitor instance is already defined.
But we can not update the instance using the update_instance function
because this function needs a binding, i.e. a short name,
and then it will update or define a new instance if we want
to update a monitor in a super theory whose name is the same as
a monitor defined in the current theory.
Example:
in the super theory:
doc_class monitor_M =
tmM :: int
rejects "test_monitor_A"
accepts "test_monitor_head ~~ test_monitor_B ~~ test_monitor_C"
open_monitor*[test_monitor_M::monitor_M]
in the current theory:
doc_class monitor_M =
tmM :: int
rejects "test_monitor_B"
accepts "test_monitor_E ~~ test_monitor_C"
text*[test_monitor_head2::Concept_MonitorTest1.test_monitor_head]‹›
open_monitor*[test_monitor_M3::monitor_M]
...
==> ERROR : the instantiation of test_monitor_head2
will define a new instance current.test_monitor_M3
when updating the trace of super.test_monitor_M3
Hence we use the update_instance_entry function
which uses long names and only updates the entry.